1 绘制好了 敌机

2 绘制好了子弹消灭敌机

3 绘制好了敌机被消灭的时候的爆炸火焰

package com.example.android.planegame;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.DisplayMetrics;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;

/**
 * Created by Administrator on 2016/7/27.
 */
public class DrawEnemyPlane extends BaseDraw {
    /**
     * 所有敌机的合集
     */
    private List<ObjectEmemyPlane> listPlanes = new ArrayList<ObjectEmemyPlane>();
    /**
     * 所有敌机的样式
     */
    private List<Bitmap> listBitmap = new ArrayList<Bitmap>();
    /**
     * 敌机的速度
     */
    private int ememySpeed[] = {5, 8, 11};
    /**
     * 敌机能被击中的次数
     */
    private int ememyHitNum[] = {6
            , 4, 2};

    private int screenWidth = 0;
    private int screenHeigth = 0;
    /**
     * 随机数
     */
    private Random random = new Random();
    /**
     * 生产敌机的速度
     */
    private int freshCount = 100;
    private int freshNum = freshCount;
    /**
     * 最多一次性生产几架飞机
     */
    private int maxMake = 4;

    private Canvas canvas;

    public DrawEnemyPlane(Context context) {

        if (screenWidth == 0 && screenHeigth == 0) {
            Bitmap ememyPlane_1 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.boss_plane);
            Bitmap ememyPlane_2 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.f16_23);
            Bitmap ememyPlane_3 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.hy2000_r);

            listBitmap.add(ememyPlane_1);
            listBitmap.add(ememyPlane_2);
            listBitmap.add(ememyPlane_3);

            Resources resources = context.getResources();
            DisplayMetrics dm = resources.getDisplayMetrics();
            screenWidth = dm.widthPixels;
            screenHeigth = dm.heightPixels;

        }

    }

    @Override
    void onDraw(Canvas canvas) {
        this.canvas = canvas;
        if (listPlanes.size() > 0) {
            Iterator<ObjectEmemyPlane> iteror = listPlanes.iterator();

            while (iteror.hasNext()) {
                ObjectEmemyPlane plane = iteror.next();

                if (plane.y > screenHeigth || plane.ifDiead) {
                    iteror.remove();
                } else {
                    plane.y += plane.offsetY;

                    plane.rect = new Rect(plane.x, plane.y,
                            plane.x + plane.bitmap.getWidth(),
                            plane.y + plane.bitmap.getHeight());
                    canvas.drawBitmap(plane.bitmap, null, plane.rect, null);
                }
            }
        }

        if (freshNum == freshCount) {
            addEmemyPlane();
            freshNum--;
        } else {
            freshNum--;
            if (freshNum < 0) {
                freshNum = freshCount;
            }
        }
    }

    /**
     * 生产敌机
     */
    private void addEmemyPlane() {
        //随机出此次要生产敌机的数量
        int makeNum = random.nextInt(maxMake) + 1;
        //循环生产飞机
        for (int i = 0; i < makeNum; i++) {
            //随机出此敌机的样式
            int choiceNum = random.nextInt(listBitmap.size());
            Bitmap bimapPlane = listBitmap.get(choiceNum);

            //创建一架飞机并随机出它的创建位置
            ObjectEmemyPlane plane = new ObjectEmemyPlane();
            plane.y = -bimapPlane.getHeight();
            plane.x = random.nextInt(screenWidth - bimapPlane.getWidth());
            plane.offsetY = ememySpeed[choiceNum];
            plane.hitNum = ememyHitNum[choiceNum];
            plane.bitmap = bimapPlane;


            listPlanes.add(plane);

        }
    }

    public List<ObjectEmemyPlane> getEmemyPlaneList() {
        return listPlanes;
    }

    @Override
    void onDestory() {

        for (Bitmap bitmap : listBitmap) {
            bitmap.recycle();
        }
    }

}
package com.example.android.planegame;

import android.graphics.Bitmap;
import android.graphics.Rect;

/**
 * Created by Administrator on 2016/7/27.
 */
