js canvas实现五子棋小游戏
导读:收集整理的这篇文章主要介绍了js canvas实现五子棋小游戏,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例为大家分享了canvas实现五子棋小游戏的具体代码,供大家参考,...
收集整理的这篇文章主要介绍了js canvas实现五子棋小游戏,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例为大家分享了canvas实现五子棋小游戏的具体代码,供大家参考,具体内容如下
效果
思路
- canvans 绘制棋盘,绘制时候边缘预留棋子位置
- 监听点击事件绘制落子并记录到字典中
- 获胜判定,在四个方向上检测是否有足够数量的连贯棋子
代码
!DOCTYPE htML>
html lang="en">
head>
meta charset="UTF-8">
tITle>
ym/title>
style>
canvas {
display: block;
margin: 0 auto;
border: 0 }
.result {
text-align: center;
}
button{
display: block;
margin: 0 auto;
padding: 4px 20px;
border:0;
color: #fff;
outline: none;
border-radius: 3px;
background: #43a6ff }
button:hover{
font-weight: bold;
cursor: pointer;
}
/style>
/head>
body>
canvas id="cv" width="200px" height="200px">
/canvas>
p class="result">
/p>
button onclick="loadPanel(400, 400,30,13)">
刷新/button>
script>
loadPanel(400, 400,30,13);
/** * 1) 点击落子并切换执子者 * 2)以当前落子位置为基准,以‘米'字型判定,是否能构成五连及以上 * @param w 棋盘宽度 * @param h 棋盘高度 * @param cs 格子尺寸 * @param ps 棋子半径 */ function loadPanel(w, h, cs, ps) {
let i, j, k;
let chks = [[1, 0], [0, 1], [1, 1], [1, -1]];
//水平,纵向,斜下,斜上 四个方向 let successNum = 5;
//赢棋标准 let resultEl = document.querySelector('.result');
//1)绘制棋盘,边缘应隔开棋子半径的距离 cs = cs || 16;
//默认格子宽高 ps = ps || 4;
//棋子半径 h = h || w;
//高度默认等于宽度 let el = document.getElementById('cv');
el.setattribute('width', w + 'px');
el.setAttribute('height', h + 'px');
let context = el.getContext("2d");
//计算棋盘分割,向下取整 let splitX = ~~((w - 2 * ps) / cs), splitY = ~~((h - 2 * ps) / cs);
//初始化落子位置使用字典存储,相较于数组简单且减少内存占用 let pieces = {
}
;
//循环划线 context.translate(ps, ps);
context.beginPath();
context.strokeStyle = '#000';
//垂直线 for (i = 0;
i splitX + 1;
i++) {
context.moveTo(cs * i, 0);
context.lineto(cs * i, splitY * cs);
context.stroke();
}
//水平线 for (j = 0;
j splitY + 1;
j++) {
context.moveTo(0, cs * j);
context.lineTo(splitX * cs, cs * j);
context.stroke();
}
context.closePath();
let user = 0, colors = ['#000', '#fefefe'];
el.addEventListener('click', function (e) {
let x = e.offsetX, y = e.offsetY, //计算落子范围 rx = ~~((x - ps) / cs) + (((x - ps) % cs = cs / 2) ? 0 : 1), ry = ~~((y - ps) / cs) + (((y - ps) % cs = cs / 2) ? 0 : 1);
//绘制棋子 context.beginPath();
context.arc(cs * rx, cs * ry, ps, 2 * Math.PI, false);
context.fillStyle = colors[user];
context.strokeStyle = '#000';
user ? user = 0 : user = 1;
//切换执子者 context.fill();
context.stroke();
context.closePath();
//记录棋子位置 let piece = pieces[rx + '-' + ry] = user;
//米字型计算结果,以当前落子位置计算是否存在某个方向上具有连续的五个相同棋子 for (j = 0;
j chks.length;
j++) {
let num = 1, chk = chks[j];
for (i = 1;
i = 4;
i++) {
if (pieces[(rx + chk[0] * i) + '-' + (ry + chk[1] * i)] == piece) {
num++ }
else {
for (i = -1;
i >
= -4;
i--) {
if (pieces[(rx + chk[0] * i) + '-' + (ry + chk[1] * i)] == piece) {
num++ }
}
break }
}
if (num == successNum) {
resultEl.innerHTML = ['白', '黑'][user] + '方赢';
break;
}
}
}
) }
/script>
/body>
/html>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
您可能感兴趣的文章:- 原生JS实现点击数字小游戏
- 用js实现拼图小游戏
- js实现贪吃蛇游戏含注释
- 原生js实现2048小游戏
- JavaScript实现打字游戏
- javascript实现拼图游戏
- 原生js实现自定义难度的扫雷游戏
- 如何利用JavaScript编写一个格斗小游戏
- 基于JavaScript实现简单扫雷游戏
- JavaScript 实现生命游戏
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: js canvas实现五子棋小游戏
本文地址: https://pptw.com/jishu/594206.html
