JS+canvas实现的五子棋游戏【人机大战版】
网络编程 2021-07-04 18:32www.168986.cn编程入门
这篇文章主要介绍了JS+canvas实现的五子棋游戏,是采用比较强的AI实现的人机大战版游戏,涉及javascript结合HTML5实现图形绘制与人工智能相关操作技巧,需要的朋友可以参考下
本文实例讲述了JS+canvas实现的五子棋游戏。分享给大家供大家参考,具体如下
运行效果图
html代码如下
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>五子棋</title> <link rel="stylesheet" type="text/css" href="css/style.css" rel="external nofollow" /> </head> <body> <canvas id="chess" width="450px" height="450px"></canvas> <div id='restart' class="restart"> <span>重新开始</span> </div> <script src="js/script.js" type="text/javascript" charset="utf-8"></script> </body> </html>
style.css代码如下
canvas{ display: block; margin: 50px auto; box-shadow: -2px -2px 2px #efefef, 5px 5px 5px #b9b9b9; } .restart{ text-align: center; } .restart>span{ display: inline-block; padding: 10px 20px; color: #fff; background-color: #45c01a; border-radius: 5px; }
script.js代码如下
var over = false; var me = true; //我 var chressBord = [];//棋盘 for(var i = 0; i < 15; i++){ chressBord[i] = []; for(var j = 0; j < 15; j++){ chressBord[i][j] = 0; } } //赢法的统计数组 var myWin = []; var puterWin = []; //赢法数组 var wins = []; for(var i = 0; i < 15; i++){ wins[i] = []; for(var j = 0; j < 15; j++){ wins[i][j] = []; } } var count = 0; //赢法总数 //横线赢法 for(var i = 0; i < 15; i++){ for(var j = 0; j < 11; j++){ for(var k = 0; k < 5; k++){ wins[i][j+k][count] = true; } count++; } } //竖线赢法 for(var i = 0; i < 15; i++){ for(var j = 0; j < 11; j++){ for(var k = 0; k < 5; k++){ wins[j+k][i][count] = true; } count++; } } //正斜线赢法 for(var i = 0; i < 11; i++){ for(var j = 0; j < 11; j++){ for(var k = 0; k < 5; k++){ wins[i+k][j+k][count] = true; } count++; } } //反斜线赢法 for(var i = 0; i < 11; i++){ for(var j = 14; j > 3; j--){ for(var k = 0; k < 5; k++){ wins[i+k][j-k][count] = true; } count++; } } for(var i = 0; i < count; i++){ myWin[i] = 0; puterWin[i] = 0; } var chess = document.getElementById("chess"); var context = chess.getContext('2d'); context.strokeStyle = '#bfbfbf'; //边框颜色 var logo = new Image(); logo.src = 'img/logo.png'; logo.onload = function(){ context.drawImage(logo,0,0,450,450); drawChessBoard(); } document.getElementById("restart").onclick = function(){ window.location.reload(); } chess.onclick = function(e){ if(over){ return; } if(!me){ return; } var x = e.offsetX; var y = e.offsetY; var i = Math.floor(x / 30); var j = Math.floor(y / 30); if(chressBord[i][j] == 0){ oneStep(i,j,me); chressBord[i][j] = 1;//我 for(var k = 0; k < count; k++){ if(wins[i][j][k]){ myWin[k]++; puterWin[k] = 6;//这个位置对方不可能赢了 if(myWin[k] == 5){ window.alert('你赢了'); over = true; } } } if(!over){ me = !me; puterAI(); } } } //计算机下棋 var puterAI = function (){ var myScore = []; var puterScore = []; var max = 0; var u = 0, v = 0; for(var i = 0; i < 15; i++){ myScore[i] = []; puterScore[i] = []; for(var j = 0; j < 15; j++){ myScore[i][j] = 0; puterScore[i][j] = 0; } } for(var i = 0; i < 15; i++){ for(var j = 0; j < 15; j++){ if(chressBord[i][j] == 0){ for(var k = 0; k < count; k++){ if(wins[i][j][k]){ if(myWin[k] == 1){ myScore[i][j] += 200; }else if(myWin[k] == 2){ myScore[i][j] += 400; }else if(myWin[k] == 3){ myScore[i][j] += 2000; }else if(myWin[k] == 4){ myScore[i][j] += 10000; } if(puterWin[k] == 1){ puterScore[i][j] += 220; }else if(puterWin[k] == 2){ puterScore[i][j] += 420; }else if(puterWin[k] == 3){ puterScore[i][j] += 2100; }else if(puterWin[k] == 4){ puterScore[i][j] += 20000; } } } if(myScore[i][j] > max){ max = myScore[i][j]; u = i; v = j; }else if(myScore[i][j] == max){ if(puterScore[i][j] > puterScore[u][v]){ u = i; v = j; } } if(puterScore[i][j] > max){ max = puterScore[i][j]; u = i; v = j; }else if(puterScore[i][j] == max){ if(myScore[i][j] > myScore[u][v]){ u = i; v = j; } } } } } oneStep(u,v,false); chressBord[u][v] = 2; for(var k = 0; k < count; k++){ if(wins[u][v][k]){ puterWin[k]++; myWin[k] = 6;//这个位置对方不可能赢了 if(puterWin[k] == 5){ window.alert('计算机赢了'); over = true; } } } if(!over){ me = !me; } } //绘画棋盘 var drawChessBoard = function(){ for(var i = 0; i < 15; i++){ context.moveTo(15 + i 30 , 15); context.lineTo(15 + i 30 , 435); context.stroke(); context.moveTo(15 , 15 + i 30); context.lineTo(435 , 15 + i 30); context.stroke(); } } //画旗子 var oneStep = function(i,j,me){ context.beginPath(); context.arc(15 + i 30, 15 + j 30, 13, 0, 2 Math.PI);//画圆 context.closePath(); //渐变 var gradient = context.createRadialGradient(15 + i 30 + 2, 15 + j 30 - 2, 13, 15 + i 30 + 2, 15 + j 30 - 2, 0); if(me){ gradient.addColorS(0,'#0a0a0a'); gradient.addColorS(1,'#636766'); }else{ gradient.addColorS(0,'#d1d1d1'); gradient.addColorS(1,'#f9f9f9'); } context.fillStyle = gradient; context.fill(); }
PS这里再为大家推荐另一款本站的js版五子棋游戏供大家参考(其AI相对简单一些)
在线五子棋游戏
更多关于JavaScript相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程