public class ObjectEmemyPlane {
    /**
     * 子弹的坐标
     */
    public int x, y;
    /**
     * 飞机飞行速度
     */
    public int offsetY = 0;
    /**
     * 飞机的样式
     */
    public Bitmap bitmap;
    /**
     * 飞机的矩形
     */
    public Rect rect;
    /**
     * 飞机是否死亡
     */
    public boolean ifDiead = false;
    /**
     * 飞机能被击中几次
     */
    public int hitNum = 0;
}
package com.example.android.planegame;

/**
 * Created by Administrator on 2016/7/27.
 */
public class ObjectFire {

    public int centerX, centerY;
    //已绘制到第几张图片
    public int picFlag = 0;

    /**
     * 返回火花图片的ID
     */
    public int getPicID() {
        if (picFlag == 0) {
            return R.mipmap.fire0;
        } else if (picFlag == 1) {
            return R.mipmap.fire1;
        } else if (picFlag == 2) {
            return R.mipmap.fire2;
        } else if (picFlag == 3) {
            return R.mipmap.fire3;
        } else if (picFlag == 4) {
            return R.mipmap.fire4;
        } else if (picFlag == 5) {
            return R.mipmap.fire5;
        } else if (picFlag == 6) {
            return R.mipmap.fire6;
        } else if (picFlag == 7) {
            return R.mipmap.fire7;
        }
        return -1;
    }
}
package com.example.android.planegame;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.DisplayMetrics;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Created by Administrator on 2016/7/26.
 */
public class DrawMasterBullet extends BaseDraw {

    /**
     * 爆炸火花合集
     */
    private List<ObjectFire> listFire = new ArrayList<ObjectFire>();

    /**
     * 爆炸火花图片合集
     */
    private List<Bitmap> fireBitmaps = new ArrayList<Bitmap>();
    /**
     * 子弹合集
     */
    private List<ObjectMasterBullet> listBullets = new ArrayList<ObjectMasterBullet>();
    /**
     * 生产子弹的速度
     */
    private int freshCount = 8;
    private int freshNum = freshCount;
    /**
     * 控制子弹移动的速度4
     */
    private int bulletSpeed = 30;

    private Bitmap bitMapBullet = null;
    private int screenWidth = 0;
    private int screenHeigth = 0;
    private Canvas canvas;
    private Rect planeRect;
    private DrawEnemyPlane drawEnemyPlane;
    private int score = 0;

