为正确的对象创建对象

时间:2013-05-17 02:44:17

标签: java swing

首先对问题标题表示歉意我不知道该怎么命名。

无论如何我正在开发一款游戏,其中可能会有许多玩家可以拥有许多宠物。我已经开发了游戏的主要结构,例如玩家类,宠物类和主类。从那里我一直在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方法......

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

    非常感谢能帮助我的人!!!!

1 个答案:

答案 0 :(得分:4)

  

当我将创建的宠物分配给所有宠物的玩家列表时,eclipse告诉我必须创建它最终。我有点理解为什么,但我想知道的是通过制作玩家参数final这意味着我不能为其他游戏创建宠物,只有第一个玩家..

Eclipse并不要求这样做 - Java 是因为你在匿名内部类中使用了Player参数,因此它必须是最终的。这不会阻止您对其他玩家使用相同的方法。

  

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

主要Game对象将控制以上所有,对吗?我想你可以使用for循环,一个说在循环内部显示一个模态对话框,如JOptionPane。

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

您希望尽早确定要做的一件事是强烈地将程序的逻辑与GUI分开。例如,您的Player和Pet类应该不了解GUI,不应该没有任何Swing代码,因此逻辑上添加Pets的代码是非GUI(但可以并且将由GUI使用)。


修改
考虑给你的游戏类提供一个registerPlayer(Player player)editPlayer(Player player)方法,玩家可以通过该方法注册他们的名字,他们的宠物以及玩游戏可能需要的任何其他财产。然后在按下JButton时调用此方法一次。除非所有玩家都已正确注册,否则不要让游戏进展。