gem 棋是我用 Java 编写的一款有趣的游戏。在下图中,我们看到了 gem 棋游戏板。对于我的问题,您需要知道 A1-A6、B1-B6 称为坑,而大坑称为 kalahs。
(来源:pressmantoy.com)
A1-A6 坑和右边的 kalah 属于玩家 A,B1-B6 坑和左边的 kalah 属于玩家 B。
当游戏板一侧的所有六个坑都为空或当一名玩家的卡拉中有超过 24 个坑时,游戏结束。这是我尝试用 boolean 方法编写的程序(如果有获胜者则返回 true,以便我可以使用其他方法来判断获胜者是谁):
public boolean isThereAWinner() {
ArrayList <SuperPit> pitsOfOwner = owner.getmyPits();
ArrayList <SuperPit> pitsOfOpponent = owner.getopponent().getmyPits();
for (int i = 0; i < pitsOfOwner.size(); i++) {
if (pitsOfOwner.get(i).isValidPlayOption() == true)
return false;
}
for (int i = 0; i < pitsOfOpponent.size(); i++) {
if (pitsOfOpponent.get(i).isValidPlayOption() == true)
return false;
}
if (owner.getKalah().getSeed() > 24) return true;
return false;
}
地点:
protected int seed;
public int getSeed() {
return seed;
}
public boolean isValidPlayOption() {
if (getSeed() > 0) return true;
else return false;
}
oppositepit() 和 nextPit() 方法有效。 myPits ArrayLists 包含属于两个各自球员的坑。
我认为这种方法应该可行,因为如果一名玩家的坑中不再有种子,游戏就会停止。每次玩家移动时都会运行 isThereAWinner() 方法。
不幸的是,该方法总是返回 false。我不知道为什么,希望这里有人能给我一些见解。
最佳答案
它总是返回 false 因为:
for (int i = 0; i < pitsOfOwner.size(); i++) {
if (pitsOfOwner.get(i).isValidPlayOption() == true)
return false;
}
当任何坑有种子时,它返回 false,即使另一个板完全是空的。
怎么样:
int sum1 = 0;
for (int i = 0; i < pitsOfOwner.size(); i++) {
sum1 += pitsOfOwner.get(i).getSeed();
}
if (sum1 == 0) return true; // all pits are empty
关于java - 这种确定 gem 棋获胜者的方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18854823/