项目简介

灵感来自于初中时和同学们在摸鱼时玩的小游戏,用计算器生成一个随机数,然后轮流猜,猜中的要受到惩罚——进行真心话大冒险。这个数字炸弹的小游戏便来源于此。

  • 开始游戏前需要选择游戏的人数,便于确定合适的范围并生成随机数。
  • 猜完数字后,按下确认提交。猜的数字必须在范围内,否则会提醒重新进行猜数。
  • 当游戏结束后,你可以点击开始新游戏,重新开始新一轮游戏。

项目代码

index.html

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

    <title>猜数字游戏</title>
    <link rel="stylesheet" href="index.css">
  </head>

  <body>
    <h1>数字炸弹游戏</h1>

    <p class="gameRules">确定玩家人数后,点击确定,游戏开始。首先系统会根据玩家人数随机生成一个自然数作为数字炸弹,并且会给出这个数字炸弹的范围,玩家们可以自己规定顺序,轮流在范围内猜(猜到数字炸弹后将会引爆),这个过程数字炸弹的范围将会一直缩小,直到有一个玩家引爆炸弹,游戏结束。该玩家将受到严峻的惩罚。</p>

    <div class="form">
      <label for="initPeople">请选择玩家人数: </label>
      <input type="submit" value="2-4人" id="fewPeople" class="initSubmit">
      <input type="submit" value="5人以上" id="manyPeople" class="initSubmit">
    </div>

    <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="Tips"></p>
      <p class="guesses"></p>
      <p class="lastResult"></p>
    </div>

    <script>
        const Tips = document.querySelector('.Tips');
        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');

        const fewPeople = document.querySelector('#fewPeople')
        const manyPeople = document.querySelector('#manyPeople')

        let resetButton;
        let minimumLimit,maximumLimit,randomNumber;
        guessField.disabled = true;
        guessSubmit.disabled = true;
        function initGame(playerCount) {   
          guessField.disabled = false;
          guessSubmit.disabled = false;    
          let maximumNumber = 100 * playerCount;
          randomNumber = Math.floor(Math.random() * maximumNumber) + 1;
          if (randomNumber == 100 || randomNumber == 200) {
            randomNumber--;
          }
          minimumLimit = 0;
          maximumLimit = maximumNumber;
          guesses.textContent = '数字炸弹的范围是:';
          guesses.textContent += minimumLimit + ' ~ ' + maximumLimit;
        }

        function initGame1(){
          let num = 1;
          Tips.textContent = '玩家人数为2-4人,请在确认完顺序后开始游戏';
          initGame(num);
        }
        function initGame2(){
          let num = 2;
          Tips.textContent = '玩家人数为5人以上,请在确认完顺序后开始游戏';
          initGame(num);
        }

        fewPeople.addEventListener('click', initGame1);
        manyPeople.addEventListener('click', initGame2);

        function resetLimit(){
          guesses.textContent = '数字炸弹的范围是:';
          guesses.textContent += minimumLimit + ' ~ ' + maximumLimit;
        }

        function checkGuess() {
          let userGuess = Number(guessField.value);
          if (userGuess > minimumLimit && userGuess <maximumLimit) {
            if (userGuess === randomNumber) {
              lastResult.textContent = '!!!Boom!!! ' + userGuess + ' 为数字炸弹,你选中了数字炸弹,请接受惩罚';
              lastResult.style.backgroundColor = 'red';
              guesses.textContent = '';
              setGameOver();
            } else if(userGuess < randomNumber) {
              lastResult.textContent = userGuess + ' 不是炸弹数字,你是安全的'
              lastResult.style.backgroundColor = 'green';
              minimumLimit = userGuess;
              resetLimit();
            } else if(userGuess > randomNumber) {
              lastResult.textContent = userGuess + ' 不是炸弹数字,你是安全的'
              lastResult.style.backgroundColor = 'green';
              maximumLimit = userGuess;
              resetLimit();
            }
          } else {
            lastResult.textContent = '你猜的数字不在可选范围内,请重新选择';
            lastResult.style.backgroundColor = 'rgb(230, 97, 8)';
          }
          guessField.value = '';
          guessField.focus();
        }
        guessSubmit.addEventListener('click', checkGuess);
        function setGameOver() {
          guessField.disabled = true;
          guessSubmit.disabled = true;
          fewPeople.disabled = true;
          manyPeople.disabled = true;
          resetButton = document.createElement('button');
          resetButton.textContent = '开始新游戏';
          document.body.appendChild(resetButton);
          resetButton.addEventListener('click', resetGame);
        }
        function resetGame() {
          Tips.textContent = '已开始新一轮游戏,请选择玩家人数。';
          resetButton.parentNode.removeChild(resetButton);

          fewPeople.disabled = false;
          manyPeople.disabled = false;
          guessField.value = '';
          guessField.focus();

          lastResult.style.backgroundColor = 'white';
        }
    </script>
  </body>
</html>

作为JavaScript的一次练习,就将js代码写在html内部了。

index.css

html {
    font-family: sans-serif;
  }

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

  .lastResult {
    color: rgb(255, 255, 255);
    padding: 3px;
  }
  .form {
    padding: 2px;
  }
  .initPeople {
    width: 160px;
    font-display: true;
  }
  .guesses {
    border: 1pm solid rgba(240, 8, 163, 0.541);
  }
  .Tips {
    background-color: rgb(89, 51, 224);
    /* border: 2px solid cornflowerblue; */
    color: rgb(236, 243, 248);
  }

大功告成

第一版本的数字炸弹就这样完成了。如果对这个小项目感兴趣的,可以查看我们的当前版本,如果有什么问题,希望可以得到你们的反馈。