Tải bản đầy đủ (.pdf) (81 trang)

khóa luận tốt nghiệp xây dựng game coop build coop game

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (8.67 MB, 81 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CƠNG NGHỆ THƠNG TIN

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

THƠNG TIN HỘI ĐỒNG CHẤM KHĨA LUẬN TỐT NGHIỆP

Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số ……… ngày ……….. của Hiệu trưởng Trường Đại học Công nghệ Thông tin.

1 ... – Chủ tịch 2... – Thư ký 3... – Ủy viên 4... – Ủy viên

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

LỜI CẢM ƠN

Khóa luận tốt nghiệp với đề tài “XÂY DỰNG GAME COOP” là minh chứng cho quá trình nỗ lực khơng ngừng nghỉ trong cơng việc tìm tịi, học hỏi suốt hơn 4 năm học tập tại trường Đại học Cơng nghệ Thơng tin.

Trong q trình thực hiện khóa luận, em đã nhận được sự hướng dẫn tận tình từ q thầy cơ, cũng như sự hỗ trợ về mặt chun mơn, tinh thần từ phía gia đình, bạn bè. Em xin chân thành cảm ơn tồn thể q thầy cơ trường Đại học Cơng nghệ Thơng tin nói chung và q thầy cơ trong Khoa Cơng nghệ Phần mềm nói riêng đã dìu dắt em trên chặng hành trình tìm kiếm tri thức. Đó là món q vơ giá, cũng như hành trang hữu ích trên con đường sự nghiệp của bản thân sau này.

Em xin được gửi lời cảm ơn sâu sắc đến cô TS. Đỗ Thị Thanh Tuyền và thầy ThS. Trần Anh Dũng, người đã trực tiếp hướng dẫn, chỉ bảo. Những lời khuyên hữu ích của thầy đã giúp em kịp thời thích ứng và hồn thành đúng tiến độ, đúng yêu cầu được đặt ra ban đầu. Cảm ơn giảng viên phản biện và quý thầy cô trong hội đồng chấm luận văn về những góp ý quý báu. Cuối cùng, xin gửi lời cảm ơn chân thành nhất đến những người đã, đang và sẽ tiếp tục đồng hành, gắn bó cùng em trong từng chặng đường đời.

TP.HCM, 31 tháng 12 năm 2023 Nhóm sinh viên thực hiện NGUYỄN NGỌC THẠCH

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

ĐỀ CƯƠNG CHI TIẾT

<small>TÊN ĐỀ TÀI: XÂY DỰNG GAME COOPGiảng Viên Hướng Dẫn: </small>

<small>- TS. Đỗ Thị Thanh Tuyền - ThS. Trần Anh Dũng. </small>

<small>Thời gian thực hiện: Từ ngày 5/9/2023 đến ngày 31/12/2023 Sinh viên thực hiện: </small>

<small>Nguyễn Ngọc Thạch – 19520265 Nội dung đề tài </small>

<small>1. Lý do chọn đề tài: </small>

<small>- Ngày nay số lượng người sở hữu thiết bị có thể chơi game ngày càng gia tăng, theo đó nhu cầu chơi game tăng theo. Tại Việt Nam số lượng người chơi game đạt mức 50 triệu người, khoảng 50% dân số - cao nhất trong khu vực Đông Nam Á. Tỷ lệ người chơi game sẵn sàng chi trả cũng đứng đầu khu vực. Trong 10 studio game hàng đầu châu Á Thái Bình Dương và Úc, Việt Nam chiếm một nửa. Những con số này cho thấy tiềm năng thị trường game tại Việt Nam rất lớn, và chứng tỏ Việt Nam có vị thế quan trọng trên toàn cầu trong việc sản xuất game. </small>

<small>- Hiện nay có nhiều game engine trên thị trường như Unity, Unreal, Godot, Armory, CryEngine, GameMaker, ... được nhà phát triển và cộng đồng trang bị rất nhiều cơng cụ, giải pháp để hỗ trợ q trình phát triển game nhanh và tốt hơn. </small>

<small>-Mục đích của đề tài này là nghiên cứu áp dụng các nguyên lý thiết kế, mẫu thiết kế phù hợp nhằm quản lý vòng đời của game, triển khai mẫu thiết kế phù hợp cho các module, tăng khả năng mở rộng, giảm sự phụ thuộc vào engine, tái sử dụng cho dự án khác. Mặt khác, trong phát triển game thì hướng đối tượng (OOP) là kiến thức rất quan trọng và là yếu tố ảnh hưởng lớn đến dự án. Vì vậy phát triển game cũng là đề tài phù hợp để áp dụng các kiến thức OOP đã học trên trường. </small>

<small>2. Mục tiêu thực hiện: </small>

<small>- Tham khảo các game có nội dung tương tự trên thị trường, viết Game Design Document. - Tìm hiểu cách triển khai co-op (Steamwork.Net). </small>

<small>- Tìm hiểu các mẫu thiết kế, nguyên lý thiết kế. </small>

<small>- Tìm hiểu shader code để cải thiện đồ họa và tối ưu hiệu năng cho game. </small>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<small>kiến trúc ln có thể mở rộng dễ dàng. 3. Phạm vi: </small>

<small>Phạm vi môi trường: Ứng dụng chạy trên Microsoft Window. Phạm vi chức năng: </small>

<small> - Đối với game: </small>

<small> + Game 3D, góc nhìn nghiêng từ trên xuống. + Hình ảnh, đồ họa Low poly. </small>

<small> + Có khả năng chơi co-op từ 1 đến 4 người. - Đối với gameplay: </small>

<small> + Game tuyến tính, chơi theo màn, hồn thành mục tiêu của từng màn chơi để qua màn tiếp theo. + Các màn chơi có thiết kế độ khó theo interest curve nhằm kích thích hứng thú qua từng màn game. </small>

<small> + Một trị chơi hồn chỉnh, đáp ứng được các chức năng mong muốn: </small>

<small> Chức năng coop: người chơi có thể kết nối và chơi với nhau qua mạng (phạm vi là người dùng steam). Người dùng có thể tạo phịng, mời bạn bè vào phòng, xem danh sách phòng đang mở, tham gia phòng. </small>

<small> Hệ thống khối: map sẽ được xây dựng bởi các khối như minecraft. </small>

<small> Hệ thống công thức khối: các khối sẽ được tạo ra từ sự kết hợp giữa các vật liệu khác nhau như nước, cát, đá, ... </small>

<small> Hệ thống vật liệu: các vật liệu sẽ được khai thác từ môi trường, hoặc được cung cấp từ sự chuẩn bị ở đầu màn chơi. Các vật liệu đó ở mơi trường sẽ có hình dạng gì, vật liệu đó khi được khai thác sẽ có hình dạng gì, làm sao để tương tác. </small>

<small> Hệ thống tương tác, thể loại game hợp tác thường được thiết kế đơn giản về hoạt động trong màn chơi, chỉ tập trung vào một số ít hoạt động cụ thể và phải lặp đi lặp lại với cường độ cao, các tương tác chính: </small>

<small>o Tương tác giữa người chơi với người chơi, hợp tác nhưng vẫn phải có yếu tố cản trở lẫn nhau: </small>

<small> Đẩy: khi người chơi lướt đụng trúng người khác sẽ làm cả 2 rơi đồ vật trên tay. </small>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<small> Thùng hàng: mỗi thùng là 1 loại vật liệu, người chơi có thể dùng xơ để lấy vật liệu hoặc thêm vật liệu vào thùng. </small>

<small> Máy móc: máy để tổng hợp vật liệu từ các vật liệu, máy để tạo khối từ các vật liệu, ... </small>

<small> Bản vẽ, bảng công thức: người chơi sẽ phải luôn nhìn bản vẽ và bảng cơng thức liên tục để biết mình cần làm gì. </small>

<small>o Tương tác giữa người chơi với sinh vật, môi trường (tùy bối cảnh và bị động):  Các môi trường tự nhiên nguy hiểm như nước, lửa, dung nham... sẽ làm </small>

<small>người chơi biến mất và hồi sinh sau vài giây. Các môi trường không tốt như tuyết, băng, rừng rậm sẽ ảnh hưởng đến các khả năng của người chơi (đi chậm, trượt, ...). </small>

<small> Các sự kiện từ môi trường nguy hiểm: đá rơi từ trên cao, bão, sấm sét, ... sẽ làm người chơi biến mất và hồi sinh sau vài giây. </small>

<small> Sinh vật gây cản trở như trâu, sư tử, ma, ... sẽ làm ảnh hưởng đến người chơi như chặn đường, làm choáng, ... </small>

<small> Hệ thống sự kiện biến đổi map: sẽ có 2 sự kiện chính trong 1 màn chơi, sự kiện mở đầu, sự kiện giữa màn chơi. Sự kiện mở đầu thường là sự kiện mà trực quan hóa việc map được tải lên thế nào hoặc là giới thiệu map. Sự kiện giữa màn chơi là sự kiện map thay đổi trong lúc chơi, ví dụ như: map bị chia làm đôi, cây đổ chắn đường, ... </small>

<small> Hệ thống chế độ chơi: chế độ chơi sẽ gồm chơi theo thời gian, chơi 2 đội đua thời gian, ... Chỉ tập trung chế độ chơi theo thời gian, chế độ còn lại sẽ được cập nhật sau. </small>

<small> Hệ thống nhiệm vụ nhỏ trong màn chơi: màn chơi sẽ có nhiệm vụ nhỏ, nếu hồn thành sẽ cộng thêm điểm khi kết thúc màn chơi. Ví dụ: 2 người chơi khơng được húc vào nhau, chặt 5 cây gỗ, chỉ 1 người được xem bản vẽ nhà, ... </small>

<small> Hệ thống đánh giá điểm: sau khi kết thúc màn chơi, hệ thống sẽ đánh giá sản phẩm của người chơi giống được bao nhiêu phần trăm so với yêu cầu, được bao nhiêu điểm vào bao nhiêu sao. </small>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<small>- Sử dụng Trello để quản lý tiến trình và tài liệu. - Sử dụng Github để quản lý source code. Phương pháp nghiên cứu: </small>

<small> - Phân tích yếu tố làm game trở nên đáng chơi và thu hút người dùng. - Nghiên cứu các tài liệu liên quan. </small>

<small> - Tìm hiểu các nguyên lý, mẫu thiết kế làm trọng tâm xây dựng ứng dụng. - Tìm hiểu các phương pháp kết nối chơi game qua mạng. </small>

<small>6. Nền tảng công nghệ: - C# Unity Engine. 7. Kết quả mong đợi: </small>

<small>- Game có thể chơi được, đồ họa được mắt, gameplay lơi cuốn, có thể chơi nhiều người. </small>

<small>- Các mẫu thiết kế, nguyên lý thiết kế được áp dụng đúng nơi đúng chỗ, có khả năng tái sử dụng. - Triển khai demo game lên steam. </small>

<small>8. Hướng phát triển của đề tài: </small>

<small>- Nghiên cứu và thử nghiệm các cách xây dựng gameplay. </small>

<small>- Mở rộng thêm nhiều tính năng trong game. Đồng thời đánh giá để mở rộng code, thay đổi mẫu thiết kế cho phù hợp nếu cần thiết. </small>

<small>- Tối ưu kết nối co-op. 9. Kế hoạch làm việc: </small>

<small>Thời gian thực hiện từ ngày 5 /9/2023 đến ngày 31/12/2023 Chia thành 5 giai đoạn: </small>

<small>Giai đoạn 1: Tìm hiểu các game tương tự trên thị trường, viết game design document. Từ game design document, xác định kiến thức cần tìm hiểu, ticket (scrum) cần hồn thành. </small>

<small>Giai đoạn 2: Tìm hiểu các mẫu thiết kế hay sử dụng trong phát triển game. Từ các ticket tính năng của game đã xác định ở giai đoạn 1, tìm hiểu các cách triển khai. </small>

<small>Giai đoạn 3: Triển khai các tính năng của game và viết tài liệu về kiến trúc đã triển khai (Giai đoạn này một phần sử dụng các model, hình ảnh miễn phí trên mạng). </small>

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<small>Giai đoạn 1 5 ngày </small>

<small>(5/9/2023 – 14/9/2023) </small>

<small>- Ngày 1, 2: Tìm hiểu và chơi các game tương tự trên thị trường. - Ngày 3: Viết game design document. </small>

<small>- Ngày 4, 5: Từ game design document, xác định kiến thức cần tìm hiểu, ticket (scrum) cần hồn thành. </small>

<small>(15/9/2023 – 22/9/2023) </small>

<small>- Tìm hiểu các mẫu thiết kế hay sử dụng trong phát triển game, và thường được áp dụng ở tính năng nào trong game. </small>

<small>- Từ các ticket tính năng của game đã xác định ở giai đoạn 1, tìm hiểu các cách triển khai. </small>

<small>- Triển khai coop với Steamwork. </small>

<small>(26/11/2023 – 19/12/2023) </small>

<small>- Hồn thành model, animation, hình ảnh. </small>

<small>- Thiết kế màn chơi. - Thêm âm thanh. </small>

<small>- Kiểm tra hiệu năng game, tìm cách cải thiện nếu hiệu năng kém (hình ảnh quá nét, model quá nhiều lưới, quá nhiều đối tượng để render, code chưa tối ưu, kiến trúc không phù hợp, ...). </small>

<small>(20/12/2023 – 31/12/2023) </small>

<small>- Kiểm thử toàn bộ game, viết tài liệu báo cáo. </small>

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<small>(Ký tên và ghi rõ họ tên) (Ký tên và ghi rõ họ tên) </small>

<small>Nguyễn Ngọc Thạch </small>

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<small>3.1 Sơ đồ thiết kế hệ thống: ... 21 </small>

<small>Hình 3.1 Sơ đồ thiết kế hệ thống ... 21 </small>

<small>3.2 Sơ đồ Use case: ... 21 </small>

<small>3.3 Danh sách Actor: ... 22 </small>

<small>3.4 Danh sách Use case: ... 22 </small>

<small>3.5 Danh sách đặc tả Use case: ... 23 </small>

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<small>4.4.1 Giao diện Main Menu: ... 57 </small>

<small>4.4.2 Giao diện Select Play: ... 59 </small>

<small>4.4.3 Giao diện Select Play: ... 60 </small>

<small>4.4.4 Giao diện HostRoom:... 61 </small>

<small>4.4.5 Giao diện Map Selecting: ... 63 </small>

<small>4.4.6 Giao diện Playing: ... 64 </small>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

DANH TỪ VIẾT TẮT

<small>1 OOP Object Oriented Programming Lập trình hướng đối tượng 2 GDD Game Design Document Tài liệu thiết kế game 3 CO-OP Cooperative games Game có sự hợp tác giữa </small>

<small>nhiều người. 4 FSM Finate State Machine </small>

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

TÓM TẮT KHÓA LUẬN

Đề tài “Xây dựng game COOP” là một trò chơi hợp tác nhiều người chơi. Trò chơi nhằm mong muốn mang đến trải nghiệm nhiều người chơi hợp tác thú vị trong môi trường trực tuyến. Đề tài nhằm mục tiêu xây dựng trị chơi mà nhiều người có thể tham gia cùng nhau, làm việc hợp tác để giải quyết các thách thức và nhiệm vụ của trò chơi. Tăng cường liên kết giữa người chơi với nhau từ trong trị chơi cũng như đời thật, có thể chơi cùng bạn bè, gia đình.

Với việc sử dụng các cơng nghệ phát triển game tiên tiến hiện có và các giải pháp, em đã gần hoàn thành được trò chơi đa người chơi.

Cấu trúc báo cáo bao gồm:

- Chương 1: Giới thiệu đề tài

- Chương 2: Cơ sở lý thuyết và công nghệ - Chương 3: Phân tích thiết kế hệ thống

-

Chương 4: Xây dựng game

-

Chương 5: Kết luận

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

Chương 1. GIỚI THIỆU ĐỀ TÀI

1.1 Tổng quan:

- Ngày nay số lượng người sở hữu thiết bị có thể chơi game ngày càng gia tăng, theo đó nhu cầu chơi game tăng theo. Tại Việt Nam số lượng người chơi game đạt mức 50 triệu người, khoảng 50% dân số - cao nhất trong khu vực Đông Nam Á. Tỷ lệ người chơi game sẵn sàng chi trả cũng đứng đầu khu vực. Trong 10 studio game hàng đầu châu Á Thái Bình Dương và Úc, Việt Nam chiếm một nửa. Những con số này cho thấy tiềm năng thị trường game tại Việt Nam rất lớn, và chứng tỏ Việt Nam có vị thế quan trọng trên toàn cầu trong việc sản xuất game.

- Hiện nay có nhiều game engine trên thị trường như Unity, Unreal, Godot, Armory, CryEngine, GameMaker, ... được nhà phát triển và cộng đồng trang bị rất nhiều cơng cụ, giải pháp để hỗ trợ q trình phát triển game nhanh và tốt hơn.

-Mục đích của đề tài này là phát triển trò chơi đa người chơi. Kèm theo áp dụng các nguyên lý thiết kế, mẫu thiết kế phù hợp nhằm quản lý vòng đời của game, triển khai mẫu thiết kế phù hợp cho các module, tăng khả năng mở rộng, giảm sự phụ thuộc vào engine, tái sử dụng cho dự án khác. Mặt khác, trong phát triển game thì hướng đối tượng (OOP) là kiến thức rất quan trọng và là yếu tố ảnh hưởng lớn đến dự án. Vì vậy phát triển game cũng là đề tài phù hợp để áp dụng các kiến thức OOP đã học trên trường. 1.2 Mục tiêu thực hiện:

- Tham khảo các game có nội dung tương tự trên thị trường, viết Game Design Document.

- Tìm hiểu cách triển khai co-op (Steamwork.Net, Mirror). - Tìm hiểu các mẫu thiết kế, nguyên lý thiết kế.

- Tìm hiểu shader code để cải thiện đồ họa và tối ưu hiệu năng cho game. - Tìm hiểu cách tối ưu hiệu năng game.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

1.3 Phạm vi:

Phạm vi môi trường: Ứng dụng chạy trên Microsoft Window. Phạm vi chức năng:

- Đối với game:

+ Game 3D, góc nhìn nghiêng từ trên xuống. + Hình ảnh, đồ họa Low poly.

+ Có khả năng chơi co-op từ 1 đến 4 người. - Đối với gameplay:

+ Game tuyến tính, chơi theo màn, hồn thành mục tiêu của từng màn chơi để qua màn tiếp theo.

+ Các màn chơi có thiết kế độ khó theo interest curve nhằm kích thích hứng thú qua từng màn game.

+ Một trị chơi hồn chỉnh, đáp ứng được các chức năng mong muốn:

 Chức năng coop: người chơi có thể kết nối và chơi với nhau qua mạng (phạm vi là người dùng steam). Người dùng có thể tạo phịng, mời bạn bè vào phịng, xem danh sách phòng đang mở, tham gia phòng.

 Hệ thống khối: map sẽ được xây dựng bởi các khối như minecraft.  Hệ thống công thức khối: các khối sẽ được tạo ra từ sự kết hợp giữa các vật liệu khác nhau như nước, cát, đá, ...

 Hệ thống vật liệu: các vật liệu sẽ được khai thác từ môi trường, hoặc được cung cấp từ sự chuẩn bị ở đầu màn chơi. Các vật liệu đó ở môi

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

trường sẽ có hình dạng gì, vật liệu đó khi được khai thác sẽ có hình dạng gì, làm sao để tương tác.

 Hệ thống tương tác, thể loại game hợp tác thường được thiết kế đơn giản về hoạt động trong màn chơi, chỉ tập trung vào một số ít hoạt động cụ thể và phải lặp đi lặp lại với cường độ cao, các tương tác chính:

o Tương tác giữa người chơi với người chơi, hợp tác nhưng vẫn phải có yếu tố cản trở lẫn nhau:

 Đẩy: khi người chơi lướt đụng trúng người khác sẽ làm cả 2 rơi đồ vật trên tay.

 Khiêng: người chơi này có thể khiêng người chơi kia và thẩy như đồ vật.

 Tương tác giữa người chơi với dụng cụ lao động:

 Cuốc: dùng để đập tất cả mọi thứ trong trò chơi: khối, gỗ, động vật, ...

 Xô: dùng để đựng các vật liệu.

o Tương tác giữa người chơi với đồ khác trong màn chơi:

 Thùng hàng: mỗi thùng là 1 loại vật liệu, người chơi có thể dùng xơ để lấy vật liệu hoặc thêm vật liệu vào thùng.

 Máy móc: máy để tổng hợp vật liệu từ các vật liệu, máy để tạo khối từ các vật liệu, ...

 Bản vẽ, bảng công thức: người chơi sẽ phải ln nhìn bản vẽ và bảng cơng thức liên tục để biết mình cần làm gì.

o Tương tác giữa người chơi với sinh vật, môi trường (tùy bối cảnh và bị động):

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

trường không tốt như tuyết, băng, rừng rậm sẽ ảnh hưởng đến các khả năng của người chơi (đi chậm, trượt, ...).

 Các sự kiện từ môi trường nguy hiểm: đá rơi từ trên cao, bão, sấm sét, ... sẽ làm người chơi biến mất và hồi sinh sau vài giây.  Sinh vật gây cản trở như trâu, sư tử, ma, ... sẽ làm ảnh hưởng đến người chơi như chặn đường, làm choáng, ...

 Hệ thống sự kiện biến đổi map: sẽ có 2 sự kiện chính trong 1 màn chơi, sự kiện mở đầu, sự kiện giữa màn chơi. Sự kiện mở đầu thường là sự kiện mà trực quan hóa việc map được tải lên thế nào hoặc là giới thiệu map. Sự kiện giữa màn chơi là sự kiện map thay đổi trong lúc chơi, ví dụ như: map bị chia làm đôi, cây đổ chắn đường, ...

 Hệ thống chế độ chơi: chế độ chơi sẽ gồm chơi theo thời gian, chơi 2 đội đua thời gian, ... Chỉ tập trung chế độ chơi theo thời gian, chế độ còn lại sẽ được cập nhật sau.

 Hệ thống nhiệm vụ nhỏ trong màn chơi: màn chơi sẽ có nhiệm vụ nhỏ, nếu hoàn thành sẽ cộng thêm điểm khi kết thúc màn chơi. Ví dụ: 2 người chơi khơng được húc vào nhau, chặt 5 cây gỗ, chỉ 1 người được xem bản vẽ nhà, ...

 Hệ thống đánh giá điểm: sau khi kết thúc màn chơi, hệ thống sẽ đánh giá sản phẩm của người chơi giống được bao nhiêu phần trăm so với yêu cầu, được bao nhiêu điểm vào bao nhiêu sao.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

- Tìm hiểu cách làm model và animation với Maya.

- Tìm hiểu Steamwork.Net, Mirror để triển khai tính năng Coop. - Sử dụng Trello để quản lý tiến trình và tài liệu.

- Sử dụng Github để quản lý source code.

1.6 Các game trên thị trường: 1.6.1 Unrailed:

Hình 1.1 Trị chơi Unrailed

Unrailed là một game hợp tác nhiều người chơi nơi mà game thủ phải làm việc cùng bạn bè để xây dựng đường ray cho một đoàn tàu qua các thế giới được tạo ngẫu nhiên vô tận. Trên chuyến đi nhiệm vụ bạn phải đụng độ với các sinh vật sống khác, bạn phải nâng cấp đồn tàu và ngăn nó khơng bị trật đường. Game có thể chơi trực tuyến hoặc trên cùng một máy với tối đa bốn người chơi trong một đội. Game có nhiều chế độ khác nhau, như không giới hạn, cát bụi, hay đối đầu. Game cũng có nhiều loại toa xe khác nhau để bạn có thể tùy biến đồn tàu của mình. Game có đồ họa dễ thương và hài hước, phù hợp cho những người muốn chơi game giải trí cùng bạn bè.

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

1.6.2 MovingOut:

Hình 1.2 Trị chơi Moving Out

Moving Out là một game hợp tác nhiều người chơi nơi bạn phải làm việc cùng bạn bè để chuyển đồ đạc từ nhà ra xe tải trong thời gian giới hạn. Bạn phải đối phó tính toán nên khiêng các vật nặng nề theo cách nào, và các chướng ngại vật (như cái cào, lửa, băng, hay ma) trong q trình chuyển hàng. Bạn có thể ném đồ đạc, đập vỡ cửa sổ. Game có thể chơi 4 người qua mạng. Game có nhiều nhân vật với hình ảnh dễ thương khác nhau để người chơi tùy biến theo sở thích. Game có đồ họa sặc sỡ và hài hước, phù hợp cho những người muốn chơi game giải trí cùng bạn bè.

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

1.6.3 Overcooked 2:

Hình 1.3 Trị chơi Overcooked 2

Overcooked 2 là một game mô phỏng nấu ăn hợp tác. Trong game này, bạn sẽ vào vai một đầu bếp sushi và phải làm việc cùng bạn bè để chuẩn bị, nấu và phục vụ các món ăn cho khách hàng trong thời gian giới hạn. Bạn phải chăm lo với các món ăn của bạn, và vượt qua các chướng ngại vật trong quá trình nấu ăn. Game có thể chơi trực tuyến tối đa bốn người. Game có đồ họa sặc sỡ và hài hước, phù hợp cho những người muốn chơi game giải trí cùng bạn bè.

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ

2.1 Unity:

Hình 2.1 Unity

- Unity là một công cụ phát triển game đa nền tảng được phát triển bởi Unity Technologies từ năm 2005. Unity hỗ trợ đồ họa 2D và 3D, ngơn ngữ lập trình được sử dụng chủ yếu là ngôn ngữ C#.

- Đa nền tảng : Unity có thể được dùng để tạo game cho máy tính, điện thoại, console và web. Unity cũng hỗ trợ các nền tảng thực tế ảo và thực tế tăng cường. Unity cung cấp một môi trường làm việc trực quan và linh hoạt hơn so với đa số các engine khác.

- Công cụ: Unity cũng cung cấp nhiều công cụ cần thiết trong quá trình phát triển game Animator, Timeline, Cinemachine. Unity cũng có một Asset Store lớn, người dùng có thể mua hoặc tải về miễn phí các tài ngun như mơ hình 3D, âm thanh, vật lý, AI,…

- Cộng đồng: Một điểm mạnh khác là Unity cũng có một cộng đồng lập trình viên rất đơng đảo và nhiệt tình, nơi có thể học hỏi, trao đổi kinh nghiệm và giải quyết các vấn

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

những khóa học hay sự kiện và cuộc thi nâng cao kỹ năng cộng đồng và tạo môi trường giao lưu với các nhà phát triển khác.

- Bên cạnh đó Unity là một cơng cụ phát triển game rất mạnh mẽ và phổ biến, đã được dùng để tạo ra nhiều game nổi tiếng như Among Us, Fall Guys, Genshin Impact,…

2.2 Mirror Networking:

Hình 2.2 Mirror Networking

- Mirror là một chương trình mạng cho Unity, giúp xây dựng game nhiều người chơi với Unity. Là một dự án được phát triển bởi cộng đồng, dự án được fork từ Unet - Chương trình mạng đã bị khai tử bởi Unity, hiện Unity đang phát triển chương trình mạng mới nhưng vẫn ít người sử dụng.

- Mirror cung cấp khả năng kết nối qua mạng, tích hợp các tính năng giúp chơi game qua mạng mượt mà hơn. Mirror hỗ trợ cả mơ hình P2P và client-server.

- Mirror cũng cung cấp khả năng đồng bộ nhiều loại dữ liệu giữa các người chơi. Ngoài những dữ liệu cơ bản của ngơn ngữ C#, Mirror cịn đồng bộ hoạt ảnh, vị trí, vật lý, ...

Nói chung Mirror được thiết kế với mục tiêu làm cho phát triển trò chơi nhiều người chơi qua mạng trở nên dễ hơn.

2.2.1 Các khái niệm cơ bản trong Miror:

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

- Network Behavior: Là lớp kế thừa từ MonoBehavior của Unity. Lớp này chứa các phương thức, thuộc tính cần có để tương tác qua mạng.

- Network Manager: Là lớp đóng vai trị trung tâm điều khiển của mọi hoạt động mạng của Mirror. Network Manager xử lý việc khởi động, quản lý kết nối và cung cấp phản ứng kết nối giữa client và server.

- Rpc: Dùng để gửi yêu cầu từ server đến client.

+ ClientRpc: Dùng để gửi yêu cầu đến tất cả client. + TargetRpc: Dùng để gửi yêu cầu đến client cụ thể.

Hình 2.4 Phương thức Client Rpc

2.2.2 Nghiên cứu và áp dụng Mirror trong đồ án:

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

- Đồ án phát triển theo mơ hình client-server, Mirror có cung cấp khả năng này. - Người tạo phòng sẽ vừa là client và server, còn gọi là host.

- Người tham gia phòng sẽ là client. 2.3 Steam:

Hình 2.5 Steam

Steam là nền tảng phân phối và chơi trò chơi trên console đứng đầu thế giới, được phát triển và quản lý bởi Valve Corporation. Là nhà phát triển của tựa game nổi tiếng Half Life. Steam có phần giống như Google Play hay App Store, nhưng kèm theo đó cịn là các dịch vụ liên quan khác như:

- Tích hợp xã hội và cộng đồng: Steam cung cấp các tính năng tính năng như thêm bạn bè, nhắn tin, tặng quà, mở và tham gia cộng đồng, đánh giá trò chơi, ...

- Steam WorkShop: cung cấp khả năng chia sẻ nội dung tùy chỉnh giữa người chơi với nhau như cho phép người dùng thiết kế và chia sẻ màn chơi mới, góp phần làm

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

2.3.1 Steamworks SDK:

Steamworks SDK là một bộ công cụ phát triển phần mềm của Steam, giúp nhà phát triển tích hợp trị chơi của họ với nền tảng Steam. SDK này bao gồm nhiều tính năng như lưu trữ đám mây, thống kê và thành tựu trong trò chơi, cũng như hỗ trợ cho việc phát hành và cập nhật trị chơi. Steamworks SDK là một cơng cụ mạnh mẽ và linh hoạt, giúp các nhà phát triển mở rộng tầm ảnh hưởng của trò chơi trên một trong nền tảng phân phối trò chơi lớn nhất thế giới.

2.3.2 Nghiên cứu và áp dụng Steam trong đồ án:

- Tận dụng sức mạnh cở sở hạ tầng của Steam để kết nối qua mạng mà khơng cần 1 server bên ngồi.

- Ra mắt game trên Steam.

- Tích hợp Steamworks SDK để tạo phịng, tìm phịng và tham gia phịng. - Tích hợp Steam Cloud để lữu trữ dữ liệu trò chơi.

- Tận dụng kỹ thuật mạng sẵn có của Steam. 2.4 Hệ thống màn chơi:

- Mỗi màn chơi gồm 8 yếu tố:

+ Người chơi: người chơi có thể tương tác với một số đồ vật trong map. Nhiệm vụ của người chơi là thu thập vật liệu và tạo ra các khối để xây nhà. Màn chơi kết thúc khi hết giờ hoặc cả 4 người chơi đều bước vào vùng được đánh dấu là “hoàn thành”.

+ Khối: người chơi có thể cầm và đặt khối, dùng để xây nhà. + Xơ: người chơi có thể cầm và đựng vật liệu.

+ Thùng hàng: người chơi có thể cầm xơ và lấy vật liệu.

+ Máy tạo khối: hấp thụ vật liệu được cung cấp bởi người chơi và tạo ra các khối.

+ Vùng xây nhà: là vùng có các khối cơ bản để người chơi đặt khối khác lên và xây nhà.

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

+ Vùng hoàn thành: khi người chơi muốn kết thúc và tính điểm thì tất cả người chơi phải cùng đứng vào vùng này.

+ Tác nhân cản trở: là nhân tố cản trở người chơi trong quá trình xây nhà. 2.5 Thiết lập màn chơi:

- Dữ liệu màn chơi được lưu vào 1 loại dữ liệu của Unity là Scriptable Object. Dữ liệu được lấy trong giai đoạn tạo map trên editor, sao chép tất cả trạng thái map, dữ liệu này có:

+ MapIndex (byte): Số thứ tự của màn chơi, dùng để xác định màn chơi nào đang được chơi.

+ PlayerSpawnPos (list<Vector3>): Vị trí mà người chơi có thể được sinh ra. + BlockMachinePos (list<Vector3>): Số lượng máy tạo khối và vị trí máy được sinh ra.

+ SupplyBoxPos (list<Vector3>): Số lượng thùng hàng và vị trí được sinh ra. + SupplyBoxSettings (List<BoxSettings>): Dữ liệu để khởi tạo thùng hàng. + PickableObjectPos (list<PickableObject>): Danh sách đồ vật người chơi có thể cầm lên được.

+ GameObjectInfo (Tree): là cây GameObject được sao chép nguyên như trên editor, để khởi tạo bản đồ.

+ EnvironmentInfo: là các thuộc tính để khởi tạo mơi trường của màn chơi.

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

Hình 2.7 Kiểu dữ liệu của màn chơi

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

2.6 Công thức tạo block:

- Một block sẽ được tạo ra bởi sự kết hợp của một số vật liệu, dữ liệu gồm: + Settings (List<BuilddingMaterialSettings): Danh sách vật liệu cấu thành. + OutputBlock (GameObject): Khối được tạo ra tương ứng.

Hình 2.8 Dữ liệu cơng thức tạo block

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

2.7.2 Vật liệu có thể đốt được: - Gồm các dữ liệu:

+ Icon (sprite): hình ảnh sẽ được hiển thị khi đựng trong thùng hàng. + Name (string): tên vật liệu.

+ Burnable Time (byte): thời gian đốt cung cấp thêm năng lượng cho máy tạo khối.

Hình 2.10 Dữ liệu vật liệu cháy được

2.8 Cảnh chọn màn chơi:

Cảnh chọn màn chơi là nơi mà tất cả người chơi chọn màn mình muốn. 2.8.1 Các màn chơi (cột cờ):

- Bản đồ màn chơi gồm nhiều cột cờ mà người chơi có thể tương tác.

- Mỗi cột cờ tượng trưng cho một màn chơi, cột cờ sẽ chứa thông tin màn chơi như số thứ tự màn chơi, hình ảnh xem trước màn chơi và kết quả đã chơi (nếu có).

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

+ Nếu nhân vật muốn bắn cầu lửa, nhân vật phải có kỹ năng “FireBallSkill”. Nếu muốn nhân vật có thể bắn cầu lửa nhanh hơn, ta có thể tăng cấp “FireBallSkill

- Nhân vật gồm có các dữ liệu sau:

+ move_skill_level_index (byte): cấp độ di chuyển. + jump_skill_level_index (byte): cấp độ nhảy. + pickup_skill_level_index (byte): cấp độ nhặt.

+ throw_skill_level_index (byte): cấp độ quăng đồ vật.

+ block_interact_skill_level_index (byte): cấp độ tương tác với block. + bucket_interact_skill_level_index (byte): cấp độ tương tác với xô. + smash_axe_skill_level_index (byte): cấp độ vung rìu.

+ interact_skill_level_index (byte): cấp độ tương tác.

+ skin_skill_level_index (byte): skin và animator hiện tại đang sử dụng.

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Hình 2.11 Dữ liệu player

Hình 2.11 Dữ liệu một skill

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

2.9.1 Cấu trúc hệ thống kỹ năng:

- Các Skill được thiết kế để có thể “gắn” và “gỡ”. Hệ thống có khả năng đa dạng hóa trạng thái của một người chơi.

- Các Skill sẽ được Skill System quản lý thêm, xóa, lên cấp, xuống cấp.

- Các Skill được thiết kế theo observer pattern. Các Skill sẽ theo dõi input của người chơi và phản ứng.

2.10 Lập trình phản ứng (Reactive Programming) với Unirx:

Hình 2.12 Thư viện Unirx

- Để dễ dàng thiết kế observer pattern cho hệ thống kỹ năng cũng như hệ thống khác trong trò chơi. Em sử dụng thư viện Unirx, là một thư viện lập trình phản ứng.

- Ưu điểm khi sử dụng Unirx là logic trò chơi được giảm thiểu. Một số logic như thời gian hồi chiêu, kiểm tra điều kiện trước khi hành động sẽ được đơn giản hóa. Ví dụ:

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

CHƯƠNG 3: PHÂN TÍCH THIÊT KẾ HỆ THỐNG GAME

3.1 Sơ đồ thiết kế hệ thống:

Hình 3.1 Sơ đồ thiết kế hệ thống

3.2 Sơ đồ Use case:

Hình 3.2: Sơ đồ Use Case tổng quát

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

3.3 Danh sách Actor:

Bảng 3.1: Danh sách Actor

3.4 Danh sách Use case:

Bảng 3.2: Danh sách Use case

2 Tìm phịng bằng mã Người chơi Tham gia phòng bạn bè với mã phòng.

3 Chọn màn chơi Người chơi Chọn màn chơi trong cảnh chọn màn chơi.

4 Bắt đầu màn chơi Người chơi Bắt đầu màn chơi trong cảnh chọn màn chơi.

5 Bắt đầu lại màn chơi Người chơi Bắt đầu lại màn chơi khi đang trong màn chơi.

6 Chọn lại màn chơi Người chơi Chọn lại màn chơi khác khi đang trong màn chơi.

7 Chủ động kết thúc màn chơi

Người chơi Khi đã hoàn thành xây dựng, tất cả người chơi cần di chuyển vào đúng vị trí để kết thúc màn chơi. 8 Điều chỉnh âm thanh Người chơi Điều chỉnh âm thanh.

9 Kích hoạt kỹ năng Người chơi Người chơi thao tác trong màn chơi.

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

3.5 Danh sách đặc tả Use case: a. Tạo phịng

Hình 3.3: Sơ đồ hoạt động Tạo phòng Bảng 3.3: Use case Tạo phòng

phòng chơi qua mạng. Mã phòng sẽ được tạo ra sau khi tạo phòng, mã này dùng để tham gia phòng từ người chơi khác.

Điều kiện bắt đầu - Người chơi có kết nối mạng.

- Người chơi phải đang mở ứng dụng Steam.

Điều kiện kết thúc - Người chơi tạo được phịng. - Có thể tham gia bằng mã phịng. - Có thể tham gia từ thanh bạn bè của Steam.

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

Dòng sự kiện chính - Người chơi ở màn hình “Main Menu” chọn “Play”.

- Người chơi ở màn hình “Select Play”, chọn “Create Room”.

- Người chơi đã tạo được phòng và xem được mã phòng.

Dòng sự kiện khác - Người chơi mời bạn bè từ thanh bạn bè của Steam.

- Người chơi đã vào được phòng và thấy bạn bè.

b. Tìm phịng bằng mã

Hình 3.4: Sơ đồ hoạt động Tìm phịng bằng mã

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

Bảng 3.4: Use case Tìm phịng bằng mã

gia phịng bạn bè với mã phòng của bạn bè.

Điều kiện bắt đầu - Người chơi có kết nối mạng. - Người chơi mở ứng dụng Steam. Điều kiện kết thúc - Người chơi vào được phòng bạn bè.

- Người chơi thấy được bạn bè.

</div>

×