3

我正在开发一款有趣的 2D 游戏,以了解多人游戏的来龙去脉。游戏本身将使两名玩家的军队在战略回合制战斗中相互对抗。我正在将它开发为一个独立的桌面客户端(最终可能是一个手机应用程序)。

我正在用 Java 编写游戏,我不信任客户端,所以我考虑了安全性。玩家将拥有一个个人帐户,其中包含他们的军队列表和将在服务器上存在的东西。此外,我计划使用 mySQL 将此类数据存储在服务器上。

但是,我不确定如何实现这一点。我是否使用网络服务器之类的东西?这似乎是错误的,但我不知道在客户端不受信任的情况下,Java 前端和后端使用什么技术。请注意,我不是在寻找关于最佳方式的辩论,我只需要了解概念,也许是一些示例技术,也许是指向教程的链接。

谢谢你的帮助!

4

2 回答 2

5

除非您打算将其作为浏览器游戏,否则我认为使用网络服务器并不是最好的主意。

套接字可能是您正在寻找的答案,您可以使用它们创建自己的不信任客户端的通信协议。

您的服务器将需要使用服务器套接字并接受多个客户端。

您还可以将Swing用于客户端 UI。

是默认的 java Sockets 教程。

例如,您的协议可能包含以下命令: (Client to Server) Move(UnitGroup, Point) - 告诉服务器您要将组移动到某个点,然后服务器执行计算以确定单位到达并开始将它们移动到那里。

(服务器到客户端)PositionUpdated(UnitGroup, Point) - 告诉客户端一个组移动到某处并且可能需要在显示中更新

如果您发布您的协议,玩家甚至可以让他们自己的客户端按照自己的意愿查看游戏。你的服务器会通过只给客户他们应该“看到”的东西来保持公平。

我不知道这会如何影响延迟。

于 2013-02-05T02:36:57.690 回答
3

只是为 Psetmaj 的有用答案添加一点内容:

Your game client and game server are going to deal with the structures (lists, etc) you use in a very Java-centric way. The part you're not yet experience in is going to be figuring out how to package up these commands and structures for transport in TCP or UDP and then unpacking them at the other end. This is called "marshalling" (when you pack the payload) and "de-marshalling" (when you unpack it and turn it back into something Java can understand). In fact, the "hard" part about it is that it is very tedious and needs to happen for every different message that goes back or forth.

我的建议是在您继续操作时使用辅助函数库,该库负责将您使用的结构转换为当您通过网络发送和接收它们时它们将具有的表示形式。该表示可以是基于文本的,如 AJAX 或基于二进制的,如 Java 的 RMI,无论您决定尝试哪种方式。

于 2013-02-05T03:08:19.003 回答