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

前言:最 近闲来无事,而且也是因为刚接触安卓不久,所以萌生了以后在开发web 项目的过程中同样开发安卓手游,因前一段时间项目需要独立完成了一款功能型手机app ,该App比较简单,全是按钮操作,也就是Activity之间的相互传值与过渡,所以对安卓的基本知识有了一定了解,在我的印象当中,感觉安卓手游是比 较困难的,但是有困难就要克服,所以有了开发游戏的念头。

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

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

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

Java代码  

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

发生planeBoom()代码:

Java代码  

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

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

Java代码  

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

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

Java代码  

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

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

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

Java代码  

  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,更新飞机爆炸

Java代码  

  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中增加判断方法:

Java代码  

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

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

时间: 2024-10-09 16:29:20

《飞机大战》安卓游戏开发源码(终)的相关文章

农场游戏开发源码

农场游戏开发源码,农场游戏开发,果园游戏开发,皮皮果游戏开发,一文鸡系统开发,农场种植系统开发找王经理:139-2896-7204(微点) 果园模式,作为现在火爆的理财游戏模式,深受大家的喜爱.皮皮果.一文鸡.UU农场等相信大家都非常熟悉了.现在果园模式又添一新成员:金豆农场.金豆农场由资深理财团队合力打造,对市面上果园模式进行提炼.优化.欢迎前来体验! 随着互联网思维的爆发,很多行业都硬性将互联网思维与所处行业进行结合,而本身并没有好的设计.好的产品,纯粹靠互联网思维进行"忽悠"式营

C语言学习教程:搬箱子游戏开发源码分享

C语言学习教程:搬箱子游戏开发源码分享,推箱子游戏的规则非常简单,就是用尽量少的推动或移动把所有箱子都推到目标点上.箱子只能推动而不能拉动:一次只能推动一个箱子. 源码截图,由于有点多就不一 一截图了,完整的可以加我交流裙免费领取,这里推荐一下我建的C/C++语言学习交流秋秋裙,前三位是:110,中间三位是:355,最后三位是:025,为了让学习变得轻松,高效!给大家分享一套教学资源,帮助大家在成为C/C++语言开发高手的道路上披荆斩棘,群内每晚八点免费直播授课,讲解C/C++语言案例,同时还有

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

[小游戏资源] 微信小游戏开发资源目录 一.微信官方游戏教程 小游戏简易教程 小游戏API大全 小游戏开发工具 二.微信小游戏图标资源 Game-icons.net 三.微信小游戏图片资源 Super Game Asset GameDev Market envato market Game Art Partners KENNEY 四.微信小游戏音频资源 工具类 Audacity 9 款音频压缩软件推荐 7 款混音软件推荐 7 款降噪软件推荐 资源类 爱给音效库 freesound Soundim

英伦大厦游戏系统app开发源码解析

英伦大厦游戏系统app开发源码解析(微or电 158.1500.1390 小凡团队)英伦大厦开发系统,英伦大厦系统模式定制开发,英伦大厦app开发,英伦大厦游戏开发系统,英伦大厦平台开发,英伦大厦模式系统开发. 2017年,是一个崭新的时代,传统的电商模式被颠覆,以"互联网+"为代表的生产技术革命正悄然而至,商业步入"全球分享经济"时代,以"成本小,速度快,操作简便"为特点,一场"消费关系"的大解放已逐渐席卷全球,裂变的模式让

可达鸭乐园系统开发源码

可达鸭乐园系统开发源码,可达鸭乐园系统开发,可达鸭乐园系统开发,找139-2896-7204微/电,可达鸭乐园系统开发软件,可达鸭模式开发,可达鸭平台开发,可达鸭乐园系统开发 论是从广义还是狭义看,移动互联网都不会抛弃桌面互联网上的产品免费 + 广告盈利的模式.在市场早期,广告形式比较单一,大部分早期创业公司尚未考虑盈利,大部分广告主尚不熟悉移动广告技术的时候,自然不会看到广告大面积的成为一种盈利模式.但是从长期来看,用户在移动媒体上的注意力还是会通过移动广告的形式形成盈利. 移动互联网大潮正以

开鑫牧场系统开发源码

开鑫牧场系统开发源码,开鑫牧场农场模式开发,开鑫牧场系统开发,开鑫牧场模式开发,开鑫牧场app开发,开鑫牧场平台开发找王经理:139-2896-7204(微电) 大众创新,万众创业,用互联网+的思维去重新拥抱传统行业,人人参与互动,多方参与合作,够拾惠紧跟随时代发展,创新资源,创新结构.商家.消费者全民参与,全民互动.一站式服务,互联互通,一起步入全民共赢时代. 近几年来,越来越多企业从不认同互联网开始转入高度重视互联网营销,那么问题出现了!你是否真正的掌握了互联网营销的方法,真正让互联网营销为

金豆农场系统开发源码

金豆农场系统开发源码,金豆农场理财游戏开发, 找王经理139-2896-7204(可加微信),金豆农场系统开发,金豆农场平台模式开发,金豆农场怎么玩?金豆农场app开发平台 我们知道,用户对于生活服务需求,往往是随时随地,这就决定了通过传统互联网模式会有很大局限性,而这个局限性在手机端是可以完全被DuLi的.随着科学技术的不断发展,电子类产品进化的尤为迅速,而与我们生活息息相关的手机则表现的更为明显,现阶段的手机分布越来越广,功能也越来越完善,因其方便性.随时性,越来越多的人喜欢用手机上网浏览信

荣耀农场系统模式开发源码解析

荣耀农场系统模式开发源码解析(微or电 158.1500.1390 小凡团队)荣耀农场模式开发,荣耀农场系统模式开发,荣耀农场平台开发系统,荣耀农场app开发. 互联网颠覆了传统的商业模式,创造了庞大的商业机遇,更改变了世界财富的分配定律!互联网已经无国界,已经引申到世界每一个角落.互联网与电子商务的结合,必将创造一个又一个新奇迹!在历史发展的当今世界.21世纪,整个世界经济发生了巨大的变化!21世纪更是一个移动互联网经济占据鳌头的市场!谁抓住了互联网市场趋向谁就抓住了,在互联网一体化的今天,信

微信公共平台开发源码

public partial class Index : System.Web.UI.Page { public string token = "AAA";//自己的 token protected void Page_Load(object sender, EventArgs e) { #region ////------签名验证 //string echostr = Request["echostr"].ToString(); //WriteLog(echost