为了账号安全,请及时绑定邮箱和手机立即绑定
  • 方便不想打字的同学: var wins = []; var count = 0; for(var i = 0; i < 15; i++) { wins[i] = []; for (var j = 0; j < 15; j++) { wins[i][j] = []; } } 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++; } } console.log(count);
    查看全部
    8 采集 收起 来源:赢法数组详解

    2018-03-22

  • 五子棋AI算法总结(算法里面还有很多不明白的地方,但总算把效果做出来了,很有成就感。同时,也明白,自己还有很长的路要走,不能轻易放弃)
    查看全部
    4 采集 收起 来源:课程总结

    2016-04-04

  • 修正的赢法数组(chessNum[num]是我显示这一步落子位置和步数用的,请无视) chess.onclick = function(e){ if(over){ return; } var x = e.offsetX; var y = e.offsetY; var i = Math.floor(x / 30); var j = Math.floor(y / 30); if(chessBoard[i][j] == 0){ oneStep(i, j, me); if(me){ chessBoard[i][j] = 1; chessNum[num][1] = i; chessNum[num][2] = j; for(var k=0; k<count; k++){ if (wins[i][j][k]) { myWin[k]++; computerWin[k] = 6; if (myWin[k] == 5) { window.alert("你赢了!"); over = true; } } } }else{ chessBoard[i][j] = 2; chessNum[num] = [i,j]; chessNum[num][1] = i; chessNum[num][2] = j; for(var k=0; k<count; k++){ if (wins[i][j][k]) { computerWin[k]++; myWin[k] = 6; if (computerWin[k] == 5) { window.alert("计算机赢了!"); over = true; } } } } now.innerHTML = "第"+num+"手下在了"+chessNum[num][1]+","+chessNum[num][2]; me = !me; num++; } }
    查看全部
  • <!DOCTYPE HTML> <html> <head> <title>五子棋</title> <meta charset="utf-8"/> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"> <link rel="stylesheet" href="./css/chess.css"/> </head> <body> <div id="chessTitle" class="chessTitle" data-text="五子棋"></div> <canvas id="chess"></canvas> <div class="btn_box"> <div class="text_ct"> <span class="active" data-type="0">双人对战</span> <span data-type="1">人机对战</span> </div> </div> <div class="btn_box"> <div id="startBtn" class="btn start_btn">开始</div> <div id="admitted" class="btn admit_btn">认输</div> <div id="back" class="btn admit_btn">悔棋</div> <div id="resetting" class="btn admit_btn">重置</div> </div> <img id="img" src="images/chess.jpg" ></img> <script src="./js/chess.js" type="text/javascript"></script> </body> </html>
    查看全部
  • AI难点解析
    查看全部
  • } } } this.chessBoard[u][v] = 2; this.type = !this.type; }, // 落子函数 i--X轴交叉点下标 j--Y轴交叉点下标 type--true为黑子,false为白子 backGauge--棋盘边框线宽度 oneStep: function (i, j, type, backGauge) { this.context.beginPath(); this.context.arc(backGauge + i * this.residue, backGauge + j * this.residue, Math.floor(this.residue / 2) - 3, 0, 2 * Math.PI); this.context.closePath(); var gradient = this.context.createRadialGradient(backGauge + i * this.residue + 2, backGauge + j * this.residue - 2, Math.floor(this.residue / 2) - 3, backGauge + i * this.residue + 2, backGauge + j * this.residue - 2, 0); if (type) { gradient.addColorStop(0, '#0A0A0A'); gradient.addColorStop(1, '#636766'); } else { gradient.addColorStop(0, '#D1D1D1'); gradient.addColorStop(1, '#F9F9F9'); } this.context.fillStyle = gradient; this.context.fill(); } }; chess.init(); };
    查看全部
  • for (var x = 0; x <= this.num; x++) { for (var y = 0; y <= this.num; y++) { if (this.wins[x][y][k] && this.chessBoard[x][y] === 0) { if ((x-q)*(x-q) === 1 ||(y-w)*(y-w) === 1 ) { u = x; v = y; } } } } } } } } } } } } } this.chessList.push([u, v, this.type]); this.oneStep(u, v, this.type, this.backGauge); for (var k = 0; k < this.count; k++) { if (!this.type && this.wins[u][v][k]) { this.myWin[k] += 999; if (this.otherWin[k] < 999) { this.otherWin[k]++; if (this.otherWin[k] >= 5) { alert('电脑赢了'); this.over = true; this.admit = false; this.admitted.classList.add('admit_btn'); this.admitted.classList.remove('start_btn'); this.back.classList.add('admit_btn'); this.back.classList.remove('start_btn'); }
    查看全部
  • for (var x = 0; x <= this.num; x++) { for (var y = 0; y <= this.num; y++) { if (this.wins[x][y][k] && this.chessBoard[x][y] === 0) { if ((x-q)*(x-q) === 1 ||(y-w)*(y-w) === 1 ) { u = x; v = y; } } } } } } } } } if (aIScore[i][j][l] === max) { for (var m = 1; m < 5; m++) { if (myScore[i][j][m] > maxScore) { maxScore = myScore[i][j][m]; u = i; v = j; } else if (myScore[i][j][m] === maxScore) { for (var k = 0; k < this.count; k++) { if (this.otherWin[k] === l) { for (var x = 0; x <= this.num; x++) { for (var y = 0; y <= this.num; y++) { if (this.wins[x][y][k] && this.chessBoard[x][y] === 2) { q = x; w = y; } } }
    查看全部
  • if (aIScore[i][j][l] > max) { max = aIScore[i][j][l]; u = i; v = j; } } } } } } for (var i = 0; i <= this.num; i++) { for (var j = 0; j <= this.num; j++) { if (this.chessBoard[i][j] === 0) { for (var l = 1; l < 5; l++) { if (myScore[i][j][l] === max) { for (var m = 1; m < 5; m++) { if (aIScore[i][j][m] > maxScore) { maxScore = aIScore[i][j][m] u = i; v = j; } else if (myScore[i][j][m] === maxScore) { for (var k = 0; k < this.count; k++) { if (this.myWin[k] === l) { for (var x = 0; x <= this.num; x++) { for (var y = 0; y <= this.num; y++) { if (this.wins[x][y][k] && this.chessBoard[x][y] === 1) { q = x; w = y; } } }
    查看全部
  • for (var i = 0; i <= this.num; i++) { for (var j = 0; j <= this.num; j++) { if (this.chessBoard[i][j] === 0) { for (var k = 0; k < this.count; k++) { if (this.wins[i][j][k]) { if (this.myWin[k] === 1) { myScore[i][j][1] += 200; } else if (this.myWin[k] === 2) { myScore[i][j][2] += 600; } else if (this.myWin[k] === 3) { myScore[i][j][3] += 4000; } else if (this.myWin[k] === 4) { myScore[i][j][4] += 20000; } if (this.otherWin[k] === 1) { aIScore[i][j][1] += 220; } else if (this.otherWin[k] === 2) { aIScore[i][j][2] += 620; } else if (this.otherWin[k] === 3) { aIScore[i][j][3] += 5500; } else if (this.otherWin[k] === 4) { aIScore[i][j][4] += 50000; } } for (var l = 1; l < 5; l++) { if (myScore[i][j][l] > max) { max = myScore[i][j][l]; u = i; v = j; }
    查看全部
  • if (!that.over) { console.log(that.type) that.type = !that.type; console.log(that.type) if (that.isAI) { that.isComput(); } } }; }, // 电脑走棋 isComput: function () { var aIScore = []; // 电脑分数统计 人机对战时使用 var myScore = []; // 玩家1分数统计 人机对战时使用 var max = 0; // 统计最高分数 var maxScore = 0; // 统计最高分数 var u = 0, v = 0, q = 0, w = 0; for (var i = 0; i <= this.num; i++) { aIScore[i] = []; myScore[i] = []; for (var j = 0; j <= this.num; j++) { aIScore[i][j] = []; myScore[i][j] = []; for (var k = 1; k < 5; k++) { aIScore[i][j][k] = 0; myScore[i][j][k] = 0; } } }
    查看全部
  • for (var k = 0; k < that.count; k++) { if (that.type && that.wins[i][j][k]) { that.otherWin[k] += 999; if (that.myWin[k] < 999) { that.myWin[k]++; if (that.myWin[k] >= 5) { alert('你赢了!'); that.over = true; that.admit = false; that.admitted.classList.add('admit_btn'); that.admitted.classList.remove('start_btn'); that.back.classList.add('admit_btn'); that.back.classList.remove('start_btn'); } } } else if (!that.type && that.wins[i][j][k] && !that.isAI) { that.myWin[k] += 999; if (that.otherWin[k] < 999) { that.otherWin[k]++; if (that.otherWin[k] >= 5) { alert('你输了!'); that.over = true; that.admit = false; that.admitted.classList.add('admit_btn'); that.admitted.classList.remove('start_btn'); that.back.classList.add('admit_btn'); that.back.classList.remove('start_btn'); } } } }
    查看全部
  • for (var i = 0; i < this.count; i++) { this.myWin[i] = 0; this.otherWin[i] = 0; } } // 判断是否悔棋 if (this.takeBack) { for (var i = 0; i < this.chessList.length; i++) { this.oneStep(this.chessList[i][0], this.chessList[i][1], this.chessList[i][2], this.backGauge); } } // 绑定canvas点击事件 this.chessDom.onclick = function (e) { if (that.over) { return; } var x = e.offsetX; var y = e.offsetY; var i = Math.round((x - backGauge) / residue); var j = Math.round((y - backGauge) / residue); if (i > that.num || j > that.num || that.chessBoard[i][j] !== 0) { return; } else { that.takeBack = false; if (that.type) { that.chessBoard[i][j] = 1; } else { that.chessBoard[i][j] = 2; } } that.chessList.push([i, j, that.type]); that.oneStep(i, j, that.type, backGauge);
    查看全部
  • // 第一种赢法---所有5子竖线 for (var i = 0; i <= this.num; i++) { for (var j = 0; j <= this.num - 4; j++) { for (var k = 0; k <= 4; k++) { this.wins[i][j + k][this.count] = true; } this.count++; } } // 第二种赢法---所有5子横线 for (var i = 0; i <= this.num; i++) { for (var j = 0; j <= this.num - 4; j++) { for (var k = 0; k <= 4; k++) { this.wins[j + k][i][this.count] = true; } this.count++; } } // 第三种赢法---所有5子斜线 for (var i = 0; i <= this.num - 4; i++) { for (var j = 0; j <= this.num - 4; j++) { for (var k = 0; k <= 4; k++) { this.wins[i + k][j + k][this.count] = true; } this.count++; } } // 第四种赢法---所有5子反斜线 for (var i = 0; i <= this.num - 4; i++) { for (var j = this.num; j >= 4; j--) { for (var k = 0; k <= 4; k++) { this.wins[i + k][j - k][this.count] = true; } this.count++; } }
    查看全部
  • // 画棋盘 darwChessboard: function () { var residue = Math.floor((this.windowWidth - 50) / (this.num + 1)); this.residue = residue; var that = this; var backGauge = (this.windowWidth - 50 - residue * this.num) / 2; this.backGauge = backGauge; for (var k = 0; k <= this.num; k++) { this.context.moveTo(backGauge,backGauge + residue * k); this.context.lineTo(backGauge + residue * this.num,backGauge + residue * k); this.context.stroke(); this.context.moveTo(backGauge + residue * k,backGauge); this.context.lineTo(backGauge + residue * k,backGauge + residue * this.num); this.context.stroke(); }; if (!this.takeBack) { for (var f = 0; f <= this.num; f++) { this.chessBoard[f] = []; this.wins[f] = []; for (var s = 0; s <= this.num; s++) { this.chessBoard[f][s] = 0; this.wins[f][s] = []; } }
    查看全部
首页上一页123456下一页尾页

举报

0/150
提交
取消
课程须知
本课程是前端高级课程 1、具备算法基础
老师告诉你能学到什么?
1、五子棋AI的运行原理 2、五子棋AI使用到的数据结构 3、编程实现五子棋AI

微信扫码,参与3人拼团

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

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