Text-Adventure Eingabe
-
Hallo,
ich möchte ein Text-Adventure programmieren.
Für die verschiedenen Eingabemöglichkeiten des Spielers plane ich eine Unterteilung in Verben und Nomen. So gibt es z.B. das Verb "use %1% with %2%" (wobei %1% und %2% Nomen-Platzhalter sind) und die Nomen "key" und "door".
Mögliche Kombinationen dieser beiden werden sollen dann bei bestimmten erfüllten Bedingungen akzeptiert werden. Manche sind z.B. jederzeit nutzbar, manche nur, wenn sich ein bestimmter Gegenstand im Inventar befindet und andere nur dann, wenn sich der Spieler an einem bestimmten Ort befindet.Meine Frage ist, wie ich am besten überprüfen kann, ob die Eingabe einer definierten Verb-Nomen-Kombination entspricht und wenn ja, welcher. Die einzige Idee, die ich bisher habe, ist, jedes Mal, wenn sich die möglichen Eingaben ändern, sämtliche Kombinationen in einen Container zu speichern und diesen dann zu durchsuchen.
-
Man könnte jeweils eine Basisklasse für Verben und Nomen anlegen und dann die alle Verben und Normen von diesen ableiten, Instanzen mit ihren Schlüsselwörtern in Hashtabellen packen und einer der beiden Basisklassen eine Auswertungsfunktion, die eine Instanz der jeweils anderen Basisklasse nimmt, erstellen.
In diesem Fall bietet es sich sehr an, mit TMP (Template Meta Programming) zu arbeiten und somit Kompilierzeit-Polymorphismus zu haben.
Allerdings würde ich an deiner Stelle kein Text-Adventure direkt in C++ schreiben, sondern so viel wie möglich in eine Skriptsprache stecken. Lua würde sich z.B. anbieten.
Falls du ausschließlich unter GNU/Linux arbeiten solltest, könnte dich das Projekt "4dventure" interessieren, das gerade in der Mache ist und einen Interpreter speziell für Lua-Textadventures darstellt. Unter Windows funktioniert das Programm aufgrund fehlender C++11-Compiler noch nicht.
-
Ich sehe da noch keinen Vorteil, Klassen anstatt Strings zu nutzen. Das läuft doch letztendlich auf darauf hinaus alle möglichen Kombinationen durchzutesten, oder nicht?
Templates sind nicht möglich, da ich die Nomen und Verben nicht direkt in den Code schreibe, sondern aus einer Datei auslese.
Lua kann ich nicht und zur Zeit habe ich auch keine Lust, es zu lernen

-
Wurstinator schrieb:
Ich sehe da noch keinen Vorteil, Klassen anstatt Strings zu nutzen. Das läuft doch letztendlich auf darauf hinaus alle möglichen Kombinationen durchzutesten, oder nicht?
Templates sind nicht möglich, da ich die Nomen und Verben nicht direkt in den Code schreibe, sondern aus einer Datei auslese.
Achso, in dem Fall ist es natürlich auch nicht möglich, Klassen für alle Nomen und Verben anzulegen, somit kannst du keinen Polymorphismus nutzen und dir bliebe zur Auswertung in C++ nicht viel mehr als die Kombinationen einzeln durchzugehen.
Dies ist jedoch eine unsaubere Methode, eher solltest du, wenn du auch schon Verben und Nomen auslagerst, für Content komplett auf Scripting umsteigen.
Wurstinator schrieb:
Lua kann ich nicht und zur Zeit habe ich auch keine Lust, es zu lernen

Lua ist simpelstes Skripting auf das Nötigste reduziert, da gibt es nichts zu lernen.

Ein paar Blicke in die Lua-Doc und -Referenz sollten genügen.
-
Ich hatte sowieso vor, mir Lua anzusehen, allerdings warte ich eben lieber, bis ich die Zeit und Lust habe, dies richtig zu tun, und nicht einfach nur ein paar Codestellen rauszusuchen, die ich gerade brauche.
Wie auch immer, dann muss ich es eben mit der plumpen Methode angehen. Bei einem Text-Adventure dürfte das ja nicht den Weltuntergang bedeuten
