从arraylist调用方法

时间:2015-01-20 14:54:29

标签: java arraylist

对于回合制游戏,我想为行星制作一个构建队列。用户将项目放入队列中,然后在生成转弯时,正在构建队列中的所有内容。

现在我有一个Planet类,它有一个ArrayList。为玩家拥有的每个星球创建一个Planet类型的对象。数组列表包含用户订购此行星的所有内容。它还包含3个变量,用于存储当前存在于地球上的资源,以及3个变量,用于存储当前在地球上的建筑物总数。

每个建筑类型也是一个类(因为建筑类型成本不同),我计划将相应类型的对象放入行星队列中。我想每个建筑类都应该有自己的构建方法 .build();

我想循环遍历行星队列中的每个项目并启动类似 .buld()的方法。 构建对象意味着从行星资源变量中减去一些资源,并添加建筑物数量以构建行星上的建筑物总数。 麻烦的是,我不了解主要想法,如何实现这一点。

星球类:

public class Planet extends WorldObject implements Serializable {

    private int defenses;
    private int mines;
    private int factories;
    //it also has 3 variables from WorldObject class:
    int iron;
    int bor;
    int ger;

    ArrayList<Installation> queue;

    private void build(){
        for ( int i = 0; i < queue.size()-1; i++ )
        {
            queue.get(i).build();
        }
    }
}

其中一个建筑类:

 public class Factory extends Installation {
        int costIron = 10;
        int costGer = 50;

        public build(int amt) {                
            //build itself, remove res from planet, add number built to planet factory list
        }    
    }

如果我这样做完全错了,如果你说在哪个&#34;方向&#34;我会很感激。我应该寻找信息。

2 个答案:

答案 0 :(得分:1)

听起来Planet应该有一个Resources对象封装资源,并且可以传递给Installation.build()。然后Installation.build()可以返回描述构建内容的对象。

编辑:这是一个例子:

public class MineFactory extends Installation {
    private final Resources cost;

    public MineFactory(Resources cost) {
      this.cost = cost.clone();
    }

    @Override
    public Result build(Resources availableResources) {    
      if (!availableResources.remove(cost)) {
        return Result.empty();
      }
      return Result.mines(2);    
    }    
}

答案 1 :(得分:0)

您需要将Planet对象作为参数传递给build,以便它可以访问资源,或者执行&#34;构建&#34;在Panet代码本身,并且只有getCost在您的建筑物上,您可以调用yo来查找要减去多少资源。

就我个人而言,我知道有点喜欢后一种做法,但如果味道比其他任何事情都更重要。