Lernprojekte müssen Spaß machen und brauchen einen Namen. Die neueste Fingerübung ist AXAGE, eine ABAP teXt Adventure Game Engine. Mit diesem Framework soll es möglich sein, einfache Text-Adventures selbst zu schreiben. Die Game Engine selbst soll bzw. kann auch noch weiterentwickelt werden.
Ich wollte herausfinden, wie schwer es ist, einen einfachen Parser zu schreiben und typische Elemente eines Adventures zu verwalten. Aufgrund der grafischen Unzulänglichkeiten des SAP-Systems konnte leider nur ein Text Adventure daraus werden.
Befehle
Es ist zur Zeit möglich, mit den folgenden Befehlen zu interagieren:
N or NORTH Go to the room on the north side
E or EAST Go to the room on the east side
S or SOUTH Go to the room on the south side
W or WEST Go to the room on the west side
MAP show floor plan/ world
INV or INVENTARY Show everything you carry
LOOK Look what''s in the room
LOOK <object> Have a closer look at the object in the room or in your inventory
TAKE <object> Take object in the room
DROP <object> Drop an object that you carry
OPEN <object> Open something that is in the room
ASK <person> Ask a person to talk to you
Einige Befehle können einzeln angewendet werden (LOOK, INV, MAP sowie Richtungsangaben), andere Befehle müssen in Zwei-Wort-Sätzen gegeben werden:
- TAKE BOOK
- OPEN BOX
- LOOK CHEST
Avanti, Avanti! Beweg dich!
Im Coding sind die Räume definiert, die in dem Spiel existieren. Zu jedem Raum wird festgelegt, in welcher Richtung Durchgänge zu anderen Räumen sind und welche Gegenstände und Personen sich in dem Raum befinden.
Der Befehl MAP zeichnet eine statische Landkarte, mit der sich die spielende Person orientieren kann. Ich hätte gerne eine dynamische Karte erstellt, die sich aus der Definition der Räume ergibt, aber das ist leider nicht so ohne weiteres möglich, denn es ist nicht definiert, wie groß die einzelnen Räume sind.
Mit dem Befehl LOOK kann man sich umsehen und so Sachen entdecken, die man vielleicht näher untersuchen sollte…
Dinge
In dem Spiel sind Dinge vorhanden. Bisher kann man alle Dinge auch nehmen, einstecken und woanders wieder ablegen. Es soll aber in einer der nächsten Versionen auch möglich sein, dass Dinge nicht getragen werden können. Stattdessen können sie aber vielleicht bewegt, geschoben oder gekippt werden. Die Definition, welche Aktion mit einem Möbel-Ding möglich ist, sollte nicht so schwer sein. Schwieriger wird die Definition des Resultats, also was soll passieren, wenn die richtige Aktion auf das Ding angewendet wurde.
Interaktion
Dinge können bisher getragen (TAKE), weggeworfen (DROP) oder betrachtet werden (LOOK DING). Einige Dinge können auch geöffnet werden. Wenn ein Objekt geöffnet wird, können sich andere Dinge darin befinden.
Objekte, die man findet, werden automatisch genommen und ins Inventar gepackt (Befehl INV). So kann man immer sehen, welche Dinge man mit sich herum trägt. Das Adventure besteht dann darin, alle möglichen Objekte zu finden und sie richtig anzuwenden.
Akteure
Aktuell können Akteure (Personen, Monster, Gegner, usw) definiert werden. Sie können aber nur eine Antwort geben, wenn sie gefragt werden (Befehl ASK). Sie können also bereits Tipps geben. Sinnvoll wäre es jedoch, wenn man Akteuren auch etwas geben oder etwas von ihnen erhalten könnte.
Game Play – It’s your turn
Die Grundlagen für das Framework sind also einerseits geschaffen, so dass kleinere Adventures programmiert werden können. Andererseits kann die Game Engine noch um viele Dinge erweitert werden:
- Interaktion mit Akteuren
- Dinge geben
- Dinge erhalten
- Erweiterung des Parsers, so dass dieser auch Sätze mit mehr als zwei Wörtern versteht und eventuell sogar mehrere Kommandos aneinander gekettet werden können:
- TAKE BOX AND OPEN BOX AND THEN TAKE RING AND GIVE RING TO GANDALF
Des Weiteren sind auch technische Anpassungen möglich, an denen man sich versuchen kann:
- Erstellen einer SAPUI5-Anwendung
- Absicherung der Funktionen durch Unit Tests
Je mehr man sich im Detail damit beschäftigt, desto mehr Dinge fallen einem wahrscheinlich auf.
Aufgabe
An dieser Stelle gibt es keine klare Aufgabe. Du musst dir selbst aussuchen, womit du beginnen möchtest.
Coding
Das Coding liegt in Github. Du kannst es dir mit AbapGit in dein SAP-System herunterladen: