经过反复的尝试,我终于几乎完成了基本的,仅提示的,单独的子手项目,但是遇到了问题。我设置了一个条件,让我有一个变量可以识别单词中有多少正确的“匹配”,如果“匹配”与单词“ YOU WIN!”的长度匹配,应该显示。但是,我似乎无法让程序实际执行此操作。我尝试了多种不同的方法来执行此操作,但是在满足胜利条件后,仍然会出现“猜字母”提示。我的“游戏结束”提示运行正常,这让我感到困惑。
`var secretWords = ["hang", "golf", "many", "barn", "math"];
var chosenWord = secretWords[Math.floor(Math.random()*secretWords.length)];
var guesses = 8;
console.log(chosenWord);
var letters = chosenWord.length;
var counter = 0;
var gameOver = guesses === 0;
console.log(guesses);
console.log(counter);
while(guesses !== 0){
const guess = prompt("GUESS A LETTER")
let guessLowerCase = guess.toLowerCase();
let isGuessedLetterInWord = chosenWord.includes(guessLowerCase);
if (isGuessedLetterInWord) {
alert('nice'); counter ++;
} if(isGuessedLetterInWord == 0) {
alert('wrong'); guesses --;
}
else if (isGuessedLetterInWord == null){
break;
}
}
while(guesses == 0){
alert('GAME OVER'); break;
}
counter += chosenWord.length;
while(counter == chosenWord.length){
alert("YOU WIN!!")
}`
您应该将计数器检查放在while (guesses !== 0) {
块的末尾-如果在外面,则不会成为游戏循环的一部分。您也不能无条件地增加counter
-有些单词具有相同字母的2个以上,例如foo
,在这种情况下,您希望猜测o
可以同时填满两个o
,而不是只有一个。本着子手的精神,提醒填写的信件给用户,以便他们可以看到丢失的内容:
var secretWords = ["hang", "golf", "many", "barn", "math"];
var chosenWord = secretWords[Math.floor(Math.random() * secretWords.length)];
let printedWord = chosenWord.replace(/./g, '-');
var guesses = 8;
console.log(chosenWord);
while (true) {
const guess = prompt(`Guess a letter, ${guesses} remaining`);
if (!guess) break;
const guessLowerCase = guess.toLowerCase();
let found = false;
for (let i = 0; i < chosenWord.length; i++) {
if (chosenWord[i] === guessLowerCase) {
printedWord = printedWord.slice(0, i) + guessLowerCase + printedWord.slice(i + 1);
found = true;
}
}
alert(printedWord);
if (!printedWord.includes('-')) {
alert('You Win');
break;
}
if (!found) guesses--;
if (guesses === 0) {
alert('You Lose');
break;
}
}