求教一下為什么結(jié)果和老師跑的不一樣
和老師一樣敲的代碼,看了好幾遍,但測試的時候發(fā)現(xiàn)沒到五個子就說我贏了請問哪位大哥幫我看看錯在哪里
var?chess?=?document.getElementById('chess'); var?context?=?chess.getContext("2d"); 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++){ /* j=0 wins[0][0][0] wins[1][1][0] wins[2][2][0] wins[3][3][0] wins[4][4][0] j=1 wins[0][1][0] wins[1][2][0] wins[2][3][0] wins[3][4][0] wins[4][5][0] */ 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--){ /* wins[14][0][0] wins[14][1][0] wins[14][2][0] wins[14][3][0] wins[14][4][0] */ 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; } context.strokeStyle?=?"#BFBFBF"; var?logo?=?new?Image(); logo.src?=?"images/chan.png" logo.onload?=?function(){ context.drawImage(logo,?50,?50,?350,?350); drawChessBoard(); } var?drawChessBoard?=?function(){ for(var?i?=?0;?i?<?15;?i++){ //劃橫線 context.moveTo(15,?15?+?i*30); context.lineTo(435,15?+?i*30); //劃豎線 context.moveTo(15?+?i*30,?15); context.lineTo(15?+?i*30,?435); context.stroke(); } } var?oneStep?=?function(i,?j,?me){ context.beginPath(); context.arc(15?+?i*30,?15?+?j*30,?12,?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); context.fillStyle?=?gradient; if(me){ gradient.addColorStop(0,?"#0A0A0A"); gradient.addColorStop(1,?"#636766"); }else{ gradient.addColorStop(0,?"#D1D1D1"); gradient.addColorStop(1,?"#F9F9F9"); } context.fill(); } 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; }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; } } } } }
2016-04-02
代碼本身沒有錯誤,之所以出現(xiàn)這個現(xiàn)象是因為到目前為止,白棋的落子也在onclick進行,這里沒做特殊處理,所以白棋的落子也被統(tǒng)計在myWin這個贏法統(tǒng)計數(shù)組當中啦。所以你看看,是不是不分黑棋白棋,只要棋子連上五顆就判斷成贏了呢?
在之后,白棋不會在onclick中處理,它的落子會在computerWin中統(tǒng)計,就不會這樣啦。
2016-11-28
老師給的不分白起黑騎就直接給黑棋加上了myWin,所以當你白棋黑棋共五個時myWin剛好加到了五,因此需要一個判斷函數(shù)判斷落子為黑棋還是白棋,然后再給相應的myWin和computerWin累加判斷是否到五。代碼如下(偷別人的):
var judgement=function(x,y,color){ //judgement函數(shù)判斷游戲是否結(jié)束,color 判斷落子顏色
for(var i=0;i<count;i++){
if(win[x][y][i]){ ?//點(x,y)處有贏法
if(color==1){ //判斷落子為黑色的情況
myWin[i]++;//黑色落子累加器
if(myWin[i]==5){ //黑色落子在某種贏法中達到5個則執(zhí)行以下語句
window.alert("黑子勝利!");
over=true;
}
}
if(color==2){ //判斷落子為白色的情況
computerWin[i]++; //白色落子累加器
if(computerWin[i]==5){//白色落子在某種贏法中達到5個則執(zhí)行以下語句
window.alert("白子勝利!");
over=true;
}
}
}
}
}
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;
}
else
chessboard[i][j] = 2;
? ?judgement(i,j,chessboard[i][j]);
? me = !me;
?
?// for(var k=0;k<count;k++){
?// if(win[i][j][k]){
?// myWin[k]++;
?// computerWin=6;
?// if(myWin[k] == 5){
?// window.alert("你贏了");
?// over=true;
?// }
?// }
?// }
}
}
}
2016-04-02
正在仔細看下咯