飞机大战

以下是程序代码的下载地址:http://download.csdn.net/detail/u010878441/6490515

好了,下面就开始进行游戏的总体设计

游戏的界面主要有三个界面组成,分别为:游戏开始前的准备界面ReadyView,游戏进行时的界面MainView和游戏结束时的界面EndView

界面视图分别如下:

飞机大战_第1张图片飞机大战_第2张图片   飞机大战_第3张图片


因为JAVA编程是面向对象的思想,所以我们要对游戏中的对象进行抽象。该游戏中的所有能够移动的物体都可看做是一个对象,它们有共同的属性和方法,如:横坐标、纵坐标、宽度、高度、逻辑方法、绘图方法等。因此我们把它们的所有共同的属性和方法封装成一个抽象的GameObject类,该类将会是游戏中所有对象的父类。

GameObject类:

[java] view plain copy
  1. /*游戏对象类*/  
  2. abstract public class GameObject {  
  3.     protected int currentFrame;     // 当前动画帧  
  4.     protected int speed;        // 对象的速度  
  5.     protected float object_x;   // 对象的横坐标  
  6.     protected float object_y;   // 对象的纵坐标  
  7.     protected float object_width;   // 对象的宽度  
  8.     protected float object_height;  // 对象的高度  
  9.     protected float screen_width;   // 屏幕的宽度  
  10.     protected float screen_height;  // 屏幕的高度  
  11.     protected boolean isAlive;  // 判断是否存活  
  12.     protected Paint paint;      // 画笔对象  
  13.     protected Resources resources;  // 资源类  
  14.     // 构造函数  
  15.     public GameObject(Resources resources) {  
  16.         this.resources = resources;  
  17.         this.paint = new Paint();  
  18.     }  
  19.     // 设置屏幕宽度和高度  
  20.     public void setScreenWH(float screen_width, float screen_height) {  
  21.         this.screen_width = screen_width;  
  22.         this.screen_height = screen_height;  
  23.     }  
  24.     // 初始化数据//参数分别为:速度增加的倍数,x中心坐标,y中心坐标  
  25.     public void initial(int arg0,float arg1,float arg2){}  
  26.     // 初始化图片资源的  
  27.     protected abstract void initBitmap();  
  28.     // 对象的绘图方法  
  29.     public abstract void drawSelf(Canvas canvas);  
  30.     // 释放资源的方法  
  31.     public abstract void release();  
  32.     // 检测碰撞的方法  
  33.     public boolean isCollide(GameObject obj) {    
  34.         return true;  
  35.     }  
  36.     // 对象的逻辑方法  
  37.     public void logic(){}  
  38.     //getter和setter方法  
  39.     public int getSpeed(){  
  40.         return speed;  
  41.     }  
  42.     public void setSpeed(int speed){  
  43.         this.speed = speed;  
  44.     }  
  45.     public float getObject_x() {  
  46.         return object_x;  
  47.     }  
  48.     public void setObject_x(float object_x) {  
  49.         this.object_x = object_x;  
  50.     }  
  51.     public float getObject_y() {  
  52.         return object_y;  
  53.     }  
  54.     public void setObject_y(float object_y) {  
  55.         this.object_y = object_y;  
  56.     }  
  57.     public float getObject_width() {  
  58.         return object_width;  
  59.     }  
  60.     public void setObject_width(float object_width) {  
  61.         this.object_width = object_width;  
  62.     }  
  63.     public float getObject_height() {  
  64.         return object_height;  
  65.     }  
  66.     public void setObject_height(float object_height) {  
  67.         this.object_height = object_height;  
  68.     }  
  69.     public boolean isAlive() {  
  70.         return isAlive;  
  71.     }  
  72.     public void setAlive(boolean isAlive) {  
  73.         this.isAlive = isAlive;  
  74.     }  
  75. }  


接着我们要看下,游戏中对象有玩控制的飞机、小型的敌机、中型的敌机、大型的敌机、BOSS敌机、单发子弹、双发子弹、BOSS的子弹、导弹物品和子弹物品。所以我们又可以将它们分成:玩家的飞机类(因为玩家飞机的实现和敌机的实现有些不同,所以分开实现)、敌机类EnemyPlane(包括小型的、中型的、大型的和BOSS)、子弹类Bullet和物品类GameGoods,这些游戏对象类都是继承GameObject类。

敌机类EnemyPlane:

