NGHIÊN CỨU LÝ THUYẾT
Cơ sở lý thuyết
2.1.1 Tổng quan về trò chơi điện tử
Trò chơi là một hình thức giải trí tương tác, trong đó người chơi tham gia vào các hoạt động có cấu trúc nhằm mục đích giải trí, thử thách, cạnh tranh hoặc học hỏi Các loại trò chơi đa dạng, bao gồm trò chơi điện tử, trò chơi trên bàn cờ, trò chơi bài, thể thao và câu đố.
Các đặc điểm chính của trò chơi bao gồm:
Trò chơi được xây dựng trên các quy tắc rõ ràng, giúp xác định ranh giới và thông số hoạt động của người chơi Những quy tắc này không chỉ quy định hành động nào được phép hoặc bị cấm, mà còn hướng dẫn tiến trình và kết quả của trò chơi.
Trong trò chơi, người chơi thường phải đạt được những mục tiêu cụ thể, có thể là hoàn thành một câu chuyện, giải quyết câu đố, giành chiến thắng trong cuộc thi hoặc tích lũy điểm Những mục tiêu này đa dạng và đóng vai trò quan trọng trong trải nghiệm chơi game.
Trò chơi nổi bật với tính tương tác, yêu cầu người chơi tham gia tích cực bằng cách đưa ra quyết định và thực hiện hành động, từ đó ảnh hưởng đến kết quả Điều này tạo ra sự khác biệt rõ rệt giữa trò chơi và các hình thức giải trí thụ động như xem phim hay đọc sách.
Trò chơi thường mang đến cho người chơi những thử thách như chướng ngại vật, câu đố hoặc đối thủ, tạo ra cảm giác gắn kết và động lực Những thử thách này không chỉ khuyến khích người chơi vượt qua khó khăn mà còn mang lại phần thưởng khi họ đạt được các mục tiêu trong trò chơi.
Trò chơi cung cấp phản hồi đa dạng cho người chơi, phản ánh hành động và tiến trình của họ Phản hồi này có thể bao gồm tín hiệu thị giác, âm thanh, điểm số, việc tăng cấp độ hoặc các hình thức phản hồi khác.
13 tường thuật Phản hồi giúp người chơi hiểu hiệu suất của họ và đưa ra quyết định để cải thiện hoặc điều chỉnh chiến lược của họ
Chơi trò chơi là một hoạt động tự nguyện, nơi người chơi chủ động tham gia vào không gian trò chơi và chấp nhận các quy tắc cùng thử thách được đề ra.
Trò chơi phục vụ nhiều mục đích như giải trí, giáo dục, tương tác xã hội và phát triển kỹ năng Chúng có thể được thiết kế cho người chơi đơn, trải nghiệm nhiều người chơi hoặc cộng đồng trực tuyến lớn Sự tiến bộ công nghệ đã tạo ra các trò chơi điện tử phức tạp với đồ họa phong phú, vật lý chân thực và cốt truyện sâu sắc.
Trò chơi mang lại một hình thức giải trí năng động và tương tác, thu hút tâm trí, cảm xúc và kỹ năng của người chơi, tạo ra những trải nghiệm thú vị và độc đáo.
2.1.2 Sơ lược về chuyển động của xe ô tô
Trong trò chơi, nhân vật mà người chơi điều khiển là một chiếc xe hơi trang bị vũ khí, do đó cần mô phỏng các kiểu chuyển động như tiến, lùi, bẻ lái, tăng tốc và kỹ thuật drift Để tạo ra trải nghiệm tối ưu, mức độ thực tế của chuyển động phải được cân bằng với nhịp độ và địa hình của trò chơi, mang đến cảm giác phấn khích và chân thực cho người chơi.
Trong bất kỳ tựa game đua xe nào, trải nghiệm drift là điều không thể thiếu Drift là kỹ thuật lái xe mà người lái chủ ý bẻ lái quá mức, khiến bánh sau mất lực kéo và trượt ngang qua khúc cua Người lái xe cần duy trì khả năng điều khiển trong khi trượt, với góc trượt phía sau lớn hơn phía trước trước khi vào góc cua Ví dụ, khi một chiếc xe rẽ trái, bánh phía trước có thể ở vị trí rẽ phải.
Kỹ thuật drift xe ô tô là một phương pháp lái xe nghệ thuật, trong đó tài xế kiểm soát xe khi bánh sau trượt ra khỏi đường đi Kỹ thuật này không chỉ yêu cầu sự chính xác và tinh tế mà còn cần hiểu biết sâu sắc về động cơ và khả năng xử lý của xe Drift xe đã trở thành một phần không thể thiếu trong các cuộc đua xe thể thao và các sự kiện trình diễn, thu hút sự chú ý của nhiều người yêu thích tốc độ Việc thực hiện kỹ thuật drift đòi hỏi sự luyện tập và kỹ năng, giúp tài xế nâng cao khả năng điều khiển xe trong các tình huống khó khăn.
Hình 2.2: Mô tả quá trình thực hiện drift xe (Nguồn: “Drifting”, https://www.formula1-dictionary.net/drifting.html)
Dựa trên hệ dẫn động, xe hơi được chia thành ba loại chính, mỗi loại mang những đặc tính riêng biệt, giúp người dùng lựa chọn xe phù hợp nhất để có trải nghiệm tốt nhất.
Xe RWD (dẫn động cầu sau) có động cơ chỉ truyền sức mạnh tới bánh sau, giúp tăng tốc và xử lý tốt hơn, đặc biệt cho ô tô hiệu suất cao Tuy nhiên, xe RWD cũng có xu hướng dễ bị trượt đuôi khi vào cua, điều này khiến chúng trở nên phổ biến trong việc drift.
Xe FWD (Dẫn động cầu trước) truyền động lực đến bánh trước, mang lại khả năng bám đường tốt hơn trong điều kiện trơn trượt và tiết kiệm nhiên liệu hiệu quả Tuy nhiên, xe FWD thường gặp hiện tượng thiếu lái, khiến phần đầu xe có xu hướng mở rộng khi vào cua, làm cho việc drift trở nên khó khăn hơn.
Công nghệ sử dụng
Unity là một game engine đa nền tảng do Unity Technologies phát triển, ra mắt lần đầu vào năm 2005 Đây là một trong những phần mềm phát triển trò chơi phổ biến nhất hiện nay.
Unity cung cấp giải pháp phần mềm toàn diện cho việc tạo, vận hành và kiếm tiền từ nội dung 2D và 3D tương tác trong thời gian thực.
Unity sở hữu giao diện người dùng (UI) trực quan và thân thiện, được thiết kế với tính năng kéo và thả, giúp người dùng dễ dàng thao tác, ngay cả những người không có kinh nghiệm lập trình.
Unity chủ yếu sử dụng C# làm ngôn ngữ kịch bản, đây là tiêu chuẩn công nghiệp được công nhận, nổi bật với sức mạnh và tính linh hoạt trong phát triển trò chơi.
Unity hỗ trợ phát triển đa nền tảng, bao gồm Windows, MacOS, Linux, Android, iOS, PlayStation, Xbox và nhiều hơn nữa Điều này giúp các nhà phát triển có thể tạo ra trò chơi một lần và triển khai trên nhiều nền tảng với chỉ một vài sửa đổi cần thiết.
Unity cung cấp một cửa hàng tài sản cho phép các nhà phát triển mua và bán các tài sản phát triển trò chơi như mô hình 3D, kịch bản, clip âm thanh và hệ thống AI phức tạp, giúp rút ngắn đáng kể thời gian phát triển trò chơi.
Unity cung cấp một hệ thống xử lý hình ảnh và âm thanh mạnh mẽ, hỗ trợ nhiều hiệu ứng hình ảnh như bộ đổ bóng, hệ thống hạt và hiệu ứng xử lý hậu kỳ Đối với âm thanh, Unity tích hợp bộ trộn âm thanh và khả năng xử lý âm thanh không gian, giúp tăng cường độ đắm chìm cho người chơi.
Unity cung cấp một công cụ vật lý tích hợp, cho phép mô phỏng các hiện tượng vật lý trong thế giới thực, giúp dễ dàng triển khai các tính năng như trọng lực, phát hiện va chạm và tương tác vật lý trong trò chơi của bạn.
Cộng đồng Unity rất lớn và năng động, cung cấp nhiều hướng dẫn, diễn đàn và tài nguyên trực tuyến hữu ích cho các nhà phát triển Điều này giúp người dùng dễ dàng học hỏi và giải quyết các vấn đề trong quá trình sử dụng Unity.
Unity Learn là nền tảng học tập trực tuyến của Unity, cung cấp nhiều hướng dẫn và buổi đào tạo trực tiếp Nền tảng này hỗ trợ người mới bắt đầu làm quen với công nghệ, đồng thời giúp các nhà phát triển nâng cao kỹ năng và tiếp cận các kỹ thuật, khái niệm mới.
Hình 2.4: Giao diện cơ bản của Unity
2.2.2.1 Unity Netcode for Game Objects
Netcode for Game Objects (NGO) là thư viện cao cấp giúp xử lý kết nối mạng ở tầng trừu tượng, cho phép gửi dữ liệu đồng thời đến tất cả người chơi qua một phiên kết nối Với NGO, các nhà phát triển có thể tập trung vào việc phát triển tính năng game mà không phải lo lắng về việc xử lý giao thức mạng.
Những tính năng đắc lực của NGO, có thể kể đến như:
Đồng bộ hóa việc khởi tạo, tiêu hủy và cập nhật trạng thái của Game Object có thể thực hiện một cách tự động hoặc thủ công thông qua việc sử dụng lời gọi thủ tục từ xa (RPC).
• Xử lý các tình huống máy khách kết nối và ngắt kết nối
NGO hỗ trợ cho nhiều nền tảng khác nhau:
• XR chạy trên hệ điều hành Windows, Android và iOS
Hầu hết các nền tảng đóng như PlayStation, Xbox và Nintendo Switch yêu cầu các nhà phát triển tuân thủ chính sách nghiêm ngặt trong quá trình kiểm thử trước khi phát hành game.
Thư viện này vẫn tồn tại một số hạn chế, đặc biệt là trong các tựa game trực tuyến cạnh tranh, nơi bảo mật và ngăn chặn gian lận là rất quan trọng Một nhược điểm nghiêm trọng là thiếu tính năng thay đổi máy chủ, dẫn đến việc nếu máy chủ ngắt kết nối vì bất kỳ lý do nào, tất cả người chơi sẽ bị ngắt kết nối mà không có phương án thay thế nào cho máy chủ.
Dịch vụ Relay của Unity cung cấp cơ sở hạ tầng mạng cho phép giao tiếp giữa các máy khách trong trò chơi đa người chơi Nó hoạt động như một trung gian, chuyển tiếp lưu lượng mạng giữa các máy khách không thể kết nối trực tiếp do cấu hình mạng, tường lửa hoặc các hạn chế khác Thư viện này mang lại sự thuận tiện và linh hoạt cho phát triển trò chơi đa người chơi, đơn giản hóa kết nối mạng và khắc phục các vấn đề liên quan đến mạng.
PHÂN TÍCH YÊU CẦU PHẦN MỀM
Phân tích yêu cầu hệ thống
3.1.1 Phân tích yêu cầu chức năng
3.1.1.1 Ứng dụng cho phép nhiều người chơi tham gia
• Xử lý các nhu cầu cơ bản của quá trình tìm trận, như tạo đại sảnh, tham gia và rời đại sảnh, v.v
• Xử lý tình huống khi người chơi thoát trận, yêu cầu kết nối lại
• Trò chơi đảm bảo kết nối mượt mà, hạn chế tình huống bị gián đoạn hay trễ
3.1.1.2 Ứng dụng có vòng lặp trò chơi cốt lõi tốt
Vòng lặp trò chơi cốt lõi bao gồm những hành động cụ thể mà người chơi thực hiện một cách lặp đi lặp lại trong suốt quá trình chơi.
Vòng lặp trò chơi cốt lõi được cấu thành từ 3 yếu tố chính:
• Hành động: Người chơi thực hiện một hành động cốt lõi (Core gameplay)
Người chơi sẽ nhận được phần thưởng dưới dạng tài nguyên trong game, bao gồm tiền tệ, điểm kinh nghiệm hoặc các yếu tố cụ thể như kỹ năng và vật phẩm Hình thức khen thưởng này có thể thay đổi tùy theo tiến trình chơi và từng chế độ chơi khác nhau.
Người chơi sử dụng phần thưởng để đạt được các mục tiêu trong game, như mở khóa nhân vật mới, nâng cấp nhân vật, mua sắm trang bị, và khám phá những vùng đất mới.
Hình 3.1: Vòng lặp bắt buộc phải có trong bất kỳ trò chơi nào
(Nguồn: “The Free to Play Game Design Bible: Crafting a Strong Core Loop”, https://mobilefreetoplay.com/bible/crafting-strong-core-loop/)
3.1.1.3 Trò chơi có hệ thống tùy chỉnh nhân vật
Người chơi điều khiển một chiếc xe chiến đấu, do đó việc tùy chỉnh nhân vật đồng nghĩa với việc điều chỉnh các bộ phận của xe Các bộ phận được lắp đặt nhằm phục vụ cho ba mục đích chính.
• Tác động đến chỉ số của chiếc xe (độ bền, tốc độ, mức tải trọng, khả năng gây sát thương…)
• Cung cấp cho người chơi những kỹ năng có thể kích hoạt trong màn chơi
• Tân trang vẻ ngoài của chiếc xe mà không ảnh hưởng đến bất kỳ yếu tố khác trong trò chơi, như đổi màu sơn, họa tiết của chiếc xe
3.1.1.4 Trò chơi có hệ thống nhiệm vụ đa dạng
Nhiệm vụ trong trò chơi là công việc mà người chơi có thể thực hiện để nhận phần thưởng, bao gồm vật phẩm, đơn vị tiền tệ, mở khóa màn chơi mới hoặc tăng điểm kinh nghiệm để học kỹ năng mới.
Phân loại một số nhiệm vụ thường gặp:
• Nhiệm vụ hộ tống: Buộc phải bảo vệ một hoặc một nhóm nhân vật khác trên một lộ trình khỏi sự tấn công của kẻ địch
• Nhiệm vụ chiến đấu: Buộc phải tiêu diệt hoàn toàn một lượng kẻ địch
• Nhiệm vụ thu thập: Buộc phải đạt được một lượng vật phẩm xác định
• Nhiệm vụ tẩu thoát: Buộc phải trốn thoát khỏi sự truy đuổi bằng cách ra khỏi tầm nhìn của kẻ địch hoặc tiêu diệt hết kẻ địch
• Nhiệm vụ cố thủ: Buộc phải bảo vệ một địa điểm, đối tượng đứng im khỏi sự tấn công của kẻ địch
• Nhiệm vụ giới hạn thời gian: Buộc phải hoàn thành một nhiệm vụ trong một khoảng thời gian xác định
3.1.1.5 Người chơi buộc phải chiến đấu với đa dạng chủng loại kẻ địch
Mỗi loại kẻ địch trong trò chơi đều có chỉ số và hành vi đặc trưng riêng Zombie thông thường sẽ đơn thuần đuổi theo và tấn công người chơi khi ở trong tầm nhìn Tanker là loại zombie có ngoại hình lớn, tốc độ chậm nhưng sở hữu lượng máu khổng lồ và có khả năng ném vật thể về phía người chơi Crafter, với kích thước nhỏ nhắn và nhanh nhẹn, không tham gia chiến đấu mà thu thập tài nguyên để chế tạo vật phẩm, giúp tăng chỉ số cho zombie thông thường Cuối cùng, Bomber có lượng máu gần bằng Tanker và có khả năng tự phát nổ khi tiếp cận mục tiêu hoặc sau khi bị tiêu diệt.
Tiếng hét của Rouser có khả năng tăng cường sức mạnh cho tất cả các zombie trong phạm vi, ngoại trừ chính Rouser Đặc biệt, nó còn có thể hồi sinh những zombie thông thường đã bị tiêu diệt.
3.1.2 Phân tích yêu cầu phi chức năng
• Trò chơi có giao diện đẹp và thân thiện với người chơi
Trò chơi cần có độ phản hồi cao để người chơi có thể nhận biết ngay lập tức kết quả của các thao tác mà họ thực hiện, từ đó giúp họ hiểu rõ hiệu quả và tiến trình trong trò chơi.
• Trò chơi hoạt động ổn định trên nền tảng được hướng đến: Thiết bị di động
Các yếu tố và cơ chế trong trò chơi cần phải hỗ trợ cho việc kể chuyện, giúp thể hiện bối cảnh và cốt truyện một cách trực tiếp hoặc gián tiếp.
Lược đồ Use-case
Hình 3.2: Lược đồ Use-case
Danh sách các Actor
STT Tên Actor Ý nghĩa/Ghi chú
1 Người chơi Chỉ chung cho tất cả người chơi
2 Chủ phòng Người chơi tạo đại sảnh
3 Người chơi máy khách Người chơi tham gia đại sảnh do người khác tạo ra
4 Kẻ địch Nhân vật trong màn chơi mà người chơi phải đối đầu
Danh sách các Use-case
Bảng 3.2: Danh sách Use-case
STT Tên Use-case Ý nghĩa/Ghi chú
1 Đăng ký Người chơi đăng ký tài khoản trò chơi
2 Tạo đại sảnh Người chơi tạo một đại sảnh để bắt đầu màn chơi ngay hoặc chờ người chơi khác cùng tham gia
3 Tham gia đại sảnh Người chơi tham gia một đại sảnh có sẵn bằng nhiều cách khác nhau
4 Rời đại sảnh Người chơi rời đại sảnh mà họ đang tham gia
5 Loại bỏ người chơi khỏi đại sảnh
Chủ phòng chọn một người chơi để loại bỏ khỏi đại sảnh
6 Tùy chinh thông tin đại sảnh
Chủ phòng thay đổi thông tin đại sảnh
7 Chuẩn bị cho màn chơi Người chơi chuẩn bị những trang bị cần thiết cho màn chơi
8 Bắt đầu màn chơi Hệ thống thiết lập các dữ liệu của màn chơi và bắt đầu khi mọi thứ đã sẵn sàng
9 Điều khiển nhân vật di chuyển
Người chơi điều khiển nhân vật di chuyển
10 Điều khiển nhân vật tấn công
Người chơi điều khiển nhân vật tấn công kẻ địch hoặc vật thể có thể bị phá hủy
11 Quan sát nhân vật Người chơi quan sát nhân vật và các vật thể khác xuất hiện trong khung hình
Người chơi có thể nhặt những vật phẩm giá trị trong quá trình di chuyển, giúp tăng cường khả năng chiến đấu và nâng cao giá trị phần thưởng nhận được sau khi hoàn thành màn chơi.
13 Thực hiện hành vi Kẻ địch thay đổi và thực hiện hành vi phụ thuộc vào tình huống đang diễn ra
14 Kết thúc màn chơi Người chơi kết thúc màn chơi và nhận phần thưởng
15 Tùy chỉnh nhân vật Người chơi tùy chỉnh các phụ tùng của chiến xa để thay đổi ngoại trang, thông số hoặc khả năng chiến đấu
16 Mua trang bị Người chơi mua trang bị bằng tiền tệ trong game để mở rộng trải nghiệm
17 Nâng cấp trang bị Người chơi nâng cấp trang bị để trở nên mạnh mẽ hơn, thực hiện những thử thách của màn chơi dễ dàng hơn
18 Tùy chỉnh cài đặt Người chơi có thể tùy chỉnh những cài đặt của trò chơi.
Đặc tả Use-case
Bảng 3.3: Đặc tả Use-case “Đăng nhập”
Mô tả Người chơi đăng ký tài khoản trò chơi
Luồng chính • Hệ thống kiểm tra dữ liệu được lưu trữ ở cục bộ
• Nếu dữ liệu của người chơi đã tồn tại, tiến hành xác thực với dịch vụ của Unity
Nếu dữ liệu người chơi chưa tồn tại, hệ thống sẽ hiển thị cửa sổ “Đăng ký tài khoản” Người chơi cần điền tên và chọn ảnh đại diện, sau đó thực hiện xác thực thông qua dịch vụ của Unity.
Luồng thay thế Không có Điều kiện kích hoạt Không có
31 Điều kiện cần Người chơi cài ứng dụng lần đầu tiên
Kết quả Hiển thị màn hình “Bảng chọn chính”
3.5.2 Use-case “Tạo đại sảnh”
Bảng 3.4: Đặc tả Use-case “Tạo đại sảnh”
Mô tả Người chơi tạo một đại sảnh để bắt đầu màn chơi ngay hoặc chờ người chơi khác cùng tham gia
Luồng chính Trong màn hình “Bảng chọn chính”, người chơi nhấn nút
Luồng thay thế Không có Điều kiện kích hoạt Không có Điều kiện cần Tài khoản của người chơi đã được xác thực
Kết quả Người chơi trở thành chủ phòng Một đại sảnh sẽ được tạo với các thiết lập mặc định
3.5.3 Use-case “Tham gia đại sảnh”
Bảng 3.5: Đặc tả Use-case “Tham gia đại sảnh”
Mô tả Người chơi tham gia một đại sảnh có sẵn bằng nhiều cách khác nhau
Tác nhân Người chơi khách
Luồng chính • Mở màn hình “Trình duyệt máy chủ”
• Nhấn nút “Làm mới” để làm mới danh sách những đại sảnh mở hiện có
• Mỗi hàng đại diện cho một đại sảnh
• Nhấn nút “Gia nhập” ở cuối hàng
• Người chơi đợi máy chủ phê duyệt yêu cầu
Luồng thay thế • Người chơi có thể tham gia vào một đại sảnh mở ngẫu nhiên bằng cách nhấn nút “Gia nhập nhanh” Hiện
32 thông báo nếu không có đại sảnh mở khả dụng
Người chơi có thể dễ dàng tham gia vào bất kỳ đại sảnh nào bằng cách nhập mã gia nhập và nhấn nút “Gia nhập” Nếu đại sảnh không còn tồn tại, hệ thống sẽ thông báo ngay cho người chơi.
• Hiển thị thông báo khi gia nhập một đại sảnh đã đủ số lượng người tham gia tối đa
Người chơi sẽ không thể quay lại đại sảnh nếu đã bị chủ phòng loại bỏ Khi cố gắng gia nhập lại, họ sẽ nhận được thông báo Để có thể tham gia, tài khoản của người chơi cần được xác thực.
Kết quả Hiển thị màn hình “Đại sảnh” Giao diện cập nhật danh sách người chơi đang tham gia đại sảnh
3.5.4 Use-case “Rời đại sảnh”
Bảng 3.6: Đặc tả Use-case “Rời đại sảnh”
Mô tả Người chơi rời đại sảnh mà họ đang tham gia
Luồng chính • Nếu người chơi là chủ phòng, đại sảnh sẽ bị xóa Tất cả người chơi khác trong đại sảnh sẽ trở về màn chỉnh
“Cửa sổ chính” và nhận được thông báo
Nếu người chơi là khách, đại sảnh sẽ xóa thông tin của họ khỏi giao diện Không có luồng thay thế hay điều kiện kích hoạt nào Điều kiện cần là người chơi phải tham gia vào một đại sảnh.
Kết quả Hiển thị màn hình “Cửa sổ màn hình chính”
3.5.5 Use-case “Loại bỏ người chơi khỏi đại sảnh”
Bảng 3.7: Đặc tả Use-case “Loại bỏ người chơi khỏi đại sảnh”
Mô tả Chủ phòng chọn một người chơi để loại bỏ khỏi đại sảnh
Luồng chính • Chủ phòng nhấn nút “Loại người chơi” ờ ngay bên cạnh tên của người chơi đó
• Người được chọn bị loại khỏi đại sảnh Giao diện ở phía người chơi đó trở về màn hình “Bảng chọn chính”
Luồng thay thế Không có Điều kiện kích hoạt Không có Điều kiện cần Có ít nhất một người chơi khác ngoài chủ phòng đã tham gia đại sảnh
Kết quả Màn chơi bắt đầu với số lượng người chơi đã tham gia đại sảnh
3.5.6 Use-case “Tùy chỉnh thông tin đại sảnh”
Bảng 3.8: Đặc tả Use-case “Tủy chỉnh thông tin đại sảnh”
Mô tả Chủ phòng thay đổi thông tin đại sảnh
Chủ phòng có quyền điều chỉnh các thiết lập của màn chơi, bao gồm độ khó, bản đồ và các tùy chọn của đại sảnh như chế độ kín hay mở, cùng với tên phòng Không có luồng thay thế, điều kiện kích hoạt hay điều kiện cần nào được yêu cầu.
Kết quả Thông tin mới được cập nhật ở tất cả người chơi máy khách
3.5.7 Use-case “Chuẩn bị cho màn chơi”
Bảng 3.9: Đặc tả Use-case “Chuẩn bị cho màn chơi”
Mô tả Người chơi chuẩn bị những trang bị cần thiết cho màn chơi
Luồng chính • Người chơi lựa chọn một bản dựng nhân vật có sẵn để sử dụng trong màn chơi
• Người chơi nhấn nút “Sẵn sàng”
• Giao diện ở máy chủ và máy khách cập nhật đồng thời trạng thái sẵn sàng của người chơi đó
Trò chơi bắt đầu khi tất cả người chơi đã sẵn sàng, với điều kiện ít nhất một người tham gia đại sảnh Không có luồng thay thế và điều kiện kích hoạt nào được yêu cầu.
Kết quả Màn chơi bắt đầu với số lượng người chơi đã tham gia đại sảnh
3.5.8 Use-case “Bắt đầu màn chơi”
Bảng 3.10: Đặc tả Use-case “Bắt đầu màn chơi”
Mô tả Hệ thống thiết lập các dữ liệu của màn chơi
Hệ thống khởi tạo chỉ số cho nhân vật do người chơi điều khiển cho phép áp dụng bản dựng nhân vật nhằm thay đổi ngoại hình Sau khi hoàn tất, nhân vật sẽ được sinh ra tại điểm bắt đầu của màn chơi.
• Hệ thống sản sinh những kẻ địch ở một số địa điểm trên bản đồ, nằm trên lộ trình người chơi đi về điểm đến
• Hệ thống khởi tạo điểm đến
• Camera di chuyển đến các vị trí quan trọng người
Trên bản đồ, có 35 trò chơi mà người chơi cần nắm rõ, bao gồm các điểm đến quan trọng Hiện tại, không có luồng thay thế hay điều kiện kích hoạt nào Tuy nhiên, điều kiện cần thiết là tất cả người chơi tham gia đại sảnh phải ở trong trạng thái sẵn sàng.
Kết quả Màn chơi bắt đầu khi mọi thứ đã sẵn sàng
3.5.9 Use-case “Điều khiển nhân vật di chuyển”
Bảng 3.11: Đặc tả Use-case “Điều khiển nhân vật di chuyển”
Mô tả Người chơi điều khiển nhân vật di chuyển
Luồng chính • Người chơi sử dụng joystick trái để điều hướng việc nhân vật di chuyển
• Khi kéo joystick hướng lên, nhân vật sẽ tiến về phía trước theo hướng của nhân vật, tương tự với 3 hướng còn lại là lùi, rẽ trái, rẽ phải
Luồng thay thế Không có Điều kiện kích hoạt Không có Điều kiện cần Không có
Kết quả Nhân vật di chuyển theo giá trị joystick trả về
3.5.10 Use-case “Điều khiển nhân vật tấn công”
Bảng 3.12: Đặc tả Use-case “Điều khiển nhân vật tấn công”
Mô tả Người chơi điều khiển nhân vật tấn công kẻ địch hoặc vật thể có thể bị phá hủy
Luồng chính • Người chơi sử dụng joystick phải để chỉ định hướng mà nhân vật nhắm bắn
• Hướng nhắm bắn của vũ khí sẽ đúng theo hướng xoay của joystick
• Nếu có kẻ địch xuất hiện trên đường ngắm bắn, nhân vật sẽ tự động khai hỏa
Khi nhân vật sử dụng hết băng đạn, họ sẽ tự động nạp lại từ số đạn đang có Tuy nhiên, nhân vật không thể nạp quá số lượng đạn tối đa mà băng đạn cho phép.
• Nếu nhận vật không còn đạn để nạp, một vài vật phẩm
“Băng đạn” sẽ xuất hiện ngẫu nhiên trên bản đồ
Để nâng cao độ chính xác khi bắn, người chơi có thể sử dụng tia laser để chỉ hướng nhắm của vũ khí Tuy nhiên, khi vũ khí đang trong quá trình lên đạn, tia laser sẽ tự động ẩn đi.
• Thời gian bắn càng lâu, súng sẽ càng bị giật, làm giảm độ chính xác
Khi kẻ địch nhận sát thương từ người chơi, thanh máu và lượng sát thương sẽ được hiển thị rõ ràng Tuy nhiên, những người chơi không gây sát thương sẽ không thấy các thông tin này.
Luồng thay thế Không có Điều kiện kích hoạt Không có Điều kiện cần Không có
Kết quả Nhân vật sẵn sàng bắn theo giá trị joystick trả về
3.5.11 Use-case “Quan sát nhân vật”
Bảng 3.13: Đặc tả Use-case “Quan sát nhân vật”
Mô tả Người chơi quan sát nhân vật và các vật thể khác xuất hiện trong khung hình
Luồng chính • Camera luôn di chuyển theo nhân vật do người chơi điều khiển với góc nhìn đẳng áp (isometric), đảm bảo
37 người chơi luôn nhìn thấy nhân vật đó ở chính giữa khung hình
• Người chơi không có quyền điều khiển camera của game
Khi một nhân vật bị khuất sau vật cản và không nằm trong tầm nhìn của camera, hệ thống sẽ hiển thị phần bị khuất của nhân vật dưới dạng hình ảnh đơn sắc, không bị ảnh hưởng bởi ánh sáng, nhằm giúp người chơi nhận biết vị trí của nhân vật đó.
Kết quả Những vật thể trong góc nhìn của camera sẽ kết xuất hình ảnh và hiển thị cho người chơi thấy
3.5.12 Use-case “Nhặt vật phẩm”
Bảng 3.14: Đặc tả Use-case “Điều khiển đội hình kẻ địch”
Người chơi thu thập các vật phẩm quý giá trong quá trình di chuyển, nhằm nâng cao khả năng chiến đấu hoặc gia tăng giá trị phần thưởng nhận được khi kết thúc màn chơi.
Luồng chính • Người chơi chủ động di chuyển đến vị trí của những vật phẩm đang có mặt trên bản đồ
Mỗi vật phẩm trong trò chơi mang lại những hiệu ứng đặc biệt cho người chơi Cụ thể, tiền sẽ gia tăng phần thưởng khi hoàn thành màn chơi, trong khi hộp cứu thương giúp hồi phục máu cho người chơi.
38 o Băng đạn: Tiếp thêm đạn cho người chơi
• Vật phẩm đó sẽ tiêu biến khi người chơi nhặt lên hoặc sau một khoảng thời gian
Khi lượng máu của người chơi giảm đến một mức nhất định, vật phẩm "Hộp cứu thương" sẽ xuất hiện ở vị trí gần đó Tương tự, vật phẩm "Băng đạn" cũng sẽ được tạo ra Không có điều kiện kích hoạt hay yêu cầu cần thiết nào để các vật phẩm này xuất hiện.
Kết quả Hiệu ứng của vật phẩm được áp dụng
3.5.13 Use-case “Thực hiện hành vi”
Bảng 3.15: Đặc tả Use-case “Điều khiển hành vi kẻ địch”
Mô tả Kẻ địch thay đổi và thực hiện hành vi phụ thuộc vào tình huống đang diễn ra
Luồng chính • Máy chủ xác định trạng thái phù hợp với tình huống hiện tại Kẻ địch ở trạng thái:
• Nhàn rỗi: Nếu không có đối tượng nào được ghi nhận
• Tấn công: Nếu người chơi tấn công kẻ địch hoặc di chuyển vào vùng phát hiện (tầm nhìn) của kẻ địch
• Máy chủ lựa chọn hành vi tương ứng với trạng thái được chọn và khả năng của chủng loại kẻ địch:
THIẾT KẾ PHẦN MỀM
Thiết kế xử lý
Sử dụng lược đồ tuần tự (Sequence Diagram) để mô tả phương thức xử lý vấn đề của hệ thống
Hình 4.1: Lược đồ tuần tự quản lý kết nối
Thiết kế cơ sở dữ liệu
4.2.1 Lược đồ cơ sở dữ liệu
Hình 4.2: Lược đồ cơ sở dữ liệu
4.2.2 Mô tả các bảng dữ liệu
Bảng 4.1: Lưu thông tin về những người chơi
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UID Unique Khóa chính, phân biệt giữa những người chơi
2 PlayerName String Not Null Tên hiển thị
3 AvatarId String Not Null Ảnh đại diện
4 Level Integer Cấp bậc hiện tại của người chơi
5 Exp Integer Lượng điểm kinh nghiệm hiện có của người chơi
6 UnusedSkillPoints Integer Lượng điểm nâng cấp người chơi chưa sử dụng Có được khi lên cấp
7 Gold Integer Lượng tiền người chơi đang sở hữu
Bảng 4.2: Lưu thông tin về những bản dựng nhân vật
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UID Unique Khóa chính, phân biệt giữa những bảng dựng nhân vật
2 CarSkinIndex Integer Thứ tự phục trang được chọn
4.2.2.3 Bảng dữ liệu “User_CarBuild”
Bảng 4.3: Lưu thông tin giữa User và CarBuild
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 PlayerId UID Unique Khóa chính, phân biệt giữa những người chơi
2 CarBuildId UID Unique Khóa chính, phân biệt giữa những bảng dựng nhân vật
Bảng 4.4: Lưu thông tin về những bộ phận tùy chỉnh nhân vật
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UID Unique Khóa chính, phân biệt giữa những bộ phận có thể tùy biến của nhân vật
3 Durability Integer Độ bền của bộ phận đó
4 Mass Integer Khối lượng của bộ phận đó
5 PurchaseCost Integer Chi phí để mua bộ phận
6 UpgradeCost Integer Chi phí để nâng cấp bộ phận
4.2.2.5 Bảng dữ liệu “CarBuild_CarPart”
Bảng 4.5: Lưu thông tin giữa CarBuild và CarPart
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 CarBuildId UID Unique Khóa chính, phân biệt giữa những bảng dựng nhân vật
2 CarPartId UID Unique Khóa chính, phân biệt giữa những bộ phận có thể tùy biến của nhân vật
Bảng 4.6: Lưu thông tin về những phiên kết nối của người chơi
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 ClientId UID Unique Khóa chính, phân biệt giữa những phiên kết nối của người chơi
2 PlayerId UID Unique Phân biệt giữa những người chơi
3 HasPlayerSpawned Boolean Nhân vật của người chơi đã được sinh ra hay chưa
4 PlayerPosition Vector3 Vị trí nhân vật của người chơi trong phiên kết nối trước
5 PlayerRotation Vector3 Phương hướng nhân vật của người chơi trong phiên kết nối trước
6 CurrentHp Integer Lượng máu nhân vật của người chơi trong phiên kết nối trước
7 CarBuildId UID Unique Phân biệt giữa những bảng dựng nhân vật
Bảng 4.7: Lưu thông tin về những chủng loại kẻ địch
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UID Unique Khóa chính, phân biệt giữa những chủng loại kẻ địch
2 Hp Integer Lượng máu khởi điểm của kẻ địch
3 MoveSpeed Float Tốc độ di chuyển của kẻ địch
4 DamagePerHit Integer Lượng sát thương kẻ địch gây ra trên mỗi đòn đánh
5 SightRange Float Bán kính tầm nhìn của kẻ địch
6 AttackRange Float Bán kính tầm đánh của kẻ địch
7 AttackRate Float Tốc độ đánh của kẻ địch, tính bằng giây
Bảng 4.8: Lưu thông tin về những bầy đàn kẻ địch
STT Tên thuộc tính Kiểu dữ liệu Ràng buộc Ý nghĩa
1 Id UID Unique Khóa chính, phân biệt giữa những bầy đàn kẻ địch
2 NpcId UID Unique Phân biệt giữa những chủng loại kẻ địch
3 SpawnPosition Vector3 Vị trí sinh bầy đàn
4 WaveSize Integer Số lượng kẻ địch tối đa của bầy đàn
5 Spawns Integer Số lượng kẻ địch được sinh ra mỗi lần
6 TimeBetweenSpawns Float Khoảng thời gian giữa 2 lần sinh kẻ địch
Thiết kế giao diện
Bảng 4.9: Danh sách giao diện
STT Tên màn hình Mô tả chức năng
1 Tiêu đề/Đang tải Giao diện hiển thị tên trò chơi và tiến trình khởi chạy ứng dụng
2 Đăng ký Giao diện cho phép người chơi đăng ký hồ sơ và xác thực tài khoản
3 Bảng chọn chính Giao diện trung gian dẫn tới hầu hết các giao diện chính khác
4 Trình duyệt máy chủ Giao diện hiển thị cho phép người chơi kết nối với một đại sảnh đã được tạo sẵn
5 Đại sảnh Giao diện hiển thị tất cả thông tin của đại sảnh
6 Tùy chỉnh nhân vật Giao diện cho phép người chơi tùy chỉnh nhân vật mà họ sẽ điều khiển trong màn chơi
7 Trong trận Giao diện hiển thị các thông tin về màn chơi và nhân vật
8 Kết quả màn chơi Giao diện hiển thị thành tích và phần thưởng người chơi đạt được trong màn chơi đó
9 Tùy chỉnh cài đặt Giao diện cho phép người chơi tùy chỉnh các thông số cài đặt
4.3.2 Giao diện một số màn hình của ứng dụng
4.3.2.1 Giao diện “Tiêu đề/Đang tải”
Hình 4.3: Giao diện màn hình “Tiêu đề/Đang tải”
Bảng 4.10: Mô tả giao diện màn hình “Tiêu đề/Đang tải”
STT Tên thành phần Loại Mô tả thành phần
1 Thanh tiến trình tải Slider Hiển thị tiến trình tải các tài nguyên của trò chơi
Hình 4.4: Giao diện màn hình “Đăng ký”
Bảng 4.11: Mô tả giao diện màn hình “Đăng ký”
STT Tên thành phần Loại Mô tả thành phần
1 Trường nhập tên Input Field Cho phép người chơi nhập tên theo quy định
2 Nút chọn ảnh đại diện
Button Chọn ảnh đại diện
3 Nút xác nhận Button Xác nhận thông tin mà người chơi đã chọn
4.3.2.3 Giao diện “Bảng chọn chính”
Hình 4.5: Giao diện màn hình “Bảng chọn chính”
Bảng 4.12: Mô tả giao diện màn hình “Bảng chọn chính”
STT Tên thành phần Loại Mô tả thành phần
1 Tên người chơi Text Hiển thị tên của người chơi
2 Cấp độ Text Hiển thị cấp độ của người chơi
3 Tiến trình lên cấp Slider Hiển thị lượng kinh nghiệm hiện tại của người chơi tương quan với ngưỡng tối đa để lên cấp
4 Nút Settings Button Mở giao diện “Cài đặt”
5 Nút Build Button Mở giao diện “Tùy chỉnh nhân vật”
6 Nút Server Browser Button Mở giao diện “Trình duyệt máy chủ”
7 Nút Play Button Tạo một đại sảnh mặc định
4.3.2.4 Giao diện “Trình duyệt máy chủ”
Hình 4.6: Giao diện màn hình “Trình duyệt máy chủ”
Bảng 4.13: Mô tả giao diện màn hình “Trình duyệt máy chủ”
STT Tên thành phần Loại Mô tả thành phần
1 Nút Back Button Trở về giao diện “Bảng chọn chính”
2 Tên đại sảnh Text Hiển thị tên đại sảnh
3 Sức chứa của sảnh Text Hiển thị số người chơi đang tham gia và tối đa có thể tham gia đại sảnh
4 Nút Join Directly Button Tham gia vào đại sảnh đang chọn
5 Nút Refresh Button Tải lại danh sách đại sảnh công khai
6 Nút Quick Join Button Tham gia vào bất kỳ đại sảnh công khai nào
7 Trường mã tham gia đại sảnh
Input Field Nhập mã tham gia đại sảnh
8 Nút Join Button Tham gia vào đại sảnh có mã tham gia đã nhập
Hình 4.7: Giao diện màn hình “Đại sảnh”
Bảng 4.14: Mô tả giao diện màn hình “Đại sảnh”
STT Tên thành phần Loại Mô tả thành phần
1 Nút Back Button Trở về màn hình “Bảng chọn chính”
2 Tên người chơi Text Hiển thị tên của người chơi
3 Trạng thái sẵn sàng Image Hiển thị người chơi đã sẵn sàng chưa
4 Loại bỏ người chơi Button Loại bỏ người chơi khỏi đại sảnh
5 Trường tên đại sảnh Input Field Nhập tên của đại sảnh
6 Tính công khai Checkbox Điều chỉnh đại sảnh có công khai hay không
7 Mã tham gia Text Hiển thị mã tham gia đại sảnh
8 Nút Update Lobby Button Cập nhật thông tin của đại sảnh
9 Nút Get Ready Button Chuyển giữa hai trạng thái sẵn sàng và chưa sẵn sàng
4.3.2.6 Giao diện “Tùy chỉnh nhân vật”
Hình 4.8: Giao diện màn hình “Tùy chỉnh nhân vật”
Hình 4.9: Giao diện màn hình “Tùy chỉnh nhân vật” khi người chơi lựa chọn ngoại trang
Hình 4.10: Giao diện màn hình “Tùy chỉnh nhân vật” khi người chơi lựa chọn phụ tùng
Bảng 4.15: Mô tả giao diện màn hình “Trình duyệt máy chủ”
STT Tên thành phần Loại Mô tả thành phần
1 Nút Back Button Trở về màn hình “Bảng chọn chính”
Thông số nhân vật hiển thị các chỉ số quan trọng, bao gồm số lượng phụ tùng tối đa có thể trang bị, số lượng phụ tùng đã được trang bị, tốc độ, độ bền và trọng lượng của nhân vật.
Chuyển hướng đến những lựa chọn loại phụ tùng
Chuyển hướng đến những lựa chọn lớp sơn
5 Nút Part Selector Button Chuyển hướng đến những phụ tùng được nhóm theo loại
6 Nút Default Build Butotn Tải bản dựng nhân vật mặc định
7 Nút Save Button Lưu những thay đổi hiện tại
Hình 4.11: Giao diện màn hình “Trong trận”
Bảng 4.16: Mô tả giao diện màn hình “Trong trận”
STT Tên thành phần Loại Mô tả thành phần
1 Thông tin đồng đội View Bao gồm tên, ảnh đại diện và lượng máu hiện tại của đồng đội
2 Thời lượng chơi Text Bộ đếm thời gian kể từ lúc màn chơi bắt đầu
3 Tiền đã nhặt được Text Hiển thị số tiền người chơi đã nhặt được
4 Lượng điểm hiện tại Text Hiển thị số điểm người chơi đã ghi được
5 Nút Back Button Thoát trận và trở về màn hình “Bảng chọn chính”
6 Núm di chuyển Joysitck Núm điều khiển nhân vật di chuyển
7 Núm nhắm bắn Joystick Núm điều khiển nhân vật nhắm bắn
8 Thông tin đạn dược Text Hiển thị lượng đạn hiện có và đã nạp vào băng đạn
9 Tiến trình nạp đạn Slider Hiển thị thời gian nạp đạn
10 Lượng máu Slider Hiển thị lượng máu hiện tại tương quan với lượng máu tối đa
4.3.2.8 Giao diện “Kết quả màn chơi”
Hình 4.12: Giao diện màn hình “Kết quả màn chơi”
Bảng 4.17: Mô tả giao diện màn hình “Kết quả màn chơi”
STT Tên thành phần Loại Mô tả thành phần
1 Kết quả màn chơi Text Hiển thị kết quả màn chơi
2 Thời lượng chơi Text Hiển thị thời lượng chơi
3 Lượng tiền trước màn chơi
Text Hiển thị lượng tiền mà người chơi sở hữu trước khi tham gia màn chơi
4 Xếp hạng Text Hiển thị thứ hạng của người chơi trong tổ đội
5 Ảnh đại diện Image Hiển thị ảnh đại diện của người chơi
6 Tên người chơi Text Hiển thị tên của người chơi
7 Số mạng hạ gục Text Hiển thị số lượng kẻ địch người chơi đã tiêu diệt trong màn chơi
8 Số điểm Text Hiển thị số điểm người chơi đã kiếm được trong màn chơi
Text Hiển thị số tiền người chơi nhận được khi vượt qua màn chơi
10 Lượng tiền đã nhặt Text Hiển thị số tiền người chơi đã thu thập được trong màn chơi
Text Hiển thị lượng kinh nghiệm người chơi kiếm được trong màn chơi
12 Tiến trình lên cấp Slider Hiển thị quá trình tăng kinh nghiệm
13 Cấp độ hiện tại Text Hiển thị cấp độ hiện tại của người chơi
14 Cấp độ kế tiếp Text Hiển thị cấp độ kế tiếp của người chơi
Text Hiển thị kinh nghiệm hiện tại của người chơi
16 Ngưỡng lên cấp Text Hiển thị ngưỡng kinh nghiệm người chơi cần có để lên cấp
17 Nút nhận thưởng Text Nhận tất cả phần thưởng và trở về màn hình “Bản chọn chính”
4.3.2.9 Giao diện “Tùy chỉnh cài đặt”
Hình 4.13: Giao diện màn hình “Tùy chỉnh cài đặt”
Bảng 4.18: Mô tả giao diện màn hình “Tùy chỉnh cài đặt”
STT Tên thành phần Loại Mô tả thành phần
1 Nút Back Button Lưu lại thay đổi và trở về màn hình trước đó
2 Âm lượng tổng Slider Điều chỉnh âm lượng tổng
3 Âm lượng nhạc nền Slider Điều chỉnh âm lượng của nhạc nền
4 Âm lượng âm thanh hiệu ứng
Slider Điều chỉnh âm lượng của âm thanh hiệu ứng
5 Nút Reset Settings Button Trả tất cả cài đặt về mặc định
6 Nút Reset Progress Button Thiết lập tiến trình chơi về ban đầu.