Một trong những yếu tố quan trọng góp phần vào sựphát triển của các trò chơi hiện đại chính là các công cụ hỗ trợ phát triển game, trong đó,Unity nổi lên như một trong những game engine
Trang 1HỌC VIỆN HÀNG KHÔNG VIỆT NAM
KHOA CÔNG NGHỆ THÔNG TIN
Trang 2Giảng viên hướng dẫn: TS Trần Nguyên Bảo
Nhóm sinh viên thực hiện: Dương Huỳnh Minh Thông MSSV: 2254810239
Lê Thị Trúc Mai MSSV: 2254810238 Nguyễn Lê Thu Nhàn MSSV: 2254810250 Nguyễn Đình Việt Hưng MSSV: 2254810001 Nguyễn Thị Thương MSSV: 2254810228
Trang 3NHẬN XÉT VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
i
Trang 4MỤC LỤC
DANH MỤC HÌNH ẢNH iv
LỜI NÓI ĐẦU v
CHƯƠNG 1 GIỚI THIỆU 1
1.1 Lý do chọn đề tài 1
1.2 Mục tiêu đề tài 1
1.3 Phạm vi đề tài 1
1.4 Đối tượng nghiên cứu 1
1.5 Phương pháp nghiên cứu 1
1.6 Bố cục đề tài 2
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 3
2.1 Unity 3
2.1.1 Lịch sử hình thành và phát triển 3
2.1.2 Khái niệm: 3
2.1.3 Điểm mạnh 3
2.1.4 Điểm yếu 4
2.2 Ngôn ngữ C# 4
2.2.1 Lịch sử hình thành và phát triển 5
2.2.2 Khái niệm 5
2.2.3 Điểm mạnh 5
2.2.4 Điểm yếu 6
2.3 Thuật toán Wave Function Collapse .6
2.3.1 Lịch sử hình thành và phát triển 7
2.3.2 Khái niệm 7
2.3.3 Điểm mạnh 7
2.3.4 Điểm yếu 8
Trang 52.4 Thuật toán Greedy Best First Search 8
2.4.1 Lịch sử hình thành và phát triển 8
2.4.2 Khái niệm 8
2.4.3 Điểm mạnh 9
2.4.4 Điểm yếu 9
CHƯƠNG 3 PHÂN TÍCH HỆ THỐNG VÀ XÂY DỰNG SẢN PHẨM 10
3.1 Phân tích hệ thống 10
3.1.1 Yêu cầu hệ thống 10
3.1.2 Các bước thực hiện Wave Function Collapse 10
3.1.3 Các bước thực hiện Greedy 12
3.2 Xây dựng giao diện sản phẩm 13
CHƯƠNG 4 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 16
4.1 Kết luận 16
4.2 Hướng phát triển 16
TÀI LIỆU THAM KHẢO 18
iii
Trang 6DANH MỤC HÌNH ẢNH
Hình 2.1 Unity Engine 3
Hình 2.2 Ngôn ngữ C# và NET 5
Hình 2.3 Thuật toán Wave Function Collapse 7
Hình 3.1 Chuẩn bị các mẫu con 10
Hình 3.2 Các ô trong lưới với tỉ lệ x = y và là trạng thái ban đầu 11
Hình 3.3 Chọn ô đầu tiên để có thể collapse đã được tinh chỉnh lại là sẽ vẽ một con đường và thực hiện thuật toán 11
Hình 3.4 Con đường đi từ điểm bắt đầu đến điểm đích bằng GBFS 13
Hình 3.5 Bắt đầu giao diện chính của Tower Defence 13
Hình 3.6 Giao diện khi bắt đầu trò chơi 14
Hình 3.7 Giao diện khi tạm dừng trò chơi 14
Hình 3.8 Giao diện sau khi người dùng đã chơi xong 15
Trang 7LỜI NÓI ĐẦU
Trong thời đại công nghệ phát triển vượt bậc hiện nay, ngành công nghiệp game đã vàđang trải qua sự bùng nổ mạnh mẽ, với nhiều tựa game mới liên tục ra đời và nhận được sựđánh giá cao từ cộng đồng game thủ Một trong những yếu tố quan trọng góp phần vào sựphát triển của các trò chơi hiện đại chính là các công cụ hỗ trợ phát triển game, trong đó,Unity nổi lên như một trong những game engine phổ biến và mạnh mẽ nhất Unity không chỉcung cấp một môi trường phát triển linh hoạt mà còn hỗ trợ lập trình viên trong việc tái sửdụng tài nguyên và mã nguồn, từ đó tối ưu hóa quá trình tạo ra các sản phẩm game chấtlượng
Trong bối cảnh đó, việc lựa chọn dòng game lâu đời như Tower Defense kết hợp với công
cụ hỗ trợ hiện đại như Unity mang lại ý tưởng độc đáo cho nhóm trong việc phát triển tròchơi Trò chơi Tower Defense, với lối chơi hấp dẫn và tính chiến thuật cao, là một nền tảng
lý tưởng để khai thác các tính năng của Unity, từ đó thử thách khả năng sáng tạo và kỹ nănglập trình của cả nhóm
Thông qua bài tiểu luận này, chúng tôi hy vọng sẽ cung cấp một nguồn tài liệu hữu íchcho những ai đam mê lập trình game, đồng thời góp phần vào việc thúc đẩy sự phát triển củangành công nghiệp game trong nước Việc nghiên cứu và thực hành phát triển một trò chơi
cụ thể không chỉ giúp nâng cao kỹ năng lập trình mà còn mở ra nhiều cơ hội nghề nghiệptrong lĩnh vực đầy tiềm năng này
v
Trang 8CHƯƠNG 1 GIỚI THIỆU1.1 Lý do chọn đề tài
Ngành game đang phát triển mạnh mẽ với nhiều thể loại mới, nhưng các game cổ điểnnhư Tower Defense dần mất chỗ đứng Tower Defense từng hấp dẫn nhờ lối chơi chiến lược,nhưng thị hiếu thay đổi và sự ra đời của game mới làm nó kém phổ biến Nhóm chọn pháttriển game Tower Defense để hồi sinh thể loại này, kết hợp yếu tố cổ điển với công nghệ hiệnđại như thuật toán Wave Function Collapse Mục tiêu không chỉ là tạo ra game hấp dẫn màcòn làm phong phú thị trường game Sự kết hợp giữa truyền thống và hiện đại hy vọng sẽ thuhút người chơi và mở ra hướng đi mới cho phát triển game
1.2 Mục tiêu đề tài
Hệ thống được phát triển nhằm tạo ra một trò chơi Tower Defense với sự đa dạng về mànchơi và độ khó, nhờ sử dụng thuật toán Wave Function Collapse Đối tượng sử dụng chínhcủa hệ thống này là các game thủ cũng như các nhà phát triển game và những người đam mêlập trình, giúp họ tiếp cận với việc ứng dụng các thuật toán hiện đại và công nghệ phát triểngame
- Về hệ thống ứng dụng: Hoàn thành các chức năng chính của trò chơi Trò chơiđược thiết kế với giao diện dễ sử dụng, tích hợp các tính năng và các yếu tố chiếnthuật cao
- Về công nghệ ứng dụng: Ứng dụng thành công thuật toán Wave Function Collapse
để tạo ra các màn chơi đa dạng và sáng tạo Tận dụng các công cụ và tính năng củaUnity để tối ưu hóa quá trình phát triển và đảm bảo chất lượng sản phẩm
1.3 Phạm vi đề tài
Đề tài sẽ được nghiên cứu và phát triển trò chơi trong môi trường Unity, tập trung vàoviệc phát triển các màn chơi ngẫu nhiên và các chức năng chơi cơ bản
1.4 Đối tượng nghiên cứu
Các đối tượng cần nghiên cứu trong đề tài sẽ là thuật toán Wave Function Collapse vớikhả năng tạo cấu trúc ngẫu nhiên và đa dạng, ngoài ra còn có cả thuật toán tìm đường(Greedy Best First Search) giúp tạo đường đi tối ưu Bên cạnh đấy ta cũng phải nghiên cứu
về Unity Engine - phần mềm phát triển game, tích hợp các thuật toán và cả ngôn ngữ C#được dùng như ngôn ngữ chính để phát triển game
1.5 Phương pháp nghiên cứu
Để đảm bảo hiệu quả và chất lượng của dự án, chúng tôi đã sử dụng phương pháp nghiêncứu kết hợp giữa lý thuyết và thực tiễn Các phương pháp nghiên cứu khoa học được sửdụng:
Trang 9- Nghiên cứu tài liệu: Thu thập và phân tích tài liệu về các thuật toán và Unity.
- Thực nghiệm: Phát triển và kiểm chứng chức năng game bằng Unity và C#
- Thiết kế và xây dựng game, kiểm tra và điều chỉnh chức năng
- Tích hợp thuật toán Wave Function Collapse và Greedy Best First Search
1.6 Bố cục đề tài
Phần còn lại của báo cáo tiểu luận môn học này được tổ chức như sau:
Tại Chương II: Cơ sở lý thuyết, chúng em sẽ giới thiệu về một số công nghệ cũng nhưthuật toán đã được áp dụng vào đề tài “Tower Defense” Ngôn ngữ được sử dụng chính làC#, kế tiếp là công cụ trò chơi Unity, sau cùng là hai thuật toán Wave Function Collapse vàGreedy Best First Search
Chương III sẽ được trình bày thành hai mục chính là Phân tích hệ thống (bao gồm Yêucầu hệ thống và Các bước thực hiện hai thuật toán) và Xây dựng giao diện sản phẩm (trìnhbày và mô tả về giao diện của sản phẩm)
2
Trang 10CHƯƠNG 2 CƠ SỞ LÝ THUYẾT2.1 Unity
Unity cung cấp một nền tảng phát triển mạnh mẽ và linh hoạt, phù hợp với nhiều loại tròchơi từ đơn giản đến phức tạp Với khả năng hỗ trợ đa nền tảng, Unity cho phép dự án tiếpcận được với nhiều người dùng hơn mà không cần phải viết lại mã nguồn cho từng nền tảng.Hơn nữa, cộng đồng lớn mạnh và các tài nguyên phong phú giúp dễ dàng tìm kiếm sự hỗ trợ
và học hỏi kinh nghiệm Unity cũng cung cấp các công cụ phát triển mạnh mẽ và thân thiệnvới người dùng, giúp tăng hiệu suất làm việc và giảm thời gian phát triển
Hình 2.1 Unity Engine
2.1.1 Lịch sử hình thành và phát triển
Unity là một công cụ trò chơi đa nền tảng được phát hành lần đầu tiên vào năm 2005bởi Unity Technologies Công cụ này ban đầu được phát triển như một công cụ nội bộ củamột công ty Đan Mạch tên là Over the Edge Entertainment, công ty này đã sử dụng nó để tạo
ra một trò chơi có tên GooBall Tuy nhiên, các nhà phát triển nhanh chóng nhận ra rằng cómột thị trường dành cho game engine giá cả phải chăng và dễ tiếp cận, và Unity được pháthành chính thức dưới dạng sản phẩm thương mại vào năm 2006
2.1.2 Khái niệm:
Unity là một game engine đa nền tảng được phát triển bởi Unity Technologies, mà chủyếu để phát triển video game cho máy tính, consoles và điện thoại Unity hỗ trợ đồ họa 2D và3D, các chức năng được viết chủ yếu qua ngôn ngữ C# Unity là bộ công cụ phát triển phầnmềm mặc định (SDK) cho máy chơi game video game Wii U của Nintendo, kèm theo bảnmiễn phí của Nintendo với mỗi giấy phép phát triển Wii U Unity Technologies gọi việc kếthợp sản xuất SDK với một bên thứ ba là "industry first".[2]
2.1.3 Điểm mạnh
- Đa nền tảng: Unity hỗ trợ nhiều nền tảng khác nhau, từ máy tính cá nhân, thiết bị di động,cho đến các nền tảng VR và AR, giúp nhà phát triển tiết kiệm thời gian và công sức khitriển khai sản phẩm trên nhiều nền tảng
Trang 11- Cộng đồng lớn: Với hàng triệu người dùng trên toàn thế giới, Unity có một cộng đồng lớnmạnh, cung cấp nhiều tài liệu hướng dẫn, diễn đàn thảo luận, và tài nguyên phong phú.
- Công cụ phát triển mạnh mẽ: Unity cung cấp các công cụ và tính năng mạnh mẽ như hệthống vật lý, render 3D/2D, scripting, và asset store với hàng ngàn tài nguyên sẵn có
- Dễ học và sử dụng: Unity được thiết kế thân thiện với người dùng, với nhiều tài liệuhướng dẫn và khóa học trực tuyến giúp người mới bắt đầu dễ dàng tiếp cận
2.1.4 Điểm yếu
- Mặc dù Unity là một công cụ mạnh mẽ, nhưng đôi khi các game phức tạp hoặc yêu cầu
đồ họa cao có thể gặp vấn đề về hiệu năng, đặc biệt là trên các thiết bị di động
- Giới hạn trong phát triển đồ họa cao cấp: So với một số công cụ phát triển game khác nhưUnreal Engine, Unity có thể kém hơn trong việc phát triển các game có đồ họa cao cấp vàphức tạp
- Mặc dù Unity có phiên bản miễn phí, nhưng để sử dụng các tính năng cao cấp và không
bị giới hạn doanh thu, nhà phát triển phải mua các gói Unity Plus, Pro hoặc Enterprise, cóthể khá tốn kém
2.2 Ngôn ngữ C#
C# có tính linh hoạt và mạnh mẽ của nó trong việc phát triển các ứng dụng trò chơi, đặcbiệt là khi kết hợp với Unity Engine C# cung cấp một môi trường phát triển hiện đại với hỗtrợ đầy đủ cho lập trình hướng đối tượng, giúp tối ưu hóa quy trình phát triển và bảo trì mãnguồn Khả năng tích hợp mạnh mẽ với NET Framework và Unity Engine giúp tận dụng tối
đa các công cụ và thư viện sẵn có, từ đó giảm thời gian phát triển và nâng cao chất lượng sảnphẩm Hơn nữa, C# có một cộng đồng lập trình viên lớn và tài liệu phong phú, giúp dễ dàngtìm kiếm hỗ trợ và tài liệu tham khảo trong quá trình phát triển
4
Trang 12Hình 2.2 Ngôn ngữ C# và NET
2.2.1 Lịch sử hình thành và phát triển
Cái tên "C sharp" được lấy cảm hứng từ ký hiệu âm nhạc, trong đó một dấu thăng sau nốtnhạc "#" nghĩa là một nốt được chơi cao hơn n cung Điều này tương tự như trường hợp đặttên của ngôn ngữ của C++, trong đó "++" chỉ ra rằng giá trị của một biến nên được tăng lên
1 Biểu tượng # cũng giống với bốn ký tự "+" (trong một lưới 2x2), ngụ ý rằng ngôn ngữ làmột phiên bản tăng cường của C++ (gấp đôi C++) Bởi vì giới hạn kỹ thuật của việc hiển thị(các font chuẩn, trình duyệt ) và sự thật là ký tự thăng không hiện diện trong đa số các bànphím, ký tự đã được chọn để diễn đạt một cách tương đương trong cách viết tên ngôn ngữ
2.2.2 Khái niệm
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áttriển bởi Microsoft, C# là phần khởi đầu cho kế hoạch NET của họ Tên của ngôn ngữ baogồm ký tự thăng theo Microsoft nhưng theo ECMA là C#, chỉ bao gồm dấu số thường.Microsoft phát triển C# dựa trên C++ và Java.[1]
2.2.3 Điểm mạnh
- Hỗ trợ lập trình hướng đối tượng (OOP): C# cung cấp đầy đủ các tính năng OOP như kếthừa, đa hình, đóng gói và trừu tượng hóa, giúp lập trình viên dễ dàng phát triển các ứngdụng phức tạp
- Tích hợp mạnh mẽ với NET: C# hoạt động hiệu quả trên nền tảng NET, cho phép truycập dễ dàng đến các thư viện phong phú của NET Framework và NET Core, hỗ trợnhiều loại ứng dụng từ desktop đến web
Trang 13- Quản lý bộ nhớ tự động: C# có cơ chế quản lý bộ nhớ tự động (Garbage Collection), giúpgiảm thiểu rủi ro rò rỉ bộ nhớ và tối ưu hóa hiệu suất ứng dụng.
- Bảo mật: C# có nhiều tính năng bảo mật tích hợp, bao gồm kiểm tra kiểu dữ liệu tại thờiđiểm biên dịch, hỗ trợ exception handling và các công cụ bảo mật mã nguồn
- Dễ học và sử dụng: C# có cú pháp rõ ràng và dễ hiểu, kết hợp những yếu tố quen thuộc từC++ và Java, giúp lập trình viên nhanh chóng nắm bắt và sử dụng hiệu quả
- Khả năng tích hợp kém với các ngôn ngữ khác: Mặc dù có thể tích hợp với các ngôn ngữkhác qua NET, nhưng C# không có khả năng tích hợp tự nhiên như một số ngôn ngữkịch bản (scripting languages) như Python hoặc JavaScript
2.3 Thuật toán Wave Function Collapse
Thuật toán Wave Function Collapse có khả năng tạo ra các bản đồ ngẫu nhiên với tínhsáng tạo và không trùng lặp, giúp tăng tính thú vị và thách thức cho người chơi WFC khôngchỉ giúp tiết kiệm thời gian thiết kế mà còn mang lại sự đa dạng trong mỗi lần chơi, giữ chotrò chơi luôn mới mẻ và hấp dẫn Hơn nữa, khả năng tuân thủ các quy tắc kết nối của thuậttoán này đảm bảo rằng các bản đồ được tạo ra luôn hợp lý và có tính thẩm mỹ cao Đây làyếu tố quan trọng trong việc tạo ra một trải nghiệm chơi game chất lượng và thu hút ngườichơi
6
Trang 14Hình 2.3 Thuật toán Wave Function Collapse
2.3.1 Lịch sử hình thành và phát triển
Ví dụ đầu tiên về loại thuật toán này được mô tả bởi Paul Merrell, người đầu tiên gọi nó
là 'tổng hợp mô hình' trong bài báo i3D năm 2007 và cũng được trình bày tại hội nghịSIGGRAPH năm 2008 và luận án Tiến sĩ năm 2009 của ông Cái tên 'sụp đổ hàm sóng' sau
đó đã trở thành tên phổ biến cho một biến thể của thuật toán đó, sau khi một triển khai củaMaxim Gumin được xuất bản vào năm 2016 trên kho lưu trữ GitHub với tên đó Việc triểnkhai Gumin đã phổ biến đáng kể kiểu thuật toán này, khiến nó được các nghệ sĩ kỹ thuật vànhà phát triển trò chơi áp dụng và điều chỉnh rộng rãi trong những năm tiếp theo
2.3.2 Khái niệm
Wave Function Collapse (WFC) là một thuật toán mới có thể tạo ra các mẫu thủ tục từmột hình ảnh mẫu Điều này đặc biệt thú vị đối với các nhà thiết kế trò chơi, cho phép chúngtôi vẽ ra ý tưởng của mình thay vì viết mã chúng bằng tay Chúng ta sẽ xem xét các loại đầu
ra mà Wave Function Collapse có thể tạo ra và ý nghĩa của các tham số của thuật toán Nódựa trên lý thuyết từ cơ học lượng tử Tuy nhiên, ứng dụng của nó trong Phát triển trò chơiđơn giản hơn một chút Dựa trên một tập hợp các ô đầu vào hoặc hình ảnh đầu vào, thuậttoán có thể thu gọn các phần của đầu ra xuống dựa trên mối quan hệ của ô hoặc vùng hìnhảnh đó.[3]
2.3.3 Điểm mạnh
Trang 15- Đa dạng và sáng tạo: WFC có thể tạo ra các cấu trúc phức tạp và đa dạng từ các
mẫu đầu vào nhỏ, phù hợp cho việc tạo nội dung tự động như bản đồ trong tròchơi
- Hiệu quả cao: WFC hoạt động tốt với các mẫu đầu vào nhỏ và có thể tạo ra các kết
quả nhanh chóng mà không cần nhiều tài nguyên tính toán
- Dễ tùy chỉnh: Các quy tắc của WFC có thể dễ dàng điều chỉnh để phù hợp với yêu cầu cụ thể, cho phép tạo ra nhiều loại hình mẫu khác nhau
2.3.4 Điểm yếu
- Khó kiểm soát đầu ra: Đôi khi kết quả đầu ra có thể không như mong đợi do tính
ngẫu nhiên và sự phức tạp của các quy tắc
- Phụ thuộc vào mẫu đầu vào: Chất lượng và tính đa dạng của kết quả phụ thuộc rất
nhiều vào mẫu đầu vào ban đầu Nếu mẫu đầu vào không tốt, kết quả sẽ không tốt
- Chi phí bộ nhớ: Đối với các dự án lớn, việc lưu trữ và quản lý tất cả các mẫu và
quy tắc có thể tốn kém bộ nhớ
2.4 Thuật toán Greedy Best First Search
Lý do chọn Greedy Best First Search cho dự án này nằm ở khả năng tìm kiếm nhanhchóng và hiệu quả trong các tình huống không đòi hỏi sự tối ưu hóa tuyệt đối Trong bối cảnhphát triển trò chơi, mục tiêu thường là tạo ra các đường dẫn hợp lý cho kẻ địch thay vì tìmkiếm đường dẫn ngắn nhất tuyệt đối Điều này giúp tiết kiệm tài nguyên và tăng cường trảinghiệm người chơi bằng cách duy trì sự thách thức hợp lý Hơn nữa, sự đơn giản và dễ triểnkhai của GBFS cho phép tập trung vào việc tối ưu hóa các khía cạnh khác của trò chơi, chẳnghạn như thiết kế đồ họa và logic gameplay
2.4.2 Khái niệm
Thuật toán Greedy Best First Search là một công cụ tìm kiếm thuật toán AI cố gắng tìm racon đường hứa hẹn nhất từ điểm xuất phát nhất được định nghĩa đến mục tiêu Nó ưu tiên
8