ckblt 发表于 2022-1-27 16:08:32

【HTML】极速计算!

以前,我在学校看了《最强大脑》,里面的计算题让我吃惊!{:9_228:}
现在,我正愁于没有灵感,突然,我想到了《最强大脑》……
就做了一个“大众版”《最强大脑》——《极速计算》!{:10_298:}

规则:
电脑会出 5 道加减法题目,并要求玩家在 15 秒之内完成。

由于我懒得做美术,所以我懒得做美术。(???
由于网页比较丑,所以网页比较丑。(?????{:10_282:}

废话少说,上代码!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
      margin: 0;
      padding: 0;
      }

      body,
      #game {
      display: flex;
      justify-content: center;
      align-items: center;
      flex-direction: column;
      }

      body {
      min-height: 100vh;
      }

      p {
      margin-bottom: 1vh;
      }

      #game {
      position: relative;
      width: 75vw;
      height: 75vh;
      border: 1px solid #000;
      }

      #start,
      #restart {
      font-size: 1.2rem;
      width: 100px;
      height: 50px;
      }

      #restart {
      display: none;
      }

      #count-down,
      #ready {
      position: absolute;
      top: 20%;
      left: 50%;
      transform: translate(-50%, -50%);
      display: none;
      }
      #count-down {
      top: 30%;
      }

      .question,
      .question-input {
      font-size: 1.2rem;
      }
      .question-input {
      width: 10vw;
      }

      @keyframes fade-out {
      0% {
          opacity: 1;
      }
      100% {
          opacity: 0;
      }
      }
    </style>
</head>
<body>
    <h1>极速计算!</h1>
    <p>By Ckblt</p>
    <div id="game">
      <button id="start">开始!</button>
      <h1 id="ready"></h1>
      <h1 id="count-down"></h1>
      <ol id="questions"></ol>
      <button id="restart">再来</button>
    </div>
    <script>
      const sleep = (timeout) =>
      new Promise((resolve) => setTimeout(resolve, timeout))

      const random = (min, max) =>
      Math.floor(Math.random() * (max - min + 1)) + min

      const startButtonE = document.getElementById('start')
      const restartButtonE = document.getElementById('restart')
      const readyE = document.getElementById('ready')
      const countDownE = document.getElementById('count-down')
      const questionsE = document.getElementById('questions')

      const click = () => {
      startButtonE.style.display = 'none'
      restartButtonE.style.display = 'none'
      readyE.style = ''
      countDownE.style = ''
      questionsE.style = ''
      questionsE.innerHTML = ''

      // 开始倒计时
      readyE.style.display = 'block'
      readyE.innerHTML = '3'
      const prom = sleep(1000)

      const questions = []

      // 出题
      for (let i = 0; i < 5; i++) {
          const question = [
            random(0, 1) ? 'plus' : 'minus',
            random(5, 30),
            random(5, 30)
          ]
          if (question === 'minus') {
            question = random(1, question)
          }
          question.push(
            question === 'plus'
            ? question + question
            : question - question
          )
          questions.push(question)
      }

      prom
          .then(() => {
            readyE.innerHTML = '2'
            return sleep(1000)
          })
          .then(() => {
            readyE.innerHTML = '1'
            return sleep(1000)
          })
          .then(() => {
            readyE.innerHTML = 'GO!'
            readyE.style.animation = 'fade-out 1s forwards'
            setTimeout(() => {
            readyE.style.display = 'none'
            }, 1000)
            countDownE.innerHTML = '15'
            countDownE.style.display = 'block'

            // 显示题目
            questions.forEach((question) => {
            const questionE = document.createElement('li')
            questionE.classList.add('question')
            questionE.innerHTML =
                question.toString() +
                (question === 'plus' ? '+' : '-') +
                question.toString() +
                '=<input type="input" class="question-input" /><span class="question-span"></span>'

            questionsE.appendChild(questionE)
            })
          }) // 倒计时
          .then(() => {
            countDownE.innerHTML = '14'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '13'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '12'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '11'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '10'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '9'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '8'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '7'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '6'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '5'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '4'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '3'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '2'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '1'
            return sleep(1000)
          })
          .then(() => {
            countDownE.innerHTML = '时间到!'
            Array.from(
            document.getElementsByClassName('question-input')
            ).forEach((e) => {
            e.disabled = true
            })
            return sleep(2000)
          })
          .then(() => {
            restartButtonE.style.display = 'block'
            for (let i = 0; i < questions.length; i++) {
            const question = questions
            const questionE = document.getElementsByClassName('question')
            const questionInputE =
                document.getElementsByClassName('question-input')
            const questionSpanE =
                document.getElementsByClassName('question-span')

            // 检查题目是否做错
            if (questionInputE.value !== question.toString()) {
                questionE.style.color = '#d22'
                questionInputE.style.color = '#d22'
                questionSpanE.style.color = '#2d2'
                questionSpanE.innerHTML = question
            } else {
                questionInputE.style.color = '#2d2'
            }
            }
          })
      }

      // 当开始按钮被点击时,开始游戏
      startButtonE.addEventListener('click', click)
      restartButtonE.addEventListener('click', click)
    </script>
</body>
</html>

如果有问题,请回复我哦~{:10_279:}
页: [1]
查看完整版本: 【HTML】极速计算!