我正在做一个使用面向对象编程的项目,在这个项目中,我在水平赛道上与乌龟和野兔赛跑。我见过其他使用 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),并修改类Hare
和Tortoise
从 Player
继承。
public abstract class Player {
protected int position;
public void setPosition(int s){
position = s;
}
public int getPosition(){
return position;
}
}
修改Hare
和Tortoise
如下
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/