Javascript hangman,游戏结束逻辑未按预期运行

wj8zmpe1  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(123)

我正在用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>
yws3nbqq

yws3nbqq1#

我的猜测是

if (randomWord.indexOf("_") == -1) {

你想要

randomWordArray.indexOf(" _ ") == -1

另外,请在for循环中使用let i,否则您创建了一个全局i变量,这可能会出错,并且调试起来会很麻烦。
P.P.S按照Michael的要求添加了一个剪口
一个二个一个一个

gt0wga4j

gt0wga4j2#

这不是您的问题的解决方案,但是您可以使用这个代码段来更新您的wrong letter not deducting a life逻辑

let lives = 2;
let myRandomWord = 'testing';

const guessWord = (wordToGuess, myWord, lives) => {

  if(wordToGuess.includes(myWord)){
     console.log('Its in the word so do something with your game logic here')
  }
  
  if(!wordToGuess.includes(myWord)){
     lives = lives - 1;
     console.log('you lost a live');
  }
  console.log('current live count ', lives)
}

guessWord(myRandomWord, 'a', lives)

相关问题