[java] view plain copy
  1. /*敌机类*/  
  2. public class EnemyPlane extends GameObject{  
  3.     protected int score;                     // 对象的分值  
  4.     protected int blood;                     // 对象的当前血量  
  5.     protected int bloodVolume;          <span style="white-space:pre">  </span> // 对象总的血量  
  6.     protected boolean isExplosion;               // 判断是否爆炸  
  7.     protected boolean isVisible;                 // 对象是否为可见状态  
  8.     public EnemyPlane(Resources resources) {  
  9.         super(resources);  
  10.         // TODO Auto-generated constructor stub  
  11.         initBitmap();           // 初始化图片资源  
  12.     }  
  13.     //初始化数据  
  14.     @Override  
  15.     public void initial(int arg0,float arg1,float arg2){  
  16.           
  17.     }  
  18.     // 初始化图片资源  
  19.     @Override  
  20.     public void initBitmap() {  
  21.         // TODO Auto-generated method stub  
  22.       
  23.     }  
  24.     // 对象的绘图函数  
  25.     @Override  
  26.     public void drawSelf(Canvas canvas) {  
  27.         // TODO Auto-generated method stub  
  28.           
  29.     }  
  30.     // 释放资源  
  31.     @Override  
  32.     public void release() {  
  33.         // TODO Auto-generated method stub  
  34.           
  35.     }  
  36.     // 对象的逻辑函数  
  37.     @Override  
  38.     public void logic() {  
  39.         // TODO Auto-generated method stub  
  40.           
  41.     }  
  42.     // 被攻击的逻辑函数  
  43.     public void attacked(int harm) {  
  44.         // TODO Auto-generated method stub  
  45.           
  46.     }  
  47.     // 检测碰撞  
  48.     @Override  
  49.     public boolean isCollide(GameObject obj) {  
  50.           
  51.         return true;  
  52.     }  
  53.     // 判断能否被检测碰撞  
  54.     public boolean isCanCollide() {  
  55.         // TODO Auto-generated method stub  
  56.         return false;  
  57.     }  
  58.     //getter和setter方法  
  59.     public int getScore() {  
  60.         // TODO Auto-generated method stub  
  61.         return score;  
  62.     }  
  63.     public void setScore(int score) {  
  64.         // TODO Auto-generated method stub  
  65.         this.score = score;  
  66.     }  
  67.     public int getBlood() {  
  68.         // TODO Auto-generated method stub  
  69.         return blood;  
  70.     }  
  71.     public void setBlood(int blood) {  
  72.         // TODO Auto-generated method stub  
  73.         this.blood = blood;  
  74.     }  
  75.     public int getBloodVolume() {  
  76.         // TODO Auto-generated method stub  
  77.         return bloodVolume;  
  78.     }  
  79.     public void setBloodVolume(int bloodVolume) {  
  80.         // TODO Auto-generated method stub  
  81.         this.bloodVolume = bloodVolume;  
  82.     }  
  83.     public boolean isExplosion() {  
  84.         // TODO Auto-generated method stub  
  85.         return isExplosion;  
  86.     }  
  87. }  

敌机类增加了分值、血量、两个判断标记属性及其getter和setter方法。


子弹类Bullet:

[java] view plain copy
  1. /*子弹基类*/  
  2. public class Bullet extends GameObject{  
  3.     protected int harm;  
  4.     public Bullet(Resources resources) {  
  5.         super(resources);  
  6.         // TODO Auto-generated constructor stub  
  7.         initBitmap();  
  8.     }  
  9.     @Override  
  10.     protected void initBitmap() {  
  11.         // TODO Auto-generated method stub  
  12.           
  13.     }  
  14.     @Override  
  15.     public void drawSelf(Canvas canvas) {  
  16.         // TODO Auto-generated method stub  
  17.           
  18.     }  
  19.     @Override  
  20.     public void release() {  
  21.         // TODO Auto-generated method stub  
  22.           
  23.     }  
  24.     // 检测碰撞的方法  
  25.     @Override  
  26.     public boolean isCollide(GameObject obj) {    
  27.         return true;  
  28.     }  
  29.     //getter和setter方法  
  30.     public int getHarm() {  
  31.         // TODO Auto-generated method stub  
  32.         return harm;  
  33.     }  
  34.     public void setHarm(int harm) {  
  35.         // TODO Auto-generated method stub  
  36.         this.harm = harm;  
  37.     }  
  38. }  

子弹类增加了伤害值及其getter和setter方法。


物品类GameGoods:

[java] view plain copy
  1. /*物品类*/  
  2. public class GameGoods extends GameObject{  
  3.     protected Bitmap bmp;                                 
  4.     private int direction;          //物品的方向  
  5.     public GameGoods(Resources resources) {  
  6.         super(resources);  
  7.         // TODO Auto-generated constructor stub  
  8.         initBitmap();  
  9.     }  
  10.     // 初始化数据  
  11.     @Override  
  12.     public void initial(int arg0,float arg1,float arg2){  
  13.           
  14.     }  
  15.     // 初始化图片资源的  
  16.     @Override  
  17.     protected void initBitmap() {  
  18.         // TODO Auto-generated method stub  
  19.   
  20.     }  
  21.     // 对象的绘图方法  
  22.     @Override  
  23.     public void drawSelf(Canvas canvas) {  
  24.         // TODO Auto-generated method stub  
  25.           
  26.     }  
  27.     // 释放资源的方法  
  28.     @Override  
  29.     public void release() {  
  30.         // TODO Auto-generated method stub  
  31.           
  32.     }  
  33.     // 对象的逻辑函数  
  34.     @Override  
  35.     public void logic() {  
  36.           
  37.     }  
  38.     // 检测碰撞  
  39.     @Override  
  40.     public boolean isCollide(GameObject obj) { return false;  
  41. <span style="white-space:pre">  </span>}  
  42. }  


