2017-01-19 10 views
0

私はJavaを使い慣れていませんし、TicTacToeの拡張バージョンを作っています(基本的に3x3バージョンはゲームフィールドのサイズ4x4,5x5などとすることができます。最終的な勝利のためには、プレイヤーは連続して数回勝つ必要があります。ユーザーはゲームをカスタマイズできます)。 私はいくつかのチェック方法を持っています。拡張Tic-Tac-Toe、勝者(Java)をチェックする際のトラブル

// 1。行の場合:

boolean checkHorizontal(String[][] field) { 
       boolean valid = true; 
       for (int i = 0; i < field.length; i++) { 
        for (int j = 1; j < field[i].length; j++) { 
         if (!field[i][0].equals(field[i][j]) && !field[i][0].equals("[ ]")) { 
          valid = false; 
         } 
        } 
       } 
       return valid; 
      } 

// 2です。列の場合:

boolean checkVertical(String[][] field) { 
        boolean valid = true; 
        for (int i = 0; i < field.length; i++) { 
         for (int j = 1; j < field[i].length; j++) { 
          if (!field[0][i].equals(field[j][i]) && !field[0][i].equals("[ ]")) { 
           valid = false; 
          } 
         } 
        } 
        return valid; 
       } 

// 3。そして、 '\' と '/' 対角線の2つの方法:

boolean checkDiagonal(String[][] field) { 
     boolean valid = true; 
     for (int i = 0; i < field.length; i++) { 
      if (!field[0][0].equals(field[i][i]) && !field[0][0].equals("[ ]")) { 
       valid = false; 
      } 
     } 
     return valid; 
    } 

boolean checkAnotherDiagonal(String[][] field) { 
     boolean valid = true; 
     for (int i = 0, j = field.length - 1; i < field.length; i++, j--) { 
      if (!field[0][field.length - 1].equals(field[i][j]) && !field[i][0].equals("[ ]")) { 
       valid = false; 
      } 
     } 
     return valid; 
    } 

ここで問題です。フィールドまたはフィールドのような場合:

{"[ ]", " X ", "[ ]"}, 
{"[ ]", " X ", "[ ]"}, 
{"[ ]", " X ", "[ ]"} 

checkHorizontal(String[][] field)の結果はtrueです。それは一致があることを意味しますが、一致しません。私は1つこれらの方法を組み合わせ

{"[ ]", "[ ]", "[ ]"}, 
{" X ", " X ", " X "}, 
{"[ ]", "[ ]", "[ ]"} 

boolean validate(String[][] field) { 
     boolean valid = false; 
     if (checkHorizontal(field) 
       || checkVertical(field) 
       || checkDiagonal(field) 
       || checkAnotherDiagonal(field)) { 
      valid = true; 
     } 
     return valid; 
    } 

をしかしので問題の、プログラムが正しく動作しません同じことが同じようcheckVertical(String[][] field)とフィールドのためです。

これを解決する方法がわかりません。 2D配列の行、列、対角線をチェックするもう1つの良い方法はありますか?たぶん、ある普遍的な方法でそれをする方法がありますか?

答えて

0

はこのようにそれを試してみてください。

boolean checkHorizontal(String[][] field) { 
    // iterate over all rows 
    for (int i = 0; i < field.length; i++) { 
     boolean validRow = true; 
     // iterate over all columns 
     for (int j = 0; j < field[i].length; j++) { 
      // to consider a row valid, none of its cells can be empty 
      if (field[i][j].equals("[ ]")) { 
       validRow = false; 
       break; // this row is invalid 
      } 
     } 
     // is the row we're currently checking valid? 
     if (validRow) { 
      // we're done 
      return true; 
     } 
     // try the next row 
    } 
    // all horizontal rows are invalid 
    return false; 
} 
関連する問題