2

首先为问题标题道歉,我不知道该怎么命名。

无论如何,我正在开发一款游戏,其中可以有许多玩家,每个玩家都可以拥有许多宠物。我已经开发了游戏的主要结构,例如玩家类、宠物类和一个主类.. 从那里我一直在研究 GUI,在那里我询问有多少玩家,以及每个玩家想要多少宠物.. 在哪里我陷入困境的是如何为每个玩家创建宠物。

我创建了一个非常基本的表单,要求玩家选择一种宠物类型,给它一个名字,然后创建宠物。

public  void createPets( final Player player){

//various buttons,comboBox and labels go here
//layout managers
//add it all to a frame

JButton jbCreatePet = new JButton("Create Pet");

jbCreatePet.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        String name = jtfName.toString();

        if (cbSpecies.getSelectedIndex() == 0){
            Alien alien = new Alien();
            alien.setName(name);
            player.getAllPets.add(alien);


        }
        else if(cbSpecies.getSelectedIndex() == 1){
            create other pet2
        }
        else{
            create other pet3
        }
    }
});

player is a Player object passed into the method using a for loop.. 

for (Player player: allPlayers){
    createPets(player);
}

现在我知道使用 for 循环是不正确的,例如表单将简单地跳到最后一个玩家,其他玩家都不会创建宠物..

所以我有几个问题:

  1. 当我将创建的宠物分配到所有宠物的玩家列表中时,eclipse 告诉我必须最终创建它。我有点理解为什么,但我想知道的是,将玩家参数设为最终是否意味着我无法为其他游戏创建宠物,只有第一个玩家..

  2. 我如何向每个玩家展示我的表格,例如游戏中的 2 个玩家都有 2 只宠物,玩家 1 选择一个宠物并给它一个名字然后创建它,然后他会被告知他需要创建另一个宠物(表格再次显示)所以他创建了另一个宠物,然后它的玩家 2s 轮流选择并创建 2 个宠物......我想我想弄清楚如何在正确的时间将正确的玩家参数传递给 createPet 方法......

如果您希望我澄清其他任何事情,请告诉我...

非常感谢谁能帮我解决这个问题!!!!

4

1 回答 1

4

当我将创建的宠物分配到所有宠物的玩家列表中时,eclipse 告诉我必须最终创建它。我有点理解为什么,但我想知道的是,将玩家参数设为最终是否意味着我无法为其他游戏创建宠物,只有第一个玩家..

Eclipse 不需要这个——Java是因为你在匿名内部类中使用 Player 参数,所以它必须是 final 的。这不会阻止您对其他玩家使用相同的方法。

我如何向每个玩家展示我的表格,例如游戏中的 2 个玩家都有 2 只宠物,玩家 1 选择一个宠物并给它一个名字然后创建它,然后他会被告知他需要创建另一个宠物(表格再次显示)所以他创建了另一个宠物,然后它的玩家 2s 轮流选择并创建 2 个宠物......我想我想弄清楚如何在正确的时间将正确的玩家参数传递给 createPet 方法......

主游戏对象将控制上述所有内容,对吗?我想您可以使用 for 循环,即在循环内显示模态对话框,例如 JOptionPane。

另一种选择是创建允许所有玩家进入他们的宠物的 JPanel 视图。这完全取决于您,我建议您尝试不同的方法。

您需要确保尽早做的一件主要事情是将程序的逻辑与 GUI 强烈分离。例如,您的 Player 和 Pet 类不应该有关于 GUI 的知识,不应该有任何 Swing 代码,以便逻辑添加 Pets 的代码是非 GUI 的(但可以并且将被 GUI 使用)。


编辑
考虑为您的 Game 类提供一个registerPlayer(Player player)editPlayer(Player player)方法,任何玩家都可以调用该方法来注册他们的姓名、宠物以及玩游戏可能需要的任何其他属性。然后在按下 JButton 时调用一次此方法。除非所有玩家都已正确注册,否则不要让游戏继续进行。

于 2013-05-17T02:51:28.177 回答