我的任务:
Stix游戏 - 类似于前一段时间在“Survivor,Thailand”上玩的游戏 - 在简化版本中看起来像这样:
它由两名球员(在Survivor中有两个以上,但在这里我们只处理两个)。桌子上放着许多木棍(比如火柴)。第一个玩家需要1,2或3支,只要桌子上有很多人。然后第二个玩家需要1,2或3支(如果可能的话),依此类推。拿最后一根棍子的人输了。
这是我的班级:
public class StixBoard
{
public int number;
public StixBoard(int number)
{
this.number = number;
}
public int getNumStix()
{
return number;
}
public boolean takeStix(int number)
{
int take = 0;
while(take != number && number <= 3 && number > 0)
{
number = this.number - take;
take++;
}
if(this.number >= 1 && this.number <= 3)
{
number = number - this.number;
System.out.println("Number of sticks on board:" + number);
return(true);
}
else
System.out.println("Illegeal Move");
return(false);
}
public boolean isGameOver()
{
if(number >=1)
{
return(true);
}
else
return false;
}
public String toString()
{
return(getNumStix() + " Stix Remaining.");
}
}
这是我的测试员:
public class StixGame
{
public static void main(String[] args)
{
StixBoard game1 = new StixBoard(6);
System.out.println(game1.getNumStix());
System.out.println(game1.takeStix(1));
System.out.println(game1.getNumStix());
}
}
我似乎无法回避这个输出:
6
Illegeal Move
false
6
答案 0 :(得分:1)
你使用变量number
的方式太多次了,这会让你的代码非常混乱......使用IDE将类中的变量重命名为totalStix
,问题就会立即显现出来。
takeStix
方法不需要while循环。所有这一切都发生在一个玩家正在采取行动,对吧?所以删除该代码。take
,因为这就是你要带走的东西。你留下了以下代码(还有一些其他小调整):
public class StixBoard
{
public int totalStix;
public StixBoard(int number)
{
this.totalStix = number;
}
public int getNumStix()
{
return totalStix;
}
public boolean takeStix(int take)
{
if(take >= 1 && take <= 3)
{
totalStix -= take;
System.out.println("Number of sticks on board:" + totalStix);
return true;
}
System.out.println("Illegeal Move");
return false ;
}
public boolean isGameOver()
{
if(totalStix >=1)
{
return(true);
}
else
return false;
}
public String toString()
{
return(getNumStix() + " Stix Remaining.");
}
}