java - ActionListener 在内存游戏客户端 - 服务器应用程序中使用

标签 java swing


我正在解决一个问题,但我有点卡住了。我将从一些背景开始。
我正在编写内存游戏(例如,它是这样的 http://www.mathsisfun.com/games/memory/index.html )。它应该是客户端-服务器应用程序。
客户端 - java
服务器 - C

情况是1个服务器,N个客户端

服务器将有游戏列表 - 每个游戏中有两名玩家
每个游戏将在 onw 进程中单独处理 - 我使用 fork

客户端是java swing形式的应用程序 - 并代表玩家
客户端和服务器仅通过两种方法(或函数)进行通信

客户端 - void sendMessageToServer(String message), String receiveMessageFromerver()
服务器 - receiveMessage(void *vptr, size_t maxlen,
int socketfileDesc) ,int sendMessageToClient(char* msg, int socket)
简单地说 - 我只是将字符串消息从服务器发送到客户端,客户端发送到服务器 I,这些消息是编码操作

现在我的问题是: 为了更容易测试客户端,也在java中制作了服务器,我只用一个游戏解决问题 - 一个服务器,2个客户端(都在java中) 所以我有3节课 客户:
- 显示来自,
- 有有关游戏的信息,
- 有静态方法 CreateAndShowGUI(String serverInsanceHandle) => show - 表单,创建客户端实例
服务器:
- 只有两条消息 - 接收、发送我之前提到的
测试:

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        final Server server = new Server();
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
           public void run() {
                Client.createAndShowGUI(server);
                Client.createAndShowGUI(server);

           }
        });    
    }    
}

这里:

我的问题是这样的:
为了进行简单测试,我有 4x4 游戏卡,这意味着 8 对
我有数组 JButton[] ButtonArray = new JButton[16];每个按钮上都有带有卡片图片的ImageIcon,每个按钮都添加了actionListenner(privateClass) 在实现 ActionListener 的 privateClass 中是方法 actionPerformed ,在那里我更改了客户端的设置 - 我向服务器发送消息,服务器向我发回消息,我应该在客户端执行什么操作。 我的问题是我有两个客户端和一台服务器。 当我在 client1 中执行操作时,它仅在 client1 中有效,但我现在需要以某种方式将其传递给 client2。 我可以拥有应该在服务器端查看的卡片字段,或者我可以拥有字符串消息字段 - 带有编码更改,但我现在不知道如何让 client2 知道 client1 做了一些操作。通信必须通过服务器: 类似“你好,我是 client1,我按下了 2 号按钮,所以你 client2 应该向服务器请求更改”,但我不能这样做。 那我能做什么呢?

注意:它应该是 TCP 通信的“模拟”,因此我将使用 tcp 套接字 - 但这现在可能并不重要。

最佳答案

我将假设有关您的服务器的两件事:

  1. 服务器正在维护内存游戏的状态(IE,当前翻转了哪些纸牌,哪个客户端发现了正确的纸牌对等)。我将其称为 GameState 对象。
  2. 服务器还维护与每个客户端的唯一套接字连接

在我看来,您的客户端首先更新自己的本地 GameState,然后告诉服务器更新其 GameState。也就是说,我会进行以下更改:

  1. 每当客户端想要翻牌或进行其他修改 GameState 的操作时,请向服务器发送一条消息,告诉服务器更新其 GameState。
  2. 每当服务器更新其 GameState 时,都会将整个 GameState 发送给所有客户端。
  3. 将客户端设计为仅显示从服务器接收到的 GameState。

这样,您的服务器就可以控制主 GameState,而您的客户端则更像是该 GameState 的“观察者”。

关于java - ActionListener 在内存游戏客户端 - 服务器应用程序中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8929223/

相关文章:

java - 使用迭代器从列表中删除条目

java - 如何使用小程序同时播放音频文件和显示图像?

java - 在 jpanel 上保留绘制的字符串

java - 通过按钮 Java Swing 打开一个新面板

java - 在android studio中引用菜单itemId

java - Show(),这里放什么?

Java VisualVm 使 PID 消失

java - RxJava - 将列表和请求转换为 map

Java GUI 登录屏幕

java - 框架.添加(游戏);不工作