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