慕课网二次学习(五)

来源:互联网 发布:淘宝女内裤真人秀图片 编辑:程序博客网 时间:2024/06/05 00:14

JS实现人机大战之五子棋(AI篇)

一、代码

var chessBoard =[];var me = true;var over = false;var wins = [];var myWin = [];var computerWin = [];for(var i=0; i<15;i++){chessBoard[i] = [];for(var j=0;j<15;j++){chessBoard[i][j] = 0;}}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++;}}console.log(count);for(var i=0; i<count; i++){myWin[i] = 0;computerWin[i] = 0;}var chess = document.getElementById('chess');var context = chess.getContext('2d');context.strokeStyle = "#BFBFBF";var logo = new Image();logo.src = "images/logo.png";logo.onload = function(){context.drawImage(logo, 0, 0, 450, 450);drawChessBoard();}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(chessBoard[i][j] == 0){oneStop(i, j, me);chessBoard[i][j] = 1;/*if(me){chessBoard[i][j] == 1;} else {chessBoard[i][j] == 2;}me = !me;*/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;}}}if(!over){me = !me;computerAI();}}}var computerAI = function(){var myScore = [];var computerScore = [];var max =0;var u = 0, v= 0;for(var i=0; i<15; i++){myScore[i] = [];computerScore[i] = [];for(var j=0; j<15; j++){myScore[i][j] = 0;computerScore[i][j] = 0;}}for(var i=0; i<15; i++){for(var j=0; j<15; j++){if(chessBoard[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(computerWin[k] == 1){computerScore[i][j] += 220;} else if(computerWin[k] == 2){computerScore[i][j] += 420;} else if(computerWin[k] == 3){computerScore[i][j] += 2100;} else if(computerWin[k] == 4){computerScore[i][j] += 20000;}}}if(myScore[i][j] > max){max = myScore[i][j];u = i;v = j;} else if(myScore[i][j] == max){if(computerScore[i][j] > computerScore[u][v]){u = i;v = j;}}if(computerScore[i][j] > max){max = computerScore[i][j];u = i;v = j;} else if(computerScore[i][j] == max){if(myScore[i][j] > myScore[u][v]){u = i;v = j;}}}}}oneStop(u, v, false);chessBoard[u][v] = 2;for(var k=0; k<count; k++){if(wins[u][v][k]){computerWin[k]++;myWin[k] = 6;if(computerWin[k] == 5){window.alert("电脑获胜!");over = true;}}}if(!over){me = !me;}}var oneStop = 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.addColorStop(0, "#0A0A0A");gradient.addColorStop(1, "#636766");} else {gradient.addColorStop(0, "#D1D1D1");gradient.addColorStop(1, "#F9F9F9");}context.fillStyle = gradient;context.fill();}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();}}

二、项目小结

        AI篇中,AI的设计主要应用了穷举算法...(哎,常年被自己设计的电脑玩家打败...)
        祝大家儿童节快乐!

0 0
原创粉丝点击