使用JButtons用GUI編寫了一個TicTacToe遊戲。以下是用於檢查是否有贏家的代碼。還包括我的代碼來檢查平局。但是,如果點擊了所有按鈕,並且最後一步移動會導致其中一位玩家獲勝,則由於所有按鈕被點擊而仍被視爲平局。我該如何解決這個問題,以便它能夠準確地檢查平局?TicTacToe檢查繪製
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語句繪製,則代碼中的條件邏輯需要一些工作。 –