如何将事件侦听器与事件的"asking"相结合?



我为一个终端编写了一个简单的小迷宫游戏,它反复要求用户做一些事情(例如:"你想往哪个方向走?"(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方法?

(老实说,我也不完全确定我的GUI类是否应该实例化game类,在这种情况下,navigate的逻辑最终可能会出现在GUI方法中,或者游戏是否应该有GUI。我还没有为事件侦听器编写任何代码,因为我不确定哪个类应该调用哪个类。这可能是一个单独的问题。

你的基于文本的游戏有一个循环,反复询问问题以收集用户输入。Swing通过持续执行已经发布到EventQueueRunnable代码块为您提供了这个循环。例如,当用户按下标有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

这里引用的一个更复杂的游戏包括原始的基于文本的源代码。

最新更新