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

Windows编程

开发平台:

Visual C++

  1. /*==========================================================================
  2.  *
  3.  *  Copyright (C) 1995-1997 Microsoft Corporation. All Rights Reserved.
  4.  *
  5.  *  File: gameproc.h
  6.  *  Content: game processing info. include file
  7.  *
  8.  *
  9.  ***************************************************************************/
  10. #define IDIRECTPLAY2_OR_GREATER
  11. #include <ddraw.h>
  12. #include <dplay.h>
  13. #include <dsound.h>
  14. #include "sfx.h"
  15. #include "duel.h"
  16. // align on single byte boundaries
  17. // this is a stop-gap measure until the structures can be re-arranged.
  18. #pragma pack(1)
  19. #define     MAX_SHIP_X     (MAX_SCREEN_X - 32)
  20. #define     MAX_SHIP_Y     (MAX_SCREEN_Y - 32)
  21. #define     MAX_SHIP_FRAME 40
  22. #define     MAX_BULLET_X    (MAX_SCREEN_X - 3)
  23. #define     MAX_BULLET_Y    (MAX_SCREEN_Y - 3)
  24. #define     MAX_BULLET_FRAME 400
  25. #define NUM_SHIP_TYPES 4
  26. #define DEF_SHOW_DELAY     (2000)
  27. #define MAX_BUFFER_SIZE    256
  28. #define     UPDATE_INTERVAL     40      // interval between position updates in milliseconds (25 FPS)
  29. #define     SYNC_INTERVAL       1000    // synchronize once every second
  30. #define     HIDE_TIMEOUT        5000    // time for which a ship is disabled after a hit
  31. /*
  32.  * keyboard commands
  33.  */
  34. #define KEY_STOP        0x00000001l
  35. #define KEY_DOWN        0x00000002l
  36. #define KEY_LEFT        0x00000004l
  37. #define KEY_RIGHT       0x00000008l
  38. #define KEY_UP          0x00000010l
  39. #define KEY_FIRE        0x00000020l
  40. #define KEY_ENGINEOFF   0x00000040l
  41. /*
  42.  * Offsets for the bullet bitmap
  43.  */
  44. #define     BULLET_X    304
  45. #define     BULLET_Y    0
  46. typedef struct _frag
  47. {
  48.     double dPosX;
  49.     double dPosY;
  50.     LPDIRECTDRAWSURFACE surf;
  51.     RECT        src;
  52.     double      dVelX;
  53.     double      dVelY;
  54.     BOOL        valid;
  55. } FRAG, *LPFRAG;
  56. /*
  57.  * structures
  58.  */
  59. typedef struct _SHIP
  60. {
  61.     double dPosX, dPosY; // ship x and y position
  62.     double dBulletPosX, dBulletPosY; // bullet x and y position
  63.     DWORD dwBulletFrame; // bullet frame
  64.     char  cFrame; // current ship frame
  65. BYTE byType; // ship type 
  66.     BOOL                bEnable; // is this ship active?
  67.     BOOL                bBulletEnable; // Is there an active bullet?
  68.     double dVelX, dVelY; // ship x and y velocity (pixels/millisecond)
  69.     double dBulletVelX, dBulletVelY; // bullet x and y velocity (pixels/millisecond)
  70.     DWORD dwScore; // current score
  71.     DWORD               dwLastTick; // most recent time stamp
  72.     BOOL                bIgnore;                 // flag used to synchronize ship explosions
  73. int iCountDown;                 // enable time-out            
  74.     DWORD               dwFrameCount;               // number of frames since beginning of time
  75.     /* DSOUND members */
  76.     LPDIRECTSOUNDBUFFER   lpDirectSoundBuffer  [MAX_SOUNDS]; // SoundBuffer interface
  77.     LPDIRECTSOUND3DBUFFER lpDirectSound3DBuffer[MAX_SOUNDS]; // 3D interface (to same buffer)  
  78.     DWORD                 dwKeys;                            // the keyboard state
  79.     BOOL                  bEngineRunning;                    // These BOOLs keep track of the ship's
  80.     BOOL                  bMoving;                           //   last condition so we can play sounds
  81.     BOOL                  bBounced;                          //   when they change
  82.     BOOL                  bBlockHit;
  83.     BOOL                  bDeath;
  84.     BOOL                  bFiring;
  85.     /* DSOUND members */
  86. } SHIP, *LPSHIP;
  87. typedef struct _BLOCKS
  88. {
  89.     BYTE        bits[30][5];
  90. } BLOCKS, *LPBLOCKS;
  91. //----------------------------------------------------------
  92. // communication packet structures
  93. //----------------------------------------------------------
  94. #define MSG_HOST        0x11    // message containing field layout, sent by host
  95. #define MSG_BLOCKHIT    0x22    // block hit message
  96. #define MSG_SHIPHIT     0x33    // ship hit message
  97. #define MSG_ADDBLOCK 0x44    // add block message
  98. #define MSG_CONTROL     0x55    // game keys message
  99. #define MSG_SYNC        0x66    // synchronization message containing the rendezvous location
  100. typedef struct _GENERICMSG
  101. {
  102.     BYTE        byType;
  103. } GENERICMSG, *LPGENERICMSG;
  104. typedef struct _HOSTMSG
  105. {
  106.     BYTE        byType;
  107.     BLOCKS      Blocks;
  108. } HOSTMSG, *LPHOSTMSG;
  109. typedef struct _BLOCKHITMSG
  110. {
  111.     BYTE        byType;
  112.     BYTE        byRow;
  113.     BYTE        byCol;
  114.     BYTE        byMask;
  115. } BLOCKHITMSG, *LPBLOCKHITMSG;
  116. typedef struct _SHIPHITMSG
  117. {
  118.     BYTE        byType;
  119.     DPID        Id;
  120. } SHIPHITMSG, *LPSHIPHITMSG;
  121. typedef struct _ADDBLOCKMSG
  122. {
  123.     BYTE        byType;
  124.     BYTE        byX;
  125.     BYTE        byY;
  126. } ADDBLOCKMSG, *LPADDBLOCKMSG;
  127. typedef struct _CONTROLMSG
  128. {
  129.     BYTE        byType;
  130.     BYTE        byState;
  131. } CONTROLMSG, *LPCONTROLMSG;
  132. typedef struct _SYNCMSG
  133. {
  134.     BYTE        byType;
  135.     BYTE        byShipType;     // this is needed only when sends are unreliable
  136.     char        cFrame;
  137.     double      dPosX;
  138.     double      dPosY;
  139. } SYNCMSG, *LPSYNCMSG;
  140. /*
  141.  * Prototypes
  142.  */
  143. void LaunchGame(void);
  144. void ExitGame(void);
  145. HRESULT InitOurShip(void);
  146. HRESULT InitLocalSoundData(void);
  147. void InitPlayerLocalSoundData(LPSHIP lpShip, BOOL bOurShip);
  148. BOOL WINAPI SetPlayerLocalSoundDataCB(DPID dpId, DWORD dwPlayerType, LPCDPNAME lpName, 
  149.                       DWORD dwFlags, LPVOID lpContext);
  150. void ReleaseLocalData(void);
  151. void ReleasePlayerLocalSoundData(LPSHIP lpShip);
  152. BOOL WINAPI ReleasePlayerLocalDataCB(DPID dpId, DWORD dwPlayerType, LPCDPNAME lpName,
  153.                  DWORD dwFlags, LPVOID lpContext);
  154. void    UpdateState(LPSHIP lpShip, DWORD dwControls);
  155. void    SendSync(LPSHIP lpShip);
  156. void    UpdateDisplayStatus(LPSHIP lpShip);
  157. void    UpdatePosition( DPID dpId, LPSHIP ship );
  158. BOOL    IsHit( int x, int y );
  159. void    InitField(void);
  160. BOOL    setBlock( int x, int y );
  161. void    AddFrag(LPSHIP lpShip, int offX, int offY);
  162. void    UpdateFragment(int i);
  163. void    DestroyShip( LPSHIP lpShip);
  164. void DestroyGame( void );
  165. BOOL UpdateFrame( void );
  166. void    ProcessSoundFlags(LPSHIP lpShip);
  167. BOOL WINAPI RenderPlayerCB(DPID dpId, DWORD dwPlayerType, LPCDPNAME lpName, 
  168.                      DWORD dwFlags, LPVOID lpContext);
  169. BOOL DrawScreen( void );
  170. BOOL    DrawScore( void );
  171. void    DrawShip( LPSHIP lpShip );
  172. void    DrawBlock( int x, int y );
  173. void    DrawBullet( LPSHIP lpShip );
  174. void    DrawFragments( void );
  175. void    DisplayFrameRate( void );
  176. void GetConnection(void);
  177. HRESULT ReceiveMessages( void );
  178. void DoSystemMessage( LPDPMSG_GENERIC lpMsg, DWORD dwMsgSize, DPID idFrom, DPID idTo );
  179. void    DoApplicationMessage( LPGENERICMSG lpMsg, DWORD dwMsgSize, DPID idFrom, DPID idTo );
  180. void    SendGameMessage( LPGENERICMSG lpMsg, DPID idTo );
  181. void CleanupComm(void);
  182. // restore default alignment
  183. #pragma pack()