我对Java中的某些中间概念相当陌生。最近我做了一个名为DazzleQuest的文本冒险游戏,它完全在开发者控制台/终端中运行。它让我的朋友们成为角色,所以我想通过将命令行和控制台输出的功能转移到一个简单的Swing界面中,让他们看到他们并获得Java体验,包括一个JTextArea
以显示游戏输出和一个JTextField
,与ActionListener
,处理来自用户的命令。将Swing集成到一个简单的文本冒险游戏中
我的主要DazzleQuest
类包含的方法称为run()
和handleCommand()
,我想我需要用我的Frame
类和它的子类TextFieldHandler
[延伸ActionListener
]集成。 我在想,一般来说,整合这些方法和类的最好方法是什么。我目前的尝试一直令人困惑,尽管我对如何让不同的课程和方法进行沟通有基本的把握,但这是暂定的。
道歉的单调性和缺乏特异性。我会分享我的代码,但我不确定要给出多少和确切的内容。如果你认为你可以回答我的问题,但需要我的例子,请说出来。即使伪代码作为答案,将不胜感激。谢谢!了解这可能对我作为程序员的教育非常有帮助。
编辑:这里是我完全在开发人员控制台中运行的游戏版本的代码简化示例。这是我的主要DazzleQuest
类:
public class DazzleQuest {
public void run() {
listCommands();
for (;;) {
StdOut.println(new StringBuilder("You are in ").append(currentRoom.getName()).append(".").toString());
StdOut.println(new StringBuilder("You can go to: ").append(currentRoom.listExits()).toString());
StdOut.print("> ");
handleCommand(StdIn.readLine());
StdOut.println();
}
public void handleCommand(String line) {
String[] words = line.split(" ");
if (words[0].equals("look"))
look();
}
}
}
这里是我目前的JFrame
设置,在Frame
类:
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Frame extends JFrame {
public static JTextField field;
public JTextArea area;
public Frame() {
setLayout(new FlowLayout());
area = new JTextArea(20, 40);
area.setEditable(false);
field = new JTextField(20);
add(area);
add(field);
pack();
setVisible(true);
TextFieldHandler handler = new TextFieldHandler();
field.addActionListener(handler);
}
public class TextFieldHandler implements ActionListener{
public void actionPerformed(ActionEvent event)
{
String line = field.getText();
area.append(line + "\n");
field.setText("");
}
}
public static void main(String args[]) {
Frame test = new Frame();
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
我知道如何打印输出到JTextArea
,而不是到控制台。我的问题是如何得到handleCommand()
在Frame
类中使用actionPerformed()
,或者我应该在主类中设置一个动作侦听器或类似的东西。任何实施的例子将不胜感激。
再次感谢您的任何事情,你可以告诉我!
非常感谢您的回答!演示文稿和业务逻辑的分离对我来说是一个有趣的主题 - 我曾经做过一个游戏,其中包含游戏规则和逻辑的“Model”类与包含显示方法,控件的主游戏类分离以及游戏的开始和结束。这是你的意思吗?我将尝试明天复制我的实现示例,并提供更具体的建议。 – speers
@speers是的。这听起来像我的意思。 [MVC](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)模式非常标准,并有很好的理由。它使得更换用户界面变得更加容易,而不会改变执行数据处理的逻辑。 – Chewtoy
我会牢记这一点。我目前的程序非常简单,我想我可以很容易地将模型与显示分开,但是在我已经想出如何使其在GUI中运行后,可能会这样做。我只是用代码示例更新了我的帖子,所以如果你可以再看一看,那将是非常棒的! – speers