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; } }
浙公网安备 33010602011771号