我的javascript随机数猜测游戏中有2个错误

我的javascript随机数猜测游戏中有2个错误,javascript,Javascript,这是我写的第一个应用程序。我在这里看到过一百万个生成随机数的游戏,javascript等,但没有一个像我这样有问题。我为我的无知道歉,但当我知道我做错了什么,这将大大有助于我理解javascript和一般的编码。我现在只是在浏览器控制台上玩 我用for循环完成了这项工作,但我想尝试另一个选项并使用减量计数器。我尝试过在while循环中使用内部函数中的if/else。代码在我看来是正确的 const guessingGame = (tries) => { const answer =

这是我写的第一个应用程序。我在这里看到过一百万个生成随机数的游戏,javascript等,但没有一个像我这样有问题。我为我的无知道歉,但当我知道我做错了什么,这将大大有助于我理解javascript和一般的编码。我现在只是在浏览器控制台上玩

我用for循环完成了这项工作,但我想尝试另一个选项并使用减量计数器。我尝试过在while循环中使用内部函数中的if/else。代码在我看来是正确的

const guessingGame = (tries) => {
    const answer = Math.floor(Math.random() * 11)
    let guess = null
    let status = "playing"
    function makeGuess() {
        if (guess === answer) {
            status = "won"
        } else if (tries === 0) {
            status = "lost"
        } else {
            tries--
            if (tries === 1) {
                console.log(tries + ' guess left')
            } else {
                console.log(tries + ' guesses left')
            }
        }
    }
    while (status === "playing") {
        if (!guess) {
            guess = prompt('Guess a number between 1 and 10')
            makeGuess()
        } else if (guess > answer) {
            guess = prompt('Lower')
            makeGuess()
        } else if (guess < answer) {
            guess = prompt('Higher')
            makeGuess()
        } else {
            break
        }
    }
    console.log("Game Over.  You " + status + "!  The answer was " + answer + ".")
}
const猜测游戏=(尝试)=>{
const answer=Math.floor(Math.random()*11)
让猜测=空
让status=“播放”
函数makeGuess(){
如果(猜测==答案){
status=“赢得”
}else if(尝试===0){
status=“丢失”
}否则{
尝试--
如果(尝试===1){
console.log(尝试+猜测左)
}否则{
console.log(尝试+左猜测)
}
}
}
while(状态==“播放”){
如果(!猜测){
猜测=提示('猜测1到10'之间的数字)
makeGuess()
}else if(猜测>回答){
猜测=提示('Lower')
makeGuess()
}else if(猜测<回答){
猜测=提示('Higher')
makeGuess()
}否则{
打破
}
}
console.log(“游戏结束。你“+状态+”!答案是“+答案+”)
}
  • 此游戏应使用一个参数调用/启动,即允许的尝试次数。如果我猜对了答案,那么最后的控制台日志应该包括status=“won”。但当我获胜时,它包括status=“playing”

  • 如果我猜错了“尝试”次数,我就输了。但是,当我在控制台中看到“0次猜测”时,游戏会再给出一次猜测,我可以接受它,有效地尝试-1次,我想。当我再做一次错误猜测时,状态正确地变为“丢失”,并且最终的控制台消息是正确的


  • 提示符的结果是一个字符串;因此,
    guess
    是一个字符串。
    Math.floor
    的结果是一个数字,因此
    answer
    是一个数字

    answer
    按您希望的方式工作

    然而,你显然听到人们说“永远不要使用
    ==
    ,总是使用
    ==
    ”,并将其牢记在心。这句话的原因是
    ==
    也是一个强制运算符,因此有时看起来不相等的东西最终会相等。然而,这里实际上需要使用强制
    ==
    ,因为
    1=='1'
    (尽管
    1
    '1'
    是不同的类型),但是严格的
    1==='1'
    最终是
    false

    因此,首先检查
    guess
    是否严格等于
    answer
    。因为他们的类型不同,这是不可能的,所以你继续前进。检查
    guess
    是否在答案上方,然后检查它是否在
    答案下方,这两个选项都返回
    false
    。剩下的唯一选项是从循环中断开
    “赢家”
    永远不会被打印出来


    除此之外,你最大的问题其实是逻辑。不同测试和操作的位置有些可疑。例如,可以预期测试
    guess
    是否等于
    答案
    将在测试旁边,以查看它是大还是小。
    trys
    的测试将在
    while
    循环中进行;但是您有一个无限循环,并且对
    尝试进行独立测试。您输入第一个猜测时会有一个唯一的提示,但它位于一个无限循环中,尽管它只能发生一次。您有一个名为
    makeGuess
    的函数,但该函数执行两到三个不同的操作,其中没有一个真正在进行猜测

    与其马上开始编写代码,然后在出现问题时修复问题,不如先想象一下流程是什么。人类会怎么做?然后编写代码


    以下是同一游戏的基本理念:

    answer = imagineAnswer()
    guess = askForFirstGuess()
    status = "lost"
    while (--tries) {
      if (guess > answer) {
        guess = askForHigherGuess()
      } else if (guess < answer) {
        guess = askForLowerGuess()
      } else {
        status = "won"
        break
      }
    }
    reportGameEnd(status)
    
    answer=imagineAnswer()
    guess=askForFirstGuess()
    status=“丢失”
    而(--尝试){
    如果(猜测>回答){
    guess=askForHigherGuess()
    }else if(猜测<回答){
    guess=askForLowerGuess()
    }否则{
    status=“赢得”
    打破
    }
    }
    报告游戏结束(状态)
    

  • 尝试--
    之前,您选中了
    尝试===0
    ,这就是为什么您只剩下0次猜测。在检查之前,你应该先递减

  • 猜测实际上是一个字符串而不是一个数字,因此
    guess===answer
    从不为真。在您猜对后的下一次迭代中,它将进入
    else{break}
    ,而
    状态仍在播放。你要么想要
    Number(guess)==answer
    要么就是
    guess==answer

  • 通过
    Math.floor(Math.random()*11)
    您实际上生成了0-10。您需要1-10的
    Math.floor(Math.random()*10)+1
    。请记住
    Math.floor(Math.random()*n)
    为您提供了
    n
    可能的结果,该结果恰好是
    [0,n)
    范围内的整数。然后执行任何您希望将其映射到所需输出值的计算

  • const猜测游戏=(尝试)=>{
    const answer=Math.floor(Math.random()*10)+1
    让猜测=空
    让status=“播放”
    函数makeGuess(){
    尝试--;
    如果(猜测==答案){
    status=“赢得”