java - 从数组列表调用方法

标签 java arraylist

对于回合制游戏,我想为行星创建一个构建队列。用户将要构建的项目放入队列中,然后,当轮次生成时,队列中的所有内容都将被构建。

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

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

我想循环遍历星球队列中的每个项目并启动类似 .buld() 方法。 build 一个物体意味着从行星资源变量中减去一些资源,并将 build 的建筑物数量添加到行星上的建筑物总数中。 问题是我不明白主要思想,如何实现这一点。

行星类:

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
        }    
    }

如果我这样做完全错误,如果您告诉我应该在哪个“方向”寻找信息,我将不胜感激。

最佳答案

听起来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);    
    }    
}

关于java - 从数组列表调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28048388/

相关文章:

java - 图像变换导致红色图像?

java - Java 8 中特殊 lambda 表达式的最短表示法

android - 如何将 SQLite 中的数据存储在 2D Arraylist 中?

java - 服务中的竞争条件(Android)(线程太多)

java - 从 ArrayList 的 ArrayList 中删除重复项

java - 如何使用 webflux 提供静态资源但支持 CACHE

java - 开闭原则和违反封装性

java - LeJOS NXT 编程

java - 有没有办法扫描 ArrayList 中的索引? .nextint .nextln 等?

JAVA:在数组列表中搜索项目仅返回第一项