java - 如何将事件监听器与 "asking"结合起来进行事件?

标签 java swing events user-interface

我为终端编写了一个简单的小迷宫游戏,它反复要求用户做某事(例如“您想朝哪个方向走?[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 通过不断执行已发布到 EventQueueRunnable 代码块来为您提供此循环。 。例如,当用户按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/

相关文章:

java - 在 Java 中,单个 Catch block 可以由多个 Try block 共享吗?

java - JSpinner ActionListener 替代品

javascript - 是否可以在不包括 Jquery 中的嵌套元素的元素上注册点击?

C++过滤调试事件

javascript - fullcalendar 不加载事件

java - 当其他消费者正在处理消息时,ActiveMQ onmessage 被阻塞

java - 在 thread.sleep 期间允许 GUI 更新

java - 如何在 Java 中记录未捕获的异常?

java - 更新 JTable 数据——使用 AbstractTableModel

java - 更改 JPanel 的实例