Tránh các trạng thái không thể trong một trò chơi phiêu lưu


15

Tôi đang tìm cách tạo ra một trò chơi phiêu lưu theo phong cách khá phức tạp của riêng bạn, nhưng tôi đang tìm kiếm một kỹ thuật hoặc phương pháp để giúp thiết kế trò chơi.

Nó sẽ là một câu chuyện nhiều nhánh, và đôi khi các nhánh sẽ tự thu mình lại, và những hành động chính của bạn sẽ được ghi nhớ và các mục sẽ được thu thập. Ví dụ, nếu người chơi đi đến đầm lầy và rừng trước khi đến lâu đài, anh ta đã nhặt được xương khủng long, giết một con kỳ lân và mọc thêm một cánh tay. Nếu một người chơi đến lâu đài qua các hang động và hầm mộ, anh ta đã nhặt được một chiếc xe đạp và có mùi lạ. Bây giờ khi phát triển các câu đố cho lâu đài, tôi không muốn tạo ra một tình huống đòi hỏi phải có hai điều không thể, ví dụ - cần thêm một cánh tay và mùi để giết một con yêu tinh.

Khác với việc ghi lại các sự kiện và vật phẩm rất cẩn thận, có một quy trình, một kỹ thuật tôi có thể sử dụng trong bảng tính hoặc một phần mềm có thể giúp tôi không?

Câu trả lời:


11

Âm thanh giống như một vấn đề đồ thị chỉ đạo.

Bắt đầu từ đầu, cho mỗi nhánh trong câu chuyện ghi lại các mục bạn hiện có và sau đó phân nhánh biểu đồ. Từ đó theo từng nhánh và làm tương tự, khi bạn đến nhánh khác ghi lại các mục hiện tại của bạn và phân nhánh biểu đồ. Điều này sẽ kết thúc với một biểu đồ khá dày đặc với rất nhiều nút trùng lặp (nhưng mỗi nút có ở đó từ một chuỗi biểu đồ khác nhau) nhưng bạn sẽ không nhận được vòng lặp.

Cuối cùng, bạn nên có một biểu đồ của tất cả các mục bạn có thể có tại bất kỳ điểm nào trong câu chuyện của bạn và từ tất cả các cách có thể để đến đó.

Bây giờ, với biểu đồ đã hoàn thành của bạn: đối với từng vấn đề của bạn yêu cầu các mục X + Y + Z, hãy tìm tất cả các nút có vấn đề đó và xem liệu các mục được ghi có thể đáp ứng điều kiện đó không. Nếu có một thất bại, chỉ cần quay lại biểu đồ để tìm tất cả các quyết định đưa bạn đến đó mà không có các mục thích hợp để giải quyết vấn đề đó.

Với bất kỳ may mắn nào, thiết kế ban đầu của bạn đã được đặt ra như thế này, ít nhất là về mặt khái niệm, vì vậy mã phải phản ánh thực tế và dễ dàng xác minh.

Thời gian xử lý các tìm kiếm đồ thị có thể hơi nặng nề nếu bạn đang xây dựng một trò chơi lớn, vì vậy hãy xây dựng nó giống như một tiện ích có thể mất một lúc để chạy và đưa ra kết quả vào báo cáo để bạn sử dụng.


điều đó có nghĩa là phát triển một công cụ. Tôi sẽ đặt điều đó là phương sách cuối cùng.
Ali1S232

6
Công cụ này sẽ là bộ não của riêng bạn, lưu trữ hồ sơ và dung lượng bộ nhớ hoặc nó sẽ là thứ gì đó tự động sẽ không bị mỏi và bỏ lỡ một sự cố =) Tôi đoán nó phụ thuộc vào mức độ lớn của trò chơi của bạn và liệu bạn có bao giờ xây dựng một cái khác từ cùng một động cơ, để quyết định xem thời gian đó có xứng đáng hay không.
Patrick Hughes

Cách tốt nhất để làm điều này có thể là xây dựng cây phụ thuộc từ trên xuống (đi ngược) và nếu hai mục trong cây có chung sự phụ thuộc (và sự phụ thuộc đòi hỏi phải có sự lựa chọn giữa chúng), thì bạn đã vi phạm.
giảm tốc

0

điều này có vẻ là một câu trả lời kỳ lạ nhưng bạn có thể dễ dàng kiểm tra các sự kiện không thể bằng trình biên dịch (ví dụ c ++)! hãy để tôi giải thích làm thế nào: bạn có chính xác một tệp tiêu đề cho mọi giai đoạn. và trò chơi kết thúc trong main.cpptập tin. bất cứ khi nào bạn có thể đi từ stage ađến stage b, bạn chỉ cần phải bao gồm tập tin liên quan đến stage astage b. Bất cứ khi nào bạn nhận được một mục mới trong một giai đoạn, bạn chỉ cần xác định một giá trị cho mục đó. Bất cứ khi nào bạn bị mất hoặc sử dụng một vật phẩm, bạn chỉ cần hoàn tác nó. cuối cùng trong mỗi giai đoạn bạn chỉ cần sử dụng tất cả các giá trị được xác định cho các mục cần thiết trong giai đoạn đó. Đây là một mẫu làm thế nào để sử dụng mã này:

Ah

#define itemA

bh

#include <a.h>
#undef itemA
#define itemB

ch

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

Mặc dù nó có thể cần một số thay đổi trước khi thực sự được sử dụng nhưng tôi đoán bạn có thể tạo một số mã như thế này. bạn cũng có thể sử dụng kế thừa và sử dụng các lớp cho từng giai đoạn thay vì cách tiếp cận tôi đề xuất. ngoài những điều này tôi nghĩ bạn phải tự mình phát triển một công cụ.


2
đó là một sự lạm dụng thực sự của trình biên dịch!
Ali1S232

3
Điều đó thật thú vị nhưng nó sẽ khá dễ vỡ và chỉ hoạt động nếu tôi có một lớp cho mỗi đối tượng / sự kiện / phần trong câu chuyện của mình. Tôi sẽ tìm hiểu thêm về cách tiếp cận dựa trên dữ liệu, đọc từ xml hoặc một cái gì đó. Cảm ơn đề nghị của bạn mặc dù.
DanDan

3
Không phải là một ý tưởng tốt để buộc biên dịch lại mỗi khi nhiệm vụ thay đổi, cộng với việc này sẽ không cho phép cập nhật dữ liệu cho người dùng cuối (ví dụ DLC) hoặc nếu chạy từ máy chủ và áp dụng các bản sửa lỗi mà không buộc tải xuống.
Patrick Hughes

2
mẫu mã đó không phải là bất kỳ thứ gì liên quan đến mã sẽ phát hành và mã đó không thực sự làm gì cả. nó chỉ kiểm tra xem cốt truyện và nhiệm vụ của bạn có hợp lệ hay không. (nếu họ không phải là bạn chỉ gặp lỗi biên dịch, nếu không bạn có thể thực hiện cây nhiệm vụ đó trong trò chơi của mình!
Ali1S232

Ồ tôi hiểu rồi, tôi hiểu sai. Tôi nghi ngờ rằng một người có thể dành nhiều thời gian hơn để đảm bảo rằng mã này phản ánh dữ liệu thực tế hơn là sẽ được lưu lỗi gỡ lỗi lỗi logic, đó là một phán đoán mà tác giả trò chơi phải đưa ra.
Patrick Hughes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.