Textadventure - "Handlungsverlauf" umsetzen - wie?



  • Guten Abend,

    ich programmiere momentan an einem Textadventure und stehe nun vor dem Problem wie ich die "Handlung" möglichst elegant programmieren kann.

    Also wenn z.B. der Spieler ein Schwert aufnimmt soll dieser mehrere Möglichkeiten haben was er damit tun möchte. Diese Auswahl resultiert dann wieder in anderen Möglichkeiten.

    Schwert aufnehmen -> Monster töten/Verkaufen -> Beute aufsammeln/Geld bekommen
    

    usw. mal stark vereinfacht dargestellt.

    Würde man das mit reinen if/else-Konstrukten machen wäre das schnell sehr unübersichtlich und nicht mehr wartbar.

    Ich dachte jetzt an eine Art "Baum-Struktur" woran ich das ganze modelliere bin mir da aber noch sehr unsicher ...

    Hat hier jmd. eine Idee bzw. gibt es da eine Art "best practice" die sich durchgesetzt hat?


  • Mod

    Wenn es wirklich elegant sein soll, dann würde ich Handlungsverlauf und Programmierung möglichst vollständig entkoppeln. Du schreibst eine allgemeine "Engine" für die Durchführung des Spiels, die Details des möglichen Spielsverlaufs werden ausgelagert in eine Art "Script", das dann von der Engine ausgeführt wird. Dabei geht die Entwicklung der Engine Hand in Hand mit dem Handlungsverlauf, denn die gewünschten Möglichkeiten des Handlungsverlaufs legen fest, was die Engine umsetzen können muss (Write games, not engines!).

    Dein einfaches Beispiel benötigt zum Beispiel nur eine einfache Funktion, die aus gegebenen Optionen eine Auswahl zulässt und Funktionen, um das Ergebnis anzuwenden. Eine Scriptdatei dazu könnte zum Beispiel so aussehen (stark vereinfacht, die Formatierung sollte robuster als hier sein):

    Dialog 1
    -Schwert aufnehmen -> Dialog 2
    -nichts tun -> Dialog 1
    
    Dialog 2
    -Monster töten -> Dialog 3
    -Schwert verkaufen -> erhöhe Geld um 1, Dialog 1
    
    Dialog 3
    -Beute aufnehmen -> erhöhe Geld um 2, Dialog 2
    -nichts tun -> Dialog 2
    

    Die Dialogengine würde diese Datei verarbeiten und dann entsprechend das Spiel leiten. Dieser Handlungsverlauf sollte nicht fest in das Programm eingebaut werden.

    Vermutlich ist das jetzt etwas zu hoch für dich, oder? Aber du hast nach der elegantesten Methode gefragt und dies ist die Antwort 🙂 .



  • Wenn ich das richtig verstanden habe muss ich also praktisch eine (sehr kleine) "Skriptsprache" entwickeln und dazu dann einen Parser der das ganze interpretieren kann und ausführt?

    Ich glaube das wäre momentan ein bisschen Overkill, aber trotzdem vielen Dank hat mir sehr weitergeholfen!



  • Du kannst auch einfach die Daten in passende Arrays und Strukturen stecken. Wichtig ist nur, daß du die Funktionen so schreibst, daß sie unabhängig von den konkreten Daten sind. So kannst du dann nachträglich einfach den Handlungsverlauf anpassen, in dem du die Daten veränderst - aber die Funktionen mußt du nicht ändern und sie funktionieren trotzdem noch.


Anmelden zum Antworten