js canvas实现五子棋小游戏
网络编程 2021-07-04 14:07www.168986.cn编程入门
这篇文章主要为大家详细介绍了js canvas实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了canvas实现五子棋小游戏的具体代码,供大家参考,具体内容如下
效果
思路
- canvans 绘制棋盘,绘制时候边缘预留棋子位置
- 监听点击事件绘制落子并记录到字典中
- 获胜判定,在四个方向上检测是否有足够数量的连贯棋子
代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>ym</title> <style> canvas { display: block; margin: 0 auto; border: 0 } .result { text-align: center; } button{ display: block; margin: 0 auto; padding: 4px 20px; border:0; color: #fff; outline: none; border-radius: 3px; background: #43a6ff } button:hover{ font-weight: bold; cursor: pointer; } </style> </head> <body> <canvas id="cv" width="200px" height="200px"></canvas> <p class="result"></p> <button onclick="loadPanel(400, 400,30,13)">刷新</button> <script> loadPanel(400, 400,30,13); / 1) 点击落子并切换执子者 2)以当前落子位置为基准,以‘米'字型判定,是否能构成五连及以上 @param w 棋盘宽度 @param h 棋盘高度 @param cs 格子尺寸 @param ps 棋子半径 / function loadPanel(w, h, cs, ps) { let i, j, k; let chks = [[1, 0], [0, 1], [1, 1], [1, -1]];//水平,纵向,斜下,斜上 四个方向 let suessNum = 5;//赢棋标准 let resultEl = document.querySelector('.result'); //1)绘制棋盘,边缘应隔开棋子半径的距离 cs = cs || 16;//默认格子宽高 ps = ps || 4;//棋子半径 h = h || w;//高度默认等于宽度 let el = document.getElementById('cv'); el.setAttribute('width', w + 'px'); el.setAttribute('height', h + 'px'); let context = el.getContext("2d"); //计算棋盘分割,向下取整 let splitX = ~~((w - 2 ps) / cs), splitY = ~~((h - 2 ps) / cs); //初始化落子位置使用字典存储,相较于数组简单且减少内存占用 let pieces = {}; //循环划线 context.translate(ps, ps); context.beginPath(); context.strokeStyle = '#000'; //垂直线 for (i = 0; i < splitX + 1; i++) { context.moveTo(cs i, 0); context.lineTo(cs i, splitY cs); context.stroke(); } //水平线 for (j = 0; j < splitY + 1; j++) { context.moveTo(0, cs j); context.lineTo(splitX cs, cs j); context.stroke(); } context.closePath(); let user = 0, colors = ['#000', '#fefefe']; el.addEventListener('click', function (e) { let x = e.offsetX, y = e.offsetY, //计算落子范围 rx = ~~((x - ps) / cs) + (((x - ps) % cs <= cs / 2) ? 0 : 1), ry = ~~((y - ps) / cs) + (((y - ps) % cs <= cs / 2) ? 0 : 1); //绘制棋子 context.beginPath(); context.arc(cs rx, cs ry, ps, 2 Math.PI, false); context.fillStyle = colors[user]; context.strokeStyle = '#000'; user ? user = 0 : user = 1;//切换执子者 context.fill(); context.stroke(); context.closePath(); //记录棋子位置 let piece = pieces[rx + '-' + ry] = user; //米字型计算结果,以当前落子位置计算是否存在某个方向上具有连续的五个相同棋子 for (j = 0; j < chks.length; j++) { let num = 1, chk = chks[j]; for (i = 1; i <= 4; i++) { if (pieces[(rx + chk[0] i) + '-' + (ry + chk[1] i)] == piece) { num++ } else { for (i = -1; i >= -4; i--) { if (pieces[(rx + chk[0] i) + '-' + (ry + chk[1] i)] == piece) { num++ } } break } } if (num == suessNum) { resultEl.innerHTML = ['白', '黑'][user] + '方赢'; break; } } }) } </script> </body> </html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程