Ich erstelle eine Text-basierte, wählen Sie Ihr eigenes Abenteuerspiel in C ++.
In diesem Spiel wird es viele Möglichkeiten geben, wohin du gehen willst, was du tun willst usw.
Meine Frage ist, wie ich verhindern kann, dass dies extrem verwirrend wird.
Beispiel:
Sagen wir mal, an einem Punkt im Spiel kann man gefragt werden, ob man in den Wald oder in die Wüste gehen soll. Wenn du Wüste auswählst, ist das eine komplett andere Geschichte aus dem Wald.
Wie würde ich verhindern, dass mein Code so aussieht?
%Vor%Innerhalb dieser Handlungsstränge würde es mehr Konditionalitäten wie diese und ausgefeiltere Handlungsstränge geben, also gibt es eine Möglichkeit, den Code für eine Handlungsstränge in einer separaten Datei zu schreiben, dann führe einfach diese Datei für diese Bedingung aus ? Wie auch immer, ich kann das separat machen, anstatt alles innerhalb der Bedingungen zu schreiben? Wenn ich das täte, würde der Code schnell lang und verwirrend sein, um zu sehen / zu bearbeiten.
Ich habe darüber nachgedacht, Header zu schreiben und Funktionen in den Headern zu erstellen, die die Storyline ausschreiben, also müsste ich nur die Funktion eingeben, aber wenn ich das täte, könnte ich nicht auf die globalen Variablen im Spiel zugreifen wie playerName
oder playerRace
usw.
Alle Vorschläge werden geschätzt. Ich bin neu in C ++, also bitte vergib mir, wenn ich etwas Mühsames übersehen habe.
Wahrscheinlich eine klassenbasierte Lösung. Die Frage ist breit, also nicht ganz sicher, welche Designmuster passen würden. Eine Beispielklasse kann jedoch CrossroadsDesicision
sein, die Optionen ["Go to desert", "Go to city", ...]
exportiert und eine Methode apply
hat, die Optionen vom Array erhalten und die relevante Entscheidungsklasse für den nächsten Schritt zurückgeben soll
Bearbeiten: Die Basisklasse sollte enthalten:
possibleDecisions - ein Array von möglichen Entscheidungen (Sie könnten hier eine Optionsklasse verwenden, die aus einem Namen (String oder enum - Sie sollten hier Templating verwenden) und einer Beschreibung)
anwenden - eine Funktion, die eine Entscheidung erhält, die darauf reagiert und die nächste Entscheidung zurückgibt
Ich werde ein wenig auf Trevor Hickey Zustandsmaschine Vorschlag erweitern, weil es eine großartige Idee ist.
Zuerst müssen Sie erkennen, dass Ihre Handlungsstränge mit einem guten alten Graphen modelliert werden können.
In der Programmiersprache bedeutet das: eine virtuelle Story-Klasse
%Vor%Ein Story Arc, der eine Verbindung zwischen Geschichten herstellt. Es muss eine Bedingung ausgelöst werden, die die letzte Geschichte zurückgeben kann
%Vor%Mit diesem können Sie einzelne Geschichten auf einer Seite schreiben und dann Storybögen separat schreiben. Sie können die Logik Ihres Spiels auch anpassen und modifizieren, indem Sie die Handlungsbögen modifizieren. Sie können mehrere Spiele spielen, wobei jede nur eine Gruppe von StoryConnections ist.
Die Logik wird einfach sein als:
%Vor%Sie müssen Ihren Code strukturieren. Sie haben also eine Klasse Player, eine Klasse Place, dann brauchen Sie ein Array, um die Orte zu speichern, was auch immer an diesem Ort passiert, wird von einer virtuellen Funktion behandelt:
BEARBEITEN:
Ich habe den Code geändert, um auf die Ziele zu achten, Sie benötigen nur eine andere Klasse, wenn Sie die Ziele in einer Liste zum einfachen Hinzufügen / Entfernen pflegen möchten:
%Vor%kompilieren mit:
%Vor% Sie könnten enum
und switch
verwenden:
Sie können auch alles in Klassen oder Funktionen einschließen und ihre Adressen in player
object speichern, so dass Sie nicht einmal überprüfen müssen, in welchem Zustand player
ist, Sie würden einfach schreiben:
Aber gutes Spieldesign zu wählen ist ein komplexes Thema, das nicht als "einfache Antwort" gedacht ist.