Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于侧滚式太空射击游戏的Java游戏服务器_Java_Sockets_Network Programming - Fatal编程技术网

用于侧滚式太空射击游戏的Java游戏服务器

用于侧滚式太空射击游戏的Java游戏服务器,java,sockets,network-programming,Java,Sockets,Network Programming,我的朋友们用java开发了这个游戏,他们让我为它做多层设计。这是一个像小行星一样的侧滚射击游戏。我知道它必须处理套接字,我更喜欢使用tcp over udp来保持稳定的连接,而不是来回使用数据集群。我有一个原型,它将字符串从客户端来回发送到服务器,反之亦然。但我如何在游戏中实现这一点呢?我会将飞船的x和y坐标发送给游戏主机,然后再发送回其他游戏坐标吗?如果您有任何帮助,我们将不胜感激。请提前向您致谢。好的,这可以通过几种方式实现, 假设我们有目标: -太空1号、太空2号……太空作为航天器物体 随

我的朋友们用java开发了这个游戏,他们让我为它做多层设计。这是一个像小行星一样的侧滚射击游戏。我知道它必须处理套接字,我更喜欢使用tcp over udp来保持稳定的连接,而不是来回使用数据集群。我有一个原型,它将字符串从客户端来回发送到服务器,反之亦然。但我如何在游戏中实现这一点呢?我会将飞船的x和y坐标发送给游戏主机,然后再发送回其他游戏坐标吗?如果您有任何帮助,我们将不胜感激。请提前向您致谢。

好的,这可以通过几种方式实现, 假设我们有目标: -太空1号、太空2号……太空作为航天器物体

随着游戏的进行,屏幕上将会充满宇宙飞船的物体 每次你都会得到游戏中所有空间元素的x,y坐标 你也会发送你的坐标

因此,客户端机器上的游戏将 -坐标的点1(x,y) -点2…点n(x,y)用于其他航天器(对手的) -每次它都会刷新x,y,以便对手更改

您将在本地应用程序中处理航天器的拍摄 假设你射中了太空3 您将向服务器发送空间_3被击中的消息,因此在服务器中将该飞船标记为死亡 当其他客户端(其他用户/玩家)从服务器收到刷新调用时,所有客户端都会看到空格_3被命中


希望这有帮助,如果它太抽象的话,我会为你的游戏推荐这种结构:

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

发送/读取数据可能很困难。有几种方法可以做到这一点,这取决于你现在更容易理解什么。以后可以改进

  • 在整个游戏过程中,服务器不断地将对象发送到指定的位置
    如果屏幕上的对象数不总是相同的,则发送一个字符串,其中包含当前对象数+它们的坐标。客户端使用之前指定的数字在这些坐标中循环
  • 船舶也是如此。我想这将是一个固定的数字,所以你可以发送他们的坐标
  • 在字符串内部,坐标应该用一些东西隔开,这样在收到时您就可以读取它们
    一种方法是用特定字符将它们分开
  • "x1,y1;x2,y2;x3,y3;x4,y4; ..."
    ("," between x-y and ";" between sets of coordinates)
  • 最后,我建议在发送的每个数据包中添加一个标题,以了解它是一个对象坐标列表还是一个船舶坐标列表

对于像您这样的小项目,让客户进行大量计算可能没问题,但一个好建议是:永远不要相信客户!你能从客户那里收到的所有数据都是伪造的。那么,在我设置了printwriter和bufferread之后,我会同时写入船1的位置和读取船2的位置吗?然后在下一个画面上画上船只,再读写一遍?这样行吗?我必须从您的代码中获得更多信息,才能做出更自信的假设,但基本上是的,这将是一个很好的解决方案,您可能需要对与服务器的通信进行一些性能调整 "0012054201620104" (x1: 12 , y1: 542 ; x2: 162 , y2: 104)