我正在写一个小游戏,那里有一种僵尸鱼会感染其他鱼。我已经完成了那部分,但我希望鱼能够感染其他人,但是这样做,我需要阵列列表中的每条鱼才能知道其他鱼能够感染它们。这是我面板的主要部分,它创建了阵列列表。
基本布局:我有一个处理游戏中所有对象的面板。然后面板打电话给鱼类以创建鱼类该面板包含鱼类清单。我将其传递给僵尸鱼作为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
,然后致电您的类GenericFish
,MotleyFish
和ZFish
。
那么,而不是在每个Fish
实例中拥有常数并在每个CC_5实例中容纳它们,而是具有包含Fish
参考的2D数组的Grid
类。2D数组的作用类似于您的坐标,以及数组以及其他实用程序方法的Grid
类容器。您可以在Fish
实现中容纳move
方法,该方法通过引用网格,也可以将其放置在Grid
类中,该类别移动鱼。
然后,您可以在Grid
类中使用一种方法,该类别位于网格位置,并通过检查附近的坐标来返回附近的鱼列表。