2017-2018-1 JaWorld 团队作业--冲刺4

2017-2018-1 JaWorld 团队作业--冲刺4 (20162305)

总体架构

  • 我们本次团队项目设定为基于Android系统Java架构下的打飞机小游戏
  • 游戏中所有模型的原型设定是精灵,因此不管是敌机还是战斗机都是精灵类,精灵类是所有类的父类
  • 精灵类(Sprite)下有三个子类,一个是战斗机类,也就是玩家;一个是走直线的精灵类(AutoSprite),也就是对敌机的统称;还有一个是爆炸类,指的是敌机或战斗机被摧毁。
  • 我所负责的是精灵类(Sprite)下的走直线的精灵类(AutoSprite)下的敌机类(EnemyPlane)

EnemyPlane

  • 这个类是敌机类里面的主类,继承精灵类。首先先定义两个参数,power和value,power是敌机的抗击打能力,value是打一个敌机的分数。然后创建一个EnemyPlane的对象,调用Bitmap中的方法。

private int power = 1;//敌机的抗打击能力
    private int value = 0;//打一个敌机的得分

    public EnemyPlane(Bitmap bitmap){
        super(bitmap);
    }

  • 再写几个方法确定敌机的抗击打能力和击毁一架敌机的分数。这几个方法分别是setPower,getPower,setValue和getValue,这四个方法用来确定其子类中定义的Power和Value两个数值。

    //设定敌机的抵抗能力
    public void setPower(int power){
        this.power = power;
    }
    
    //获得敌机的抵抗能力
    public int getPower(){
        return power;
    }

    //设定击毁一个敌机的分数
    public void setValue(int value){
        this.value = value;
    }
    
    //获得敌机的分数
    public int getValue(){
        return value;
    }

  • 在父类ISprite中有beforeDraw方法,在敌机类中定义一个相应的afterDraw方法,这需要三要素布(Canvas),Paint(漆)和游戏视图(gameView)。接着判断敌机是否被摧毁,对每一个子弹进行循环判断,判断敌机是否与子弹相交,如果和子弹相交,说明子弹打在了飞机上,子弹消失,敌机的power减1,如果power小于等于0,则说明敌机已经被摧毁,执行爆炸效果。

protected void afterDraw(Canvas canvas, Paint paint, GameView gameView) {
        super.afterDraw(canvas, paint, gameView);

        //绘制完成后要检查自身是否被子弹打中
        if(!isDestroyed()){
            //敌机在绘制完成后要判断是否被子弹打中

            List<Bullet> bullets = gameView.getAliveBullets();
            for(Bullet bullet : bullets){
                //判断敌机是否与子弹相交
                Point p = getCollidePointWithOther(bullet);
                if(p != null){
                    //如果有交点,说明子弹打到了飞机上
                    bullet.destroy();
                    power--;
                    if(power <= 0){
                        //敌机已经没有能量了,执行爆炸效果
                        explode(gameView);
                        return;
                    }
                }
            }
        }
    }

  • explode方法,用来实现敌机的爆炸效果。首先创造爆炸效果,确定敌机中心位置,再新建一个爆炸类对象,将爆炸类对象定位,将这个对象添加到Sprite中。创建爆炸效果完成后,向GameView中添加得分并销毁敌机。

 //创建爆炸效果后会销毁敌机
    public void explode(GameView gameView){
        //创建爆炸效果
        float centerX = getX() + getWidth() / 2;
        float centerY = getY() + getHeight() / 2;
        Bitmap bitmap = gameView.getExplosionBitmap();
        Explosion explosion = new Explosion(bitmap);
        explosion.centerTo(centerX, centerY);
        gameView.addSprite(explosion);

        //创建爆炸效果完成后,向GameView中添加得分并销毁敌机
        gameView.addScore(value);
        destroy();
    }

SmallEnemyPlane

  • 这个类继承EnemyPlane中的方法,创建一个小的敌机,利用EnemyPlane中的方法设定小敌机抗抵抗能力为1,即一颗子弹就可以销毁小敌机,再设定击毁一个小敌机的分数。销毁一个小敌机可以得1000分。

  • 相关代码


public class SmallEnemyPlane extends EnemyPlane {

    public SmallEnemyPlane(Bitmap bitmap){
        super(bitmap);
        setPower(1);//小敌机抗抵抗能力为1,即一颗子弹就可以销毁小敌机
        setValue(1000);//销毁一个小敌机可以得1000分
    }

}

明日各个成员任务安排

-林臻同学以及马平川同学完成最后的代码整合,其余同学负责测试代码寻找bug。

posted on 2017-12-08 00:26  JaWorld  阅读(162)  评论(0编辑  收藏  举报

导航