2017-05-02 15 views
0

私はJavascriptを使用してConnect 4ゲームを作ろうとしています。 は、だから私は、行の4のために水平を検索しようとして始めた、これまで作られた:1行のみをチェックするとき、私はそれが働いてしまったJavascript 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} 

を、私はまた、列にそれをチェックするためにループする第二を追加したとき動作を停止。

私は、これを実行して、ピースを配置するたびに(垂直と斜めのチェックのためのコード)実行します。

+0

私はあなたがすべての列にゼロに 'Win1'をリセットする必要が信じています。 –

答えて

1

コメントで@LuanNicoが指摘したように、各行または列の前にカウンタ変数Win1をリセットする必要があります。

Columnとの変数に列と行の数が格納されている場合は、ループの繰り返しを1行または列に早く停止すると、1回限りのエラーが発生することがあります。

私は次のように少し修正し、あなたのコードを再編成することをお勧めします:

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

関連する問題