使用JavaScript构建交互式井字棋游戏:点击、切换与重置

使用javascript构建交互式井字棋游戏:点击、切换与重置

本教程详细介绍了如何使用JavaScript实现井字棋(Tic-Tac-Toe)游戏的核心交互逻辑。我们将学习如何通过事件监听器处理用户点击,在棋盘方格中放置“X”或“O”标记,实现玩家轮流操作,并添加重置游戏的功能。文章将提供完整的HTML、CSS和JavaScript代码示例,帮助开发者构建一个功能完善且交互流畅的井字棋应用。

构建井字棋游戏基础结构

在开始JavaScript逻辑之前,我们需要一个基本的HTML结构来承载井字棋盘。这个结构将包含一个主容器、若干行以及每个方格的占位符,以及一个用于重置游戏的按钮。

  

为了让棋盘看起来更像一个井字棋盘,并提供基本的交互视觉反馈,我们可以添加一些CSS样式。这些样式有助于布局、方格尺寸、边框以及鼠标悬停效果。

#board {  margin: 20px auto; /* 居中显示 */  width: 50%; /* 棋盘宽度 */  max-width: 300px; /* 最大宽度限制 */  border: 1px solid #ccc;}.row {  display: grid;  grid-template-columns: repeat(3, 1fr); /* 三列等宽布局 */}.square {  border: 1px solid black;  padding: 1rem;  cursor: pointer;  text-align: center;  aspect-ratio: 1/1; /* 保持方格宽高比为1:1 */  display: flex; /* 使得X/O居中 */  align-items: center;  justify-content: center;  font-size: 2em; /* 标记字体大小 */  font-weight: bold;}.square:hover {  background-color: #f0f0f0; /* 鼠标悬停背景色 */}#reset-btn {  display: block;  margin: 15px auto;  padding: 10px 20px;  font-size: 1em;  cursor: pointer;}

实现核心游戏逻辑:点击与玩家切换

井字棋的核心在于玩家点击方格后,显示相应的标记(X或O),并自动切换到下一位玩家。这需要JavaScript来监听点击事件并管理游戏状态。

立即学习“Java免费学习笔记(深入)”;

获取所有方格元素:document.querySelectorAll(“.square”) 方法会返回一个NodeList,其中包含所有具有square类的元素。由于NodeList不是一个普通的数组,我们不能直接在其上调用addEventListener来为所有元素添加监听器。因此,需要遍历这个NodeList。

初始化当前玩家:使用一个变量(例如currentPlayer)来跟踪当前轮到哪位玩家。我们可以将其初始化为”X”。

为每个方格添加点击事件监听器:通过forEach方法遍历NodeList中的每个方格。对每个方格,我们添加一个click事件监听器。

放置标记与切换玩家:在点击事件的回调函数中,我们需要执行以下逻辑:

检查方格是否为空: 只有当方格当前没有标记时,才允许放置标记。这可以通过检查square.innerHTML是否为空字符串来实现。放置标记: 如果方格为空,将currentPlayer的值赋给square.innerHTML,从而在方格中显示”X”或”O”。切换玩家: 使用三元运算符简洁地切换currentPlayer的值。如果当前玩家是”X”,则切换为”O”;否则,切换为”X”。

以下是实现上述逻辑的JavaScript代码:

