Hallo habr Ich präsentiere Ihnen die Übersetzung des Artikels Wie man ein 2D-Spiel mit Python und der Arcade-Bibliothek von Paul Vincent Craven erstellt
So erstellen Sie ein 2D-Spiel mit Python und einer Arcade-Bibliothek
Erfahren Sie, wie Sie mit Arcade, einer benutzerfreundlichen Python-Bibliothek zum Erstellen von 2D-Videospielen, beginnen.

Phython ist eine großartige Sprache für Leute, die Programmieren lernen, und sie ist perfekt für diejenigen, die "etwas tun" wollen und nicht viel Zeit mit Code auf dem Kessel verbringen möchten. Arcade ist eine Python-Bibliothek zum Erstellen von 2D-Videospielen, die einfach zu verwenden und sehr effektiv ist, wenn Sie Erfahrung sammeln. In diesem Artikel werde ich erklären, wie Sie Python und Arcade zum Programmieren von Videospielen verwenden.
Ich habe mit der Entwicklung von Arcade begonnen, nachdem ich Studenten mit der PyGame- Bibliothek unterrichtet hatte. Ich habe fast 10 Jahre lang persönlich mit PyGame unterrichtet und ProgramArcadeGames .com entwickelt, um online zu unterrichten. PyGame ist großartig, aber am Ende hatte ich das Gefühl, Zeit zu verschwenden, um Fehler zu beheben, die nie behoben wurden .
Ich war besorgt, Dinge wie die Event- Schleife zu lehren, die nicht mehr so ist, wie wir sie programmieren. Ich hatte einen ganzen Abschnitt, in dem ich erklärte, warum die Y-Koordinaten gekippt wurden. Da PyGame selten aktualisiert wurde und auf der alten SDL 1-Bibliothek basiert und nicht auf einer moderneren wie OpenGL , hatte ich nicht viel Hoffnung für die Zukunft.
Ich wollte eine Bibliothek erstellen, die benutzerfreundlicher und leistungsfähiger ist und einige der neuen Python 3-Funktionen verwendet, z. B. Dekoratoren und Tippfehler. Dies ist eine Spielhalle. Und so fangen Sie an.
Installation
Arcade ist wie viele andere Pakete über PyPi verfügbar. Dies bedeutet, dass Sie Arcade mit dem Befehl pip (oder dem Befehl pipenv) installieren können. Wenn Sie Python bereits installiert haben, können Sie wahrscheinlich einfach eine Eingabeaufforderung unter Windows öffnen und Folgendes eingeben:
pip install arcade
Oder unter MacOS und Linux:
pip3 install arcade
Ausführlichere Installationsanweisungen finden Sie in der Arcade-Installationsdokumentation .
Einfaches Zeichnen
Sie können das Fenster öffnen und einfache Zeichnungen mit nur wenigen Codezeilen erstellen. Lassen Sie uns ein Beispiel erstellen, in dem ein Smiley gezeichnet wird (siehe Abbildung unten):

Der folgende Algorithmus zeigt, wie Sie dazu Arcade-Zeichenbefehle verwenden können . Beachten Sie, dass Sie nicht wissen müssen, wie man Klassen verwendet oder Funktionen definiert. Das Programmieren mit schnellem visuellem Feedback ist ideal für diejenigen, die das Programmieren erlernen möchten.
import arcade
Funktion verwenden
Natürlich ist das Schreiben von Code in einem globalen Kontext keine gute Form. Glücklicherweise ist es einfach, Ihr Programm mit Funktionen zu verbessern. Hier sehen wir ein Beispiel für das Zeichnen von Kiefern an einer bestimmten (x, y) Stelle mit der Funktion:
def draw_pine_tree(x, y) : """ This function draws a pine tree at the specified location. """
Ein vollständiges Beispiel finden Sie unter Zeichnen mit Funktionen .

