GameManager.h
上传用户:royluo
上传日期:2007-01-05
资源大小:1584k
文件大小:8k
源码类别:

游戏

开发平台:

Visual C++

  1. /*****************************************************************************
  2. *                                                                             
  3. *   GameManager.h
  4. *                                                                             
  5. *   Electrical Engineering Faculty - Software Lab                             
  6. *   Spring semester 1998                                                      
  7. *                                                                             
  8. *   Tanks game                                                                
  9. *                                                                             
  10. *   Module description: Implements the manager of the game objects.
  11. *                       
  12. *                                                                             
  13. *   Authors: Eran Yariv - 28484475                                           
  14. *            Moshe Zur  - 24070856                                           
  15. *                                                                            
  16. *                                                                            
  17. *   Date: 23/09/98                                                           
  18. *                                                                            
  19. ******************************************************************************/
  20. #ifndef _GAME_MANAGER_H
  21. #define _GAME_MANAGER_H
  22. #include <WorkerThread.h>
  23. #include <GameObject.h>
  24. #include <GameObjectsList.h>
  25. #include <ManouverSet.h>
  26. #include <GameConsts.h>
  27. #include <Timer.h>
  28. #include <MsgQueue.h>
  29. #include <DrawDib.h>
  30. class CTankObj;     // Pre-declaration
  31. class CBonus;       // Pre-declaration
  32. class CCommManager; // Pre-declaration
  33. class CGameManager : public CWorkerThread
  34. {
  35. public:
  36.     CGameManager (UINT uFreq = DEFAULT_RENDER_FREQ);
  37.     virtual ~CGameManager ();
  38.     void                BeginGame ();
  39.     void                EndGame ();
  40.     void                AddObject (CGameObject *pGameObj);
  41.     void                RemoveObject (CGameObject *pGameObj);
  42.     CGameObjectsList  & ExposeObjects();
  43.     void                GetBonusState(CMessage::MessageData& MsgData);
  44.     BOOL                GetTankStatus(int iTankID, CMessage::MessageData& MsgData);
  45.     BOOL                GetTankStatusAndPos(int iTankID, CMessage::MessageData& MsgData);
  46.     DWORD               GetMinesInSector (UINT uSector, DWORD *pAllMinesInSector);
  47.     void                SetMinesInSector (UINT uSector, DWORD dwNumMines, DWORD *pAllMinesInSector);
  48.     BOOL                IsRectVacant (CRect&);             // Check that the rectangle is vacant
  49.     BOOL                IsPositionValid (CGameObject*);    // Check that the object's position is vacant
  50.         // Frequency specifies frames per second
  51.     UINT                GetFrequency ();
  52.     BOOL                SetFrequency (UINT);
  53.     void                RefreshDisplay (); // Ask the game manager to refresh entire map display on next frame
  54.     void                FindVacantRect (CSize&, CPoint &);   // Finds a point for a rect in the board which is vacant
  55.     DWORD               GetMinDistanceFromTanks (CPoint &);  // Returns min distance from all active tanks
  56.     BOOL                IsAlive (UINT uTankID);    // Returns TRUE if TankID appears in array
  57.     int                 GetLocalTankID() const;    // Return the ID of the local tank (-1 if none)
  58.     CManouverSet m_ManouverSets [MAX_TANKS]; // The manouver set for each tank
  59. private:
  60.     // Methods:
  61.     UINT                ThreadEntry (LPVOID lpParam=0);    // main loop of the game
  62.     BOOL                EmptyMsgQ(DWORD);
  63.     void                DumpBackBufferToScreen ();
  64.     void                DestroyObjects();
  65.     void                AttemptToSendGameChecksum ();      // If it is time to send the check sum, do so.
  66.         /* The following two methods represent two different techniques to display images.
  67.            SingleRectGameTechnique is a technique in which the board (constant terrain and obstacles) 
  68.            is fully copied to the back buffer in every game loop.
  69.            The objects are then pasted (transparently) over the board and when all the objects
  70.            are traversed (and if there was a change in the scene) the entire back-buffer is copied to
  71.            the screen.
  72.            MultiRectGameTechnique is a technique in which the board (constant terrain and obstacles) 
  73.            is copied to the back buffer in rectangles.
  74.            The objects are traversed twice.
  75.            One the first loop, the update rectangle of each object and its image ID are collected.
  76.            For each object the board map is copied (only in the object's rectangle) to the 
  77.            back-buffer. The update rect and the image ID are stored in an array.
  78.            The second loop traverses that array. The objects themselves are copied (transparently)
  79.            to the back buffer.
  80.            When the array is over, and if there was a change in the scene, the entire back-buffer 
  81.            is copied to the screen.
  82.            The Threadentry function calls either one of these techniques.
  83.         */
  84.     //void              SingleRectGameTechnique ();  // Currently out of use for performance reasons !!!
  85.     void                MultiRectGameTechnique ();
  86.     // Message handlers:
  87.     void                AddShell        (CMessage &);
  88.     void                AddBullet       (CMessage &);
  89.     void                AddMine         (CMessage &);
  90.     void                AddBonus        (CMessage &, DWORD);
  91.     void                AddTank         (CMessage &);
  92.     void                RemoveTank      (CMessage &);
  93.     void                AddBoard        (CMessage &);
  94.     void                AddBomber       (CMessage &, DWORD);
  95.     void                SetTankStatus   (CMessage &);
  96.     void                SetTankPos      (CMessage &);
  97.     void                SetTankZombie   (CMessage &);
  98.     // Members:
  99.     CGameObjectsList m_GameObjsList; // dynamic list of participating game objects
  100.     // aliases to global objects:
  101.     TIMER_CLASS   &m_Timer;
  102.     CImageManager& m_ImageManager;
  103.     CMsgQueue&     m_MsgQueue;
  104.     CCommManager  &m_CommManager;
  105.     HWND           m_MapHWnd;               // Window handle of map region (for DrawDIB)
  106.     CRect          m_UpdateRegionRect;      // Update rectangle of last frame
  107.     UINT           m_uFreq,                 // Refresh frequency
  108.                    m_uMilliSleep;           // Refresh wait time (time to sleep between frames).
  109.     CDIB           m_BackBuffer;            // Back (off-screen) buffer
  110.     BOOL           m_bRefreshAll;           // Refresh entire map on next frame ?
  111.     CTankObj      *m_pTanks[MAX_TANKS];     // Points to tank objects (for quick reference)
  112.     int            m_iLocalTankID;          // ID of local tank
  113.     int            m_iNumTanks;             // Counter of current number of tanks
  114.     CCriticalSection m_TanksCS;             // Enable safe pointer access to m_pTanks
  115.     CBonus        *m_pBonus;                // Points to single bonus object (for quick reference)
  116.     DWORD          m_dwBonusTimeout;        // Timeout until a new bonus is generated
  117.     DWORD          m_dwChkSumSignal;        // If changed, a new checksum should be sent
  118.     void           TryToAddBonus (DWORD);   
  119.     BonusType      m_LastBonusType;         // Last type of bonus in use
  120.     CCriticalSection m_BonusCS;             // Enable safe pointer access to m_pBonus
  121.     CCriticalSection m_MinesCS;             // Enables safe multithreaded access to all the mines
  122. };
  123. #include <Tanks.h>
  124. // Inline sections:
  125. #include <GameManager.inl>
  126. #endif