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 相关文章推荐
让iframe框架网页在任何浏览器下自动伸缩
Aug 18 Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 Javascript
Javascript中正则表达式的全局匹配模式分析
Apr 26 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
Aug 18 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
Aug 21 Javascript
jQuery实现点击水纹波动动画
Apr 10 Javascript
jQuery操作cookie
Aug 08 Javascript
利用JQuery阻止事件冒泡
Dec 01 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
Jul 27 Javascript
node 使用 async 控制并发的方法
May 07 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
Aug 03 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
php 图片加水印与上传图片加水印php类
2010/05/12 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
php抓取并保存网站图片的实现代码
2015/10/28 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
用js自动判断浏览器分辨率的代码
2007/01/28 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
基于jquery的分页控件(C#)
2011/01/06 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
跟我学习javascript的prototype原型和原型链
2015/11/18 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
微信小程序 navigation API实例详解
2016/10/02 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
Python实现统计给定列表中指定数字出现次数的方法
2018/04/11 Python
Python装饰器语法糖
2019/01/02 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
HTML的form表单和django的form表单
2019/07/25 Python
快速解决jupyter启动卡死的问题
2020/04/10 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
全陪导游欢迎词
2014/01/17 职场文书
保险公司晨会主持词
2014/03/22 职场文书