2011-09-04 43 views
0

我正在开发一款4人牌游戏。一个玩家是用户,而另一个是电脑玩家。我开始了一个循环来获得每个球员的卡牌。计算机玩家通过自动选择适当的卡片来扔卡,而用户通过点击卡片来自动扔卡。但问题是,循环不要等待用户选择。如何让用户事件等待java应用程序

+1

如果是这样的话,让循环等待用户选择。一些代码会有所帮助。 – bragboy

+0

那么你的问题是什么? –

回答

1

有一对夫妇的方式来处理这一点。一种是让游戏逻辑与用户界面分离。它会经历这样的循环:

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

getPlayerMoves()方法将在每个玩家(电脑或人类是否),直到此举可。电脑玩家可以在同一个线程中实现,因为他们并不真正阻止。方法将通知UI线程游戏状态已经改变。一个方便的方法是使用消息队列。

UI线程只会监听事件并对它们做出反应。它会期待两种事件:来自游戏逻辑线程的通知(如上所述)和由(人类)玩家移动。当它收到游戏状态已更改的通知时,它将更新显示并启用玩家移动。当它接到玩家移动时,它将禁止该玩家的额外移动(因为玩家不应该每回合移动两次),发送通知到游戏线程,并等待另一个事件。 (如果只有一个人类玩家,那么此时唯一可能发生的事件应该是游戏状态更改)。

如果您使用的是Swing,那么有几个内置类可以极大地简化这种通知在线程之间。看看SwingWorker课程即可开始。如果没有,请参阅this thread以了解线程之间的消息方式。