Hallo zusammen,
als Übung würde ich gerne ein kleines Textadventure schreiben. Der Text könnte etwas länger werden
Das erste Ziel ist recht niedrig gesteckt, der Spieler soll sich in verschiedenen Szenen hin- und herbewegen können.
Damit es nicht zu banal wird, dachte ich mir, das als ECS (Entity Component System) zu realisieren. Die Vorlage ist diese: http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/ und die kurze Zusammenfassung lautet wie folgt:
Für das erste definierte Ziel führt das ungefähr zu folgenden Komponenten:
Tabelle Entities (sind nur ID's):
1 (Scene)
2 (Scene)
3 (Scene)
4 (Exit)
5 (Exit)
6 (Exit)
7 (Exit)
Tabelle Komponenten (Entity, Daten)
1, Flur, Du stehst im Flur
2, Wohnzimmer, Du stehst im Wohnzimmer
3, Balkon, Du bist auf dem Balkon
4, Tür, Eine Tür führt ins Wohnzimmer
4, Norden
4, 1
5, Tür, Eine Tür führt in den Flur
5, Süden
5, 2
6, Tür, Eine Tür führt zum Balkon
6, Norden
6, 2
7, Tür, Eine Tür führt ins Wohnzimmer
7, Süden
7, 3
Ein erster Einstieg sieht ungefähr so aus:
Was mir dabei nicht so gut gefällt ist folgendes:
Wenn der Parser zwischen Input und SceneSystem sitzt, kann er zwar auf Kommandos wie "gehe nach Norden" reagieren, aber ich würde gerne auch "gehe ins Wohnzimmer" sagen können. Das Wort "Wohnzimmer" ist aber kontextbezogen, d.h. hängt von der aktuellen Szene ab.
Eine Möglichkeit wäre es das Parsen der Benutzereingabe direkt im SceneSystem zu erledigen, da geht mir die Zuständigkeit allerdings etwas zu weit.
Oder das ParserSystem fordert sich Daten aus dem SceneSystem an, z.B. auch durch eine neue Komponente Keywords.
Oder der Input wird zuerst vom SceneSystem entgegen genommen, das die Aufgabe mit der Angabe einer Keywordliste an das ParserSystem delegiert.
Hat jemand noch eine andere Idee? Was haltet ihr grundsätzlich davon?
Mir geht es grundsätzlich darum, eine etwas komplexere Anwendung zu realisieren und Textadventures sind so schön retro. Außerdem schweben mir da noch einige Erweiterungen vor, die sich durch zusätzliche Systeme und Komponenten relativ einfach integrieren lassen sollten:
temi
als Übung würde ich gerne ein kleines Textadventure schreiben. Der Text könnte etwas länger werden
Das erste Ziel ist recht niedrig gesteckt, der Spieler soll sich in verschiedenen Szenen hin- und herbewegen können.
Damit es nicht zu banal wird, dachte ich mir, das als ECS (Entity Component System) zu realisieren. Die Vorlage ist diese: http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/ und die kurze Zusammenfassung lautet wie folgt:
- Ein Entity ist eine ID und sonst nichts
- Eine Komponente enthält Daten und sonst nichts.
- Einem Entity können eine oder mehrere Komponenten zugeordnet werden, um das Verhalten zu definieren.
- Die Spiellogik steckt in Systemen
Für das erste definierte Ziel führt das ungefähr zu folgenden Komponenten:
- Description enthält einen kurzen Bezeichner und einen Langtext.
- Direction enthält die Richtungsangabe für einen Ausgang.
- Scene (Description)
- Exit (Description, Direction)
- Parent enthält einen Verweis auf ein übergeordnetes Entity.
- Exit (Description, Direction, Parent)
Tabelle Entities (sind nur ID's):
1 (Scene)
2 (Scene)
3 (Scene)
4 (Exit)
5 (Exit)
6 (Exit)
7 (Exit)
Tabelle Komponenten (Entity, Daten)
1, Flur, Du stehst im Flur
2, Wohnzimmer, Du stehst im Wohnzimmer
3, Balkon, Du bist auf dem Balkon
4, Tür, Eine Tür führt ins Wohnzimmer
4, Norden
4, 1
5, Tür, Eine Tür führt in den Flur
5, Süden
5, 2
6, Tür, Eine Tür führt zum Balkon
6, Norden
6, 2
7, Tür, Eine Tür führt ins Wohnzimmer
7, Süden
7, 3
Ein erster Einstieg sieht ungefähr so aus:
- Ein InputHandler nimmt Spielereingaben von der Konsole entgegen und gibt einen rohen String weiter (PlayerInputEvent).
- Ein OutputHandler nimmt einen Ausgabetext entgegen und gibt ihn auf der Konsole aus (handle PlayerOutputEvent).
- Ein ParserSystem reagiert auf eine Spielereingabe vom InputHandler und ermittelt das eingegebene Kommando mit seinen Parametern => "gehe nach norden" (MoveEvent).
- Ein SceneSystem reagiert auf das entsprechende Kommando, prüft, ob ein entsprechender Ausgang in existiert und wechselt die Szene => PlayerOutputEvent.
Was mir dabei nicht so gut gefällt ist folgendes:
Wenn der Parser zwischen Input und SceneSystem sitzt, kann er zwar auf Kommandos wie "gehe nach Norden" reagieren, aber ich würde gerne auch "gehe ins Wohnzimmer" sagen können. Das Wort "Wohnzimmer" ist aber kontextbezogen, d.h. hängt von der aktuellen Szene ab.
Eine Möglichkeit wäre es das Parsen der Benutzereingabe direkt im SceneSystem zu erledigen, da geht mir die Zuständigkeit allerdings etwas zu weit.
Oder das ParserSystem fordert sich Daten aus dem SceneSystem an, z.B. auch durch eine neue Komponente Keywords.
Oder der Input wird zuerst vom SceneSystem entgegen genommen, das die Aufgabe mit der Angabe einer Keywordliste an das ParserSystem delegiert.
Hat jemand noch eine andere Idee? Was haltet ihr grundsätzlich davon?
Mir geht es grundsätzlich darum, eine etwas komplexere Anwendung zu realisieren und Textadventures sind so schön retro. Außerdem schweben mir da noch einige Erweiterungen vor, die sich durch zusätzliche Systeme und Komponenten relativ einfach integrieren lassen sollten:
- Gegenstände, Aufgaben, Kampf, Personen(KI, Chatbot)
- Multiplayer mit Ein- und Ausgabe über Telnet-Client
temi