JButtonを使用してGUIでTicTacToeゲームを書きました。以下は、勝者がいるかどうかを確認するためのコードです。また、ドローをチェックするコードも含まれています。しかしながら、すべてのボタンがクリックされ、最後の移動がプレーヤーの1人に勝利をもたらした場合、それはすべてのボタンがクリックされたため引き分けとみなされる。どのようにしてドローを正確にチェックできるように修正できますか?TicTacToe Draw 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ステートメントを通過すれば、なぜドローをチェックする必要がありますか?すべてのボックスがチェックされ、それを遠くにすると、デフォルトでは描画されませんか? –
もう1つの選択肢は、新しいゲームを開始するときなど、すべてのボックスが空白であることです。また、単にelseステートメントを作成すると、ゲームは常に描画されます。 – Evan
次に、ゲームが開始されたかどうかを決定するブール変数を作成し、最初の移動後にfalseに設定します。ゲームが常にelse文で描画される場合、コード内の条件付きロジックにはいくつかの作業が必要です。 –