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实现兼容IE7的类库 IE7_0_9.zip提供下载
Aug 08 Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
Jun 27 Javascript
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
全面解析Bootstrap中tooltip、popover的使用方法
Jun 13 Javascript
最常用的jQuery表单验证(简单)
May 23 jQuery
vue-cli脚手架config目录下index.js配置文件的方法
Mar 13 Javascript
基于webpack4搭建的react项目框架的方法
Jun 30 Javascript
解决Layui数据表格中checkbox位置不居中的方法
Aug 15 Javascript
react使用CSS实现react动画功能示例
May 18 Javascript
JS sort方法基于数组对象属性值排序
Jul 10 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
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验证码类 附调用方法
2016/06/24 PHP
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
原生javascript实现简单的datagrid数据表格
2015/01/02 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
node实现定时发送邮件的示例代码
2017/08/26 Javascript
vue实现密码显示隐藏切换功能
2018/02/23 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
小程序自定义日历效果
2018/12/29 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
举例简单讲解Python中的数据存储模块shelve的用法
2016/03/03 Python
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
Python发展史及网络爬虫
2019/06/19 Python
django-rest-swagger的优化使用方法
2019/08/29 Python
python实现机器人卡牌
2019/10/06 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
2020/02/25 Python
解决python中0x80072ee2错误的方法
2020/07/19 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
在C#中如何实现多态
2014/07/02 面试题
求职信模版
2013/11/30 职场文书
工程项目经理岗位职责
2013/12/15 职场文书
文科生自我鉴定
2014/02/15 职场文书
社区母亲节活动记录
2014/03/06 职场文书
初三班主任寄语大全
2014/04/04 职场文书
学生会主席演讲稿
2014/04/25 职场文书
企业党员一句话承诺
2014/05/30 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
CSS3鼠标悬浮过渡缩放效果
2021/04/17 HTML / CSS