前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >飞机大战

飞机大战

作者头像
xiangzhihong
发布2018-01-29 16:36:10
1.3K0
发布2018-01-29 16:36:10
举报
文章被收录于专栏:向治洪向治洪

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

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

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

界面视图分别如下:

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

GameObject类:

代码语言:java
复制
/*游戏对象类*/ 
abstract public class GameObject {  
 protected int currentFrame;     // 当前动画帧 
 protected int speed;        // 对象的速度 
 protected float object_x;   // 对象的横坐标 
 protected float object_y;   // 对象的纵坐标 
 protected float object_width;   // 对象的宽度 
 protected float object_height;  // 对象的高度 
 protected float screen_width;   // 屏幕的宽度 
 protected float screen_height;  // 屏幕的高度 
 protected boolean isAlive;  // 判断是否存活 
 protected Paint paint;      // 画笔对象 
 protected Resources resources;  // 资源类 
 // 构造函数 
 public GameObject(Resources resources) {  
 this.resources = resources;  
 this.paint = new Paint();  
    }  
 // 设置屏幕宽度和高度 
 public void setScreenWH(float screen_width, float screen_height) {  
 this.screen_width = screen_width;  
 this.screen_height = screen_height;  
    }  
 // 初始化数据//参数分别为:速度增加的倍数,x中心坐标,y中心坐标 
 public void initial(int arg0,float arg1,float arg2){}  
 // 初始化图片资源的 
 protected abstract void initBitmap();  
 // 对象的绘图方法 
 public abstract void drawSelf(Canvas canvas);  
 // 释放资源的方法 
 public abstract void release();  
 // 检测碰撞的方法 
 public boolean isCollide(GameObject obj) {    
 return true;  
    }  
 // 对象的逻辑方法 
 public void logic(){}  
 //getter和setter方法 
 public int getSpeed(){  
 return speed;  
    }  
 public void setSpeed(int speed){  
 this.speed = speed;  
    }  
 public float getObject_x() {  
 return object_x;  
    }  
 public void setObject_x(float object_x) {  
 this.object_x = object_x;  
    }  
 public float getObject_y() {  
 return object_y;  
    }  
 public void setObject_y(float object_y) {  
 this.object_y = object_y;  
    }  
 public float getObject_width() {  
 return object_width;  
    }  
 public void setObject_width(float object_width) {  
 this.object_width = object_width;  
    }  
 public float getObject_height() {  
 return object_height;  
    }  
 public void setObject_height(float object_height) {  
 this.object_height = object_height;  
    }  
 public boolean isAlive() {  
 return isAlive;  
    }  
 public void setAlive(boolean isAlive) {  
 this.isAlive = isAlive;  
    }  
}  

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

敌机类EnemyPlane:

代码语言:java
复制
/*敌机类*/ 
public class EnemyPlane extends GameObject{  
 protected int score;                     // 对象的分值 
 protected int blood;                     // 对象的当前血量 
 protected int bloodVolume;          <span style="white-space:pre">  </span> // 对象总的血量 
 protected boolean isExplosion;               // 判断是否爆炸 
 protected boolean isVisible;                 // 对象是否为可见状态 
 public EnemyPlane(Resources resources) {  
 super(resources);  
 // TODO Auto-generated constructor stub 
        initBitmap();           // 初始化图片资源 
    }  
 //初始化数据 
 @Override 
 public void initial(int arg0,float arg1,float arg2){  
 
    }  
 // 初始化图片资源 
 @Override 
 public void initBitmap() {  
 // TODO Auto-generated method stub 
 
    }  
 // 对象的绘图函数 
 @Override 
 public void drawSelf(Canvas canvas) {  
 // TODO Auto-generated method stub 
 
    }  
 // 释放资源 
 @Override 
 public void release() {  
 // TODO Auto-generated method stub 
 
    }  
 // 对象的逻辑函数 
 @Override 
 public void logic() {  
 // TODO Auto-generated method stub 
 
    }  
 // 被攻击的逻辑函数 
 public void attacked(int harm) {  
 // TODO Auto-generated method stub 
 
    }  
 // 检测碰撞 
 @Override 
 public boolean isCollide(GameObject obj) {  
 
 return true;  
    }  
 // 判断能否被检测碰撞 
 public boolean isCanCollide() {  
 // TODO Auto-generated method stub 
 return false;  
    }  
 //getter和setter方法 
 public int getScore() {  
 // TODO Auto-generated method stub 
 return score;  
    }  
 public void setScore(int score) {  
 // TODO Auto-generated method stub 
 this.score = score;  
    }  
 public int getBlood() {  
 // TODO Auto-generated method stub 
 return blood;  
    }  
 public void setBlood(int blood) {  
 // TODO Auto-generated method stub 
 this.blood = blood;  
    }  
 public int getBloodVolume() {  
 // TODO Auto-generated method stub 
 return bloodVolume;  
    }  
 public void setBloodVolume(int bloodVolume) {  
 // TODO Auto-generated method stub 
 this.bloodVolume = bloodVolume;  
    }  
 public boolean isExplosion() {  
 // TODO Auto-generated method stub 
 return isExplosion;  
    }  
}  

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

子弹类Bullet:

