飞机大战

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

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

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

界面视图分别如下:

 
 

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

GameObject类:

[java] view plaincopy

  1. /*游戏对象类*/  
  2. abstract public class GameObject {  
  3.     protected int currentFrame;     // 当前动画帧  
  4.     protected int speed;        // 对象的速度  
  5.     protected float object_x;   // 对象的横坐标  
  6.     protected float object_y;   // 对象的纵坐标  
  7.     protected float object_width;   // 对象的宽度  
  8.     protected float object_height;  // 对象的高度  
  9.     protected float screen_width;   // 屏幕的宽度  
  10.     protected float screen_height;  // 屏幕的高度  
  11.     protected boolean isAlive;  // 判断是否存活  
  12.     protected Paint paint;      // 画笔对象  
  13.     protected Resources resources;  // 资源类  
  14.     // 构造函数  
  15.     public GameObject(Resources resources) {  
  16.         this.resources = resources;  
  17.         this.paint = new Paint();  
  18.     }  
  19.     // 设置屏幕宽度和高度  
  20.     public void setScreenWH(float screen_width, float screen_height) {  
  21.         this.screen_width = screen_width;  
  22.         this.screen_height = screen_height;  
  23.     }  
  24.     // 初始化数据//参数分别为:速度增加的倍数,x中心坐标,y中心坐标  
  25.     public void initial(int arg0,float arg1,float arg2){}  
  26.     // 初始化图片资源的  
  27.     protected abstract void initBitmap();  
  28.     // 对象的绘图方法  
  29.     public abstract void drawSelf(Canvas canvas);  
  30.     // 释放资源的方法  
  31.     public abstract void release();  
  32.     // 检测碰撞的方法  
  33.     public boolean isCollide(GameObject obj) {    
  34.         return true;  
  35.     }  
  36.     // 对象的逻辑方法  
  37.     public void logic(){}  
  38.     //getter和setter方法  
  39.     public int getSpeed(){  
  40.         return speed;  
  41.     }  
  42.     public void setSpeed(int speed){  
  43.         this.speed = speed;  
  44.     }  
  45.     public float getObject_x() {  
  46.         return object_x;  
  47.     }  
  48.     public void setObject_x(float object_x) {  
  49.         this.object_x = object_x;  
  50.     }  
  51.     public float getObject_y() {  
  52.         return object_y;  
  53.     }  
  54.     public void setObject_y(float object_y) {  
  55.         this.object_y = object_y;  
  56.     }  
  57.     public float getObject_width() {  
  58.         return object_width;  
  59.     }  
  60.     public void setObject_width(float object_width) {  
  61.         this.object_width = object_width;  
  62.     }  
  63.     public float getObject_height() {  
  64.         return object_height;  
  65.     }  
  66.     public void setObject_height(float object_height) {  
  67.         this.object_height = object_height;  
  68.     }  
  69.     public boolean isAlive() {  
  70.         return isAlive;  
  71.     }  
  72.     public void setAlive(boolean isAlive) {  
  73.         this.isAlive = isAlive;  
  74.     }  
  75. }  

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

敌机类EnemyPlane:

[java] view plaincopy

  1. /*敌机类*/  
  2. public class EnemyPlane extends GameObject{  
  3.     protected int score;                     // 对象的分值  
  4.     protected int blood;                     // 对象的当前血量  
  5.     protected int bloodVolume;          <span style="white-space:pre">  </span> // 对象总的血量  
  6.     protected boolean isExplosion;               // 判断是否爆炸  
  7.     protected boolean isVisible;                 // 对象是否为可见状态  
  8.     public EnemyPlane(Resources resources) {  
  9.         super(resources);  
  10.         // TODO Auto-generated constructor stub  
  11.         initBitmap();           // 初始化图片资源  
  12.     }  
  13.     //初始化数据  
  14.     @Override  
  15.     public void initial(int arg0,float arg1,float arg2){  
  16.           
  17.     }  
  18.     // 初始化图片资源  
  19.     @Override  
  20.     public void initBitmap() {  
  21.         // TODO Auto-generated method stub  
  22.       
  23.     }  
  24.     // 对象的绘图函数  
  25.     @Override  
  26.     public void drawSelf(Canvas canvas) {  
  27.         // TODO Auto-generated method stub  
  28.           
  29.     }  
  30.     // 释放资源  
  31.     @Override  
  32.     public void release() {  
  33.         // TODO Auto-generated method stub  
  34.           
  35.     }  
  36.     // 对象的逻辑函数  
  37.     @Override  
  38.     public void logic() {  
  39.         // TODO Auto-generated method stub  
  40.           
  41.     }  
  42.     // 被攻击的逻辑函数  
  43.     public void attacked(int harm) {  
  44.         // TODO Auto-generated method stub  
  45.           
  46.     }  
  47.     // 检测碰撞  
  48.     @Override  
  49.     public boolean isCollide(GameObject obj) {  
  50.           
  51.         return true;  
  52.     }  
  53.     // 判断能否被检测碰撞  
  54.     public boolean isCanCollide() {  
  55.         // TODO Auto-generated method stub  
  56.         return false;  
  57.     }  
  58.     //getter和setter方法  
  59.     public int getScore() {  
  60.         // TODO Auto-generated method stub  
  61.         return score;  
  62.     }  
  63.     public void setScore(int score) {  
  64.         // TODO Auto-generated method stub  
  65.         this.score = score;  
  66.     }  
  67.     public int getBlood() {  
  68.         // TODO Auto-generated method stub  
  69.         return blood;  
  70.     }  
  71.     public void setBlood(int blood) {  
  72.         // TODO Auto-generated method stub  
  73.         this.blood = blood;  
  74.     }  
  75.     public int getBloodVolume() {  
  76.         // TODO Auto-generated method stub  
  77.         return bloodVolume;  
  78.     }  
  79.     public void setBloodVolume(int bloodVolume) {  
  80.         // TODO Auto-generated method stub  
  81.         this.bloodVolume = bloodVolume;  
  82.     }  
  83.     public boolean isExplosion() {  
  84.         // TODO Auto-generated method stub  
  85.         return isExplosion;  
  86.     }  
  87. }  

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

