【网页制作】原生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

保姆级教程:彻底清理Win11更新缓存并解除外设,一次搞定0xc1900101更新错误

本文提供了一套完整的Win11更新报错0xc1900101解决方案,涵盖软件环境净化和硬件设备隔离。通过终止干扰进程、重置更新组件、清理临时文件以及断开外设等步骤,有效提升更新成功率。特别强调外设驱动兼容性对解决0xc1900101错误的关键作用。

weixin_33483304的博客 419

如何解决ipa包上传App Store Connect时出现的无效二进制文件问题

本文详细解析了ipa包上传App Store Connect时出现无效二进制文件问题的常见原因及解决方案。从Scheme配置、架构支持到权限声明,提供了全面的检查步骤和实用技巧,帮助开发者快速定位并解决上传问题,确保应用顺利通过审核。

weixin_28833069的博客 315

网页制作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

Linux基础——“C语言高级编程” C语言中的细节你真的知道吗?

文章目录GCC简介 GCC简介 gcc 所支持后缀名解释 .c c原始程序 .C / .cc /.cxx C++原始程

weixin_44278698的博客 2511

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

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

weixin_35205982的博客 1万+

遗传算法优化光学超表面:智能设计突破纳米结构瓶颈

光学超表面设计本质上是一个高维、非线性、离散每个结构单元(如纳米砖柱、孔洞、十字架)有多个参数(长、宽、高、旋转角、材料),整个阵列的参数组合数量随单元数指数级增长。性能指标(如聚焦效率、工作带宽、偏振转换率、特定角度响应)往往无法用简单解析式表达,需依赖计算密集型电磁仿真(如FDTD, FDFD, RCWA)来评估。结构参数微小变化可能引起光学响应的剧烈跃变,目标函数存在多个局部最优解。实际制造通常要求结构参数取自有限的离散值(如特定刻蚀深度、材料库)。

weixin_51101456的博客 1143

精度0.01%决定续航多20km|新能源汽车研发测试:功率分析仪到底有多硬核?

新能源汽车测试、功率分析仪、电驱系统、效率MAP、谐波THD、GB/T18488、CLTC工况、三电测试、台架标定、能量流分析。中的核心作用,用公式、思维导图、实战金句与避坑指南,帮研发测试人员把准数据、提效率、降返工,看完就能落地用。点击关注,进公众号主页查看历史文章,**台架接线图、效率MAP模板、GB/T18488测试清单等。优化弱磁/调制策略,高效区占比提升5%,CLTC续航直接+8~20km。同样工况,两次数据差0.8%,报告根本没法交。结果:数据飘、定位慢、反复返工、认证不过。

优快云-新能源汽车研发测试专业博主 174

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

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

ztt123654的博客 1343

[QMT量化交易小白入门]-六十九、ETF动量评分策略,历史年化收益率107%

C . bar_date } 跳过') returnC . bar_date } 跳过') returnC . bar_date } 跳过') return作用:如果当前不是回测模式且不是最后一根K线,则记录日志并跳过本次任务。这是为了避免在实时交易中对尚未完成的数据进行处理。

木头大左的博客 2233

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

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

weixin_41949144的博客 2619

UE5、CesiumForUnreal实现加载GeoJson绘制多面(MultiPolygon)功能(支持点选高亮)

UE5、CesiumForUnreal实现加载GeoJson实现多面(MultiPolygon)的绘制功能,并且支持点选高亮和属性查询。

专注GIS开发 4629

WPF+MVVM案例实战(二十三)- 阴影效果详解

通过附加属性实现阴影效果,通过改变不同的阴影属性值达到不同阴影效果

lingshuangcanxue 561

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

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

2401_87960467的博客 751

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

使用 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、付费专栏及课程。

余额充值