Написал игру TicTacToe с графическим интерфейсом, используя JButtons. Ниже приведен код, используемый для проверки наличия победителя. Также включен мой код для проверки ничьей. ОДНАКО, в случае, когда нажаты все кнопки. И последний ход приводит к выигрышу для одного из игроков, он по-прежнему считается ничьей из-за всех нажатых кнопок. Как я могу исправить это, чтобы он точно проверил ничью?TicTacToe Check For Draw
public void checkWin(char[] values)
{
//Check if player 1 (xs) win
if ((values[0] == 'x') && (values[1] == 'x') && (values[2] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
else if ((values[3] == 'x') && (values[4] == 'x') && (values[5] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
else if ((values[6] == 'x') && (values[7] == 'x') && (values[8] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
else if ((values[0] == 'x') && (values[4] == 'x') && (values[8] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
else if ((values[2] == 'x') && (values[4] == 'x') && (values[6] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
else if ((values[0] == 'x') && (values[3] == 'x') && (values[6] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
else if ((values[1] == 'x') && (values[4] == 'x') && (values[7] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
else if ((values[2] == 'x') && (values[5] == 'x') && (values[8] == 'x'))
{
playerLabel.setText("Player 1 wins!");
disableButtons();
}
// check for draw
else if (((values[0] == 'x') || (values[0] == 'o')) && ((values[1] == 'x') || (values[1] == 'o')) &&
((values[2] == 'x') || (values[2] == 'o')) && ((values[3] == 'x') || (values[3] == 'o')) && ((values[4] == 'x') || (values[4] == 'o'))
&& ((values[5] == 'x') || (values[5] == 'o')) && ((values[6] == 'x') || (values[6] == 'o')) && ((values[7] == 'x') || (values[7] == 'o'))
&& ((values[8] == 'x') || (values[8] == 'o')))
{
playerLabel.setText("DRAW!");
disableButtons();
}
//Check is player 2 (os) wins
if ((values[0] == 'o') && (values[1] == 'o') && (values[2] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
else if ((values[3] == 'o') && (values[4] == 'o') && (values[5] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
else if ((values[6] == 'o') && (values[7] == 'o') && (values[8] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
else if ((values[0] == 'o') && (values[4] == 'o') && (values[8] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
else if ((values[2] == 'o') && (values[4] == 'o') && (values[6] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
else if ((values[0] == 'o') && (values[3] == 'o') && (values[6] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
else if ((values[1] == 'o') && (values[4] == 'o') && (values[7] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
else if ((values[2] == 'o') && (values[5] == 'o') && (values[8] == 'o'))
{
playerLabel.setText("Player 2 wins!");
disableButtons();
}
// check for draw
else if (((values[0] == 'x') || (values[0] == 'o')) && ((values[1] == 'x') || (values[1] == 'o')) &&
((values[2] == 'x') || (values[2] == 'o')) && ((values[3] == 'x') || (values[3] == 'o')) && ((values[4] == 'x') || (values[4] == 'o'))
&& ((values[5] == 'x') || (values[5] == 'o')) && ((values[6] == 'x') || (values[6] == 'o')) && ((values[7] == 'x') || (values[7] == 'o'))
&& ((values[8] == 'x') || (values[8] == 'o')))
{
playerLabel.setText("DRAW!");
disableButtons();
}
}
Итак ... есть определенно лучший способ делать вещи, а затем проверять все возможные комбинации. Идя с тем, что у вас есть, если вы пройдете все инструкции if, почему вам нужно вообще проверить ничью? Если каждый флажок установлен, и вы делаете это так далеко, нет ли ничьей по умолчанию? –
Другой вариант заключается в том, что все поля пустые, например, при запуске новой игры. Также просто сделать заявление else сделает игру все время. – Evan
Затем создайте логическую переменную, которая определяет, запущена ли игра, и установите ее значение false после первого хода. Если игра будет рисовать все время с помощью оператора else, условная логика в коде нуждается в некоторой работе. –