1

我做了一个Two Dice Pig用java命名的游戏。游戏有一个简单的 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 这个 man applied. Just watch only for 15 seconds. Thanks!

4

2 回答 2

0

您应该开始在 Google 上搜索“使用 Java 的 Rest Services”或类似的内容。

您需要一些中央组件来管理您的两个 android 游戏会话的游戏状态。例如,您有一个 url,就像localhost://myService/Dice您将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";
    }
}
于 2017-12-04T13:16:14.423 回答
0

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

方法一:哑客户端

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

例子:

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

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

方法2:锁步模拟

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

例子:

  • 玩家 X 点击掷骰子。
  • 客户 X 会自己掷骰子,结果是 4
  • 客户端 X 将向服务器发送滚动命令。
  • 服务器向客户端 Y 广播滚动命令。
  • 客户端 Y 接收滚动命令。
  • 客户端 Y 将掷骰子,结果应为 4(您的代码应以一致的方式在所有客户端中提供相同的结果)
于 2017-12-04T13:39:18.743 回答