หลีกเลี่ยงรัฐที่เป็นไปไม่ได้ในเกมผจญภัย


15

ฉันกำลังมองหาการสร้างรูปแบบการผจญภัยในแบบของคุณเองที่ค่อนข้างซับซ้อน แต่ฉันกำลังมองหาเทคนิคหรือวิธีการเพื่อช่วยในการออกแบบเกม

มันจะเป็นเรื่องราวที่มีหลายแขนงและในบางครั้งสาขาก็จะย้อนกลับไปหาตัวเองและการกระทำสำคัญของคุณจะได้รับการจดจำและรายการจะถูกรวบรวม ตัวอย่างเช่นหากผู้เล่นไปที่ป่าพรุและป่าก่อนที่จะไปที่ปราสาทเขาได้หยิบกระดูกไดโนเสาร์ฆ่ายูนิคอร์นและปลูกแขนเสริม หากผู้เล่นไปถึงปราสาทผ่านถ้ำและห้องใต้ดินเขาได้เก็บจักรยานและกลิ่นแปลก ๆ ตอนนี้เมื่อพัฒนาจิ๊กซอว์สำหรับปราสาทฉันไม่ต้องการสร้างสถานการณ์ที่ต้องใช้สองสิ่งที่เป็นไปไม่ได้เช่นแขนเสริมและกลิ่นจำเป็นในการฆ่ายักษ์

นอกเหนือจากการจัดทำเอกสารเหตุการณ์และรายการต่าง ๆ อย่างรอบคอบแล้วจะมีกระบวนการหรือไม่เทคนิคที่ฉันสามารถใช้ในสเปรดชีตหรือซอฟต์แวร์ที่ช่วยฉันได้

คำตอบ:


11

ฟังดูเหมือนปัญหากราฟกำกับ

เริ่มต้นที่จุดเริ่มต้นสำหรับการแตกแขนงแต่ละส่วนในเรื่องราวบันทึกรายการที่คุณมีอยู่ในปัจจุบันแล้วแยกกราฟ จากนั้นติดตามแต่ละสาขาและทำเช่นเดียวกันเมื่อคุณไปที่สาขาอื่นบันทึกรายการปัจจุบันของคุณและแยกกราฟ สิ่งนี้จะจบลงด้วยกราฟที่มีความหนาแน่นสูงซึ่งมีโหนดที่ซ้ำกันจำนวนมาก (แต่แต่ละโหนดจะได้รับจากลำดับกราฟที่แตกต่างกัน) แต่คุณไม่ควรวนซ้ำ

ในตอนท้ายคุณควรมีกราฟของรายการทั้งหมดที่คุณมี ณ จุดใดก็ตามในเรื่องราวของคุณและจากวิธีการที่เป็นไปได้ทั้งหมด

ขณะนี้ด้วยกราฟที่สมบูรณ์ของคุณสำหรับปัญหาแต่ละข้อที่ต้องใช้รายการ X + Y + Z ค้นหาโหนดทั้งหมดที่มีปัญหานั้นและดูว่ารายการที่บันทึกไว้สามารถตอบสนองเงื่อนไขนั้นได้หรือไม่ หากมีความล้มเหลวเพียงแค่เดินกลับขึ้นไปบนกราฟเพื่อค้นหาการตัดสินใจทั้งหมดที่พาคุณไปที่นั่นโดยไม่มีรายการที่เหมาะสมเพื่อแก้ไขปัญหานั้น

โชคดีที่การออกแบบเริ่มต้นของคุณถูกวางไว้อย่างนี้อย่างน้อยก็ในเชิงแนวคิดดังนั้นรหัสควรสะท้อนความเป็นจริงและง่ายต่อการตรวจสอบ

เวลาในการประมวลผลของการค้นหากราฟอาจหนักขึ้นเล็กน้อยหากคุณกำลังสร้างเกมขนาดใหญ่ดังนั้นให้สร้างสิ่งนี้เช่นยูทิลิตี้ที่อาจใช้เวลาสักครู่ในการรันและส่งผลผลลัพธ์เป็นรายงานเพื่อให้คุณใช้


นั่นหมายถึงการพัฒนาเครื่องมือ ฉันขอเป็นทางเลือกสุดท้าย
Ali1S232

6
เครื่องมือนั้นจะเป็นสมองของคุณเองการเก็บบันทึกและความจุของหน่วยความจำหรือมันจะเป็นสิ่งที่เป็นไปโดยอัตโนมัติที่จะไม่เบื่อและคิดถึงความผิดพลาด =) ฉันคิดว่ามันขึ้นอยู่กับว่าเกมของคุณจะใหญ่ขนาดไหน เคยสร้างอีกอันจากเอนจิ้นเดียวกันเพื่อตัดสินว่าเวลาที่ใช้ไปนั้นคุ้มค่าหรือไม่
Patrick Hughes

