当前位置: 首页 > 面试题库 >

如何将事件侦听器与事件的“询问”结合在一起?

陶富
2023-03-14
问题内容

我为终端编写了一个简单的小迷宫游戏,反复要求用户做某事(例如“您想朝哪个方向前进?[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 编写新方法?

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


问题答案:

您的基于文本的游戏具有一个循环,该循环反复询问问题以收集用户输入。Swing通过连续执行Runnable已发布到的代码块为您提供此循环EventQueue。例如,当用户按下标记为的按钮时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

此处引用的更详尽的游戏包括原始的基于文本的来源。



 类似资料:
  • 我正在编写一个手势/动作库,它还管理事件侦听器和触发。我已经实现了我的库,通过一个API支持手势对象设置被动侦听器,该API如下:。My lib支持多种手势,设置多个听众,包括被动和非被动。lib将确保最多只有一个真正的侦听器连接到DOM。因此,我们最多可以有2个touchstart监听器,其中一个是被动监听器,另一个不是。 我的问题和问题是,我无法检测接收到的事件是否附加了选项。我认为我可以在本

  • 我的代码使用jQuery。我有一个密码输入框,我想要得到输入的密码任何时候。 下面是我的代码: 我确信这是一个正确的代码,因为当我在浏览器的控制台中输入它时,它可以工作,但当我重新加载页面时,它就不工作了 我能做什么?

  • 从元素中移除事件侦听器。 使用 EventTarget.removeEventListener() 从元素中删除一个事件监听器。 省略第四个参数 opts ,则默认使用 false 或者根据添加事件监听器时使用的选项来指定它。 const off = (el, evt, fn, opts = false) => el.removeEventListener(evt, fn, opts); con

  • 问题内容: 我正在构建一个允许将本地文件拖放到div上的组件。然后是有关已删除文件的信息输出。 我的问题是我不知道如何正确地附加事件侦听器以及创建组件时。 我的App组件是我所有逻辑所在的地方(拖放和拖移的处理程序),我创建了一个单独的组件,该文件将被放置在该组件上-dropZone组件。 我尝试将事件侦听器放在App组件的dropZone标记上,如果放置了dropZone组件,则在该位置放置事件

  • 我正在Wildfly 9.0.1的KeyClope中配置一个事件侦听器。我创造了一个。jar有两个类,实现了一个提供者,如KeyClope在他的github示例中解释的那样。 在本例中,keydape人员解释说,有必要注册提供者编辑“standalone/configuration/standalone.xml”并将模块添加到providers元素中。我在标签“subsystem”中对这个定义进行

  • 问题:我正在尝试为我的应用程序创建一个组件,其他组件将使用该组件渲染表。它可能有三个可能的单元格值: 文本 HTML 组成部分 我能够呈现上面所有的值,但是我在绑定侦听器时遇到了困难。我试图实现的是这样的:传递一个要绑定到组件的方法和事件,表应该将其绑定到相应的单元格。例如: 表JSON 表组件 上面只是我正在尝试的一个片段,表循环通过传递的对象并相应地呈现。 我已经试过了 因此,解决方案1 因此