我有一个游戏子手。但是我试图做出这样的逻辑:如果用户输入了错误的字母,那么用户将收到一条消息,提示他/她必须再次尝试。
但是现在,即使用户选择了正确的字母,用户也会收到一条消息,提示他/她必须再次尝试输入。
这是代码:
<script>
var words = [
"ha",
"pe",
"jaa"
];
var word = words[Math.floor(Math.random() * words.length)];
var answareArray = [];
for (var i = 0; i < word.length; i++) {
answareArray[i] = "_";
}
var remainingLetters = word.length;
while (remainingLetters > 0) {
//gaming code
alert(answareArray.join(" "));
//Get a gues from the user:
var guess = prompt("Guess a letter, or click cancel to stop");
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Please enter a single letter");
} else {
for (var j = 0; j < word.length; j++) {
if (word[j] !== guess) {
debugger;
alert("try again");
}
if (word[j] === guess) {
if (answareArray[j] !== "_") {
alert("Letter already be guessed");
break;
} else {
answareArray[j] = guess;
remainingLetters--;
}
}
}
}
}
alert(answareArray.join(" "));
alert("Good Job the answare was: " + word);
</script>
在这一部分:
if (word[j] !== guess) {
debugger;
alert("try again");
}
我尝试将消息返回给用户。
那我该怎么纠正?
答案 0 :(得分:2)
您必须在检查所有字母后显示警报,当前正在每次迭代中显示警报。
您可以使用标志(布尔变量)来实现。
这里是一个例子:
var goodGuess = false;
for (var j = 0; j < word.length; j++) {
if (word[j] === guess) {
goodGuess = true;
if (answareArray[j] !== "_") {
alert("Letter already be guessed");
break;
} else {
answareArray[j] = guess;
remainingLetters--;
}
}
}
if(!goodGuess){
alert("try again");
}
这是先将goodGuess
变量设置为false
,然后遍历所有字母,如果用户的猜测与任何字母相等,则将goodGuess
设置为true
。
在循环结束时(检查所有字母之后),如果goodGuess
为false
,则显示警报。