文档章节

《飞机大战》安卓游戏开发源码

科技创造
 科技创造
发布于 2015/01/13 17:33
字数 1086
阅读 1021
收藏 6


 

在本文中,将继续完善代码,该代码也是最终的代码,本游戏至此开发结束,游戏界面很粗糙,毕竟不是专业开发游 戏,而且游戏很多功能并未完成,比如说:随机出现一个”能量球”等等,这几天完成这个小游戏,纯属炼手操作,只是达成了其中的逻辑(部分逻辑)开发,接下 来把子弹攻击飞机的代码贴上来。

 

首先修改代码:BulletRunnable.java中的run方法,增加代码:

 

这里的功能就是判断在发射子弹的时候,判断其子弹的位置和飞机的位置是否相同,相同则发生planeBoom();

  1. holder.unlockCanvasAndPost(canvas);  
  2.   
  3.             if (!isEnemyBullet()) {  
  4.                 bullet.setY(bullet.getY() – 70);  
  5.                 // 从所有的敌机中判断  
  6.   
  7.                 if (enemyPlanes != null && enemyPlanes.size() > 0) {  
  8.                     for (int i = 0, size = enemyPlanes.size(); i < size; i++) {  
  9.                         ImageButton enemyPlan = enemyPlanes.get(i);  
  10.   
  11.                         if (bullet.getX() > enemyPlan.getX()  
  12.                                 && bullet.getX() < (enemyPlan.getX() + planeHalfWidth * 2)  
  13.                                 && bullet.getY() > enemyPlan.getY()  
  14.                                 && bullet.getY() < (enemyPlan.getY() + planeHalfWidth * 2)) {  
  15.   
  16.                             if (emPlanes != null && emPlanes.size() > 0) {  
  17.                                 EnemyPlane plane = emPlanes.get(i);  
  18.                                 if(plane != null){  
  19.                                     plane.setLife(plane.getLife() – 1);  
  20.                                     if (emPlanes.get(i).getLife() <= 0) {  
  21.                                         planeBoom(plane,true);  
  22.                                     }  
  23.                                 }  
  24.   
  25.                             }  
  26.                             bullet.setFly(false);  
  27.                             // 子弹消失  
  28.                         }  
  29.                     }  
  30.                 }  
  31.             } else {  
  32.                 bullet.setY(bullet.getY() + 30);  
  33.                 // 此时是子弹打中了你控制的飞机  
  34.                 if (bullet.getX() > yourPlane.getX()  
  35.                         && bullet.getX() < (yourPlane.getX() + planeHalfWidth * 2)  
  36.                         && bullet.getY() > yourPlane.getY()  
  37.                         && bullet.getY() < (yourPlane.getY() + planeHalfWidth * 2)) {  
  38.   
  39.                       
  40.                     yourPlane.setLife(yourPlane.getLife() – 1);  
  41.   
  42.                     if (yourPlane.getLife() <= 0) {  
  43.                         // 此时你的飞机不能再进行发射  
  44.                         planeBoom(yourPlane,false);  
  45.                         // 发生爆炸  
  46.   
  47.                     }  
  48.                     // 子弹消失  
  49.                     bullet.setFly(false);  
  50.                     // 立马跳出  
  51.                     break;  
  52.                 }  
  53.             }  
  54.   
  55.    

 

发生planeBoom()代码:

 

 

  1. /** 
  2.     * 飞机爆炸效果 
  3.     */  
  4.    private void planeBoom(Plane plane,boolean isEnemy) {  
  5.   
  6.        // 声明爆炸效果  
  7.        PlaneBoomRunnable boomRunnable = new PlaneBoomRunnable(context, holder);  
  8.        boomRunnable.setPlane(plane);  
  9.        boomRunnable.setIsenemy(isEnemy);  
  10.        // 爆炸  
  11.        new Thread(boomRunnable).start();  
  12.    }  

 

 

