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

 

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

 

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

 

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

Java代码  

android版飞机大战游戏奖励代码 飞机大战安卓版_android

1. holder.unlockCanvasAndPost(canvas);  
2.   
3. if (!isEnemyBullet()) {  
4. 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. 2)  
13.                                 && bullet.getY() > enemyPlan.getY()  
14. 2)) {  
15.   
16. if (emPlanes != null && emPlanes.size() > 0) {  
17.                                 EnemyPlane plane = emPlanes.get(i);  
18. if(plane != null){  
19. 1);  
20. if (emPlanes.get(i).getLife() <= 0) {  
21. true);  
22.                                     }  
23.                                 }  
24.   
25.                             }  
26. false);  
27. // 子弹消失  
28.                         }  
29.                     }  
30.                 }  
31. else {  
32. 30);  
33. // 此时是子弹打中了你控制的飞机  
34. if (bullet.getX() > yourPlane.getX()  
35. 2)  
36.                         && bullet.getY() > yourPlane.getY()  
37. 2)) {  
38.   
39.                       
40. 1);  
41.   
42. if (yourPlane.getLife() <= 0) {  
43. // 此时你的飞机不能再进行发射  
44. false);  
45. // 发生爆炸  
46.   
47.                     }  
48. // 子弹消失  
49. false);  
50. // 立马跳出  
51. break;  
52.                 }  
53.             }  
54.   
55.

 

发生planeBoom()代码:

 

 

Java代码  

android版飞机大战游戏奖励代码 飞机大战安卓版_android

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

 

 

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

Java代码  

android版飞机大战游戏奖励代码 飞机大战安卓版_android

    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. new Paint();  
    44.         paint.setColor(Color.BLUE);  
    45.         canvas.drawText(“BOOM”, plane.getX(), plane.getY(), paint);  
    46. 5, plane.getY()+5, paint);  
    47. 10, plane.getY()+10, paint);  
    48. 15, plane.getY()+15, paint);  
    49.         holder.unlockCanvasAndPost(canvas);  
    50. 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中缺少两个属性:

     

    Java代码  

    android版飞机大战游戏奖励代码 飞机大战安卓版_android

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

     

     

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

     

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

     

    Java代码  

    android版飞机大战游戏奖励代码 飞机大战安卓版_android

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

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

     

    Java代码  

    android版飞机大战游戏奖励代码 飞机大战安卓版_android

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

       

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

       

      Java代码  

      android版飞机大战游戏奖励代码 飞机大战安卓版_android

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

       

       

       

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