简单 JS 游戏中的负分问题

Issue with negative scores in a simple JS game

我创建了一个简单的 JS 游戏,它要求玩家将两个随机数相加,并给他们三个选项 select -- 一个答案正确,另外两个不正确.玩家只有 10 秒的时间来回答每个问题。当玩家 select 给出正确答案时,他们的分数会增加 +1,一切都会按预期进行。

...直到我尝试在他们答错问题时(通过 select 给出 2 倍错误答案中的任何一个)将他们的分数添加到 -1。当数字为正时,一切都按预期进行,但是如果他们变成负数,那么奇怪的事情就会开始发生,我不知道为什么:分数减少超过 1,即使玩家得到正确的答案,分数仍然减少。

作为一种解决方法,我尝试添加一个条件,如果分数低于 0,它将重置为 0,因此它不能变为负数——但是如果我这样做,分数将不会超过 1,不不管玩家答对了多少。

游戏和代码在这里:https://codepen.io/tmnsoon/full/XWVWvmb


let score = 0
function startCountdown(seconds) {
  

  let counter = seconds;
    
  const interval = setInterval(() => {
    document.getElementById("timer").innerHTML = counter;
    counter--;
      
    if (counter < 0 ) {
      clearInterval(interval);
      game()
      startCountdown(10)
    }
  }, 1000);
}

function game(){
 let answer1 = Math.floor(Math.random()*500)
 let answer2 = Math.floor(Math.random()*500)
 document.getElementById("challenge").innerHTML = `What is ${answer1}  plus ${answer2}`
     console.log('Ding!');
     let number1 = Math.floor(Math.random()*1000)
     let number2 = answer1+answer2
     let number3 = Math.floor(Math.random()*1000)
     let gameNums = [number1, number2,number3]
     shuffle(gameNums)
     console.log(gameNums)
    document.getElementById("button1").innerHTML = gameNums[0]
  document.getElementById("button2").innerHTML = gameNums[1]
  document.getElementById("button3").innerHTML = gameNums[2]
  
  
  function handleClick(event) {

  if (event.target.tagName !== "BUTTON") {
    return;
  }

  let buttonValue = event.target.innerText;
  
    if (buttonValue == answer1+answer2){
      document
    .querySelector("#result")
    .innerText = "Correct!";
      score++
      document.getElementById("score").innerHTML = `Score = ${score}`
      game()

      

    }
    else if (buttonValue == number1 || number3){
  document
    .querySelector("#result")
    .innerText = "Incorrect!";
     score--
     
      document.getElementById("score").innerHTML = `Score = ${score}`

      }
}

//listner
document
  .querySelector(".buttons")
  .addEventListener("click", handleClick);

  
  
  
  
  
  
  
  
  //end

}

function shuffle(array) {
  let currentIndex = array.length,  randomIndex;

  // While there remain elements to shuffle...
  while (currentIndex != 0) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex--;

    // And swap it with the current element.
    [array[currentIndex], array[randomIndex]] = [
      array[randomIndex], array[currentIndex]];
  }

  return array;
}

如果有人能指出我做错了什么,将不胜感激。谢谢!

问题出在你的else if降低分数的条件:else if (buttonValue == number1 || number3)

你告诉编译器如果前面的 if 条件不为真且(如果 buttonValue == number1 OR if number3 为 truthy[=26 则它应该进入该块=]).

您可能想写 else if (buttonValue == number1 || buttonValue == number3)

一些额外的建议:您根本不需要 else 语句中的条件,buttonValue 不是正确答案就足够了,没有必要检查它是哪个错误答案。

你可以 else {.