【网页制作】原生JavaScript制作“井字棋”

井字棋 HTML小游戏(部分) 阅读详情

🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。

前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:Html+Css+JS / jQuery小型网页综合实战 ,一个专注于分享网页制作实例的专栏~

专栏文章直链:
【网页制作】jQuery制作动态指针钟表
【网页制作】jQuery模拟提交表单生成卡片
【网页制作】制作静态钟表
【网页制作】jQuery控制页面侧边栏的收缩与展开
【网页制作】制作百度网盘登录页
【网页制作】注册表单页
【网页制作】jQuery操作css实现设置箭头图片

人生苦短,我用python

制作要求

这是一个特殊的 “井字棋” ,相关内容的注释在函数中有,这是我看抖音上的一个案例仿造的,仅供娱乐!
抖音上的效果:
在这里插入图片描述

再看仍然仍不住还是想笑笑😂😂

制作效果图

在这里插入图片描述

参考源代码

目录结构

└──网页文件夹
	└── well.html

well.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>井字棋</title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}

			h1 {
				margin-top: 100px;
			}

			#well {
				width: 306px;
				height: 306px;
				overflow: hidden;
				margin: 100px auto;
				position: relative;
				border: #000 3px solid;
			}

			.row {
				width: 612px;
				height: 102px;
				position: absolute;
			}

			.cell {
				float: left;
				width: 100px;
				height: 100px;
				font-size: 72px;
				text-align: center;
				line-height: 100px;
				border: #000 1px solid;
			}

			#row2 {
				top: 102px;
			}

			#row3 {
				top: 204px;
			}
		</style>
	</head>
	<body onload="init()">
		<center>
			<h1>井字棋</h1>
		</center>
		<div id="well">
			<div id="row1" class="row"></div>
			<div id="row2" class="row"></div>
			<div id="row3" class="row"></div>
		</div>
		<script type="text/javascript">
			var index = 0;

			function init() {
				["row1", "row2", "row3"].forEach(function(id_) {
					let element = document.getElementById(id_);
					// 清空子节点
					while (element.hasChildNodes()) {
						element.removeChild(element.firstChild);
					}
					Array.from(Array(6), (v, k) => k).forEach(() => change(-1)); // 自动滑到最左边
					// 创建格子
					Array.from(Array(6), (v, k) => k).forEach(function(item) {
						let temp = document.createElement("div");
						temp.className = "cell";
						temp.onclick = go;
						element.appendChild(temp);
					});
				});
				// 初始化时候随机位置下(针对先手下中间必赢局面,放开概率)
				document.getElementById(["row1", "row2", "row3"][parseInt(Math.random() * 3)]).childNodes[parseInt(Math.random() * 3)].innerHTML = "O";
			}

			function win(role) {
				alert(role + "赢了!"); init();
			}

			function check() {
				let board = [];
				["row1", "row2", "row3"].forEach(function(id_) {
					let temp = [];
					document.getElementById(id_).childNodes.forEach(function(item) {
						temp.push(item.innerText);
					});
					board.push(temp);
				});
				// 检测水平方向同列
				for (let row in board) {
					if (board[row].join("").indexOf("XXX") != -1) {
						return win("X");
					} else if (board[row].join("").indexOf("OOO") != -1) {
						return win("O");
					}
				}
				for (let col = 0; col < 6; col++) {
					// 检测y=x斜线方向
					if (col > 1 && board[0][col] && board[0][col] === board[1][col - 1] && board[1][col - 1] === board[2][col - 2]) {
						return win(document.getElementById("row1").childNodes[col].innerHTML);
					}
					// 检测y=x斜线方向
					else if (col < 4 && board[0][col] && board[0][col] === board[1][col + 1] && board[1][col + 1] === board[2][col + 2]) {
						return win(document.getElementById("row1").childNodes[col].innerHTML);
					}
					// 检测垂直方向同列
					if (board[2][col] && board[0][col] === board[1][col] && board[1][col] === board[2][col]) {
						return win(document.getElementById("row1").childNodes[col].innerHTML);
					}
				}
			}

			function go(element) {
				if (element.srcElement.innerHTML) {
					return alert("此处已有棋子~");
				} else if (index % 2) {
					element.srcElement.innerHTML = "O";
				} else {
					element.srcElement.innerHTML = "X";
				}
				index++;
				setTimeout(check, 100);
			}

			function change(delta) {
				// delta 为正,鼠标滚轮向下,井字棋向左移动,反之向右移动
				["row1", "row2", "row3"].forEach(function(item) {
					let temp = document.getElementById(item);
					let left = parseInt((temp.style.left || "0px").replace("px", ""));
					if (left === 0 && delta > 0) {
						temp.style.left = left - 102 * delta + "px";
					} else if (left === -306 && delta < 0) {
						temp.style.left = left - 102 * delta + "px";
					} else if (left > -306 && left < 0) {
						temp.style.left = (left - 102 * delta) + "px";
					}
				});
			}
			document.getElementById("well").addEventListener("mousewheel", function(event) {
				change(event.deltaY > 0 ? 1 : -1);  // 防止滑动过猛出现BUG
			});
		</script>
	</body>
