对于回合制游戏,我想为行星制作一个构建队列。用户将项目放入队列中,然后在生成转弯时,正在构建队列中的所有内容。
现在我有一个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;我会很感激。我应该寻找信息。
答案 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来查找要减去多少资源。
就我个人而言,我知道有点喜欢后一种做法,但如果味道比其他任何事情都更重要。