linRichielinRichie
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
前端
Python
Linux
ChatGPT
  • B 站
  • 500px
  • Node

    • Node.js版本管理工具 n
  • CSS选择器

    • CSS 快速入门教程
    • CSS 选择器
    • CSS 属性
  • JavaScript

    • JavaScript目录
    • 第一章:介绍

      • JavaScript是什么
      • JavaScript 猜数字游戏实战
    • 第二章:基础

      • 条件语句
      • 循环语句
      • 函数
    • 第三章:JavaScript 对象

      • 对象
      • 对象原型
      • JavaScript 中的类
      • JSON 使用

JavaScript 猜数字游戏实战

  • 概述
    • 学习目标
    • 前置知识
  • 案例:构建猜数字游戏
    • 游戏需求
    • 程序设计思路
    • 在 html 文件的底部添加 JavaScript 代码

概述

通过开发一个猜数字游戏,我们将学习 JavaScript 的基本概念和编程思维。

学习目标

  • 掌握 JavaScript 基础语法
  • 学习程序设计思维
  • 理解代码组织方式

前置知识

  • HTML 基础
  • CSS 基础
  • JavaScript 基本概念

案例:构建猜数字游戏

游戏需求

开发一个猜数字游戏,具有以下功能:

  1. 随机生成 1-100 的数字
  2. 玩家有 10 次猜测机会
  3. 每次猜测后给出提示:
    • 猜对了:显示祝贺信息
    • 猜错了:提示数字偏大或偏小
  4. 显示历史猜测记录
  5. 游戏结束后可以重新开始

程序设计思路

在 html 文件的底部添加 JavaScript 代码

完整代码:数字游戏html

添加变量保存数据

<script>
let randomNumber = Math.floor(Math.random() * 100) + 1;
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

</script>

函数

function checkGuess(){
    alert('检查猜测结果')
}

运算符

JavaScript 支持多种运算符:

运算符名称实例
+加1 + 1
-减1 - 1
*乘1 * 1
===全等1 === 1
!==不等于1 !== 1
>大于1 > 1
<小于1 < 1

条件语句

function checkGuess(){
    const userGuess = Number(guessField.value)
    if(guessCount === 1){
      guesses.textContent = "Previous guesses: "
    }
    guesses.textContent += userGuess + " "

    if (userGuess === randomNumber) {
      lastResult.textContent = "Congratulations! You got it right!"
      lastResult.style.backgroundColor = "green"
      lowOrHi.textContent = ""
      setGameOver()
    } else if (guessCount === 10) {
      lastResult.textContent = "!!!GAME OVER!!!";
      lowOrHi.textContent = "";
      setGameOver();
    } else {
      lastResult.textContent = "Wrong!";
      lastResult.style.backgroundColor = "red";
      if (userGuess < randomNumber) {
        lowOrHi.textContent = "Last guess was too low!";
      } else if (userGuess > randomNumber) {
        lowOrHi.textContent = "Last guess was too high!";
      }
    }

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

事件(Event)

事件是实现交互的核心机制:

  • 事件:浏览器中发生的动作(点击、加载等)
  • 事件监听器:监听事件发生的代码
  • 事件处理器:响应事件的具体代码

添加事件监听器:

guessSubmit.addEventListener("click", checkGuess)

注意:

  • 事件处理函数不要加括号
  • addEventListener 需要两个参数:事件类型和处理函数

补全游戏功能

游戏结束处理:

function setGameOver() {
    guessField.disabled = true;
    guessSubmit.disabled = true;
    resetButton = document.createElement("button");
    resetButton.textContent = "Start new game";
    document.body.append(resetButton);
    resetButton.addEventListener("click", resetGame)
}

重置游戏功能:

function resetGame() {
    guessCount = 1
    const resetParas = document.querySelectorAll(".resultParas p")
    for (const restPara of resetParas) {
      resetPara.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
}

循环 Loop

for...of 循环用于遍历可迭代对象:

const fruits = ["apple", "banana", "orange"];
for (const fruit of fruits) {
  console.log(fruit)
}

在游戏中的应用:

const resetParas = document.querySelectorAll(".resultParas p")

for (const restPara of resetParas) {
  resetPara.textContent=""
}

说明:

  • querySelectorAll 返回所有匹配的元素
  • for...of 循环遍历每个元素
  • 清空每个元素的文本内容
Prev
JavaScript是什么