</html>

使用方式说明,鼠标滚轮朝上滚动,井字棋界面向右移动;鼠标滚轮朝下滚动,井字棋界面向左移动。
原理图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

来个下棋的动态效果:
在这里插入图片描述
这合理吗?这很合理!“不会输”的五子棋哈哈哈~

用IE网页学游戏-井字棋 IE网页学游戏-井字棋 井字棋实现交互的简单小游戏,学习使用表格,理解javascript函数。 1.构造棋盘 用table元素的行列构造三行三列的表格。设置好120像素的井字棋背景,三个小图表示方格内背景、黑棋、白棋。 设置鼠标事件的相应函数,来生成点击的行列号。在相应方格内根据点击顺序NO,分黑白显示小图标。 <html> <title>井字棋<... 阅读详情

相关推荐

编程题——井字棋

编程题——井字棋 题目描述: 对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。 给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代表是对方玩家的棋子。 本代码适用于所有n*n棋盘 程序代码如下: #include <iostream> #include <vector> using nam...

kevin980123的编程世界 4795

网页版井字游戏(TicTacToe)人机对战的制作(附思路和源码)

井字游戏的规则是:在一个井字格子的棋盘里下棋,横竖斜一旦三子连子,则胜。而事实上,遵循一定的规则,该游戏便能保证不败,即至少是平局。 若是两人对战,则仅需要判断“胜负平”三种状态即可,比较简单,而人机对战的难点便在于让机器立于不败之地的下棋规则。下面会重点讲解不败的思路。先放一张游戏截图,程序演示与源码下载可以去:戳我演示或下载代码 在此先规定电脑一定是先手,如果电脑不是先手的话算法需要另外设计

吟游诗人——吟唱生命的不朽 1万+

前端技术搭建井字游戏(内含源码)

上周我们实通过前端基础实现了飞机大战游戏,今天还是继续按照我们原定的节奏来带领大家完成一个井字游戏游戏,功能也比较简单简单,也是想借助这样一个简单的功能,然后来帮助大家了解我们JavaScript在前端中的作用, 在前面的文章当中我们也提及到我们在本系列的专栏是循序渐进从简单到复杂的过程,后续会带领大家用前端实现翻卡片、扫雷、贪吃蛇等有趣的小游戏,纯前端语言实现,都会陆续带给大家。欢迎大家订阅我们这份前端小游戏的专栏。

商务合作欢迎私信我 6万+

井字棋小游戏(HTML/CSS/JS)

井字棋小游戏,使用html,js,css。

weixin_52841164的博客 1064

【项目开发】可视化双人井字棋游戏

井字棋(Tic Tac Toe)是一款经典的纸笔小游戏,本项目通过 HTML、CSS 和 JavaScript 实现了一个浏览器可视化双人井字棋游戏。玩家可以直接在网页中通过鼠标点击落子,系统自动判断胜负和平局,并记录双方胜局。项目特点:1.浏览器可视化界面,操作直观;2.双人轮流下棋;3.自动判断胜负和平局;4.显示双方胜局统计;5.支持“再来一局”功能。

等风来 265

HTML5井字棋

可以作为学习html5的好demo,是一个大家都喜欢玩的井字棋游戏,感兴趣的可以下载下来玩

前端小案例——网页井字棋

前端小案例——网页井字棋

秋刀鱼不做梦的编程日常 1万+

井字棋AI对战小游戏(前端开发)

这是一个拥有智能AI对手的井字棋小游戏,使用JavaScript语音进行开发,是一个前端小游戏,打开之后运行井字棋.html即可在网页上与AI进行井字棋游戏对战。也可以参考https://blog.youkuaiyun.com/qq_36171287/article/details/104887248这篇博客,主要代码博客中也都有。