Ein erfahrener Programmierer weiß, dass moderne Grafikprogramme zuerst Grafikinformationen auf die Grafikkarte hochladen und dann die Grafikkarte auffordern, diese später als Paket zu zeichnen. Arcade unterstützt dies ebenfalls. Das individuelle Zeichnen von 10.000 Rechtecken dauert ca. 800 Sekunden. Das Zeichnen als Paket dauert weniger als 0,001 Sekunden.
Fensterklasse
Größere Programme erben normalerweise von der Window- Klasse oder verwenden Dekoratoren . Auf diese Weise kann der Programmierer Code schreiben, um Benutzereingaben zu zeichnen, zu aktualisieren und zu verarbeiten. Die Vorlage zum Starten des Fensterprogramms ist unten dargestellt.
import arcade SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 class MyGame( arcade.Window): """ Main application class. """ def __init__(self, width, height) : super( ) .__init__(width, height) arcade.set_background_color( arcade.color.AMAZON) def setup( self) :
Die Window-Klasse verfügt über mehrere Methoden, die Ihre Programme überschreiben können, um Programmfunktionen bereitzustellen. Hier sind einige der am häufigsten verwendeten:
on_draw: Hier finden Sie den gesamten Code zum Zeichnen eines Bildschirms.
Update: Der gesamte Code zum Bewegen Ihrer Objekte und Ausführen der Spielelogik ist hier. Dies wird ungefähr 60 Mal pro Sekunde aufgerufen.
on_key_press: Behandelt Ereignisse, wenn eine Taste gedrückt wird. Geben Sie beispielsweise die Geschwindigkeit des Players an.
on_key_release: Wird ausgeführt, wenn die Taste losgelassen wird. Hier können Sie die Bewegung des Players stoppen.
on_mouse_motion: Wird bei jeder Mausbewegung aufgerufen.
on_mouse_press: Wird aufgerufen, wenn die Maustaste gedrückt wird.
set_viewport: Diese Funktion wird in Rollenspielen verwendet, wenn Ihre Welt viel größer ist als das, was Sie auf einem Bildschirm sehen können. Mit dem Aufruf von set_viewport kann der Programmierer festlegen, welcher Teil dieser Welt derzeit sichtbar ist.
Sprites
Sprites sind eine einfache Möglichkeit, ein zweidimensionales Rasterobjekt in Arcade zu erstellen. Arcade verfügt über Methoden, die das Zeichnen, Verschieben und Animieren von Sprites vereinfachen. Sie können auch problemlos Sprites verwenden, um Kollisionen zwischen Objekten zu erkennen.
Sprite-Erstellung
Das Erstellen einer Instanz der Sprite Arcade-Klasse aus Grafiken ist einfach. Ein Programmierer benötigt nur einen Bilddateinamen, auf dem das Sprite basiert, und optional eine Zahl, um das Bild zu vergrößern oder zu verkleinern. Zum Beispiel:
SPRITE_SCALING_COIN = 0,2 coin = arcade.Sprite("coin_01.png", SPRITE_SCALING_COIN)
Dieser Code erstellt ein Sprite mit dem in coin_01.png gespeicherten Bild. Das Bild wird auf 20% seiner ursprünglichen Höhe und Breite verkleinert.

Sprite-Listen
Sprites sind normalerweise in Listen organisiert. Diese Listen erleichtern die Verwaltung von Sprites. Die Sprites in der Liste verwenden OpenGL, um Sprites als Gruppe im Stapel zu zeichnen. Der folgende Code richtet ein Spiel mit einem Spieler und einem Haufen Münzen ein, die der Spieler sammelt. Wir verwenden zwei Listen, eine für den Spieler und eine für die Münzen.
def setup(self): """ Set up the game and initialize the variables. """
Wir können alle Münzen in den Münzenlisten leicht zeichnen:
def on_draw(self): """ Draw everything """ arcade.start_render() self.coin_list.draw() self.player_list.draw()
Sprite-Kollisionserkennung
Sprite-Kollisionserkennung
Mit der Funktion check_for_collision_with_list können wir feststellen, ob ein Sprite auf ein anderes Sprite in der Liste trifft. Hiermit können wir alle Münzen anzeigen, mit denen das Sprite des Spielers in Kontakt steht. Mit einer einfachen for-Schleife können wir die Münze aus dem Spiel entfernen und unsere Punktzahl erhöhen.
def update(self, delta_time):
Ein vollständiges Beispiel finden Sie unter collect_coins.py .
Spielphysik
Viele Spiele beinhalten eine Art Physik. Die einfachsten sind Top-Down-Programme, die den Spieler daran hindern, durch Wände zu gehen. Platformers erhöhen die Komplexität der Schwerkraft und der sich bewegenden Plattformen. Einige Spiele verwenden eine vollwertige 2D-Physik-Engine mit Masse, Reibung, Federn und vielem mehr.
Top-down-Spiele

