In der Informatik-AG des Schuljahres 2023/2024 hatten wir vor, ein RPG (Roleplaying-Game) zu schreiben – diesmal mit Python und PyGame, weil Godot etwas zu kompliziert für Anfänger ist.
Ein RPG (Role-Playing-Game) zu schreiben war ein Wunsch, der am Anfang des Schuljahres übrigens von den (meistenteils weiblichen) AG-Mitgliedern selbst kam. Allerdings ist es nicht gerade die einfachste Sache, ein Spiel dieser Klasse zu schreiben. Fertig wurden wir damit natürlich nicht, daher bleibt das Projekt aktiv. Ich habe mich im vergangenen Schuljahr in der Informatik-AG sehr bewusst zurückgehalten mit allzu konkreten Programmieranweisungen und wollte sehen, wie gut Schüler selbstständig arbeiten können, nachdem man ihnen die Grundlagen beigebracht hat. Tatsächlich haben die jungen AG-Mitglieder per „Trial and Error“ einiges gelernt und ich mit ihnen.
Teilweise fiel mir dabei auch auf, dass der Python-Interpreter etwas zu gutmütig mit abstrus komplizierten Codeblöcken umgeht (wie z. B. Import-Anweisungen, die in Unterroutinen stehen). Das ist einer der Gründe, warum der kommende Informatik-Kurs K1 dann doch lieber wieder mit der sehr strikten Programmiersprache JAVA arbeiten wird, was zu etwas mehr strikter Logik zwingt.
Dennoch ist Python für Einsteiger wie auch Fortgeschrittene sehr praktisch und man kann mit PyGame auch richtig große Games programmieren, wenn man über genug Strukturen und Planungsvermögen verfügt. Wir kamen immerhin mit Chartiles zu einem recht soliden Karteneditor nebst Ladefunktion und implementierten meist auch schon interaktive Sprites. Der Rest fehlte aber noch.
In den Sommerferien wendete ich mich dann zunächst wieder meiner alten Liebe Pascal zu, spendierte TinDat mittels Delphi 12.1 eine neue Windows-Version und mit Lazarus eine Linux-Version, außerdem bekam Tin Quizzy Classic zum 30jährigen Jubiläum eine Jubiläumsedition (die tatsächlich mit Turbo Pascal unter DOS bearbeitet wurde), diese lässt sich per Webassembly aber auch im Browser spielen:
https://www.niarts.de/doswasmx/
Webassembly-Versionen lassen sich mit PygBag aber auch mit Python/PyGame-Skripten erstellen – womit das Python-Spiel dann zum Browser-Spiel wird:
Damit bieten sich interessante Möglichkeiten, Python-Skripte für normale Nutzer zugänglich zu machen und die selbsterstellten Programme zu präsentieren.
Zuletzt entdeckte ich das wirklich sehr empfehlenswerte Tutorial „Creating a Zelda style game in Python [with some Dark Souls elements]“ von Clear Code – in seinem wirklich genialen Youtube-Video erklärt er in einer mehr als siebenstündigen Programmiersession, wie man in Python und PyGame von Grund auf ein kleines RPG programmiert.
Die Quelltexte dafür stellt er auf GitHub zur Verfügung:
https://github.com/clear-code-projects/Zelda
Die von Clear Code verwendeten Grafiken und Sounds stammen von Pixel-Boy und AAA und sind ebenfalls verfügbar:
https://pixel-boy.itch.io/ninja-adventure-asset-pack
Beide Pakete stehen unter Creative Commons Zero (CC0) License, dürfen also für eigene Projekte verwendet werden, was gerade für eine Verwendung im Unterricht sehr praktisch ist.
Das ursprüngliche Spiele-Demo „ZELDA“ ist schon sehr beeindruckend, es verfügt über ein komplettes Sprite-Handling und implementiert viele sehr intelligente Python-Techniken, auf die Python-Anfänger niemals kommen würden. Aber natürlich ist es noch lange nicht ganz fertig – das gerade lädt aber dazu ein, daran weiterzuarbeiten.
Tiny RPG – das künftige Spieleprojekte
Das brachte mich auf die Idee, warum man nicht alles kombinieren könnte, was folgende Roadmap für unser eigenes Tiny RPG ergibt:
- Chartiles 1.0 – Die aktuelle Vorversion 0.41 von Chartiles kann noch nicht soviel, aber man könnte sie problemlos so umbauen, dass sie – etwas intuitiver als das von Clear Code verwendete Karteneditor Tiled – Karten für das RPG erstellt, am besten gleich mit einer gewissen eingebauten Intelligenz, damit Fehler im Kartendesign gleich ausgebügelt werden. Dazu müsste man Ebenen hinzufügen und den Export auf CSV umstellen. Beides müsste mit moderatem Aufwand machbar sein. Etwas schwieriger wird die Programmlogik, um Kartenfehler zu vermeiden.
- Tiny RPG – basierend auf dem Code von Clear Code könnte man eine erweiterte RPG-Game-Klasse ableiten, die ein verbessertes eigenständiges Spiel ist:
- Intro-, Credits- und Einstellungsmodus müsste man noch hinzufügen (die AG-Version hatte sowas schon).
- Die Spielegrafik sollte natürlich etwas individueller werden (so praktisch die fertigen Sprites von Pixel-Boy auch sind). Sämtliche Grafiken selbst erstellen ist aber ein bisschen Fleißarbeit.
- Webversion: Das Spiel müsste auch mit Pygbag verwendbar sein, damit man eine Browserversion davon erstellen kann. Dazu muss man aber die Programmstruktur des Codes von Clear Code an die Vorgaben von Pygbag anpassen und dann gibt es noch ein paar speichertechnische Probleme zu lösen, die mit Async zusammenhängen, was Pygbag benötigt. Das könnte etwas schwieriger werden und etwas länger dauern – daher ist die Weboptimierung zuletzt dran.
Immerhin rückt das eigene kleine Niarts RPG langsam in greifbare Nähe und auch für die Informatik-AG-Mitglieder wird so ein eigenes RPG innerhalb eines Schuljahres sehr viel planbarer machbar. Wir wissen jetzt wo die Reise hingeht und auch genau, wie.