JavaScript 进阶——井字棋游戏智能AI搭建

目录 井字棋游戏 准备的HTML: 准备的CSS: 第一部分点击出现O的JS代码: 现阶段效果: 第二部分:判断胜利 现阶段结果: 第三部分:简单的智能AI 现阶段结果: 第四部分:之前我们很容易就能击败AI,所以现在要强化AI的难度 完整JavaScript代码: 结果:不多说了,还没赢过???? 学习来源:JavaScript井字棋游戏开发与AI算法 井字棋游戏 ...

苦作舟的空城机 3812

SoC验证新思路:除了UVM仿真,你还可以试试Cadence JasperGold的形式化验证

本文深入探讨了Cadence JasperGold形式化验证在SoC设计中的创新应用,对比传统UVM仿真验证,详细解析了其数学穷尽性验证优势。通过实战案例展示了JasperGold在总线协议、时钟域交叉等关键场景的验证方法,并提供了混合验证流程设计与效能优化方案,帮助工程师提升验证效率30%以上。

weixin_30566063的博客 122

ubuntu为Docker配置代理

我们平常在ubuntu终端中使用curl或git命令时,往往会很慢。所以,首先需要给ubuntu终端环境添加代理。查看自身那个软件的端口号,我这里是7890。

不想随波逐流的大学生一枚,我们每个人都在努力奔跑 1643

网页制作html+css+javascript

👧作者:大月月 📢分享知识:html+css+javascript网页制作 ❌:拒绝摆烂,天天向上 网页制作之大好河山 ❤希望大家多多点赞收藏哦网页制作之大好河山✏网页部分截图✏网页部分代码📌1.style.css📌2.index.html(主页面代码) ✏网页部分截图 🚩 🚩 🚩 🚩 ✏网页部分代码 📌1.style.css /* 1. 清除默认 --------------------------------------*/ p { margin: 0; } ul { padding: 0; }.

m0_67280147的博客 5965

命令行驱动视频剪辑:cutcli与AI自动化工作流实战

在视频内容创作领域,自动化与批量化处理是提升生产效率的关键。传统图形界面工具在应对重复性任务时往往效率低下,而通过命令行接口(CLI)驱动视频生成,则能实现流程的程序化控制。其技术原理在于将视频结构抽象为可编程的指令序列,通过解析命令生成标准化的工程文件。这种模式的核心价值在于将视频制作从手动操作转变为代码驱动,特别适合与AI编程助手集成,实现自然语言到视频草稿的自动转换。应用场景广泛覆盖社交媒体内容批量生产、教育视频自动化生成、数据可视化视频组装等领域。本文以cutcli工具为例,深入解析如何通过命令行与

weixin_42520239的博客 579

html css js网页制作实例,HTML+CSS+JavaScript网页制作案例教程

《高等学校计算机科学与技术项目驱动案例实践规划教材:网页制作案例教程(HTML+CSS+JaScript)》以DreamweerCS5软件和FlashCS5软件的使用为基础,以AscentSys医药商务系统项目案例的贯穿为主线,围绕AscentSys医药商务系统实际项目,详细全面系统地介绍了网页制作、设计、规划的基本知识以及网站设计、开发、发布的完整流程。全书共14章,分5大部分,内容包括网页制作...

weixin_35205982的博客 1万+

ArcGIS符号库下载 | 制图规范、三调、1:1万地形图、土地利用总体规划图.....

最近整理了一些符号库 涉及的类型比较多 包含有三调的(二调的也加上去了),一些点线面符号库,1:1万地形图,1:5万土地利用,土地利用总体规划图

qq_43173805的博客 2万+

【PT+Arduino+OneNET基础教程1】PacketTracer中MCU芯片编程教程(零基础入门)

PacketTracer软件内MCU芯片编程入门 零基础

ChloeMax_的博客 9456

前端实战从零构建响应式井字棋游戏

本文详细介绍了如何使用现代前端技术构建一个完整的井字棋游戏。从HTML结构设计、CSS样式布局到JavaScript游戏逻辑实现,全面解析每个开发环节。重点讲解了状态管理、胜负判断算法和响应式设计技巧,并提供了性能优化和功能扩展的建议。通过这个经典案例,开发者可以掌握前端项目开发的核心流程和最佳实践。

ztt123654的博客 1343

Windows下用MSYS2一键搞定Verilator安装(附国内镜像加速)