子弹类Bullet:

[java] view plaincopy

  1. /*子弹基类*/  
  2. public class Bullet extends GameObject{  
  3.     protected int harm;  
  4.     public Bullet(Resources resources) {  
  5.         super(resources);  
  6.         // TODO Auto-generated constructor stub  
  7.         initBitmap();  
  8.     }  
  9.     @Override  
  10.     protected void initBitmap() {  
  11.         // TODO Auto-generated method stub  
  12.           
  13.     }  
  14.     @Override  
  15.     public void drawSelf(Canvas canvas) {  
  16.         // TODO Auto-generated method stub  
  17.           
  18.     }  
  19.     @Override  
  20.     public void release() {  
  21.         // TODO Auto-generated method stub  
  22.           
  23.     }  
  24.     // 检测碰撞的方法  
  25.     @Override  
  26.     public boolean isCollide(GameObject obj) {    
  27.         return true;  
  28.     }  
  29.     //getter和setter方法  
  30.     public int getHarm() {  
  31.         // TODO Auto-generated method stub  
  32.         return harm;  
  33.     }  
  34.     public void setHarm(int harm) {  
  35.         // TODO Auto-generated method stub  
  36.         this.harm = harm;  
  37.     }  
  38. }  

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

物品类GameGoods:

[java] view plaincopy

  1. /*物品类*/  
  2. public class GameGoods extends GameObject{  
  3.     protected Bitmap bmp;                                 
  4.     private int direction;          //物品的方向  
  5.     public GameGoods(Resources resources) {  
  6.         super(resources);  
  7.         // TODO Auto-generated constructor stub  
  8.         initBitmap();  
  9.     }  
  10.     // 初始化数据  
  11.     @Override  
  12.     public void initial(int arg0,float arg1,float arg2){  
  13.           
  14.     }  
  15.     // 初始化图片资源的  
  16.     @Override  
  17.     protected void initBitmap() {  
  18.         // TODO Auto-generated method stub  
  19.   
  20.     }  
  21.     // 对象的绘图方法  
  22.     @Override  
  23.     public void drawSelf(Canvas canvas) {  
  24.         // TODO Auto-generated method stub  
  25.           
  26.     }  
  27.     // 释放资源的方法  
  28.     @Override  
  29.     public void release() {  
  30.         // TODO Auto-generated method stub  
  31.           
  32.     }  
  33.     // 对象的逻辑函数  
  34.     @Override  
  35.     public void logic() {  
  36.           
  37.     }  
  38.     // 检测碰撞  
  39.     @Override  
  40.     public boolean isCollide(GameObject obj) { return false;  
  41. <span style="white-space:pre">  </span>}  
  42. }  

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

IMyPlane接口

[java] view plaincopy

  1. public interface IMyPlane {  
  2.     public float getMiddle_x();  
  3.     public void setMiddle_x(float middle_x);  
  4.     public float getMiddle_y();  
  5.     public void setMiddle_y(float middle_y);  
  6.     public boolean isChangeBullet();  
  7.     public void setChangeBullet(boolean isChangeBullet);  
  8.     //发射子弹的方法  
  9.     public void shoot(Canvas canvas,List<EnemyPlane> planes);  
  10.     //初始化子弹的方法  
  11.     public void initButtle();  
  12.     //更换子弹的方法  
  13.     public void changeButtle();  
  14. }  

