Game C++ SDL – Bài 5: Xây dựng mô hình Hướng Đối Tượng
Chào mừng các bạn đến với chủ đề học lập trình game c++ SDL.
Bài số 5 này chúng ta sẽ bắt đầu đi vào việc áp dụng kỹ thuật lập trình hướng đối tượng cho một project lập trình game
Đây là lúc chúng ta bắt đầu xây dựng một dự án game mà áp dụng đầy đủ các kỹ thuật của lập trình c++.
1. Nguyên lý xây dựng
Hãy cùng xem biểu đồ dưới đây.
Thành phần cơ bản của một Game.
* Đối tượng tĩnh như là:
Background, cảnh vật, tường thành, vật cản…
* Đối tượng động:
+ Nhân vật chính: MainObject
+ Đạn Bắn: AmoObject
+ Các mối đe dọa: ThreatObject
Đối tượng động đều có chung các đặc điểm như sau:
+ Vị trí xuất hiện và kích thước => Rect.
+ Thuộc tính surface để apply vào màn hình
+ Hàm load ảnh
+ Hàm show ảnh (apply đối tượng surface vào màn hình)
Do đó tôi xây dựng một lớp cơ sở chung cho đối tượng game có tên là: BaseObject chứa đựng tất cả các thuộc tính chung ở trên.
+ Sau đó khi xây dựng những đối tượng thành phần của game tôi chỉ việc kế thừa lại lớp BaseObject.
+ Với mỗi lớp con thừa, chúng ta có thể viết các chức năng và xử lý riêng.
a. Với lớp đối tượng nhân vật chính.
Tôi 2 có hàm xử lý :
+ Hàm xử lý di chuyển:
+ Hàm xử lý sự kiện bàn phím.
Nhân vật chính di chuyển từng phát khi ấn bàn phím
b. Với lớp đối tượng đạn bắn.
Cũng có hai hàm
+ Hàm xử lý di chuyển:
+ Hàm xử lý sự kiện bàn phím.
Nhưng Amo di chuyển liên tục khi nhận một sự kiện bàn phím.
Amo lại là một đối tượng thành viên của MainObject.
MainOject có thể gồm 1 đối tượng Amo => mỗi lần bắn chỉ được 1 phát đạn
MainObject có thể bao gồm 1 list đối tượng Amo => mỗi lần bắn, một amo được sinh mới. và khi nó đi hết con đường, nó tự được hủy bỏ
c. Lớp đối tượng đe dọa, trở ngại
Tương tự như vậy, chúng ta cũng có một lớp Threats kế thừa từ lớp BaseObject để đại diện cho các hiểm họa, quái vật cản đường.
+ Threats cũng sẽ có hàm move và có thể cần hàm xử lý sự kiện hoặc ko.
+ Threats cũng có kể có amo hoặc ko.
+ Threats có cơ chế phát nổ khi va chạm hoặc ko.
2. Phân tích dạng di chuyển của đối tượng.
Có hai dạng cơ bản dành cho việc di chuyển của đối tượng.
a. Đối tượng di chuyển nhưng hình dạng ko thay đổi.
=> Ví dụ các loại máy bay, xe cộ.
=> Giữ nguyên trạng thái khi di chuyển.
=> Và được thay hình ảnh khi bị chết .
b. Đối tượng thay đổi hình dạng trong quá trình chơi.
=> Ví dụ như nhân vật game, khi chạy thì đôi chân được di chuyển.
=> Khi tấn công thì đôi tay được di chuyển.
=> Khi bị tấn công thì bị ngã
=> Khi bị chết thì bị nổ hoặc gục ngã….
Trong bài này chúng ta sẽ học về cách xử lý cho dạng a
3. Thực hành.
Phần này phức tạp và code dài nên tôi không thể viết code hết tất cả trên bài viết.
Chúng ta hãy cùng xem video để thực hành dễ hơn.
_________________________________________________________
Pass Pham
vs 2017 có cần #undef main trong Common_Function ko ạ ?
neu no bao loi thi moi them vao trong main.cpp
anh oi em bi loi function already has a body mặc dù đã làm y hệt video rồi
bị lỗi ở hàm mainobject.cpp và baseobject.cpp
em vào group show hình ảnh lỗi lên xem. chứ thế này sao biết được hi
group o dau a ?
anh ơi em bị lỗi function already has a body ở mainobject.cpp và baseobject.cpp mặc dù em làm theo y hệt video rồi anh ạ
Anh add em vô group đi anh. Em gửi yêu cầu tham gia rồi ạ!
cho e source code đi
để lại email nhé.
Cho em xin source code với ạ.
Email: dcht6789@gmail.com
nó không có lỗi mà chạy nó không lên hình anh ơi !!!
vào group show lỗi lên đi em, nói trên đây thì khó biết lắm
a ơi e code như a mà nó ra mỗi cái bkground mà không ra nhận vật ạ
vào group rồi post lên nhé
Printf(“hello word !”) ;