头歌植物大战僵尸第二关

根据题目要求,我需要补充几个关键类的代码,包括工厂方法模式和中介者模式的实现。以下是需要补充的代码部分:

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;
}
posted @ 2025-06-04 21:16  是否未晚  阅读(59)  评论(0)    收藏  举报