目的:
我的任务涉及乌龟和野兔之间的比赛。基本上,我有两个.gif文件,一个乌龟和一个野兔,它们将在applet中显示并通过沿x轴前进而相互竞赛。在这个过程中,我必须使用随机数生成器来生成不同的“移动”,其中动物(图像文件)向前或向后移动一定数量的位置。必须重复该循环,直到其中一只动物到达第50位。在两只动物的每次移动之间也必须有某种时间延迟。
守则:
import java.util.Random;
import java.awt.Graphics;
import java.applet.Applet;
import java.awt.Image;
import java.awt.Color;
public class ProjectTwo extends Applet
{
Image tortoise, hare;
Random generator = new Random();
int[] positions = new int [50];
int[] randoms = new int[50];
public int t = 0;
public int h = 0;
public int s = 0;
public void init()
{
for (int i = 0; i < positions.length; i++)
{
positions[i] = ((i * 145) + 10);
}
for (int x = 0; x < randoms.length; x++)
{
randoms[x] = generator.nextInt(6) + 1;
}
tortoise = getImage( getDocumentBase(), "images/tortoise.gif" );
hare = getImage( getDocumentBase(), "images/hare.gif" );
}
public void delay()
{
for(int g = 0; g <= 90000000; g++) ;
}
public void paint (Graphics g)
{
g.drawImage (tortoise, positions[0], 10, this);
g.drawImage (hare, positions[0], 137, this);
delay();delay();delay();
do
{
switch (randoms[s])
{
case 1:
case 2:
t += 3;
h += 9;
if (t >= 50)
{
g.drawImage (tortoise, positions[50], 10, this);
}
else
{
g.drawImage (tortoise, positions[t], 10, this);
}
if (h >= 50)
{
g.drawImage (hare, positions[50], 137, this);
}
else
{
g.drawImage (hare, positions[h], 137, this);
}
s++;
break;
case 3:
case 4:
case 5:
t += 3;
h += 1;
if (t >= 50)
{
g.drawImage (tortoise, positions[50], 10, this);
}
else
{
g.drawImage (tortoise, positions[t], 10, this);
}
if (h >= 50)
{
g.drawImage (hare, positions[50], 137, this);
}
else
{
g.drawImage (hare, positions[h], 137, this);
}
s++;
break;
case 6:
t += 1;
h -= -12;
if (t >= 50)
{
g.drawImage (tortoise, positions[50], 10, this);
}
else
{
g.drawImage (tortoise, positions[t], 10, this);
}
if (h <= 0)
{
g.drawImage (hare, positions[0], 137, this);
t = 0;
}
else
{
g.drawImage (hare, positions[h], 137, this);
}
s++;
break;
case 7:
case 8:
t += 1;
h -= 2;
if (t >= 50)
{
g.drawImage (tortoise, positions[50], 10, this);
}
else
{
g.drawImage (tortoise, positions[t], 10, this);
}
if (h <= 0)
{
g.drawImage (hare, positions[0], 137, this);
t = 0;
}
else
{
g.drawImage (hare, positions[h], 137, this);
}
s++;
break;
case 9:
case 10:
t -= 6;
if (t <= 0)
{
g.drawImage (tortoise, positions[0], 10, this);
t = 0;
}
else
{
g.drawImage (tortoise, positions[t], 10, this);
}
g.drawImage (hare, positions[h], 137, this);
s++;
break;
}
} while (t >= 50 | h >= 50);
}
}
预期结果:
实际发生的事情
乌龟和野兔出现在适当的地方,但不要动。
问题
我希望乌龟和兔子根据计时器推进他们的位置,但是在编译代码并启动applet之后,由于我的代码中出现了某种错误,他们没有。
我认为可能错了
我认为问题可能与我如何实现延迟有关,我使用数组中的元素作为图像的x值,或者在我的do-while循环和/或我的case语句中使用冲突变量,尽管我不知道什么是错,也不知道我应该解决什么。但是,我现在意识到如果程序确实有效,由于我使用randoms.length作为我顶部附近的for循环中的构造函数,乌龟和野兔只会在停止前改变位置50次,无论如何。我也不知道如何解决这个问题。
其他信息
以下是根据所选随机数移动动物的距离图表:
1-2 =乌龟移动+3个位置,野兔移动+9
3-5 =乌龟移动+3个位置,野兔移动+1
6 =乌龟移动+1位置,野兔移动-12
7-8 =乌龟移动+1位置,野兔移回-2
9-10 =乌龟向后移动-6个位置,野兔根本不移动
动物可以不比原始位置(位置[0])向后移动。如果数量低于此值,动物必须保持在该位置。此规则也适用于大于50的职位。
答案 0 :(得分:0)
似乎你应该改变
while (t >= 50 | h >= 50)
到
while (t <= 50 | h <= 50)
因为t和h都从0开始,你想在它们低于或等于50时循环,而不是在它们高于或等于50时循环。