TCP - 如何在本地主机服务器上的两个玩家之间玩 java 游戏

TCP - How to play a java game between two players on localhost server

我在 java 中制作了一个名为 Two Dice Pig 的游戏。该游戏有一个简单的 GUI 界面,显示两个骰子面以及玩家得分和姓名。游戏以询问玩家姓名的简单对话消息开始,然后游戏开始。两位玩家都只与一个 GUI 界面交互,并在轮到他们时进行游戏。游戏是完全编码的。现在,我想要的是制作一个服务器 (For now I want to try it on my local server) 并且两个玩家都应该有自己的 GUI。当玩家 A 正在玩游戏时,玩家 B 不应该对界面做任何事情。我希望它清除。这是我的网络项目,但我不知道该怎么做。任何帮助将不胜感激。

Note: I want to apply the same idea as this man applied. Just watch only for 15 seconds. Thanks!,

你应该开始谷歌搜索 "Rest Services with Java" 或类似的东西。

您需要一些中央组件来管理您的两个 android 游戏会话的游戏状态。例如你有一个像 localhost://myService/Dice 这样的 url 会 POST 掷新的骰子。如果其他人对该资源进行了 GET,他将能够取回您在游戏中投掷的骰子。 如果您不希望玩家能够互动,您可以禁止玩家 POST 一个新的骰子,当他不能这样做时,GUI 应该以某种方式反映这一点。也许在你发布一个骰子或类似的东西后禁用按钮。

还有更多内容,但这应该可以帮助您入门。

https://docs.oracle.com/javaee/6/tutorial/doc/gilik.html

上面 url 中的重要代码部分是这样的 hello world:

package com.sun.jersey.samples.helloworld.resources;

import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Path;

// The Java class will be hosted at the URI path "/helloworld"
@Path("/helloworld")
public class HelloWorldResource {

    // The Java method will process HTTP GET requests
    @GET
    // The Java method will produce content identified by the MIME Media
    // type "text/plain"
    @Produces("text/plain")
    public String getClichedMessage() {
        // Return some cliched textual content
        return "Hello World";
    }
}

制作一款多人游戏并非易事。准备好重写大部分代码,因为您似乎从一开始就没有考虑过编写多人游戏代码。这里有两种不同的策略:

方法一:哑客户端

大部分游戏逻辑应该在服务器中完成。客户端只显示服务器告诉他们的内容。他们还向服务器发送命令以更改游戏状态。

示例:

  • 玩家 X 点击掷骰子按钮。
  • 客户端 X 向服务器发送 roll 命令
  • 服务器检查是否轮到玩家 X,return如果不是则报错。
  • 服务器掷骰子。假设它的 3.
  • 服务器将轮次改为 Y。
  • 服务器向所有客户端发送消息说骰子是 3,轮到 Y。

基本上服务器等待玩家的命令并按顺序执行。更新世界并向所有客户端广播新世界。客户端只是等待从服务器获取更新并将它们显示给用户。

方法二:锁步模拟

大部分游戏逻辑都是在客户端和服务器中完成的,只是在它们之间进行调解以传达命令。仅传输命令并在每个客户端中模拟状态。您应该非常小心,不要出现同步错误(命令可能会延迟交付或可能发生其他事情)。您应该确保在相同状态下在每个客户端应用命令。例如,随机种子应该相同,因此随机函数将 return 在两个客户端中具有相同的值。

示例:

  • 玩家 X 点击掷骰子。
  • 客户 X 自己掷骰子,假设结果是 4
  • 客户端 X 将向服务器发送滚动命令。
  • 服务器向客户端Y广播滚动命令。
  • 客户端Y收到滚动命令。
  • 客户端 Y 将掷骰子,结果应该是 4(您的代码应该以一致的方式在所有客户端中提供相同的结果)