1. Trang chủ
  2. » Luận Văn - Báo Cáo

đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like

54 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xây Dựng Game Hầm Ngục 2D Phong Cách Rogue-Like
Tác giả Nguyễn Trung Kiên, Nguyễn Thành Trung
Người hướng dẫn Trần Anh Dũng
Trường học Đại học Quốc gia Thành phố Hồ Chí Minh
Chuyên ngành Công nghệ thông tin
Thể loại Báo cáo môn học
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 54
Dung lượng 5,9 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: GIỚI THIỆU (17)
    • 1.1 Thông Tin Chung (17)
      • 1.1.1 Thông tin nhóm (17)
      • 1.1.2. Thông tin sơ lược về đồ án (17)
      • 1.1.3. Sơ lược về những công nghệ sử dụng (17)
    • 1.2. Thông Tin Sơ Lược Về Game (19)
      • 1.2.1. Đặt vấn đề, giới thiệu đề tài (19)
      • 1.2.2. Lý do chọn đề tài (19)
      • 1.2.3. Đặc tả yêu cầu (20)
      • 1.2.4. Phạm vi đề tài (22)
      • 1.2.5. Sơ lược về các đối tượng trong game (23)
  • CHƯƠNG 2: THIẾT KẾ HỆ THỐNG (27)
    • 2.1. Biểu Đồ (27)
      • 2.1.1. Người chơi (Player) (27)
      • 2.1.2 Kẻ thù (Enemies) (27)
    • 2.2. Danh Sách Actor (28)
    • 2.3. Danh Sách Usecase (28)
    • 2.4. Đặc Tả Usecase (29)
      • 2.4.1. Mở màn hình chính (Main Menu) (29)
      • 2.4.2. Cài đặt (30)
      • 2.4.3. Mở màn hình tạm dừng(Pause Menu) (30)
      • 2.4.4. Chơi game (Play) (31)
      • 2.4.5. Chọn nhân vật (31)
      • 2.4.6. Thoát game (31)
      • 2.4.7. Thu thập vật phẩm (32)
      • 2.4.8. Tấn công (32)
      • 2.4.9. Di chuyển (33)
      • 2.4.10. Nhào lộn (33)
  • CHƯƠNG 3: THIẾT KẾ KIẾN TRÚC (35)
    • 3.1. Scriptable Object (35)
    • 3.2. Cơ chế level và khởi tạo hầm ngục (37)
    • 3.3. Hệ thống tính điểm và kết thúc màn chơi (38)
    • 3.4. Vòng lặp Game (39)
    • 3.5. Tiến Trình Game (39)
  • CHƯƠNG 4: THIẾT KẾ XỬ LÝ (40)
    • 4.1 Class Diagram (40)
    • 4.2 Sequence Diagram (40)
    • 4.3. Thuật toán “Xây dựng hầm ngục” (Dungeon Building Algorithm) 29 4.4. Xử lý Object Pooling để tối ưu game (42)
    • 4.5. Thuật toán AStar trong logic tìm đường của kẻ địch (45)
  • CHƯƠNG 5: THIẾT KẾ GIAO DIỆN (48)
    • 5.1. Giao diện Main Menu (48)
    • 5.2. Giao diện trong game (50)
  • CHƯƠNG 6: KẾT LUẬN (53)
    • 6.1 Kết Quả (53)
      • 6.1.1. Về mặt lý thuyết (53)
      • 6.1.2. Về mặt ứng dụng (54)
    • 6.2. Một Số Hạn Chế (54)
    • 6.3. Hướng đi tương lai (54)

Nội dung

Ý nghĩa của đề tài Về ý nghĩa đối với người dùng: • Giúp người dùng có thể giải trí ở mức độ thư giản, hoặc cũng cóthể thử thách độ khó cao của trò chơi.Về ý nghĩa đối với nhóm: • Đề tài

GIỚI THIỆU

Thông Tin Chung

MSSV Họ tên Số điện thoại Email

1.1.2 Thông tin sơ lược về đồ án

 Tên đồ án: Xây dựng game hầm ngục 2D phong cách

 Tên trò chơi: Dungeon Gunner

 Công nghệ sử dụng: Unity Engine.

 Môi trường phát triển: Visual Studio / Visual Studio Code.

1.1.3 Sơ lược về những công nghệ sử dụng.

Unity Engine là một cross-platform game engine được phát triển bởi công ty Unity Technology, nó được sử dụng nhằm mục đích phát triển video game 2D, 3D trên máy tính, điện thoại, console và các nền tảng thực tế ảo Được công bố và phát hành lần đầu tiên vào tháng 6 năm 2005 chạy trên hệ điều hành MacOS Nó sử dụng ngôn ngữ C# làm script Nó còn có thể sử dụng để làm phim, và sử dụng trong ngành sản xuất ô tô.

Trong 2D games, Unity cho phép nhập sprites và một renderer thế giới 2D tiên tiến Đối với 3D games, Unity cho phép thiết lập các đập điểm kỹ thuật của các kết cấu và độ phân giải mà công cụ trò chơi hỗ trợ, cung cấp các hỗ trợ cho bump mapping, reflection mapping, parallax mapping, cảnh không gian ambient occlusion (SSAO), hiệu ứng bóng đổ bằng cách sử dụng shadow maps, render thiết lập toàn cảnh đến hiệu ứng Unity cũng cung cấp các dịch vụ cho nhà phát triển, bao gồm: Unity Ads, Unity Analytics, Unity Cloud Build, Unity Everyplay, Unity API, Unity Multiplayer, …

