如何让我的每个瓷砖对象都以空的arraylist启动,我可以在以后添加内容?

时间:2014-01-22 19:16:18

标签: java arraylist constructor

我正在尝试用java实现棋盘游戏,我目前正在玩游戏板。游戏板有37个六角形瓷砖。其中每一个都可以容纳建筑物,几个生物,以及一个显示谁拥有它的标记。

我有每个图块的37个实例,现在我不确定如何让每个图块在每个图块上保存一个集合(数组,数组列表,链表等)。当玩家通过棋盘移动生物时,我将从该棋盘上的阵列中取出物品并将其添加到不同瓷砖上的不同阵列中。

我的第一直觉是在我的Tile类的构造函数中放入几个数组列表,但我不相信这是可能的。任何想法?

到目前为止,如果我很好奇,我就定义了我的Tile类:

public class Tile {
    //neighbours of each tile
    public Tile n0;
    public Tile n1;
    public Tile n2;
    public Tile n3;
    public Tile n4;
    public Tile n5;

    public int owner = 0;

    public Tile (Terrain ter, int owned){
        owner = owned;
    }
}

编辑:

我想用我的构造函数做这样的事情:

public Tile (Terrain ter, int owned, ArrayList<Creature> creatureList){
        owner = owned; 
}

但我不确定这是否合法,或者这是有道理的。这样做会让我有一个数组列表与我定义的每个Tile实例相关联吗?或者,还有更好的方法?我不知道是否需要在构造函数的参数中定义它。

1 个答案:

答案 0 :(得分:1)

更好的方法是让一个数组像这样保存每个tile对象,因为你确定大小会按照你的板固定。

Tile[] tiles = new Tiles[37];

然后使用空列表初始化每个tile对象

for(int i=0; i<tiles.length;i++)
{
    tiles[i] = new ArrayList();
}

这样,你不必在主类中创建37个对象,同时也可以灵活地为每个单独的图块添加任意数量的项目。

重构的完整类看起来像这样:

public class Tiles {
    //collection of tiles
    Tile[] tiles = new Tiles[37];


   // in the constructor initialize each individual tile with an arraylist
    public Tiles (){

        for(int i=0; i<tiles.length;i++)
        {
            tiles[i] = new ArrayList();
        }
    }
}