从 arraylist 调用方法
Calling a method from arraylist
对于回合制游戏,我想为一个星球制作一个建造队列。用户将要构建的项目放入队列中,然后,当轮到生成时,队列中的所有内容都将被构建。
现在我有一个 Planet class,它有一个 ArrayList。为玩家拥有的每个行星创建一个 Planet 类型的对象。数组列表包含用户命令这个星球建造的所有东西。它还包含 3 个存储当前存在于地球上的资源的变量和 3 个存储当前存在于地球上的建筑物总数的变量。
每个建筑类型也是一个class(因为建筑类型成本不同),我打算把相应类型的物体放入行星队列。我想每个建筑 class 应该有自己的建筑方法 .build();
我想循环遍历星球队列中的每个项目并启动类似 .buld() 的方法。
建造一个物体意味着从行星资源变量中减去一些资源,并将建造的建筑物数量添加到行星上的建筑物总数。
麻烦的是我不明白主要思想,如何实现这一点。
星球class:
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();
}
}
}
建筑物之一 classes:
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
}
}
如果我做的完全错了,如果你说我应该在哪个 "direction" 寻找信息,我将不胜感激。
您需要将 Planet
对象作为参数传递给 build
,以便它可以访问资源,或者,在 [=12] 中执行 "building" =] 代码本身,并且只需要 getCost
在建筑物上,你会打电话给你找出要减去多少资源。
就个人而言,我知道有点喜欢后一种方法,但如果品味比其他任何东西都更重要。
听起来 Planet
应该有一个封装资源的 Resources
对象,并且可以传递给 Installation.build()
。然后 Installation.build()
可以 return 一个描述构建内容的对象。
编辑:这是一个例子:
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);
}
}
对于回合制游戏,我想为一个星球制作一个建造队列。用户将要构建的项目放入队列中,然后,当轮到生成时,队列中的所有内容都将被构建。
现在我有一个 Planet class,它有一个 ArrayList。为玩家拥有的每个行星创建一个 Planet 类型的对象。数组列表包含用户命令这个星球建造的所有东西。它还包含 3 个存储当前存在于地球上的资源的变量和 3 个存储当前存在于地球上的建筑物总数的变量。
每个建筑类型也是一个class(因为建筑类型成本不同),我打算把相应类型的物体放入行星队列。我想每个建筑 class 应该有自己的建筑方法 .build();
我想循环遍历星球队列中的每个项目并启动类似 .buld() 的方法。 建造一个物体意味着从行星资源变量中减去一些资源,并将建造的建筑物数量添加到行星上的建筑物总数。 麻烦的是我不明白主要思想,如何实现这一点。
星球class:
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();
}
}
}
建筑物之一 classes:
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
}
}
如果我做的完全错了,如果你说我应该在哪个 "direction" 寻找信息,我将不胜感激。
您需要将 Planet
对象作为参数传递给 build
,以便它可以访问资源,或者,在 [=12] 中执行 "building" =] 代码本身,并且只需要 getCost
在建筑物上,你会打电话给你找出要减去多少资源。
就个人而言,我知道有点喜欢后一种方法,但如果品味比其他任何东西都更重要。
听起来 Planet
应该有一个封装资源的 Resources
对象,并且可以传递给 Installation.build()
。然后 Installation.build()
可以 return 一个描述构建内容的对象。
编辑:这是一个例子:
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);
}
}