这里新建了一个PlaneBoomRunnable .java 类,具体代码如下:

  1. package com.pm_road.fireair.thread;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Canvas;  
  5. import android.graphics.Color;  
  6. import android.graphics.Paint;  
  7. import android.graphics.PorterDuff.Mode;  
  8. import android.view.SurfaceHolder;  
  9.   
  10. import com.pm_road.fireair.bean.Plane;  
  11.   
  12. /** 
  13.  * 飞机爆炸 
  14.  * @ClassName: PlaneBoomRunnable 
  15.  * @Description: 飞机爆炸效果 
  16.  * @author lipeng 
  17.  * @date 2014-11-11 上午11:27:01 
  18.  * 
  19.  */  
  20. public class PlaneBoomRunnable implements Runnable{  
  21.       
  22.     //飞机爆炸中的plane  
  23.     private Plane plane;  
  24.     //上下文  
  25.     private Context context;  
  26.     //  
  27.     private SurfaceHolder holder;  
  28.       
  29.     private Boolean isenemy;  
  30.     public PlaneBoomRunnable(Context context, SurfaceHolder holder) {  
  31.         super();  
  32.           
  33.         this.context = context;  
  34.         this.holder = holder;  
  35.     }  
  36.   
  37.     @Override  
  38.     public void run() {  
  39.           
  40.         Canvas canvas = holder.lockCanvas();  
  41.         canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);  
  42.   
  43.         Paint paint = new Paint();  
  44.         paint.setColor(Color.BLUE);  
  45.         canvas.drawText(“BOOM”, plane.getX(), plane.getY(), paint);  
  46.         canvas.drawText(“BOOM”, plane.getX()+5, plane.getY()+5, paint);  
  47.         canvas.drawText(“BOOM”, plane.getX()+10, plane.getY()+10, paint);  
  48.         canvas.drawText(“BOOM”, plane.getX()+15, plane.getY()+15, paint);  
  49.         holder.unlockCanvasAndPost(canvas);  
  50.         plane.setShot(false);  
  51.           
  52.     }  
  53.   
  54.     public Plane getPlane() {  
  55.         return plane;  
  56.     }  
  57.   
  58.     public void setPlane(Plane plane) {  
  59.         this.plane = plane;  
  60.     }  
  61.   
  62.     public Boolean getIsenemy() {  
  63.         return isenemy;  
  64.     }  
  65.   
  66.     public void setIsenemy(Boolean isenemy) {  
  67.         this.isenemy = isenemy;  
  68.     }  
  69.       
  70. }  

 

 

 

此时,在BulletRunnable.java中缺少两个属性:

 

  1. private List<ImageButton> enemyPlanes;  
  2. private List<EnemyPlane> emPlanes;  

 

 

将这两个属性也同样添加至PlaneRunnable.java 和MySurfaceView.java 中,同样要加入get set方法 ,

 

在PlaneRunnable.java的run方法中添加如下代码:该代码表示,如果你控制的飞机被炸掉之后,其它飞机也要停止。

 

  1. // 发射子弹  
  2.             if(yourPlane.isShot()){  
  3.                 shotOneBullet();  
  4.             }else{  
  5.                 //如果你控制的飞机,停止射击了,所有的飞机也要停止  
  6.                 plane.setShot(false);  
  7.                 Message msg = handler.obtainMessage();  
  8.                 msg.arg1 = 2;  
  9.                 handler.sendMessage(msg);  
  10.             }  

 
在该方法的最下面加上,通知主UI,更新飞机爆炸

 

  1. if (isEnemyPlane()) {  
  2.             Message msg = handler.obtainMessage();  
  3.             msg.arg1 = 3;  
  4.             msg.obj = enemyPlaneImg;  
  5.             msg.arg2 = (int) plane.getY();  
  6.             handler.sendMessage(msg);  
  7.             plane = null;  
  8.         }     

 

 

在MainActivity.java,的handler中增加判断方法:

 

  1. case 3:  
  2.                 ImageButton enemyImg = (ImageButton) msg.obj;  
  3.                 enemyImg.setVisibility(View.GONE);  
  4.                 enemyImg.setX(0);  
  5.                 enemyImg.setY(0);  
  6.                 break;  
  7.   
  8.    

 

 

 

至此,所有的代码结束,时间周期比较短,总共下来大概三天左右,其它功能暂时不会进行开发,现在的达到的功能为:随机出现几架敌机,敌机会垂直运 行,并隔一段时间不停发射子弹,你控制一架飞机也会垂直方向向上发射子弹,打中敌机后,敌机会出现BOOM字样,该架敌机消失,如果你控制的飞机让敌机打 中5次,则弹出提示GAME OVER 。



    对于Android app,dex源码文件安全性是最重要的,因此,这个dex源码加密保护其实很有必要,在这个方面,可以做到的有爱加密这个平台,不同类型的应用也有不同的加密保护方案, 详细可以在这里了解: http://www.ijiami.cn/appprotect_mobile_games

