我正在嘗試使用 Android Studio 制作一個tictactoe 游戲。我已經撰寫了一個代碼來設定按鈕在某人獲勝時的可見性(并且它有效)。我還希望游戲在棋盤已滿但沒有人獲勝(平局)時顯示“再次玩”按鈕。我怎么做。
這是我要撰寫的代碼:
public boolean checkGameState () {
boolean isBoardFull = false;
androidx.gridlayout.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);
for (int i = 0; i < gridLayout.getChildCount(); i ) {
ImageView reset = (ImageView) gridLayout.getChildAt(i);
if(reset.getDrawable() != null) {
isBoardFull = true;
}
}
return isBoardFull;
}
這是游戲外觀的螢屏截圖:

正如您在圖片中看到的,即使游戲尚未完成,“再次播放”按鈕仍然可見。該按鈕將顯示某人是贏還是平(棋盤已滿)。
uj5u.com熱心網友回復:
沒有您的病情輕微的錯誤,因為一旦它發現它繪制的標記作為isBoardFull的true,這是錯誤的,因為所有的孩子沒有被檢查了又那么標記isBoardFull為true在這個階段是錯誤的。
您可以執行以下操作:
public boolean checkGameState () {
boolean isBoardFull = true; // first mark it as full
androidx.gridlayout.widget.GridLayout gridLayout = findViewById(R.id.gridLayout);
for (int i = 0; i < gridLayout.getChildCount(); i ) {
ImageView reset = (ImageView) gridLayout.getChildAt(i);
if(reset.getDrawable() == null) {
isBoardFull = false; // if drawable not found that means it's not full
}
}
return isBoardFull;
}
因此,現在首先它將板標記為已滿,但是一旦發現任何可繪制物件為空,它將將板標記為空。
uj5u.com熱心網友回復:
我認為您應該isEveryChildChecked = true在迭代 gridLayout 子項之前初始化一個變數。在迭代子項時,如果未選中網格,則設定 field isEveryChildChecked = false。
然后在迭代之后,檢查欄位isEveryChildChecked,如果是真的,你可以顯示再次播放,否則什么也不做或隱藏再次播放按鈕。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/418899.html
標籤:
