Applet不重复循环

时间:2013-11-02 23:38:34

标签: java applet switch-statement do-while

目的:

我的任务涉及乌龟和野兔之间的比赛。基本上,我有两个.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);
    }
}

预期结果:

  • tortoise.gif文件显示在(10,10),hare.gif文件显示在(10,137)
  • 在随机数生成器滚动4之前有一个短暂的延迟(对我来说无关紧要,只要它们在1-10之间创建数字)
  • 乌龟前进3个位置(位置公式为145x + 10,制作乌龟的新坐标(445,10)
  • 野兔前进1个位置,使其成为新的坐标(155,10)
  • 重复一个过程直到一个进入第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的职位。

  • 此代码编译良好,但小程序无法正常运行。
  • 我很抱歉这段代码看起来非常混乱,因为我对使用Java进行编码以及使用applet相当陌生。

1 个答案:

答案 0 :(得分:0)

似乎你应该改变

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

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

因为t和h都从0开始,你想在它们低于或等于50时循环,而不是在它们高于或等于50时循环。