
本教程详细介绍了如何使用J*aScript实现井字棋(Tic-Tac-Toe)游戏的核心交互逻辑。我们将学习如何通过事件监听器处理用户点击,在棋盘方格中放置“X”或“O”标记,实现玩家轮流操作,并添加重置游戏的功能。文章将提供完整的HTML、CSS和J*aScript代码示例,帮助开发者构建一个功能完善且交互流畅的井字棋应用。
在开始J*aScript逻辑之前,我们需要一个基本的HTML结构来承载井字棋盘。这个结构将包含一个主容器、若干行以及每个方格的占位符,以及一个用于重置游戏的按钮。
<body>
<div id="board">
<div class="row">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<div class="row">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<div class="row">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<button id="reset-btn">重置游戏</button>
</div>
</body>为了让棋盘看起来更像一个井字棋盘,并提供基本的交互视觉反馈,我们可以添加一些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),并自动切换到下一位玩家。这需要J*aScript来监听点击事件并管理游戏状态。
获取所有方格元素:document.querySelectorAll(".square") 方法会返回一个NodeList,其中包含所有具有square类的元素。由于NodeList不是一个普通的数组,我们不能直接在其上调用addEventListener来为所有元素添加监听器。因此,需要遍历这个NodeList。
初始化当前玩家: 使用一个变量(例如currentPlayer)来跟踪当前轮到哪位玩家。我们可以将其初始化为"X"。
为每个方格添加点击事件监听器: 通过forEach方法遍历NodeList中的每个方格。对每个方格,我们添加一个click事件监听器。
放置标记与切换玩家: 在点击事件的回调函数中,我们需要执行以下逻辑:
以下是实现上述逻辑的J*aScript代码:
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";
}
});
});
// 重置按钮的事件监听器将在下一节介绍
};为了让玩家能够重新开始游戏,我们需要一个重置按钮。当点击这个按钮时,所有棋盘方格的内容都应该被清空。
腾讯AI 开放平台
腾讯AI开放平台
381
查看详情
获取重置按钮元素: 使用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和J*aScript代码整合,即可得到一个功能完整的井字棋游戏。
HTML (index.html):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>J*aScript 井字棋</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="board">
<div class="row">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<div class="row">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<div class="row">
<div clas
s="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
<button id="reset-btn">重置游戏</button>
</div>
<script src="script.js"></script>
</body>
</html>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;
}J*aScript (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
});
};通过本教程,您应该已经掌握了使用J*aScript实现井字棋游戏基础交互的核心方法。在此基础上,您可以继续扩展功能,例如添加胜利判断逻辑、游戏历史记录等,以构建更完善的游戏体验。
以上就是使用J*aScript构建交互式井字棋游戏:点击、切换与重置的详细内容,更多请关注其它相关文章!
# vue
# css
# 为空
# 回调
# 腾讯
# 点击
# css样式
# win
# 回调函数
# node
# js
# html
# java
# javascript
# react
# 网站建设时如何设计文字
# 邯郸外贸推广网站招聘信息
# 珠海seo快速排名公布
# 黄埔区高端网站建设
# 常州百万关键词排名
# 天津网站建设公司效果
# 网站制作推广一般多少钱
# 海外网站建设与推广教程
# 武汉seo价位
# 北京移动端的seo
# 我们可以
# 鼠标
# 切换到
# 换行
# 清空
# 遍历
# 运算符
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
优化推广96088 】
【
技术知识133117 】
【
IDC资讯59369 】
【
网络运营7196 】
【
IT资讯61894 】
相关推荐:
抖音网页版地址直接进入_抖音网页版在线观看入口
如何取消数字签名
重返未来:1999卡戎全方位攻略
《图怪兽》退出登录方法
在Django单元测试中优雅处理信号:基于环境的条件执行策略
管理打开的编辑器:固定、分组和关闭技巧
Word 2003字体大小设置方法
《宝可梦大集结》S4冠军之路开始时间介绍
智慧团建活动报名入口 智慧团建活动报名入口手机端官网
《糖豆》添加舞曲方法
FullCalendar自定义按钮样式定制指南
自定义你的VS Code状态栏,监控关键信息
search中maxlength属性用法解析
动漫岛在线动漫网 动漫岛动漫在线观看官方入口
《原神》月之一版本新增书籍一览
抖音火山版如何进行提现
word页码灰色不能用如何解决
智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法
J*aScript 数值去小数位处理:多种方法与实践
使用document.execCommand实现Web文本编辑器加粗/取消加粗
优化响应式标题底部边框:CSS实现技巧与最佳实践
《海贝音乐》均衡器设置方法
个人所得税办理入口 个人所得税综合所得年度汇算入口
哔哩哔哩在线观看入口 B站官网免费进入
如何在mysql中比较InnoDB和MyISAM区别
抖音火山版注销账号抖音会注销吗 抖音火山版与抖音账号注销关系
如何在CSS中使用伪类选择器_hover实现悬停效果
Dagster资产间数据传递与用户配置管理教程
ao3入口镜像地址 ao3镜像入口可靠跳转
C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别
C++如何将字符串转换为大写或小写_C++ transform函数的使用技巧
解决VS Code中Python版本冲突与输出异常的指南
网页版网易云音乐入口_网易云音乐在线官网登录
掌握Go App Engine项目结构与GOPATH:包管理与导入实践
顺丰速运官网查询入口 顺丰物流查询官网入口链接
mysql如何配置从库只读_mysql从库只读设置方法
Flask 应用中图片动态更新与上传:实现客户端定时刷新与服务器端文件管理
虫虫助手如何更新游戏
苹果手机如何清理系统缓存数据 iPhone非越狱清理垃圾文件的技巧【系统优化】
斯宾塞称XGP云游戏“蒸蒸日上”:正在构建一个游戏从未如此唾手可得的未来
《金山词霸》语音翻译方法
苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程
热血江湖归来医师加点攻略
《kimi智能助手》制作ppt教程
汽水音乐在线入口 汽水音乐网页端官方页面快速打开
12306夜间购票失败? | 查看官方公布的暂停服务公告与应对方案
使用 .htaccess 正确配置 WordPress 子目录重定向与路径保留
msn官方入口2025登录 msn官网2025直达首页入口
byrutor直接访问入口 byrutor官方游戏库
KFC邀请码怎么使用领额外优惠_KFC邀请码输入方式与额外优惠代码获取方法
2025-12-09
运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。