玩家飞机类MyPlane:

[java] view plaincopy

  1. /*玩家飞机的类*/  
  2. public class MyPlane extends GameObject implements IMyPlane{  
  3.     private float middle_x;          // 飞机的中心坐标  
  4.     private float middle_y;  
  5.     private long startTime;          // 开始的时间  
  6.     private long endTime;            // 结束的时间  
  7.     private boolean isChangeBullet;  // 标记更换了子弹  
  8.     private Bitmap myplane;          // 飞机飞行时的图片  
  9.     private Bitmap myplane2;         // 飞机爆炸时的图片  
  10.     private List<Bullet> bullets;  // 子弹的序列  
  11.     private MainView mainView;  
  12.     private GameObjectFactory factory;  
  13.     public MyPlane(Resources resources) {  
  14.         super(resources);  
  15.         // TODO Auto-generated constructor stub  
  16.           
  17.     }  
  18.     public void setMainView(MainView mainView) {  
  19.         this.mainView = mainView;  
  20.     }  
  21.     // 设置屏幕宽度和高度  
  22.     @Override  
  23.     public void setScreenWH(float screen_width, float screen_height) {  
  24.           
  25.     }  
  26.     // 初始化图片资源的  
  27.     @Override  
  28.     public void initBitmap() {  
  29.         // TODO Auto-generated method stub  
  30.           
  31.     }  
  32.     // 对象的绘图方法  
  33.     @Override  
  34.     public void drawSelf(Canvas canvas) {  
  35.         // TODO Auto-generated method stub  
  36.           
  37.     }  
  38.     // 释放资源的方法  
  39.     @Override  
  40.     public void release() {  
  41.         // TODO Auto-generated method stub  
  42.       
  43.     }  
  44.     //发射子弹  
  45.     @Override  
  46.     public void shoot(Canvas canvas,List<EnemyPlane> planes) {  
  47.         // TODO Auto-generated method stub    
  48.           
  49.     }  
  50.     //初始化子弹  
  51.     @Override  
  52.     public void initButtle() {  
  53.         // TODO Auto-generated method stub  
  54.   
  55.     }  
  56.     //更换子弹  
  57.     @Override  
  58.     public void changeButtle() {  
  59.         // TODO Auto-generated method stub  
  60.           
  61.     }  
  62.     //判断子弹是否超时  
  63.     public void isBulletOverTime(){  
  64.           
  65.     }  
  66.     //getter和setter方法  
  67.     public void setStartTime(long startTime) {  
  68.         this.startTime = startTime;  
  69.     }  
  70.     @Override  
  71.     public boolean isChangeBullet() {  
  72.         return isChangeBullet;  
  73.     }  
  74.     @Override  
  75.     public void setChangeBullet(boolean isChangeBullet) {  
  76.         this.isChangeBullet = isChangeBullet;  
  77.     }  
  78.     @Override  
  79.     public float getMiddle_x() {  
  80.         return middle_x;  
  81.     }  
  82.     @Override  
  83.     public void setMiddle_x(float middle_x) {  
  84.         this.middle_x = middle_x;  
  85.         this.object_x = middle_x - object_width/2;  
  86.     }  
  87.     @Override  
  88.     public float getMiddle_y() {  
  89.         return middle_y;  
  90.     }  
  91.     @Override  
  92.     public void setMiddle_y(float middle_y) {  
  93.         this.middle_y = middle_y;  
  94.         this.object_y = middle_y - object_height/2;  
  95.     }     
  96. }  

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

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

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

时间: 2024-12-22 14:53:09

飞机大战的相关文章

如何修改得到散弹效果-android飞机大战散弹设计

问题描述 android飞机大战散弹设计 package com.example.beatplane; import java.util.Random; import com.example.beatplane.R; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas;

微信经典飞机大战游戏攻略

问:微信5.0打飞机怎么取得高分?无敌模式开启方法 微信5.0中新增了一个游戏中心功能,其中有一个内置游戏<经典飞机大战>,昨天开始小编就在朋友圈中不断的看到有朋友分享排行榜,对于想提高排名成绩的机友们而言很想知道微信5.0打飞机怎么取得高分,所以下面小编就来和大家分享下微信5.0打飞机无敌模式开启方法,教大家如何取得高分. 微信5.0打飞机怎么取得高分 现在微信5.0打飞机游戏已经被破解了,就在昨天下午就已经出现了打飞机破解补丁只要是越狱过的iPhone手机,下载安装微信打飞机无敌模式补丁后

