Những ngày đầu tiên tiếp xúc với việc lập trình Game thật sự rất vất vả.
- Không biết phải bắt đầu từ đâu?
- Phải làm như thế nào?
Đặc biệt là thiếu đi sự hình dung, để hình dung ra được vấn đề và cách giải quyết từng vấn đề đó trong quá trình lập trình.
Hiểu được khó khăn đó, bài viết này ra đời để chia sẻ những cơ bản đầu tiên, bắt đầu lập trình game như thế nào, tăng thêm sự thân thiện khi mới bắt đầu lập trình game.
Game là gì?
Hiểu 1 cách đơn giản thì game cũng là 1 chương trình, nhưng nó cần giữ cho chương trình chạy không kết thúc nên cần 1 vòng lặp chính, trong vòng lặp đó lần lượt làm các công việc:
- Tính toán, cập nhật thông tin các đối tượng.
- Thể hiện (vẽ) các đối tượng.
- ...
Các công việc này lặp liên tục trong vòng lặp đó.
#include <stdio.h> int main() { while(1) { } return 0; }
Để thể hiện rõ hơn, thêm 1 số code vào vòng lặp while
này.
#include <stdio.h> #include <Windows.h> int main() { while(1) { printf("This is my First Game\n"); } return 0; }
Để hoàn thiện hơn, có thể làm chậm quá trình thể hiện game, dùng hàm Sleep()
trong thư viện Windows.h.
#include <stdio.h> #include <Windows.h> int main() { while(1) { printf("This is my First Game\n"); Sleep(1000); // số 1000 này là 1000 mili-giây. } return 0; }
Như vậy game đã được kiểm soát nhịp độ.
Game là 1 đối tượng
Để quản lý game tốt hơn, có thể đóng game và class Game
, các phương thức cần thiết sẽ lưu vào đây để dễ quản lý.
Hình thành 1 class Game
1 game cơ bản cần có 3 quá trình chính là:
- Khởi tạo.
- Cập nhật
- Hủy.
Chính vì vậy có thể tạo class Game
với 3 phương thức cơ bản này và định nghĩa từng phương thức.
class Game { private: int num; bool isExit; // thuộc xác định thoát game public: Game(){} ~Game(){} void init(); // Khởi tạo Game void run(); // Cập nhật, vẽ các Object void destroy(); // Hủy sau khi thoát };
Định nghĩa phương thức
Với phương thức init()
, có thể gán giá trị, cấp phát vùng nhớ cho những thuộc tính cần sử dụng trong Game.
void Game::init() { num = 0; isExit = false; }
Phương thức trên khởi tạo giá trị kiểu int num
có giá trị khởi điểm là 0
. Thuộc tính này có chức năng đếm số lần vòng lặp while
chạy trong phương thức run()
. Thuộc tính isExit
sẽ giải thích thêm trong ví dụ dưới đây.
void Game::run() { while (!isExit) { num += 1; // Xử lý, update giá trị printf("Game Update %d :D :D :D.\n", num); // Vẽ Sleep(1000); // Delay Time } }
Phương thức trên sẽ chạy cho đến khi nào thuộc tính isExit
không còn là false
nữa. Mỗi 1 giây trôi qua run
sẽ in lên màn hình số lần Game thực hiện xong 1 lần lặp.
Khi game thoát (isExit == true
) thì hàm main
kết thúc và Game bị hủy.
void Game::destroy() { printf("Game Over...\n"); }
Ứng dụng class Game
vào hàm main
.
int main() { Game game; game.init(); game.run(); game.destroy(); return 0; }