課程
/前端開發(fā)
/JavaScript
/JS實(shí)現(xiàn)人機(jī)大戰(zhàn)之五子棋(UI篇)
老師有源代碼可以看么?全部的代碼截圖或者全部的代碼
2016-11-29
源自:JS實(shí)現(xiàn)人機(jī)大戰(zhàn)之五子棋(UI篇)
正在回答
不對(duì)啊
var chessBoard= [];var me =true;var over=false;
//贏法數(shù)組var wins=[];
//贏法的統(tǒng)計(jì)數(shù)組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 ++;}}
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="img/logo.jpeg";logo.onload=function(){context.drawImage(logo,0,0,450,450);drawChessBoard();
}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,435);?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,5+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();?}
chess.onclick = function(e) {
??? if(over) {
??????? return;
??? }
??? if(!me) {
?? 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);
??????? chessBoard[i][j] = 1;
??????? 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;
??????????? 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];
??????????????? } else if(computerScore[i][j] == max) {
??????????????????? if(myScore[i][j] > myScore[u][v]) {
??? oneStep(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("計(jì)算機(jī)贏了");
舉報(bào)
利用js及canvas繪圖知識(shí),實(shí)現(xiàn)程序界面編寫和交互邏輯處理
1 回答怎么沒有源碼???
1 回答慕課網(wǎng)老師上課里的源碼有地方下載嗎
1 回答代碼應(yīng)該沒錯(cuò),可是沒效果啊,連棋盤效果也沒有,大神求教
3 回答這樣的代碼,為什么圖片畫不出來(lái)????
1 回答代碼里面為什么要+2,-2?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-12-26
不對(duì)啊
2016-12-21
var chessBoard= [];
var me =true;
var over=false;
//贏法數(shù)組
var wins=[];
//贏法的統(tǒng)計(jì)數(shù)組
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 ++;
}
}
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="img/logo.jpeg";
logo.onload=function(){
context.drawImage(logo,0,0,450,450);
drawChessBoard();
}
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,435);
?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,5+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();
?
}
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) {
??????? oneStep(i, j, me);
??????? chessBoard[i][j] = 1;
??????? 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;
??????????????????? }
??????????????? }
??????????? }
??????? }
??? }
??? oneStep(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("計(jì)算機(jī)贏了");
??????????????????? over = true;
??????????????? }
??????????? }
??????? }
??????? if(!over) {
??????????? me = !me;
??????? }
}