本文章属于原创性文章,珍惜他人劳动成果,转载请注明出处: http://www.pm-road.com/index.php/2014/11/11/180/
前言:最 近闲来无事,而且也是因为刚接触安卓不久,所以萌生了以后在开发web 项目的过程中同样开发安卓手游,因前一段时间项目需要独立完成了一款功能型手机app ,该App比较简单,全是按钮操作,也就是Activity之间的相互传值与过渡,所以对安卓的基本知识有了一定了解,在我的印象当中,感觉安卓手游是比 较困难的,但是有困难就要克服,所以有了开发游戏的念头。
上一篇文章中写到了飞机的发射子弹,在本文中,将继续完善代码,该代码也是最终的代码,本游戏至此开发结束,游戏界面很粗糙,毕竟不是专业开发游 戏,而且游戏很多功能并未完成,比如说:随机出现一个”能量球”等等,这几天完成这个小游戏,纯属炼手操作,只是达成了其中的逻辑(部分逻辑)开发,接下 来把子弹攻击飞机的代码贴上来。
首先修改代码:BulletRunnable.java中的run方法,增加代码:
这里的功能就是判断在发射子弹的时候,判断其子弹的位置和飞机的位置是否相同,相同则发生planeBoom();
holder.unlockCanvasAndPost(canvas); if (!isEnemyBullet()) { bullet.setY(bullet.getY() – 70); // 从所有的敌机中判断 if (enemyPlanes != null && enemyPlanes.size() > 0) { for (int i = 0, size = enemyPlanes.size(); i < size; i++) { ImageButton enemyPlan = enemyPlanes.get(i); if (bullet.getX() > enemyPlan.getX() && bullet.getX() < (enemyPlan.getX() + planeHalfWidth * 2) && bullet.getY() > enemyPlan.getY() && bullet.getY() < (enemyPlan.getY() + planeHalfWidth * 2)) { if (emPlanes != null && emPlanes.size() > 0) { EnemyPlane plane = emPlanes.get(i); if(plane != null){ plane.setLife(plane.getLife() – 1); if (emPlanes.get(i).getLife() <= 0) { planeBoom(plane,true); } } } bullet.setFly(false); // 子弹消失 } } } } else { bullet.setY(bullet.getY() + 30); // 此时是子弹打中了你控制的飞机 if (bullet.getX() > yourPlane.getX() && bullet.getX() < (yourPlane.getX() + planeHalfWidth * 2) && bullet.getY() > yourPlane.getY() && bullet.getY() < (yourPlane.getY() + planeHalfWidth * 2)) { yourPlane.setLife(yourPlane.getLife() – 1); if (yourPlane.getLife() <= 0) { // 此时你的飞机不能再进行发射 planeBoom(yourPlane,false); // 发生爆炸 } // 子弹消失 bullet.setFly(false); // 立马跳出 break; } }
发生planeBoom()代码:
/** * 飞机爆炸效果 */ private void planeBoom(Plane plane,boolean isEnemy) { // 声明爆炸效果 PlaneBoomRunnable boomRunnable = new PlaneBoomRunnable(context, holder); boomRunnable.setPlane(plane); boomRunnable.setIsenemy(isEnemy); // 爆炸 new Thread(boomRunnable).start(); }
这里新建了一个PlaneBoomRunnable .java 类,具体代码如下:
package com.pm_road.fireair.thread; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.view.SurfaceHolder; import com.pm_road.fireair.bean.Plane; /** * 飞机爆炸 * @ClassName: PlaneBoomRunnable * @Description: 飞机爆炸效果 * @author lipeng * @date 2014-11-11 上午11:27:01 * */ public class PlaneBoomRunnable implements Runnable{ //飞机爆炸中的plane private Plane plane; //上下文 private Context context; // private SurfaceHolder holder; private Boolean isenemy; public PlaneBoomRunnable(Context context, SurfaceHolder holder) { super(); this.context = context; this.holder = holder; } @Override public void run() { Canvas canvas = holder.lockCanvas(); canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR); Paint paint = new Paint(); paint.setColor(Color.BLUE); canvas.drawText(“BOOM”, plane.getX(), plane.getY(), paint); canvas.drawText(“BOOM”, plane.getX()+5, plane.getY()+5, paint); canvas.drawText(“BOOM”, plane.getX()+10, plane.getY()+10, paint); canvas.drawText(“BOOM”, plane.getX()+15, plane.getY()+15, paint); holder.unlockCanvasAndPost(canvas); plane.setShot(false); } public Plane getPlane() { return plane; } public void setPlane(Plane plane) { this.plane = plane; } public Boolean getIsenemy() { return isenemy; } public void setIsenemy(Boolean isenemy) { this.isenemy = isenemy; } }
此时,在BulletRunnable.java中缺少两个属性:
private List<ImageButton> enemyPlanes; private List<EnemyPlane> emPlanes;
将这两个属性也同样添加至PlaneRunnable.java 和MySurfaceView.java 中,同样要加入get set方法 ,
在PlaneRunnable.java的run方法中添加如下代码:该代码表示,如果你控制的飞机被炸掉之后,其它飞机也要停止。
// 发射子弹 if(yourPlane.isShot()){ shotOneBullet(); }else{ //如果你控制的飞机,停止射击了,所有的飞机也要停止 plane.setShot(false); Message msg = handler.obtainMessage(); msg.arg1 = 2; handler.sendMessage(msg); }
在该方法的最下面加上,通知主UI,更新飞机爆炸
if (isEnemyPlane()) { Message msg = handler.obtainMessage(); msg.arg1 = 3; msg.obj = enemyPlaneImg; msg.arg2 = (int) plane.getY(); handler.sendMessage(msg); plane = null; }
在MainActivity.java,的handler中增加判断方法:
case 3: ImageButton enemyImg = (ImageButton) msg.obj; enemyImg.setVisibility(View.GONE); enemyImg.setX(0); enemyImg.setY(0); break;
至此,所有的代码结束,时间周期比较短,总共下来大概三天左右,其它功能暂时不会进行开发,现在的达到的功能为:随机出现几架敌机,敌机会垂直运 行,并隔一段时间不停发射子弹,你控制一架飞机也会垂直方向向上发射子弹,打中敌机后,敌机会出现BOOM字样,该架敌机消失,如果你控制的飞机让敌机打 中5次,则弹出提示GAME OVER 。有需要源代码的朋友加:QQ:405540407 咨询
本文章属于原创性文章,珍惜他人劳动成果,转载请注明出处: http://www.pm-road.com/index.php/2014/11/11/180/
相关推荐
基于Android Studio游戏开发 飞飞机大战小游戏源码,可暂停、继续游戏、开关背景音乐等功能。 成功运行
Android游戏源码 简单的飞机大战游戏源码 Android 游戏开发
基于java的飞机大战小游戏
飞机战斗游戏源码,这是某书籍的源码,包含了一个游戏的完整流程, 相比更容易看懂和上手。 建议开发童鞋使用统一开发环境UDE来进行查看、调试、开发~~~统一开发环境是一款HTML5跨平台一站式应用开发、调试和部署...
本项目是一个基于Cocos2dx开发的飞机大战安卓小游戏项目源码,图片素材取自微信飞机大战。本游戏的玩法与微信飞机大战相同。项目有简单的英文注释需要的朋友可以自己下载研究一下。
这是一款简单的类似全民飞机大战的安卓游戏,有兴趣可以下载看看!
java版飞机大战源码 Android 学习资料收集 收集整理这份资料灵感来自于 , 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料,...
egret白鹭游戏引擎的飞机大战源码,基于TYPESCRIPT开发,属于H5游戏,可以跨平台发布到安卓、IOS等,是个比较简单的DEMO,运行时注意保持引擎版本与游戏版本一致2.5.x的,egret兼容性比较差,编辑器我用的也是2.5的...
安卓飞机大战源码,面向对象思想,多线程,包含注释. 最近闲来无事看看安卓的api做一个飞机大战. 如有转发需声明作者:吴年和. 本代码无偿开源. 图片与声音我就不提供了. package com.example.planebigwar.entity; ...
借用雷霆战机素材开发,有2种主机,3种副武器,3种僚机,副武器为机关枪,跟踪弹,定向离子炮,僚机为穿甲弹,爆破弹,散弹,3种装甲(影响生命值),关卡模式为3关,无限模式未开放,源码仅供参考,开发环境为eclipse+安卓5.0,基于...
本项目是一个基于Cocos2dx开发的飞机大战安卓小游戏项目源码,图片素材取自微信飞机大战。本站之前也介绍过一个飞机大战的源码http://www./source/5059.html,不过那个没有使用任何第三方的东西,本游戏的玩法与微信...
Android 飞机大战
本人刚学习Android游戏开发,自己做了个非常简单的小游戏(注:不是打飞机,而是飞机躲避子弹),由于本人刚学习,所以画面做的有些粗糙,希望大家见谅。 本资源包括源码,PPT,APK,安装部署文件
看上去资源文件完整,代码写于2016年7月,里面有大量游戏编写的技巧,代码中都有丰富注释,可为由Java转向Android开发的新手提供有力的参考范例,本代码是达内课堂的一个源代码,有环境的可顺利编译运行。
本项目是一个基于Cocos2dx开发的飞机大战安卓小游戏项目源码,图片素材取自微信飞机大战。
飞机大战游戏java源码 PlaneGame 飞机大战游戏:主要演示Kotlin语言环境下的SurfaceView+多线程并发操作 现在手机上的游戏无论大小都用游戏引擎开发了,毕竟游戏开发和应用开发是两个领域,所涉及的技术栈和专业知识...
Unity游戏项目源码太空银河飞机大战Space Squadron - Galaxy Shooter 支持Unity5.6及以上 你是太空射击游戏的粉丝吗?看看《太空中队: 银河射手》吧,终极的天空之力游戏。你们的任务是在银河系中令人震惊的地方进行...
飞机大战游戏java源码 使用 Android Stduio 3.5 开发的,安卓打飞机游戏 素材来源于网上,算法原创 由于本人不喜欢用 java Bean 那种方式,所以属性全定义为 public ,代码别具一格。重用性,逻辑性强。 更新说明 1...
这是一款刺激的类似宇宙大战的游戏,发炮弹攻击的游戏,android飞机飞行躲避攻击、并攻击敌机的一种游戏,控制方法:通过上下左右键控制飞机的移动、通过手机的A键发射炮弹。这个游戏代码写的相当不错,特别是对于...
彩图版飞机大战的程序源码.rar