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

学编程也有一点的时间了,所以想写个博客来分享一下自己编程程序的经历,这也可以留着让自己以后对一些的编程技术遗忘时能够回看。这是自己编写的游戏程序。如果在代码的设计、布局和调用上出现有不合理的地方,请各位提出建议。

以下是程序代码的下载地址: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



  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值