求教一下為什么結果和老師跑的不一樣
和老師一樣敲的代碼,看了好幾遍,但測試的時候發現沒到五個子就說我贏了請問哪位大哥幫我看看錯在哪里
var?chess?=?document.getElementById('chess');
var?context?=?chess.getContext("2d");
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++){
/*
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
代碼本身沒有錯誤,之所以出現這個現象是因為到目前為止,白棋的落子也在onclick進行,這里沒做特殊處理,所以白棋的落子也被統計在myWin這個贏法統計數組當中啦。所以你看看,是不是不分黑棋白棋,只要棋子連上五顆就判斷成贏了呢?
在之后,白棋不會在onclick中處理,它的落子會在computerWin中統計,就不會這樣啦。
2016-11-28
老師給的不分白起黑騎就直接給黑棋加上了myWin,所以當你白棋黑棋共五個時myWin剛好加到了五,因此需要一個判斷函數判斷落子為黑棋還是白棋,然后再給相應的myWin和computerWin累加判斷是否到五。代碼如下(偷別人的):
var judgement=function(x,y,color){ //judgement函數判斷游戲是否結束,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個則執行以下語句
window.alert("黑子勝利!");
over=true;
}
}
if(color==2){ //判斷落子為白色的情況
computerWin[i]++; //白色落子累加器
if(computerWin[i]==5){//白色落子在某種贏法中達到5個則執行以下語句
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
正在仔細看下咯