js+canvas实现五子棋小游戏
网络编程 2021-07-04 14:06www.168986.cn编程入门
这篇文章主要为大家详细介绍了js+canvas实现五子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了js+canvas实现五子棋小游戏的具体代码,供大家参考,具体内容如下
效果展示
源码展示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>五子棋</title> <style> { margin: 0; padding: 0; } body { margin-: 20px; margin-left: 20px; } canvas { background-image: url("img/bak.jpg"); border: 1px solid #000; } </style> </head> <body> <canvas width="600" height="600" onclick="play(event)"></canvas> <script> /准备工作 1获取画布,获取画笔对象 / var mcanvas = document.querySelector("canvas"); var ctx = mcanvas.getContext("2d"); /准备工作2创建一个二维数组 用来定义绘制棋盘线/ var count = 15;//用来定义棋盘的行数和列数 var map = new Array(count); for (var i = 0; i < map.length; i++) { map[i] = new Array(count); for (var j = 0; j < map[i].length; j++) { map[i][j] = 0; } } /准备工作3初始化棋子/ var black = new Image(); var white = new Image(); black.src = "img/black.png"; white.src = "img/white.png"; //开始绘制 1绘制棋盘线 ctx.strokeStyle = "#fff"; var rectWH = 40; //设置绘制矩形的大小 for (var i = 0; i < map.length; i++) { for (var j = 0; j < map[i].length; j++) { ctx.strokeRect(j rectWH, i rectWH, rectWH, rectWH); } } // 用来进行黑白子的切换 var isBlack = true; //开始绘制 2下子 function play(e) { //获取点击canvas的位置值默认,canvas的左上角为(0,0) 点 var leftOffset = 20;//body 的margin var x = e.clientX - leftOffset; var y = e.clientY - leftOffset; // console.log(x+" "+y); // 设置点击点后棋子下在哪里,获取点击的位置进行判断如果超过格子的一半则绘制到下一个点如果小于 则绘制在上一个点上 var xv = (x - rectWH / 2) / rectWH; var yv = (y - rectWH / 2) / rectWH; var col = parseInt(xv) + 1; var row = parseInt(yv) + 1; console.log(xv + " " + yv + " , " + col + " " + row); //严格点需要验证 ,验证所输入的点是否在数组中已经存在 ,如果存在 则返回 if (map[row][col] != 0) { alert("咋的,还想往我身上下啊!瞎啊!没看见已经有棋子了!!!"); return; } // 切换绘制黑白子 if (isBlack) { ctx.drawImage(black, col 40 - 20, row 40 - 20); isBlack = false; map[row][col] = 1; Yes(1, row, col); } else { ctx.drawImage(white, col 40 - 20, row 40 - 20); isBlack = true; map[row][col] = 2; Yes(2, row, col); } } //算法验证,查看谁赢 tag :1 黑子 2 白子 function Yes(t, row, col) { console.log(1); var row = row; var col = col; var total = 1; // 判断依据,以当前下的棋子为圆心,水平方向左右寻找和自己想通的值 ,判断如果大于5个则表示胜利 // 1水平方向判断 while (col - 1 > 0 && map[row][col - 1] == t) { //判断下一个值 注意一定是col-1 total++; col--; } row = row; col = col; while (col + 1 < 15 && map[row][col + 1] == t) { col++; total++; } if (total >= 5) { if (t == 1){ alert("黑子赢"); } else{ alert("白子赢"); } return;//判断出输赢结束后续判断 } // 2垂直方向判断 row = row; col = col; total = 1; while (row - 1 > 0 && map[row - 1][col] == t) { row--; total++; } row = row; col = col; while (row + 1 < 15 && map[row + 1][col] == t) { row++; total++; } if (total >= 5) { if (t == 1){ alert("黑子赢"); } else{ alert("白子赢"); } return;//判断出输赢结束后续判断 } //左下 右上 row = row; col = col; total = 1; while (row + 1 < 15 && col - 1 > 0 && map[row + 1][col - 1] == t) { row++; col--; total++; } row = row; col = col; while (row - 1 > 0 && col + 1 < 15 && map[row - 1][col + 1] == t) { row--; col++; total++; } if (total >= 5) { if (t == 1){ alert("黑子赢"); } else{ alert("白子赢"); } return;//判断出输赢结束后续判断 } //左上右下 row = row; col = col; total = 1; while (row - 1 > 0 && col - 1 > 0 && map[row - 1][col - 1] == t) { row--; col--; total++; } row = row; col = col; while (row + 1 < 15 && col + 1 < 15 && map[row + 1][col + 1] == t) { row++; col++; total++; } if (total >= 5) { if (t == 1){ alert("黑子赢"); } else{ alert("白子赢"); } return;//判断出输赢结束后续判断 } } /功能扩充 1当胜利后 弹框a是否在来一局 b 精彩回复 a 如果点击在来一句 清空数据重新开始 b 精彩回放将棋盘黑白子按照下棋的顺序进行棋子编号2悔棋功能 3对算法的扩充 a如果是双三 则直接弹出胜利 b若是桶四 则直接弹出胜利 / </script> </body> </html>
图片资源
背景图片
更多有趣的经典小游戏实现专题,分享给大家
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
上一篇:原生js+canvas实现贪吃蛇效果
下一篇:js实现3D旋转相册
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程