代码语言:java
复制
/*子弹基类*/ 
public class Bullet extends GameObject{  
 protected int harm;  
 public Bullet(Resources resources) {  
 super(resources);  
 // TODO Auto-generated constructor stub 
        initBitmap();  
    }  
 @Override 
 protected void initBitmap() {  
 // TODO Auto-generated method stub 
 
    }  
 @Override 
 public void drawSelf(Canvas canvas) {  
 // TODO Auto-generated method stub 
 
    }  
 @Override 
 public void release() {  
 // TODO Auto-generated method stub 
 
    }  
 // 检测碰撞的方法 
 @Override 
 public boolean isCollide(GameObject obj) {    
 return true;  
    }  
 //getter和setter方法 
 public int getHarm() {  
 // TODO Auto-generated method stub 
 return harm;  
    }  
 public void setHarm(int harm) {  
 // TODO Auto-generated method stub 
 this.harm = harm;  
    }  
}  

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

物品类GameGoods:

代码语言:java
复制
/*物品类*/ 
public class GameGoods extends GameObject{  
 protected Bitmap bmp;                                 
 private int direction;          //物品的方向 
 public GameGoods(Resources resources) {  
 super(resources);  
 // TODO Auto-generated constructor stub 
        initBitmap();  
    }  
 // 初始化数据 
 @Override 
 public void initial(int arg0,float arg1,float arg2){  
 
    }  
 // 初始化图片资源的 
 @Override 
 protected void initBitmap() {  
 // TODO Auto-generated method stub 
 
    }  
 // 对象的绘图方法 
 @Override 
 public void drawSelf(Canvas canvas) {  
 // TODO Auto-generated method stub 
 
    }  
 // 释放资源的方法 
 @Override 
 public void release() {  
 // TODO Auto-generated method stub 
 
    }  
 // 对象的逻辑函数 
 @Override 
 public void logic() {  
 
    }  
 // 检测碰撞 
 @Override 
 public boolean isCollide(GameObject obj) { return false;  
<span style="white-space:pre">  </span>}  
}  

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

IMyPlane接口

代码语言:java
复制
public interface IMyPlane {  
 public float getMiddle_x();  
 public void setMiddle_x(float middle_x);  
 public float getMiddle_y();  
 public void setMiddle_y(float middle_y);  
 public boolean isChangeBullet();  
 public void setChangeBullet(boolean isChangeBullet);  
 //发射子弹的方法 
 public void shoot(Canvas canvas,List<EnemyPlane> planes);  
 //初始化子弹的方法 
 public void initButtle();  
 //更换子弹的方法 
 public void changeButtle();  
}  

玩家飞机类MyPlane:

代码语言:java
复制
/*玩家飞机的类*/ 
public class MyPlane extends GameObject implements IMyPlane{  
 private float middle_x;          // 飞机的中心坐标 
 private float middle_y;  
 private long startTime;          // 开始的时间 
 private long endTime;            // 结束的时间 
 private boolean isChangeBullet;  // 标记更换了子弹 
 private Bitmap myplane;          // 飞机飞行时的图片 
 private Bitmap myplane2;         // 飞机爆炸时的图片 
 private List<Bullet> bullets;  // 子弹的序列 
 private MainView mainView;  
 private GameObjectFactory factory;  
 public MyPlane(Resources resources) {  
 super(resources);  
 // TODO Auto-generated constructor stub 
 
    }  
 public void setMainView(MainView mainView) {  
 this.mainView = mainView;  
    }  
 // 设置屏幕宽度和高度 
 @Override 
 public void setScreenWH(float screen_width, float screen_height) {  
 
    }  
 // 初始化图片资源的 
 @Override 
 public void initBitmap() {  
 // TODO Auto-generated method stub 
 
    }  
 // 对象的绘图方法 
 @Override 
 public void drawSelf(Canvas canvas) {  
 // TODO Auto-generated method stub 
 
    }  
 // 释放资源的方法 
 @Override 
 public void release() {  
 // TODO Auto-generated method stub 
 
    }  
 //发射子弹 
 @Override 
 public void shoot(Canvas canvas,List<EnemyPlane> planes) {  
 // TODO Auto-generated method stub   
 
    }  
 //初始化子弹 
 @Override 
 public void initButtle() {  
 // TODO Auto-generated method stub 
 
    }  
 //更换子弹 
 @Override 
 public void changeButtle() {  
 // TODO Auto-generated method stub 
 
    }  
 //判断子弹是否超时 
 public void isBulletOverTime(){  
 
    }  
 //getter和setter方法 
 public void setStartTime(long startTime) {  
 this.startTime = startTime;  
    }  
 @Override 
 public boolean isChangeBullet() {  
 return isChangeBullet;  
    }  
 @Override 
 public void setChangeBullet(boolean isChangeBullet) {  
 this.isChangeBullet = isChangeBullet;  
    }  
 @Override 
 public float getMiddle_x() {  
 return middle_x;  
    }  
 @Override 
 public void setMiddle_x(float middle_x) {  
 this.middle_x = middle_x;  
 this.object_x = middle_x - object_width/2;  
    }  
 @Override 
 public float getMiddle_y() {  
 return middle_y;  
    }  
 @Override 
 public void setMiddle_y(float middle_y) {  
 this.middle_y = middle_y;  
 this.object_y = middle_y - object_height/2;  
    }     
}  

以上列出的类除GameObject类以外,其它类中的一些方法都省略了其实现,这会在接下来讲的。

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-05-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档