我按照老师视频讲的敲了代码,问题是运行时只有黑棋,没有白棋啊!求帮助

window.onload = function () {
   var chess = document.getElementById("chess");
   var context = chess.getContext("2d");
   context.strokeStyle="BFBFBF";
    var logo = new Image();
    logo.src="images/zxm.png";
 //棋子数组
 var me = true;
 var over = false;
 var chessB = new Array();
 for(var m=0;m<15;m++){
   chessB[m] = new Array();
   for(var n=0;n<15;n++){
    chessB[m][n] = 0;
   }
 }
 var wins = [];
    var count = 0;

for(var i = 0; i < 15; i++) {
 wins[i] = [];
 for (var j = 0; j < 15; j++) {
  wins[i][j] = [];
 }
}

//横向

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++;
 }
}

//赢法统计数组
var mywin = [];
var aiwin = [];
for(var i=0;i<count;i++)
 {
      mywin[i]=0;
   aiwin[i]=0;
    }
console.log(count);
 logo.onload =function()
 {
 context.drawImage(logo,0,0,450,450);
 chessBox();
 }
  var chessBox = 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 (chessB[i][j] == 0) {
  oneStep(i, j, me);
  chessB[i][j] = 1;
      for(var k =0;k<count;k++)
  {
    if(wins[i][j][k]==true)
   {
        mywin[k]++;
     aiwin[k]=6;
     if(mywin[k]==5)
    {
         window.alert("你赢了!");
      over = true;
    }
   }
  }
   if(!over){
    computerAi();
    me=!me;
   }
 }
  }

//
  var computerAi= function(){
  var myScore = [];
  var computerScore = [];
  var max =0;
  var u = 0,v = 0;
  for(var i=0;i<15;i++)
 {
   myScore =[];
      computerScore = [];
      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(chessB[i][j]==0)
     {
         for(var k=0;k<count;k++)
      {
            if(wins[i][j][k]==true)
       {
            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(aiwin[k]==1)
          {
              computerScore[i][j]+=220;
          }else if(aiwin[k]==2)
            {
               computerScore[i][j]+=420;
         }else if(aiwin[k]==3)
            {
               computerScore[i][j]+=2100;
         }else if(aiwin[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);
  chessB[u][v] = 2;//表示计算机在此处落子
  for(var k = 0;k<count;k++)
  {
    if(wins[u][v][k])
   {
        aiwin[k]++;
     mywin[k]=6;
     if(aiwin[k]==5)
    {
         window.alert("计算机赢了!");
      over = true;
    }
   }
  }
   if(!over){
    me=!me;
   }
}

}


qq_明天过后_哈哈
浏览 1163回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript