为什么80%的码农都做不了架构师?>>>   

本文章属于原创性文章,珍惜他人劳动成果,转载请注明出处: 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{//飞机爆炸中的planeprivate Plane plane;//上下文private Context context;//private SurfaceHolder holder;private Boolean isenemy;public PlaneBoomRunnable(Context context, SurfaceHolder holder) {super();this.context = context;this.holder = holder;}@Overridepublic 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/

转载于:https://my.oschina.net/pmroad/blog/357062

《飞机大战》安卓游戏开发源码(终)相关推荐

  1. 《飞机大战》安卓游戏开发源码(三)

    为什么80%的码农都做不了架构师?>>>    本文章属于原创性文章,珍惜他人劳动成果,转载请注明出处:http://www.pm-road.com/index.php/2014/1 ...

  2. Java窗体小游戏开发飞机大作战Java小游戏开发源码

    Java窗体小游戏开发飞机大作战Java小游戏开发源码

  3. C语言学习教程:搬山游戏开发源码

    C语言学习教程:搬山游戏开发源码 #include<stdio.h> void main() {int n,k,x,y,cc,pc,g;clrscr();puts("****** ...

  4. C语言学习教程:超级玛丽游戏开发源码分享

    C语言学习教程:超级玛丽游戏开发源码分享 这里推荐一下我建的C/C++语言学习交流秋秋裙,秋秋搜索群名称:小凯C/C++语言学习之家,裙里有不错的学习教程,从入门到项目实战.学习开发用到的开发工具,专 ...

  5. 【转】微信小游戏开发源码_教程_工具_资源最新集合

    [小游戏资源] 微信小游戏开发资源目录 一.微信官方游戏教程 小游戏简易教程 小游戏API大全 小游戏开发工具 二.微信小游戏图标资源 Game-icons.net 三.微信小游戏图片资源 Super ...

  6. [小游戏] 微信小游戏开发源码_教程_工具_资源最新集合

    [小游戏资源] 微信小游戏开发资源目录 一.微信官方游戏教程 小游戏简易教程 小游戏API大全 小游戏开发工具 二.微信小游戏图标资源 Game-icons.net 三.微信小游戏图片资源 Super ...

  7. C语言—飞机大战小游戏

    哈工大经典C语言大作业-飞机大战小游戏,源码如下,已经通过编译获得评分19+ (满分20)当时还是太菜了呜呜呜. 可以给大家参考一下,好像本来是加了音乐的,但是你们可能没有对应的音乐MP3文件,所以如 ...

  8. html+javascript实现的网页版飞机大战小游戏源码

    html+javascript实现的网页版飞机大战小游戏源码 完整代码下载地址: html+javascript实现的网页版飞机大战小游戏源码 index.html <!DOCTYPE html ...

  9. 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端

    简介: 飞机大战HTML5游戏源码是一款基于Canvas制作的网页版飞机大战游戏,画质精美的飞机大战手机端游戏源码 网盘下载地址: http://kekewangLuo.net/W1S2LQcqAT2 ...

最新文章

  1. tomcat 修改默认访问根目录
  2. 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度...
  3. vs2008编译中文变量名的lua解释器环境
  4. 数据中心水冷系统备品备件管理新思路
  5. 用 docker secrets 保存 appsettings.Production.json
  6. 一文抽丝剥茧带你掌握复杂Gremlin查询的调试方法
  7. appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下
  8. 计算机二级基础知识微盘,计算机二级C++基础知识(整理版).pdf
  9. 语音识别技术原理是什么 讯飞语音识别技术特点介绍【详解】
  10. 全角字符unicode码对应表
  11. 定时任务Quartz配置
  12. qss之QRadioButton
  13. azw3转换为pdf_PDF怎么转换为PPT?PDF秒转PPT秘技!
  14. 服务器显示媒体已断开,媒体断开是什么?Win10专业版如何修复媒体断开?
  15. Spark小文件合并
  16. 书单丨压箱底儿的10本传世计算机经典著作
  17. 数据库SQL语句的增删改查(总结)
  18. Lucene根据字段进行自定义搜索扩展
  19. 医用雾化器方案开发设计
  20. 高中计算机生机比例,例谈高中诗歌教学之“多媒体信息技术深度融合”

热门文章

  1. 【伯乐在线】100个高质量Java开发者博客
  2. iperf测UDP和TCP丢包率及带宽
  3. nfs-ganesha配置文件解析
  4. Python实效编程02 -- 东北方言朗读
  5. kali 简单版攻击WiFi(附详细教程)
  6. 大专生拿到阿里 offer,却担心背调不过,网友:985 在你面前黯淡无光
  7. Shell 的string 操作
  8. Hutool工具包Excel工具使用
  9. Mysql 判空函数详解 isnull()、ifnull()
  10. python关键字evaluate_python – Keras中的model.evaluate()返回了什么值?