1

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

4

2 回答 2

2

我会为你的游戏推荐这个结构:

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

客户端只需读取对象坐标,绘制它们并将船舶/激光位置发送到服务器。服务器
将生成对象并将其位置发送给所有客户端。同时读取船舶位置并更新用户界面。 发送/读取数据可能很困难。有几种方法可以做到这一点,具体取决于您现在更容易理解什么。以后可以改进。

  • 在整个游戏过程中,服务器不断发送对象位置。
    如果屏幕上的对象数量并不总是相同,请发送一个包含当前对象数量 + 坐标的字符串。客户端使用您之前指定的数字循环遍历这些坐标。
  • 船只也是如此。我想这些将是一个固定的数字,所以你可以发送他们的坐标。
  • 在字符串内部,坐标应该用一些东西分隔,这样您就可以在收到它们时读取它们。
    一种方法是将它们与特定字符分开
    "x1,y1;x2,y2;x3,y3;x4,y4; ..." 
    ("," 在 xy 和 ";" 之间的坐标集之间)
    或者,由于您要发送 a String,因此始终使用相同数量的字符(例如 4)编写它们
    “0012054201620104”(x1:12,y1:542;x2:162,y2:104)
  • 最后,我建议在您发送的每个数据包中添加一个标头,以了解它是对象坐标列表还是船舶坐标列表。
于 2012-05-22T12:19:08.303 回答
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 已被击中

希望这有帮助,如果它太抽象的话

于 2012-05-22T09:38:56.047 回答