Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.09.2016, 14:50

Einfaches Text-Adventure in PHP

Hallo,

ich habe schon etwas Programmiererfahrung mit PHP, habe aber noch nie ein Spiel programmiert, das reizt mich :-)

Ich würde gern ein einfaches Text-Adventure für die Konsole erstellen. Wie könnte eine solche Game-Engine dafür aussehen?

Vielleicht mal kurz, was ich mir so vorstelle zu erreichen:
- Einfache Textausgabe die beschreibt wo man sich gerade befindet (Raum), was man sieht (Gegenstände) und in welche Richtungen man sich ungehindert weiterbegeben kann.
- Einzeilige Kommandoeingabe einfacher Befehle/Sätze (z.B. "gehe nach links", "öffne tür", "nimm kabel")
- Räume die miteinander verbunden sind und in die man mittels Richtungsanweisungen gelangen kann. Als Richtungsanweisungen stelle ich mir "vorn, hinten, links, rechts, oben und unten" vor. Pro Richtung soll aber bestimmt werden können ob der Raum nun betreten werden kann, überhaupt gesehen wird, oder was vorher dazu notwendig ist (z.B. eine Tür öffnen). In Räumen sollen auch Gegenstände platzierbar sein. Grundsätzlich soll das nicht begrenzt sein, also man kann dort auch eigene Gegenstände ablegen.
- Aufnehmen, benutzen und ablegen von Gegenständen

Wie könnte ich sowas anfangen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

10.09.2016, 15:12

Hallo!

PHP ist dafür wohl eher nicht so gut geeignet, es ist ja für Website-Programmierung gedacht. Ich würde dir z. B. C# oder Python empfehlen. Aber wenn es unbedingt PHP sein muss, geht das natürlich auch.

Zuerst einmal benötigst du eine interne Repräsentation des Spielzustands. Datenstrukturen für Räume, Gegenstände etc. Dann musst du Eingaben des Spielers parsen, am besten auch ein bisschen fehlertolerant, und die vom Spieler geforderten Aktionen ausführen (wenn es möglich ist). Schließlich brauchst du einen Weg, wie du den Spielzustand und die Antworten auf Aktionen in textueller Form ausgeben kannst.

Eine Google-Suche nach "How to program a text adventure game" liefert dir viele Tutorials/Artikel zum Thema.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

10.09.2016, 15:23

Es gibt viele Möglichkeiten, sowas anzufangen. Grundsätzlich könntest du entweder von vornherein "alles" planen (also die Implementierung so gestalten, dass es später einfach wird, alle Features zu implemnentieren), du könntest aber auch schrittweise vorgehen. Letzteres wird sehr wahrscheinlich dazu führen, dass du mehrmals bestehenden Code wieder anpassen musst, vor allem, wenn du noch nicht besonders viel Erfahrung hast, so dürftest du aber etwas schneller die ersten Ergebnisse sehen.

Bei einem schrittweisen vorgehen könntest du die folgenden Schritte in Angriff nehmen:
Das Navigieren zwischen Räumen (ein Raum beinhaltet dabei Informationen darüber, wie er "heißt" und über welche Wege man zu welchen anderen Räumen gelangt, für den Anfang sollte dies Hardcoded sein), welches im nächsten Schritt aus Dateien gelesen werden könnte. (Alle weiteren Implementationen könnten dann direkt mit Speicherung in und Laden aus den Dateien arbeiten.) Dialoge könnten eingebaut werden, die am Anfang erstmal statisch eingebunden sind. Daraufhin würden NPCs Sinn machen, die man ansprechen kann (-> Dialoge). Darauf könnte das Inventar und Gegenstände folgen, die man ins Inventar bekommen könnte. Als nächstes könnten die NPCs und deren Dialoge an Bedingungen geknüpft sein, bspw. dass ein bestimmter Gegenstand im Inventar ist. Weiterhin wird es notwendig sein, den Fortschritt zu Tracken, so dass die Dialoge nicht nurdavon abhängen, ob man einen Gegenstand hat, sondern auch davon, ob man den NPCs diesen bereits gegeben hat, ob andere Interaktionen bereits durchgeführt wurden etc.

Ich hoffe, dass es einen guten Einblick in eine mögliche Vorgehensweise gegeben hat. Um nochmal den Unterschied zwischen den beiden Ansätzen zu verdeutlichen: bei dem einen würde man bereits bedenken, dass das Levelformat auf jeden Fall noch angepasst wird oder erweiterbar sein muss, dass es später ggf. Scripting gibt und andere Dinge, die beim Betrachten der ersten paar Features sich vielleicht nicht erkenntlich machen. Bei der zweiten Variante würde man auf bestimmte Probleme eingehen, sobald diese auftreten.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

4

13.09.2016, 08:45

PHP ist deshalb ungeeignet, da die Seite nach jeder Aktion neu geladen wird (die Eingaben des Benutzers müssen erst vom Backend verarbeitet werden und werden dann als Response an den Client gesendet mit der bitte, die komplette Seite für ungültig zu erklären und diese neu zu zeichnen.

Du könntest das natürlich trotzdem mit PHP in Kombination mit AJAX machen. AJAX (Asynchronous Javascript and XML) ist eine von Javascript ermöglichte Art der Kommunikation von Frontend zu Backend, mit der du Javascript mit deinem PHP "verbinden" könntest. Du könntest hierbei mit Javascript auf Benutzereingaben warten und zur Verarbeitung an den Backend senden. Der bearbeitet das ganze und gibt ne Response an den Javascript-Client. So weit vom Prinzip her.

Ne andere Möglichkeit wäre noch das Websocket-Protokoll, gibt es auch für PHP und/oder andere Sprachen.

Für die Oberfläche kannste ja dann auch im Frontend HTML in Kombi mit PHP (für den Frontend-Backend) nehmen.

Ich würde aber bei dir sagen, dass du am besten den die beiden PHP-Teile getrennt halten tust(blöde Rechtschreibkontrolle). Einen für die Erstellung des Frontends und den anderen Teil eben zur Kommunikation mit dem Javascript-Frontend.

Kannst dich ja nochmal melden, wenn du mehr Infos brauchst ;)

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

