Итак, я назначил Tic Tac Toe для своего класса. Я успешно создал простую программу Tic Tac Toe, но как-то метод проверки на розыгрыш иногда не получается правильно. Если все заполнено, но победителя нет, то это ничья. Но если все остальное заполняется, за исключением столбца 1 строки 0, оно все равно будет показывать «рисование», даже если это поле все еще пусто. Если вы не понимаете, что я имею в виду, просто попробуйте заполнить все, кроме средней коробки в верхнем ряду, но не выиграйте, он скажет «рисовать», даже если последняя коробка не заполнена. Что я сделал неправильно в своем коде ???? Вот драйвер: import javax.swing.JOptionPane;Tic Tac Toe java draw game
public class TwoDimensionalArray_Driverr
{
public static void main(String[]args)
{
char player = 'o';
TwoDimensionalArrayy game = new TwoDimensionalArrayy();
while (game.checkGame() == "PLAY")
{
if (player == 'o') player = 'x';
else player = 'o';
System.out.println(game);
String input = JOptionPane.showInputDialog("Enter Position of Row for player "+ player +" or press Cancel to exit");
if (input == null)
System.exit(0);
int row = Integer.parseInt(input);
input = JOptionPane.showInputDialog("Enter Position of Column for player " + player);
int column = Integer.parseInt(input);
game.set(row,column,player);
game.isDraw();
game.hasWon(row,column,player);
game.checkGame();
System.out.println(game.checkGame());
}
if (game.checkGame()=="DRAW"){
System.out.println(game);
System.out.println("It's a draw.");
}
else {
System.out.println(game);
System.out.println(player + " has won.");}
}
}
А вот объект: общественный класс TwoDimensionalArrayy { частное Строка CurrentState = "GO"; частный знак [] [] доска; закрытый статический окончательный int ROWS = 3; закрытый статический окончательный int COLUMNS = 3;
public TwoDimensionalArrayy(){
board = new char[ROWS][COLUMNS];
for(int i=0;i<ROWS;i++) //always do ROWS first!!!!
for(int j = 0;j<COLUMNS;j++)
board[i][j]=' ';
}
public void set(int i, int j, char player)
{
if(board[i][j] != ' ')
throw new IllegalArgumentException("Position Occupied");
board[i][j] = player;
}
public String toString()
{
System.out.println("This is the board. 3x3");
System.out.println("Position start @ row[0]col[0],row[0]col[1],row[0]col[2]");
String dString= "";
for (int row = 0; row<ROWS; row++)
{
if (COLUMNS>0)
dString += board[row][0];
for (int col = 1; col<COLUMNS; col++)
{
dString+= "|" + board[row][col];
} //end 2nd for
dString += "\n";
}//end first for
return dString;
}
public String checkGame(){
if (currentState=="Win"){
return "END";}
else if (currentState=="Draw"){
return "DRAW";}
else return "PLAY";
}
public void hasWon(int i,int j,char player){
if (board[i][0] == player // 3-in-the-row
&& board[i][1] == player
&& board[i][2] == player
|| board[0][j] == player // 3-in-the-column
&& board[1][j] == player
&& board[2][j] == player
|| i == j // 3-in-the-diagonal
&& board[0][0] == player
&& board[1][1] == player
&& board[2][2] == player
|| i + j == 2 // 3-in-the-opposite-diagonal
&& board[0][2] == player
&& board[1][1] == player
&& board[2][0] == player)
currentState = "Win";
}
public void isDraw(){
for (int row = 0; row < ROWS; row++) {
for (int col = 0; col < COLUMNS; col++) {
if (board[row][col] == ' ') {
currentState = "Play";
break;
}
else {currentState = "Draw";} // no empty cell, it's a draw}
}
}
}
}
Я вижу! Большое спасибо! Также, если я буду использовать возврат, что бы я вернулся и как он будет работать? Я немного смущен в этой части. – Ccyan
@ user3504731 'isDraw' - это метод' void', поэтому он не имеет возвращаемого значения - простой 'return;' выйдет из метода. –
Ohhhhh. Итак, если я верну возврат вместо перерыва, он выйдет из обоих циклов? Я тоже об этом думал, но я думал, что даже если я вернусь, он все равно вернется через все. Большое спасибо! – Ccyan