WINMAZE.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:12k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*************************************************
  2. MODULE: WinMaze.h
  3. This module contains typedefs, etc for Maze Lords.
  4. Prototypes are contained in MazProto.h.
  5. *************************************************/
  6. #ifndef _WINMAZE_H_INC_
  7. #define _WINMAZE_H_INC_
  8. #ifndef _IN_RC_
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #endif
  13. #include <windows.h>
  14. #include <mmsystem.h>
  15. #include "net.h"
  16. #include "MAZEDLG.h"
  17. #ifdef WIN16
  18. #define Sleep(x)                // Sleep doesn't exist.
  19. #define PT_MOVETO 1
  20. #define PT_LINETO 2
  21. #define GET_WM_COMMAND_ID(wp, lp)                   (wp)
  22. #define GET_WM_COMMAND_HWND(wp, lp)                 (HWND)LOWORD(lp)
  23. #define GET_WM_COMMAND_CMD(wp, lp)                  HIWORD(lp)
  24. typedef long INT;
  25. typedef LPCSTR LPCTSTR;
  26. #else  // Else if it's win32
  27. #define SELECTOROF(a) a
  28. #define GET_WM_COMMAND_ID(wp, lp)               LOWORD(wp)
  29. #define GET_WM_COMMAND_HWND(wp, lp)             (HWND)(lp)
  30. #define GET_WM_COMMAND_CMD(wp, lp)              HIWORD(wp)
  31. #undef INT
  32. #define INT int
  33. #endif
  34. #define PIC_X           100     // Bitmaps are 100 pixels wide.
  35. #define PIC_Y           150     // Bitmaps are 150 pixels tall.
  36. #define PIC_FISH        0
  37. #define PIC_ROBOT       1
  38. #define PIC_SMILEY      2
  39. #define PIC_REAPER      3
  40. #define NUM_PICS        4
  41. #define PIC_DRONE       PIC_ROBOT
  42. #define PIC_DEFAULT     PIC_FISH
  43. #define IDM_FILE                  1000
  44. #define IDM_F_HIGHSCORES               1050
  45. #define IDM_F_NEWGAME                  1100
  46. #define IDM_F_EXIT                     1200
  47. #define IDM_OPTIONS               2000
  48. #define IDM_O_PLAYERSTRETCH            2040
  49. #define IDM_O_DRONESTRETCH             2041
  50. #define IDM_O_DRONES                   2050
  51. #define IDM_O_NET                      2055
  52. #define IDM_O_LOCAL                    2085
  53. #define IDM_O_PAUSE                    2100
  54. #define IDM_O_PLAYERSET                2105
  55. #define IDM_F_STOP                     2110
  56. #define IDM_O_BITMAP                   2115
  57. #define IDM_ABOUT                 3000
  58. #define IDM_DRAWPLAYERS           1001
  59. #define IDM_DRAWDRONES            1002
  60. #define IDT_NEWMAIL               4001
  61. #define IDM_REDRAW                5001
  62. // Resource String Definitions
  63. #define IDS_ERR_REGISTER_CLASS   1
  64. #define IDS_ERR_CREATE_WINDOW    2
  65. #define IDS_MALLOCQUIT          16
  66. #define IDS_MALLOCFAIL          17
  67. #define IDS_RECTALLOCFAIL       18
  68. #define IDS_HSCONOTIMPL         19
  69. #define IDS_SAFEZONE            20
  70. #define IDS_CRETMRFAIL          21
  71. #define IDS_SNDPCKTFAIL         22
  72. #define IDS_RDSGRDTXTFLFAIL     23
  73. #define IDS_GETUSRNMFAIL        24
  74. #define IDS_SNDQUITPCKTFAIL     25
  75. #define IDS_DEMOMODE            26
  76. #define IDS_MDFYSCO             28
  77. #define IDS_GETTXTMTRCSFAIL     29
  78. #define IDS_SCOADD0FAIL         30
  79. #define IDS_CHGSCOFAIL          31
  80. #define IDS_CHGDIRFAIL          32
  81. #define IDS_DELSCOFAIL          33
  82. #define IDS_BADMSG              34
  83. #define IDS_MALLOCFAILABT       35
  84. #define IDS_FMT_DRONE           36
  85. #define IDS_FMT_RUNDOWN         38
  86. #define IDS_BADPCKTXMITFAIL     39
  87. #define IDS_CREMSLOTFAIL        40
  88. #define IDS_CREMWATCHTHRFAIL    41
  89. #define IDS_RDMSLOTFAIL         42
  90. #define IDS_FMT_JOIN            43
  91. #define IDS_FMT_ZAPPEDYOU       44
  92. #define IDS_FMT_LEFT            45
  93. #define IDS_FMT_HIT             46
  94. #define IDS_BADCOMMSG              47
  95. #define IDS_LDSGRIDRESFAIL      48
  96. #define IDS_FMT_BADNUMDRONES    49
  97. #define IDS_ERRINPUT            50
  98. #define IDS_FMT_BADMOVESPERSEC  51
  99. #define IDS_TELEPORT            54
  100. #define IDS_SANCTUARY           55
  101. #define IDS_NOVIOLENCE          58
  102. #define IDS_FMT_YOUZAPPED       59
  103. #define IDS_FMT_SLEW            60
  104. #define IDS_HSCO                61
  105. #define IDS_FATALERR            62
  106. #define IDS_ASKSTOP             63
  107. #define IDS_STOP                64
  108. #define IDS_INITFAIL            65
  109. #define IDS_NETINIT             66
  110. #define IDS_FMT_SANCTUARY       67
  111. #define IDS_ENTERED             68
  112. #define IDS_LEFT                69
  113. #define IDS_FMT_BADPICNUM       70
  114. #define WC_UPDATESCORE           1000
  115. #define WC_UPDATEDIRECTION       1010
  116. #define WC_DELETESCORE           1020
  117. #define WC_ADDSCORE              1030
  118.                     // we can see up to 10 squares ahead or to either side
  119.                     // (not including our current square)
  120. #define MAX_DRAW_DIST 10
  121. #define MAX_DRONES 100
  122. #define MAX_DRONE_SPEED 5
  123. #define ONE_SECOND 1000
  124. #define PANEL_WIDTH 100
  125. #define PANEL_HEIGHT 150
  126.         // Flags for walls in a Cell
  127. #define NORTH ((BYTE)0x01)
  128. #define WEST  ((BYTE)0x02)
  129. #define SOUTH ((BYTE)0x04)
  130. #define EAST  ((BYTE)0x08)
  131. #define AWAY        0
  132. #define TOWARD      2
  133. #define FORWARD     0
  134. #define LEFT        1
  135. #define BACK        2
  136. #define RIGHT       3
  137.         // # of Cells in a subgrid
  138. #define X_CELLS_PER_SUBGRID 5
  139. #define Y_CELLS_PER_SUBGRID 5
  140.         // # of Subgrids in the Grid
  141. #define X_SUBGRIDS_PER_GRID 10
  142. #define Y_SUBGRIDS_PER_GRID 10
  143. #define X_SIZE (X_CELLS_PER_SUBGRID * (X_SUBGRIDS_PER_GRID+2))
  144. #define Y_SIZE (Y_CELLS_PER_SUBGRID * (Y_SUBGRIDS_PER_GRID+2))
  145.         // We have SUBGRI00.TXT through SUBGRI06.TXT for players,
  146. #define NUM_PLAYER_SUBGRIDS 7
  147.         // And SUBGRI07.TXT through SUBGRI13.TXT for the palace
  148. #define NUM_PALACE_SUBGRIDS 7
  149.         // SUBGRI14.TXT is completely closed, for unused grids
  150. #define NUM_SUBGRIDS (NUM_PLAYER_SUBGRIDS + NUM_PALACE_SUBGRIDS + 1)
  151. #define SUBGRID_DEFAULT 1
  152. // A maze is an array of characters, with each character being a combination
  153. // of the NORTH, SOUTH, EAST, and WEST bit flags.  If the flag is set, there
  154. // is a wall there. If not, there isn't. Note that both the flag of the
  155. // current cell and of the adjacent cell in that direction must be checked.
  156.         // Adjacent returns the coordinates of the cell in that direction
  157.         // This applies to both Grid and Maze coordinates.
  158. #define ADJ_X(x,dir) ((((BYTE)(dir)) & EAST) ? ((x)+1) : 
  159.               ((((BYTE)(dir)) & WEST) ? ((x)-1) : (x)))
  160. #define ADJ_Y(y,dir) ((((BYTE)(dir)) & SOUTH) ? ((y)+1) : 
  161.               ((((BYTE)(dir)) & NORTH) ? ((y)-1) : (y)))
  162.         // To calculate SubGrid # from a coordinate
  163. #define X_TO_SUBGRID(x) ((int) (x) / X_CELLS_PER_SUBGRID)
  164. #define Y_TO_SUBGRID(y) ((int) (y) / Y_CELLS_PER_SUBGRID)
  165.         // To get origin of a subgrid in coordinates from subgrid #'s
  166. #define SUBGRID_TO_X(x) ((int) (x) * X_CELLS_PER_SUBGRID)
  167. #define SUBGRID_TO_Y(y) ((int) (y) * Y_CELLS_PER_SUBGRID)
  168.         // Convert relative direction to absolute
  169. #define LEFT_TO_ABS(dir) (((((BYTE)dir)) & EAST) ? NORTH : ((BYTE)(((BYTE) (dir))<<1)))
  170. #define RIGHT_TO_ABS(dir) ((((BYTE)(dir)) & NORTH) ? EAST : ((BYTE)(((BYTE) (dir))>>1)))
  171. #define BACK_TO_ABS(dir)  (LEFT_TO_ABS(LEFT_TO_ABS(dir)))
  172. #define RECTWIDTH(r) ((r).right - (r).left)
  173. #define RECTDEPTH(r) ((r).bottom - (r).top)
  174. #define GREATEROF(a,b) (((a)>(b))?(a):(b))
  175. #define LESSEROF(a,b) (((a)<(b))?(a):(b))
  176. struct S_BitMapPicType {
  177.     HBITMAP hBitmap;
  178.     int xSize,ySize;
  179.     int xOrg,yOrg;
  180.     };
  181. typedef struct S_BitMapPicType BitMapPicType;
  182. struct S_PicType {
  183.     BitMapPicType P[4];
  184.     };
  185. typedef struct S_PicType PicType;
  186. struct S_FullPicType {
  187.     BitMapPicType P[4];     // BitMap
  188.     BitMapPicType M[4];     // Black and white Mask
  189.     int     iPicNum;
  190.     struct S_FullPicType FAR *next;
  191.     };
  192. typedef struct S_FullPicType FullPicType;
  193. struct _SLineType {
  194.    int x[2],y[2];
  195.    };
  196. typedef struct _SLineType LineType;
  197.         // A cell is a single square in a sub-grid
  198. typedef BYTE CellType;
  199.         // SubGridCellsType is the array of characters that make up a sub-grid
  200. struct S_SubGridCellsType {
  201.     CellType Cell[X_CELLS_PER_SUBGRID][Y_CELLS_PER_SUBGRID];
  202.     };
  203. typedef struct S_SubGridCellsType SubGridCellsType;
  204. typedef struct {
  205.   int ix, iy;
  206.   BYTE Facing;
  207.   } PositionType;
  208. struct _s_PlayerType {
  209.   unsigned long ulID;
  210.   DWORD dwPID;
  211.   char cUserName[MAX_USERNAME_LENGTH];
  212.   char cComputerName[MAX_COMPUTERNAME_LENGTH];
  213.   PositionType Pos;
  214.   BOOL Drawn;
  215.   RECT rDrawn;
  216.   RECT rFrom;
  217.   int iScore;
  218.   int iPicNum;
  219.   int iGridNum;
  220.   POINT pGridLoc;
  221.   BYTE dwDirectShown;
  222.   struct _s_PlayerType FAR *next;
  223.   };
  224. typedef struct _s_PlayerType PlayerType;
  225. struct _s_PlayerDrawType {
  226.   PlayerType FAR *p;            // Pointer to the player to draw
  227.   RECT rDraw,                   // Rectangle the FULL bitmap would be drawn in
  228.        rClip;                   // Rectangle available for drawing in.
  229.   int iRelx,iRely;
  230.   struct _s_PlayerDrawType FAR *next;
  231.   };
  232. typedef struct _s_PlayerDrawType PlayerDrawType;
  233.         // SubGridType is a full description of a SubGrid.
  234. struct S_SubGridType {
  235.     unsigned long ulOwnerID;
  236.     POINT Pos;
  237.         // Since there are a limited # of subgrids, we might share them.
  238.     SubGridCellsType *SubGrid;
  239.     };
  240. typedef struct S_SubGridType SubGridType;
  241. struct _SObjectType {
  242.     DWORD Class;
  243.     DWORD ObjectID;
  244.     POINT MazePos;
  245.     BYTE Facing;
  246.     struct _SObjectType * next;
  247. };
  248. typedef struct _SObjectType ObjectType;
  249. struct _SHoleType {
  250.     int x[2];
  251.     struct _SHoleType FAR *next;
  252.     };
  253. typedef struct _SHoleType HoleType;
  254. struct _S_ScoreType {
  255.     unsigned long ulID;
  256.     int ix,iy;          // Upper left corner of score entry
  257.     int iScore;
  258.     BYTE bDir;
  259.     struct _S_ScoreType FAR *next;
  260.     };
  261. typedef struct _S_ScoreType ScoreType;
  262. typedef struct {
  263.     int iLoudness;
  264.     PositionType Pos;
  265.     DWORD dwLen;
  266.     char cBuff[132];
  267.     } IntoneType;
  268. typedef struct {
  269.     int xSize,ySize;
  270.     int xOrg,yOrg;
  271.     } PicPosType;
  272. typedef struct {
  273.    char cBase[5];
  274.    int iPicNum;
  275.    PicPosType PicPos[4];
  276.    } PicSpecType;
  277. ////////////////////////////////////////////////////////////////////////////
  278. /**********************Function definitions***************************/
  279. int ReadSubGrids(VOID);
  280. int InitGrid(VOID);
  281. LPTSTR   GetStringRes(int id);
  282. LPTSTR   GetStringRes2(int id);
  283. /**********************GLOBAL VARIABLES ****************************/
  284.                 // If we're in the main function, the globals
  285.                 // will be declared. Otherwise they'll just
  286.                 // be given as externs.
  287. #ifndef IN_MAIN
  288. #define EXT_DECL extern
  289. #else
  290. #define EXT_DECL
  291. #endif
  292. EXT_DECL SubGridType FAR  * FAR *Grid;
  293. EXT_DECL SubGridCellsType FAR *SubGrids;
  294. EXT_DECL FILE  *hFile;
  295. EXT_DECL int xc,yc,xscale,yscale;
  296. EXT_DECL RECT CurView;
  297. EXT_DECL char szString[128];   /* variable to load resource strings         */
  298. EXT_DECL char szAppName[20];   /* class name for the window               */
  299. EXT_DECL HINSTANCE hInst;
  300. EXT_DECL HWND hWndMain,hWndMaze,hWndTopView,hWndText,hWndScore;
  301. EXT_DECL RECT rMain,rMaze,rTopView,rText,rScore;
  302. EXT_DECL BYTE FAR * FAR *bMaze;
  303. EXT_DECL LPPOINT FAR * FAR *pPost;
  304. EXT_DECL int iNumDrones,iDroneSpeed,iDroneMoveAlg;
  305. EXT_DECL UINT uiTimer;
  306. EXT_DECL HBITMAP hFishBitmap[4],hFishMask[4];
  307. EXT_DECL HBITMAP hRoboBitmap[4],hRoboMask[4];
  308. EXT_DECL int ViewEnd;           // This is how many squares ahead we can see
  309. EXT_DECL BOOL GamePaused,GameStarted,bNetworked,bSelfInSanct;
  310. EXT_DECL FullPicType fptPic;
  311. EXT_DECL HBITMAP hbScratch;
  312. EXT_DECL float scale;
  313. EXT_DECL PlayerType ptSelf;
  314. EXT_DECL PlayerType ptPlayers;
  315. EXT_DECL PlayerType ptDrones;
  316. EXT_DECL HANDLE hMailSlot;
  317. EXT_DECL PositionType ptLastPos;
  318. EXT_DECL int iPlayersKilled,iDronesKilled;
  319. EXT_DECL int iTimesKilled,iKilledByDrones;
  320. EXT_DECL ScoreType Scores;
  321. EXT_DECL int iWhisperDist, iShoutDist,iLoudness;
  322. EXT_DECL HBITMAP hShotBM[2],hFadeBM[2];
  323. EXT_DECL HBITMAP hMaze3DBM;
  324. EXT_DECL HDC     hMazeDC;
  325. EXT_DECL BOOL    bBitmapDraw;
  326. EXT_DECL BOOL    bPlayerPrestretch,bDronePrestretch;
  327. EXT_DECL FullPicType FAR * FAR *PreStretch;
  328. EXT_DECL BOOL    bDemoMode;
  329. EXT_DECL BOOL    bDemoEnable;
  330. EXT_DECL INT     UserIntCount;
  331. extern PicSpecType PicSpec[];
  332. extern int iNumPicSpecs;
  333. /*******************END GLOBALS *************************************/
  334. #define VIEWER_DIST              (PANEL_WIDTH)
  335. #define MC_TO_SC(x,z) (scale*(VIEWER_DIST * (x)/((z)+(VIEWER_DIST))))
  336. #endif