js+canvas实现五子棋小游戏


Posted in Javascript onAugust 02, 2020

本文实例为大家分享了js+canvas实现五子棋小游戏的具体代码,供大家参考,具体内容如下

效果展示:

js+canvas实现五子棋小游戏

源码展示:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>五子棋</title>
 <style>
 * {
 margin: 0;
 padding: 0;
 }
 
 body {
 margin-top: 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 orgrow = row;
 var orgcol = col;
 var total = 1;
 // 判断依据,以当前下的棋子为圆心,水平方向左右寻找和自己想通的值 ,最后判断如果大于5个则表示胜利
 // 1水平方向判断
 while (col - 1 > 0 && map[row][col - 1] == t) { //判断下一个值 注意一定是:col-1
 total++;
 col--;
 }
 row = orgrow;
 col = orgcol;
 while (col + 1 < 15 && map[row][col + 1] == t) {
 col++;
 total++;
 }
 if (total >= 5) {
 if (t == 1){
 alert("黑子赢");
 } else{
 alert("白子赢");
 }
 return;//判断出输赢结束后续判断
 }
 
 // 2垂直方向判断
 row = orgrow;
 col = orgcol;
 total = 1;
 while (row - 1 > 0 && map[row - 1][col] == t) {
 row--;
 total++;
 }
 row = orgrow;
 col = orgcol;
 while (row + 1 < 15 && map[row + 1][col] == t) {
 row++;
 total++;
 }
 if (total >= 5) {
 if (t == 1){
 alert("黑子赢");
 } else{
 alert("白子赢");
 }
 return;//判断出输赢结束后续判断
 }
 
 //左下 右上
 row = orgrow;
 col = orgcol;
 total = 1;
 while (row + 1 < 15 && col - 1 > 0 && map[row + 1][col - 1] == t) {
 row++;
 col--;
 total++;
 }
 row = orgrow;
 col = orgcol;
 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 = orgrow;
 col = orgcol;
 total = 1;
 while (row - 1 > 0 && col - 1 > 0 && map[row - 1][col - 1] == t) {
 row--;
 col--;
 total++;
 }
 row = orgrow;
 col = orgcol;
 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>

图片资源:

js+canvas实现五子棋小游戏

背景图片:

js+canvas实现五子棋小游戏js+canvas实现五子棋小游戏

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
Mar 29 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
form表单action提交的js部分与html部分
Jan 07 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
Apr 29 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
May 04 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
Feb 19 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
Mar 25 Javascript
关于redux-saga中take使用方法详解
Feb 27 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
Apr 26 Javascript
使用localStorage替代cookie做本地存储
Sep 25 Javascript
创建与框架无关的JavaScript插件
Dec 01 Javascript
js实现3D旋转相册
Aug 02 #Javascript
js实现双色球效果
Aug 02 #Javascript
js实现tab栏切换效果
Aug 02 #Javascript
原生js canvas实现鼠标跟随效果
Aug 02 #Javascript
原生js+canvas实现下雪效果
Aug 02 #Javascript
jQuery实现滑动开关效果
Aug 02 #jQuery
jQuery实现开关灯效果
Aug 02 #jQuery
You might like
php 表单验证实现代码
2009/03/10 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
laravel创建类似ThinPHP中functions.php的全局函数
2016/11/26 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
JS 自动安装exe程序
2008/11/30 Javascript
dwr spring的集成实现代码
2009/03/22 Javascript
基于jquery的图片幻灯展示源码
2012/07/15 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
JavaScript制作简单分页插件
2016/09/11 Javascript
Angularjs在360兼容模式下取数据缓存问题的解决办法
2017/06/22 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
js实现数字滚动特效
2019/12/16 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python 加密的实例详解
2017/10/09 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
2020/05/20 Python
python代码如何注释
2020/06/01 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
英国玛莎百货美国官网:Marks & Spencer美国
2018/11/06 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
投资建议书模板
2014/05/12 职场文书
舞蹈教育学专业求职信
2014/06/29 职场文书
大学生入党自荐书
2015/03/05 职场文书
毕业赠语大全
2015/06/23 职场文书
大学生活感想
2015/08/10 职场文书
学生会干部任命书
2015/09/21 职场文书
银行客户经理培训心得体会
2016/01/09 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
母婴行业实体、电商模式全面解析
2019/08/01 职场文书
Go调用Rust方法及外部函数接口前置
2022/06/14 Golang