window.onload = () => {    const squares = document.querySelectorAll(".square");    let currentPlayer = "X"; // 初始玩家为X    squares.forEach(square => {        square.addEventListener("click", () => {            // 只有当方格为空时才允许放置标记            if (square.innerHTML === "") {                square.innerHTML = currentPlayer; // 放置当前玩家的标记                // 切换到下一位玩家                currentPlayer = currentPlayer === "X" ? "O" : "X";            }        });    });    // 重置按钮的事件监听器将在下一节介绍};

实现游戏重置功能

为了让玩家能够重新开始游戏,我们需要一个重置按钮。当点击这个按钮时,所有棋盘方格的内容都应该被清空。

获取重置按钮元素:使用document.querySelector(‘#reset-btn’)获取重置按钮。

添加点击事件监听器:为重置按钮添加一个click事件监听器。

清空所有方格:在重置按钮的点击回调函数中,再次获取所有方格元素,并遍历它们,将每个方格的innerHTML设置为空字符串。

将重置逻辑添加到window.onload函数中,与游戏核心逻辑一起初始化:

window.onload = () => {    const squares = document.querySelectorAll(".square");    let currentPlayer = "X";     squares.forEach(square => {        square.addEventListener("click", () => {            if (square.innerHTML === "") {                square.innerHTML = currentPlayer;                currentPlayer = currentPlayer === "X" ? "O" : "X";            }        });    });    // 为重置按钮添加事件监听器    document.querySelector('#reset-btn').addEventListener('click', () => {        squares.forEach(square => {            square.innerHTML = ""; // 清空所有方格内容        });        currentPlayer = "X"; // 重置当前玩家为X    });};

完整代码示例

将HTML、CSS和JavaScript代码整合,即可得到一个功能完整的井字棋游戏。

HTML (index.html):

            JavaScript 井字棋      

CSS (style.css):

body {  font-family: Arial, sans-serif;  display: flex;  flex-direction: column;  align-items: center;  justify-content: center;  min-height: 100vh;  margin: 0;  background-color: #f4f4f4;}#board {  margin: 20px auto;  width: 50%;  max-width: 300px;  border: 1px solid #ccc;  background-color: white;  box-shadow: 0 0 10px rgba(0,0,0,0.1);}.row {  display: grid;  grid-template-columns: repeat(3, 1fr);}.square {  border: 1px solid #ddd;  padding: 1rem;  cursor: pointer;  text-align: center;  aspect-ratio: 1/1;  display: flex;  align-items: center;  justify-content: center;  font-size: 2.5em; /* 增大字体 */  font-weight: bold;  color: #333;  transition: background-color 0.2s ease;}.square:hover {  background-color: #e9e9e9;}#reset-btn {  display: block;  margin: 20px auto;  padding: 10px 25px;  font-size: 1.1em;  cursor: pointer;  background-color: #007bff;  color: white;  border: none;  border-radius: 5px;  transition: background-color 0.2s ease;}#reset-btn:hover {  background-color: #0056b3;}

JavaScript (script.js):

window.onload = () => {    const squares = document.querySelectorAll(".square");    let currentPlayer = "X"; // 初始玩家为X    squares.forEach(square => {        square.addEventListener("click", () => {            // 只有当方格为空时才允许放置标记            if (square.innerHTML === "") {                square.innerHTML = currentPlayer; // 放置当前玩家的标记                // 切换到下一位玩家                currentPlayer = currentPlayer === "X" ? "O" : "X";            }        });    });    // 为重置按钮添加事件监听器    document.querySelector('#reset-btn').addEventListener('click', () => {        squares.forEach(square => {            square.innerHTML = ""; // 清空所有方格内容        });        currentPlayer = "X"; // 重置当前玩家为X    });};

注意事项与总结

DOM操作效率: 在这个简单的井字棋游戏中,直接操作innerHTML是可行的。但在更复杂的应用中,频繁的DOM操作可能影响性能。可以考虑使用虚拟DOM库(如React, Vue)或更优化的DOM更新策略。游戏胜利判断: 当前教程仅实现了点击、切换玩家和重置功能。一个完整的井字棋游戏还需要添加逻辑来判断何时出现三连珠(水平、垂直或对角线),以及游戏是否平局。这通常涉及在每次标记放置后检查棋盘状态。状态管理: currentPlayer变量是游戏状态管理的一个简单示例。在大型应用中,更复杂的全局状态管理模式(如Redux、Vuex)会更有用。用户体验: 可以进一步增强用户体验,例如在游戏结束时显示胜利者信息,或者禁用已填满的方格。

通过本教程,您应该已经掌握了使用JavaScript实现井字棋游戏基础交互的核心方法。在此基础上,您可以继续扩展功能,例如添加胜利判断逻辑、游戏历史记录等,以构建更完善的游戏体验。

以上就是使用JavaScript构建交互式井字棋游戏:点击、切换与重置的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1603690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
jQuery事件委托:解决动态加载内容点击事件失效问题
上一篇 2025年12月23日 17:24:49
树莓派html怎么运行_树莓派运行html步骤【指南】
下一篇 2025年12月23日 17:24:55

相关推荐

  • 教你win11蓝牙怎么打开

    在windows系统中,通常都内置了蓝牙功能,这为用户提供了便捷的方式来连接各种支持蓝牙的电子设备。对于刚刚安装win11系统的朋友们来说,可能对一些基本操作还不太熟悉,比如如何开启win11的蓝牙功能等。接下来,小编将为大家详细介绍如何在win11中启用蓝牙功能的具体步骤。 方法非常简单,具体的操…

    2026年9月1日
    100
  • Win10打开应用商店会提示错误代码0x80070422是什么原因?

    近期,不少windows 10用户反映,在尝试打开应用商店时,会收到错误代码0x80070422的提示,对此感到困惑。下面的文章将为大家介绍如何解决这一问题。 Windows 10应用商店出现错误代码0x80070422的解决方案 第一步,先在桌面左下角点击“开始菜单图标”,随后选择“运行”选项,或…

    2026年9月1日
    100
  • Webpack项目优化:如何利用多进程、代码分割和摇树优化提升打包速度?

    Webpack性能调优:多进程、代码分割与摇树优化 Webpack配置是项目优化的关键环节,尤其在不同Webpack版本之间,多进程打包、压缩、代码分割(splitChunks)和摇树优化(tree-shaking)的配置差异较大,容易造成困惑。本文将对此进行详细解读。 首先,不同Webpack版本…

    2026年9月1日
    100
  • PHP cURL查询Notion数据库:掌握正确的过滤条件构建方法

    本教程详细阐述了使用PHP cURL向Notion API查询数据库时,如何正确构建包含过滤条件的POST请求体。核心问题在于,过滤条件必须嵌套在请求载荷的filter键下,而非直接作为顶级属性。文章通过对比错误与正确的代码示例,指导开发者精确地筛选Notion数据库数据,避免获取冗余信息,从而提高…

    2026年9月1日
    100
  • 如何为WMP添加专辑封面

    如何为WMP添加专辑封面如何为WMP添加专辑封面如何为WMP添加专辑封面如何为WMP添加专辑封面

    首先,找到你想要设置为专辑封面的图片,使用鼠标右键点击该图片并选择“复制”,或者直接按下键盘上的Ctrl+C快捷键,完成图片复制。 接着进入 Windows Media Player 11 的媒体库界面,找到对应的音乐专辑,用鼠标右键点击该专辑的图标,在弹出的菜单中选择“粘贴”选项,即可将之前复制的…

    2026年9月1日 用户投稿
    100
  • Win10提示pin码不可用怎么办?Win10提示pin码不可用的解决方法

    Win10提示pin码不可用怎么办?Win10提示pin码不可用的解决方法Win10提示pin码不可用怎么办?Win10提示pin码不可用的解决方法Win10提示pin码不可用怎么办?Win10提示pin码不可用的解决方法Win10提示pin码不可用怎么办?Win10提示pin码不可用的解决方法

    通常情况下,我们在使用电脑时都会设置一个pin码来保障设备的安全性。然而,有些用户在尝试输入pin码时会收到“pin码不可用”的提示。如果你也遇到了这样的问题,别担心,下面将为你介绍一种解决办法。 Windows 10显示PIN码不可用的解决方案 按下Win+R键,打开运行窗口。 在运行窗口中输入“…

    2026年9月1日 用户投稿
    000
  • Java Collections.frequency方法如何统计频率

    Collections.frequency方法用于统计集合中某元素出现次数,接收集合和目标元素为参数,遍历集合通过equals()比较并返回匹配次数;适用于List等Collection类型,支持自定义对象(需重写equals),可统计null,但集合为null时抛异常,时间复杂度O(n),对Set…

    2026年9月1日
    300
  • 教你win10系统硬盘分区不显示如何找回

    教你win10系统硬盘分区不显示如何找回教你win10系统硬盘分区不显示如何找回教你win10系统硬盘分区不显示如何找回教你win10系统硬盘分区不显示如何找回

    最近收到一些用户的反馈,他们在将电脑重装windows 10系统后,对硬盘进行了删除分区并重新创建分区的操作。虽然在磁盘管理中可以看到这些分区处于正常可用状态,但在“此电脑”中却无法显示。这种情况通常是由于缺少盘符所引起的。接下来,我们来教大家如何在win10系统中找回那些未显示的硬盘分区。 第一步…

    2026年9月1日 用户投稿
    100
  • Webpack性能优化:多进程、代码分割与摇树优化如何高效运用?

    Webpack性能调优策略:多进程、代码分割与摇树优化 Webpack配置对项目性能至关重要。本文将深入探讨Webpack不同版本(如Webpack 4和Webpack 5)的多进程打包、压缩、代码分割(splitChunks)和摇树优化(tree shaking)等优化策略,并解答常见问题。 许多…

    2026年9月1日
    100
  • win10电脑网卡驱动异常怎么办?

    windows 10用户群体十分庞大,它已经成为全球广泛使用的操作系统,然而,我们都知道微软在其新系统中难免存在一些不足之处。其中,windows 10无线网卡驱动问题尤为让人困扰,驱动程序的兼容性常常成为难题。那么,如何解决这种无线网卡驱动异常的情况呢?接下来,让我们一起来看看具体的操作步骤。 W…

    2026年9月1日
    100
  • win10怎么新建一个本地管理员账户_win10创建本地管理员账户步骤

    1、可通过计算机管理、命令提示符或设置应用创建Windows 10本地管理员账户;2、计算机管理需新建用户并加入Administrators组;3、CMD使用net user和net localgroup命令快速创建并赋权;4、设置应用中添加其他用户后更改账户类型为管理员。 如果您需要在Window…

    2026年9月1日
    200
  • 如何实现JavaScript元素平滑滚动?

    优雅的JavaScript滚动:告别生硬跳转 在JavaScript中操控元素的scrollLeft属性时,常常会遇到滚动效果过于生硬的问题。本文将介绍如何为scrollLeft的数值变化添加动画效果,打造更流畅、更舒适的滚动体验。 关键在于避免直接修改scrollLeft值造成的突兀感。直接赋值会…

    2026年9月1日
    700
  • Win10 20H2怎么设置硬盘密码?

    Win10 20H2怎么设置硬盘密码?Win10 20H2怎么设置硬盘密码?Win10 20H2怎么设置硬盘密码?Win10 20H2怎么设置硬盘密码?

    最近有不少朋友升级到了win10 20h2版本,但对于新系统的操作还不太熟悉,尤其是不知道如何对电脑文件进行加密,也不清楚磁盘该如何加密。今天就为大家介绍一种在win10 20h2中设置磁盘密码的方法,快跟着步骤一起学习吧! Win10 20H2磁盘设置密码的详细步骤: 首先打开“此电脑”,然后右键…

    2026年9月1日 用户投稿
    100
  • Win10无法共享打印机和文件怎么办

    最近有部分朋友提到,他们遇到了电脑无法共享文件或者无法连接共享打印机的问题。那么针对这些问题,我们应该如何解决呢?接下来就由我为大家详细讲解这两种情况的解决办法,一起来学习一下吧! Win10无法共享打印机与文件的解决步骤: 按下【Win】+【R】键打开运行窗口,在其中输入【control】并回车,…

    2026年9月1日
    100
  • java学习应用篇|windows安装JDK及配置环境变量

    java学习应用篇|windows安装JDK及配置环境变量java学习应用篇|windows安装JDK及配置环境变量java学习应用篇|windows安装JDK及配置环境变量java学习应用篇|windows安装JDK及配置环境变量

    学习前言 实际上,本系统中最有价值的内容已经在前两篇文章中介绍完毕,接下来的内容主要是对前面知识的应用。新知识层出不穷,每隔几天就会有新的概念和框架出现。我们在本系列学习中,力求通过基本的学习方法来深入探究代码的本质,这样无论将来出现什么新的知识点,我们都能迅速学习并应用。小刀的水平有限,欢迎大家在…

    2026年9月1日 用户投稿
    200
  • 打印机驱动安装失败怎么办?

    打印机驱动安装失败怎么办?打印机驱动安装失败怎么办?打印机驱动安装失败怎么办?打印机驱动安装失败怎么办?

    在日常生活中,我们难免会遇到各种各样的问题,但无论怎样,我们都应该认真对待并妥善解决这些问题。今天,小编就来给大家分享一下关于打印机安装失败的解决方法,以便大家在遇到类似情况时能够自行解决。 由于电脑系统的配置和设置存在差异,并且打印机种类繁多,这常常会导致打印机驱动安装失败的情况发生。因此,今天我…

    2026年9月1日 用户投稿
    500
  • 快兔网盘PC客户端如何使用_快兔网盘PC客户端使用教程

    快兔网盘PC端需通过安卓模拟器运行,用户先下载模拟器安装包并完成快速安装,随后在模拟器内启动快兔网盘APP进行登录;接着可使用上传、文件管理、下载解压及分享等功能,所有操作均通过模拟器界面完成;为提升体验,建议开启高帧率模式、设置键盘快捷键,并避免多实例运行以减少卡顿。 快兔网盘PC客户端的使用主要…

    2026年9月1日
    200
  • 电脑windows盗版系统国内泛滥成灾,为何微软不追究?

    电脑windows盗版系统国内泛滥成灾,为何微软不追究?电脑windows盗版系统国内泛滥成灾,为何微软不追究?电脑windows盗版系统国内泛滥成灾,为何微软不追究?电脑windows盗版系统国内泛滥成灾,为何微软不追究?

    windows操作系统自诞生以来便展现出强大的生命力。尽管苹果的操作系统比微软的操作系统更早推出,但由于产品定位和市场导向问题,苹果始终与普通大众保持较远的距离。windows之所以能够大范围普及,总体来说是在正确的时间采取了正确的行动,这与互联网时代之前流行的“飞猪理论”不谋而合——走在正确的道路…

    2026年9月1日 用户投稿
    600
  • ChatGPT怎么用_ChatGPT注册登录与基础使用教程

    答案是注册并掌握提问技巧后,ChatGPT能成为高效工具。需通过官网注册,验证邮箱和手机号,登录后可在聊天界面输入问题,利用上下文记忆、角色设定、明确指令等技巧提升回答质量,免费版适合初试,Plus版则提供GPT-4、插件、数据分析等高级功能,适合高频深度使用者。 ☞☞☞AI 智能聊天, 问答助手,…

    2026年9月1日
    200
  • Win10系统电脑怎么安装打印机?

    Win10系统电脑怎么安装打印机?Win10系统电脑怎么安装打印机?Win10系统电脑怎么安装打印机?Win10系统电脑怎么安装打印机?

    win10系统电脑如何安装打印机?很多用户在日常操作中常常需要打印一些文档,那么我们应该如何在电脑上安装打印机呢?接下来,小编将为大家详细介绍win10电脑安装打印机的具体步骤,赶紧学起来吧! 操作流程如下: 1、进入设置界面,找到“设备”选项,这里涵盖了蓝牙、打印机以及鼠标等相关设置; 2、可以直…

    2026年9月1日 用户投稿
    100

发表回复

登录后才能评论
关注微信