H5 五子棋小游戏

用H5实现双人五子棋小游戏。

功能分解:

  1. 棋盘的大小自己设置
  2. 白色棋子和黑色棋子的点击事件
  3. 有棋子的地方不能再次放棋子
  4. 判断同色棋子是否够五个
  5. 够五个之后弹框显示胜利

效果演示

原始样式
在这里插入图片描述
选择之后开始游戏
在这里插入图片描述
有没有一种特别好玩的感觉呢???

代码演示

body

<body><section id="chessboard" class="clear"></section><section id="mask"><aside class="conBox"><h1 class="borderBot">请选择棋盘规格大小!</h1><p id="subBtn" class="border">-</p><p id="gridNum" value="10" class="borderTop borderBot">10</p><p id="addBtn" class="border">+</p><button id="submitBtn">确认</button></aside></section></body>

style

<style>html,body,section,div,p {padding: 0;margin: 0;font-size: 12px;}body {width: 100%;height: 100%;position: fixed;}#chessboard {width: 90vmin;min-height: 89vmin;margin: calc(50vh - 46vmin + 2px) auto;background: #f5ca69;border: 2px solid #000;border-radius: 7px;-webkit-box-shadow: .1rem .1rem .05rem rgba(0, 0, 0, .5),-.1rem -.1rem .05rem rgba(0, 0, 0, .5);box-shadow: .1rem .1rem .05rem rgba(0, 0, 0, .5),-.1rem -.1rem .05rem rgba(0, 0, 0, .5);}#chessboard::after {content: "";display: block;height: 0;clear: both;visibility: hidden;}#chessboard div {width: calc(9vmin - 2px);height: calc(9vmin - 2px);float: left;border: 1px solid #000;border-radius: 5px;}#chessboard div p {width: 97%;height: 97%;margin: 1.5% auto;border-radius: 100%;}.white {background: -webkit-radial-gradient(at 35% 35%, #FFF, #CCC, #FFF);background: -o-radial-gradient(at 35% 35%, #FFF, #CCC, #FFF);background: -moz-radial-gradient(at 35% 35%, #FFF, #CCC, #FFF);background: radial-gradient(at 35% 35%, #FFF, #CCC, #FFF);box-shadow: .1rem .1rem .05rem rgba(0, 0, 0, .5);}.black {background: -webkit-radial-gradient(at 30% 30%, #999 -13%, #000 35%, #999 200%);background: -o-radial-gradient(at 30% 30%, #999 -13%, #000 35%, #999 200%);background: -moz-radial-gradient(at 30% 30%, #999 -13%, #000 35%, #999 200%);background: radial-gradient(at 30% 30%, #999 -13%, #000 35%, #999 200%);box-shadow: .1rem .1rem .05rem rgba(0, 0, 0, .5);}#mask {width: 100%;height: 100vh;position: fixed;top: 0;left: 0;background-color: rgba(0, 0, 0, .7);}.conBox {display: block;width: 300px;height: 200px;position: absolute;top: 0;left: 0;right: 0;bottom: 0;margin: auto;background-color: #fff;border-radius: 3px;box-shadow: .1rem .1rem .05rem rgba(0, 0, 0, .5);}.conBox h1 {width: 100%;float: left;margin: 0;line-height: 45px;text-align: center;}.conBox p {display: block;width: 40px;height: 40px;float: left;margin-top: 40px;font-size: 32px;text-align: center;line-height: 40px;cursor: pointer;}.conBox p:nth-child(2) {margin-left: 60px;}.conBox p:nth-child(3) {width: 100px;font-size: 20px;cursor: initial;}.conBox button {width: 80px;float: left;margin-top: 20px;margin-left: 110px;color: #fff;font-size: 14px;text-align: center;line-height: 28px;background-color: blue;border-radius: 10px;border: none;outline: none;}.clear::after {content: "";display: block;height: 0;clear: both;visibility: hidden;}.border,.borderTop,.borderBot {position: relative;}.border:after {content: " ";width: 200%;height: 200%;position: absolute;top: 0;left: 0;border-radius: 50px;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-transform: scale(0.5);transform: scale(0.5);-webkit-transform-origin: 0 0;transform-origin: 0 0;box-sizing: border-box;}.borderBot:after {content: " ";position: absolute;left: 0;bottom: 0;right: 0;height: 1px;border-bottom: 1px solid rgba(0, 0, 0, 0.2);-webkit-transform-origin: 0 100%;transform-origin: 0 100%;-webkit-transform: scaleY(0.5);transform: scaleY(0.5);}.borderTop:before {content: " ";position: absolute;left: 0;top: 0;right: 0;height: 1px;border-top: 1px solid rgba(0, 0, 0, 0.2);-webkit-transform-origin: 0 0;transform-origin: 0 0;-webkit-transform: scaleY(0.5);transform: scaleY(0.5);}</style>

script

