头歌植物大战僵尸第二关
根据题目要求,我需要补充几个关键类的代码,包括工厂方法模式和中介者模式的实现。以下是需要补充的代码部分:
1. BotanicRepeater.java
补充Attack方法,通过中介者获取子弹:
@Override
public void Attack(ICharacter target) {
//通过中介,获取"SingleBullet"子弹.子弹targetPosition=new Point(1300, firepoint.y)
Bullet bullet = Mediator.get_instance().GetBullet("SingleBullet", firepoint, new Point(1300, firepoint.y));
}
2. BotanicRepeaterFactory.java
实现工厂方法创建植物角色:
@Override
public ICharacter CreateCharacter(Point spawnPosition, int posRow) {
//1.生产基本属性,属性名"BotanicRepeater"
CharacterBaseAttr baseAttr = AttrFactory.GetCharacterBaseAttr("BotanicRepeater");
//2.创建属性组件
CharacterAttr attr = new CharacterAttr(baseAttr, 0); // 植物移动速度为0
//3.创建BotanicRepeater对象
BotanicRepeater botanicRepeater = new BotanicRepeater(attr, spawnPosition, posRow);
//4.通过中介者Mediator,将植物加入到CharacterSystem的mBotanys
Mediator.get_instance().AddBotany(botanicRepeater);
return botanicRepeater;
}
3. BulletFactory.java
补充子弹创建和激活逻辑:
if(name == "SingleBullet") {
Bullet bullet = new Bullet.Builder(name)
.setNormalimg("/data/workspace/myshixun/images/Plants/PB00.gif")
.setMoveSpeed(25)
.setmDestroyTimer(1.0f)
.setDamage(10)
.setBoomimg("/data/workspace/myshixun/images/Plants/PeaBulletHit.gif").build();
//1.激活子弹
bullet.SetActive(position, targetPosition);
//2.子弹通过中介者,加入到CharacterSystem的launchhouse
Mediator.get_instance().AddBullet(bullet);
return bullet;
}
4. ZombieNormalFactory.java
实现僵尸工厂方法:
@Override
public ICharacter CreateCharacter(Point spawnPosition, int posRow) {
//1.生产基本属性,属性名"ZombieNormal"
CharacterBaseAttr baseAttr = AttrFactory.GetCharacterBaseAttr("ZombieNormal");
//2.创建属性组件
CharacterAttr attr = new CharacterAttr(baseAttr, 2); // 僵尸移动速度设为2
//3.创建ZombieNormal对象
ZombieNormal zombieNormal = new ZombieNormal(attr, spawnPosition, posRow);
//4.通过中介者Mediator,将僵尸加入到CharacterSystem的mEnemys
Mediator.get_instance().AddEnemy(zombieNormal);
return zombieNormal;
}
5. Mediator.java
补充获取子弹的逻辑:
public Bullet GetBullet(String name, Point position, Point targetPosition) {
//1.从闲置库里拿
Bullet blt = mCharacterSystem.GetBullet(name);
//2.如果拿到子弹则激活子弹,并加入到mCharacterSystem
if(blt != null) {
blt.SetActive(position, targetPosition);
AddBullet(blt);
}
//3.如果没有拿到,则用工厂进行子弹生产
else {
blt = BulletFactory.CreateBullet(name, position, targetPosition);
}
return blt;
}
浙公网安备 33010602011771号