gpt4 book ai didi

java - yahtzee 中的直线算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:39 26 4
gpt4 key购买 nike

对于一项学校作业,我们正在努力用 java 实现 yahtzee 游戏,但我在为直道(小直道和大直道,这意味着 4/5 连续数字用于小直道和 5/5 表示大)。

我做了一个我认为应该有效的算法,但实际上它总是输出 0,所以我应该遗漏了一些东西:

private void straights(int category) {
Arrays.sort(dices);
int nonConsecCount = 0;
for(int currDice = 0; currDice < N_DICE - 2; currDice++) {
if(dices[currDice] != dices[currDice + 1] + 1) {
nonConsecCount++;
}
}
if(nonConsecCount == 0 && category == LARGE_STRAIGHT) {
score[currPlayer - 1][category - 1] = 40;
display.updateScorecard(category, currPlayer, 40);
} else if(nonConsecCount <= 1 && category == SMALL_STRAIGHT) {
score[currPlayer - 1][category - 1] = 30;
display.updateScorecard(category, currPlayer, 30);
} else {
score[currPlayer - 1][category - 1] = 0;
display.updateScorecard(category, currPlayer, 0);
}
}

N_DICE等于 5。

我的算法背后的理论是;每次你在(排序的)骰子值数组中找到一个没有连续数字作为下一个数字的数字时,将非连续计数加一,最后在将分数分发给玩家时检查这个计数器.

如有任何帮助,我们将不胜感激!

最佳答案

我根据游戏规则快速浏览了wikipedia中的文章

Small Straight - Is 4 sequential dices (30 score) that is 
1,2,3,4 or 2,3,4,5 or 3,4,5,6

Large Straight - Is 5 sequential dices (40 score) that is
1,2,3,4,5 or 2,3,4,5,6

如果小顺子,那么您应该有一个等于 1 的 nonConsecCount,因为 5 - 1 是 4,这给了我们四个连续的骰子。如果 large straight,则 nonConseCount 应该等于 0,因为 5 - 0 给我们所有五个元素连续。

如果我对游戏的理解是正确的(考虑到我只是略读了一下),您需要在代码中进行以下修改:

  • 你的 for 循环条件应该是 N_DICE - 1,这会导致for 循环执行 4 次,比数组的大小少一次,因此,你保证不会得到 ArrayOutOfBoundException
  • 您需要更改您的 if 条件,以便添加到值条件的左侧部分,然后检查条件右侧部分的值是否领先。因此,交换后您可以使用 N_DICE - 1 而不是 N_DICE - 2。N_DICE - 2 跳过一个数组元素,只检查 3 个连续的元素(不是游戏规则所说的)。

对您的代码进行以下更改:

int nonConsecCount = 0;
for(int currDice = 0; currDice < N_DICE - 1; currDice++) {
if(dices[currDice] + 1 != dices[currDice + 1]) {
System.out.println("failed consecutive match!");
nonConsecCount++;
} else {
System.out.println("passed consecutive match for "+ dices[currDice]);
}
}
System.out.println(nonConsecCount);

我在上面的代码中提供了以下骰子,并得到了 nonConsecCount,如注释行所示:

int[] dices = new int[]{3,4,5,1,2};
//output 0 - this is largest straight

int[] dices = new int[]{3,4,5,6,2};
//output 0 - this is largest straight too

int[] dices = new int[]{3,4,5,2,2};
//output 1 - this is smallest straight

int[] dices = new int[]{3,4,2,2,2};
//output 2 - this is none of the two

关于java - yahtzee 中的直线算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33928077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com