Giới thiệu
Với tư tưởng hướng đối tượng, trong bước này, ta sẽ thiết kế những lớp cần thiết cho việc quản lý game.
Đối tượng đầu tiên ta thấy chính là game: lớp CGame
Class quản lý game (CGame)
Về cơ bản, ta lớp CGame cần có các phương thức:
- Init: thiết lập các tham số cho game
- Destroy: hủy game. Gọi trước khi kết thúc game, dùng để thu hồi vùng nhớ, giải phóng thiết bị chiếm giữ, ...
- Exit: yêu cầu kết thúc game. Làm này được người dùng gọi khi cần kết thúc game.
- Run: Quản lý vòng lặp chính của game
- Pause: tạm dừng game
- Resume: khôi phục game sau khi tạm dừng.
Và một số thuộc tính:
- [bool] m_isAlive: cho biết game còn "sống" hay không. Được thiết lập "true" khi init, và được thiết lập false khi hàm exit được gọi.
- [bool] m_isPaused: cho biết game có đang tạm dừng hay không. Được thiết lập false thi khi init. Giá trị được cập nhật thông qua hàm Pause/Resume
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| /// CGame.h #ifndef __CGAME_H__ #define __CGAME_H__ namespace GameTutor { class CGame { public : CGame(); virtual ~CGame() {} virtual void Run(); virtual void Exit(); virtual void Pause(); virtual void Resume(); bool IsAlive() { return m_isAlived;} bool IsPause() { return m_isPaused;} protected : virtual void Init() = 0; virtual void Destroy() = 0; protected : bool m_isAlived; bool m_isPaused; }; } #endif |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| /// CGame.cpp #include "CGame.h" #include "stdio.h" #include "windows.h" namespace GameTutor { CGame::CGame(): m_isPaused( false ), m_isAlived( true ){} void CGame:: Pause() { m_isPaused = true ; } void CGame::Resume() { m_isPaused = false ; } void CGame::Exit() { m_isAlived = false ; } void CGame::Run() { this ->Init(); while (m_isAlived) { if (m_isPaused) { printf( "paused\n" ); } else { printf( "running\n" ); } Sleep(80); } Destroy();
} } |
Trong ví dụ trên, ta thấy lớp CGame được thiết kế với 2 hàm thuần ảo. Điều này có nghĩa là ta không thể khởi tạo trực tiếp lớp CGame. Để sử dụng lớp CGame, ta cần tạo một lớp thừa kế từ CGame. Điều này đảm bảo cho sự tách biệt giữa lớp thư viện (CGame) và ứng dụng. Vì sao cần có sự tách biệt này?
- Đảm bảo khả năng sử dụng lại của CGame ở nhiều game khác nhau.
- Tách biệt giữ lớp thư viện và lớp ứng dụng, thuận tiện trong việc phát triển và bảo trì.
Khi này, ta thiết kế 1 lớp mới có tên là CExample, thừa kế từ CGame:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| /// CExample.h #ifndef __CEXAMPLE_H__ #define __CEXAMPLE_H__ #include "CGame.h" using namespace GameTutor; class CExample: public CGame { public : CExample(): CGame() {} virtual ~CExample() {} protected : void Init(); void Destroy(); }; #endif |
1
2
3
4
5
6
7
8
9
10
11
12
13
| //Example.cpp #include "CExample.h" #include "stdio.h" void CExample::Init() { printf ( "Init\n" ); } void CExample:estroy() { printf ( "Destroy\n" ); } |
Hàm main được thiết kế đơn giản như sau:
1
2
3
4
5
6
7
| /// main.cpp #include "CExample.h" int main() { ( new CExample())->Run(); }
|
Post a Comment Blogger Facebook
Post a Comment