Java 如何显示我的小程序的单个移动?

Java 如何显示我的小程序的单个移动?,java,applet,Java,Applet,我目前正在制作一个小程序,模拟龟兔赛跑。他们每个人都有各自的动作,随机挑选。我的小程序可以工作,但它只显示乌龟获胜的比赛结束。我希望它能像gif一样显示龟兔各自的动作 这是我的密码: import java.applet.Applet; import java.awt.Graphics; import java.awt.Image; import java.awt.Color; import java.awt.Font; public class Project2 extends Applet

我目前正在制作一个小程序,模拟龟兔赛跑。他们每个人都有各自的动作,随机挑选。我的小程序可以工作,但它只显示乌龟获胜的比赛结束。我希望它能像gif一样显示龟兔各自的动作

这是我的密码:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Color;
import java.awt.Font;

public class Project2 extends Applet
{
Image tortoise, hare;
int tortoiseXPos = 180, hareXPos = 180;
final int tortoiseYPos = 50, hareYPos = 400, SQUARE = 20;
int move;

public void init()
{
    tortoise = getImage(getDocumentBase(), "tortoise.gif");
    hare = getImage(getDocumentBase(), "hare.gif");
}

public void gameControl()
{
    //1200 is finish line
    while((tortoiseXPos < 1200) || (hareXPos < 1200))
    {
        move =  (int)(Math.random() * 10);
        tortoiseMoves(move);
        hareMoves(move);

        for(int i = 0; i < 10; i++)
        {
            delay();
        }
    }


}
public void paint(Graphics field)
{
    drawField(field);
    drawMove(field);
    //Display winner when they get to the finish line
    if(tortoiseXPos >= 1200)
    {
            field.setFont(new Font("Times New Roman", Font.ITALIC, 72));
            field.drawString("Tortoise Wins", 650, 240);
        }
        else if(hareXPos >= 1200)
        {
            field.setFont(new Font("Times New Roman", Font.ITALIC, 72));
            field.drawString("Tortoise Wins!!", 650, 240);
        }
}   

public void drawField(Graphics field)
{
    setBackground(Color.green);
    Font f  = new Font("Times New Roman", Font.BOLD, 48);
    field.setFont(f);
    field.drawString("Tortoise", 0, 75);
    field.drawString("Hare", 0, 425);

    //fill alternating black and white rectangles       
    field.setColor(Color.black);
    int x = 180;
    for(int i = 0; i < 25; i++)
    {
        field.fillRect(x, 50, SQUARE, 50);
        field.fillRect(x, 400, SQUARE, 50);
        x += (SQUARE * 2);
    }
    field.setColor(Color.white);
    x = 200;
    for(int i = 0; i < 25; i++)
    {
        field.fillRect(x, 50, SQUARE, 50);
        field.fillRect(x, 400, SQUARE, 50);
        x += (SQUARE * 2);
    }
}

public void clearMove(Graphics s)
{
}

public void drawMove(Graphics s)
{
    gameControl();
    s.drawImage(tortoise, tortoiseXPos, 50, this);
    s.drawImage(hare, hareXPos, 400, this);

}
public void tortoiseMoves(int move)
{
    //Moves for Tortoise
    if(move <= 5)
    {
        tortoiseXPos += (3 * SQUARE);
    }
    else if(move <= 8)
    {
        tortoiseXPos += SQUARE;
    }
    else if(move <= 10)
    {
        tortoiseXPos -= (6 * SQUARE);
    }

    if(tortoiseXPos < 0)
    {
        tortoiseXPos = 0;
    }

    if(tortoiseXPos > 1200)
    {
        tortoiseXPos = 1200;
    }
}

public void hareMoves(int move)
{
    //Moves for Hare
    if(move <= 2)
    {
        hareXPos += (9 * SQUARE);
    }
    if(move <= 5)
    {
        hareXPos += (SQUARE);
    }
    if(move <= 6)
    {
        hareXPos -= (SQUARE);
    }
    if(move <= 8)
    {
        hareXPos -= (2 * SQUARE);
    }
    if(move <= 10)
    {
        hareXPos = hareXPos;
    }

    if(hareXPos < 0)
    {
        hareXPos = 0;
    }

    if(hareXPos > 1200)
    {
        hareXPos = 1200;
    }
}

public void delay()
{
    //To see individual moves
    for(int i = 0; i <= 90000000; i++)
    {}
}
}
import java.applet.applet;
导入java.awt.Graphics;
导入java.awt.Image;
导入java.awt.Color;
导入java.awt.Font;
公共类Project2扩展了Applet
{
形象乌龟、野兔;
内特乌龟=180,黑龟=180;
最终整型乌龟位置=50,兔子位置=400,正方形=20;
int-move;
公共void init()
{
tortoise=getImage(getDocumentBase(),“tortoise.gif”);
hare=getImage(getDocumentBase(),“hare.gif”);
}
公共控制()
{
//1200是终点线
而((龟类<1200)| |(龟类<1200))
{
move=(int)(Math.random()*10);
乌龟(移动);
hareMoves(移动);
对于(int i=0;i<10;i++)
{
延迟();
}
}
}
公共空白绘制(图形字段)
{
抽油场(场);
拖运(场);
//当他们到达终点线时显示赢家
如果(乌龟数量>=1200)
{
field.setFont(新字体(“Times new Roman”,Font.ITALIC,72));
拉绳(“乌龟赢”,650,240);
}
否则如果(harexps>=1200)
{
field.setFont(新字体(“Times new Roman”,Font.ITALIC,72));
拉绳(“乌龟赢!!”,650,240);
}
}   
公共空白绘图字段(图形字段)
{
挫折背景(颜色:绿色);
Font f=新字体(“Times new Roman”,Font.BOLD,48);
字段设置字体(f);
领域。拉绳(“乌龟”,0,75);
字段。抽绳(“兔子”,0425);
//交替填充黑白矩形
field.setColor(Color.black);
int x=180;
对于(int i=0;i<25;i++)
{
fillRect字段(x,50,平方,50);
fillRect字段(x,400,正方形,50);
x+=(平方*2);
}
field.setColor(Color.white);
x=200;
对于(int i=0;i<25;i++)
{
fillRect字段(x,50,平方,50);
fillRect字段(x,400,正方形,50);
x+=(平方*2);
}
}
公共无效清除移动(图形s)
{
}
公共空间移动(图形s)
{
gameControl();
s、 drawImage(乌龟,乌龟,50,本);
s、 drawImage(hare、hareXPos、400、this);
}
公共空陆龟(内移)
{
//乌龟的招式

如果(移动)将两个数组添加到你的类中,并存储每个参赛者的每个移动。然后,随着比赛的进行,在屏幕上“绘制”每个参赛者的分数。

你总是看到“乌龟赢”,因为即使兔子赢了,你也总是画那个字符串。你需要写“兔子赢”相反,当兔子赢的时候。@ErwinBolwidt谢谢,我没有领会到我希望它们实时显示,而不是在最后显示。这样你可以看到小程序执行时乌龟和兔子在屏幕上四处移动。根据需要更新答案。基本上,在绘制下一步之前在数组中绘制点。你可以添加一个方法that获取数组并绘制点,然后在paint()方法中调用它。