2013-01-10 220 views
1

我正在开发一个基于Java的多人回合策略游戏(包括客户端和服务器)。我在网络游戏方面没有太多经验,但是我做了一些小事情,比如多客户聊天和双人游戏,带插座的游戏。我不想找人为我编码,只是给我一些指导。Java多人游戏网络概念

游戏经历了多个阶段:首先是用户连接和登录。之后他可以选择主持/参加一场比赛。在他加入某个游戏或某人加入他的游戏之后,客户会转到游戏阶段。游戏是1v1,只需要每5秒发送一次数据(如果这很重要?)。我只需要一些关于如何设计客户端/服务器来通过这些“阶段”的指导。

这是我当前如何想实现它:

  1. 当连接时连接将有一个描述服务器状态的相应变化。例如:0登录之前,1登录之后,2登录之后,等等......

  2. 只要客户端发送数据到服务器,它就会检查状态并相应地处理它。就像在登录之前发送数据一样,服务器将假定它是登录细节,如果它们有效,它将变量更改为1,并告诉客户端前进。

有没有更好的方法来做到这一点?

回答

1

基本上你如何描述它是它是如何常见的做。只需让服务器监听客户端连接,然后在自己的线程中处理客户端连接。然后来回发送消息以确认状态(登录与注销,加入游戏等)以及游戏中的消息供玩家移动。无论是TCP还是UDP套接字在短期内都能正常工作,但是最终您可能会切换到主要基于UDP的系统,因为在服务器和客户端之间发送的消息将相当小,并且延迟可能是取决于游戏类型的关键。

考虑通过JSON发送/接收消息(http://wiki.fasterxml.com/JacksonHome是最后一次相当流行的Java解析器)。

此外,你需要在服务器端的几个数据结构来有效地管理客户端及其状态。例如,您可以为每个客户端设置一个整数ID,并使用Map<Integer, Client>来存储当前连接的所有登录用户,其中Client是存储该用户当前状态的某个对象。

希望这给你一些想法从哪里开始。

+0

由于工作的客户端计划!回答我的问题并添加了一些有用的信息! – Tukhes

1

既然是完整的Java +客户端服务器+游戏:

我建议你忘记使用直接套接字。

在我看来,Java RMI是你最好的选择。

为什么一旦你学到了?:比插槽更容易

  • 您可以直接从您的Java客户端/服务器调用远程方法。

  • 您可以使用回调。 (即服务器测试的客户端仍连接)

可能有更多的理由......

+0

感谢您的贡献,抱歉不会说出去的问题,但如果一切顺利的话,我可能就做的手机,其RMI不会为不幸的是:( – Tukhes

0

您可以使用Mina或Netty作为Nio套接字框架。在服务器和客户端中使用Java可以更容易地设计消息协议。当一个客户端移动时,您向服务器发送移动消息,然后服务器将消息推送给两个客户端。两个客户端在收到消息时一起移动。因此,如果避免网络延迟,两个客户端同步移动。 你可以看看用java编写的开源游戏框架。

java game server engine