<script>window.onload = function() {var grid;var chessArr = [];var timer = 0;var lineNum = parseInt(gridNum.innerHTML);var box = document.getElementById('chessboard');var chessBox = box.getElementsByTagName('div');var submitBtn = document.getElementById('submitBtn');subBtn.onclick = function() {if (lineNum > 8) {lineNum--;}gridNum.innerHTML = lineNum;}addBtn.onclick = function() {if (lineNum < 14) {lineNum++;}gridNum.innerHTML = lineNum;}//棋盘初始化submitBtn.onclick = function() {var chessMaxNum = lineNum * lineNum;var chessWH = 90 / lineNum;for (var i = 0; i < chessMaxNum; i++) {grid = document.createElement('div');grid.style.width = 'calc(' + chessWH + 'vmin - 2px)';grid.style.height = 'calc(' + chessWH + 'vmin - 2px)';grid.id = i;box.appendChild(grid);chessArr[i] = 0;grid.onclick = function(x) {var index = x.target.id || x.target.parentNode.id;return playChess(index);};};mask.style.display = 'none';}//棋子对象function Chess() {this.color = 'white';this.site = 0;this.chessDom = function() {var dom = document.createElement('p');dom.setAttribute('class', this.color);return dom;}this.ligature = function(arr) {var whiteChess = arr.map(function(s) {return (s.color == 'white') ? parseInt(s.site) : 0;});var blackChess = arr.map(function(s) {return (s.color == 'black') ? parseInt(s.site) : 0;});judge(whiteChess, '白子');judge(blackChess, '黑子');function judge(che, color) {for (var i = 0; i < che.length; i++) {var x = che[i] % lineNum;var y = parseInt(che[i] / lineNum);if (x <= lineNum - 5 && y <= lineNum - 5 && che[i] != 0) {if (che[i + 1 * lineNum + 1] != 0 && che[i + 2 * lineNum + 2] != 0 && che[i + 3 * lineNum + 3] != 0 && che[i +4 * lineNum + 4] != 0) {alert(color + '获胜!');location.replace(location);return true;}};if (y <= lineNum - 5 && che[i] != 0) {if (che[i + 1 * lineNum] != 0 && che[i + 2 * lineNum] != 0 && che[i + 3 * lineNum] != 0 && che[i + 4 *lineNum] != 0) {alert(color + '获胜!');location.replace(location);return true;}};if (x >= 4 && y <= lineNum - 5 && che[i] != 0) {if (che[i + 1 * lineNum - 1] != 0 && che[i + 2 * lineNum - 2] != 0 && che[i + 3 * lineNum - 3] != 0 && che[i +4 * lineNum - 4] != 0) {alert(color + '获胜!');location.replace(location);return true;}};if (x <= lineNum - 5 && che[i] != 0) {if (che[i + 1] != 0 && che[i + 2] != 0 && che[i + 3] != 0 && che[i + 4] != 0) {alert(color + '获胜!');location.replace(location);return true;}};};}}}function playChess(i) {if (chessArr[i] == 0) {timer++;chessArr[i] = new Chess();timer % 2 == 0 ? chessArr[i].color = 'black' : chessArr[i].color = 'white';chessArr[i].site = i;chessBox[i].appendChild(chessArr[i].chessDom());chessArr[i].ligature(chessArr);} else {alert('此处有棋子!');}}};</script>

赶快去实现一下吧!!!

					**添加我的微信公众号,获取更多内容呦。**

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【课题报告】OpenCV 抠图项目实战(10)PyQt5 使用

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;10&#xff09;PyQt5 使用 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个…

IDEA 生成get和set方法

使用IDEA自动生成get和set方法。 在IDEA中使用快捷键altinsert. 图解示例 要生成get和set的页面 使用altinsert快捷键 点击Getter and Setter 全部选中 点击ok之后get和set方法就自动生成了

【课题总结】OpenCV 抠图项目实战(11)算法实验平台

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;11&#xff09;抠图算法实验平台 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括…

IDEA 配置Tomcat

在IDEA上配置本地的Tomcat服务。 1.点击右上角如图红色圆圈圈中的Add Configuration… 2. 点击号 3. 向下查找Tomcat Server, 然后选择Local (如果没有Tomcat Server 点击33more items… 就能找到了) 4. 点击Local之后&#xff08;我的是已经配置过的&#xff0c;如果没有配…

【课题总结】OpenCV 抠图项目实战(12)源程序代码

Python 小白的课题报告—OpenCV 抠图项目实战&#xff08;12&#xff09;源程序代码 本系列是 Python 小白的课题作业《基于OpenCV 的图像分割和抠图》。 需要说明的是&#xff0c;本系列并不能算是 OpenCV 的抠图项目教程&#xff0c;只是以此为主题的课题报告。其中包括了一个…

【OpenCV 例程200篇】67. 空间域图像增强的综合应用

【OpenCV 例程200篇】67. 空间域图像增强的综合应用 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 5. 空间域图像增强技术的综合应用 空间域图像增强的方法很多&#xff0c;各有不同的特点和…

Vue 双向绑定小案例

用Vue实现双向绑定的小案例。 **双向绑定&#xff1a;**使用了双向绑定的两个内容一定是完全一样&#xff0c;同时变化&#xff08;同增同减&#xff09; 效果图 原始样式 删除输入框内容上面显示的文本内容随之减少 在下面输入框输入内容上面显示的内容也会增加 **注意&…

【OpenCV 例程200篇】68. 连续周期信号的傅立叶级数

【OpenCV 例程200篇】68. 连续周期信号的傅立叶级数 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 1. 频率域图像滤波 图像滤波是在尽可能保留图像细节特征的条件下对目标图像的噪声进行抑制…

Vue 跑马灯

Vue 实现跑马灯的效果。 效果图 **功能讲解&#xff1a;**当点击开始按钮&#xff0c;跑马灯效果开始进行&#xff0c;文字滚动消失和显示&#xff0c;循环滚动&#xff0c;点击停止按钮&#xff0c;文字不再滚动&#xff0c;停留在当时显示的文字页面。 代码演示 <!DOC…

【OpenCV 例程200篇】69. 连续非周期信号的傅立叶系数

【OpenCV 例程200篇】69. 连续非周期信号的傅立叶系数 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 傅里叶变换 滤波通常是指对图像中特定频率的分量进行过滤或抑制。图像滤波是在尽可能保留…

Python3.x字符串替换方法replace()、maketrans()和translate()

Python中replace()函数,类似于“查找与替换”功能 语法格式如下&#xff1a; str.replace(old, new[, max]) 其方法把字符串中的 old&#xff08;旧字符串&#xff09;&#xff0c;替换成 new(新字符串)&#xff0c;如果指定第三个参数max&#xff0c;则替换不超过 max 次&…

Vue 金额计算

使用Vue计算商品金额。 **功能分析&#xff1a;**输入商品单价和商品数量&#xff0c;设置固定的运费价格&#xff0c;直接会显示商品总价格。 效果演示 原始样式&#xff08;我设置的运费是10&#xff09; 输入商品单价和价格 代码演示 **注意&#xff1a;**引入Vue.js…

【OpenCV 例程200篇】70. 一维连续函数的傅里叶变换

【OpenCV 例程200篇】70. 一维连续函数的傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 2.1 傅里叶级数 傅里叶级数&#xff08;Fourier series&#xff09;在数论、组合数学、信号…

新版CSDN中如何快速转载别人的CSDN博客,详细方法与步骤!!!

前言 作为DSCN博客用户小萌新&#xff0c;有可能自己写的博客还不够好&#xff0c;或者当看到别人写的特别好的博客时&#xff0c;就想转载&#xff08;有些人可能会问&#xff1a;不是可以收藏吗&#xff1f;当然可以收藏&#xff0c;但是有些人也会想转载下载&#xff0c;不…

Vue 筛选

对数据进行筛选功能。 **功能分析&#xff1a;**当你输入一串文字时&#xff0c;以最快的速度筛选出相对应的内容&#xff0c;如果没有对应的内容则不予显示。 效果演示 原始样式 在输入框输入平板时筛选相应的内容 代码演示 **注意&#xff1a;**引入Vue.js架包 <!…

【OpenCV 例程200篇】71. 连续函数的取样

【OpenCV 例程200篇】71. 连续函数的取样 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 1.2 连续函数的取样 连续函数必须经过取样和量化转换为离散函数&#xff0c;才能用计算机进行处理。 …

第一个鸿蒙程序“hello world“

开发者文档: 开发者文档 运行环境要求 下载和安装DevEco Studio下载和安装Node.js 开始hello world 1.打开DevEco Studio&#xff0c;在欢迎页点击Create HarmonyOS Project&#xff0c;创建一个新工程。 2.选择设备类型和模板&#xff0c;以Wearable为例&#xff0c;选择Empty…

Vue 选项卡效果

用Vue实现选项卡效果。 效果演示 点击CSS 点击Vue 看起来是不是有点菜单导航的感觉&#xff0c;下面跟随我一起来一探究竟&#xff1f; 代码演示 **注意&#xff1a;**引入Vue.js架包 <!DOCTYPE html><html><head><meta charset"utf-8" /&…

【OpenCV 例程200篇】72. 一维离散傅里叶变换

【OpenCV 例程200篇】72. 一维离散傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 1.3 一维离散傅里叶变换 数字信号和数字图像都是采样得到的离散变量。 对原函数的变换取样后的数…

鸿蒙系统中的 JS 开发框架

今天鸿蒙终于发布了&#xff0c;开发者们也终于“沸腾”了。 源码托管在国内知名开源平台码云上&#xff0c;https://gitee.com/openharmony 我也第一时间下载了源码&#xff0c;研究了一个晚上&#xff0c;顺带写了一个 hello world 程序&#xff0c;还顺手给鸿蒙文档提了 2 个…