我正在用JavaScript开发一个基于文本的刽子手游戏。如果我的代码是多余的和过度工程化的,我道歉。我只是在学习编码。我感谢任何人谁有任何输入为什么我的游戏没有完全发挥作用。
我的“如果”语句根本不起作用。如果我猜对了一个字母,它就告诉我我赢了。如果我猜错了一个字母,它就永远不会扣除一个生命。我真的不明白我错在哪里。“如果”语句都有意义,但我想也许我把它们配对错了?
我有一个很大的随机单词数组,长度不同
我用math抓取了一个随机单词randomWord。
我初始化了一个空数组'randomWordArray',然后运行一个for循环,在数组中为单词的每个字母插入“”,这样我就可以显示单词供他们猜测......例如:“ _ __ ”
我在guessLetter()函数中有4个逻辑语句。
1.要检查猜测的字母是否是单词的一部分,如果是,请将数组索引处的“”替换为正确的字母。
1.检查它是否不是除了这个词,如果不扣除一个生命(这从来没有执行一些奇怪的原因和球员得到无限的生命...)
1.检查他们的生命是否结束(永远不会变成真的,因为生命永远不会被扣除)
1.检查randomWordArray是否不再包含任何“_",表示单词已被猜出,游戏已赢,应该结束。(这也不起作用,如果玩家正确猜出一个字母,游戏将告诉他们赢了,即使这是他们的第一个字母。
我愿意接受任何和所有的建议,即使与我的主要问题无关,如果你看到我是如何做一些多余的,或者如果有一个更有效的方法来做某事,请让我知道。非常感谢你的时间。
//Random array of words
const words = [
//4 letter words
"maze", "pate", "swig", "yawn", "belt",
//5 letter words
"blush", "dwarf", "fable", "haste", "jumbo", "knave", "liver", "moose", "pilot", "quill", "smile", "thief",
//6 letter words
"affect", "bronze", "cursor", "dancer", "fossil", "fungus", "glassy", "glitch", "kitten", "lotion","anemone",
//7 letter words
"bouncing", "carpeted", "clustery", "flavored", "grapple", "lunging", "pompous",
//8 letter words
"abstract", "barbecue", "coffee", "clotting", "flounder", "hopping", "loudest", "pending"];
var randomWord = words[Math.floor(Math.random() * words.length)];
var randomWordArray =[];
var lives = 5;
for(i=0;i<randomWord.length;i++) {
randomWordArray.push(" _ ");
}
function guessLetter(randomWord, randomWordArray, lives) {
let guess = window.prompt(randomWordArray+" Lives:"+lives);
if (!guess) return; // prompt shortcut
if(guess == "end") {
window.alert("Game over");
return;
}
//check if letter is in word
for (i=0; i<randomWord.length; i++) {
if (guess == randomWord[i]) {
randomWordArray.splice(i, 1, randomWord[i]);
}
}
//check if letter isnt in word
if (randomWordArray.indexOf(guess) == -1) {
lives--;
}
//check if game should end because lives are out
if (lives==0) {
window.alert("Congrats the game is over!");
return;
}
if (randomWord.indexOf("_") == -1) {
window.alert(randomWord);
window.alert("Congrats! You've solved the word!!");
return;
}
if (lives > 0) {
guessLetter(randomWord, randomWordArray,lives);
}
}
// don't start until explicitly asked to
start.addEventListener(`click`, () => guessLetter(randomWord, randomWordArray,lives));
<button id="start">Start</button>
2条答案
按热度按时间yws3nbqq1#
我的猜测是
你想要
另外,请在for循环中使用
let i
,否则您创建了一个全局i变量,这可能会出错,并且调试起来会很麻烦。P.P.S按照Michael的要求添加了一个剪口
一个二个一个一个
gt0wga4j2#
这不是您的问题的解决方案,但是您可以使用这个代码段来更新您的
wrong letter not deducting a life
逻辑