本文详细介绍了在Windows系统下,如何利用MSYS2工具和国内镜像源,快速、高效地完成Verilator的安装与配置。通过替换清华镜像源加速下载,并配合Pacman包管理器,实现近乎一键式的安装流程,有效解决了传统方法步骤繁琐、网络依赖下载慢的问题,为数字电路仿真提供了便捷的Windows环境解决方案。

weixin_29208327的博客 596

react井字棋---最全井字棋小游戏教程

上一期我们利用create-react-app搭建了好了一个react项目,这期我们通过跟随React官方教程--编写一个“井字棋"小游戏,来熟悉react的基本用法。 首先来看下“井字棋”的最终实现效果: 从演示中我们可以看到,这个游戏大致有以下功能: 1. 切换玩家; 2. 判定胜负; 3. 高亮获胜棋子; 4. 按步骤悔棋; 制作棋盘 首先我们需要制作一个棋盘。 在项目中新建一个Board.js文件: importRea...

weixin_41949144的博客 2619

3D视觉革命丨多相机协同拼接技术如何重塑工业检测边界

本文深入探讨了多相机协同拼接技术如何突破单台3D相机的物理局限,实现工业检测从“点面”到“立体”的无死角覆盖。通过拆解系统标定、同步融合等核心技术,并结合锂电池、长轴零件等实战案例,揭示了该技术如何以虚拟“超级视觉传感器”重塑检测边界,提升精度与效率。

weixin_29056865的博客 388

【2026年华为暑期实习/秋招(AI)-8月5日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 本文包含20道选择题,涵盖深度学习、数值计算、概率统计、线性代数及机器学习等领域。重点考察了Softmax的数值稳定性实现(减去最大值)、视觉问答任务(图像+问题→答案)、分层强化学习的奖惩计算、欧氏距离与余弦相似度、反向传播梯度计算、SVD降维存储优化、贝叶斯概率推断、插值多项式等。此外,涉及逻辑回归评价指标(不含MSE)、端侧推理内存因素(中间激活)、集中趋势度量(均值)、Householder变换性质、早期停止正则化、梯度矩阵秩与优化、在线学习特性及大模型训练技巧(如学习率预热、梯度裁剪)等知

m0_73659489的博客 194

React井字棋 history map (step, move)

最近看到React官网井字棋教程中有一段代码: const moves = history.map((step, move) => { const desc = move ? 'Go to move #' + move : 'Go to game start'; return ( <li> ...

sbc_sbc的博客 844

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

“井”字棋变“惊”字棋:我的React魔法复习手册

本文通过开发React井字棋游戏,系统讲解了React核心概念:组件化开发(Square、Board组件)、状态管理(useState)、props传递、状态提升、不可变性原则等。文章以游戏开发为主线,生动解析了条件渲染、列表渲染、事件处理等关键技术点,并拓展了撤销功能在真实项目中的应用。通过这个简单项目,作者不仅掌握了React开发精髓,更体会到从需求分析到代码优化的完整开发思维。最后,学习过程中成长比完美更重要。

2401_87960467的博客 751

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

使用 Vue.js 改写 React 的官方教程井字棋

React 的官方教程井字棋很好的引导初学者一步步走进 React 的世界,我想类似的教程对 Vue.js 的初学者应该也会有启发,于是使用 Vue.js 进行了改写 可以先查看最终的结果,尝试点击体验,我们将逐步地实现这个效果 初始状态代码 初始状态查看 打开初始状态直接编辑,或者将对应的文件复制下来放置在同一文件夹中 此时只是一个简单的井字棋格子,以及写死的下一个选手 初始代码分析 ...

weixin_30000735的博客 1053

js井子棋

js (vue)如何实现井字琪 游戏规则我想不用我多说了, 本次dome仅仅是作者太无趣了, 写着玩的,不喜勿喷。 先给大家看看样子吧。 dome介绍: 这里实现了 井字棋的博弈与胜负。 可以一个人玩。 (自己是X 同时也是 O) 不过这样难免显得无趣。 我又加了个人机跟你下棋 这里面的人机比较笨, 我就不优化了。 (可不要欺负人家呀) 话不多说先上源代码。 <template> <div class="pages"> <h2>井字棋</h2>

厚渡 5917
上一篇: 【网页制作】原生JavaScript制作汉字时钟
下一篇: 【OpenCV学习】初识OpenCV其二
user_from_future
博客等级 码龄5年 4067粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值