vs-用VS写MFC飞机大战遇到的画面卡顿

问题描述 用VS写MFC飞机大战遇到的画面卡顿 一直按住一个键,时间稍长就会使得所有显示都卡顿:我想是同时触发的事件太多的原因,于是加了bool型变量来控制, if (GetKeyState(VK_SPACE) < 0&&ismybullet==false)//我子弹发射 { ismybullet = true; Mybullet *mbu = new Mybullet(); mbu->poi.x = myplane.poi.x + 20; mbu->poi.y = my

程序设计综合实践-MFC飞机大战背景两幅图片循环

问题描述 MFC飞机大战背景两幅图片循环 void CScene::StickScene(CDC &bufferDC, CRect rClient) { //设置缩放图片的模式为:COLORONCOLOR, 以消除像素重叠 bufferDC.SetStretchBltMode(COLORONCOLOR); //如果到了左边界, 回到起点 if (m_bgX <= -rClient.Width()) { m_bgX = 0; // if (m_isStart) m_isStart = fals

mfc-VS写MFC飞机大战的子弹发射模式问题

问题描述 VS写MFC飞机大战的子弹发射模式问题 我怎么实现追踪导弹呢?由我机发射打敌机,发射追踪导弹怎么去选择追踪哪个敌机呢?怎么发射以圆形辐射模式的子弹呢(放出一圈不断扩散的子弹)?求各路真神解答,感激不尽. 解决方案 如果是做成直线,只要锁定离子弹最近的敌机,让子弹按最短的直线飞过去. 如果想做成曲线,则需要用画曲线的算法得到下一个子弹出现的点.这样,算法是难点! 发射圆形的,只需要提前算好每个子弹的直线路径即可:先以飞机为中心做一个大圆,在飞机上方的半圆上取点(点的个数为子弹的个数),然

mfc-用VS写MFC飞机大战遇到的画面卡顿

问题描述 用VS写MFC飞机大战遇到的画面卡顿 写出程序后测试时候发现,当我长按一个键(比如向左移动),时间稍长就会使得画面变得非常卡,所有显示都会卡,是由于触发的事件太多的原因吗?该怎么解决呢? 解决方案 是的,你可以在处理键盘事件的时候设置一个bool值,不允许触发新的事件.另外,绘图的时候最好只绘制客户区可见的部分,可以提高性能. 解决方案二: 建议使用OpenGl,使用双缓冲模式,由于显示的时候数据还没准备好,结果下一次的触发又要刷新,并计算数据 解决方案三: 你可以作一个queue队列

java版飞机大战 实战项目详细步骤

分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是自己控制的飞机).敌人.而敌人应该分为打死给分的飞机(就是普通飞机),另一种就是打死有奖励的敌人.他们都应该是飞行物的子类,我们也可以为普通飞机和给奖励的敌人设一个接口让他们去实现接口,这样有利于以后的扩展,我在这里给的简化版的飞机大战,主要是为了让大家了解面向对象. 第一步建立飞行物类 import java.awt.image.BufferedImage; /**

全民飞机大战刷金币的图文详解

全民飞机大战刷金币攻略: 1.与好友战机合体,获得更强的火力. 2.提升战机与宠物的等级,获得更高的攻击力与防御力. 3.连续击毁敌机,获得更高的连杀数. 4.尽可能在空旷的地方,找准安全地带. 5.上下左右移动幅度不宜过大,获得很容易吃到子弹.

全民飞机大战刷高分刷皇冠秘籍:删掉高分好友 就能有皇冠

全民飞机大战刷高分刷金币皇冠秘籍继天天飞车.天天酷跑后,腾讯又推出了一款 新的手游"全民飞机大战",有玩家表示这是此前"打飞机"游戏的升级版,也有人表示这是雷电的复制品.不管如何,全民飞机大战的推出,必将掀起一股全民飞机大战热潮.全民飞机大战还未内测,如何获得皇冠,如何赢得高分等,都备受玩家瞩目.全民飞机大战高分技巧1.与好友战机合体,获得更强的火力.2.提升战机与宠物的等级,获得更高的攻击力与防御力.3.连续击毁敌机,获得更高的连杀数.4.尽可能在空旷的地方,找准

沉迷“飞机大战”?小心偷偷跑流量

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   "您当月套餐流量已使用710.25MB,剩余流量9.75MB--"这条短信,让小许惊呆了,"这个月流量怎么用这么快?".一番查询后他发现,"罪魁祸首",很可能是自己热衷的小游戏--"飞机大战".   自从微信5.0发布以来,"飞机大战"几乎成了"全民游戏