目的:
我有一项任务,涉及龟兔赛跑。基本上,我有两个 .gif 文件,一个是乌龟,一个是兔子,它们将显示在一个小程序中,并通过沿 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);
}
}
预期结果:
- tortoise.gif 文件出现在 (10, 10),hare.gif 文件出现在 (10, 137)
- 在随机数生成器掷出 4 之前有一个短暂的延迟(只要它们在 1-10 之间,对我来说创建数字的位置/时间并不重要)
- 乌龟前进 3 个位置(位置的公式是 145x + 10,使乌龟的新坐标为 (445, 10)
- 野兔前进 1 个位置,使其成为新坐标 (155, 10)
- 重复过程,直到一个前进到第 50 个位置(有关每个随机数应该发生的情况,请参阅附加信息)
实际发生了什么
乌龟和兔子出现在适当的位置,但不动。
问题
我希望乌龟和兔子根据计时器推进他们的位置,但是在编译代码并启动小程序后,由于我的代码中的某种错误,他们没有。
我认为可能是错的
我相信问题可能与我如何实现延迟、我使用数组中的元素作为图像的 x 值或我的 do-while 循环和/或我的 case 语句中的变量冲突有关,尽管我没有知道什么是错的,也不知道我应该解决什么。但是,我现在意识到,如果程序确实有效,由于我在顶部附近的 for 循环中使用 randoms.length 作为构造函数,无论发生什么,乌龟和野兔只会改变位置 50 次。我也不知道如何解决这个问题。
附加信息
这是一张图表,说明动物应该根据选择的随机数移动多远:
1-2 = 乌龟移动 +3 位置,兔子移动 + 9
3-5 = 乌龟移动 +3 位置,兔子移动 +1
6 = 乌龟移动 +1 位置,兔子向后移动 -12
7-8 = 乌龟移动 +1 位置,兔子向后移动 -2
9-10 = 乌龟后退 -6 个位置,兔子完全不动
动物不能向后移动超过原始位置(位置 [0])。如果数字低于,动物必须留在那个位置。此规则也适用于大于 50 的职位。
- 这段代码编译得很好,但小程序没有像尝试的那样运行。
- 如果这段代码看起来很乱,我深表歉意,因为我对使用 Java 编码以及使用小程序非常陌生。