【发布时间】:2016-04-03 14:45:29
【问题描述】:
我正在做一个使用面向对象编程的项目,在该项目中,我让一只乌龟和一只兔子沿着水平方向赛跑。我见过使用 applet 和 swing 的其他版本,但我还没有被介绍过,所以我更喜欢使用更简单的图形。
每只动物都有一组动作,其出现概率为 x%(我稍后会详细说明)。
对于兔子,有五种方法:BigHop() - 向右移动 9 格,SmallHop() - 向右移动 1 格,BigSlip() - 向左 12 格,SmallSlip() - 向左移动 2 格,FallAsleep() -根本没有活动。现在,“最左边”的位置是 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 构造随机执行的。例如,30% 的时间,乌龟会 SlowPlod()。
因为失误太多,跑起来要花点时间,但最终我还是赢了(通常是乌龟)。所以,逻辑本身是有效的。
但是,现在这是我显示的唯一输出:
AND THEY'RE OFF!!
TORTOISE WINS!!
当然,这没有数百个“哎哟!!”当两只动物共享相同的位置时会发生这种情况。所以我希望能够在 50 个空格的轨道上显示两只动物的位置。我曾想过使用'_'作为每个空格,但我不知道如何编码乌龟或兔子的运动。
例如,可能的输出是这样的:
_ _ _ _ _ _ _ _ T _ _ _
_ _ _ _ _ _ _ _ H _ _ _
OUCH!!
我只是不确定如何构建这样的轨道并编码 T 和 H 的运动。
我将不胜感激。
【问题讨论】:
-
如果我的大写弄乱了突出显示,我很抱歉。 Java 还是新手。
标签: java oop switch-statement