JS实现五子棋小游戏

这次给大家带来JS实现五子棋小游戏,JS实现五子棋小游戏的注意事项有哪些,下面就是实战案例,一起来看一下。

思路:

1、先用canvas画五子棋的棋盘
2、获取鼠标点击的位置
3、根据鼠标点击的位置判断,并画棋子
4、根据下的棋子判断是否赢了

代码:

           * {    padding: 0;    margin: 0;   }   canvas {    margin: 10px;    border: 2px solid #000;   }   #box {    display: inline-block;    position: absolute;    margin-top: 200px;    margin-left: 100px;   }   span {    font: 24px "微软雅黑";    display: inline-block;    height: 50px;   }   input {    margin-top: 30px;    display: block;    width: 100px;    height: 50px;    font: 16px "微软雅黑";    color: #fff;    background-color: #0099cc;   }       您的浏览器不支持canvas,请升级到最新的浏览器  

var flag = true; //true代表白棋下的棋子,false代表黑棋下的棋子 var isWin = false; //判断是否结束,true结束,false没有结束 var step = 40; //设置每个格子的宽高都是40 var txt = document.getElementById("txt"); var btn = document.getElementById("btn"); var cas = document.getElementById("cas");// 获取画布对象 var ctx = cas.getContext("2d"); //画布上下文 // 创建图片对象 var img_b = new Image(); img_b.src = "imgs/b.png";//设置黑棋图片路径 var img_w = new Image(); img_w.src = "imgs/w.png";//设置白棋图片路径 // 用二维数组来保存棋盘,0代表没有走过,1为白棋走过,2为黑棋走过 var arr = new Array(15); //声明一个一维数组 for (var i = 0; i < 15; i++) { arr[i] = new Array(15); //每个值再声明一个一维数组,这样就组成了一个二维数组 for (var j = 0; j < 15; j++) { arr[i][j] = 0; } } //绘制棋盘 function drawLine() { for (var i = 0; i < cas.width / step; i++) { // 画竖线 ctx.moveTo((i + 1) * step, 0); ctx.lineTo((i + 1) * step, cas.height); // 画横线 ctx.moveTo(0, (i + 1) * step); ctx.lineTo(cas.width, (i + 1) * step); ctx.stroke(); } } //获取鼠标点击的位置 cas.onclick = function (e) { // 先判断游戏是否结束 if (isWin) { alert("游戏已经结束,请刷新重新开始!"); return 0; } //判断棋子显示的地方,四条边上不显示棋子, //鼠标点击的位置减去边框距离页面的上和左的距离(10),减去一个格子宽高的一半(20) var x = (e.clientX - 10 - 20) / 40; var y = (e.clientY - 10 - 20) / 40; //进行取整来确定棋子最终显示的区域 x = parseInt(x); y = parseInt(y); //如果超出棋盘或者在棋盘边界直接返回,边界上不能画棋子 if(x = 15 || y = 15) { return; } //进行判断该位置是否已经显示过棋子 if (arr[x][y] != 0) { alert("你不能在这个位置下棋"); return; } // 判断是显示黑子还是白子 if (flag) {//白子 flag = false; //将标志置为false,表示下次为黑子 drawChess(1, x, y); //调用函数来画棋子 } else {//黑子 flag = true; //将标志置为true,表示下次为白子 drawChess(2, x, y); //调用函数来画棋子 } } //画棋子 function drawChess(num, x, y) { //根据x和y确定图片显示位置,让图片显示在十字线中间,因为一个格子为40,图片大小为30,所以40-30/2等于25,所以需要加上25 var x0 = x * step + 25; var y0 = y * step + 25; if (num == 1) { //绘制白棋 ctx.drawImage(img_w, x0, y0); arr[x][y] = 1; //白子 } else if (num == 2) { // 绘制黑棋 ctx.drawImage(img_b, x0, y0); arr[x][y] = 2; //黑子 } //调用函数判断输赢 judge(num, x, y); } //判断输赢 function judge(num, x, y) { var n1 = 0, //左右方向 n2 = 0, //上下方向 n3 = 0, //左上到右下方向 n4 = 0; // 右上到左下方向 //***************左右方向************* //先从点击的位置向左寻找,相同颜色的棋子n1自加,直到不是相同颜色的棋子,则跳出循环 for (var i = x; i >= 0; i--) { if (arr[i][y] != num) { break; } n1++; } //然后从点击的位置向右下一个位置寻找,相同颜色的棋子n1自加,直到不是相同颜色的棋子,则跳出循环 for (var i = x + 1; i = 0; i--) { if (arr[x][i] != num) { break; } n2++; } for (var i = y + 1; i =0, j >= 0; i--, j--) { if (i < 0 || j < 0 || arr[i][j] != num) { break; } n3++; } for(var i = x+1, j = y+1; i < 15, j = 15 || j >= 15 || arr[i][j] != num) { break; } n3++; } //****************右上到左下斜方向************* for(var i = x, j = y; i >= 0, j < 15; i--, j++) { if (i = 15 || arr[i][j] != num) { break; } n4++; } for(var i = x+1, j = y-1; i = 0; i++, j--) { if (i >= 15 || j = 5 || n2 >= 5 || n3 >= 5 || n4 >= 5) { if (num == 1) {//白棋 str = "白棋赢了,游戏结束!" } else if (num == 2) {//黑棋 str = "黑棋赢了,游戏结束!" } txt.innerHTML = str; isWin = true; } } //重新开始 btn.onclick = function() { flag = true; isWin = false; for (var i = 0; i < 15; i++) { for (var j = 0; j < 15; j++) { arr[i][j] = 0; } } ctx.clearRect(0, 0, 640, 640); txt.innerHTML = ""; drawLine(); } drawLine();

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

element-ui怎样实现复用Table的组件

gulp安装+打包+合并最详解

以上就是JS实现五子棋小游戏的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2772265.html

(0)
上一篇 2025年3月8日 13:12:54
下一篇 2025年3月8日 13:13:04

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Emergence.js插件的使用详解

    这次给大家带来Emergence.js插件的使用详解,Emergence.js插件使用的注意事项有哪些,下面就是实战案例,一起来看一下。 Emergence.js 是一个轻量级,高性能的 JS 插件,用于检测和操作浏览器中的元素。 这个插件…

    编程技术 2025年3月8日
    000
  • 关于js的一些小知识点代码分享

    本篇文章给大家分享的内容是关于js的一些小知识点代码分享 ,有着一定的参考价值,有需要的朋友可以参考一下 js 防止重复提交 第一种方式 点击时返回false   2. 点击时,把按钮变为不可用 比如 disabled  var feedb…

    编程技术 2025年3月8日
    200
  • JS+canvas做出围绕旋转动画

    这次给大家带来JS+canvas做出围绕旋转动画,JS+canvas做出围绕旋转动画的注意事项有哪些,下面就是实战案例,一起来看一下。 使用canvas的convas来实现围绕旋转动画,外圈顺时针,里层逆时针 html文件 body { m…

    编程技术 2025年3月8日
    200
  • js的作用域使用详解

    这次给大家带来js的作用域使用详解,js作用域使用的注意事项有哪些,下面就是实战案例,一起来看一下。 JavaScript是现在很多人都在使用的,对于JavaScript的使用,可能很多人还不是很清楚作用域以及块级作用域,这里文章就给大家具…

    编程技术 2025年3月8日
    200
  • 如何在java程序中运行js的代码分享

    本篇文章给大家分享的内容是如何在java程序中运行js的代码分享,有着一定的参考价值,有需要的朋友可以参考一下 1.6版本中增加了scriptengine可以直接运行js代码 1、直接写js代码 import javax.script.Sc…

    编程技术 2025年3月8日
    200
  • JS+HTML做出时钟动画

    这次给大家带来JS+HTML做出时钟动画,JS+HTML做出时钟动画的注意事项有哪些,下面就是实战案例,一起来看一下。 涉及到的知识点有: CSS3动画、DOM操作、定时器、圆点坐标的计算(好多人是不是已经还给自己的老师了~) 接下来,我们…

    编程技术 2025年3月8日
    200
  • vue.js操作数组数据的方法

    这次给大家带来vue.js操作数组数据的方法,vue.js操作数组数据的注意事项有哪些,下面就是实战案例,一起来看一下。 1、在默认的情况下,Vue.js默认不支持往数组中加入重复的数据。可以使用track-by=”$index…

    编程技术 2025年3月8日
    200
  • nodejs基于ffmpeg进行视频推流直播

    这次给大家带来nodejs基于ffmpeg进行视频推流直播,nodejs基于ffmpeg进行视频推流直播的注意事项有哪些,下面就是实战案例,一起来看一下。 以ffmpeg为核心,包装一款局域网内接收转码并推送互联网的客户端软件。本文仅使用f…

    编程技术 2025年3月8日
    200
  • JS匿名函数应该怎样使用

    这次给大家带来JS匿名函数应该怎样使用,使用JS匿名函数的注意事项有哪些,下面就是实战案例,一起来看一下。 匿名函数的基本形式为(function(){…})(); 前面的括号包含函数体,后面的括号就是给匿名函数传递参数并立即执…

    编程技术 2025年3月8日
    200
  • 如何用js代码绘制一棵树

    本篇文章给大家分享的内容是如何用js代码绘制一棵树 ,有着一定的参考价值,有需要的朋友可以参考一下 第一步新建html文档:         /*设置body样式*/ body{ overflow:hidden; background: b…

    2025年3月8日
    200

发表回复

登录后才能评论