Tôi không phải nhà thiết kế trò chơi nhưng tôi có thể nhìn thấy một cái gì đó mà bạn có thể tại nơi làm việc ở đây ...
Object Oriented Programming phép cho các loại hình phức tạp và sự năng động bằng cách đóng gói dữ liệu và logic gọn gàng trong nhiều đối tượng. Các đối tượng này có thể tương tác 'bằng lời', sử dụng thông điệp liên đối tượng để phân công nhiệm vụ cho nhau. Người gửi thư không cần biết người nhận sẽ diễn giải thông báo như thế nào, để lại phương thức hành động hoàn toàn cho người nhận. Cũng giống như trong thế giới thực, phái đoàn cho phép mọi thứ chạy trơn tru hơn.
Ví dụ: khi bạn đặt hàng risotto nấm từ Del Posto ở thành phố New York, bạn có đặt hàng bằng cách quay lại bếp và trò chuyện trực tiếp với đầu bếp không? Bạn có đặt trên một chiếc tạp dề và chuẩn bị risotto cho mình? Bạn lái xe đến trang trại nấm gần nhất và chọn nấm của riêng bạn? Không, bạn không. Bạn chỉ cần ủy nhiệm các nhiệm vụ này cho người phục vụ, đội ngũ đầu bếp và nhà cung cấp sản phẩm tương ứng. Để có được risotto nấm của bạn, tất cả các bạn cần làm là nói với người phục vụ mà bạn muốn nó. Phần còn lại được thực hiện tự động, thông qua một chuỗi các đoàn đại biểu. Cùng một loại đoàn có thể tồn tại trong trò chơi của bạn.
Bây giờ, quay lại đối tượng. Một số đối tượng kế thừa dữ liệu và logic từ các đối tượng cha, và theo cách này, có thể có rất nhiều dữ liệu/logic chung; chúng ta hãy gọi những anh chị em này. Trong ví dụ về nhiệm vụ trò chơi, mỗi nhiệm vụ có thể là 'đối tượng nhiệm vụ' của riêng mình, với dữ liệu cơ sở và logic được thừa kế từ cha mẹ nhiệm vụ của cha mẹ. Quest anh chị em có thể được phân biệt với nhau bằng cách tacking-on thêm dữ liệu/logic liên quan đến các nhiệm vụ cụ thể.
Tùy thuộc vào hành động của bạn trong trò chơi (và lựa chọn của bạn trong menu của trò chơi, có lẽ), đối tượng trò chơi có thể hoán đổi một đối tượng nhiệm vụ đang hoạt động cho một trong các anh chị em của nó. Thông thường, điều này có thể được thực hiện với một lệnh thực sự đơn giản (trong pseudo-code, không theo mô hình sau khi bất kỳ ngôn ngữ lập trình cụ thể):
gameObject.activeQuest -> getCurrentObject();
//returns the object containing all of the data/logic of the current active quest:
Gibbons_GoldenArtifacts
//Let's say the quest description is "Scour the Catacombs of Gibbon for a
mysterious treasure"
gameObject.activeQuest -> setCurrentObject(Gibbon_DefeatGhost)
//sets the activeQuest object (note that QUEST OBJECT contains baseline data/logic)
//assuming, say, Gibbon_DefeatGhost is an object like so:
Gibbon_DefeatGhost={QUEST OBJECT};
Gibbon_DefeatGhost.extend(
description="Defeat Gibbon's ghost to retrieve his golden artifacts";
objective="Defeat Gibbon's ghost";
questNPC="Gibbon's ghost";
questLocation="Gibbon's Inner Sanctum"
questTriggers[1]="When PLAYER enters Gibbon's Inner Sanction: Release Gibbon's ghost";
questTriggers[2]="When Gibbon is slain: Drop Gibbon's golden artifacts"
)
Từ thời điểm đó trở đi, các đối tượng trò chơi riêng của mình có thể sẽ tương tác với các nhiệm vụ hoạt động đối tượng giống như nó luôn có, nhưng đối tượng nhiệm vụ đang hoạt động có thể cảm nhận những tương tác đó theo những cách khác với cách tìm kiếm đối tượng nhiệm vụ, dẫn đến trải nghiệm trò chơi khác.
Hope Tôi không hoàn toàn fudging chú hề trên này ...
Một cách trực tiếp khá để tìm ra câu trả lời cho điều này là để mở ra các trò chơi trong trình soạn thảo trên thế giới chính thức và xem cách họ mô hình dữ liệu này. Trình chỉnh sửa được bao gồm trong trò chơi. –