2011-09-04 44 views
0

我正在開發一款4人牌遊戲。一個玩家是用戶,而另一個是電腦玩家。我開始了一個循環來獲得每個球員的卡牌。計算機玩家通過自動選擇適當的卡片來扔卡,而用戶通過點擊卡片來自動扔卡。但問題是,循環不要等待用戶選擇。如何讓用戶事件等待java應用程序

+1

如果是這樣的話,讓循環等待用戶選擇。一些代碼會有所幫助。 – bragboy

+0

那麼你的問題是什麼? –

回答

1

有一對夫婦的方式來處理這一點。一種是讓遊戲邏輯與用戶界面分離。它會經歷這樣的循環:

while (!gameOver()) { 
    getPlayerMoves(); 
    updateGameState(); 
    notifyUI(); 
} 

getPlayerMoves()方法將在每個玩家(電腦或人類是否),直到此舉可。電腦玩家可以在同一個線程中實現,因爲他們並不真正阻止。方法將通知UI線程遊戲狀態已經改變。一個方便的方法是使用消息隊列。

UI線程只會監聽事件並對它們做出反應。它會期待兩種事件:來自遊戲邏輯線程的通知(如上所述)和由(人類)玩家移動。當它收到遊戲狀態已更改的通知時,它將更新顯示並啓用玩家移動。當它接到玩家移動時,它將禁止該玩家的額外移動(因爲玩家不應該每回合移動兩次),發送通知到遊戲線程,並等待另一個事件。 (如果只有一個人類玩家,那麼此時唯一可能發生的事件應該是遊戲狀態更改)。

如果您使用的是Swing,那麼有幾個內置類可以極大地簡化這種通知在線程之間。看看SwingWorker課程即可開始。如果沒有,請參閱this thread以瞭解線程之間的消息方式。