我为终端编写了一个简单的小迷宫游戏,它反复要求用户做某事(例如“您想朝哪个方向走?[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。我特意将对终端的所有引用放在一个实现 Utils
接口(interface)的 ConsoleUtils
类中(它具有诸如 askQuestion()
之类的方法) -我的想法是,我可以创建一个 GuiUtils
类,并将我的游戏作为终端游戏或作为 GUI 游戏。
问题是 navigate
方法询问用户一个问题,然后“等待”响应,而 Utils
类通过使用 扫描仪
读取最新的输入行。但是,如果我对 GUI 中的新 N/E/S/W 按钮使用事件监听器,则无论 navigate
方法是否请求事件,它们都会触发事件。
--> Image of GUI
有什么方法可以将其结合起来,或者我是否需要为 GUI 编写一个新的 navigate
方法?
(说实话,我也不完全确定我的 GUI 类是否应该实例化 game
类,在这种情况下,navigate
的逻辑可能最终会出现在无论如何,一个 GUI 方法,或者游戏是否应该有一个 GUI。我还没有为事件监听器编写任何代码,因为我不确定哪个类应该调用哪个类。这可能是一个单独的问题。)
最佳答案
您的基于文本的游戏有一个循环,反复询问问题以收集用户输入。 Swing 通过不断执行已发布到 EventQueue
的 Runnable
代码块来为您提供此循环。 。例如,当用户按button时标记为 E,代码将发布到调用您的 ActionEvent
实现的队列,以处理游戏对 move east
命令的解释。
作为引用,检查了一个非常简单的猜谜游戏的完整示例 here 。在伪代码中,相应的基于文本的游戏可能如下所示:
initialize
loop
prompt "Guess what color!"
get chosenColor
if chosenColor = actualColor
say "You win!"
reset game
else
say "Keep trying."
end loop
更详细的game那里引用的内容包括基于原始文本的来源。
关于java - 如何将事件监听器与 "asking"结合起来进行事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24725420/