[英]Extended Tic-Tac-Toe, troubles with checking winner (Java)
我是Java的新手,我正在制作TicTacToe的擴展版本(基本上,它與通常的3x3版本在游戲領域方面有所不同-可能是4x4、5x5,依此類推,玩家必須贏得幾次排行以取得最終勝利,等等。用戶可以自定義游戲)。 我有一些檢查方法。
// 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。 以及對角線\\和'/'的兩種方法:
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
。 那意味着有比賽,但是沒有。 對於checkVertical(String[][] field)
和類似字段的情況相同:
{"[ ]", "[ ]", "[ ]"},
{" X ", " X ", " X "},
{"[ ]", "[ ]", "[ ]"}
我將這些方法合二為一:
boolean validate(String[][] field) {
boolean valid = false;
if (checkHorizontal(field)
|| checkVertical(field)
|| checkDiagonal(field)
|| checkAnotherDiagonal(field)) {
valid = true;
}
return valid;
}
但是由於該問題 ,該程序無法正常運行。
我不知道該如何解決。 還有其他更好的方法來檢查2D數組的行,列和對角線嗎? 也許,有一種方法可以通過一種通用方法來做到這一點?
像這樣嘗試:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.