用于侧滚动空间射击游戏的Java游戏服务器

时间:2012-05-22 09:27:53

标签: java sockets network-programming

我的朋友使用java开发了这个游戏,他们让我为它做多层。它是像小行星一样的侧滚动射击游戏。我知道它必须处理套接字并且id更喜欢使用tcp over udp来获得持续连接而不是来回的数据集群。我有一个proto类型,从客户端到服务器来回发送字符串反之亦然。但是我如何将其实现到游戏中呢?我会将船的x和y坐标发送到托管游戏的游戏然后发回其他游戏坐标吗?非常感谢任何帮助,谢谢你的进步。

2 个答案:

答案 0 :(得分:2)

我会为你的游戏建议这个结构:

  • 创建一个托管游戏并进行计算的服务器。
  • 让服务器创建并处理在屏幕中移动的对象(敌人)。这样你只需要发送数据服务器 - >客户端更新用户界面。
  • 对于太空船,服务器必须同时更新所有客户端,因此在客户端,每次有移动时将x,y坐标发送到服务器,然后将新位置广播给每个玩家。拍摄或客户端生成的任何其他事件也是如此。
  • 当两个物体碰撞时(例如激光和敌人),这应由服务器处理,同时具有物体和船只位置。

客户只需读取对象坐标,绘制它们并将船只/激光位置发送到服务器。
服务器将生成对象并将其位置发送给所有客户端。同时读取船舶位置和更新用户界面。

发送/读取数据可能很难。有几种方法可以这样做,取决于你现在理解的更容易。它可以在以后改进。

  • 在整个游戏过程中,服务器不断发送对象位置。
    如果屏幕上的对象数量不总是相同,则发送包含此刻对象数量+其坐标的字符串。客户端使用您之前指定的数字循环遍历这些坐标。
  • 同样适用于船只。我猜这些是固定数字,所以你可以发送它们的坐标。
  • 在字符串中,坐标应该用东西分隔,以便在收到时能够读取它们。
    一种方法是将它们与特定字符
    "x1,y1;x2,y2;x3,y3;x4,y4; ..." 
    ("," between x-y and ";" between sets of coordinates)
    分开,或者,因为您要发送String,所以请始终使用相同数量的字符(例如4){{ 2}}
  • 最后我建议为你发送的每个数据包添加一个标题,以确定它是一个对象坐标列表还是一个船舶坐标列表。

答案 1 :(得分:0)

嗯,这可以用几种方式完成, 假设我们有对象: - Space_1,Space_2,...... Space_n作为太空飞船物体

随着游戏的进行,屏幕将充满空间工艺物体 每次你将获得游戏中所有space_x元素的x,y坐标 你也会发送你的坐标

所以客户机上的游戏会有 - 坐标的point1(x,y) - point_2 .... point_n(x,y)用于其他太空飞行器(你的对手) - 每次刷新x,y为对手改变

您将在当地应用程序中处理航天器的拍摄 让我们说你射击并击中space_3 您将向服务器发送space_3已被命中,因此将此船标记为服务器中的死机 当其他客户端(其他用户/玩家)从服务器获得刷新调用时,所有客户端都会看到space_3已被命中

希望这有助于,如果它过于抽象