栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

将Swing集成到简单的文字冒险游戏中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

将Swing集成到简单的文字冒险游戏中

首先,关于包含代码,您应该查看https://stackoverflow.com/help/mcve,了解如何帮助我们为您提供帮助。

现在,由于您还没有提供任何代码(尚未!),就如何构造程序提出建议有些棘手。但是无论如何,我都会尝试,并且在您提供MWE后可能会编辑答案。

就您而言,

Jtextarea
这实际上只是一种幻想,
System.out.print
因为您只会用它来显示冒险游戏输出的文本(如果我正确理解了您的话)。因此,基本上,您可以编写一个接受字符串的方法,该方法会将字符串附加到您的
Jtextarea
。然后只需使用此方法替换当前的输出线即可。

然后,您有了

JTextField
要替换(我猜)
Scanner(System.in)
的东西。我假设您知道如何设置响应的动作监听器
Enter
submit
-button。如何设置这些并不是什么奇怪的事,许多指南都在讨论如何做到这一点。https://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html提供了一个很好的示例。

现在,大体上关于程序的结构。你 希望依赖于 如何 将用户输入的文本或你如何显示它。我的意思是,您不希望输入或显示逻辑与您的游戏( 业务
)逻辑混为一谈。您的游戏逻辑应该只是从任何地方接收输入,然后将其输出到任何地方。然后调用函数如何以及如何决定如何处理该信息,这并不是游戏逻辑所关心的。

因此,应用于您发布的方法名称。我认为这

run()
是您开始的地方。当您一直希望显示输出时,您可能希望传入一个
interface
包含方法
print(string)
(或类似方法)的here,该方法应该是将文本打印到用于显示文本的任何文本元素的方法,它
System.out
还是
Jtextarea
。该
run()
方法永远不需要知道。
handleCommand()
还应该只接受一个值(我假设是一个String)并按应有的方式处理它,而不管调用它的是谁。

我在没有代码的情况下无法为您提供更多建议。但是我的一般建议是:不要将表示逻辑与业务逻辑混在一起。并给每种方法尽可能少的信息,因为给它们过多的信息通常会导致流程和结构的灵活性降低。


现在编辑,已添加了一些代码。

我知道如何将输出打印到Jtextarea而不是控制台。我的问题是如何确切地使handleCommand()与frame类中的actionPerformed()一起使用

顺其自然

actionPerformed()
。我建议您这样做,因为如果
Thread
将来某个时候决定使用您的应用程序(多人游戏),您将不必费心。https://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html提供了一些有关如何编写侦听器的良好信息。但我也会给您一些建议代码。

...area.setEditable(false);field = new JTextField(20);field.addActionListener(new SendText());    ....class SendText implements ActionListener{    public void actionPerformed(ActionEvent ae){        if(ae.getSource() == field){ String str = field.getText(); if(!str.equals("")){     commandHandler.handle(str); }        }    }}

然后重写你的

run()
方法

public void run(){   ui.print(commandHandler.listCommands());   while(true){       if(commandHandler.continue()){ui.print(commandHandler.events());       }   }}

因此,现在您有一个非常小的

run()
方法,它与逻辑或显示都没有真正的联系。
ui.print(str)
是您的
UI
类(
frame
对于您而言)的一种方法,该方法只是将发送给它的字符串附加到其绘图区域(无论是
System.out
还是)
Jtextarea

commandHandler
是新的。这就是您的游戏逻辑所在。它有一种
handle(string)
旧的方法
handleCommand(string)
。它有一个
continue()
返回布尔值的方法。每当您希望故事继续进行时(例如,当用户输入命令时),布尔值应设置为true。最后
events()
(这是一个不好的名字)返回自上次发送命令以来发生的事情,并为用户提供下一步操作的选项。我还没有实现它,只是想将这个概念提供给您。UI不执行任何逻辑处理。该
run()
方法没有任何期望,它只会继续检查是否
continue()
为真。
commandHandler
是所有嗡嗡声所在的地方。

现在,您确实正在运行一个无限循环。因此,如果您遇到任何性能问题,可以进行调查

Thread
。该模型应支持向其迁移。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386856.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号