在比赛程序中,当它与终点线冲突时,似乎不能宣布胜利者-java

在比赛程序中,当它与终点线冲突时,似乎不能宣布胜利者-java,java,Java,我正在创建一个包含JPanel中移动图形的代码。这是一个有3名赛车手的比赛代码。每次计时器通过时,它们移动的几率为75%,保持的几率为25% 我的问题是让程序在系统控制台中打印出获胜者。出于某种原因,它总是说“橙色”是赢家,只是因为它是我添加的最后一种颜色 当赛跑者到达终点线时,就在十字路口。有一些自定义命令,但它们只是用来绘制背景和设置JPanel。这些很好用。问题在于,出于某种原因,4名跑步者的X值似乎同时是每个值 public class Rivals extends JFrame{

我正在创建一个包含JPanel中移动图形的代码。这是一个有3名赛车手的比赛代码。每次计时器通过时,它们移动的几率为75%,保持的几率为25%

我的问题是让程序在系统控制台中打印出获胜者。出于某种原因,它总是说“橙色”是赢家,只是因为它是我添加的最后一种颜色

当赛跑者到达终点线时,就在十字路口。有一些自定义命令,但它们只是用来绘制背景和设置JPanel。这些很好用。问题在于,出于某种原因,4名跑步者的X值似乎同时是每个值

public class Rivals extends JFrame{

    Rivals(){
        Make.frame(this,new RivalsPane(), 512,512,JFrame.EXIT_ON_CLOSE, false);
    }

public static class RivalsPane extends JPanel implements ActionListener{
    Timer t = new Timer(1,this);
    static int x=70,x2=70,x3=70,x4=70,speed=5;
    static boolean done=false;
    static String win = " wins", winner; 

    RivalsPane(){
        Make.panel(this,512,512,null);  
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Make.FootRaceTrack(g);

        Run(g);

        t.start();
    }

    public void Run(Graphics g) {
        Paint.setPen(Color.blue);
        Paint.shadeOval(g,x,90,30,30);
        Paint.setPen(Color.pink);
        Paint.shadeOval(g,x2,190,30,30);
        Paint.setPen(Color.green);
        Paint.shadeOval(g, x3, 290, 30, 30);
        //This is the last one I set, and it always wins
        Paint.setPen(Color.ORANGE); 
        Paint.shadeOval(g, x4, 390, 30, 30);

        Rectangle r1 = new Rectangle(x-30,60, 60, 60);
        Rectangle r2 = new Rectangle(x-30,160, 60, 60);
        Rectangle r3 = new Rectangle(x-30,260, 60, 60);
        Rectangle r4 = new Rectangle(x-30,360, 60, 60);
        Rectangle r5 = new Rectangle(400,0,512,512);

        if(r1.intersects(r5)) { 
            speed = 0; 
            winner ="Blue"; 
            done = true; 
        } else if(r2.intersects(r5)) { 
            speed=0;
            winner = "Pink"; 
            done = true;
        } else if(r3.intersects(r5)) {
            speed=0;
            winner = "Green";
            done = true;
        } else if(r4.intersects(r5)) {
            speed=0;
            winner = "Orange";
            done = true;
        }
if(done==true) System.out.println(winner + "wins");
    }

    public void actionPerformed(ActionEvent e) {
        double rand1 = Math.random();
        double rand2 = Math.random();
        double rand3 = Math.random();
        double rand4 = Math.random();
        if(rand1<.75)x+=speed;
        if(rand2<.75)x2+=speed;
        if(rand3<.75)x3+=speed;
        if(rand4<.75)x4+=speed;
        repaint();
    }   
}


public static void main(String[] args) {
    Do.showFrame(new Rivals());
}   
}
public类扩展JFrame{
竞争对手(){
Make.frame(这个,new RivalsPane(),512512,JFrame.EXIT_ON_CLOSE,false);
}
公共静态类RivalsPane扩展了JPanel实现ActionListener{
定时器t=新定时器(1,此);
静态整数x=70,x2=70,x3=70,x4=70,速度=5;
静态布尔值done=false;
静态字符串win=“wins”,winner;
里瓦尔斯潘(){
Make.面板(此,512512,空);
}
公共组件(图形g){
超级组件(g);
制造.跑步道(g);;
Run(g);
t、 start();
}
公共无效运行(图形g){
油漆。setPen(颜色。蓝色);
shadeOval(g,x,90,30,30);
油漆。setPen(颜色。粉红色);
油漆.shadeOval(g,X2190,30,30);
油漆。setPen(颜色。绿色);
shadeOval(g,x3,290,30,30);
//这是我最后一盘,它总是赢
油漆。设置笔(颜色。橙色);
绘制shadeOval(g、x4、390、30、30);
矩形r1=新矩形(x-30,60,60,60);
矩形r2=新矩形(x-30160,60,60);
矩形r3=新矩形(x-30260,60,60);
矩形r4=新矩形(x-30360,60,60);
矩形r5=新矩形(400,0512512);
如果(r1.与(r5)相交{
速度=0;
winner=“蓝色”;
完成=正确;
}else如果(r2.与(r5)相交{
速度=0;
获胜者=“粉红”;
完成=正确;
}否则如果(r3.相交(r5)){
速度=0;
获胜者=“绿色”;
完成=正确;
}else if(r4.相交(r5)){
速度=0;
获胜者=“橙色”;
完成=正确;
}
if(done==true)System.out.println(winner+“wins”);
}
已执行的公共无效操作(操作事件e){
double rand1=Math.random();
double rand2=Math.random();
double rand3=Math.random();
double rand4=Math.random();

if(rand1我所有的边界矩形都使用x,只适用于蓝色。将x更改为x2、x3和x4即可工作。归功于@Alex

因为所有矩形的
x
位置取决于
x
变量,而不是
x2、x3、x4
。在run()中的最后一条if语句中。

),您已经省略了括号。这将语句“winner=orange;”保留在if语句之外。您应该使用代码编辑器,它将为您进行缩进,这样这些错误就会很明显。Atom是免费的,如果您使用的是Windows,notepad++是免费的。我给出了问题a+1,因为您包含了代码和一个很好的解释没有人要求。在放入括号后,现在它只显示蓝色作为赢家。为什么所有矩形的
x
位置取决于
x
变量而不是
x2、x3、x4