我只是Java的初学者,直到现在我只是将功能放入按钮的addActionListener()
方法中,这对于小游戏和东西来说已经足够了。
但是现在我正在努力认真对待它,我想知道如何连接那些2。
作为一个例子,我正在制作Fuchimi游戏,所以我有实际游戏的课程,然后是一个用所需的一切构建框架的课程。
但我现在的实际问题是,在创建框架后,由于代码在窗口暂停,它不会执行以下代码,如下所示:
FuchimiUI ui = new FuchimiUI();
//The following is not executed
Hand playerHand = null;
while (playerHand == null) {
playerHand = ui.getPlayerHand();
}
Hand enemyHand = generateHand();
ui.changeEnemyText("Enemy picked " + enemyHand.toString());
if (enemyHand.beats(playerHand)) {
ui.changeGenText("Computer wins!");
} else
ui.changeGenText("You win!");
按钮我只是改变了玩家的手。
那么我怎样才能正确地做到这一点,在框架已经打开的情况下编译游戏代码? 我想过线程,但我对它们知之甚少,因此我不知道这是不是一个好方法。
修改
ui.getPlayerHand()方法返回玩家通过按钮选择的所选手(摇滚,纸或剪刀)。
当然我可以在每个按钮的addActionListener()
方法中编写完整的代码,但我怀疑这是正确的方法。
所以一般来说,我想做的就是让玩家选择他的牌然后让游戏产生随机牌,然后比较这两个牌并更改其中一个牌子的文字,具体取决于牌手赢了或是不。
答案 0 :(得分:1)
您遇到的问题是因为您的while循环阻止了UI线程。您需要将其卸载到另一个线程,然后将UI更新排入UI线程。遇到同样的情况here,请看一下。
有几种方法可以解决这个问题。其中之一是SwingWorker。
步骤如下:
doInBackground
。publish
来存储中间结果(例如您要显示的消息)。process
以在您的用户界面中显示中间结果。答案 1 :(得分:0)
尽管我同意Domi的回答,但长时间运行的代码应该进入后台线程,我强烈怀疑这不是你在这种情况下所需要的,而是你应该重新考虑你的程序的结构。可能你需要的而不是那个while循环是一个模态对话框。
有关更多更好的建议,请考虑告诉我们有关游戏逻辑和程序设置的更多详细信息。例如,准确地告诉我们ui.getPlayerHand()
的作用,作为一个开始。
您要做的是更改程序的结构,使其事件驱动和基于状态,其行为会根据其状态而改变。例如,如果您的程序处于“选择手”模式,那么这些按钮或其他用户界面都会响应用户。