2014-07-13 41 views
1

我写了一个简单的小迷宫游戏针对反复要求用户做一些终端(例如,“在哪个方向,你愿意去吗?[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方法是否已要求一个或没有。 --> Image of GUI

有没有什么办法可以结合这还是我需要写的GUI新navigate方法? (老实说,我也不完全确定我的GUI类是否应该实例化一个game类,在这种情况下,navigate的逻辑无论如何都可能以GUI方法结束,或者游戏是否应该有GUI我不写了事件侦听器的任何代码要么呢,因为我不知道哪个类应该调用哪个,这可能是另外一个问题。)

回答

2

你的文字为基础的游戏有一个循环反复询问收集用户输入的问题。摇摆通过不断执行的代码Runnable块已被发布到EventQueue提供这个循环为您服务。例如,当用户按下button标记ē,代码发布到调用你的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引有包括原始基于文本的来源。