object.h
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:9k
源码类别:

游戏

开发平台:

Visual C++

  1. #ifndef _ASIDER_TANK_ALPHA3_OBJECT_H_
  2. #define _ASIDER_TANK_ALPHA3_OBJECT_H_
  3. #define BULLET_MAXCHANG 4
  4. #define MAXSPEEDONICE 8
  5. #define MAXTANKSPEED 8
  6. #define DEFTANKSPEED 4
  7. #define DEFBULLETSPEED 12
  8. #define DEFBULLETWIDTH 16
  9. #define DEFBULLETHEIGHT 16
  10. #define OBJSTAT_UNUSED 0
  11. #define OBJSTAT_BORN 0x010000
  12. #define OBJSTAT_LIVE 0x020000
  13. #define OBJSTAT_DIE 0x040000
  14. #define OBJSTAT_CADAVER 0x080000
  15. #define EQUIP_SHIP 0x0001
  16. #define EQUIP_ICE 0x0002
  17. struct TANKCMD {
  18. unsigned int cmd;
  19. bool fire;
  20. };
  21. //-----------------------------------------------------------------------------
  22. // Type enumeration
  23. //-----------------------------------------------------------------------------
  24. enum ObjectType { OBJTYPE_NONE, OBJTYPE_TANK, OBJTYPE_BULLET,
  25.  OBJTYPE_BLOCK, OBJTYPE_BASE, OBJTYPE_EFFECT,
  26.  OBJTYPE_FOOD };
  27. enum PropertyType { PROTYPE_NONE };
  28. enum EffectType { EFFECT_NONE, EFFECT_TANKBOOM, EFFECT_BULLETBOOM };
  29. enum DirectionType { DIR_NONE, DIR_RIGHT, DIR_DOWN, DIR_UP, DIR_LEFT, DIR_MAX };
  30. enum TeamType { TEAM_HOME, TEAM_ENEMY, TEAM_NEUTRAL };
  31. enum LocateIndex { LOC_BLOCK_NONE, LOC_BLOCK_BRICK0, LOC_BLOCK_IRON0,
  32. LOC_BLOCK_RIVER0, LOC_BLOCK_RIVER1, LOC_BLOCK_RIVER2,
  33. LOC_BLOCK_GRASS0, LOC_BLOCK_ICE0,
  34. LOC_OBJECT_TANK0, LOC_OBJECT_TANK1, LOC_OBJECT_BULLET0
  35. };
  36. enum FoodType { FOOD_SHIP, FOOD_KEEPBASE, FOOD_POWERUP, FOOD_BLOODUP,
  37. FOOD_SPEEDUP, FOOD_MAX };
  38. //-----------------------------------------------------------------------------
  39. // Classes defined in this header file 
  40. //-----------------------------------------------------------------------------
  41. class CObject;
  42. class CMobileObject;
  43. class CProperty;
  44. class CObjBase;
  45. class CObjBlock;
  46. class CObjFood;
  47. class CObjTank;
  48. class CObjBullet;
  49. class CObjEffect;
  50. //-----------------------------------------------------------------------------
  51. // Name: class CObject
  52. // Desc: Base Class of all the objects which can change its appearance
  53. // or position, or just its values of properties
  54. //-----------------------------------------------------------------------------
  55. class CObject
  56. {
  57. protected:
  58. DWORD m_dwObjType;
  59. DWORD m_dwObjStat;
  60. int m_nStatCounter;
  61. int m_nLeft;
  62. int m_nTop;
  63. int m_nWidth;
  64. int m_nHeight;
  65. DWORD m_dwFrameType;
  66. int m_nTotalFrame;
  67. int m_nCurrentFrame;
  68. DWORD m_dwLastTime;
  69. DWORD m_dwPersistTime;
  70. public:
  71. CObject();
  72. ~CObject();
  73. // Access functions
  74. DWORD GetType() { return m_dwObjType; }
  75. DWORD GetStat() { return m_dwObjStat; }
  76. void SetStat( DWORD s ) { m_dwObjStat = s; }
  77. int GetLeft() { return m_nLeft; }
  78. int GetTop() { return m_nTop; }
  79. void SetPos( int l, int t ) { m_nLeft = l; m_nTop = t; }
  80. void SetOffset( int h, int v ) { m_nLeft += h; m_nTop += v; }
  81. int GetWidth() { return m_nWidth; }
  82. int GetHeight() { return m_nHeight; }
  83. RECT GetRect();
  84. DWORD GetFrameType() { return m_dwFrameType; }
  85. int GetFrameCurrent() { return m_nCurrentFrame; }
  86. int GetFrameTotal() { return m_nTotalFrame; }
  87. void SetTotalFrame( int t ) { m_nTotalFrame = t; }
  88.     // Status functions
  89.     // Creation/destruction methods
  90. // Object methods
  91. void NextFrame( DWORD nowtime );
  92. // bool TestNextFrame() { return ++m_nCurrentFrame < m_nTotalFrame; }
  93. };
  94. //-----------------------------------------------------------------------------
  95. // Name: class CMobileObject
  96. // Desc: Base Class of all the objects which can move
  97. //-----------------------------------------------------------------------------
  98. class CMobileObject : public CObject
  99. {
  100. protected:
  101. int m_nMoveStep;
  102. public:
  103. UINT m_uiDirection;
  104. UINT m_uiTeamType;
  105. public:
  106. CMobileObject();
  107. ~CMobileObject();
  108. // Access functions
  109. int GetStep() { return m_nMoveStep; }
  110. void SetStep( int s ) { m_nMoveStep = s; }
  111. RECT GetNextRect();
  112. RECT GetNextRectStep( int step );
  113. POINT GetDirectionUnit();
  114. };
  115. //-----------------------------------------------------------------------------
  116. // Name: class CProperty
  117. // Desc: Base Class of all the properties whose value may be changed
  118. //-----------------------------------------------------------------------------
  119. class CProperty
  120. {
  121. protected:
  122. int m_nDefaultValue;
  123. int m_nCurrentValue;
  124. int m_nMaxValue;
  125. int m_nMinValue;
  126. public:
  127. CProperty();
  128. ~CProperty();
  129. // Access functions
  130.     // Status functions
  131. bool IsZero() { return m_nCurrentValue == 0; }
  132. bool IsMin() { return m_nCurrentValue == m_nMinValue; }
  133.   
  134.     // Creation/destruction methods
  135. void CreateProperty( int def, int max, int min );
  136.     
  137. // Object methods
  138. int GetPercent( int total ) { return total*m_nCurrentValue/m_nMaxValue; }
  139. void Add( int step );
  140. bool Minus( int step );
  141. };
  142. //-----------------------------------------------------------------------------
  143. // Name: class CObjTank
  144. // Desc: Class of Tank object
  145. //-----------------------------------------------------------------------------
  146. class CObjTank : public CMobileObject
  147. {
  148. bool m_bHome;
  149. bool m_bBoom;
  150. int m_nIndex;
  151. bool m_bHaveBullet;
  152. public:
  153. bool m_bMoving;
  154. bool m_bOnIce;
  155. int m_nIceStep;
  156. UINT m_uiIceDir;
  157. DWORD m_dwEquip;
  158. CProperty m_prtBlood;
  159. int m_nAttack;
  160. public:
  161. CObjTank();
  162. ~CObjTank();
  163. // Status functions
  164. bool IsHomeTeam() { return m_bHome; }
  165. bool HaveBullet() { return m_bHaveBullet; }
  166. // Access functions
  167. int GetBloodPercent(int total) { return m_prtBlood.GetPercent(total); }
  168. void NextStat();
  169. void SetBullet() { m_bHaveBullet = true; }
  170. void RemoveBullet() { m_bHaveBullet = false; }
  171. int GetIndex() { return m_nIndex; }
  172. void Hited( int attack );
  173.   
  174.     // Creation/destruction methods
  175. void CreateTank( int left, int top, bool bHome );
  176.     
  177. // Methods
  178. RECT GetNextRectOnIce();
  179. POINT GetDirUnitOnIce();
  180. };
  181. //-----------------------------------------------------------------------------
  182. // Name: class CObjBullet
  183. // Desc: Base Class of all bullet objects which have expecial effects
  184. //-----------------------------------------------------------------------------
  185. class CObjBullet : public CMobileObject
  186. {
  187. bool m_bHome;
  188. int m_nAttack;
  189. CObjTank *m_obkTank;
  190. public:
  191. CObjBullet();
  192. ~CObjBullet();
  193. // Status functions
  194. bool IsHomeTeam() { return m_bHome; }
  195. // Access functions
  196. void NextStat();
  197. int GetAttack() { return m_nAttack; }
  198.   
  199.     // Creation/destruction methods
  200. void CreateBullet( CObjTank *ptk );
  201.     
  202. // Methods
  203. void Hit( CObjTank *ptk ); 
  204. void Hit( CObjBullet *pblt );
  205. void Rebound() { m_uiDirection = 5 - m_uiDirection; }
  206. };
  207. //-----------------------------------------------------------------------------
  208. // Name: class CObjBullet
  209. // Desc: Base Class of all bullet objects which have expecial effects
  210. //-----------------------------------------------------------------------------
  211. class CObjEffect : public CMobileObject
  212. {
  213. DWORD m_dwEffect;
  214. int m_nAttack;
  215. public:
  216. CObjEffect();
  217. ~CObjEffect();
  218. // Access functions
  219. DWORD GetEffect() { return m_dwEffect; }
  220.     // Creation/destruction methods
  221. void CreateEffect( CObject *pobj );
  222.     
  223. // Methods
  224. };
  225. //-----------------------------------------------------------------------------
  226. // Name: class CObjBase
  227. // Desc: Class of a team's base
  228. //-----------------------------------------------------------------------------
  229. class CObjBase : public CMobileObject
  230. {
  231. bool m_bHome;
  232. public:
  233. CProperty m_ptyBlood;
  234. public:
  235. CObjBase();
  236. ~CObjBase();
  237. // Status functions
  238. bool IsHomeTeam() { return m_bHome; }
  239. // Access functions
  240. RECT GetSurroundRect();
  241.     // Creation/destruction methods
  242.     void CreateBase( int x, int y, bool bHome );
  243. // Methods
  244. };
  245. //-----------------------------------------------------------------------------
  246. // Name: class CObjBase
  247. // Desc: Class of a team's base
  248. //-----------------------------------------------------------------------------
  249. class CObjBlock : public CObject
  250. {
  251. int m_nbx;
  252. int m_nby;
  253. int m_nLand;
  254. public:
  255. CObjBlock();
  256. ~CObjBlock();
  257. // Access functions
  258. int GetBx() { return m_nbx; }
  259. int GetBy() { return m_nby; }
  260. int GetLand() { return m_nLand; }
  261.     // Creation/destruction methods
  262. void CreateObjBlock( int x, int y, int land );
  263.     
  264. // Methods
  265. };
  266. //-----------------------------------------------------------------------------
  267. // Name: class CObjBase
  268. // Desc: Class of a team's base
  269. //-----------------------------------------------------------------------------
  270. class CObjFood : public CObject
  271. {
  272. bool m_bExsit;
  273. bool m_bPresent;
  274. DWORD m_dwType;
  275. public:
  276. CObjFood();
  277. ~CObjFood();
  278. // Access functions
  279. void SetPresent( bool p ) { m_bPresent = p; }
  280. void SetExsit( bool e ) { m_bExsit = e; }
  281. bool IsPresent() { return m_bPresent; }
  282. bool IsExsit() { return m_bExsit; }
  283. DWORD GetFoodType() { return m_dwType; }
  284.     // Creation/destruction methods
  285. void CreateFood( DWORD type, int left, int top );
  286.     
  287. // Methods
  288. RECT GetPermitRect();
  289. void Benefit( CObjTank *ptk );
  290. };
  291. #endif // _ASIDER_TANK_ALPHA3_OBJECT_H_