我正在为骰子游戏做这个,如果掷骰子是1或者连续两次掷骰子,则切换玩家。我的朋友代码工作但我的代码没有,看起来我的if语句完成了同样的事情。
此代码有效(朋友代码):
if (dice === 1 || diceTwo === 1) {
nextPlayer();
} else if (doubleSix === 6) {
if (dice === 6 || diceTwo === 6) {
roundScore = 0;
score[activePlayer] = 0;
nextPlayer();
}
} else {
roundScore += (dice + diceTwo);
document.querySelector('#current-' + activePlayer).textContent = roundScore;
doubleSix = dice;
}
此代码不是(我的代码):
if (dice !== 1 || diceTwo !== 1) {
//Add score
if (doubleSix === 6 && dice === 6) {
roundScore = 0;
score = 0;
nextPlayer();
} else if {
roundScore += (dice + diceTwo) ;
document.querySelector('#current-' + activePlayer).textContent = roundScore;
doubleSix = dice;
}
} else {
//Next Player
nextPlayer();
}
答案 0 :(得分:3)
首先,您的朋友代码只需要一个骰子为1.您需要两个骰子为1才能运行nextPlayer
这是因为所谓的De Morgan's laws
您的代码应该
if (dice !== 1 && diceTwo !== 1) {
建议的改进..
作为一般规则,调用类似性质的项目dice
,diceTwo
等是一个坏主意。拥有dice
数组要好得多,就好像你一样增加骰子的数量,代码仍然无需修改即可使用。
另外,我不确定你为什么只在前一轮的第一个骰子中寻找六个,加上本轮的任何骰子。我原本以为你在上一轮中找到任意六个,本轮中任意六个......
你的朋友代码会更好......
var foundSix = false;
// method to sum array
function sum(total, num) {
return total + num;
}
// ... more code
// check for a 1...
if (dice.indexOf(1) >= 0) {
nextPlayer();
} else if (foundSix) {
// check for a 6
if (dice.indexOf(6) >= 0) {
roundScore = 0;
score[activePlayer] = 0;
nextPlayer();
}
} else {
// roundScore += (dice[0] + dice[1]);
// use array reduce here...
roundScore = dice.reduce( sum, roundScore);
document.querySelector('#current-' + activePlayer).textContent = roundScore;
// doubleSix = dice[0];
// check ALL dice for a six..
foundSix = (dice.indexOf(6) >= 0);
}
答案 1 :(得分:1)
阅读De Morgan's rule。 dice === 1 || diceTwo === 1
的否定不是dice !== 1 || diceTwo !== 1
,而是dice !== 1 && diceTwo !== 1
。
用语言:“其中一个骰子是1”的反面不是“其中一个骰子不是1”,而是“两个骰子都不是1”。
答案 2 :(得分:0)
你的if语句没有做同样的事情。
你朋友的代码:
if (dice === 1 || diceTwo === 1) {
// dice is 1, or diceTwo is 1.
} else {
// neither dice nor diceTwo is 1.
}
您的代码:
if (dice !== 1 || diceTwo !== 1) {
// dice is not 1, or dice2 is not 1. In other words this will match all cases except snake eyes.
} else {
// both dice and diceTwo === 1
}
答案 3 :(得分:0)
快速浏览一下,但不应该这样:(骰子!== 1 || diceTwo!== 1)改为AND这样:(骰子!== 1&& diceTwo! == 1)因为你正在检查一个骰子和骰子都没有掷过一个?