Pygbag – Pygame im Browser

Es ist ja allseits bekannt, dass die Python-Programmbibliothek Pygame die Möglichkeit bietet, plattformunabhängig Spiele zu entwickeln, egal ob für Windows, Linux oder Mac. Auch wenn je nach Plattform möglicherweise hier und da noch kleinere Anpassungen am Programmcode vorgenommen werden müssen, wird lediglich ein Python-Interpreter zum Programmstart benötigt.
Eine noch einfachere Methode, Python Spiele miteinander zu teilen, bietet das Modul Pygbag, welches uns erlaubt, Python Code direkt im Browser zu starten!

Installation

Das Paket Pygbag kann mit Hilfe des PIP-Paketmanagers unseres Vertrauens installiert werden:

pip install pygbag

Das war es dann auch schon mit den Vorbereitungen. Nun geht es weiter zu der Anpassung des Programmcodes.

Anpassung des Programmcodes

Im Code müssen einige kleine Änderungen durchgeführt werden …

import asyncio

async def game()
    ...
    ### Spieleloop
    ...
    await asyncio.sleep(0)


asyncio.run(game())

… der Import des Moduls asyncio, die Umbenennung der Spieleloop-Funktion, die Ergänzung der await Funktion (am Ende des Spieleloops) und der abschließende Aufruf über asyncio.run. Außerdem muss die Python-Datei in main.py umbenannt werden!
Um nun zu testen ob das Spiel weiterhin funktioniert (was es selbstverständlich tun sollte), kann es wie gewohnt aufgerufen werden. Ist der Test erfolgreich, geht es weiter mit dem nächsten Schritt.

Start im Browser

Nun kann das Spiel auch schon im Browser getestet werden. Hierfür rufen wir über die Kommandozeile das Pybag-Modul auf und geben unsere Python Datei main.py an:

pybag ./main.py

Alternativ lässt es sich auch über folgenden Befehl ausführen:

python -m pygbag ./main.py

Es sollte nun eine Testumgebung gestartet werden …
Bedenkt, dass sämtliche Dateien (Bilder-/Sounddateien etc.) in das Spiel übernommen werden, die sich derzeit im Ordner und den Unterordnern der main.py befinden. Um den bevorstehenden Spielstart zu beschleunigen empfiehlt es sich daher, nur die wirklich notwendigen Ressourcen übrig zu lassen.

Die darauf folgende Textausgabe informiert uns bereits über den Start der Webserver-Instanz und das diese über die Adresse …

… erreichbar ist. Sollte es beim anschließenden Aufruf der Seite zu Problemen kommen, kann testweise einfach ein anderer Browser herangezogen werden.
Ist alles gut gegangen, werden wir mit dem folgenden Hinweistext begrüßt:

Klicken wir auf die Taste, sollte das Spiel direkt starten.

Sollte der Bildschirm jedoch schwarz bleiben, kann das Spiel alternativ auch im Debug-Modus gestartet werden. Hierfür rufen wir die Adresse folgendermaßen auf:

Der Debug-Modus informiert uns ausgiebig über mögliche Fehler innerhalb unseres Codes, sodass wir dort nachträglich nochmal Hand anlegen können. Solltet ihr Anpassungen am Programmcode vorgenommen haben vergesst nicht, den Webserver einmal neu zu starten. Dies erledigen wir innerhalb der Kommandozeile mit einem Druck auf Strg + C und dem erneuten Aufruf von pygbag ./main.py.
Durch den Start des Spiels über das Pygbag-Modul, wurde der zusätzliche Unterordner build erstellt:

Innerhalb dieses Ordners ist der Unterordner web für uns interessant. Dieser beinhaltet nämlich das Spiel als APK-Datei und die index.html, die wir benötigen, um die APK-Datei auszuführen.
Möchten wir die Datei nun online stellen und in eine Seite einbinden, müssen wir nur noch die beiden Dateien auf dem jeweiligen Webserver bereitstellen. Befindet sich die APK-Datei des Spiels in einem anderen Ordner als die index.html-Datei, muss der Pfad zur korrekten Referenzierung manuell angepasst werden, damit das Spiel auch gefunden werden kann. Dies sollte irgendwo um Zeile 87 erfolgen.

Fazit

Python-Spiele im Browser lauffähig zu machen ist recht schnell und einfach erledigt, jedoch müssen dabei einige Dinge beachtet werden. Je nach Komplexität des Spiels kann es recht langsam im Browser laufen. Die Reduzierung der Auflösung schafft möglicherweise Abhilfe. Auch ist die Anwendung des asyncio-Moduls nicht ganz trivial und benötigt einige Anpassungen wenn es um die Ausführung mehrerer paralleler Programmschleifen geht. Ebenso ist die Nutzung der Python-Funktionen eingeschränkt, da nur eine handvoll von Modulen zur Verfügung stehen.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen