我在編寫一個名爲「Coup」的遊戲時遇到了麻煩,並且要解釋什麼是問題,我需要簡單地解釋一下游戲的內容。 Coup是一款紙牌遊戲,玩家試圖消除對方併成爲最後一名玩家。要做到這一點,玩家可以選擇一些行動,但他們也可以騙別的玩家。在這場比賽中,其他球員可以打電話「廢話」或阻止其他球員的行動。正因爲如此,我需要製作迴應窗口,讓其他玩家以挑戰,封鎖或無所作爲迴應。行動的結果取決於迴應。例如,一名球員試圖獲得外援。我可以決定阻止他的行動或讓他繼續。如果我阻止,會有後果,但這不是問題。JFrame白色並且反應遲鈍
真正的問題是這樣的:我想給我的所有玩家有機會通過一個JFrame給予響應(塊或者什麼都不做),我使用while循環,等待所有玩家的響應。然而,這個while循環不會做任何事情,除非讓方法繼續前進,因爲結果取決於玩家的反應。通過while循環,我構建的JFrame顯示爲白色,並且不包含我製作的兩個按鈕。在這一點上,我甚至可以按下關閉按鈕,並且由於我所做的依賴於我的無響應窗口的while循環,它不會響應。有沒有什麼辦法解決這一問題?
if (turnCount == players[currentPlayerNum].getPlayerNum()){
for(int i=0; i<players.length;i++){
//If it is not the players turn and they have one or two lives, make response window
if (players[i].getPlayerNum() != turnCount){
if (players[i].getLives() != 0){
//foreignAidBlock constructs the response window
players[i].foreignAidBlock(turnCount);
}
else{
//Not applicable since out of game/not in game
players[i].setResponse("NA");
}
}
else{
//Not applicable since out of game/not in game
players[i].setResponse("NA");
}
}
//Idea: PAUSE TILL RESPONSES COME IN
while(players[0].getResponse() != null || players[1].getResponse() != null || players[2].getResponse() != null || players[3].getResponse() != null)
{
System.out.println(players[0].getResponse());
System.out.println(players[1].getResponse());
System.out.println(players[2].getResponse());
System.out.println(players[3].getResponse());
}
結果我從運行這部分代碼得到的是: 「NA 空 NA NA 」 不斷。我使用null來表示尚未回答的玩家。在該方法結束時,我將我所有的玩家能力都重置爲空。
我的所有響應窗口都會將播放器的響應從null更改爲「B」或「N」。但沒有訪問按鈕,我不能這樣做。除了使用while循環外,有沒有人有關於如何使用某些東西來「暫停」我的線程的提示?
您可以強制JFrame保持打開並處於頂部,因此阻止其他操作繼續。像一個JOptionPane也許 –
更改代碼的結構。不要*循環*的條件:這阻止了用戶界面,並且它不能做它自己的東西,如渲染。相反,使用事件*將*應答到更改狀態,然後檢查條件和「做下一個適當的事情」 - 「阻塞」是邏輯的,但與特定函數內的流程無關。 – user2864740