OperatorPlace.cpp
上传用户:semy2100
上传日期:2013-01-22
资源大小:3633k
文件大小:6k
源码类别:

射击游戏

开发平台:

Visual C++

  1. /********************************************************************
  2. *                        空运爆发                                    *
  3. *                       Version 2.0                                  *
  4. * 本游戏全部代码由:                                                 *
  5. *                   冲天实验室   梁锋 编写                           *
  6. *                    邮箱:lenwine@126.com                           *
  7. *                bbs: http://free2.e-168.cn/lenwind (正在开发中...)  *
  8. **********************************************************************/
  9. #include "stdafx.h"
  10. //////////////////////////////////////////////////////////////////////
  11. // Construction/Destruction
  12. //////////////////////////////////////////////////////////////////////
  13. int OperatorPlace::i=0;
  14. //我方控制区
  15. OperatorPlace::OperatorPlace(Manager *mgr,int xv,int yv,int xyi):ShootPlane(mgr,xv,yv)
  16. {
  17. i=xyi;//判断是那架战机
  18. switch(i)
  19. {
  20. case 0:
  21. bx=0;//切割位图从x坐标为0
  22. by=0;//切割位图从y坐标为0
  23. Bitlong=29;//我机的宽
  24. Bittall=33;//我机的高
  25. rx=6;//切割位图从x坐标为6
  26. ry=11;//切割位图从y坐标为11
  27. rlong=17;//我机的发出时的子弹宽
  28. rtall=19;//我机的发出时的子弹高
  29. alive=3;//初始化时活率为3
  30. decedent=0;//初始化时击中敌机数目
  31. result=0;//初始化时得分为0
  32. break;
  33. case 1:
  34. bx=43;//切割位图从x坐标为0
  35. by=2;//切割位图从y坐标为0
  36. Bitlong=33;//我机的宽
  37. Bittall=33;//我机的高
  38. rx=8;//切割位图从x坐标为6
  39. ry=11;//切割位图从y坐标为11
  40. rlong=19;//我机的发出时的子弹宽
  41. rtall=19;//我机的发出时的子弹高
  42. alive2=3;//初始化时活率为3
  43. decedent2=0;//初始化时击中敌机数目
  44. result2=0;//初始化时得分为0
  45.     break;
  46. }
  47. sp=3;
  48. spx=0;
  49. spy=0;
  50. Shooting=false;//我们没按空格键,我们战机不发弹!!
  51. ShootPlane::bombStyle=Bomb::OPERATOR_SHOOT;
  52.     ChangePlace();
  53. }
  54. void OperatorPlace::Update2()
  55. {
  56. if(!Work)//如果不发射,则清屏
  57. {
  58. mManager->RefreshScreen2();
  59. return;
  60. }
  61. if((alive2>0))//还活着吗?是则继续可以操作
  62. {
  63. if(x+spx<80)//是否达到超出客户区,是!则保持X在横坐标内边界(左)
  64. {
  65. x=80;
  66. spx=0;
  67. }
  68. else if(y+spy<0)//是否达到超出客户区,是!则保持Y在纵坐标内边界(上)
  69. {
  70. y=0;
  71. spy=0;
  72. }else if(x+Bitlong+spx>Manager::Imglong-80)//是否达到超出客户区,是!则保持X在横坐标内边界(右)
  73. {
  74. x=Manager::Imglong-Bitlong-80;
  75. spx=0;
  76. }else if(y+Bittall+spy>Manager::Imgtall-1)//是否达到超出客户区,是!则保持Y在纵坐标内边界(下)
  77. {
  78. y=Manager::Imgtall-Bittall-1;
  79. spy=0;
  80. }
  81. }
  82. ShootPlane::Update2();
  83. }
  84. void OperatorPlace::Update()
  85. {
  86. if(!Work)//如果不发射,则清屏
  87. {
  88. mManager->RefreshScreen();
  89. return;
  90. }
  91. if((alive>0))//还活着吗?是则继续可以操作
  92. {
  93. if(x+spx<80)//是否达到超出客户区,是!则保持X在横坐标内边界(左)
  94. {
  95. x=80;
  96. spx=0;
  97. }
  98. else if(y+spy<0)//是否达到超出客户区,是!则保持Y在纵坐标内边界(上)
  99. {
  100. y=0;
  101. spy=0;
  102. }else if(x+Bitlong+spx>Manager::Imglong-80)//是否达到超出客户区,是!则保持X在横坐标内边界(右)
  103. {
  104. x=Manager::Imglong-Bitlong-80;
  105. spx=0;
  106. }else if(y+Bittall+spy>Manager::Imgtall-1)//是否达到超出客户区,是!则保持Y在纵坐标内边界(下)
  107. {
  108. y=Manager::Imgtall-Bittall-1;
  109. spy=0;
  110. }
  111. }
  112. ShootPlane::Update();
  113. }
  114. void OperatorPlace::HoldWea()
  115. {
  116. bombStyle=(Bomb::BOMBSTYLE)((bombStyle+2)%3);//这里设置下种不同发弹方式
  117. }
  118. void OperatorPlace::HoldWea2()
  119. {
  120. bombStyle=(Bomb::BOMBSTYLE)((bombStyle+2)%3);//这里设置下种不同发弹方式
  121. }
  122. void OperatorPlace::Start(START moving)//控制上、下、左、右方向键
  123. {
  124. if(alive<=0)return;
  125. switch(moving)
  126. {
  127. case MOVL:
  128. spx=-sp-1;//左移时的速度x
  129. spy=0;//左移时的速度y
  130. break;
  131. case MOVR:
  132. spx=sp+1;//右移时的速度x
  133. spy=0; //右移时的速度y
  134. break;
  135. case MOVU:
  136. spx=0;//上、移时的速度x
  137. spy=-sp-1;//上移时的速度y
  138. break;
  139. case MOVD:
  140. spx=0;//下、移时的速度x
  141. spy=sp+1;//下、移时的速度y
  142. break;
  143. case MOVLU:
  144. spx=-0.7*sp-1;//上、左移时的速度x
  145. spy=-0.7*sp-1;//上、左、移时的速度y
  146. break;
  147. case MOVLD:
  148. spx=-0.75*sp-1;//下、左、移时的速度x
  149. spy=0.75*sp+1;//下、左、移时的速度y
  150. break;
  151. case MOVRU:
  152. spx=0.75*sp+1;//上、右移时的速度x
  153. spy=-0.75*sp-1;//上、右移时的速度y
  154. break;
  155. case MOVRD:
  156. spx=0.75*sp+1;//下、右移时的速度x
  157. spy=0.75*sp+1;//下、右移时的速度y
  158. break;
  159. case STOPMOV:
  160. spx=0;//上、下、左、右移时的速度x
  161. spy=0;//上、下、左、右移时的速度y
  162.     break;
  163. case BEGINSHOOT:
  164. beginShoot();
  165. break;
  166. case STOPSHOOT:
  167. stopShoot();
  168. mManager->cs_play->ActionStop();//声音的播放
  169. mManager->co_play->ActionStop();
  170. mManager->ms_play->ActionStop();
  171. break;
  172. case HOLDWEA:
  173.     HoldWea();//我机的换弹
  174. break;
  175. }
  176. }
  177. void OperatorPlace::Start2(START moving)
  178. {
  179. if(alive2<=0)return;
  180. switch(moving)
  181. {
  182. case MOVL:
  183. spx=-sp-1;//左移时的速度x
  184. spy=0;//左移时的速度y
  185. break;
  186. case MOVR:
  187. spx=sp+1;//右移时的速度x
  188. spy=0; //右移时的速度y
  189. break;
  190. case MOVU:
  191. spx=0;//上移时的速度x
  192. spy=-sp-1;//上移时的速度y
  193. break;
  194. case MOVD:
  195. spx=0;//下移时的速度x
  196. spy=sp+1;//下移时的速度y
  197. break;
  198. case MOVLU:
  199. spx=-0.7*sp-1;//上、左、移时的速度x
  200. spy=-0.7*sp-1;//上、左、移时的速度y
  201. break;
  202. case MOVLD:
  203. spx=-0.75*sp-1;//下、左、移时的速度x
  204. spy=0.75*sp+1;//下、左、移时的速度y
  205. break;
  206. case MOVRU:
  207. spx=0.75*sp+1;//上、右移时的速度x
  208. spy=-0.75*sp-1;//上、右移时的速度y
  209. break;
  210. case MOVRD:
  211. spx=0.75*sp+1;//下、右移时的速度x
  212. spy=0.75*sp+1;//下、右移时的速度y
  213. break;
  214. case STOPMOV:
  215. spx=0;//上、下、左、右移时的速度x
  216. spy=0;//上、下、左、右移时的速度y
  217.     break;
  218. case BEGINSHOOT:
  219. beginShoot();
  220. break;
  221. case STOPSHOOT:
  222. stopShoot();
  223. mManager->cs_play->ActionStop();
  224. mManager->co_play->ActionStop();
  225. mManager->ms_play->ActionStop();
  226. break;
  227. case HOLDWEA:
  228.     HoldWea2();//我机换弹
  229. break;
  230. }
  231. }
  232. void OperatorPlace::Shoot()//我方发射
  233. {
  234. if(mManager->Time-EndShoot<Bomb::GetShoot(bombStyle))
  235. return;
  236. mManager->OperatorShoot(this,0);
  237. mManager->OperatorShoot(this,1);
  238. EndShoot=mManager->Time;
  239. }