วิธีที่ดีที่สุดในการทำเช่นนี้อาจเป็นการสร้างแผนภูมิการพึ่งพาจากบนลงล่าง (ย้อนกลับ) และหากสองรายการในต้นไม้มีการพึ่งพาเหมือนกัน (และการพึ่งพาต้องมีตัวเลือกระหว่างกัน) คุณมีการละเมิด
decaviatedcaviar

0

นี่อาจดูเหมือนคำตอบที่แปลก แต่คุณสามารถตรวจสอบเหตุการณ์ที่เป็นไปไม่ได้โดยใช้คอมไพเลอร์ (เช่น c ++)! ให้ฉันอธิบายวิธี: คุณมีไฟล์ส่วนหัวเดียวสำหรับทุกสเตจ และเกมจะสิ้นสุดลงในmain.cppไฟล์ เมื่อใดก็ตามที่คุณสามารถไปจากstage aเพื่อstage bคุณเพียงแค่ต้องรวมไฟล์ที่เกี่ยวข้องกับในstage a stage bเมื่อใดก็ตามที่คุณได้รับรายการใหม่ในระยะคุณเพียงกำหนดค่าสำหรับรายการนั้น เมื่อใดก็ตามที่คุณทำหายหรือใช้ไอเท็มคุณก็ต้องทำการถอดออก ในตอนท้ายของแต่ละด่านคุณเพียงแค่ต้องใช้ค่าที่กำหนดทั้งหมดสำหรับรายการที่จำเป็นในด่านนั้น นี่คือตัวอย่างวิธีใช้สิ่งนี้ในโค้ด:

อา

#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()
{
}

แม้ว่ามันอาจต้องมีการเปลี่ยนแปลงก่อนที่จะใช้จริง ๆ แต่ฉันคิดว่าคุณสามารถสร้างรหัสบางอย่างเช่นนี้ คุณยังสามารถใช้การสืบทอดและใช้คลาสสำหรับแต่ละขั้นตอนแทนวิธีที่ฉันแนะนำ นอกเหนือจากนี้ฉันคิดว่าคุณต้องพัฒนาเครื่องมือด้วยตัวเอง


2
มันเป็นวิธีการคอมไพเลอร์ที่ผิด!
Ali1S232

3
มันน่าสนใจ แต่มันจะค่อนข้างเปราะและใช้ได้เฉพาะถ้าฉันมีคลาสต่อวัตถุ / เหตุการณ์ / ส่วนในเรื่องราวของฉัน ฉันจะหาวิธีการขับเคลื่อนข้อมูลอ่านจาก xml หรืออะไรบางอย่าง ขอบคุณสำหรับคำแนะนำของคุณ
DanDan

3
ไม่ใช่ความคิดที่ดีที่จะบังคับให้คอมไพล์ใหม่ทุกครั้งที่มีการเปลี่ยนแปลงเควสต์รวมถึงสิ่งนี้จะไม่อนุญาตให้อัปเดตข้อมูลไปยังผู้ใช้ปลายทาง (เช่น DLC) หรือหากเรียกใช้จากเซิร์ฟเวอร์และใช้การแก้ไขโดยไม่บังคับให้ดาวน์โหลด
Patrick Hughes

2
ตัวอย่างโค้ดนั้นไม่เกี่ยวข้องกับโค้ดที่จะปล่อยออกมาและโค้ดนั้นจะไม่ทำสิ่งใดจริงๆ เป็นเพียงการตรวจสอบว่าเรื่องราวและเควสของคุณถูกต้องหรือไม่ (หากไม่ใช่คุณเพิ่งได้รับข้อผิดพลาดในการคอมไพล์มิฉะนั้นคุณสามารถติดตั้งเควสทรีในเกมของคุณได้
Ali1S232

โอ้ฉันเข้าใจแล้วฉันตีความผิด ฉันสงสัยว่าคน ๆ หนึ่งอาจใช้เวลามากขึ้นเพื่อให้แน่ใจว่ารหัสนี้สะท้อนถึงข้อมูลจริงมากกว่าที่จะได้รับการบันทึกข้อผิดพลาดตรรกะการสืบหาเควสนั่นเป็นการตัดสินที่ผู้เขียนเกมต้องทำ
Patrick Hughes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.