- Objective: - Breadcrumb: # 概念阐释 # 实例 # 相关内容 # 问题 [Challenge Project: Number Guesser](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-building-interactive-websites/tracks/fscj-22-javascript-syntax-part-i/modules/wdcp-22-number-guesser-75517b97-cc5e-4579-a3ad-898b87826534/projects/number-guesser-independent-practice) - 在这个项目中,你将编写JavaScript函数来支持一个小的猜谜游戏。 - 你将在script.js中编写四个函数。我们在game.js中提供了一些额外的JavaScript代码,根据用户的交互调用你的函数 - 在完成这个项目时,**请确保你的所有函数的名称与这些任务中指定的完全一样**,这样当游戏开始时它们可以被正确调用。 1. 创建一个generateTarget()函数。该函数应返回一个介于0和9之间的随机整数。该函数的目的是在每一轮开始时调用,以生成新的秘密目标数字。 2. 创建一个compareGuesses()函数。该函数:有三个参数,表示用户(人类)猜测`(human) guess`、计算机猜测`computer guess`和要猜测的秘密目标数字`target number`。根据哪个猜测**最接近目标**,确定哪个玩家(人类或计算机)获胜。如果两个玩家并列,人类用户应该获胜。如果人类玩家获胜,则返回true,如果计算机玩家获胜,则返回false。该函数的目的是在每一轮中调用,以确定哪个猜测【最接近】目标数字【秘密目标数字secretNumber】。 >[!hint] > 按照计算机思维是比较人类和计算机相对于秘密数字的差,也就是距离。人类差值 < 计算机差值时,距离秘密数字更“近” > 不要用秘密数字的回调函数,因为回调的数字和写在公式里的回调随机数字每次都不一样🤣。 1. 创建一个updateScore()函数。该函数具有以下特点:只有一个参数。该参数将是一个表示获胜者的**字符串**值。根据传入的获胜者(`'human'`或`'computer'`)增加分数变量(humanScore或computerScore)1。传入的字符串将是'human'或'computer'之一。该函数的目的是在每轮之后正确增加获胜者的分数。 2. 创建一个advanceRound()函数。这个函数应该将currentRoundNumber的值增加1。这个函数的目的是在每一轮之后更新轮数。完成advanceRound()后,你的猜数字游戏应该完全可用。你应该能够进行猜测,正确地看到你或计算机的分数增加,进入下一轮,并显示正确的轮数。 3. 干得好!如果你想看解决方案,请继续下一个任务。如果你想自己扩展项目,可以考虑以下内容: - 你可能已经计算了计算机猜测到目标的距离和人类猜测到目标的距离。将这部分代码移到一个独立的getAbsoluteDistance()函数中,该函数接受两个数字并返回距离,然后在compareGuesses()函数中使用它。 - 添加功能来检查用户的猜测是否在0到9之间,并使用alert()提醒用户他们的数字超出了范围。使用+和=按钮无法设置超出此范围的数字,但用户可以通过直接在输入框中输入来这样做。 # 问题答案 ```js let humanScore = 0; let computerScore = 0; let currentRoundNumber = 1; // 1. 创建一个generateTarget()函数。该函数应返回一个介于0和9之间的随机整数。该函数的目的是在每一轮开始时调用,以生成新的【秘密目标数字secretNumber】。 let generateTarget = () => { return Math.floor(Math.random()*10) }; //console.log(generateTarget()); // 2. 创建一个compareGuesses()函数。该函数:有三个参数,表示用户(人类)猜测、计算机猜测和要猜测的秘密目标数字。根据哪个猜测最接近目标,确定哪个玩家(人类或计算机)获胜。如果两个玩家并列,人类用户应该获胜。如果人类玩家获胜,则返回true,如果计算机玩家获胜,则返回false。该函数的目的是在每一轮中调用,以确定哪个猜测【最接近】目标数字【秘密目标数字secretNumber】。 let compareGuesses = (humanGuess,computerGuess,targetNumber) => { let humanDiff = Math.abs( humanGuess - targetNumber); let computerDiff = Math.abs(computerGuess - targetNumber); if(humanDiff <= computerDiff) { return true; }else{ return false; } } //最后2个步骤没有写 ``` # 参考资料 - [随机数字是如何传入compare函数的](https://chat.openai.com/share/ae63ed31-f1a5-4b4f-afd2-891f29ff6f12)