私は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つの良い方法はありますか?たぶん、ある普遍的な方法でそれをする方法がありますか?