Javascript连接4游戏,检查获胜者

时间:2017-05-02 19:26:59

标签: javascript

我正在尝试使用Javascript制作Connect 4游戏。 所以我开始尝试连续4次搜索水平线,然后编写:

for (var y = 0; y < Column - 1; y++)
  for (var x = 0; x < Row - 1; x++)
    if (myArray1[y][x] == 1){
           Win1++;
           if (Win1 == 4){
              alert("Won");
              }
        } else {Win1 = 0}

我只在检查1行时才能正常工作,但是当我添加第二个for循环以检查它停止工作的列时。

我的意图是每当我放下一块时运行它(以及用于检查垂直和对角线的代码)。

1 个答案:

答案 0 :(得分:1)

正如@LuanNico在评论中指出的那样,您需要在每行或每列之前重置计数器变量Win1

如果您的ColumnRow变量包含列数和行数,则可能会因过早停止循环迭代一行或一行而出现一次性错误。

我建议稍微修改和重新组织您的代码,如下所示:

&#13;
&#13;
function checkColums(board, columns, rows) {
  for (var y = 0; y < columns; y++) {
    var consecutive = 0;
    for (var x = 0; x < rows; x++) {
      if (board[y][x] == 1) {
        consecutive++;
        if (consecutive == 4) {
          return true;
        }
      }
    }
  }
  return false;
}

function checkRows(board, columns, rows) {
  for (var x = 0; x < rows; x++) {
    var consecutive = 0;
    for (var y = 0; y < columns; y++) {
      if (board[y][x] == 1) {
        consecutive++;
        if (consecutive == 4) {
          return true;
        }
      }
    }
  }
  return false;
}

// Example:
var board = [
  [1, 0, 1, 0],
  [0, 1, 1, 0],
  [1, 0, 1, 1],
  [1, 1, 1, 0]
];

console.log(checkColums(board, 4, 4)); // false
console.log(checkRows(board, 4, 4));   //  true
&#13;
&#13;
&#13;