Leistungsstarkes Game Framework
The game framework based on game framework by Woei Kae Chen
Loading...
Searching...
No Matches
gamecore.h
Go to the documentation of this file.
1
2// 定義CGame及CGameState所使用的三個狀態常數
4
9};
10
12// Header for STL (Standard Template Library)
14
15#include <list>
16#include <vector>
17#include <map>
18using namespace std;
19
21// 回報程式錯誤用的macro
22// 備註:這裡使用macro以便保留檔案名稱及行號,利於debug。
24
25#define GAME_ASSERT(boolexp,str) \
26 if (!(boolexp)) { \
27 int id; \
28 char s[300]=""; \
29 sprintf(s,"Game fatal error:\n\n%s\n\nFile: %s\n\nLine: %d" \
30 "\n\n(Press Retry to debug the application, " \
31 "if it is executed in debug mode.)" \
32 "\n(Press Cancel otherwise.)", \
33 str , __FILE__,__LINE__); \
34 id = AfxMessageBox(s, MB_RETRYCANCEL); \
35 \
36 if (id == IDCANCEL) \
37 exit(1); \
38 AfxDebugBreak(); \
39 }
40
41namespace game_framework {
43 // 這個class提供時間、錯誤等控制
44 // 一般的遊戲並不需直接操作這個物件,因此可以不管這個class的使用方法
46
48 public:
49 static void SetCurrentTime(); // 儲存目前的時間至ctime
50 static DWORD GetEllipseTime(); // 讀取目前的時間 - ctime
51 static int GetCurrentTimeCount(); // 讀取儲存ctime的次數
52 static void Delay(DWORD ms); // 延遲 x ms
53 static void DelayFromSetCurrentTime(DWORD ms); // 自ctime起算,延遲 x ms
54 private:
55 static DWORD ctime;
56 static int ctimeCount;
57 };
58
60 // 這個class會建立DirectDraw物件,以提供其他class使用
61 // 一般的遊戲並不需直接操作這個物件,因此可以不管這個class的使用方法
63
64 class CDDraw {
65 friend class CMovingBitmap;
66 public:
67 ~CDDraw();
68 static void BltBackColor(DWORD); // 將Back plain全部著上指定的顏色
69 static void BltBackToPrimary(); // 將Back plain貼至Primary plain
70 static CDC* GetBackCDC(); // 取得Back Plain的DC (device context)
71 static void GetClientRect(CRect &r); // 取得設定的解析度
72 static void Init(int, int); // Initialize direct draw
73 static void ReleaseBackCDC(); // 放掉Back Plain的DC (device context)
74 static bool SetFullScreen(bool); // 設定為全螢幕模式/視窗模式
75 static bool IsFullScreen(); // 回答是否為全螢幕模式/視窗模式
76 private:
77 CDDraw(); // private constructor
78 static void BltBitmapToBack(unsigned SurfaceID, int x, int y);
79 static void BltBitmapToBack(unsigned SurfaceID, int x, int y, double factor);
80 static void BltBitmapToBitmap(unsigned SourceID, unsigned TargetID, int x, int y);
81 static void CheckDDFail(char *s);
82 static bool CreateSurface();
83 static bool CreateSurfaceFullScreen();
84 static bool CreateSurfaceWindowed();
85 static void LoadBitmap(int i, int IDB_BITMAP);
86 static void LoadBitmap(int i, char *filename);
87 static void LoadBitmapFromExistHBITMAP(int i, HBITMAP bitmap);
88 static DWORD MatchColorKey(LPDIRECTDRAWSURFACE lpDDSurface, COLORREF color);
89 static int RegisterBitmap(int IDB_BITMAP, COLORREF ColorKey);
90 static int RegisterBitmap(char *filename, COLORREF ColorKey);
91 static int RegisterBitmapWithHBITMAP(HBITMAP hbitmap);
92 static void ReleaseSurface();
93 static void RestoreSurface();
94 static void SetColorKey(unsigned SurfaceID, COLORREF color);
95 static HDC hdc;
96 static CDC cdc;
97 static CView *pCView;
98 static LPDIRECTDRAW2 lpDD;
99 static LPDIRECTDRAWCLIPPER lpClipperPrimary;
100 static LPDIRECTDRAWCLIPPER lpClipperBack;
101 static LPDIRECTDRAWSURFACE lpDDSPrimary;
102 static LPDIRECTDRAWSURFACE lpDDSBack;
103 static vector<LPDIRECTDRAWSURFACE> lpDDS;
104 static HRESULT ddrval;
105 static vector<int> BitmapID;
106 static vector<string> BitmapName;
107 static vector<CRect> BitmapRect;
108 static vector<COLORREF> BitmapColorKey;
109 static bool fullscreen;
110 static CDDraw ddraw;
111 static int size_x, size_y;
112 };
113
115 // 宣告尚未定義的class
117
118 class CGame;
119 class CGameStateInit;
120 class CGameStateRun;
121 class CGameStateOver;
122
124 // 這個class為遊戲的各種狀態之Base class(是一個abstract class)
125 // 每個Public Interface的用法都要懂,Implementation可以不懂
127
129 public:
130 CGameState(CGame *g);
131 void OnDraw(); // Template Method
132 void OnCycle(); // Template Method
133 //
134 // virtual functions, 由繼承者提供implementation
135 //
136 virtual ~CGameState() {} // virtual destructor
137 virtual void OnBeginState() {} // 設定每次進入這個狀態時所需的初值
138 virtual void OnInit() {} // 狀態的初值及圖形設定
139 virtual void OnKeyDown(UINT, UINT, UINT) {} // 處理鍵盤Down的動作
140 virtual void OnKeyUp(UINT, UINT, UINT) {} // 處理鍵盤Up的動作
141 virtual void OnLButtonDown(UINT nFlags, CPoint point) {}// 處理滑鼠的動作
142 virtual void OnLButtonUp(UINT nFlags, CPoint point) {} // 處理滑鼠的動作
143 virtual void OnMouseMove(UINT nFlags, CPoint point) {} // 處理滑鼠的動作
144 virtual void OnRButtonDown(UINT nFlags, CPoint point) {}// 處理滑鼠的動作
145 virtual void OnRButtonUp(UINT nFlags, CPoint point) {} // 處理滑鼠的動作
146 protected:
147 void GotoGameState(int state); // 跳躍至指定的state
148 void ShowInitProgress(int percent, string message); // 顯示初始化的進度
149 //
150 // virtual functions, 由繼承者提供implementation
151 //
152 virtual void OnMove() {} // 移動這個狀態的遊戲元素
153 virtual void OnShow() = 0; // 顯示這個狀態的遊戲畫面
156 };
157
159 // 這個class是遊戲的核心,控制遊戲的進行
160 // 一般的遊戲並不需直接操作這個物件,因此可以不管這個class的使用方法
162
163 class CGame {
164 public:
165 CGame(); // Constructor
166 ~CGame(); // Destructor
167 bool IsRunning(); // 讀取遊戲是否正在進行中
168 void OnDraw(); // 對應CGameView的OnDraw()
169 void OnFilePause(); // 遊戲暫停
170 void OnInit(); // 遊戲繪圖及音效的初始化
171 void OnInitStates(); // 遊戲各狀態的初值及圖形設定
172 bool OnIdle(); // 遊戲的主迴圈
173 void OnKeyDown(UINT, UINT, UINT); // 處理鍵盤Down的動作
174 void OnKeyUp(UINT, UINT, UINT); // 處理鍵盤Up的動作
175 void OnKillFocus(); // 遊戲被迫暫停
176 void OnLButtonDown(UINT nFlags, CPoint point); // 處理滑鼠的動作
177 void OnLButtonUp(UINT nFlags, CPoint point); // 處理滑鼠的動作
178 void OnMouseMove(UINT nFlags, CPoint point); // 處理滑鼠的動作
179 void OnRButtonDown(UINT nFlags, CPoint point); // 處理滑鼠的動作
180 void OnRButtonUp(UINT nFlags, CPoint point); // 處理滑鼠的動作
181 void OnResume(); // 處理自「待命」還原的動作
182 void OnSetFocus(); // 處理Focus
183 void OnSuspend(); // 處理「待命」的動作
184 void SetGameState(int);
185 static CGame *Instance();
186 private:
187 bool running; // 遊戲是否正在進行中(未被Pause)
188 bool suspended; // 遊戲是否被suspended
189 const int NUM_GAME_STATES; // 遊戲的狀態數(3個狀態)
190 CGameState *gameState; // pointer指向目前的遊戲狀態
191 CGameState *gameStateTable[3]; // 遊戲狀態物件的pointer
192 static CGame instance; // 遊戲唯一的instance
193 };
194}
Definition: gamecore.h:64
static void GetClientRect(CRect &r)
Definition: gamecore.cpp:590
static void BltBackColor(DWORD)
Definition: gamecore.cpp:329
static bool SetFullScreen(bool)
Definition: gamecore.cpp:876
static void Init(int, int)
Definition: gamecore.cpp:595
~CDDraw()
Definition: gamecore.cpp:318
static CDC * GetBackCDC()
Definition: gamecore.cpp:756
static void BltBackToPrimary()
Definition: gamecore.cpp:342
static void ReleaseBackCDC()
Definition: gamecore.cpp:820
static bool IsFullScreen()
Definition: gamecore.cpp:616
Definition: gamecore.h:163
void OnDraw()
Definition: gamecore.cpp:59
void OnKeyUp(UINT, UINT, UINT)
Definition: gamecore.cpp:164
~CGame()
Definition: gamecore.cpp:43
void OnResume()
Definition: gamecore.cpp:210
void OnKillFocus()
Definition: gamecore.cpp:170
void OnMouseMove(UINT nFlags, CPoint point)
Definition: gamecore.cpp:198
CGame()
Definition: gamecore.cpp:32
void OnRButtonDown(UINT nFlags, CPoint point)
Definition: gamecore.cpp:186
void OnLButtonUp(UINT nFlags, CPoint point)
Definition: gamecore.cpp:192
void OnSetFocus()
Definition: gamecore.cpp:217
void SetGameState(int)
Definition: gamecore.cpp:234
bool IsRunning()
Definition: gamecore.cpp:54
void OnInitStates()
Definition: gamecore.cpp:143
void OnInit()
Definition: gamecore.cpp:119
static CGame * Instance()
Definition: gamecore.cpp:49
void OnKeyDown(UINT, UINT, UINT)
Definition: gamecore.cpp:152
bool OnIdle()
Definition: gamecore.cpp:90
void OnFilePause()
Definition: gamecore.cpp:75
void OnLButtonDown(UINT nFlags, CPoint point)
Definition: gamecore.cpp:179
void OnSuspend()
Definition: gamecore.cpp:225
void OnRButtonUp(UINT nFlags, CPoint point)
Definition: gamecore.cpp:204
Definition: gamecore.h:128
void OnCycle()
Definition: gamecore.cpp:1030
virtual void OnKeyUp(UINT, UINT, UINT)
Definition: gamecore.h:140
virtual void OnMove()
Definition: gamecore.h:152
void ShowInitProgress(int percent, string message)
Definition: gamecore.cpp:967
virtual void OnBeginState()
Definition: gamecore.h:137
virtual void OnLButtonUp(UINT nFlags, CPoint point)
Definition: gamecore.h:142
virtual void OnInit()
Definition: gamecore.h:138
virtual void OnMouseMove(UINT nFlags, CPoint point)
Definition: gamecore.h:143
void OnDraw()
Definition: gamecore.cpp:1025
virtual void OnKeyDown(UINT, UINT, UINT)
Definition: gamecore.h:139
virtual void OnRButtonDown(UINT nFlags, CPoint point)
Definition: gamecore.h:144
virtual void OnLButtonDown(UINT nFlags, CPoint point)
Definition: gamecore.h:141
virtual ~CGameState()
Definition: gamecore.h:136
virtual void OnRButtonUp(UINT nFlags, CPoint point)
Definition: gamecore.h:145
CMovingBitmap loadingBitmap
Definition: gamecore.h:155
virtual void OnShow()=0
void GotoGameState(int state)
Definition: gamecore.cpp:962
CGame * game
Definition: gamecore.h:154
Definition: mygame.h:58
Definition: mygame.h:99
Definition: mygame.h:76
Definition: gameutil.h:81
Definition: gamecore.h:47
static void DelayFromSetCurrentTime(DWORD ms)
Definition: gamecore.cpp:261
static int GetCurrentTimeCount()
Definition: gamecore.cpp:280
static DWORD GetEllipseTime()
Definition: gamecore.cpp:275
static void Delay(DWORD ms)
Definition: gamecore.cpp:252
static void SetCurrentTime()
Definition: gamecore.cpp:269
GAME_STATES
Definition: gamecore.h:5
@ GAME_STATE_RUN
Definition: gamecore.h:7
@ GAME_STATE_INIT
Definition: gamecore.h:6
@ GAME_STATE_OVER
Definition: gamecore.h:8
Definition: mygame.h:42