0

(GridWorld 作为 Collegeboard 的 AP 考试案例研究的东西)

所以,几年来我一直在空闲时间开发这款游戏,而且进展非常顺利。我有一个不错的 lil'stick 角色,它在网格中跑来跑去,捡起物品并与怪物和东西战斗。现在,我想我已经准备好将它提升到一个新的水平(无论如何我都有尽可能多的选择,因为我需要为我的网络课程制作一个项目,哈哈......),而且我'我对如何进步感到有些困惑。

过去我使用 ServerSocket 制作了一些程序,其中我有一个服务器正在运行,并且几个客户端可以连接到它并接收消息,但它们都是简单的文本程序,不会交换超过几个字符串。套接字是我正在考虑使用的,但我不知道如何设置它......

现在,当 GridWorld 运行时,它会自动弹出一个看起来像 JFrame 的东西,其中包含网格和其中的所有参与者。在包含所有代码的主源文件中,呃,“引擎”,如果你愿意的话,基本上有两个巨大的方法:step(),它控制每单位时间发生的事情,以及 keyPressed(),它控制用户按下按键时发生的情况。现在,我在想 step() 肯定需要在服务器端,而 keyPressed() 应该在客户端,还有窗口(当然——否则用户怎么能看到他们的内容呢?重玩?)这个想法是让控制所有 NPC 的动作和游戏计算的主游戏在服务器上只运行一次,

但是就像,我将如何拆分它?(或者如果这甚至是正确的方法?)我什至不确定如何在服务器和客户端之间来回传递数据 - 对于我提到的简单文本程序,我一直使用 PrintWriter 和 BufferedReader。我发现 PrintWriter 确实有一个 print() 方法可以接受任何对象,但是 BufferedReader 将如何接收它呢?它没有任何可以读取对象的方法。

所以基本上,我想知道服务器应该做什么、客户端应该做什么、我应该使用哪些库以及将某些功能放在哪里的所有细节。

4

2 回答 2

1

根据您当前的设计,您可能希望使用RMI之类的东西来进行客户端和服务器之间的通信。这将使您可以专注于如何在客户端和服务器之间调用方法,而不必过多担心管理网络通信。

RMI 可能不是您想要长期使用的,但它可能是让您的客户端启动并运行的正确下一步。


至于流 - PrintWriter.print(Object) 只是写出对象的字符串表示 -即它调用 toString() -,因此无法将其转回对象。

为此,您需要 ObjectOutputStream 和 Java 序列化。但是 RMI 会为您做到这一点,而您无需深入了解细节。

于 2011-10-24T00:54:39.197 回答
0

好吧,我已经决定使用 Sockets 并自己使用 ObjectOutputStreams 和其他东西进行序列化。我已经弄清楚了把所有东西放在哪里,它基本上工作正常,尽管我仍然在游戏本身中存在不可避免的故障,我需要解决这些故障。谢谢,蒂姆:)

于 2011-11-12T15:05:25.647 回答