1

我正在用Java(客户端和服务器)开发一个多人回合制策略游戏。我在网络游戏方面没有太多经验,但我做过一些小事情,比如多客户端聊天和带套接字的 2 玩家井字游戏。我不是在找人为我编写代码,只是给我一些指导。

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

这就是我目前正在考虑实现它的方式:

  1. 建立连接后,该连接将有一个相应的变量来描述服务器上的状态。例如:0 是登录前,1 是登录后,2 是托管,等等...

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

有一个更好的方法吗?

4

3 回答 3

2

因为是完整的 Java + 客户端-服务器 + 游戏:

我建议你忘记使用直插座。

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

为什么?:

  • 一旦你学会了它,它比套接字更容易。

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

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

可能还有更多的原因……

于 2013-01-10T01:43:13.943 回答
1

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

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

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

希望这能给你一些关于从哪里开始的想法。

于 2013-01-10T04:59:09.793 回答
0

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

java游戏服务器引擎

于 2017-10-10T02:43:22.513 回答