C#(C Sharp) là một ngôn ngữ lập trình hướng đối tượng đa năng, mạnh mẽ được phát triển bởi Microsoft Nó được Microsoft phát triển dựa trên C++ và Java C# được thiết kế chủ yếu bởi Anders

Hejlsberg, kiến trúc sư phần mềm nổi tiếng với các sản phẩm như

Turbo Pascal, Delphi, J++, WFC Phiên bản mới nhất của C# là C# 10, được hỗ trợ trên Net 6. Ứng dụng của C#:

 Phát triển web backend (ASP.NET MVC, ASP.NET Core, WebAPI,

 Phát triển web frontend (Blazor WebAssembly, Uno Platform).

 Phát triển desktop app (Winform, WPF, UWP, …).

 Phát triển mobile app, IOS native, Android native (Xamarin, MAUI, …).

 Phát triển game 2D, 3D đa nền tảng (Game engine: Unity, Monogame, …).

 Phát triển thực tế ảo (VR), thực tế tăng cường (AR) và thực tế hỗn hợp (MR) (HoloLens, Unity, …).

 Phát triển ứng dụng đồ họa 2D, 3D đa nền tảng (2D: SkiaSharp, ImageSharp,…; 3D: OpenTK, SharpDX, …).

Thông Tin Sơ Lược Về Game

1.2.1 Đặt vấn đề, giới thiệu đề tài Đồ án thực hiện tựa game nhập vai 2D khám phá hầm ngục. Người chơi sẽ nhập vai vào một chiến sĩ, cầm trên tay khẩu súng và tiến vào khám phá hầm ngục, nơi đầy rẫy những cạm bẫy nguy hiểm hay những quái vật mạnh mẽ, đáng sợ.

Thông qua việc khám phá các tầng, phòng của hầm ngực, người chơi có thể đánh bại quái vật hay mở các rương kho báu được ẩn dấu để thăng tiến sức mạnh, trở nên mạnh mẽ hơn để có thể đương đầu với những thử thách lớn hơn.

1.2.2 Lý do chọn đề tài

Trong thời đại công nghệ phát triển cùng với phần cứng máy tính, trò chơi điện tử (games) cũng dần trở nên phổ biến hơn với nhiều người dùng Theo đó, hàng loạt các tựa game mới ra đời với nhiều thể loại khác nhau cũng như chất lượng cũng đa dạng

Bên cạnh những tựa game có sự đầu tư lớn (game AAA) thì cũng có những tựa game đi theo lối cũ, sử dụng đồ họa Pixel Tuy chất lượng đồ họa không thể sánh bằng các game chân thực nhưng bản thân Pixel vẫn có sự cuốn hút riêng của nó.

Vì vậy, nhóm em quyết định làm một tựa game sử dụng đồ họa pixel theo thể loại Rogue-like để thử thách bản thân, bắt đầu dấn thân vào ngành công nghiệp game.

Mục đích của trò chơi này là mang lại trải nghiệm giải trí cho người chơi thông qua những thử thách từ dễ đến khó, mang lại cảm giác thăng tiến trong quá trình chơi game Qua đó, mang lại trải nghiệm tuyệt vời hơn khi chiến thắng hay đạt điểm cao.

Trò chơi này được xây dựng dựa trên concept Roguelike, tức là người chơi sẽ chiến đấu theo từng ải và không ngừng gia tăng sức mạnh Tuy nhiên, một sai lầm nhỏ cũng có thể dẫn đến dấu chấm hết Điều này khiến người chơi vừa phải mạo hiểm nhưng đôi lúc cũng cần cẩn thận để có thể đạt tới đỉnh cao nhất của trò chơi.

Trò chơi được xây dựng theo hướng hầm ngục theo nhiều tầng, mỗi tầng (mỗi level) sẽ có nhiều phòng khác nhau, ẩn chứa nhiều hiểm nguy nhưng cũng chứa phần thưởng xứng đáng khi vượt qua. Mỗi tầng đều sẽ có một phòng boss, chiến thắng boss thì sẽ hoàn thành tầng và đi đến tầng tiếp theo.

 Người chơi có thể điều khiển nhân vật di chuyển, tấn công kẻ thù và tương tác với các đối tượng trong trò chơi (breakable object, chest, items…)

 Người chơi có thể tạm dừng khi đang chơi.

 Người chơi có thể tự do lựa chọn hướng khám phá hầm ngục của mình.

 Người chơi có thể lật ngã bàn để thành vật chống đạn

 Người chơi có thể tìm thấy và sử dụng nhiều loại vũ khí khác nhau.

 Người chơi có thể phá hủy các vật thể xung quanh và mở rương để nhận các vật phẩm như vũ khí, đạn hoặc vật phẩm giúp hồi phục.

 Người chơi có thể sử dụng minimap và dịch chuyển đến các phòng đã vượt quan bằng bản đồ.

 Trò chơi có hệ thống tạo hầm ngục ngẫu nhiên để khiến trải nghiệm ở mỗi lần chơi mới không bị trùng lặp.

 Trò chơi có nhiều levels với mức độ khó tăng dần.

 Trò chơi có bảng xếp hạng điểm

 Trò chơi cho phép lựa chọn ba nhân vật để chiến đấu

 Mỗi nhân vật sẽ có điểm mạnh và điểm yếu khác nhau Theo đó, tạo ra lối chơi khác nhau, phù hợp với sở thích của người chơi.

 Hệ thống độ khó của trò chơi được cải thiện ở mức vô hạn, không có giới hạn trong mỗi lần chơi, tạo ra cơ hội để thách thức điểm số cao.

 Cơ chế lưu màn chơi.

 Tối ưu hệ thống chỉ số và sát thương: sẽ không chỉ gồm chỉ số

HP và sát thương của đạn mà còn có chỉ số tốc độ, phòng thủ và chí mạng.

 Đa dạng hóa các loại vũ khí và đạn dược.

 Đa dạng hóa vật phẩm có thể tiêu thụ (consumable itmes)

 Áp dụng hệ thống RPG vào game, cho phép người chơi thăng tiến sức mạnh thông qua việc nhận điểm kinh nghiệm để thăng cấp.

 Thêm hệ thống skill tree để mở rộng lối chơi của game.

 Tối ưu hóa hoạt ảnh tấn công và hiệu ứng âm thanh để tăng tính mãnh liệt của vũ khí.

❖Yêu cầu phi chức năng

 Yêu cầu về chất lượng: FPS ổn định, gameplay thu hút người chơi.

 Yêu cầu về tính tương thích: có thể chơi ổn định trên hệ điều hành Windows.

 Yêu cầu về cấu hình phải chăng, giúp game có thể tiếp cận nhiều thiết bị thấp, low-end.

 Tối ưu hệ thống tốt và hạn chế bug.

 Trò chơi có âm nhạc tăng tính hấp dẫn

 Hiệu ứng âm thanh như tiếng súng, tiếng đạn,… phù hợp, chân thật.

 Hiệu ứng hình ảnh bắt mắt, phù hợp, lôi cuốn

❖ Giả định và ràng buộc

 Công nghệ: Trò chơi sẽ được phát triển trên Unity Engine, dự kiến sử dụng công nghệ ECS, hoặc nếu không thể áp dụng thì sẽ chuyển sang công nghệ OOP truyền thống.

 Ngân sách: Tự chu cấp

 Thời gian: Dự kiến hoàn thành trong 4 tháng

 Người dùng có thể mở trò chơi và chơi.

 Người dùng có thể thao tác, điều khiển nhân vật trong hầm ngục và tấn công kẻ thù

 Hệ thống hầm ngục được tạo ngẫu nhiên và có độ khó tăng dần theo level.

 Hệ thống sẽ lưu điểm của các lần chơi.

 Hầm ngục và kẻ thù được xây dựng hoàn thiện, mang lại trải nghiệm mượt mà cho người chơi.

2D Dungeon Based Rogue-like Game được xây dựng với:

• Phương pháp lập trình: Unity OOP

• Môi trường phát hành: Window 64 bit

Tìm hiểu về các thuật toán công nghệ tự động tìm đường để áp dụng lên cho kẻ địch, có thể tự di chuyển tìm người chơi và tự động tấn công.

Tìm hiểu tính khả thi và áp dụng hệ thống tạo dungeon ngẫu nhiên để tăng tính đa dạng của trò chơi.

- Công nghệ sử dụng để xây dựng trò chơi:

Nhóm đã sử dụng các phương pháp nghiên cứu:

• Phương pháp đọc tài liệu

• Phương pháp phân tích các trò chơi cùng thể loại sẵn có.

• Phương pháp sử dụng công cụ tìm kiếm bằng AI

1.2.5 Sơ lược về các đối tượng trong game

Tên thực thể/ đối tượng Hình ảnh Mô tả

Là một trong ba nhân vật mà người chơi có thể lựa chọn.

The Scientist Là một trong ba nhân vật mà người chơi có thể lựa chọn.

The Thief Là một trong ba nhân vật mà người chơi có thể lựa chọn.

Một trong các kẻ thù của game Sẽ đuổi theo và tấn công người chơi bằng vũ khí.

Một trong những kẻ thù của game Sẽ đuổi theo và tấn công người chơi.

Một trong những kẻ thù trong game Sẽ đuổi theo và tấn công người chơi bằng vũ khí.

Một trong những kẻ thù trong game Sẽ đuổi theo và tấn công người chơi bằng vũ khí.

Một trong những kẻ thù trong game Sẽ đuổi theo và tấn công người chơi bằng vũ khí.

Một trong những kẻ thù trong game Sẽ đuổi theo và tấn công người chơi bằng vũ khí.

Một trong những Boss của trò chơi

Một trong những Boss của trò chơi

Hệ thống phần thưởng chính của game Sẽ spawn ngẫu nhiên trong các phòng và có tỉ lệ spawn sau khi clear phòng Có thể chứa vật phẩm hồi phục, đạn và vũ khí.

Các destroyable objects trong game Có thể bị phá vỡ nếu tương tác với người chơi, kẻ địch hoặc đạn.

Destroyable object trong game Có thể bị phá vỡ nếu tương tác với người chơi, kẻ địch hoặc đạn.

Destroyable object trong game Có thể bị phá vỡ nếu tương tác với người chơi, kẻ địch hoặc đạn.

Destroyable object trong game Có thể bị phá vỡ nếu tương tác với người chơi, kẻ địch hoặc đạn.

Destroyable object trong game Có thể bị phá vỡ nếu tương tác với người chơi, kẻ địch hoặc đạn.

Destroyable object trong game Có thể bị phá vỡ nếu tương tác với người chơi, kẻ địch hoặc đạn.

Là interactable item trong game Người chơi có thể tương tác với đối tượng để lật ngã bàn, làm vật thể chống đạn.

Bảng 1.2: Các thực thể và đối tượng

THIẾT KẾ HỆ THỐNG

Biểu Đồ

* Cân nhắc phóng to lên để có thể thấy rõ ảnh

Danh Sách Actor

STT Tên Actor Mô tả

Là đối tượng mà người chơi sẽ tương tác với game Nó có thể di chuyển, tấn công, né tránh, sử dụng kỹ năng,

Là kẻ địch mà người chơi sẽ phải đối mặt trong game Nó có thể di chuyển và đuổi theo người chơi, tấn công, và người chơi có thể tiêu diệt nó.

Danh Sách Usecase

STT Tên Usecase Mô tả

1 Mở màn Main Menu Có thể cài đặt, chơi game, và thoát game.

Có thể bật thông qua Main Menu hoặc PauseMenu Dùng để điều chỉnh một số thứ trong game.

Khi đang chơi game, người dùng muốn tạm dừng thì nhấn phím P.

4 Chơi game Ở Main Menu, người dùng nhấn Start trên màn hình để bắt đầu trải nghiệm game.

5 Chọn nhân vật Người dùng có thể lựa chọn nhân vật để điều khiển và chơi game.

6 Thoát game Khi người dùng muốn thoát game, nhấn “Quit” ở Main Menu.

Người dùng có thể thu thập các loại vật phẩm trong trò chơi từ nhiều nguồn, chẳng hạn như vũ khí và đạn dược, hay vật phẩm hồi phục.

8 Tấn công kẻ địch Người dùng nhấn chuột trái để bắn kẻ địch.

9 Di chuyển Người chơi có thể di chuyển trong hầm ngục với nhiều mục đích khác nhau.

Người chơi có thể thực hiện nhào lộn để có thể nhanh chóng di chuyển một quãng ngắn và né tấn công của kẻ thù.

Khi người chơi bị tấn công bởi kẻ địch hoặc kẻ địch bị tấn công bởi người chơi thì sẽ nhận một lượng sát thương.

12 Bị tiêu diệt Khi kẻ địch hết máu sẽ bị tiêu diệt.

13 Tương tác với môi trường

Người chơi có thể tương tác với đa dạng các đối tượng trong trò chơi bằng nhiều hình thức.

Người chơi có thể tương tác với rương để nhận thưởng các vật phẩm bên trong.

15 Phá hủy các breakable object

Người chơi có thể va chạm hoặc tấn công các “vật thể có thể bị phá hủy” trong hầm ngục để phá hủy chúng.

16 Đuổi theo player Kẻ thù sẽ luôn đuổi theo player như một cơ chế tấn công.

17 Va chạm với player Kẻ thù sẽ gây sát thương lên player nếu va chạm với player.

Đặc Tả Usecase

2.4.1 Mở màn hình chính (Main Menu)

Tên Mở màn hình chính.

Người chơi bật file game hoặc có thể nhấn thoát khi đang mở màn hình tạm dừng để hiển thị màn hình chính.

Postconditio n Hiển thị màn hình chính.

Yêu cầu đặc biệt Không có.

Trường hợp mở game: bật file game exe Trường hợp đang chơi game:

- Mở màn hình tạm dừng.

Luồng thay thế Không có.

Bảng 2.2: Mở màn hình chính

Người chơi có thể cài đặt để thay đổi một số thứ trong game Mở thông qua Main Menu hoặc Pause

Preconditio n Mở Main Menu hoặc Pause Menu.

Postconditio n Hiển thị một số thứ có thể điều chỉnh.

Yêu cầu đặc biệt Không có.

- Người chơi mở Main Menu hoặc Pause Menu.

- Mở màn hình tạm dừng.

Luồng thay thế Không có.

2.4.3 Mở màn hình tạm dừng(Pause Menu)

Tên Mở màn hình tạm dừng.

Mô tả Khi đang chơi game, người chơi có thể tạm dừng để cài đặt hoặc một số tác vụ khác.

Preconditio n Người chơi đang chơi game.

Postconditio n Hiển thị màn hình tạm dừng.

Yêu cầu đặc biệt Không có.

- Người chơi đang chơi game.

Luồng thay Không có. thế

Bảng 2.4: Mở màn hình tạm dừng

Mô tả Người chơi có thể bấm vào nút “Play” để bắt đầu một session game mới

Preconditio n Người chơi đang ở màn hình chính

Postconditio n Hiển thị giao diện chọn nhân vật

Yêu cầu đặc biệt Không có.

- Người chơi đang ở màn hình chính

- Nhấn nút "Play" trên giao diện

Luồng thay thế Không có.

Mô tả Người chơi có thể lựa chọn nhân vật chiến đấu trên màn hình.

Người chơi bấm vào nút “Play” từ màn hình chọn nhân vật

Postconditio n Hiển thị giao diện chọn nhân vật

Yêu cầu đặc biệt Không có.

- Người chơi đang ở màn hình chính

- Nhấn nút "Play" trên giao diện

- Người chơi tiến hành chọn nhân vật

- Người chơi nhấn nút xác nhận

Luồng thay thế Không có.

Mô tả Người chơi có thể thoát/tắt game

Preconditio n Trò chơi đang hoạt động

Postconditio n Trò chơi được kết thúc

Yêu cầu đặc biệt Không có.

- Người chơi đang ở màn hình chính

- Nhấn nút Pause (ESC hoặc P)

- Người chơi chọn Quit Game

Luồng thay thế Người chơi có thể bấm tổ hợp phím Alt + F4

Tên Thu thập vật phẩm

Mô tả Người chơi có thể nhặt đa dạng các loại items như vũ khí, đạn dược, vật phẩm hồi phục.

Preconditio n Trò chơi đã được bắt đầu

Postconditio n Vật phẩm được cộng vào cho người chơi

Số lượng tối đa của vật phẩm mà người chơi đang mang chưa đầy

- Người chơi đang trong màn chơi

- Người chơi tiếp cận vật phẩm

Luồng thay thế Không có.

Bảng 2.9: Thu thập vật phẩm

Mô tả Người chơi có thể tấn công và gây sát thương lên kẻ thù

Preconditio n Người chơi đang trong màn chơi

Postconditio n Đạn được bắn ra

Yêu cầu đặc Không có. biệt

Luồng cơ bản - Người chơi bấm phím tấn công

Luồng thay thế Không có.

Mô tả Người chơi có thể di chuyển tự do trong màn chioiw

Preconditio n Người chơi đang trong màn chơi

Postconditio n Nhân vật trên màn hình di chuyển

Yêu cầu đặc biệt Không có.

Người chơi sử dụng tổ hợp phím để di chuyển theo các hướng

Luồng thay thế Không có.

Mô tả Người chơi có thể nhào lộn để né tránh kẻ thù

Preconditio n Người chơi đang ở trong màn chơi

Postconditio n Nhân vật nhào lộn theo hướng di chuyển

Yêu cầu đặc biệt Không có.

Người chơi bấm nút “Space” để cho nhân vật nhào lộn

Luồng thay thế Không có.

THIẾT KẾ KIẾN TRÚC

Scriptable Object

Dữ liệu trực tiếp (live data) của người chơi sẽ được quản lý bởi GameManager thông qua các ScriptableObject (SO) Các SO sẽ giữ thông số cài đặt của các đối tượng, hệ thống trong game (như HP, sát thương, tốc độ, …) để triển khai thành màn chơi.

Trong game, những thông số mà chúng ta cần lưu ý:

Nắm giữ các chỉ số liên quan đến di chuyển của nhân vật như: tốc độ di chuyển, tốc độ nhào lộn, khoảng cách nhào lộn, cooldown của nhào lộn.

Health Lưu trữ máu tối đa và máu hiện tại của người chơi.

Name Lưu trữ tên tự đặt của người chơi

Weapon Lưu trữ danh sách vũ khí hiện tại của người chơi

Cho phép người chơi bất tử trong một khoảng thời gian ngắn sau khi bị nhận sát thương

Hit Immunity Time Thời gian bất tử sau khi bị sát thương

Nắm giữ các chỉ số liên quan đến di chuyển của nhân vật như: tốc độ di chuyển.

Health Lưu trữ máu tối đa và máu hiện tại của kẻ thù.

Name Lưu trữ tên của kẻ thù.

Lưu trữ vũ khí của kẻ thù và những thông tin khác như tốc độ tấn công, sát thương, tần suất tấn công.

Nắm giữ biểu đồ tổng quát của dungeon Là nhân tố căn bản để spawn dungeon.

DungeonRoomNode Lưu trữ template các room đẻ

Level Lưu trữ setting DungeonNodeGraph cho từ level.

Room Lưu trữ tilemap của từng phòng để

Weapon Clip Capacity Nắm dung lượng của mỗi băng đạn của vũ khí.

Weapon Ammo Capacity Lưu trữ lượng đạn dự trữ tối đa của vũ khí

Fire Rate Lưu trữ tốc độ tấn công của vũ khí

Reload Time Lưu trữ tốc độ nạp đạn của vũ khí

Charging Time Lưu trữ thời gian sạc của vũ khí

(dành cho vũ khí dạng plasma)

Ammo Detail Lưu trữ thông số của đạn như sát thương, tốc độ đạn bay.

Dựa vào các SO ở trên, GameManager sẽ phổ biến trò chơi với những thông tin được tùy chỉnh sẵn và khiến game vận hành trơn tru.

Cơ chế level và khởi tạo hầm ngục

Mỗi người nhân vật vào một màn chơi mới hay bước sang level tiếp theo, hầm ngục sẽ được tạo mới một cách ngẫu nhiên bằng cách chọn một trong các template đã được tùy chỉnh trước.

Game được built-in một công cụ để giúp Game Designer có thể dễ dàng thiết kế template cho màn chơi, nó có tên là Dungeon

Editor. Đầu tiên, chúng ta sẽ tạo ra các assets template (tilemap) cho từng loại phòng (RoomeType).

Ví dụ: Ở loại phòng “Small Room” sẽ có 6 tilemap có thể được lựa chọn, mỗi tilemap sẽ có cách bày trí, sắp xếp khác nhau Mỗi khi một RoomType kiểu “Small Room” được khởi tạo, một trong 6 tilemap sẽ được lựa chọn ngẫu nhiên.

DungeonNodeGraph sẽ bao gồm một chuỗi các RoomNode được nối với nhau thông qua các Corridor, tạo thành một dungeon ở cấp độ biểu đồ Các RoomNode sẽ gồm thuộc tính RoomType khác nhau, tùy thuộc vào level hiện tại.

Hình 3.1: Một DungeonNodeGraph template cho level 1

Game hiện tại có 6 level, mỗi level sẽ nắm giữ một số lượng template DungeonNodeGraph để sử dụng.

Hệ thống tính điểm và kết thúc màn chơi

Hệ thống tính điểm chính là yếu tố chính để đánh giá kỹ năng của người chơi Khi người chơi đánh bại kẻ thù, điểm sẽ được cộng vào cho người chơi bằng với chỉ số HP tối đa của kẻ thù.

Ngoài ra, một yếu tố khác sẽ được đưa vào hệ thống tính điểm để gia tăng sự khác biệt giữa mỗi lần chơi, đó chính là Score

Multiplier Mỗi khi nhân vật tấn công chính xác kẻ thù, hệ số Multiplier sẽ tăng thêm một và khi người chơi tấn công không trúng đích, hệ số sẽ giảm đi một.

Như thế, khi người chơi ghi điểm bằng cách đánh bại kẻ thù, số điểm đó sẽ được nhân với hệ số thưởng Vì thế, để đạt được điểm cao, người chơi không chỉ cần đánh bại kẻ thù mà còn phải tấn công một cách chính xác nữa Bạn sẽ không thể chiến thắng nếu không đánh trúng kẻ thù!

3.3.2 Hệ thống quản lý màn chơi

Trò chơi sẽ bắt đầu từ level 1 và tiến hành đến level 6 Khi người chơi bị hạ gục (HP giảm về 0) hoặc đánh bại được boss cuối cùng tại level 6, phần chơi sẽ kết thúc và lưu lại điểm của người chơi trong bảng xếp hạng.

*Lưu ý: trò chơi hiện tại chưa có cơ chế lưu nên khi người chơi thoát ra khi chưa hoàn thành màn chơi thì mọi thông tin của màn chơi hiện tại sẽ bị xóa.

Vòng lặp Game

Vòng lặp game theo quy trình như sau: người chơi nhấn nút start và bắt đầu tiến vào màn chơi Mỗi khi vào màn chơi mới, hầm ngục (dungeon) sẽ được tạo ngẫu nhiên với các phòng khác nhau Người chơi sẽ phải khám phá các vòng của hầm ngục, đánh bại kẻ địch và thu thập vũ khí để trở nên mạnh hơn Thông qua việc chinh phục được phòng boss, người chơi sẽ chiến thắng màn chơi và đi vào hầm ngục mới với độ khó cao hơn

Trò chơi sẽ kết thúc nếu HP của người chơi đạt số không tại bất kì thời điểm nào trong quá trình chơi Điểm số sẽ được lưu lại và toàn bộ dữ liệu trong lần chơi đó sẽ bị reset về từ đầu (cơ chế Roguelike).Như thế, người chơi sẽ bắt đầu một vòng lặp game mới.

Tiến Trình Game

Người chơi phải chiến đấu với những kẻ địch, né tránh các đòn tấn công, kỹ năng từ kẻ địch Thu thập vũ khí, đạn dược để thăng tiến về mặt sức mạnh Người chơi ngày càng tiến vào các màn chơi cam go, khó khăn hơn

Mỗi level sẽ có một Boss Room Để có thể vào Boos Room, người chơi cần phải đánh bại toàn bộ tùy tùng của hắn Nói cách khác, người chơi cần phải hoàn thành toàn bộ các phòng khác thì cửa đến Boss Room mới được mở.

Khi đánh bại được boss, người chơi có thể tiến vào level tiếp theo.

Khi người chơi bước vào một phòng chiến đấu, toàn bộ cửa sẽ bị đóng chặt và kẻ thù sẽ lần lượt xuất hiện và tấn công người chơi. Bằng việc đánh bại toàn bộ kẻ thù trong phòng, cửa đến phòng khác sẽ được mở ra và có thể lệ rương báu sẽ xuất hiện, tưởng thưởng cho người chơi.

THIẾT KẾ XỬ LÝ

Class Diagram

Bên dưới là Class Diagram của một số class quan trọng, bỏ qua việc toàn bộ Class đều kế thừa từ MonoBehavior cũng như các Class là ScriptableObject.

Sequence Diagram

Hình 4.2: Sequece Diagram – Character control

Thuật toán “Xây dựng hầm ngục” (Dungeon Building Algorithm) 29 4.4 Xử lý Object Pooling để tối ưu game

Quy trình tính toán để tạo ra một “level” cho game:

1 Dungeon Builder (DB) sẽ lựa chọn ngẫu nhiên một RoomNodeGraph từ danh sách được tạo sẵn Nó sẽ đóng vai trò làm bộ khung để xây dựng nên một hầm ngục

2 Thêm room “Entrance” từ RoomNodeGraph được chọn vào trong Queue.

3 Kiểm tra queue xem có còn RoomNode nào chưa được khởi tạo hay không? Nếu có, qua bước 4, không thì nhảy đến bước 7.

4 Chuyển đến RoomNode tiếp theo, nối nó với RoomNode đã khảo tạo trước thông qua quan hệ Parent (giống danh sách liên kết)

5 Lựa chọn ngẫu nhiên trong danh sách các Room Template tương thích với loại phòng, sau đó khởi tạo RoomNode thành một

6 Thử kết nối nó với Doorway Sau đó kiểm tra liệu Room, này có thể được nối vào hệ thống Dungeon mà không bị trùng lặp hay không Nếu bị trùng lặp, quay lại bước 1 để tiến hành xây lại Dungeon Nếu không trùng lặp, quay lại bước 3 để tiến hành xây dựng các Node tiếp theo trong Queue.

7 Toàn bộ RoomNode đều đã được khởi tạo và không bị trùng lặp, tiến hành xây dựng Dungeon.

Hình 4.3: Quy trình tạo Dungeon

4.4 Xử lý Object Pooling để tối ưu game

4.4.1 Lý thuyết về Object Pooling

Object Pooling là một trong những Optimization Design Pattern phổ biến trong phát triển game với khả năng giúp tối ưu hóa game tốt hơn, hạn chế tiêu tốn tài nguyên để xử lý trong nhiều trường hợp.

Thay vì khởi tạo một đối tượng, sử dụng rồi tiêu hủy nó, Object Pooling sẽ khởi tạo trước một số lượng “cụ thể” các đối tượng rồi giữ nó trong một hàng chờ Các đối tượng này sẽ đặt đặt trong trạng thái

“Deactive” khi không được dùng đến và chuyển sang “Active” mỗi lần hệ thống cần sử dụng đến chúng Thay vì lặp đi quá trình khởi tạo và tiêu hủy, thứ cực kỳ tốn tài nguyên hệ thống để thực hiện, việc chỉ khởi tạo một lần rồi tái sử dụng sẽ giảm lượng lớn tài nguyên tiêu tốn mà vẫn mang lại hiệu quả tương tự Điều này giúp tựa game sẽ tối ưu hơn, đặc biệt là trên những thiết bị low-end.

4.4.2 Áp dụng Object Pooling vào trong game

Trong tựa game mà nhóm đang phát triển, “đạn” chính là một trong những ví dụ điển hình nhất cho việc áp dụng Object Pooling.Mỗi viên đạn đều là một Object, nó sẽ được khởi tạo khi người chơi nhấp chuột để bắn Viên đạn đó sẽ được tạo ra tại đầu nòng súng, bay đi và sẽ bị tiêu hủy khi nó va chạm với kẻ thù, vật chắn hoặc đến độ xa nhất định Xét đến tượng game này, trong một lần chơi, nhân vật có thể bắn tới hàng nghìn, có thể là hàng vạn viên đạn Như thế, cũng một viên đạn đó sẽ phải được khởi tạo và tiêu hủy ngần ấy lần, đều đó cực kỳ tiêu tốn tài nguyên.

Nguyên nhân ở đây đó chính là quá trình khởi tạo và tiêu hủy một lượng lớn các đối tượng sẽ tiêu tốn rất nhiều tài nguyên xử lý của CPU Hơn nữa, khi tiêu hủy một đối tượng, chúng ta cũng cần thu hồi vùng nhớ của nó để có thể tái sử dụng, và thứ đảm nhận vai trò này chính là “Garbage Collector” Nếu “Garbage Collector” thu hồi cùng một lúc quá nhiều đối tượng, nó sẽ dẫn đến hiện tượng giật lag, làm giảm fps của game Đây chỉ là ví dụ cho đạn, trong khi game còn có đến vô vàng đối tượng khác cũng cần được khởi tạo và tiêu hủy như Visual Effect, Enemies, sound effects,…

Theo đó, bằng cách áp dụng Object Pooling, chúng ta có thể khởi tạo trước một lượng Object và lưu nó vào trong một hàng chờ và lấy ra mỗi lần cần đến, rồi tái sử dụng nó về hàng chờ khi dùng xong. Như vậy, hệ thống sẽ không cần phải tốn nhiều lần khởi tạo và gần như chỉ tiêu hủy Object khi Reload game, scene hoặc thoát trò chơi.

Hình 4.4: Object Pooling cho đạn

Ví dụng đơn giản như trong game, chúng ta có thể tạo trước một hàng chờ gồm 30 viên đạn đã được khởi tạo và set về trạng thái

“Deactive”, tức là nó sẽ không xuất hiện trên màng hình mà chỉ được lưu trữ trong bộ nhớ.

Khi người chơi bắn ra một viên, đạn, ta sẽ lấy ra một viên đạn trong hàng chờ chưa được sử dụng, gắn cho nó vị trí cần spawn (trước nòng súng) rồi set Active để nó xuất hiện Khi vòng đời “nên có” của viên đạn hoàn thành, thay vì tiêu hủy thì ta sẽ tái chế viên đạn, set về Deactive rồi mang trở về lại hàng chờ Như thế, người chơi có thể bán ra hàng vạn viên đạng mà chỉ cần khởi tạo đúng 30 viên, tiết kiếm rất nhiều tài nguyên cho hệ thống.

Tuy nhiên, Object Pooling cũng có khuyết điểm của mình Chẳng hạn như đối với những loại đối tượng mà không thể xác định được số lượng khởi tạo trong “Queue”, hoặc số lượng tối đa cần dùng trong một lúc quá lớn, thì Object Pooling sẽ rất khó để áp dụng Lý do cho việc này là vì khi chúng ta giữ các đối tượng trong queue, thì nó sẽ nằm liên tục trên bộ nhớ Nếu Queue quá lớn thì bộ nhớ mà nó chiếm hữu cũng sẽ ngốn rất nhiều Chưa kể đến, nếu trong một trường hợp nào đó, người chơi có thể bắn một lúc 31 viên đạn bay trên màn hình mà chúng ta chỉ dự trữ sẵn 30 viên thì lúc này sẽ thiếu mất một viên,khi ấy chúng ta phải thay đổi số lượng trong queue.

Thuật toán AStar trong logic tìm đường của kẻ địch

Trong tựa game này, kẻ thù sẽ luôn tìm cách để đuổi theo và tấn công người chơi Để thực hiện điều đó, thuật toán AStar sẽ được áp dụng để kẻ địch có thể tự động tìm đường đuổi theo người chơi và vượt qua các vật cản.

AStar (A*) là thuật toán tìm kiếm trong đồ thị Thuật toán này tìm một đường đi từ một nút khởi đầu tới một nút đích cho trước(hoặc tới một nút thỏa mãn một điều kiện đích) Thuật toán này sử dụng một "đánh giá heuristic" để xếp loại từng nút theo ước lượng về tuyến đường tốt nhất đi qua nút đó Thuật toán này duyệt các nút theo thứ tự của đánh giá heuristic này Do đó, thuật toán A* là một ví dụ của tìm kiếm theo lựa chọn tốt nhất (best-first search).

Xét bài toán tìm đường - bài toán mà A* thường được dùng để giải A* xây dựng tăng dần tất cả các tuyến đường từ điểm xuất phát cho tới khi nó tìm thấy một đường đi chạm tới đích Tuy nhiên, cũng như tất cả các thuật toán tìm kiếm có thông tin (informed tìm kiếm thuật toán), nó chỉ xây dựng các tuyến đường "có vẻ" dẫn về phía đích. Để biết những tuyến đường nào có khả năng sẽ dẫn tới đích, A* sử dụng một "đánh giá heuristic" về khoảng cách từ điểm bất kỳ cho trước tới đích Trong trường hợp tìm đường đi, đánh giá này có thể là khoảng cách đường chim bay - một đánh giá xấp xỉ thường dùng cho khoảng cách của đường giao thông. Điểm khác biệt của A* đối với tìm kiếm theo lựa chọn tốt nhất là nó còn tính đến khoảng cách đã đi qua Điều đó làm cho A* "đầy đủ" và "tối ưu", nghĩa là, A* sẽ luôn luôn tìm thấy đường đi ngắn nhất nếu tồn tại một đường đi như vậy A* không đảm bảo sẽ chạy nhanh hơn các thuật toán tìm kiếm đơn giản hơn Trong một môi trường dạng mê cung, cách duy nhất để đến đích có thể là trước hết phải đi về phía xa đích và cuối cùng mới quay lại Trong trường hợp đó, việc thử các nút theo thứ tự "gần đích hơn thì được thử trước" có thể gây tốn thời gian.

4.5.2 Áp dụng AStar trong thuật toán tìm đường của kẻ thù

Bởi vì trong Unity 2D, tựa game của chúng ta được xây dựng trên TileMap được tính theo từng “Grid”, do đó, việc áp dụng AStar là vô cùng hợp lý

Ta sẽ tiến hành tuần tự theo Psuedo Code bên dưới

Hình 4.5: Psuedo Code cho giải thuật AStar

THIẾT KẾ GIAO DIỆN

Giao diện Main Menu

Hình 5.1: Giao diện khởi đầu Danh sách đối tượng: Đối tượng Hiển thị Mô tả

PlayerName Là nơi người chơi điền tên cho nhân vật

CharacterSelecti on Ở trung tâm của giao diện, là nơi để người dùng chọn nhân vật cho lần chơi này.

Play Người chơi nhấn vào đây để bắt đầu trò chơi

Instruction Nhấn vào để đi đến giao diện hướng dẫn

LeaderBoard Nhấn vào để đi đến bảng xếp hạng Bảng 5.1: Danh sách đối tượng Main Menu

Nhấn vào nút “Instruction” ở giao diện chính để chuyển đến phần hướng dẫn Nhấn “Return to Main Menu” để quay lại.

Nhấn “High Score” ở giao diện chính để mở bảng xếp hạng Trong bảng xếp hạng gồm:

- Name: tên của người chơi

- Level: cấp tối đa mà người chơi đi được

- Score: điểm đạt được của lần chơi

Nhấn “Return to Main Menu” để quay lại.

Giao diện trong game

Hình 5.4: UI trong trò chơi Danh sách đối tượng: Đối tượng Hiển thị Mô tả

Là nơi hiển thị điểm số hiện tại của người chơi, hệ số thưởng và chỉ số HP hiện có.

Nằm ở góc dưới bên phải, hiển thị thông tin của vũ khí hiện tại mà người chơi đang sử dụng, gồm: Hình minh họa, tên vũ khí, số lượng đạn dự trữ, số lượng đạn trong băng.

Pointer Hiển thị con trỏ của người chơi, cũng như hướng mà nhân vật đang nhắm đến.

MiniMap Hiển thị bản đồ nhỏ của trò chơi.

Bảng 5.2: Danh sách đối tượng main UI

Hình 5.5: Map tổng thể của trò chơi

Bằng cách giữ nút “Tab” trong trò chơi, map tổng thể sẽ được hiện lên trên màn hình.

Hình 5.6: Màn hình tạm dừng game

Bằng cách bấm nút “ESC” trong game, một menu sẽ hiện ra giúp tạm dừng game cũng như cho phép người chơi điều chỉnh âm lượng của trò chơi.

Ngày đăng: 15/05/2024, 09:30

HÌNH ẢNH LIÊN QUAN

Bảng 1.1: Thông tin nhóm - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 1.1 Thông tin nhóm (Trang 17)
Bảng 1.2: Các thực thể và đối tượng - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 1.2 Các thực thể và đối tượng (Trang 26)
Hình 2.2:  Enemies Usecase Diagram - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Hình 2.2 Enemies Usecase Diagram (Trang 27)
Hình 2.1:  Player Usecase Diagram - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Hình 2.1 Player Usecase Diagram (Trang 27)
Bảng 2.1:  Danh sách Actor - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 2.1 Danh sách Actor (Trang 28)
Bảng 2.1: Danh sách Usecase - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 2.1 Danh sách Usecase (Trang 29)
Bảng 2.2: Mở màn hình chính - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 2.2 Mở màn hình chính (Trang 30)
Bảng 2.3: Cài đặt - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 2.3 Cài đặt (Trang 30)
Bảng 2.4: Mở màn hình tạm dừng - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 2.4 Mở màn hình tạm dừng (Trang 31)
Bảng 2.9: Thu thập vật phẩm - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 2.9 Thu thập vật phẩm (Trang 32)
Bảng 2.10: Tấn công - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 2.10 Tấn công (Trang 33)
Bảng 3.3: DungeonDetailSO - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Bảng 3.3 DungeonDetailSO (Trang 36)
Hình 4.1: Class Diagram - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Hình 4.1 Class Diagram (Trang 40)
Hình 4.2: Sequece Diagram – Character control - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Hình 4.2 Sequece Diagram – Character control (Trang 41)
Hình 4.3: Quy trình tạo Dungeon - đồ án 1 xây dựng game hầm ngục 2d phong cách rogue like
Hình 4.3 Quy trình tạo Dungeon (Trang 43)

🧩 Sản phẩm bạn có thể quan tâm

w