对于回合制游戏,我想为行星创建一个构建队列。用户将要构建的项目放入队列中,然后,当轮次生成时,队列中的所有内容都将被构建。
现在我有一个包含 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/