Với hy vọng sẽ có thể phát triển một trò chơi nơi người chơi có thể tự do khám phá, tương tác với thế giới một cách thú vị nhưng không kém phần chân thật.. Trong báo cáo này, em sẽ trình
TỔNG QUAN
Đặt vấn đề
Thời đại hiện nay khi mà công nghệ thông tin vô cùng phát triển, xã hội cần những người năng động, cầu thị trong việc tiếp thu và lựa chọn thông tin, học hỏi nhanh chóng, và đáp ứng nhu cầu linh hoạt và ngày càng nâng cao của thị trường lao động Tuy nhiên, tích luỹ đủ kiến thức, kinh nghiệm cần thiết, định hướng đúng đắn là điều không phải tất cả mọi người đều làm được Đặc biệt, học sinh sinh viên thường chỉ tiếp thu kiến thức theo cách truyền thống là từ sách vở hoặc giảng viên, thiếu sự va chạm với thực tế cũng như học hỏi kiến thức từ bên ngoài Với sự phát triển nhanh chóng, không ngừng của tri thức nhân loại, các bạn trẻ luôn khao khát tìm kiếm người cố vấn và định hướng cho sự phát triển cá nhân về kiến thức, sự nghiệp Vì vậy, không ít nền tảng đã ra đời nhằm thoả mãn nhu cầu này.
Lý do chọn đề tài
Mục tiêu của đề tài không chỉ dừng lại ở việc phát triển một trò chơi chỉ đơn thuần có giá trị về mặt giải trí, bản thân tác giả đề tài muốn áp dụng được các kiến thức đa ngành (về sinh học, vật lý,…) vào trò chơi Thông thường, các hướng phát triển của một trò chơi sẽ xoay quanh người chơi (nhân vật mà người chơi điều khiển) Việc này về cơ bản không ảnh hưởng gì tới giá trị của một trò chơi cả, tuy nhiên nếu xét về việc phát triển một thế giới mở, việc một khu vực chỉ bắt đầu vận hành khi có bản thân người chơi xuất hiện sẽ khiến cho thế giới đó thiếu đi chiều sâu
Mục tiêu lớn nhất mà tác giả đề tài muốn đạt được đó chính là phát triển được trò chơi sở hữu một thế giới luôn vận hành mà không cần có sự có mặt của nhân vật chính Bản thân người chơi cũng chỉ là một phần của mắt xích sinh học, không phải là người điều khiển thế giới đó.
Tính năng khác biệt
Tác giả đã nghiên cứu, trải nghiệm và phân tích các trò chơi cùng thể loại và
18 nhận thấy một số vấn đề sau:
1.3.1 Hệ thống phát triển của quần thể/quần xã sinh vật (AI)
Trò chơi thế giới mở là một thể loại game mà người chơi được tự do khám phá một thế giới ảo rộng lớn, không bị giới hạn bởi các cấu trúc hay hướng dẫn tuyến tính Dựa trên định nghĩa, đa số các trò chơi thuộc thể loại này đều tập trung phát triển sao cho người chơi không cần phải đi theo một chuỗi nhiệm vụ tuyến tính nào đó, mà có thể tự do làm các hành động một cách tự do, không theo trật tự
Tuy nhiên, thế giới chủ yếu vẫn sẽ vận hành xoay quanh người chơi Người chơi đơn thuần chỉ cần lựa chọn xem mình sẽ hành động ra sao, mở nội dung của khu vực nào trước Các sinh vật/kẻ địch trong trò chơi sẽ lao vào chiến đấu với người chơi mà không quan tâm hay tương tác với sinh vật khác Thậm chí, các sinh vật đó sẽ không có bất kỳ hành động gì cho đến khi người chơi đi vào phạm vi cần thiết của chúng Để có thể tăng thêm chiều sâu cho thế giới game mà người chơi trải nghiệm, em đã triển khai một giải pháp để giúp cho các loài trong trò chơi có thể tự sinh tồn, phát triển quần thể sao cho ngày một mạnh mẽ hơn mà không cần phải phụ thuộc vào sự tồn tại của nhân vật chính là người chơi Giải pháp này sẽ bao gồm có hệ thống quần thể, con đầu đàn và hệ thống phân công công việc dựa trên hệ số quan trọng và thời gian trong ngày
1.3.2 Hệ thống quan hệ giữa các loài
Giải quyết được vấn đề “bị động” của các loài, sinh vật trong trò chơi điện tử, tính năng tiếp theo mà em muốn thực hiện, chú trọng đến chính là hệ thống quan hệ/cách hành xử giữa các loài với nhau Cụ thể hơn, các sinh vật được sẽ không chỉ đơn thuần được phân làm hai nhóm là NPC (non-playable characters) và Enemies (kẻ địch), mà toàn bộ các thực thể trong trò chơi sẽ có chung một định danh là Entities (thực thể)
Giữa các thực thể với nhau sẽ có các mối quan hệ khác nhau, người chơi sẽ có nhiều hơn một phương thức để tiếp cận một sinh vật bất kỳ trong trò chơi, các đối tượng khác ngoài nhân vật chính cũng không chỉ chăm chăm vào việc tấn công người chơi nữa Người chơi có thể thực hiện các hành động để lấy cảm tình của các quần thể, từ đó chúng sẽ đáp lại ta dựa trên hành vi mà ta thực hiện.
Mục tiêu đề tài
- Nghiên cứu và áp dụng Steering Behaviors cho việc di chuyển của AI trở nên tự nhiên nhưng không tiêu tốn quá nhiều tài nguyên để thực thi
- Nghiên cứu và học hỏi phương pháp Neural Network để ứng dụng cho việc tiếp nhận thông tin, xử lý và đưa ra hành động tương ứng của AI
- Xây dựng hệ thống quan hệ giữa các quần thể, quần xã
- Xây dựng đa dạng các chức năng, cơ chế để khiến cho trải nghiệm chơi game của người chơi trở nên thú vị, không chỉ gò bó ở mặt học thuật
- Phát triển trò chơi ở mức độ hoàn thiện nhất định.
Đối tượng nghiên cứu
1.5.2 Đối tượng hướng đến trong phạm vi đề tài
- Những người thích trò chơi điện tử, có nhu cầu trải nghiệm một thế giới game có chiều sâu, thích sự tương tác giữa các loài sinh vật giống và khác nhau
- Những người chơi thích thể loại game Open-world, Roguelike/lite nói riêng Thích sự thăng tiến sức mạnh của nhân vật thông qua việc phiêu lưu, khám phá, nâng cấp từ những nguyên liệu kiếm được.
Phạm vi nghiên cứu
Phạm vi môi trường: Windows
Phạm vi chức năng: Đối với trò chơi:
- Procedural Map Generation: hệ thống tạo dựng bản đồ một cách ngẫu nhiên theo một quy luật định sẵn
- Hệ thống hành vi của AI
- Hệ thống quan hệ trong quần xã Đối với người chơi:
- Tấn công, nhào lộn, né tránh
- Thu lượm/ Sử dụng vật phẩm
- Trang bị/ Tháo gỡ vật phẩm
- Nấu ăn & Chế tạo trang bị.
Phương pháp thực hiện
- Sinh viên làm việc dưới sự hướng dẫn, hỗ trợ của giảng viên hướng dẫn Phương pháp nghiên cứu:
- Tham khảo trực tiếp từ việc chơi các dòng game cùng thể loại
- Nghiên cứu chuyên sâu tài liệu công nghệ hỗ trợ liên quan
- Nghiên cứu về Neural Network để ứng dụng cho xử lý hành vi của AI
- Ứng dụng Steering Behaviors để chân thật hóa cách di chuyển của AI
- Quản lý mã nguồn sử dụng Github, quản lý tiến độ sử dụng Google Sheet, Milanote
CƠ SỞ LÝ THUYẾT
Godot Engine
Godot Engine là một công cụ phát triển trò chơi mã nguồn mở Nó cung cấp một môi trường phát triển tích hợp để tạo ra các trò chơi đa nền tảng, bao gồm các nền tảng như Windows, macOS, Linux, iOS, Android và nhiều nền tảng khác
Godot Engine được phát triển bởi một nhóm lập trình viên tự do và được phát hành theo giấy phép MIT, cho phép người dùng sử dụng, sửa đổi và phân phối mã nguồn một cách tự do Điều này có nghĩa là bất kỳ ai cũng có thể sử dụng Godot Engine mà không cần trả bất kỳ khoản phí nào và có quyền truy cập vào mã nguồn của nó để tùy chỉnh theo nhu cầu của bạn
Godot Engine cung cấp một công cụ tạo trò chơi có giao diện dễ sử dụng và linh hoạt Nó sử dụng một ngôn ngữ lập trình tự động gọi là GDScript, tuy nhiên, bạn cũng có thể sử dụng các ngôn ngữ khác như C# hoặc C++ để phát triển trò chơi trong Godot Engine
Godot Engine hỗ trợ nhiều tính năng như hệ thống đồ họa 2D và 3D, hệ thống vật lý, xử lý âm thanh, quản lý tài nguyên, quản lý cảnh, giao diện người dùng, và nhiều hơn nữa Nó cung cấp một cộng đồng lớn và nhiều tài liệu hướng dẫn giúp bạn học và phát triển trò chơi trong Godot Engine
Hệ thống tạo dựng màn chơi
Tạo màn chơi tự động (Procedural Map Generation) là quá trình tạo ra các màn chơi một cách tự động bằng cách sử dụng các thuật toán và quy tắc được xác định từ trước bởi Game Designers/Game Developers Procedural Map Generation cho phép người phát triển tạo ra các màn chơi ngẫu nhiên nhưng vẫn tuân theo các giới hạn, quy tắc được đặt sẵn thay vì phải thiết kế và xây dựng các màn chơi một cách thủ công Các phương pháp tạo màn chơi tự động không chỉ có lợi về mặt phát triển (tiết kiệm thời gian, giảm số lượng tài nguyên cần thiết,…) mà còn nâng cao trải nghiệm của người chơi ở một số thể loại nhất định yêu cầu sự thay đổi trong quá trình chơi
Quá trình tạo bản đồ có thể áp dụng cho nhiều thể loại trò chơi, từ game thế giới mở, game hành động, game nhập vai cho đến game chiến thuật Cách thức tạo bản đồ thường được xác định bởi các quy tắc logic và thuật toán, và có thể bao gồm các yếu tố như địa hình, địa điểm, đối tượng, và phân bố tài nguyên
Tuy nhiên, cũng có một số thách thức khi sử dụng Procedural Map Generation Thuật toán và các quy tắc được đặt ra ảnh hưởng rất lớn đến tính khả thi của màn chơi Nếu người phát triển sử dụng thuật toán và đặt ra các quy tắc không đủ đáp ứng việc tạo dựng thế giới, khả năng người chơi bị kẹt lại, không thể tiếp tục tiến trình chơi là hoàn toàn có thể xảy ra
Ngoài ra, việc kiểm soát chất lượng và đảm bảo rằng các màn chơi được tạo ra vẫn cung cấp được trải nghiệm chơi game tốt nhất cũng là một yếu tố vô cùng quan trọng
2.2.2 Tổng quan phương pháp xây dựng
Ngày nay có rất nhiều kỹ thuật tạo màn chơi tự động Song, hầu hết các phương
24 pháp đều sẽ trải qua 5 bước sau:
Hình 2-2: Mô tả quá trình tạo màn chơi tự động
Trong báo cáo luận án này, em sẽ tập trung nghiên cứu, kiến trúc và xây dựng một hệ thống tạo màn chơi tự động hoàn chỉnh sử dụng phương pháp lấy cảm hứng từ phương pháp Rapidly Exploring Random Tree (RRT)
2.2.3 Xây dựng hệ thống tạo màn chơi tự động
Bước đầu tiên phải làm trong việc xây dựng hệ thống tạo màn chơi tự động chính là xác định được những nội dung mà game cần khởi tạo Ở đây, một màn chơi cửa đề tài cần có:
- Các vùng (regions) Các vùng sẽ định nghĩa xem khu vực đó sẽ có những kiểu địa hình nào, tỷ lệ ra các loại địa hình đó là bao nhiêu
- Các kiểu địa hình (terrains) Các kiểu địa hình sẽ định nghĩa xem địa hình đó sẽ có những loại vật thể, sinh vật nào, tỷ lệ của mỗi loại đó là bao nhiêu
- Các thuộc tính, thành phần của địa hình đó (vật cản, quần thể,…)
2.2.3.2 Thiết kế quy tắc & thuật toán
Dựa trên các mục tiêu đã vạch ra, bước này sẽ xác định thuật toán phù hợp sao cho đáp ứng được các quy tắc được đề ra, cũng như tối ưu hóa việc tạo dựng màn chơi một cách hiệu quả Để thực hiện điều này, tác giả đã xác định dược các quy tắc cần thiết để có thể tạo ra một màn chơi ngẫu nhiên, từ đó tham khảo và ứng dụng một
25 số phương pháp phổ biến để tìm xem hướng đi tốt nhất
Phương pháp Ưu điểm Khuyết điểm
Cellular Automata Đơn giản Phù hợp để tạo ra các màn chơi dạng hang động, liền mạch với các vách tường ngăn cách
Bị giới hạn việc áp dụng nguyên tắc Độ tính toán tương đối phức tạp, có khả năng ảnh hưởng tới hiệu suất
Hiệu suất cao, có khả năng xử lý không gian chiều cao và độ chính xác có thể kiểm soát
Perlin Noise Tính tự nhiên và mượt mà, đa dạng và đa năng, có khả năng kiểm soát được
Phù hợp với lại các dạng tạo địa hình tự nhiên, thuần 3D, khác với định hướng phát triển game 3D Isometric Độ phức tạp tính toán cũng tương đối cao
Voronoi Diagrams Có tính tương thích với dữ liệu không gian, tính tương tác và trực quan Độ phức tạp tính toán cao, gặp vấn đề với trường hợp cận biên
Tính đa dạng và đa năng, tự động và linh hoạt Có tính ngẫu nhiên đồng thời đi với khả năng tái tạo dựa trên các quy định, hình ảnh tạo trước Độ phức tạp tính toán cao, có vấn đề về kích thước và tỉ lệ, bị giới hạn bởi tương đối nhiều ràng buộc
Bảng 2-1: Bảng phân tích các phương pháp tạo màn chơi tự động
Trong quá trình nghiên cứu và chạy thử, tác giả chủ yếu tập trung vào 3 phương
26 pháp chính thuộc bảng trên bao gồm: Cellular Automata, Rapid Exploring Random Tree và Wave Function Collapse Trong đó, tác giả đã đúc kết được rằng:
- Phương pháp Cellular Automata bị giới hạn trong việc chỉ tạo ra được một khối thể thống nhất, không có tính kết nối và đa dạng trong các kiểu dáng Hơn hết, trong quá trình khởi tạo, phương pháp này còn có thể gặp phải trường hợp tạo ra vùng không thể tiến đến, tức là mọi phía bị bao lấy bởi tường
- Phương pháp Wave Function Collapse thì có khả năng tạo ra được những màn chơi đẹp mắt, đúng ý muốn của người phát triển Tuy nhiên, phương pháp này lại yêu cầu một khối lượng input lớn (các màn chơi được tạo trước) để sử dụng làm mẫu
- Phương pháp Rapid Exploring Random Tree thì tương đối phù hợp với định hướng của tác giả, nhưng lại không thật sự phù hợp với lại định hướng mà tác giả nhắm tới
Thế nên, tác giả quyết định lấy cảm hứng từ các phương pháp đã tìm hiểu và tạo nên một phiên bản đơn giản hơn, và hiệu quả hơn ở quy mô mà tác giả nhắm tới Đầu tiên, một màn chơi sẽ được phân thành 3 cấp độ tạo dựng:
- Regions: là phần ảo, mang tính trừu tượng, nhằm tạo ra một chiều không gian tự nhiên, có tính kết nối
- Terrains: là những vùng “đất”, những không gian vật lý mà người chơi, các thực thể khác trong game có thể tương tác, đi lại được
- Contents: là những yếu tố với các tỷ lệ khác nhau sản sinh trên bề mặt Terrains
Neural Network
Mạng thần kinh (Neural Network) là một mô hình toán học được lấy cảm hứng từ cách hoạt động của hệ thần kinh sinh học trong não người Nó là một hệ thống gồm các phần tử xử lý thông tin, gọi là các "nơ-ron nhân tạo" (artificial neurons) hoặc
"nút" (nodes), được kết nối với nhau thông qua các liên kết trọng số
Mạng thần kinh thường được tổ chức thành các lớp (layers) và có thể có một hoặc nhiều lớp ẩn (hidden layers) giữa lớp đầu vào (input layer) và lớp đầu ra (output layer) Mỗi nút trong mạng thần kinh nhận đầu vào từ các nút ở lớp trước đó, tính toán một giá trị dựa trên trọng số của các liên kết và hàm kích hoạt (activation function), sau đó truyền giá trị tính toán này cho các nút ở lớp tiếp theo
Quá trình này được lặp lại cho đến khi đạt được kết quả đầu ra cuối cùng Trong quá trình huấn luyện, mạng thần kinh điều chỉnh các trọng số của các liên kết để tối ưu hóa đầu ra dựa trên các dữ liệu huấn luyện đã biết trước Quá trình này được thực hiện thông qua các thuật toán tối ưu như "gradient descent" và
Mạng thần kinh có khả năng học và tự điều chỉnh dựa trên các ví dụ đã biết, cho phép nó nhận biết các mẫu phức tạp và thực hiện các tác vụ như phân loại, nhận dạng, dự đoán, và xử lý thông tin trong nhiều lĩnh vực khác nhau Thành công của các mạng thần kinh đã được chứng minh trong nhiều ứng dụng, bao gồm nhận dạng hình ảnh, xử lý ngôn ngữ tự nhiên, xe tự lái, dự báo thị trường, và nhiều lĩnh vực khác
2.3.1.2 Khả năng ứng dụng vào đề tài
Neural Network là một mô hình toán học sở hữu rất nhiều ưu điểm nổi bật như là khả năng học tập, thích ứng dựa trên các dữ liệu cũ và mới Có khả năng xử lý thông tin phi cấu trúc, từ hình ảnh đến âm thanh Nó cũng có tính linh hoạt và khả năng mở rộng và xử lý song song, xử lý một lượng lớn dữ liệu và tính toán nhanh chóng
Tuy nhiên, Neural Network lại đòi hỏi lượng dữ liệu lớn để có thể huấn luyện, độ phức tạp cũng có thể bị mở rộng quá mức (số lượng lớp và nút quá lớn) Mạng thần kinh thường là mô hình black box, dẫn đến việc quá trình quyết định của nó cũng không dễ dàng để có thể hiểu và giải thích Điều này sẽ khiến cho việc kiểm tra, sửa lỗi trở nên khó khăn, thậm chí là phức tạp hóa khả năng xác định vấn đề
Trong quá trình tìm hiểu về các ứng dụng của công nghệ này ở lĩnh vực trò chơi điện tử, tác giả nhận thấy Neural Network thường được sử dụng cho Reinforcement Learning, với mục đích tạo ra các AI có thể tự động luyện để tự chơi và tìm ra giải pháp phá đảo game với tốc độ cao nhất Tuy nhiên, để có đảm bảo tính đúng đắn của AI, người phát triển phải xác định được chính xác số lượng nút đầu vào, đầu ra của mạng lưới, đồng thời giải quyết được toàn bộ các trường hợp khả thi thông qua các lớp và nút ẩn
Hình 2-9: Ví dụ về Neural Network cho rắn trong Snake Game
Từ đó, tác giả suy ra được rằng việc ứng dụng thực tế Neural Network vào quy mô đề tài hiện tại là không khả thi và hiệu quả, vì thế tác giả đã quyết định triển khai một phương án khác lấy cảm hứng từ mạng thần kinh
PHÁT TRIỂN TRÒ CHƠI
Phương pháp phát triển trò chơi
Khi phát triển một trò chơi điện tử, điều cần quan tâm đến là đối tượng hướng đến là gì, công nghệ nào nên được sử dụng Những công nghệ phát triển trò chơi phổ biến hiện nay được kể đến như Unity, Unreal Engine, Godot Engine, Game Maker Studio 2 Sau khi tìm hiểu, nghiên cứu và đánh giá các công nghệ trên thì tác giả đã lựa chọn Godot Engine vì Godot Engine đang phát triển một cách mạnh mẽ, từ khía cạnh kỹ thuật đến khía cạnh hỗ trợ từ cộng đồng Ngôn ngữ lập trình cũng là một khía cạnh cần để tâm, tuy Godot có ngôn ngữ riêng là GDScript, nhưng xét về mặt hiệu suất và khối lượng thư viện hỗ trợ, C# lại là ngôn ngữ lập trình mà tác giả nghĩ là phù hợp nhất
3.1.2 Giải quyết vấn đề tối ưu trò chơi
Một trong những vấn đề đáng để tâm nhất trong việc phát triển một trò chơi 3D chính là việc tối ưu trò chơi Khác với việc sử dụng hình ảnh 2D (sprites), việc sử dụng các mô hình ba chiều có thể tiêu thụ rất nhiều GPU, dẫn đến sự ảnh hưởng rõ rệt trong hiệu suất xử lý của hệ thống game, gây giật/lag và những lỗi khó kiểm soát
Bên cạnh các Meshes (tạo hình của mô hình), ta còn có Materials – những hiệu chỉnh về màu sắc, độ tương phản,… và Shaders – những đoạn mã lệnh thay đổi giá trị của Materials
Nếu như game 3D mà ta hướng tới chỉ giới hạn ở một không gian hữu hạn, nhỏ, không có nhiều thực thể, sự khác biệt về khía cạnh hiệu suất sẽ không thật sự rõ ràng Tuy nhiên, trò chơi mà đề tài hướng đến là trò chơi thế giới mở Vùng không gian được sinh ra tương đối lớn, đi với số lượng thực thể có thể lên tới hàng chục, hàng trăm ngàn
Với sự tiến bộ trong mặt công nghệ phần cứng, mức yêu cầu tối thiểu của các
35 tựa game cũng ngày một được nâng cao Tuy nhiên, để tối ưu trải nghiệm người dùng cũng như tạo cơ hội để nhiều nhóm người chơi khác nhau có thể tiếp cận trò chơi, tác giả đã đưa ra các giải pháp là:
- Lựa chọn định hướng hình ảnh cho trò chơi là Low-Poly
- Bằng cách giảm số lượng Poly cần thiết cho mỗi mô hình lại, ta sẽ có thể giảm thiểu được số bước cần thiết trong quá trình render của trò chơi
- Hơn hết, ta cũng có thể giảm thiểu khối lượng dung lượng cho từng mô hình
- Giảm thiểu số lượng Triangle tạo nên mỗi Mesh
- Đi song với việc giảm lượng Poly, tác giả còn phải chú ý đến số lượng Triangle mỗi Mesh sở hữu
- Sử dụng kỹ thuật hiển thị trong phạm vi Camera
- Về cơ bản, đây là kỹ thuật chỉ cấp phát dung lượng GPU để chạy các thực thể đang nằm trong phạm vi hoạt động của camera
- Tức là, những thực thể, sinh vật, môi trường nằm ngoài màn hình sẽ không hiển thị hình ảnh
- Tuy nhiên, để đảm bảo logic hoạt động của các loài sinh vật (theo tiêu chí đề ra là các sinh vật, thực thể sẽ luôn hoạt động dù không có sự hiện diện của người chơi), các thành phần như Vùng Va Chạm (collision), AI Behaviors (code-based) sẽ vẫn hoạt động song song chứ không bị tắt hay ngưng đi.
Xây dựng hệ thống trí tuệ nhân tạo
Steering Behaviors, hay còn được gọi là hành vi điều khiển, là một phương pháp trong lĩnh vực trí tuệ nhân tạo và lập trình game để mô phỏng hành vi tự động của các đối tượng trong một môi trường 2D hoặc 3D Steering Behaviors tập trung
36 vào cách các đối tượng di chuyển, tương tác và phản ứng với môi trường xung quanh sử dụng các Vector định hướng
Các hành vi điều khiển có thể bao gồm:
- Seek (Tìm kiếm): đối tượng sẽ di chuyển theo hướng trực tiếp đến vị trí cụ thể
- Flee (Trốn): đối tượng di chuyển tránh xa khỏi một vị trí hay một đối tượng
- Arrive (Đến nơi): tương tự với Seek nhưng đối tượng sẽ di chuyển với một tốc độ biến thiên Ví dụ như là đối tượng sẽ giảm dần tốc độ để ngừng lại vừa đủ tại vị trí chỉ định
- Wander (Lang thang): đối tượng di chuyển ngẫu nhiên trong một khu vực nhất định với các quy tắc đặt ra
- Obstacle Avoidance (Tránh vật cản): đối tượng sẽ tránh va chạm với các vật cản trong môi trường
Và còn rất nhiều hành vi khả thi khác có thể được xây dựng dựa trên quy tắc và bản chất của Steering Behaviors
Về bản chất, Steering Behaviors là phương pháp sử dụng Vector để điều khiển hướng di chuyển của một đối tượng Vậy nên, ta sẽ suy ra được giá trị rất lớn của phương pháp này, đó chính là khả năng kết hợp các hành vi với nhau, tương ứng với việc kết hợp các Vector với nhau
Hình 3-1: Ví dụ về các trường hợp kết hợp hành vi
Chính nhờ vào khả năng này, ta hoàn toàn có thể tạo ra một hệ thống quản lý hành vi của đối tượng, và đối tượng đó có thể thực hiện nhiều hành vi cùng một lúc
Ví dụ như đối tượng cần phải vừa truy đuổi mục tiêu, vừa phải né tránh các vật cản trong quá trình truy bắt
Do phương pháp này sử dụng Vector để điều hướng, ta cần phải giải quyết bài toán rằng có nên ngay lập tức đưa đối tượng xoay về hướng vừa cập nhật hay không? Hay đối tượng đó có một lực cố định để thay đổi từ VectorA sang VectorB
Sau khi thử nghiệm cả hai hướng tiếp cận, tác giả đúc kết được những điều sau:
- Việc chuyển hướng ngay lập tức mà không có lực trung gian sẽ khiến cho đối tượng trông rất máy móc, thiếu tự nhiên
- Có rất nhiều yếu tố ảnh hưởng tới Vector di chuyển của đối tượng, việc không có điểm trung gian có khả năng khiến cho đối tượng “xoay lật” liên tục
Vì vậy, tác giả quyết định chọn hướng tiếp cận là thêm một phần chuyển giao giữa hai lực A và B
3.2.1.3 Hành vi né tránh vật cản
Một trong những phương pháp để giải quyết bài toán tìm đường trong trò chơi hoặc trong bài toán tìm kiếm đường đi trên đồ thị là sử dụng thuật toán A* Tuy nhiên, thuật toán này lại vô cùng tốn bộ nhớ, độ phức tạp thời gian có thể tăng dần tới cấp số nhân Hơn hết, màn chơi của đề tài là một màn chơi được tạo tự động, đồng thời có sự thay đổi về địa hình theo thời gian Với số lượng sinh vật lớn, việc chạy thuật toán A* liên tục để tìm đường sẽ cực kỳ kém hiệu quả
38 Để khắc phục vấn đề đó, tác giả quyết định để cho đối tượng xử lý hướng đi một cách cục bộ (không có thông tin từ môi trường ở toàn bộ màn chơi) Từ đó, giảm sự tiêu thụ bộ nhớ cũng như không làm giảm đi sự chân thật trong chuyển động
Hình 3-2: Raycasts xác định vật cản
Mỗi đối tượng khi sinh ra đều sẽ được khởi tạo số lượng n Raycasts (các tia bắn từ đối tượng hướng đến một hướng bằng một khoảng cách nhất định)
Mỗi Raycast sẽ được chấm điểm từ 0 đến 1 Điểm này sẽ được tính theo công thức là: interest = raycastLength - distanceToCollider
- distanceToCollider: khoảng cách từ gốc raycast đến điểm va chạm
Từ đó, ta có thể suy được hướng đi của đối tượng Hướng đi của đối tượng sẽ là tổng của tất cả các Raycast sau khi nhân với điểm interest
Một trong những hành vi cần thiết nhất của mọi loại AI đó chính là di chuyển đến điểm đến được chỉ định Ở đồ án này, một đối tượng sẽ có thể sử dụng hành vi tìm kiếm để: di chuyển đến mục tiêu được chỉ định để thu thập tài nguyên, theo dấu con đầu đàn, di chuyển đến các địa điểm đã được lưu trong trí nhớ,…
Hành vi tìm kiếm tương đối đơn giản Để một đối tượng bắt đầu tìm kiếm đến mục tiêu chỉ định, ta chỉ cần tính toán phương hướng từ đối tượng đến mục tiêu chỉ định, từ đó cập nhật hướng di chuyển của đối tượng và nhân với vận tốc cá nhân
Tuy là một trong những hành vi dễ hiểu, đơn giản và thực thi mau chóng nhất, hành vi tìm kiếm lại là nền tảng để xây dựng rất nhiều hành vi khác
3.2.1.5 Hành vi truy đuổi Ở những trò chơi có yếu tố kẻ thủ (chiến đấu), các đối tượng mà ta giao chiến luôn sẽ có giá trị hơn khi chúng sở hữu cho mình một tầm nhìn chân thật Có không ít các tựa game bỏ qua chi tiết này, dẫn đến việc chỉ cần người chơi đi vào phạm vi hoạt động của đối tượng đó, dù cho người chơi có đang đứng ở sau các vật cản khác đi chăng nữa
Hình 3-3: Tầm nhìn của đối tượng Chicpea
Dựa trên tìm hiểu về sinh học, tự nhiên, tác giả biết được rằng ở các sinh vật ăn cỏ, mắt sẽ có xu hướng được đặt ở hai bên Từ đó, các sinh vật này sẽ có tầm nhìn rộng hơn, thích hợp trong việc phát hiện thú săn mồi để trốn chạy Ngược lại, các thú săn mồi, ăn thịt sẽ có xu hướng mắt hướng về phía trước, điểm giao tầm nhìn sẽ rõ ràng hơn, giúp việc truy đuổi hiệu quả và chính xác hơn
Xây dựng các cơ chế về phần người chơi
Các nguồn tài nguyên không chỉ có giá trị đối với các loài sinh vật hiện hữu trong trò chơi, mà còn có giá trị rất lớn đối với bản thân người chơi Thể loại mà tác giả hướng tới chính là thể loại thế giới mở, không phải sinh tồn, thành ra nhân vật mà người chơi điều khiển sẽ không có cơ chế đói khát, cũng như mệt mỏi
Thay vào đó, trò chơi sẽ tập trung vào việc phát triển ra một thế giới viễn tưởng, nơi các sinh vật tồn tại dưới dạng một món ăn, nguyên liệu nào đó Từ đó, người chơi có thể tự do phiêu lưu, ghi nhớ và thử nghiệm các loại món ăn khác nhau, mở rộng vốn hiểu biết về nguyên liệu cũng như là chính thế giới trò chơi
Các nguyên liệu có thể thu thập từ các nguồn tài nguyên tương tự như với các
AI Đồng thời, các sinh vật cũng có tỷ lệ “rớt vật liệu”, từ đó người chơi có thể thu thập các loại nguyên liệu thông qua việc chiến đấu
Tỷ lệ rớt vật liệu được quản lý thông qua file Json
Cơ chế nấu ăn của trò chơi sẽ không theo góc nhìn thứ nhất như Cooking Mama, nơi ta sẽ làm từng bước trong công đoạn nấu ăn, từ chuẩn bị nguyên liệu, nấu ăn, trình bày Để tạo ra một món ăn trong trò chơi, ta đơn giản chỉ cần chọn các loại nguyên liệu ở kho lương bên phải Những nguyên liệu được chọn sẽ ngay sau đó được thêm vào danh sách các nguyên liệu được sử dụng để nấu ăn ở giao diện bên trái màn hình
Cơ chế rèn đồ hoạt động tương tự như cơ chế nấu ăn, người chơi sẽ lựa chọn các nguyên liệu cần thiết từ kho đồ bên phải để chuyển nó vào danh sách sử dụng
3.3.6 Cơ chế sách thế giới
Phân tích thiết kế hệ thống
Hình 3-8: Sơ đồ Usecase tổng quát
STT Tên Actor Mô tả
1 Người chơi Người chơi trò chơi
2 Game System Hệ thống quản lý toàn bộ trò chơi
Bảng 3-1: Bảng danh sách Actor
STT Tên Use Case Actor Mô tả
1 Thoát game Người chơi Tắt game, đồng thời nhắc nhở người chơi về quy tắc lưu game
2 Thay đổi độ phân giải Người chơi Thay đổi độ phân giải của game theo danh sách độ phân giải cho sẵn
3 Chơi màn chơi Hướng dẫn
Người chơi Chơi một màn hướng dẫn để hiểu về cách chơi cơ bản
4 Xem trang bị Người chơi Xem những trang bị đang có
5 Tháo gỡ/ Mặc trang bị Người chơi Tháo gỡ hoặc mặc trang bị
6 Xem vật phẩm Người chơi Xem các vật phẩm hiện có
7 Sử dụng vật phẩm Người chơi Sử dụng vật phẩm đó nếu vật phẩm đó có khả năng tiêu thụ, sử dụng
8 Xem nguyên liệu Người chơi Xem các nguyên liệu hiện có
9 Chọn nguyên liệu Người chơi Chọn các nguyên liệu để đưa vào bước chế tạo, nấu ăn
10 Xem sách thế giới Người chơi Xem sách thế giới về các thông tin của thế giới trò chơi
11 Thu thập tài nguyên Người chơi Tương tác với các nguồn tài nguyên của màn chơi
12 Cập nhật sách thế giới Người chơi Cập nhật thông tin trong sách thế
53 giới khi có thông tin mới
13 Chiến đấu Người chơi Chiến đấu với các đối tượng trong màn chơi
14 Quay về nhà Người chơi Quay về nhà và lưu trò chơi
Bảng 3-2: Bảng danh sách Use Case
Tên use case Thoát game
Mô tả use case Lưu lại tiến trình của người chơi nếu đang ở khu vực cho phép và thoát trò chơi
Tác nhân Người chơi Điều kiện tiên quyết Đang ở nhà nhân vật người chơi Điều kiện kết quả Game phải được lưu lại trước khi đóng trình chạy game Dòng sự kiện chính 1 Nhấn Escape
2 Hiển thị giao diện cài đặt
4 Hiển thị thông báo về việc thoát game và yêu cầu xác nhận
6 Lưu game nếu hợp lệ
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-3: Bảng mô tả use case thoát game
Hình 3-9: Biểu đồ hoạt động use case thoát game
3.4.4.2 Thay đổi độ phân giải
Tên use case Thay đổi độ phân giải
Mô tả use case Thay đổi kích thước màn hình
Tác nhân Người chơi Điều kiện tiên quyết Không có
55 Điều kiện kết quả Màn hình phải thay đổi ngay lập tức, không cần phải khởi động lại trò chơi
Dòng sự kiện chính 1 Nhấn Escape
2 Hiển thị giao diện cài đặt
3 Chọn vào nút “Độ phân giải”
4 Lựa chọn độ phân giải từ danh sách
5 Cập nhật độ phân giải
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-4: Bảng mô tả use case thay đổi độ phân giải
Hình 3-10: Biểu đồ hoạt động use case thay đổi độ phân giải
3.4.4.3 Chơi màn chơi hướng dẫn
Tên use case Chơi màn chơi hướng dẫn
Mô tả use case Đưa người chơi đến khu vực để hướng dẫn các hành động cơ bản của nhân vật mà người chơi điều kiện
Tác nhân Người chơi Điều kiện tiên quyết Không có Điều kiện kết quả Không có
Dòng sự kiện chính 1 Nhấn Escape
2 Hiển thị giao diện cài đặt
3 Chọn vào nút “Hướng dẫn”
4 Dịch chuyển người chơi đến khu vực hướng dẫn
5 Người chơi thực hiện đủ các bước hướng dẫn
6 Đưa người chơi trở lại nhà của nhân vật
Dòng sự kiện phụ Người chơi lần đầu chơi trò chơi, chưa có file save
Dòng sự kiện lỗi Không có
Bảng 3-5: Bảng mô tả use case chơi màn chơi hướng dẫn
Hình 3-11: Biểu đồ hoạt động use case chơi màn chơi hướng dẫn
Tên use case Xem trang bị
Mô tả use case Xem các trang bị mà người chơi hiện đang sở hữu
Tác nhân Người chơi Điều kiện tiên quyết Không có Điều kiện kết quả Không có
Dòng sự kiện chính 1 Nhấn phím I
2 Hiển thị giao diện túi đồ
4 Hiển thị các trang bị hiện có
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-6: Bảng mô tả use case xem trang bị
Hình 3-12: Biểu đồ hoạt động use case xem trang bị
3.4.4.5 Tháo gỡ/mặc trang bị
Tên use case Tháo gỡ/mặc trang bị
Mô tả use case Tháo gỡ hoặc mặc trang bị cho nhân vật
Tác nhân Người chơi Điều kiện tiên quyết Không có Điều kiện kết quả Không có
Dòng sự kiện chính 1 Nhấn phím I
2 Hiển thị giao diện túi đồ
4 Hiển thị các trang bị hiện có
5 Chuột phải vào ô trang bị đang sử dụng để gỡ
6 Chuột trái hai lần vào trang bị bên túi đồ để trang bị hoặc thay thế trang bị hiện tại
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-7: Bảng mô tả use case tháo gỡ/mặc trang bị
Hình 3-13: Biểu đồ hoạt động use case tháo gỡ/mặc trang bị
Tên use case Xem vật phẩm
Mô tả use case Xem vật phẩm mà người chơi hiện có
Tác nhân Người chơi Điều kiện tiên quyết Không có Điều kiện kết quả Không có
Dòng sự kiện chính 1 Nhấn phím I
2 Hiển thị giao diện túi đồ
4 Hiển thị các vật phẩm hiện có
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-8: Bảng mô tả use case xem vật phẩm
Hình 3-14: Biểu đồ hoạt động use case xem vật phẩm
Tên use case Sử dụng vật phẩm
Mô tả use case Sử dụng vật phẩm tiêu thụ được
Tác nhân Người chơi Điều kiện tiên quyết Số lượng vật phẩm được chọn lớn hơn 0 Điều kiện kết quả Trừ đi số lượng vật phẩm đã được sử dụng
Dòng sự kiện chính 1 Nhấn phím I
2 Hiển thị giao diện túi đồ
4 Hiển thị các vật phẩm hiện có
5 Nhấn đúp chuột vào vật phẩm muốn sử dụng
6 Hiển thị giao diện yêu cầu xác nhận
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-9: Bảng mô tả use case sử dụng vật phẩm
Hình 3-15: Biểu đồ hoạt động use case sử dụng vật phẩm
Tên use case Xem nguyên liệu
Mô tả use case Xem các nguyên liệu người chơi đang có
Tác nhân Người chơi Điều kiện tiên quyết Không có Điều kiện kết quả Không có
Dòng sự kiện chính 1 Tương tác với bếp tại nhà
2 Hiển thị giao diện nấu ăn
3 Hiển thị các nguyên liệu hiện có bên phải giao diện Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-10: Bảng mô tả use case xem nguyên liệu
Hình 3-16: Biểu đồ hoạt động use case xem nguyên liệu
Tên use case Chọn nguyên liệu
Mô tả use case Chọn các nguyên liệu cần thiết để nấu ăn
Tác nhân Người chơi Điều kiện tiên quyết Nguyên liệu được lựa chọn cần có số lượng lớn hơn 0
64 Điều kiện kết quả Trừ số lượng nguyên liệu đã chọn khi chọn
Dòng sự kiện chính 1 Tương tác với bếp tại nhà
2 Hiển thị giao diện nấu ăn
3 Hiển thị các nguyên liệu hiện có bên phải giao diện
4 Nhấp chuột trái vào nguyên liệu muốn chọn
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-11: Bảng mô tả use case chọn nguyên liệu
Hình 3-17: Biểu đồ hoạt động use case chọn nguyên liệu
Tên use case Xem sách thế giới
Mô tả use case Xem từ điển có thông tin của thế giới trò chơi
Tác nhân Người chơi Điều kiện tiên quyết Không có Điều kiện kết quả Không có
Dòng sự kiện chính 1 Nhấn phím U
2 Hiển thị giao diện sách thế giới
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-12: Bảng mô tả use case xem sách thế giới
Hình 3-18: Biểu đồ hoạt động use case xem sách thế giới
Tên use case Thu thập tài nguyên
Mô tả use case Thu thập tài nguyên có mặt tại màn chơi
Tác nhân Người chơi Điều kiện tiên quyết Không có
67 Điều kiện kết quả Cập nhật số liệu mới cho tài nguyên và túi đồ
Dòng sự kiện chính 1 Đến gần nguồn tài nguyên
3 Kiểm tra số lượng còn lại của nguồn tài nguyên
4 Cập nhật số lượng của nguồn tài nguyên
5 Thêm tài nguyên vào túi đồ
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-13: Bảng mô tả use case thu thập tài nguyên
Hình 3-19: Biểu đồ hoạt động use case thu thập tài nguyên
3.4.4.12 Cập nhật sách thế giới
Tên use case Cập nhật sách thế giới
Mô tả use case Cập nhật thông tin trong sách thế giới
Tác nhân Người chơi Điều kiện tiên quyết Không có Điều kiện kết quả Cập nhật thông tin cuả sách thế giới
Dòng sự kiện chính 1 Tương tác với một sự kiện
2 Kiểm tra xem sách đã có sự kiện đó chưa
3 Cập nhật sách thế giới
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-14: Bảng mô tả use case cập nhật sách thế giới
Hình 3-20: Biểu đồ hoạt động use case cập nhật sách thế giới
Tên use case Chiến đấu
Mô tả use case Người chơi chiến đấu với các sinh vật khác trong trò chơi
Tác nhân Người chơi Điều kiện tiên quyết Vào màn chơi Điều kiện kết quả Không có
Dòng sự kiện chính 1 Người chơi vào màn chơi
2 Sinh ra các quần thể
3 Tiếp cận và chiến đấu
4 Đánh bại và thu chiến lợi phẩm
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-15: Bảng mô tả use case chiến đấu
Hình 3-21: Biểu đồ hoạt động use case chiến đấu
Tên use case Quay về nhà
Mô tả use case Người chơi quay về nhà sau quá trình thám hiểm
71 Điều kiện tiên quyết Đang ở màn chơi Điều kiện kết quả Không có
Dòng sự kiện chính 1 Người chơi vào màn chơi
3 Tương tác với cổng dịch chuyển
4 Đưa người chơi trở về nhà nhân vật
Dòng sự kiện phụ Không có
Dòng sự kiện lỗi Không có
Bảng 3-16: Bảng mô tả use case quay về nhà
Hình 3-22: Biểu đồ hoạt động use case quay về nhà
SẢN PHẨM
Danh sách giao diện
Tên use case Quay về nhà