Để trả lời ngắn gọn câu hỏi chính của bạn trước tiên, những lợi thế chính của một thế giới trò chơi được tạo theo thủ tục là:
Thế giới có thể rộng lớn , lớn hơn nhiều so với bất kỳ thế giới trò chơi nào được thiết kế thủ công có thể.
Thế giới (hoặc ít nhất là một phần của nó) có thể được tái tạo cho mỗi trò chơi, có khả năng tăng giá trị chơi lại, vì người chơi sẽ luôn có một cái gì đó mới để khám phá.
Ngược lại, nhược điểm chính của việc tạo thủ tục là:
Tùy thuộc vào các phương thức tạo được sử dụng, khó có thể chắc chắn rằng thế giới luôn có thể chơi được, tức là người chơi không thể bị mắc kẹt mà không có cách nào tiến hành chỉ vì họ không may mắn với thế hệ.
Ngay cả khi bạn có thể tránh tạo ra các thế giới hoàn toàn không thể chơi được, việc tạo thế giới ngẫu nhiên có thể dẫn đến mức độ khó thay đổi cao: đôi khi, người chơi có thể tìm thấy mọi thứ họ cần chỉ để thuận tiện xếp hàng, đôi khi họ có thể đi một lúc lâu mà không tìm thấy bất cứ điều gì hữu ích .
Trong thời gian dài, những biến động ngẫu nhiên như vậy có xu hướng giảm trung bình, nhưng nếu độ khó của trò chơi là rất nặng nề (điển hình cho các trò chơi sinh tồn), một khởi đầu tồi tệ có thể phá hỏng một trò chơi trong khi một khởi đầu rất may mắn có thể cướp đi mọi thử thách.
Thế hệ thủ tục được thực hiện kém có thể khiến thế giới cảm thấy đơn điệu và nhàm chán: sau khi bạn nhìn thấy hàng tá mê cung được tạo ngẫu nhiên, tất cả chúng bắt đầu trông giống nhau, ngay cả khi chúng khác nhau về chi tiết.
Ngoài ra, nếu thế giới trò chơi được tái tạo hoàn toàn cho mỗi trò chơi, sẽ không có vị trí hoặc tính năng cố định mà người chơi có thể nhận ra từ các trò chơi trước. Sự thiếu quen thuộc như vậy có thể khiến người chơi khó tham gia vào trò chơi hơn ở cấp độ cảm xúc hoặc chia sẻ kinh nghiệm với những người chơi khác.
Ngoài ra còn có một điều mà bạn có thể tính vào một trong hai danh sách: trong một trò chơi mà thế giới được tái tạo ngẫu nhiên cho mỗi trò chơi, không thể có một hướng dẫn "hướng dẫn" nào, vì mỗi lần chơi sẽ khác nhau.
(Tính không lặp lại này cũng có thể là một vấn đề đối với thử nghiệm và gỡ lỗi, mặc dù ít nhất có thể tránh được một phần bằng cách cho phép hạt giống RNG được chỉ định, ít nhất là trong chế độ gỡ lỗi và / hoặc bằng cách cung cấp lệnh "gian lận" có thể được sử dụng để chơi nhanh về phía trước đến các giai đoạn khác nhau.)
Tuy nhiên, nếu bạn nhìn vào danh sách các nhược điểm, bạn sẽ thấy rằng nó chủ yếu mô tả các nhược điểm của việc tạo thủ tục thuần túy ; rất nhiều trong số chúng có thể tránh được bằng cách trộn nội dung được tạo thủ công và thủ tục .
Ví dụ: người chơi luôn có thể bắt đầu ở thị trấn cố định, được thiết kế thủ công, có thể được bao quanh bởi một khu vực nhà cố định rộng hơn hoặc ít hơn, nhưng những nơi cách xa thị trấn có thể được tạo ngẫu nhiên để luôn cung cấp các khu vực xa lạ cho người chơi khám phá.
Cũng có thể có các thị trấn được thiết kế thủ công hoặc các địa điểm khác được đặt ngẫu nhiên (nhiều hơn hoặc ít hơn) trên thế giới, như vậy người chơi sẽ phải tìm thấy chúng, nhưng sẽ biết những gì sẽ xảy ra khi chúng đến đó. Ngược lại, các đặc điểm nổi bật như núi có thể được đặt thủ công (ít nhất là trong vùng lân cận của vị trí bắt đầu cố định), nhưng các chi tiết về địa hình của chúng có thể được chọn ngẫu nhiên.
Đối với vị trí ngẫu nhiên gây ra bế tắc và biến đổi khó khăn, điều đó có thể được giải quyết bằng cách thực hiện các kiểm tra tính nhất quán và cân bằng khác nhau trên thuật toán thế hệ thủ tục của bạn. Ví dụ: nếu người chơi cần một vật phẩm cụ thể để có thể vượt qua nước, bạn có thể bao gồm một số mã để đảm bảo rằng ít nhất một vật phẩm đó được đặt để người chơi có thể tiếp cận với nó mà không cần vượt qua nước.
Tương tự, bạn cũng có thể muốn điều chỉnh các quy tắc vị trí vật phẩm của mình để không có sự tuyệt vời nào phá vỡ sự cân bằng trước khi người chơi đạt cấp độ x và có thể đảm bảo rằng ít nhất một vị trí được đặt ở một vị trí cố định nơi người chơi có thể tiếp cận nó trước khi đến giai đoạn mà họ sẽ cần nó để tồn tại.
Nhân tiện, một cách phổ biến để tạo lưới nội dung theo thủ tục và được tạo thủ công ít nhiều liền mạch là bắt đầu quy trình tạo thủ công bằng cách sử dụng trình tạo thế giới thủ tục (có thể được điều chỉnh phù hợp, ví dụ: để tạo làng hoặc đỉnh núi nơi bạn muốn ) để khởi tạo khu vực bạn đang thiết kế, sau đó điều chỉnh thủ công khu vực đó để thêm và điều chỉnh các chi tiết bạn muốn. (Điều này cũng có thể cho phép lưu trữ ở mức rất nhỏ gọn, bằng cách chỉ lưu các thay đổi thủ công và các tham số và hạt giống của trình tạo được sử dụng.)
Các cách khác để kết hợp nội dung thủ công và thủ tục bao gồm để lại các điểm trống trong các cấp được thiết kế thủ công của bạn, được điền vào nội dung ngẫu nhiên (ví dụ: một lâu đài có thể bao gồm một mê cung được tạo ngẫu nhiên trong ngục tối, chỉ có đường viền và lối thoát cố định), hoặc thiết kế thủ công chỉ có thể chỉ định phác thảo rộng của một số phần của cấp độ (ví dụ: vị trí của các ngôi nhà trong thị trấn) và để lại các chi tiết (chẳng hạn như diện mạo chính xác của mỗi ngôi nhà) được chọn ngẫu nhiên.
Trên thực tế, thậm chí nhiều trò chơi đã hoàn toàn cố định trong thế giới trò chơi sử dụng một số hình thức tạo thủ tục như một phần của quy trình thiết kế cấp độ của chúng, vì có một số khía cạnh của thế hệ (như tạo địa hình trông tự nhiên hoặc đặt từng cây trong rừng) đó là khó khăn và / hoặc tẻ nhạt để làm bằng tay, nhưng tương đối dễ dàng để tự động hóa.
Ngược lại, hầu hết các máy phát điện thế giới theo thủ tục sẽ sử dụng ít nhất một số đối tượng và các yếu tố được thiết kế thủ công để xây dựng thế giới. Người ta thậm chí có thể dễ dàng có nhiều cấp độ tạo ngẫu nhiên / thủ công lồng nhau: ví dụ, một thế giới được tạo theo thủ tục có thể bao gồm một thị trấn được tạo thủ công bao quanh bởi các khu rừng được tạo theo thủ tục với một phác thảo được vẽ thủ công, với các cây được tạo theo cách thủ công có lá được thiết kế thủ công.
Cũng lưu ý rằng việc tạo nội dung theo thủ tục không nhất thiết không tương thích với một thế giới cố định: bạn chỉ cần chọn một hạt giống RNG cố định và sử dụng nó để tạo thế giới của mình. Điều này có thể hữu ích nếu bạn muốn một thế giới rộng lớn cho người chơi khám phá, nhưng muốn giữ nó giống nhau cho mọi trò chơi và mọi người chơi.
Lưu ý rằng, nếu bạn làm điều này (hoặc thậm chí nếu bạn không), bạn thực sự nên thiết kế trình tạo thế giới của mình để hoạt động theo kiểu phân cấp, sử dụng nhiều phiên bản RNG, ví dụ như trình tạo bản đồ tổng thể sẽ giữ một thể hiện RNG duy nhất rằng nó sẽ sử dụng để tạo các tiểu vùng, gán cho mỗi tiểu vùng một giá trị hạt giống khác nhau mà trình tạo vùng sau đó sẽ sử dụng để tạo một cá thể RNG riêng biệt mà nó sẽ sử dụng để tạo vùng, v.v. Điều này là để tránh "hiệu ứng cánh bướm", trong đó việc thay đổi ngay cả chi tiết nhỏ nhất của phần nhỏ nhất trên bản đồ có thể khiến RNG không đồng bộ và khiến mọi thứ khác trên thế giới hoàn toàn khác.
Một cách quan trọng khác để tránh hiệu ứng cánh bướm, đặc biệt là nếu bạn tạo ra thế giới "đang bay" khi người chơi khám phá nó, là tránh hoàn toàn các RNG thông thường (ngoại trừ các quá trình xảy ra "tức thời" từ quan điểm của người chơi, như tạo ra một cấp độ mới khi người chơi nhập nó) và thay vào đó sử dụng các phương thức tạo số ngẫu nhiên không lưu trữ bất kỳ trạng thái nội bộ nào. Ví dụ, khi chọn hạt giống cho tiểu vùng mà người chơi sắp nhập, trình tạo thế giới tổng thể có thể lấy tọa độ của tiểu vùng (và hạt giống tổng thể của chính nó) và đưa chúng vào hàm băm để tạo hạt giống tiểu vùng. Bằng cách đó, mỗi khu vực sẽ luôn trông giống nhau, bất kể thứ tự mà người chơi nhập vào chúng.
Thi thiên Sau tất cả những điều đó, hãy để tôi giải quyết ngắn gọn câu hỏi cuối cùng của bạn về mã thực tế được sử dụng để tạo thủ tục. Than ôi, tôi không nghĩ rằng nó thực sự có thể trả lời theo bất kỳ ý nghĩa nào mà không có nhiều chi tiết hơn bạn đã cung cấp, vì có nhiều cách khác nhau để tạo ra thế giới theo thủ tục như có các trò chơi sử dụng chúng.
Ví dụ, ông cố của tất cả các trò chơi khám phá được tạo theo thủ tục có lẽ là Rogue , người có thuật toán tạo cấp chỉ đơn giản là đặt ngẫu nhiên một loạt các phòng hình chữ nhật trong một mức hình chữ nhật lớn hơn và kết nối các phòng đó với các lối đi (và đặt cầu thang đến cấp độ tiếp theo trong một trong số họ). Những người kế vị đa dạng của nó , từ Nethack đến loạt Diablo , đã xây dựng hệ thống này theo nhiều cách, nhưng hầu hết vẫn giữ ý tưởng cơ bản về các cấp độ khác nhau bao gồm các phòng, ngục tối và mê cung ít nhiều được đặt ngẫu nhiên trên bản đồ lưới.
Ngược lại, đối với các trò chơi có cài đặt ngoài trời mở, có thể bạn sẽ muốn bắt đầu với một số loại thuật toán tạo địa hình fractal và xây dựng các tính năng khác (sông, rừng, thị trấn, v.v.) trên đó. Hoặc bạn có thể làm một cái gì đó giống như những gì Minecraft làm và tạo ra kết cấu thủ tục 3D ngẫu nhiên xác định phần nào của cảnh quan của bạn là mặt đất và không khí tương ứng (được chia tỷ lệ và thiên vị sao cho các khối thấp hơn có khả năng tiếp đất), và sau đó phủ các tính năng như nước , đất / đá, thảm thực vật, vv trên đầu trang của nó.
Tất nhiên, không có điều nào ở trên áp dụng nếu bạn đang viết một trò chơi thám hiểm không gian , trong trường hợp đó bạn sẽ chỉ cần tạo ra một loạt các hệ sao được đặt ngẫu nhiên theo một số hàm mật độ, rồi tạo ngẫu nhiên tập hợp các ngôi sao và các hành tinh trong mỗi chúng. Hoặc có thể bạn đang đặt người chơi khám phá một cảnh quan phi Euclide , trong trường hợp đó, bạn sẽ phải đối mặt với một loạt thách thức hoàn toàn khác (chẳng hạn như âm lượng trong bán kính nhất định tăng theo cấp số nhân chứ không phải đa thức, làm cho nó thực sự khó khăn để giữ một bản đồ lớn trong bộ nhớ).