0

目的:

我有一项任务,涉及龟兔赛跑。基本上,我有两个 .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 编码以及使用小程序非常陌生。
4

1 回答 1

0

看来你应该改变

while (t >= 50 | h >= 50)

while (t <= 50 | h <= 50)

因为 t 和 h 都从 0 开始,并且您希望在它们低于或等于 50 时循环,而不是在它们高于或等于 50 时循环。

于 2013-11-02T23:48:32.803 回答