为了账号安全,请及时绑定邮箱和手机立即绑定
浏览器直接卡死

最新回答 / 迷茫_彭
可以的      1 在 ia  计算得分前 判断 棋盘上是否 有子         如果有                 那么就走正常流程         如果没有                 就随机挑选一个坐标 就可以了
额。。。算法不够强大啊,我都赢了计算机。。。

最赞回答 / 慕粉212319924
那个位置的赢法数组里包含了这两个赢法。计算的时候都进行了加分处理,这个位置的分数最高,肯定被找出来了

最新回答 / 慕标5206426
canvas的原点是在左上角开始,那么i=0的时候,j从0到14,那么就是最上面的一条横线了,[0][0] ,[0][1].... ,[0][14]

已采纳回答 / qq_克克的_0
完整代码地址:https://gitee.com/yanglilong127/ai_manmachine_war_chess 该游戏演示地址:https://yanglilong127.gitee.io/ai_manmachine_war_chess
老师的视为逻辑好强啊
好东西,Mark

最新回答 / 慕斯1869836
下一层是k<5,j+k就是边界
算法逻辑比较容易理解,但是能设计出这样算法的人,真是牛逼
还有一个bug,当出现六子连赢的时候,由于在遍历k的时候匹配到两次赢法数组,所以会alert两次“我赢了”
解决这个bug的办法是,当出现“k==5”的时候,直接return,跳出当前循环:
if(myWin[k]==5&amp;&amp;me){
window.alert(&quot;你赢了&quot;)
over=true
return
}
应该加一个是否为me的判断:
for (var k = 0; k &lt; count; k++) {
if (win[i][j][k]) {
myWin[k]++;
computerWin[k]=6;
if(myWin[k]==5&amp;&amp;me){
window.alert(&quot;你赢了&quot;)
over=true
}
}
}

执行完遍历之后再加上:

me=!me
//斜线
for (var i = 14; i &gt; 3; i--) {
for (var j = 0; j &lt; 11; j++) {
for (var k = 0; k &lt; 5; k++) {
win[i-k][j+k][count]=true;
}
count++
}
}
// 反斜线
for (var i = 0; i &lt; 11; i++) {
for (var j = 0; j &lt;11; j++) {
for (var k = 0; k &lt; 5; k++) {
win[i+k][j+k][count]=true;
}
count++
}
}
// 横向
for (var i = 0; i &lt; 11; i++) {
for (var j = 0; j &lt; 15; j++) {
for (var k = 0; k &lt; 5; k++) {
win[i+k][j][count]=true;
}
count++
}
}
// 纵向
for (var i = 0; i &lt; 15; i++) {
for (var j = 0; j &lt; 11; j++) {
for (var k = 0; k &lt; 5; k++) {
win[i][j+k][count]=true;
}
count++
}
}
课程须知
本课程是前端高级课程 1、具备算法基础
老师告诉你能学到什么?
1、五子棋AI的运行原理 2、五子棋AI使用到的数据结构 3、编程实现五子棋AI

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消