如何在多人 Java 应用程序中为已形成的组启动游戏会话?

问题描述 投票:0回答:1

我正在用 Java 开发一款多人游戏,玩家可以加入并组成小组。小组形成后,我想为该小组中的玩家开始游戏会话。游戏逻辑将在稍后实现,但我需要帮助设置框架来启动游戏并管理玩家交互。

以下是我当前设置的概述:

服务器代码(TypefastServer.java):

管理玩家连接和团队组建。 使用 ConcurrentHashMap 跟踪用户、玩家状态和输出。 组建愿意玩的玩家群体。

    // ... existing code ...

    private static void notifyGroup(List<String> group) {
        for (String player : group) {
            PrintWriter playerOut = playerOutputs.get(player);
            if (playerOut != null) {
                playerOut.println("Group created: " + group);
                playerOut.println("START_GAME");  // Placeholder to start the game
            }
        }
        System.out.println("Group created: " + group);
    }
}

客户端代码(ClientApplication.java):

处理用户交互并与服务器通信。 需要更新UI以在游戏开始时显示游戏界面。

    // ... existing code ...

    public void listenForServerMessages() {
        new Thread(() -> {
            try {
                String message;
                while ((message = in.readLine()) != null) {
                    if (message.startsWith("START_GAME")) {
                        SwingUtilities.invokeLater(() -> showGamePanel());
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }

    private void showGamePanel() {
        // Switch to game panel
        showPanel("start");
    }
}

StartPanel.java:

游戏界面的占位符。

public class StartPanel extends JPanel {
    private ClientApplication app;

    public StartPanel(ClientApplication app) {
        this.app = app;
        setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();

        JLabel startLabel = new JLabel("You are in a group! Ready to start the game.");
        startLabel.setFont(new Font("Tahoma", Font.PLAIN, 18));
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets = new Insets(10, 10, 10, 10);
        add(startLabel, gbc);

        JButton startGameButton = new JButton("Start Game");
        gbc.gridy = 1;
        add(startGameButton, gbc);

        startGameButton.addActionListener(e -> JOptionPane.showMessageDialog(this, "Game started!"));
    }
}

问题:

我想正确设置框架以在形成小组时启动游戏会话,然后集成游戏逻辑。具体来说,我需要帮助:

确保服务器正确通知组内所有玩家开始游戏。 更新客户端处理游戏开始通知并切换到游戏界面。 管理游戏期间的游戏状态和玩家交互。 任何有关如何实现这一目标的指导或示例将不胜感激。

java multithreading swing networking client-server
1个回答
0
投票

发布的代码都是服务器和客户端。 在执行其他操作之前,请为您的系统定义一个应用程序模型。

应用程序模型与服务器和客户端分离,由一个或多个普通 Java getter/setter 类组成。

你需要:

  1. Player
  2. 登录玩家的队列。
  3. 一个包含 N 个玩家的组
  4. int
    用于确定哪个玩家当前回合。
  5. 用于确定该组中哪位玩家获胜的指标。

基于此,你需要一种成团和解散的方式。

如果您想保留每个玩家的分数,您将需要它。

© www.soinside.com 2019 - 2024. All rights reserved.