H5+C3+JS实现五子棋游戏(AI篇)
网络编程 2021-07-04 16:46www.168986.cn编程入门
这篇文章主要为大家详细介绍了H5+C3+JS实现五子棋游戏AI篇,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了H5+C3+JS实现五子棋游戏的具体代码,供大家参考,具体内容如下
新增全局变量
<script> //所有赢法总和 var count = 0; //容纳所有赢法的三维数组 var allWin = []; for(var i =0; i <15; i++){ allWin[i] = []; for(var j=0; j <15; j++){ allWin[i][j] = []; } } //横线赢法 for(var i =0; i <15; i++){ for(var j =0; j <11; j++){ for(var k =0; k <5; k++){ allWin[j+k][i][count] = true; } count++; } } //竖线赢法 for(var i =0; i <15; i++){ for(var j =0; j <11; j++){ for(var k =0; k <5; k++){ allWin[i][j+k][count] = true; } count++; } } //斜线赢法 for(var i =0; i <11; i++){ for(var j =0; j <11; j++){ for(var k =0; k <5; k++){ allWin[i+k][j+k][count] = true; } count++; } } //反斜线赢法 for(var i =14; i >3; i--){ for(var j =0; j <11; j++){ for(var k =0; k <5; k++){ allWin[i-k][j+k][count] = true; } count++; } } /此时可以输出一下count,如果为572种就表示上面的代码没有问题 / / alert(count); / //记录所有赢法当前所下的棋子, 为6表示已被堵住,不可达 / var myWin = []; var pWin = []; for(var i =0; i <count; i++){ myWin[i] = 0; pWin[i] = 0; } //判断当前是否游戏结束 var meover = false; var pover = false; </script>
chess.onclick的微调白棋不再用户下
<script> chess.onclick = function(event) { //如果游戏结束或者该点已经被下 if(meover || pover || curIndex[x][y] != 0) return; //获取要下的棋子的位置 var x = Math.floor(event.offsetX /30); var y = Math.floor(event.offsetY /30); //开始绘制 context.beginPath(); //绘制指定圆 context.arc(15 +x 30, 15 +y 30, 15, 0, 2 Math.PI); context.fillStyle = "#636766"; context.fill() ; //当前位置已经被玩家下了 curIndex[x][y] = 1; <1> } </script>
玩家是否赢进行判断:在上面代码<1>处加入代码
<script> for(var k =0; k <count; k++){ if(allWin[x][y][k]){ //此种赢法步数加1,如果为5表示全部走到 //此赢法puter已不可达,设置为6 myWin[k]++; pWin[k] = 6; } if(myWin[k] == 5){ alert("你赢了"); pover; } } if(pover) return; //电脑AI算法检测下一步 AIcode();<2> </script>
AI算法核心
<script> function AIcode(){ //表示所有位置的玩家总分数和电脑总分数 var myScore = []; var pScore = []; for(var i =0; i <15; i++){ myScore[i] = []; pScore[i] = []; for(var j =0; j <15; j++){ myScore[i][j] = 0; pScore[i][j] = 0; } } //对分数进行统计判断,选出分数最大的位置进行电脑下棋 var max = 0; var maxX = 0; var maxY = 0; //创建加分规则 for(var i =0; i < 15; i++){ for(var j =0; j <15; j++){ if(curIndex[i][j] == 0){ for(var k=0; k <count; k++){ if(allWin[i][j][k]){ if(myWin[k] == 1){ myScore[i][j] += 200; } else if(myWin[k] == 2){ myScore[i][j] += 500; } else if(myWin[k] == 3){ myScore[i][j] += 2000; } else if(myWin[k] == 4){ myScore[i][j] += 50000; } if(pWin[k] == 1){ pScore[i][j] += 300; } else if(pWin[k] == 2){ pScore[i][j] += 800; } else if(pWin[k] == 3){ pScore[i][j] += 20000; } else if(pWin[k] == 4){ pScore[i][j] += 500000; } } } if(myScore[i][j] > max){ max = myScore[i][j]; maxX = i; maxY = j; } if(pScore[i][j] > max){ max = pScore[i][j]; maxX = i; maxY = j; } } } } //进行最终下棋 context.beginPath(); context.arc(15 +maxX 30, 15 +maxY 30, 15, 0, 2 Math.PI); context.fillStyle = "#fefefe"; context.fill(); //标记当前位置已经被白棋占据 curIndex[maxX][maxY] = 2; <3> context.closePath(); }; </script>
电脑是否赢进行判断<3>
<script> for(var k =0; k <count; k++){ if(allWin[maxX][maxY][k]){ pWin[k]++; myWin[k] = 6; } if(pWin[k] == 5){ alert("你输了"); meover = true; } } </script>
实现效果图
更多有趣的经典小游戏实现专题,分享给大家
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程