玩家的飞机类除了继承GameObject类以外,还要实现一个IMyPlane接口。

IMyPlane接口

[java] view plain copy
  1. public interface IMyPlane {  
  2.     public float getMiddle_x();  
  3.     public void setMiddle_x(float middle_x);  
  4.     public float getMiddle_y();  
  5.     public void setMiddle_y(float middle_y);  
  6.     public boolean isChangeBullet();  
  7.     public void setChangeBullet(boolean isChangeBullet);  
  8.     //发射子弹的方法  
  9.     public void shoot(Canvas canvas,List<EnemyPlane> planes);  
  10.     //初始化子弹的方法  
  11.     public void initButtle();  
  12.     //更换子弹的方法  
  13.     public void changeButtle();  
  14. }  

玩家飞机类MyPlane:

[java] view plain copy
  1. /*玩家飞机的类*/  
  2. public class MyPlane extends GameObject implements IMyPlane{  
  3.     private float middle_x;          // 飞机的中心坐标  
  4.     private float middle_y;  
  5.     private long startTime;          // 开始的时间  
  6.     private long endTime;            // 结束的时间  
  7.     private boolean isChangeBullet;  // 标记更换了子弹  
  8.     private Bitmap myplane;          // 飞机飞行时的图片  
  9.     private Bitmap myplane2;         // 飞机爆炸时的图片  
  10.     private List<Bullet> bullets;  // 子弹的序列  
  11.     private MainView mainView;  
  12.     private GameObjectFactory factory;  
  13.     public MyPlane(Resources resources) {  
  14.         super(resources);  
  15.         // TODO Auto-generated constructor stub  
  16.           
  17.     }  
  18.     public void setMainView(MainView mainView) {  
  19.         this.mainView = mainView;  
  20.     }  
  21.     // 设置屏幕宽度和高度  
  22.     @Override  
  23.     public void setScreenWH(float screen_width, float screen_height) {  
  24.           
  25.     }  
  26.     // 初始化图片资源的  
  27.     @Override  
  28.     public void initBitmap() {  
  29.         // TODO Auto-generated method stub  
  30.           
  31.     }  
  32.     // 对象的绘图方法  
  33.     @Override  
  34.     public void drawSelf(Canvas canvas) {  
  35.         // TODO Auto-generated method stub  
  36.           
  37.     }  
  38.     // 释放资源的方法  
  39.     @Override  
  40.     public void release() {  
  41.         // TODO Auto-generated method stub  
  42.       
  43.     }  
  44.     //发射子弹  
  45.     @Override  
  46.     public void shoot(Canvas canvas,List<EnemyPlane> planes) {  
  47.         // TODO Auto-generated method stub    
  48.           
  49.     }  
  50.     //初始化子弹  
  51.     @Override  
  52.     public void initButtle() {  
  53.         // TODO Auto-generated method stub  
  54.   
  55.     }  
  56.     //更换子弹  
  57.     @Override  
  58.     public void changeButtle() {  
  59.         // TODO Auto-generated method stub  
  60.           
  61.     }  
  62.     //判断子弹是否超时  
  63.     public void isBulletOverTime(){  
  64.           
  65.     }  
  66.     //getter和setter方法  
  67.     public void setStartTime(long startTime) {  
  68.         this.startTime = startTime;  
  69.     }  
  70.     @Override  
  71.     public boolean isChangeBullet() {  
  72.         return isChangeBullet;  
  73.     }  
  74.     @Override  
  75.     public void setChangeBullet(boolean isChangeBullet) {  
  76.         this.isChangeBullet = isChangeBullet;  
  77.     }  
  78.     @Override  
  79.     public float getMiddle_x() {  
  80.         return middle_x;  
  81.     }  
  82.     @Override  
  83.     public void setMiddle_x(float middle_x) {  
  84.         this.middle_x = middle_x;  
  85.         this.object_x = middle_x - object_width/2;  
  86.     }  
  87.     @Override  
  88.     public float getMiddle_y() {  
  89.         return middle_y;  
  90.     }  
  91.     @Override  
  92.     public void setMiddle_y(float middle_y) {  
  93.         this.middle_y = middle_y;  
  94.         this.object_y = middle_y - object_height/2;  
  95.     }     
  96. }  
以上列出的类除GameObject类以外,其它类中的一些方法都省略了其实现,这会在接下来讲的。

android游戏开发——微信打飞机(二):

http://blog.csdn.net/u010878441/article/details/12564871

你可能感兴趣的:(飞机大战)