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

游戏

开发平台:

Visual C++

  1. #ifndef _ASIDER_TANK_ALPHA3_MAPINFO_H_
  2. #define _ASIDER_TANK_ALPHA3_MAPINFO_H_
  3. #include "object.h"
  4. #include "resinfo.h"
  5. enum WidthType{ WIDTH_32, WIDTH_16 };
  6. //-----------------------------------------------------------------------------
  7. // Classes defined in this header file 
  8. //-----------------------------------------------------------------------------
  9. class CMapInfo;
  10. //-----------------------------------------------------------------------------
  11. // Default values of map file 
  12. //-----------------------------------------------------------------------------
  13. #define GAME_MAP_FILE_IDENTITY 19801227
  14. #define GAME_MAP_VER_1_2_0 0x01020000 // map version 1.2.0
  15. #define DEFAULT_CX_BLOCKS 21
  16. #define DEFAULT_CY_BLOCKS 21
  17. #define DEFAULT_BLOCKS 441
  18. //-----------------------------------------------------------------------------
  19. // Map file header format, also the structures involved
  20. //-----------------------------------------------------------------------------
  21. typedef struct tagFILEHAEDER
  22. {
  23. DWORD dwFileID; // file info
  24. DWORD dwVersion;
  25. DWORD dwModifiedTime;
  26. char szAuthor[20];
  27. char szComment[80];
  28. DWORD dwDataOffsite; // start address of posbase
  29. DWORD dwTreasure; // treasure info
  30. int nTimePersist;
  31. BOOL bTimeRegular;
  32. int nInterval;
  33. int nMaxInter;
  34. int nMinInter;
  35. int nUnion; // player info
  36. int nTeam;
  37. int nComputer;
  38. int nWidth; // map info
  39. int nHeight;
  40. int nSingleSize;
  41. int nBlocks;
  42. int nNumOfLands;
  43. int iaTotal[10];
  44. // POINT *posBase; // tanks info
  45. // TANKINFO *infoTank;
  46. // BLOCK *pBlocks; // blocks info
  47. }FILEHEADER, * LPFILEHEADER;
  48. typedef struct tagTankInfo // for compatibility
  49. {
  50. int nUnion;
  51. int nTeam;
  52. BOOL bIsPlayer;
  53. POINT posLT;
  54. DWORD dwDir;
  55. int nLife;
  56. int nSpeed;
  57. int nPower;
  58. int nFire;
  59. DWORD dwEquip;
  60. DWORD dwReserved[4];
  61. }TANKINFO, * LPTANKINFO;
  62. typedef struct tagBLOCK {
  63. BYTE byObstacle; // land obstacle
  64. BYTE byClass; // landform kind
  65. WORD wExParam; // extra data
  66. }BLOCK, * LPBLOCK;
  67. //-----------------------------------------------------------------------------
  68. // Name: class MapInfo
  69. // Desc: Class to handle all data of the map 
  70. //-----------------------------------------------------------------------------
  71. class CMapInfo
  72. {
  73. friend class ConsoleNet;
  74. char *m_szFileName;
  75. bool m_bReversed;
  76. int m_nBlocks;
  77. int m_cxBlocks;
  78. int m_cyBlocks;
  79. unsigned int m_uiTankNum;
  80. POINT *m_ptBase;
  81. BLOCK *m_pBlocks;
  82. TANKINFO *m_pTankInfo;
  83. public:
  84. CMapInfo();
  85. ~CMapInfo();
  86. // Status function
  87. bool IsReversed() { return m_bReversed; }
  88. // Access functions
  89. const char *GetMapFileName() { return m_szFileName; }
  90. void SetReversed( bool flag );
  91. unsigned int GetObjectNum( DWORD type ) { return m_uiTankNum; }
  92. // Creation/destruction methods
  93. bool LoadMap(const char *filename);
  94. void DestroyMap();
  95. // Methods
  96. void ConvertCoord( CObject * pobj );
  97. void Protect( RECT rt, bool flag, POINT *ppts, int &changed );
  98. // Methods of operations on map data
  99. void VerReverseBlock( int x, int y );
  100. void HorReverseBlock( int x, int y );
  101. bool VerReverseMap();
  102. bool HorReverseMap();
  103. bool CenterRotate180();
  104. int BlockCounter( DWORD land, CObjBlock *pobb );
  105. // Resource locator
  106. bool BlockLocator( int x, int y, RECT *prc, int &level );
  107. bool ObjectLocator( CObject *pobj, RECT *prc, int &level );
  108. bool ObjBlockLocator( CObjBlock *poblk, RECT *prc, int &level );
  109. // Collision test
  110. void ColRToMobile( RECT &rt, POINT step, CMobileObject **ppmos,
  111.  int num, int except, UINT team, bool checkteam,
  112.  int &hit );
  113. void ColRToB( POINT &lt, WidthType wt, POINT step, DWORD block_land, 
  114.   DWORD &over_land, DWORD remove_land, POINT *ptChanged,
  115.   int &changed );
  116. protected:
  117. void Get4Mask( int left, int top, int *mask ); 
  118. void Get4Mask16( int left, int top, int *mask);
  119. bool ColR2R( RECT &rt_move, RECT rt_stable, POINT step );
  120. };
  121. #endif // _ASIDER_TANK_ALPHA3_MAPINFO_H_