import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
import java.util.TimerTask;
public class Hunter extends JFrame implements KeyListener{
public class helper extends TimerTask {
@Override
public void run() {
int randomm=(int)(Math.random()*4);
int randommm = (int) ((Math.random() * 490) + 10);
obj obj1 = new Hunter().new obj(randommm, 0);
MyThreadTS k = new MyThreadTS(obj1, getGraphics());
MyThreadS k1 = new MyThreadS(obj1, getGraphics());
MyThreadM k2= new MyThreadM(obj1, getGraphics());
MyThreadF k3 = new MyThreadF(obj1, getGraphics());
MyThreadTF k4 = new MyThreadTF(obj1, getGraphics());
switch (randomm) {
case 0:
k.start();
break;
case 1:
k1.start();
break;
case 2:
k2.start();
break;
case 3:
k3.start();
break;
case 4:
k4.start();
}
}
}
public class obj{
int x,y;
public obj(int x,int y){
this.x=x;
this.y=y;
}
}
public class MyThreadTS extends Thread{
Graphics g;
int x,y;
public MyThreadTS(obj obj,Graphics g){
this.x=obj.x;
this.y=obj.y;
this.g=g;
}
public void run(){
try {
while (y<491) {
if ((x>=positionX && x<=positionX+50)&&
(y>=positionY && y<=positionY+50)
||(x+10>=positionX && x+10<=positionX+50)&&
(y+10>=positionY && y+10<=positionY+50)) {
stop();
}
g.setColor(Color.black);
g.fillRect(x, y, 10, 10);
y++;
Thread.sleep(200);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class MyThreadS extends Thread{
Graphics g;
int x,y;
public MyThreadS(obj obj,Graphics g){
this.x=obj.x;
this.y=obj.y;
this.g=g;
}
public void run(){
try {
while (y<491) {
if ((x>=positionX && x<=positionX+50)&&
(y>=positionY && y<=positionY+50)
||(x+10>=positionX &&
x+10<=positionX+50)&&(y+10>=positionY &&
y+10<=positionY+50)) {
stop();
}
g.fillRect(x, y, 10, 10);
y++;
g.setColor(Color.red);
Thread.sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class MyThreadM extends Thread{
Graphics g;
int x,y;
public MyThreadM(obj obj,Graphics g){
this.x=obj.x;
this.y=obj.y;
this.g=g;
}
public void run(){
try {
while (y<491) {
if ((x>=positionX && x<=positionX+50)&&
(y>=positionY && y<=positionY+50)
||(x+10>=positionX &&
x+10<=positionX+50)&&(y+10>=positionY &&
y+10<=positionY+50)) {
stop();
}
Thread.sleep(50);
y++;
g.setColor(Color.red);
g.fillRect(x, y, 10, 10);
//repaint();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}public class MyThreadF extends Thread{
int x,y;
Graphics g;
public MyThreadF(obj obj,Graphics g){
this.x=obj.x;
this.y=obj.y;
this.g=g;
}
public void run(){
try {
while (y<491) {
if ((x>=positionX && x<=positionX+50)&&
(y>=positionY && y<=positionY+50)
||(x+10>=positionX &&
x+10<=positionX+50)&&(y+10>=positionY &&
y+10<=positionY+50)) {
stop();
}
Thread.sleep(25);
y++;
g.setColor(Color.red);
g.fillRect(x, y, 10, 10);
//repaint();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}public class MyThreadTF extends Thread{
int x,y;
Graphics g;
public MyThreadTF(obj obj,Graphics g){
this.x=obj.x;
this.y=obj.y;
this.g=g;
}
public void run(){
try {
while (y <491) {
if ((x>=positionX && x<=positionX+50)&&
(y>=positionY && y<=positionY+50)
||(x+10>=positionX &&
x+10<=positionX+50)&&(y+10>=positionY &&
y+10<=positionY+50)) {
stop();
}
Thread.sleep(12);
y++;
g.setColor(Color.red);
g.fillRect(x, y, 10, 10);
//repaint();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public Hunter(){
setSize(500, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
addKeyListener(this);
}
int positionX=250,positionY=250;
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.blue);
g.fillRect(positionX,positionY,50,50);
g.setColor(Color.red);
}
public static void main(String [] args){
Hunter game=new Hunter();
game.setVisible(true);
Hunter.helper helper=game.new helper();
Timer timer=new Timer();
timer.schedule(helper,0, 300);
}
@Override
public void keyTyped(KeyEvent keyEvent) {}
@Override
public void keyPressed(KeyEvent keyEvent) {
int keyCode=keyEvent.getKeyCode();
if (keyCode==38){
if(positionY<10){
}
else {
positionY -= 10;
repaint();
}
}
else if(keyCode==40){
if (positionY>440){
}
else {
positionY += 10;
repaint();
}
}
else if(keyCode==37){
if (positionX<10){
}
else {
positionX -= 10;
repaint();
}
}
else if(keyCode==39){
if (positionX>440){
}
else {
positionX += 10;
repaint();
}
}
}
@Override
public void keyReleased(KeyEvent keyEvent) {}
}
в моем коде у меня есть игра охотника за добычей. Голубой квадрат ест красные и черные прямоугольники. Они создаются случайным образом каждые 0,5 секунды, и они падают в определенное время. Но у меня проблемы с красным ичерные прямоугольники, потому что если я использую метод перекраски для каждой новой краски, он не будет работать правильно. Они выглядят облачно. Как я могу это исправить?
Я хочу создать свои красные и черные прямоугольники следующим образом: