我的javascript随机数猜测游戏中有2个错误
这是我写的第一个应用程序。我在这里看到过一百万个生成随机数的游戏,javascript等,但没有一个像我这样有问题。我为我的无知道歉,但当我知道我做错了什么,这将大大有助于我理解javascript和一般的编码。我现在只是在浏览器控制台上玩 我用for循环完成了这项工作,但我想尝试另一个选项并使用减量计数器。我尝试过在while循环中使用内部函数中的if/else。代码在我看来是正确的我的javascript随机数猜测游戏中有2个错误,javascript,Javascript,这是我写的第一个应用程序。我在这里看到过一百万个生成随机数的游戏,javascript等,但没有一个像我这样有问题。我为我的无知道歉,但当我知道我做错了什么,这将大大有助于我理解javascript和一般的编码。我现在只是在浏览器控制台上玩 我用for循环完成了这项工作,但我想尝试另一个选项并使用减量计数器。我尝试过在while循环中使用内部函数中的if/else。代码在我看来是正确的 const guessingGame = (tries) => { const answer =
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(“游戏结束。你“+状态+”!答案是“+答案+”)
}
提示符的结果是一个字符串;因此,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=“赢得”