我正在写一个小游戏,其中有一条感染其他鱼类的僵尸鱼。我已完成那部分,但我希望鱼能够感染其他人但是这样做,我将需要arrayList中的每条鱼来了解其他鱼能够感染它们。这是我的面板的主要部分,它创建了arrayList。
基本布局: 我有一个处理游戏所有对象的面板。 那个小组然后叫鱼类创造一条鱼 该面板包含Fish的ArrayList。 我作为参数将它传递给僵尸鱼,并在那里我处理阵列进行初始感染
在此之后我想要发生的是,被它们感染的所有鱼也都能够感染其他鱼。我需要一种方法来允许ArrayList中的fish在父类中相互了解,以便能够为它们编写感染的代码。
答案 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
,然后调用您的课程GenericFish
,MotleyFish
和ZFish
。
然后,不是为每个Fish
实例提供位置常量并将它们置于其中,而是拥有一个Grid
类,其中包含Fish
个引用的2D数组。 2D数组的行为类似于您的坐标,Grid
类包含该数组以及其他实用程序方法。你可以在move
实现中放置一个Fish
方法,它可以传递对网格的引用,也可以将它放在Grid
类中,这样可以移动鱼类。
然后你可以在Grid
类上有一个接收网格位置的方法,并通过检查容纳Fish
实例的附近坐标来返回附近鱼类的列表。