перекрасить метод внутри run () - PullRequest
0 голосов
/ 24 марта 2019
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 секунды, и они падают в определенное время. Но у меня проблемы с красным ичерные прямоугольники, потому что если я использую метод перекраски для каждой новой краски, он не будет работать правильно. Они выглядят облачно. Как я могу это исправить?

Я хочу создать свои красные и черные прямоугольники следующим образом:

https://i.stack.imgur.com/4DPBL.png

...