好吧,这听起来像是个疯狂的想法--但我对模拟纯Java上世纪80年代风格的roguelike游戏文本接口感兴趣,比如使用Swing或类似的。
以下是它需要做的大致工作:
有人知道有一个好的现有解决方案可以实现这一点吗?还是我被困在一起从零开始进行黑客攻击?
附注:我想要纯Java的原因是为了让它能够在沙箱小程序中运行。因此,像咒骂这样的JNI解决方案被不幸地排除在外……
发布于 2011-02-04 12:00:42
一点也不疯狂,这是我在Legerdemain中实现的方法:http://roguelikefiction.com
我使用了一个二维字符数组(char)和相应的java.awt.Color对象数组来跟踪颜色。您可以将这些数组插入从JPanel继承的类(后者反过来是JFrame的一部分),并执行面板的paintComponent()回调中的所有绘图。
Curses/JNI方法也没有什么问题,尽管如果您选择Swing路径,您会得到各种各样的Unicode符号。魔法师用了五六百个。
发布于 2011-02-02 21:03:07
对于这类项目,我发现必须严格分离游戏模型和视图。这个简单的示例建议整体架构,而这个更复杂的游戏扩展了这个概念。好处是,视图可以独立于游戏本身发展,而游戏本身并不关心侦听视图是什么样子。
对于符号,Unicode符号可能是一个很有吸引力的选项,正如本示例中所建议的那样。
发布于 2011-02-02 21:02:32
提供固定大小字符的固定大小网格作为“屏幕”(例如100*75)
string[] screen =新的string75,然后用100个空格填充每个屏幕。
使用适当的单间距字体,最好有许多有趣的符号。
请参阅以下链接以获得一些好链接:http://cg.scs.carleton.ca/~luc/mono.html
允许为每个字符位置分别设置前景和背景字符颜色。
您可以通过使用允许像JEditorPane这样的HTML呈现的控件来实现这些文本效果。这样,您就可以将特殊关键字定义为“特殊关键字”。(好吧,这有点不可取,但对您的情况来说应该很好。)如果您将“游戏状态”存储为一个普通字符串(数组),但在输出它之前将html呈现出来,这将是最简单的。
允许在屏幕上的任何位置打印字符串或单个字符(应该覆盖屏幕缓冲区中在这些位置已经存在的内容)
如果您遵循我在前面问题中的建议,而不是将您的游戏状态作为普通字符串数组,那么您只需为您的行找到字符串,就可以找到使用string.substring (length ) + "A“+ string.substring(startindex: length + 2,string.length -(length+2))来构造新的游戏状态。
https://stackoverflow.com/questions/4879627
复制相似问题