var?chessBoard?=?[];
var?me?=?true;
var?over?=?false;
//贏法數(shù)組
var?wins?=?[];
//贏法統(tǒng)計數(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++;
}
}
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,?97,?97,?256,?256);
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);
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,?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();
}
/*下棋*/
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ī)贏了");
over?=?true;
}
}
}
if(!over)?{
me?=?!me;
}
}
//延時函數(shù)
var?sleep?=?function(numberMillis)?{
var?now?=?new?Date();
var?exitTime?=?now.getTime()?+?numberMillis;
while?(true)?{
now?=?new?Date();
if?(now.getTime()?>?exitTime)
? return;
}
}
2016-10-21
你肯定是在哪步寫錯了,給你提供完整的參考代碼吧!
index.html
style.css
script.js