    public DrawMasterBullet(Context context) {

        if (screenWidth == 0 && screenHeigth == 0) {
            bitMapBullet = BitmapFactory.decodeResource(context.getResources(), R.mipmap.bullet_1);

            Bitmap bitmap0 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire0);
            Bitmap bitmap1 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire1);
            Bitmap bitmap2 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire2);
            Bitmap bitmap3 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire3);
            Bitmap bitmap4 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire4);
            Bitmap bitmap5 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire5);
            Bitmap bitmap6 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire6);
            Bitmap bitmap7 = BitmapFactory.decodeResource(context.getResources(), R.mipmap.fire7);

            fireBitmaps.add(bitmap0);
            fireBitmaps.add(bitmap1);
            fireBitmaps.add(bitmap2);
            fireBitmaps.add(bitmap3);
            fireBitmaps.add(bitmap4);
            fireBitmaps.add(bitmap5);
            fireBitmaps.add(bitmap6);
            fireBitmaps.add(bitmap7);

            Resources resources = context.getResources();
            DisplayMetrics dm = resources.getDisplayMetrics();
            screenWidth = dm.widthPixels;
            screenHeigth = dm.heightPixels;

        }
    }

    @Override
    void onDraw(Canvas canvas) {

    }

    @Override
    void onDestory() {
        bitMapBullet.recycle();
    }

    public void onDraw(Canvas canvas, Rect planeRect, DrawEnemyPlane drawEnemyPlane) {

        this.canvas = canvas;
        this.planeRect = planeRect;
        this.drawEnemyPlane = drawEnemyPlane;

        //绘制子弹
        drawBullet();

        //绘制爆炸火花
        drawFires();

        //判断敌机是否与子弹相遇
        ifBulletWithPlane();
    }

    /**
     * 绘制子弹
     */
    private void drawBullet() {
        if (listBullets.size() > 0) {
            Iterator<ObjectMasterBullet> iter = listBullets.iterator();

            while (iter.hasNext()) {
                ObjectMasterBullet bullet = iter.next();
                if (bullet.y < 0 || bullet.ifDiead) {
                    //移除屏幕之外的子弹
                    iter.remove();

                } else {
                    Rect rect = new Rect(bullet.x, bullet.y,
                            bullet.x + bitMapBullet.getWidth(),
                            bullet.y + bitMapBullet.getHeight());

                    canvas.drawBitmap(bitMapBullet, null, rect, null);

                    bullet.y = bullet.y - bulletSpeed;
                }
            }

        }

        if (freshNum == freshCount) {
            addOneBullet();
            freshNum--;
        } else {
            freshNum--;
            if (freshNum < 0) {
                freshNum = freshCount;
            }
        }
    }


    private int fireFreshCoutn = 0;
    private int fireFreshNum = fireFreshCoutn;

    /**
     * 绘制爆炸火花
     */
    private void drawFires() {
        if (listFire.size() > 0) {
            if (fireFreshNum == fireFreshCoutn) {
                fireFreshNum--;
                Iterator<ObjectFire> iterator = listFire.iterator();
                while (iterator.hasNext()) {
                    ObjectFire fire = iterator.next();
                    if (fire.picFlag < fireBitmaps.size()) {

                        Bitmap bitmapFire = fireBitmaps.get(fire.picFlag);
                        Rect rect = new Rect(fire.centerX - bitmapFire.getWidth() / 2
                                , fire.centerY - bitmapFire.getHeight() / 2
                                , fire.centerX + bitmapFire.getWidth() / 2
                                , fire.centerY + bitmapFire.getHeight() / 2);

                        canvas.drawBitmap(bitmapFire, null, rect, null);

                        fire.picFlag += 1;

                    } else {
                        iterator.remove();
                    }
                }
            } else {
                fireFreshNum--;
                if (fireFreshNum < 0) {
                    fireFreshNum = fireFreshCoutn;
                }
            }
        }
    }

    /**
     * 判断子弹是否击中了敌机
     */
    private void ifBulletWithPlane() {

        List<ObjectEmemyPlane> listEmemy = drawEnemyPlane.getEmemyPlaneList();

        for (int i = 0; i < listBullets.size(); i++) {
            ObjectMasterBullet bullet = listBullets.get(i);
            for (int j = 0; j < listEmemy.size(); j++) {
                ObjectEmemyPlane ememy = listEmemy.get(j);

                if (null != ememy.rect && ememy.rect.contains(bullet.x, bullet.y)) {
                    bullet.ifDiead = true;
                    if (ememy.hitNum < 1) {
                        ememy.ifDiead = true;
                        //新增一个爆炸火花
                        addFireBragound(ememy.rect.centerX(), ememy.rect.centerY());

                        score += 100;
                    } else {
                        ememy.hitNum--;
                    }
                }
            }
        }
    }

    /**
     * 新增一个爆炸火花
     */
    private void addFireBragound(int x, int y) {

        ObjectFire fire = new ObjectFire();
        fire.centerX = x;
        fire.centerY = y;

        listFire.add(fire);
    }

    /**
     * 新增一个子弹
     */
    private void addOneBullet() {

        ObjectMasterBullet bullet = new ObjectMasterBullet();
        bullet.x = planeRect.centerX() - planeRect.width() / 12;
        bullet.y = planeRect.top - bitMapBullet.getHeight();

        Rect rect = new Rect(bullet.x, bullet.y,
                bullet.x + bitMapBullet.getWidth(), bullet.y + bitMapBullet.getHeight());

        canvas.drawBitmap(bitMapBullet, null, rect, null);

        listBullets.add(bullet);

    }

    /**
     * 返回分数
     */
    public int getScore() {

        if(score>100){

        }

        return score;
    }
}

 

posted on 2016-07-27 20:49  青年程序猿  阅读(267)  评论(0)    收藏  举报