5

13.09.2016, 09:29

Mit Phalanger zum Beispiel kann man aber auch eine Konsolenanwendung in PHP entwickeln, ist da also keinesfalls auf reines Web festgelegt. PHP hat sich längst von der reinen "Serverseitig-HTML-Seiten-generier-Sprache" zur vollständigen Skriptsprache gemausert. Wenn du ein Textadventure machen möchtest, und dir eine Konsole reicht, kannst du dir Phalanger ja mal ansehen.

Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

6

13.09.2016, 09:33

kostet das nicht Geld? (ich habe in Erinnerung, dass du da mal was gesagt hattest)

und als "Beginner" in Bezahl-Software zu investieren, hmmmm seh ich eigentlich etwas kritisch (wo es doch so viel Freeware gibt...)

Tobiking

1x Rätselkönig

  • Private Nachricht senden

7

13.09.2016, 09:59

Der PHP Interpreter lässt sich auch ganz normal von der Kommandozeile verwenden, so wie es z.B. bei Python der Fall ist. Da braucht man keine extra Tools.

Goldwing Studios

Treue Seele

Beiträge: 359

Wohnort: Heidelberg

Beruf: Softwareentwickler, Vertriebler

  • Private Nachricht senden

8

13.09.2016, 10:15

aber warum dann nicht direkt eine andere Sprache?

Python soll auch ganz lustig sein, VB und C# sind auch nicht mehr so "Hügelig" wie sie es früher mal waren.

PHP finde ich für Web ganz cool, aber es einfach andere Sprachen und dazugehörige IDE's die das besser können.

LInsoDeTeh

Treue Seele

Beiträge: 372

Wohnort: Essen, Deutschland

Beruf: Team Lead Inhouse-Entwicklung

  • Private Nachricht senden

9

13.09.2016, 10:40

kostet das nicht Geld?

Phalanger (also die Libraries und der PHP Compiler) selbst ist open-source, da gibt es kein Problem. Für das Visual Studio Plugin, wenn man das denn benutzen möchte, gibt es eine kostenlose Basisversion und eine kostenpflichtige Professional Version, die erweiterte Features wie Intellisense, Step-Into usw. bereitstellt. Zu der gibt es auch eine Trialperiode, bevor man zurück auf die Basisversion fällt. Willst du das ganze kommerziell vertreiben, brauchst du natürlich die Professional (die aber mit ca $80 für single-developer und $130 für Firmen auch nicht übermäßig teuer ist), wenn hier aber einfach nur erstmal ein Adventure entwickelt werden soll aus Spaß an der Freude, kostet das nichts.

aber warum dann nicht direkt eine andere Sprache?

PHP wäre für das genannte Projekt sicher auch nicht meine erste Wahl. Aber da ja explizit danach gefragt wurde, kann man die Möglichkeiten ja ruhig nennen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

13.09.2016, 10:42

kostet das nicht Geld? (ich habe in Erinnerung, dass du da mal was gesagt hattest)

und als "Beginner" in Bezahl-Software zu investieren, hmmmm seh ich eigentlich etwas kritisch (wo es doch so viel Freeware gibt...)

Kann man an sich so sehen. Am Ende muss das aber natürlich der TE entscheiden.
Der PHP Interpreter lässt sich auch ganz normal von der Kommandozeile verwenden, so wie es z.B. bei Python der Fall ist. Da braucht man keine extra Tools.

aber warum dann nicht direkt eine andere Sprache?

Guck noch mal was Tokiking gesagt hat. PHP lässt sich wie Python direkt von der Kommandozeile aus bedienen. Warum dann eine andere Sprache? Der TE möchte ja gerne PHP nutzen. Wenn das der Fall ist, warum dann eine andere Sprache vorschlagen. Sprachkriege gibt es hier genug und an sich muss ja jeder selbst wissen womit er gern arbeiten würde.
VB und C# sind auch nicht mehr so "Hügelig" wie sie es früher mal waren.

Mal abgesehen dass ich VB einfach persönlich nicht mag was aber erst mal subjektiv ist. Warum sollen VB und C# hügelig gewesen sein? Es gibt viele Diskussionen, auch hier im Forum, über Dinge wie GC und andere Konzepte die vielen bei diesen Sprachen nicht zusagen. Andere sehen das wieder als Vorteil. Aber eben genau diese Konzepte sind ja immer noch Bestandteil der beiden. Mir ist also nicht ganz klar was du da jetzt als hügelig findest. Ich zum Beispiel mag C# doch recht gern auch wenn ich ewig nicht damit gearbeitet habe. Ich selbst habe erst mit C# 2 angefangen und da sind schon recht wichtige Konzepte eingeführt worden. Aber wenn ich C# 1 mit anderen Sprachen zu der Zeit vergleiche sehe ich nicht unbedingt große Nachteile oder dass es hügelig wäre. Falls die Erklärung zu dem Thema länger wird können wir das gern per PN besprechen. Das würde mich tatsächlich interessieren.

tl;dr Ja es gibt viele andere Sprachen die sich toll eignen. Solange der TE aber gern mit PHP arbeiten möchte sollte das kein Problem sein.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige