Arraylist,其中的每个对象都知道arraylist中的其他对象

时间:2017-05-04 18:51:11

标签: java arraylist

我正在写一个小游戏,其中有一条感染其他鱼类的僵尸鱼。我已完成那部分,但我希望鱼能够感染其他人但是这样做,我将需要arrayList中的每条鱼来了解其他鱼能够感染它们。这是我的面板的主要部分,它创建了arrayList。

基本布局: 我有一个处理游戏所有对象的面板。 那个小组然后叫鱼类创造一条鱼 该面板包含Fish的ArrayList。 我作为参数将它传递给僵尸鱼,并在那里我处理阵列进行初始感染

在此之后我想要发生的是,被它们感染的所有鱼也都能够感染其他鱼。我需要一种方法来允许ArrayList中的fish在父类中相互了解,以便能够为它们编写感染的代码。

3 个答案:

答案 0 :(得分:0)

感染其他鱼类
在这种情况下,也要制作ZFish的ArrayList,每次感染鱼时,将其从Fish的ArrayList中删除,并在感染鱼的位置上制作新的ZFish实例。示例:

private ArrayList<Fish> _fish; 
private ArrayList<ZFish> _zfish; 

fishInfectedMethod(int indexOfCaughtFish){
    int x = _fish.get(indexOfCaughtFish).getX();
    int y = _fish.get(indexOfCaughtFish).getY();
    _fish.remove(indexOfCaughtFish);
    _zfish.add(new ZFish(new Color(0, 179, 60),_tank, _fish));
    _zfish.setLocation(x, y);
}

假设你有钓鱼位置的吸气剂。

答案 1 :(得分:0)

您必须将鱼类授予您当前的课程以实现此目的。我会这样做:

public int _numFish = 100;  //CHANGE IT TO PUBLIC its important
public ArrayList<Fish> _fish; 

_fish = new ArrayList<Fish>();
for(int i=0;i<_numFish;i++)
    _fish.add(new Fish(setRandColor(), _tank, this));

for(int i=0;i<_numFish;i++)
    _fish.add(new MotleyFish(setRandColor(),setRandColor(),_tank,this));

for(Fish f: _fish)
    f.setLocation((int)(Math.random() *(TANK_WIDTH - TANK_X + 1)+TANK_X), 
              (int)(Math.random() *(TANK_HEIGHT - TANK_Y + 1)+ TANK_Y));

_shark = new ZFish(new Color(0, 179, 60),_tank, _fish,this);
_shark.setLocation((int)(Math.random() *(TANK_WIDTH - TANK_X + 1)+TANK_X), 
              (int)(Math.random() *(TANK_HEIGHT - TANK_Y + 1)+ TANK_Y));

在鱼的每次初始化结束时识别 this

然后在你的Fish课程中:

public Fish(Color color,Tank _tank, YourMainClassName class ){
   //now you can access _fish with class._fish
   //and _numFish with class._numFish
}

答案 2 :(得分:0)

一个选项是重新组织您的鱼类,以便它们都实现一个界面,比如Fish,然后调用您的课程GenericFishMotleyFishZFish

然后,不是为每个Fish实例提供位置常量并将它们置于其中,而是拥有一个Grid类,其中包含Fish个引用的2D数组。 2D数组的行为类似于您的坐标,Grid类包含该数组以及其他实用程序方法。你可以在move实现中放置一个Fish方法,它可以传递对网格的引用,也可以将它放在Grid类中,这样可以移动鱼类。

然后你可以在Grid类上有一个接收网格位置的方法,并通过检查容纳Fish实例的附近坐标来返回附近鱼类的列表。