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

 

 

 

15 thoughts on “Game C++ SDL – Bài 5: Xây dựng mô hình Hướng Đối Tượng

  • 17 March, 2019 at 8:31 am
    Permalink

    vs 2017 có cần #undef main trong Common_Function ko ạ ?

    Reply
    • 17 March, 2019 at 8:57 am
      Permalink

      neu no bao loi thi moi them vao trong main.cpp

      Reply
  • 8 May, 2019 at 7:52 am
    Permalink

    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

    Reply
    • 9 May, 2019 at 9:56 am
      Permalink

      em vào group show hình ảnh lỗi lên xem. chứ thế này sao biết được hi

      Reply
  • 8 May, 2019 at 7:57 am
    Permalink

    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 ạ

    Reply
  • 3 July, 2020 at 9:50 pm
    Permalink

    Anh add em vô group đi anh. Em gửi yêu cầu tham gia rồi ạ!

    Reply
  • 31 October, 2020 at 6:11 pm
    Permalink

    cho e source code đi

    Reply
  • 28 November, 2020 at 7:58 am
    Permalink

    nó không có lỗi mà chạy nó không lên hình anh ơi !!!

    Reply
    • 28 November, 2020 at 9:54 am
      Permalink

      vào group show lỗi lên đi em, nói trên đây thì khó biết lắm

      Reply
  • 6 March, 2022 at 7:44 am
    Permalink

    a ơi e code như a mà nó ra mỗi cái bkground mà không ra nhận vật ạ

    Reply
    • 6 March, 2022 at 8:39 am
      Permalink

      vào group rồi post lên nhé

      Reply
  • 16 April, 2022 at 8:56 pm
    Permalink

    Printf(“hello word !”) ;

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.