閱讀692 返回首頁    go 阿裏雲 go 技術社區[雲棲]


飛機大戰

以下是程序代碼的下載地址:https://download.csdn.net/detail/u010878441/6490515

好了,下麵就開始進行遊戲的總體設計

遊戲的界麵主要有三個界麵組成,分別為:遊戲開始前的準備界麵ReadyView,遊戲進行時的界麵MainView和遊戲結束時的界麵EndView

界麵視圖分別如下:

   


因為JAVA編程是麵向對象的思想,所以我們要對遊戲中的對象進行抽象。該遊戲中的所有能夠移動的物體都可看做是一個對象,它們有共同的屬性和方法,如:橫坐標、縱坐標、寬度、高度、邏輯方法、繪圖方法等。因此我們把它們的所有共同的屬性和方法封裝成一個抽象的GameObject類,該類將會是遊戲中所有對象的父類。

GameObject類:

  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:

  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:

  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:

  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接口

  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:

  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遊戲開發——微信打飛機(二):

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

最後更新:2017-04-03 08:26:14

  上一篇:go Win7怎麼快速開啟Administrator帳號?
  下一篇:go 編程之美之2.14 求數組的子數組之和的最大值