本文转载自:http://www.cnblogs.com/xiaochao1234/p/4221407.html

科技创造
粉丝 37
博文 199
码字总数 174505
作品 0
徐汇
程序员
私信 提问
加载中

评论(3)

科技创造
科技创造 博主


加条广告,忘大家不要介意:为了大奖拼了,爱加密2周年庆典盛大来袭,多重“壕”礼,等你来领!在8月12日——8月22日期间,等待各位小伙伴们的积极参与! 欢迎加入和使用爱加密 #最好的APP加密平台# http://www.ijiami.cn/treg?regCode=1001014
科技创造
科技创造 博主
这个dex源码加密保护其实很有必要,
学习皑皑
学习皑皑
按时大多数的的山东省
Android源码50例汇总,欢迎各位下载

下载中心好资料很多,藏在各个角落,小弟在此帮大家做了一个整理,做了一个下载目录,方便大家选择性下载。 源码实例如下: 《Android应用开发揭秘》源代码推荐 http://down.51cto.com/data...

程序袁_绪龙
2015/01/23
998
0
libgdx 环境搭建

一、 开发包下载 1) libgdx 开发包下载: google code(最新 libgdx-0.9.7.zip 2012.11.12) 2) libgdx 主干源码下载: github tags 二、 环境搭建 1) 添加开发jar包 libgdx的android开发...

长平狐
2013/01/06
1K
0
寻android开发工作

本人现居深圳,12年软件工程毕业,热爱android移动开发,自学android,由于现公司android开发项目少,android开发交流人员少,希望可以找到一个android交流学习、深入系统源码、android架构的...

Sassoon
2013/03/29
535
7
Android进阶二部曲第二部《Android进阶解密》已出版

Android进阶二部曲第一部《Android进阶之光》介绍 :点击这里 本书源码地址:https://github.com/henrymorgen/android-advanced-decode 为什么写这本书 Android进阶二部曲包括《Android进阶之...

刘望舒
2018/10/23
0
0
破解Android进阶奥秘!《Android进阶解密》已出版

Android进阶二部曲第一部《Android进阶之光》介绍 :点击这里 本书源码地址:github.com/henrymorgen… 为什么写这本书 Android进阶二部曲包括《Android进阶之光》和本书,因此写这本书的原因...

刘望舒
2018/10/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面向海量数据的极致成本优化-云HBase的一体化冷热分离

前言 随着业务的持续发展,业务数据库存储量会持续增长。通常数据量过亿时,就需要考虑做分库分表,或者选择扩展能力更好的NOSQL/NewSQL数据库,如HBase就可以单表支持PB级数据,足够满足大多...

阿里云官方博客
31分钟前
3
0
最新最全国内外架构开源技术干货资料

大家好,废话不多说,整理了精心收集了各类资源。 声明,如侵犯个人利益,请联系小编,会立即删除相关资料。 领取方式在文末 求转发列表 好了,由于资源太多啦,就不一一列举了。 大家按照下...

泥瓦匠BYSocket
33分钟前
6
0
springmvc jsp访问不了css

在jsp中引入css,一直报404错误,直接访问css,也无法访问 将css文件移出WEB-INF,因为处于安全性考虑,这个目录禁止外部访问。 当引用css时,可以直接用绝对路径${pageContext.request.conte...

沉迷于编程的小菜菜
36分钟前
4
0
android 系统版本 9.1网络请求遇到坑

网络请求异常: E/http: CLEARTEXT communication to plat.xunlinkeji.cn not permitted by network security policy 在res下新建一个xml目录 创建名为network_security_config.xml 文件 ,该......

MrLins
53分钟前
5
0
Istio 1.3 发布,HTTP 遥测不再需要 Mixer

> 原文链接:Istio 1.3 发布,HTTP 遥测不再需要 Mixer Istio 是 Google、IBM 和 Lyft 联合开源的服务网格(Service Mesh)框架,旨在解决大量微服务的发现、连接、管理、监控以及安全等问题...

米开朗基杨
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部