Tutorial „Text-Browsergames mit AJAX und PHP“

Copyright

Tutorial "Text-Browsergames mit AJAX und PHP" (C) 2012-2020  Stephan Kreutzer

Tutorial "Text-Browsergames mit AJAX und PHP" is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License version 3 or any later version,
as published by the Free Software Foundation.

Tutorial "Text-Browsergames mit AJAX und PHP" is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License 3 for more details.

You should have received a copy of the GNU Affero General Public License 3
along with Tutorial "Text-Browsergames mit AJAX und PHP". If not, see <http://www.gnu.org/licenses/>.

The complete source code is available at <https://gitlab.com/homebrew-browsergames/technologietutorials>.
          

Einführung

Rein textbasierte Browsergames lassen sich naturgemäß sehr leicht umsetzen, da das Web von Haus aus als Dokumenten-System konzipiert ist. Wie beispielsweise im Tutorial „Text-Browsergames mit PHP“ demonstriert, können dafür die Standard-Bedienelemente für Web-Formulare verwendet werden. Diese Technik allein genügt jedoch nicht, um das typische Spielgefühl von Textadventures zu erzeugen, da ein Medienbruch zwischen dem Lesen und der Eingabe hingenommen werden muss. Daher wird der Formular-Übermittlungsmechanismus durch asynchronen Nachrichten-Austausch ersetzt, was eine traditionelle Terminal-Interaktion nachbildet. Dementsprechend erfolgt die Steuerung nicht mehr länger mittels einer Art Multiple-Choice, sondern durch die Formulierung von Anweisungen. Der Spieler muss nun erstens gültige und zweitens die jeweils passenden Befehle finden, um das Spielgeschehen in seinem Sinne voranzutreiben.

Da bei diesem Ansatz AJAX zum Einsatz kommt, ergibt sich die Notwendigkeit der Client-Programmierung, die allerdings ob der primitiven Spiel-Oberfläche relativ einfach mit wenig zusätzlichem JavaScript über das reine AJAX hinaus realisiert werden kann, da sich das Spiel auf Darstellung und Entgegennahme von Text beschränkt. Serverseitig müssen die Eingaben geparst (d.h. zerlegt und interpretiert) werden, um daraufhin Datenbank-Manipulationen und die Generierung der Ausgabe auszulösen. Zu diesem Zweck sind programmatische Hilfsmittel (Libraries) erforderlich, um dem Entwickler Verwaltungsaufgaben abzunehmen und die Erstellung der eigentlichen Spielinhalte zu erleichtern. Ein Vorteil der Technologie liegt in dem modularen Aufbau der Spiel-Engine begründet, was sich insbesondere in der strikten Trennung zwischen Libraries und der Spiel-Szenen zeigt, sodass das Spiel jederzeit veränderbar ist, in den meisten Fällen sogar im Live-Betrieb (solange die Daten durch eine Anpassung nicht in einen inkonsistenten Zustand geraten). Der Entwickler erhält damit die Möglichkeit, Variationen und Erweiterungen ohne großen Aufwand einpflegen zu können.

Spielkonzept

Konzeptseitig müssen Entscheidungen zum Story-Telling und zur allgemeinen Stimmigkeit getroffen werden. Entscheidungsbäume müssen entworfen und ein Vokabular definiert werden. Der Befehlssatz kann sehr grob ausfallen oder eine umfassende linguistische Satzanalyse vornehmen. Im Beispiel-Projekt wird allerdings nur ein primitiver Befehlswortschatz gebraucht:

HILFE wird genau diese obige Befehlsliste anzeigen. GEHE dient offensichtlich der räumlichen Navigation zwischen verschiedenen „Szenen“, auf denen die Befehle ausgeführt werden können. Je nach Szene soll ein- und derselbe Befehl zu unterschiedlichen Resultaten führen, womit quasi die Szene den Kontext für den Befehl liefert und folglich auch seine konkrete Bedeutung implementieren muss. INVENTAR zeigt eine Liste der Gegenstände im Inventar, wohinein mit NEHME Gegenstände aufgenommen werden können, während BENUTZE für einen Gegenstand (dessen Verfügbarkeit im Inventar möglichst nachgeprüft werden sollte) eine Interaktion auf der Szene auslöst, sofern dies vorgesehen ist. Somit besteht der eigentliche Spielablauf komplett aus Inventar-Aktivitäten, da BEENDEN und HILFE nicht zum Spielgeschehen beitragen und GEHE meistens keinen anderen Zweck erfüllt, als den Kontext für die Inventar-Aktion zu versetzen. Die Befehle müssen unter anderem derart eingerichtet werden, dass ein „globales Standardverhalten“ bereitgestellt wird, wenn eine Szene keine spezielle Implementierung für einen Befehl bietet. Dieser simple Befehlssatz wird in einem Zukunfts-Weltraum-Setting zum Einsatz kommen. Die Spielwelt ist schnell umrissen:

Fortsetzung folgt…