javascript - yahtzee 的threeofakind 和fourofakind 函数
问题描述
我在我的 yahtzee 游戏中检测和评分 threeOfAKind 和fourOfAKind 的代码仅在某些时候有效。如果我将数组 [5,1,1,1,1] 输入到我的fourOfAKind 循环中,则输出未定义,我不知道为什么。这是我的代码:
//threeOfAKind
if(nnb==3){
for(i = 0; i < (dice.length - nnb); i++){
if((dice[i] == dice[i+1])
&& (dice[i] == dice[i+2])){
score = dice[i]*nnb;
}
}
}
//fourOfAKind
else if(nnb==4){
for(i = 0; i < (dice.length - nnb); i++){
if((dice[i] == dice[i+1])
&& (dice[i] == dice[i+2])
&& (dice[i] == dice[i+3])){
score = dice[i]*nnb;
}
}
}
解决方案
循环的限制是 1,应该是,dice.length - nnb + 1
或者您可以将条件更改为<=
. 例如,如果您要查找 3 个,则需要检查从 0、1 和 2 开始的范围;因为5-3 = 2
,你需要包含i = 2
在你的循环中。
一旦发现条件满足,就应该跳出循环。
//threeOfAKind
if(nnb==3){
for(i = 0; i <= (dice.length - nnb); i++){
if((dice[i] == dice[i+1])
&& (dice[i] == dice[i+2])){
score = dice[i]*nnb;
break;
}
}
}
//fourOfAKind
else if(nnb==4){
for(i = 0; i <= (dice.length - nnb); i++){
if((dice[i] == dice[i+1])
&& (dice[i] == dice[i+2])
&& (dice[i] == dice[i+3])){
score = dice[i]*nnb;
break;
}
}
}
您可以将其概括为适用于任何值的单个循环nnb
,因此您不必对索引进行硬编码。
for (let i = 0; i <= dice.length - nnb; i++) {
let first = dice[i];
let matched = true;
for (let j = 1; j < nnb; j++) {
if (dice[i+j] != first) {
matched = false;
break;
}
}
if (matched) {
score = first * nnb;
break;
}
}
推荐阅读
- python - 如何用漂亮的汤在python中的其他特定类之后获得一个特定类?
- sql - 按每个嘴巴的领土所有者计算所有寄存器
- c# - 无法使用 MouseKeyHook 检测全局鼠标按下
- python - 如何从文件中加载一个类,只给它在 Python 中的字符串规范?
- regex - 新手的基本正则表达式
- python - 使用第二列的百分比变化填充列中的空值,同时按第三列分组
- python - 有没有办法用相对于 repo 的路径读取文件,而不取决于该文件在计算机上的保存位置?
- python - Pyspark 和 Graphframes:聚合消息功率均值
- javascript - 我可以在保存之前使用 webpack 挂钩来修改文件输出吗?
- react-native - 手动管理/删除每个目标自动链接的 pod