前端练习小项目——随时猜数字大小游戏!

要求:

让你开发一个猜数字游戏。

游戏应随机选择一个 100 以内的自然数, 然后邀请玩家在 10 轮以内猜出这个数字。

每轮后都应告知玩家的答案正确与否,如果出错了,则告诉他数字是低了还是高了。

并且应显示出玩家前一轮所猜的数字。

一旦玩家猜对,或者用尽所有机会,游戏将结束。

游戏结束后,可以让玩家选择再次开始。


看到这个要求,首先我们要做的是将其分解成简单的可操作的任务,尽可能从程序员的思维去思考:

  1. 随机生成一个 100 以内的自然数。
  2. 记录玩家当前的轮数。从 1 开始。
  3. 为玩家提供一种猜测数字的方法。
  4. 一旦有结果提交,先将其记录下来,以便用户可以看到他们先前的猜测。
  5. 然后检查它是否正确。
  6. 如果正确:
    1. 显示祝贺消息。
    2. 阻止玩家继续猜测(这会使游戏混乱)。
    3. 显示控件允许玩家重新开始游戏。
  7. 如果出错,并且玩家有剩余轮次:
    1. 告诉玩家他们错了。
    2. 允许他们输入另一个猜测。
    3. 轮数加 1。
  8. 如果出错,并且玩家没有剩余轮次:
    1. 告诉玩家游戏结束。
    2. 阻止玩家继续猜测(这会使游戏混乱)。
    3. 显示控件允许玩家重新开始游戏。
  9. 一旦游戏重启,确保游戏的逻辑和UI完全重置,然后返回步骤1

直接上代码:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">

    <title>猜数字游戏</title>

    <style>
      html {
        font-family: sans-serif;
      }

      body {
        width: 50%;
        max-width: 800px;
        min-width: 480px;
        margin: 0 auto;
      }

      .lastResult {
        color: white;
        padding: 3px;
      }
    </style>
  </head>

  <body>
    <h1>猜数字游戏</h1>

    <p>我刚才随机选定了一个100以内的自然数。看你能否在 10 次以内猜中它。每次我都会告诉你所猜的结果是高了还是低了。</p>

    <div class="form">
      <label for="guessField">请猜数: </label>
      <input type="text" id="guessField" class="guessField">
      <input type="submit" value="确定" class="guessSubmit">
    </div>

    <div class="resultParas">
      <p class="guesses"></p>
      <p class="lastResult"></p>
      <p class="lowOrHi"></p>
    </div>

    <script>

      // 开始编写 JavaScript 代码
      let randomNumber = Math.floor(Math.random() * 100) + 1;
      // console.log(randomNumber);

      const guesses = document.querySelector('.guesses');
      const lastResult = document.querySelector('.lastResult');
      const lowOrHi = document.querySelector('.lowOrHi');

      const guessSubmit = document.querySelector('.guessSubmit');
      const guessField = document.querySelector('.guessField');

      let guessCount = 1;
      let resetButton;

      function checkGuess() {
          let userGuess = Number(guessField.value);
          if (guessCount === 1) {
              guesses.textContent = '上次猜的数:';
          }
          guesses.textContent += userGuess + ' ';

          if (userGuess === randomNumber) {
              lastResult.textContent = '恭喜你!猜对了';
              lastResult.style.backgroundColor = 'green';
              lowOrHi.textContent = '';
              setGameOver();
          } else if (guessCount === 10) {
              lastResult.textContent = '!!!GAME OVER!!!';
              setGameOver();
          } else {
              lastResult.textContent = '你猜错了!';
              lastResult.style.backgroundColor = 'red';
              if(userGuess < randomNumber) {
              lowOrHi.textContent = '你猜低了!';
              } else if(userGuess > randomNumber) {
              lowOrHi.textContent = '你猜高了';
              }
          }

        guessCount++;
        guessField.value = '';
        guessField.focus();
      };

      guessSubmit.addEventListener('click', checkGuess);

      function setGameOver() {
        guessField.disabled = true;
        guessSubmit.disabled = true;
        resetButton = document.createElement('button');
        resetButton.textContent = '开始新游戏';
        document.body.appendChild(resetButton);
        resetButton.addEventListener('click', resetGame);
      };

      function resetGame() {
        guessCount = 1;

        const resetParas = document.querySelectorAll('.resultParas p');
        for (let i = 0 ; i < resetParas.length; i++) {
          resetParas[i].textContent = '';
        }

        resetButton.parentNode.removeChild(resetButton);

        guessField.disabled = false;
        guessSubmit.disabled = false;
        guessField.value = '';
        guessField.focus();

        lastResult.style.backgroundColor = 'white';

        randomNumber = Math.floor(Math.random() * 100) + 1;
      }
    </script>
  </body>
</html>

 运行结果如下:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值