java - 兔龟赛跑视觉展示

标签 java oop switch-statement

我正在做一个使用面向对象编程的项目,在这个项目中,我在水平赛道上与乌龟和野兔赛跑。我见过其他使用 applet 和 swing 的版本,但我还没有被介绍过这些,所以我宁愿继续使用更简单的图形。

每只动物都有一组发生 x 百分比的 Action (我稍后会详细说明)。

对于兔子,有五种方法:BigHop() - 向右移动 9 个方格,SmallHop() - 向右移动 1 个方格,BigSlip() - 向左移动 12 个方格,SmallSlip() - 向左移动 2 个方格,以及 FallAsleep() -根本没有 Activity 。现在,“最左边”的位置是 1,所以如果兔子在第 6 个方格,大滑仍然只会让它回到 1。(不是 -6)

对于乌龟,共有三种方法:FastPlod() - 向右移动 3 个方格,SlowPlod() - 向右移动 1 个方格,以及 Slip() - 向左移动 6 个方格,相同的规则适用于滑动。

到目前为止,该程序包含一个 Hare 类、一个 Tortoise 类和一个 Race 类。

这是 Hare 类:

 public class Hare {
        private int position;

        public void setPosition(int s){
            position = s;
        }

        public int getPosition(){
            return position;
        }

        public void BigHop(){
            position += 9;
        }

        public void SmallHop(){
            position += 1;
        }

        public void BigSlip(){
            if (position > 12){
                position -= 12;
            }
            else{
                position = 1;
            }
        }

        public void SmallSlip(){
            if (position > 2){
                position -= 2;
            }
            else{
                position = 1;
            }
        }

        public void FallAsleep(){
            position = position;
        }
    }

乌龟类:

public class Tortoise {
    private int position;

    public void setPosition(int s){
        position = s;
    }

    public int getPosition(){
        return position;
    }

    public void FastPlod(){
        position += 3;
    }

    public void SlowPlod(){
        position += 1;
    }


    public void Slip(){
        if (position > 6){
            position -= 6;
        }
        else{
            position = 1;
        }
    }
}

Race 类实际执行比赛。

public class Race {
    public static void main(String[] args){
        Hare myHare = new Hare();
        Tortoise myTortoise = new Tortoise();

        myHare.setPosition(1);
        myTortoise.setPosition(1);

        System.out.println("AND THEY'RE OFF!!");

        while (myHare.getPosition() > 0){
            int n = (int)(Math.random()*10);
            switch (n){
                case 1:
                    myHare.BigHop();
                    myTortoise.FastPlod();
                case 2:
                    myHare.BigHop();
                    myTortoise.FastPlod();
                case 3:
                    myHare.SmallHop();
                    myTortoise.FastPlod();
                case 4:
                    myHare.SmallHop();
                    myTortoise.FastPlod();
                case 5:
                    myHare.SmallHop();
                    myTortoise.FastPlod();
                case 6:
                    myHare.BigSlip();
                    myTortoise.SlowPlod();
                case 7:
                    myHare.SmallSlip();
                    myTortoise.SlowPlod();
                case 8:
                    myHare.SmallSlip();
                    myTortoise.SlowPlod();
                case 9:
                    myHare.FallAsleep();
                    myTortoise.Slip();
                case 10:
                    myHare.FallAsleep();
                    myTortoise.Slip();
            }
            if (myHare.getPosition() == myTortoise.getPosition()){
                System.out.println("OUCH!!");
            }
            if (myHare.getPosition() == 50 | myTortoise.getPosition() == 50){
                if (myHare.getPosition() == 50){
                    System.out.println("HARE WINS!!");
                    break;
                }
                else{
                    if (myHare.getPosition() == myTortoise.getPosition()){
                        System.out.println("IT'S A TIE!!");
                        break;
                    }
                    else{
                        System.out.println("TORTOISE WINS!!");
                        break;
                    }
                }
            }
        }

逻辑本身有效。比赛的构建方式是赛道上有五十个空间(赛道本身没有以图形方式构建,这是我遇到的麻烦)。使用 switch 结构随机执行每只动物的 Action 。例如,有 30% 的时间,乌龟会 SlowPlod()。

因为有太多的失误,我需要一段时间才能跑完,但最终我赢了(通常是乌龟)。因此,逻辑本身是有效的。

但是,现在这是我显示的唯一输出:

然后他们关了!! 乌龟赢了!!

当然,没有数百个“OUCH!!”当两只动物共享相同位置时会发生这种情况。所以我希望能够在 50 个空格的轨道上显示两个动物的位置。我想过使用“_”作为每个空格,但我不确定如何编写乌龟或野兔的运动代码。

例如,可能的输出是这样的:

_ _ _ _ _ _ _ _ T _ _ _ _ _ _ _ _ _ _ H _ _ _

哎呀!!

我只是不确定如何构建这样的轨道并编写 T 和 H 的移动代码。

如果有任何帮助,我将不胜感激。

最佳答案

看来您在 switch 中遗漏了 break;

        switch (n) {
            case 1:
                myHare.BigHop();
                myTortoise.FastPlod();
                break;
            case 2:
                myHare.BigHop();
                myTortoise.FastPlod();
                break;
            ...
            }

您将需要在 Race 类中编写另一个方法。

private static void printTrack(Player player, char symbol) {
    int position = player.getPosition();
    for (int i = 0; i < position; i++)
        System.out.print('_');

    System.out.print(symbol);

    for (int i = position + 1; i < 50; i++)
        System.out.print('_');

    System.out.println();
}

但在此之前,您需要创建一个(抽象)类或一个名为Player 的接口(interface),并修改类HareTortoisePlayer 继承。

public abstract class Player {
    protected int position;

    public void setPosition(int s){
        position = s;
    }

    public int getPosition(){
        return position;
    }
}

修改HareTortoise如下

public class Hare extends Player {
    /* 
    private int position;

    public void setPosition(int s){
        position = s;
    }

    public int getPosition(){
        return position;
    }
    */
    // The rest should be the same
    // Do the same with the class "Tortoise"
    ...
}

switch 之后,您可以调用该方法。

        switch (n) {
            ...
        }
        printTrack(myHare, 'H');
        printTrack(myTortoise, 'T');
        ...

并且您的代码中某处有一个 | 运算符。您需要将其替换为 ||

看看这是否有效。

关于java - 兔龟赛跑视觉展示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36386864/

相关文章:

Objective-C 子类设置

javascript - 如何通过单击包含其他视频源的链接来获取视频源 [Java 脚本]

swift - 在分段控制开关中加载UICollectionViewController

java - SmartGWT ListGrid 大数据集问题

java - Android 中的 HTTP 获取和发布

c++ - 将引用作为参数传递给抽象类中的方法

java - 如何在android中使用带有 'onCheckedChanged'方法的switch语句?

java - java中的拆分和替换方法

java - Android:检测何时启用软键盘

c++将仿函数和参数传递给一个方法