我为一个终端编写了一个简单的小迷宫游戏,它反复要求用户做一些事情(例如:"你想往哪个方向走?"(N/E/S/W)")。我有一个在循环中运行的navigate()
方法,它发出这些问题,存储它们的答案,并根据答案做一些事情。
public enum Dir (N, E, S, W);
public void navigate() {
Dir nextDir = utils.askDirection("Which way do you want to go?");
// Do stuff with answer, like changing position of user in maze
}
现在,我已经为我的游戏编写了一个简单的GUI。我故意将所有对终端的引用放在ConsoleUtils
类中,该类实现了Utils
接口(这有askQuestion()
之类的方法)-这个想法是我可以创建GuiUtils
类,并将我的游戏作为终端游戏或作为GUI游戏。问题是navigate
方法问用户一个问题,然后"等待"响应,Utils
类通过使用Scanner
读取最新的输入行来给出响应。但是,如果我在GUI中为新的N/E/S/W按钮使用事件侦听器,它们就会触发事件,而不管navigate
方法是否请求事件。-->图形界面图片
是否有任何方法我可以结合这个,或者我需要为GUI编写一个新的navigate
方法?
game
类,在这种情况下,navigate
的逻辑最终可能会出现在GUI方法中,或者游戏是否应该有GUI。我还没有为事件侦听器编写任何代码,因为我不确定哪个类应该调用哪个类。这可能是一个单独的问题。
你的基于文本的游戏有一个循环,反复询问问题以收集用户输入。Swing通过持续执行已经发布到EventQueue
的Runnable
代码块为您提供了这个循环。例如,当用户按下标有E的按钮时,代码将被发布到调用ActionEvent
实现的队列中,以处理游戏对move east
命令的解释。
作为参考,这里检查了一个非常简单的猜测游戏的完整示例。在伪代码中,相应的基于文本的游戏可能是这样的:
initialize
loop
prompt "Guess what color!"
get chosenColor
if chosenColor = actualColor
say "You win!"
reset game
else
say "Keep trying."
end loop
这里引用的一个更复杂的游戏包括原始的基于文本的源代码。