以下是程序代码的下载地址:http://download.csdn.net/detail/u010878441/6490515
好了,下面就开始进行游戏的总体设计
游戏的界面主要有三个界面组成,分别为:游戏开始前的准备界面ReadyView,游戏进行时的界面MainView和游戏结束时的界面EndView。
界面视图分别如下:
因为JAVA编程是面向对象的思想,所以我们要对游戏中的对象进行抽象。该游戏中的所有能够移动的物体都可看做是一个对象,它们有共同的属性和方法,如:横坐标、纵坐标、宽度、高度、逻辑方法、绘图方法等。因此我们把它们的所有共同的属性和方法封装成一个抽象的GameObject类,该类将会是游戏中所有对象的父类。
GameObject类:
[java] view plaincopy
- /*游戏对象类*/
- 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] view plaincopy
- /*敌机类*/
- 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] view plaincopy
- /*子弹基类*/
- 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] view plaincopy
- /*物品类*/
- 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] view plaincopy
- 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] view plaincopy
- /*玩家飞机的类*/
- 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