2017-01-19 5 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 그리고 '\'와 '/'대각선 두 가지 방법 :

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입니다. 그것은 일치가 있다는 것을 의미하지만 그렇지 않습니다.

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

그러나 문제의, 프로그램이 제대로 작동하지 않기 때문에 :

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

내가 하나 이러한 방법을 결합 : 같은 같은 checkVertical(String[][] field) 및 현장입니다.

이 문제를 해결하는 방법을 모르겠습니다. 2D 배열의 행, 열 및 대각선을 검사하는 다른 방법이 있습니까? 어쩌면 하나의 보편적 인 방법으로 그것을하는 방법이 있습니다.

답변

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; 
}