好了,下面就开始进行游戏的总体设计
游戏的界面主要有三个界面组成,分别为:游戏开始前的准备界面ReadyView,游戏进行时的界面MainView和游戏结束时的界面EndView。
界面视图分别如下:
因为JAVA编程是面向对象的思想,所以我们要对游戏中的对象进行抽象。该游戏中的所有能够移动的物体都可看做是一个对象,它们有共同的属性和方法,如:横坐标、纵坐标、宽度、高度、逻辑方法、绘图方法等。因此我们把它们的所有共同的属性和方法封装成一个抽象的GameObject类,该类将会是游戏中所有对象的父类。
GameObject类:
[java] view plain copy
1. /*游戏对象类*/
2. abstract public class
3. protected int currentFrame; // 当前动画帧
4. protected int speed; // 对象的速度
5. protected float object_x; // 对象的横坐标
6. protected float object_y; // 对象的纵坐标
7. protected float object_width; // 对象的宽度
8. protected float object_height; // 对象的高度
9. protected float screen_width; // 屏幕的宽度
10. protected float screen_height; // 屏幕的高度
11. protected boolean isAlive; // 判断是否存活
12. protected Paint paint; // 画笔对象
13. protected Resources resources; // 资源类
14. // 构造函数
15. public
16. this.resources = resources;
17. this.paint = new
18. }
19. // 设置屏幕宽度和高度
20. public void setScreenWH(float screen_width, float
21. this.screen_width = screen_width;
22. this.screen_height = screen_height;
23. }
24. // 初始化数据//参数分别为:速度增加的倍数,x中心坐标,y中心坐标
25. public void initial(int arg0,float arg1,float
26. // 初始化图片资源的
27. protected abstract void
28. // 对象的绘图方法
29. public abstract void
30. // 释放资源的方法
31. public abstract void
32. // 检测碰撞的方法
33. public boolean
34. return true;
35. }
36. // 对象的逻辑方法
37. public void
38. //getter和setter方法
39. public int
40. return
41. }
42. public void setSpeed(int
43. this.speed = speed;
44. }
45. public float
46. return
47. }
48. public void setObject_x(float
49. this.object_x = object_x;
50. }
51. public float
52. return
53. }
54. public void setObject_y(float
55. this.object_y = object_y;
56. }
57. public float
58. return
59. }
60. public void setObject_width(float
61. this.object_width = object_width;
62. }
63. public float
64. return
65. }
66. public void setObject_height(float
67. this.object_height = object_height;
68. }
69. public boolean
70. return
71. }
72. public void setAlive(boolean
73. this.isAlive = isAlive;
74. }
75. }
接着我们要看下,游戏中对象有玩家控制的飞机、小型的敌机、中型的敌机、大型的敌机、BOSS敌机、单发子弹、双发子弹、BOSS的子弹、导弹物品和子弹物品。所以我们又可以将它们分成:玩家的飞机类(因为玩家飞机的实现和敌机的实现有些不同,所以分开实现)、敌机类EnemyPlane(包括小型的、中型的、大型的和BOSS)、子弹类Bullet和物品类GameGoods,这些游戏对象类都是继承GameObject类。
敌机类EnemyPlane:
[java] view plain copy
1. /*敌机类*/
2. public class EnemyPlane extends
3. protected int score; // 对象的分值
4. protected int blood; // 对象的当前血量
5. protected int bloodVolume; <span style="white-space:pre"> </span> // 对象总的血量
6. protected boolean isExplosion; // 判断是否爆炸
7. protected boolean isVisible; // 对象是否为可见状态
8. public
9. super(resources);
10. // TODO Auto-generated constructor stub
11. // 初始化图片资源
12. }
13. //初始化数据
14. @Override
15. public void initial(int arg0,float arg1,float
16.
17. }
18. // 初始化图片资源
19. @Override
20. public void
21. // TODO Auto-generated method stub
22.
23. }
24. // 对象的绘图函数
25. @Override
26. public void
27. // TODO Auto-generated method stub
28.
29. }
30. // 释放资源
31. @Override
32. public void
33. // TODO Auto-generated method stub
34.
35. }
36. // 对象的逻辑函数
37. @Override
38. public void
39. // TODO Auto-generated method stub
40.
41. }
42. // 被攻击的逻辑函数
43. public void attacked(int
44. // TODO Auto-generated method stub
45.
46. }
47. // 检测碰撞
48. @Override
49. public boolean
50.
51. return true;
52. }
53. // 判断能否被检测碰撞
54. public boolean
55. // TODO Auto-generated method stub
56. return false;
57. }
58. //getter和setter方法
59. public int
60. // TODO Auto-generated method stub
61. return
62. }
63. public void setScore(int
64. // TODO Auto-generated method stub
65. this.score = score;
66. }
67. public int
68. // TODO Auto-generated method stub
69. return
70. }
71. public void setBlood(int
72. // TODO Auto-generated method stub
73. this.blood = blood;
74. }
75. public int
76. // TODO Auto-generated method stub
77. return
78. }
79. public void setBloodVolume(int
80. // TODO Auto-generated method stub
81. this.bloodVolume = bloodVolume;
82. }
83. public boolean
84. // TODO Auto-generated method stub
85. return
86. }
87. }
敌机类增加了分值、血量、两个判断标记属性及其getter和setter方法。
子弹类Bullet:
[java] view plain copy
1. /*子弹基类*/
2. public class Bullet extends
3. protected int
4. public
5. super(resources);
6. // TODO Auto-generated constructor stub
7. initBitmap();
8. }
9. @Override
10. protected void
11. // TODO Auto-generated method stub
12.
13. }
14. @Override
15. public void
16. // TODO Auto-generated method stub
17.
18. }
19. @Override
20. public void
21. // TODO Auto-generated method stub
22.
23. }
24. // 检测碰撞的方法
25. @Override
26. public boolean
27. return true;
28. }
29. //getter和setter方法
30. public int
31. // TODO Auto-generated method stub
32. return
33. }
34. public void setHarm(int
35. // TODO Auto-generated method stub
36. this.harm = harm;
37. }
38. }
子弹类增加了伤害值及其getter和setter方法。
物品类GameGoods:
[java] view plain copy
1. /*物品类*/
2. public class GameGoods extends
3. protected
4. private int direction; //物品的方向
5. public
6. super(resources);
7. // TODO Auto-generated constructor stub
8. initBitmap();
9. }
10. // 初始化数据
11. @Override
12. public void initial(int arg0,float arg1,float
13.
14. }
15. // 初始化图片资源的
16. @Override
17. protected void
18. // TODO Auto-generated method stub
19.
20. }
21. // 对象的绘图方法
22. @Override
23. public void
24. // TODO Auto-generated method stub
25.
26. }
27. // 释放资源的方法
28. @Override
29. public void
30. // TODO Auto-generated method stub
31.
32. }
33. // 对象的逻辑函数
34. @Override
35. public void
36.
37. }
38. // 检测碰撞
39. @Override
40. public boolean isCollide(GameObject obj) { return false;
41. <span style="white-space:pre"> </span>}
42. }
玩家的飞机类除了继承GameObject类以外,还要实现一个IMyPlane接口。
IMyPlane接口
[java] view plain copy
1. public interface
2. public float
3. public void setMiddle_x(float
4. public float
5. public void setMiddle_y(float
6. public boolean
7. public void setChangeBullet(boolean
8. //发射子弹的方法
9. public void
10. //初始化子弹的方法
11. public void
12. //更换子弹的方法
13. public void
14. }
玩家飞机类MyPlane:
[java] view plain copy
1. /*玩家飞机的类*/
2. public class MyPlane extends GameObject implements
3. private float middle_x; // 飞机的中心坐标
4. private float
5. private long startTime; // 开始的时间
6. private long endTime; // 结束的时间
7. private boolean isChangeBullet; // 标记更换了子弹
8. private Bitmap myplane; // 飞机飞行时的图片
9. private Bitmap myplane2; // 飞机爆炸时的图片
10. private List<Bullet> bullets; // 子弹的序列
11. private
12. private
13. public
14. super(resources);
15. // TODO Auto-generated constructor stub
16.
17. }
18. public void
19. this.mainView = mainView;
20. }
21. // 设置屏幕宽度和高度
22. @Override
23. public void setScreenWH(float screen_width, float
24.
25. }
26. // 初始化图片资源的
27. @Override
28. public void
29. // TODO Auto-generated method stub
30.
31. }
32. // 对象的绘图方法
33. @Override
34. public void
35. // TODO Auto-generated method stub
36.
37. }
38. // 释放资源的方法
39. @Override
40. public void
41. // TODO Auto-generated method stub
42.
43. }
44. //发射子弹
45. @Override
46. public void
47. // TODO Auto-generated method stub
48.
49. }
50. //初始化子弹
51. @Override
52. public void
53. // TODO Auto-generated method stub
54.
55. }
56. //更换子弹
57. @Override
58. public void
59. // TODO Auto-generated method stub
60.
61. }
62. //判断子弹是否超时
63. public void
64.
65. }
66. //getter和setter方法
67. public void setStartTime(long
68. this.startTime = startTime;
69. }
70. @Override
71. public boolean
72. return
73. }
74. @Override
75. public void setChangeBullet(boolean
76. this.isChangeBullet = isChangeBullet;
77. }
78. @Override
79. public float
80. return
81. }
82. @Override
83. public void setMiddle_x(float
84. this.middle_x = middle_x;
85. this.object_x = middle_x - object_width/2;
86. }
87. @Override
88. public float
89. return
90. }
91. @Override
92. public void setMiddle_y(float
93. this.middle_y = middle_y;
94. this.object_y = middle_y - object_height/2;
95. }
96. }
以上列出的类除GameObject类以外,其它类中的一些方法都省略了其实现,这会在接下来讲的。
android游戏开发——微信打飞机(二):