将基于文本的游戏制作成可执行的jar文件 - Java

4
我在想如何将基于文本和控制台的游戏制作成可执行JAR文件。根据我在网站上看到的,我需要使用JTextField和JTextPane。我知道要使其可运行,它需要创建自己的控制台。无论复杂程度如何,只要足够简单易懂即可。如果这太高级了,请指点我学习如何完成此操作的正确方向。
(如果这是其他地方的重复问题,请指出方向;我已经搜索过并找不到任何简单的问题。)

一个可执行的Jar文件不会显示控制台,因此不适合基于控制台的游戏!如果您想保持控制台模式,请不要使用可执行的Jar文件。如果您想要一个可执行的Jar文件,请将应用程序转换为具有GUI界面的应用程序。 - Andrew Thompson
3个回答

1
你只需要使用JTextFieldJTextPane来创建游戏GUI。
对于控制台游戏,
首先创建一个manifest.txt文件。确保以新行结尾。
Main-Class: MyMainClass

那么

javac MyMainClass.java SomeOtherClass.java
jar -cvfm my-game.jar manifest.txt *.class

然后运行它,
java -jar my-game.jar

抱歉我之前的评论,我没有正确阅读你的答案。我有一个问题,在创建了manifest.txt文件之后,我要在终端中输入哪些.java文件? - Jordan.McBride
@Jordan.McBride,你需要输入游戏所需的.java文件。显然,如果你的游戏具有非常复杂的结构,这将变得很繁琐。如果你使用的是集成开发环境(IDE),它应该能够为你完成所有这些工作。 - Paul Draper

1

对于控制台,您可以从命令行运行它,或者像您所说的那样,创建一个GUI并使其像控制台一样工作。

GUI可以通过两种方式完成:

  1. 创建一个简单的GUI,其中包含一个用于输出的文本框和一个用于输入的行。添加用于写入和获取行的方法(分别)
  2. 创建另一个简单的GUI和一个扩展PrintStream类的类。覆盖PrintStream类的write方法,使其写入您创建的JTextPane中。按照相同的格式为InputStream(System.in)进行操作。您可以通过System.setIn(InputStream)和System.setOut(PrintStream)来设置这些值。此方法的结果更加复杂,但仍然给人以更完整的感觉。
更多关于#2的内容: @Jordan.McBride 系统类中的所有内容都是由JRE定义的。在程序运行之前,JRE将准备您的程序可能调用的System类的所有元素。在这样做时,它创建了一个PrintStream对象并告诉它写入控制台。您的程序可以通过使用System.out来调用此类。同样,JRE还创建了一个InputStream对象并将其分配给控制台窗口,您可以通过System.in引用它。Java允许您使用System.setIn(..)和System.setOut(..)替换这些Stream类。如果您的程序GUI失败,这很有用,因为您不必显示一个用户不友好的控制台来显示错误。 通过创建覆盖PrintStream和InputStream类的自己的类,您可以重定向数据流的位置。查看PrintStream类的API here。println()和print()方法都调用write()函数。为简单起见,我只会覆盖print和println。在您覆盖的函数中,您可以拥有像这样简单的东西
public void println(String outstr)
{
  this.textBox.setText(this.textBox.getText() + outStr + "\n");
}

当然,您需要拥有一个textBox实例字段,以便它知道在哪里写入。

如果可能的话,您能更深入地了解选项2吗?因为我以前从未尝试过,所以我想了解一下如何操作。 - Jordan.McBride
@Jordan.McBride 我已经编辑了更多的信息,因为它太长无法放在评论中。 - Knox
我已经编辑了更多的信息。实际上,我认为你所做的是最好的,还有评论“请查看答案的编辑”。+1 - Andrew Thompson

0

我不是在寻找简单的解决方案,而是想要一些我第一次阅读就能理解的东西。 - Jordan.McBride

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接