Für einfache Top-Down-Spiele benötigt das Arcade-Programm eine Liste von Wänden, durch die der Spieler (oder irgendetwas anderes) nicht passieren kann. Normalerweise nenne ich es wall_list. Anschließend wird die Physik-Engine im Installationscode der Window-Klasse erstellt, indem Folgendes verwendet wird:
self.physics_engine = arcade.PhysicsEngineSimple(self.player_sprite, self.wall_list)
Player_sprite empfängt einen Bewegungsvektor mit zwei Attributen: change_x und change_y. Ein einfaches Beispiel hierfür ist das Bewegen eines Players über die Tastatur. Dies könnte beispielsweise in einem benutzerdefinierten untergeordneten Element der Window-Klasse sein:
MOVEMENT_SPEED = 5 def on_key_press(self, key, modifiers) : """Called whenever a key is pressed. """ if key = = arcade.key.UP: self.player_sprite.change_y = MOVEMENT_SPEED elif key = = arcade.key.DOWN: self.player_sprite.change_y = -MOVEMENT_SPEED elif key = = arcade.key.LEFT: self.player_sprite.change_x = -MOVEMENT_SPEED elif key = = arcade.key.RIGHT: self.player_sprite.change_x = MOVEMENT_SPEED def on_key_release(self, key, modifiers) : """Called when the user releases a key. """ if key = = arcade.key.UP or key = = arcade.key.DOWN: self.player_sprite.change_y = 0 elif key = = arcade.key.LEFT or key = = arcade.key.RIGHT: selfplayer_sprite.change_x = 0
Dieser Code legt zwar die Geschwindigkeit des Players fest, bewegt den Player jedoch nicht. Bei der Methode zum Aktualisieren der Window-Klasse bewegt sich der Player beim Aufrufen von Physics_engine.update (), jedoch nicht durch die Wände.
def update(self, delta_time): """ Movement and game logic """ self.physics_engine.update()
Ein vollständiges Beispiel finden Sie unter sprite_move_walls.py .

Der Wechsel zu einem Plattformspiel mit Seitenansicht ist ganz einfach. Der Programmierer muss lediglich die Physik-Engine auf PhysicsEnginePlatformer umstellen und die Gravitationskonstante hinzufügen.
self.physics_engine = arcade.PhysicsEnginePlatformer(self.player_sprite, self.wall_list, gravity_constant= GRAVITY)
Sie können ein Programm wie Tiled verwenden , um die Kacheln / Blöcke zu legen, aus denen Ihr Level besteht.
Ein Beispiel finden Sie unter sprite_tiled_map.py .
Für eine vollständige 2D-Physik können Sie die PyMunk-Bibliothek integrieren.
Lernen Sie aus einem Beispiel
Eine der besten Möglichkeiten zum Lernen ist ein Beispiel. Die Arcade-Bibliothek enthält eine lange Liste von Beispielen für Programme , mit denen Benutzer Spiele erstellen können. Jedes dieser Beispiele zeigt das Konzept eines Spiels, nach dem die Schüler im Laufe der Jahre in meinem Unterricht oder im Internet gefragt haben.
Das Ausführen dieser Demos ist nach der Installation von Arcade ganz einfach. Jedes der Beispiele enthält am Anfang des Programms einen Kommentar mit einem Befehl, den Sie in die Befehlszeile eingeben können, um das Beispiel auszuführen. Beispiel:
python -m arcade.examples.sprite_moving_platforms
Kurzinformation
Mit Arcade können Sie Grafiken und Spiele mit leicht verständlichem Code programmieren. Viele neue Programmierer haben kurz nach dem Start großartige Spiele entwickelt. Probieren Sie es aus!