为了账号安全,请及时绑定邮箱和手机立即绑定

哪里不对啊,怎么下都不会赢,弹框都不出来

<!DOCTYPE html>
<html >
 <head>
  <meta charset="UTF-8">
  <title>五子棋</title>
  <link rel="stylesheet" href="css/style.css" />
 </head>
 <body>
  <canvas id="chess" width="300px" height="450px"></canvas>
  <script type="text/javascript" src="js/script.js" ></script>
 </body>
</html>


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] = 0;
 }
}


//统计所有的横线
var count = 0;
for(var i = 0; i < 15; i++) {
 count[i] = [];
 for(var j = 0; j < 11; j++) {
  for(var k = 0; k < 5; k++) {
   wins[i][j + k][count] = true;
  }
  count++;
 }
}
//统计所有的竖线
var count = 0;
for(var i = 0; i < 15; i++) {
 count[i] = [];
 for(var j = 0; j < 11; j++) {
  for(var k = 0; k < 5; k++) {
   wins[j + k][i][count] = true;
  }
  count++;
 }
}
console.log(count);
for(var i = 0; i < count; i++) {
 myWin[i] = 0;
 computerWin[i] = 0;
}
//统计所有的斜线
var count = 0;
for(var i = 0; i < 11; i++) {
 count[i] = [];
 for(var j = 0; j < 11; j++) {
  for(var k = 0; k < 5; k++) {
   wins[i + k][j + k][count] = true;
  }
  count++;
 }
}
//统计所有的反斜线
var count = 0;
for(var i = 0; i < 11; i++) {
 count[i] = [];
 for(var j = 14; j < 3; j--) {
  for(var k = 0; k < 5; k++) {
   wins[i + k][j - k][count] = true;
  }
  count++;
 }
}
var chess = document.getElementById('chess');
var context = chess.getContext('2d');


context.strokeStyle = '#BFBFBF';


//画水印
var logo = new Image();
logo.src = "img/back.png";
logo.onload = function() {
 context.drawImage(logo, 0, 0, 300, 450);
 drawChessBoard();
}


var drawChessBoard = function() {
 //画棋盘
 for(var i = 0; i < 15; i++) {
  context.moveTo(15 + i * 30, 19);
  context.lineTo(15 + i * 30, 440);
  context.stroke();
  context.moveTo(15, 19 + i * 30);
  context.lineTo(286, 19 + i * 30);
  context.stroke();
 }
}


var oneSetp = function(i, j, me) {
 //画棋子
 context.beginPath(); //去开始一个路径
 context.arc(15 + i * 30, 15 + j * 30, 13, 0, 2 * Math.PI); //arc用来画扇形(位置,位置,半径,起始弧度,截止弧度)
 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;
 }
 //实现落子
 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) {
  oneSetp(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) {
     alert(myWin[k]);
     window.alert("你赢了");
     over = true;
    }
   }


  }


 }
}


正在回答

3 回答

每个注释//统计所有的X线下的var count=0;留一个就行,还有就是反斜线的for循环中,j<3更正为j>3,暂时就发现这两个错

0 回复 有任何疑惑可以回复我~

你的ok了吗?我的也提示不了

0 回复 有任何疑惑可以回复我~
#1

小丶白鼠 提问者

不行啊,
2016-08-15 回复 有任何疑惑可以回复我~

没发现哪不对。。。

0 回复 有任何疑惑可以回复我~
#1

小丶白鼠 提问者

我的那个棋盘是10*15的,会不会是因为这个原因算法会不一样呢,
2016-07-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

哪里不对啊,怎么下都不会赢,弹框都不出来

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信