阵列列表中的每个对象都知道阵列列表中的其他对象



我正在写一个小游戏,那里有一种僵尸鱼会感染其他鱼。我已经完成了那部分,但我希望鱼能够感染其他人,但是这样做,我需要阵列列表中的每条鱼才能知道其他鱼能够感染它们。这是我面板的主要部分,它创建了阵列列表。

基本布局:我有一个处理游戏中所有对象的面板。然后面板打电话给鱼类以创建鱼类该面板包含鱼类清单。我将其传递给僵尸鱼作为paramater,然后在其中处理初始感染的阵列

我想发生的事情是所有被它们感染的鱼也具有感染他人的能力。我需要一种方法来允许ArrayList中的鱼在父班类中彼此了解,以便能够编写代码以感染。

感染其他鱼
在这种情况下,每次感染鱼类时,也会将其从阵列清单中删除,并在被感染鱼的位置中删除sfish的新实例。示例:

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);
}

假设您有鱼位置。

您必须给鱼类课程当前的课程才能实现这一目标。我会这样做:

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));

在每一个初始化的初始化结束时识别

然后在您的鱼类课程中:

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

一个选项是重新组织您的鱼类类,以便它们实现界面,例如Fish,然后致电您的类GenericFishMotleyFishZFish

那么,而不是在每个Fish实例中拥有常数并在每个CC_5实例中容纳它们,而是具有包含Fish参考的2D数组的Grid类。2D数组的作用类似于您的坐标,以及数组以及其他实用程序方法的Grid类容器。您可以在Fish实现中容纳move方法,该方法通过引用网格,也可以将其放置在Grid类中,该类别移动鱼。

然后,您可以在Grid类中使用一种方法,该类别位于网格位置,并通过检查附近的坐标来返回附近的鱼列表。

最新更新