学编程也有一点的时间了,所以想写个博客来分享一下自己编程程序的经历,这也可以留着让自己以后对一些的编程技术遗忘时能够回看。这是自己编写的游戏程序。如果在代码的设计、布局和调用上出现有不合理的地方,请各位提出建议。
以下是程序代码的下载地址: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; // 对象总的血量
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;
}
}
玩家的飞机类除了继承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