Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-23 12:52
In unseren vorherigen Artikeln haben wir uns mit der Spieleentwicklung auf GameGo beschäftigt, einer tragbaren Retro-Spielekonsole, die von TinkerGen Education entwickelt wurde. Die Spiele, die wir gemacht haben, erinnerten an alte Nintendo-Spiele. Im heutigen Artikel machen wir einen Schritt zurück in das goldene Zeitalter der Arcade-Spiele. Wir werden das Space Invaders-Spiel in Micropython auf dem Micro:bit-Mikrocontroller neu erstellen – und als Wendung werden wir auch die BitPlayer Micro:bit-Erweiterung verwenden, die es uns ermöglicht, das Spiel bequemer zu spielen.
Da es in diesem Tutorial darum geht, das Spiel in Micropython zu codieren, werden wir anstelle der traditionellen Schritt-für-Schritt-Sequenz, die wir zuvor für die grafischen Programmier-Tutorials verwendet haben, den Code Block für Block durchgehen - wichtige Funktionen, Klassen und die wichtigsten Funktionen Schleife. Sie können den vollständigen Code im GitHub-Repository dieses Projekts herunterladen. Anschnallen und los geht's!
Lieferungen
TinkerGen BitPlayer
BBC Micro:bit
Schritt 1: Hauptschleife
In diesem Tutorial werde ich das Wort "Methode" ziemlich oft verwenden. Eine Methode in Python ähnelt einer Funktion, außer dass sie Objekten/Klassen zugeordnet ist. Zur Vereinfachung können Sie es also als "eine Funktion innerhalb der Klasse" lesen. Hier können Sie mehr über Methoden lesen.
Wir betreten die Hauptschleife mit
während nicht game_over:
Zustand. Im Inneren erhalten wir die Anzahl der Eindringlinge, die Wahrscheinlichkeit ihres Erscheinens und die Anzahl, die benötigt wird, um aus dem Level-Wörterbuch zum nächsten Level zu gelangen. Als nächstes prüfen wir mit Listen_Dir-Instanzmethoden der Klasseninstanz JoyStick auf Links-Rechts-Bewegung. Wenn eine der Bedingungen als wahr ausgewertet wird, erhöhen/verringern wir den x-Wert unseres spielbaren Charakters. Wir beschränken es auf [-2, 2] mit zwei if-Bedingungen. Dann initialisieren wir eine Instanz der DisplayBuffer-Klasse und prüfen, ob die Schaltfläche "Schild" oder "Kugel feuern" gedrückt wurde. Wir verwenden die Methode DisplayBuffer.set(), um Objekte für das spätere Rendern zu setzen. Zum Rendern des Schildes verwenden wir DisplayBuffer.set() direkt, aber für Aufzählungszeichen und Eindringlinge fügen wir sie ihrer jeweiligen Liste hinzu und setzen sie nacheinander in einer for-Schleife mit dem folgenden Code zum späteren Rendern mit DispBuffer.render():
für b in Kugeln: b.render(dispBuf) für v in vaders: v.render(dispBuf)
Alle Eindringlinge, Kugeln und Schilde werden bei jeder Iteration der Hauptschleife mit angezeigt
dispBuf.render()
Vor dem Ende der Hauptschleife überprüfen wir, ob eine der Kugeln von Eindringlingen das Ende des Bildschirms erreicht hat, und wenn ja, löschen wir sie aus ihren jeweiligen Listen.
Schritt 2: Joystick
BitPlayer ist einfach zu halten und zu verwenden, mit einem 2-Achsen-Joystick wie Gameboy- oder PSP-Controllern, und enthält weitere 6 programmierbare Tasten mit den Bezeichnungen L, R, A, B, C und D. Für ein immersives und interaktives Erlebnis bietet der BitPlayer selbst verfügt über einen Summer, einen Vibrationsmotor und einen Grove I2C-Port, um zusätzliche Peripherie wie ein OLED-Display anzuschließen.
Wir verwenden für dieses Spiel nur die Links-Rechts-Wippe des Joysticks, ein vollständiges Beispiel zur Verwendung aller BitPlayer-Schaltflächen können Sie unter joystick_example.py im GitHub-Repository dieses Projekts nachsehen. Beim Erstellen der Instanz der JoyStick-Klasse überprüfen wir den Standardwert der X-Achse und speichern diesen Wert in self. Read_X. Dann prüfen wir in der Funktion Listen_Dir, ob die Abweichung von diesem Standardwert höher ist als die Empfindlichkeitsvariable (versuchen Sie es selbst zu optimieren, wenn Sie der Meinung sind, dass JoyStick zu empfindlich ist) und geben entsprechend der erkannten Richtung True oder False zurück.
Schauen wir uns ein konkretes Beispiel an, wie das funktioniert:
Nehmen wir an, unser Standardwert für die X-Achse ist 0. Wenn wir dann den Joystick nach rechts bewegen:
New_X = JoyStick_X.read_analog() #New_X=200
Rechts = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200
Wenn wir dann nach der Richtung suchen:
Precision = 150if Right > Precision: #200 > 150 True Get_Rocker = DIR['R'] elif Left > Precision: #-200 > 150 False Get_Rocker = DIR['L'] else: Get_Rocker = DIR['NONE'] if Dir == Get_Rocker: True zurückgeben sonst: False zurückgeben
Schritt 3: Puffer anzeigen
Die DisplayBuf-Klasse ist für die Steuerung des LED-Bildschirms verantwortlich. Dies geschieht mit zwei Methoden, set() und render(). set()-Methode ändert die Werte, die den Pixeln des LED-Bildschirms entsprechen. Sie erinnern sich vielleicht, dass Pixel auf dem Micro:bit LED-Bildschirm als String oder als Liste ausgedrückt werden können - "00000:00000:00000:00000:00000" ist ein leerer Bildschirm. "00000:00000:00000:00000:00100" ist ein Bildschirm mit schwach beleuchteten Pixeln in der Mitte der unteren Reihe.
00000:
00000
:00000
:00000:
00100"
Diese Notation ist möglicherweise einfacher zu verarbeiten:)
Während der Hauptschleife rufen wir also die Methode set() von DisplayBuf auf, um alle unsere Objekte festzulegen, die auf dem Bildschirm angezeigt werden müssen. Dann verwenden wir die Methode render(), um sie alle gleichzeitig auf dem Bildschirm anzuzeigen.
Schritt 4: Eindringlinge, Kugeln und der Spieler
Kugeln und Eindringlinge gehören zur Mover-Klasse. Instanzen der Mover-Klasse haben ihre x-, y-Positionen und Geschwindigkeit sowie Helligkeit. Die Mover-Klasse hat zwei Instanzmethoden, set() und move(). Die set()-Methode ruft einfach die DisplayBuf-set()-Methode mit aktualisierten Koordinaten auf, um sie für das spätere Rendern auf der LED-Matrix zu speichern. Die Methode move() aktualisiert die Instanzkoordinaten entsprechend der Instanzgeschwindigkeit - das ist später nützlich, wenn wir die Geschwindigkeit von Eindringlingen mit fortschreitendem Level ändern müssen.
Class Bullet und Class Invader sind Unterklassen der Mover-Klasse. Hier verwenden wir etwas namens Vererbung. Die Funktionalität von super() ermöglicht es uns, Methoden der Oberklasse in der Unterklasse aufzurufen, ohne den Code wiederholen zu müssen.
Schritt 5: Machen Sie es sich zu eigen
Herzliche Glückwünsche! Sie haben gerade das klassische Space Invaders-Spiel auf Micro:bit mit cooler Gaming-Hardware neu erstellt. Natürlich können Sie den Spielcode von hier aus verbessern - zum Beispiel hat das Spiel derzeit nur ein Level - Sie können anspruchsvollere hinzufügen. Wie Sie sich vielleicht erinnern, hat das Originalspiel auch Steine, die vor dem Spieler schweben, die Sie ebenfalls hinzufügen können.
Wenn Sie eine verbesserte Version des Spiels erstellen, teilen Sie sie in den Kommentaren unten mit! Weitere Informationen zu BitPlayer und anderer Hardware für Hersteller und MINT-Lehrer finden Sie auf unserer Website https://tinkergen.com/ und abonnieren Sie unseren Newsletter.
TinkerGen hat kürzlich eine Kickstarter-Kampagne für MARK (Make A Robot Kit) erstellt, ein Roboter-Kit zum Unterrichten von Codierung, Robotik und KI!
Der ursprüngliche Micropython-Code von hexkcd/micro-vaders wurde geändert, um mit TinkerGen BitPlayer zu funktionieren.
Empfohlen:
Aktualisieren Sie das Zen Micro 5 GB auf 8 GB günstig – wikiHow
Rüsten Sie das Zen Micro 5 GB auf 8 GB auf dem Billig: Guten Tag! Ich bin heute hier, um Ihnen zu zeigen, wie ich mein Zen Micro auseinandergenommen, die 5 GB-Festplatte darin durch eine 8 GB-CF-Karte ersetzt, das Gerät wieder zusammengebaut und gelebt habe erzählen Sie davon. Warum sollten Sie das tun? Zwei Gründe: 1. Solid-State-Speicher bedeutet
So laden Sie MicroPython-Code auf XBee 3 herunter: 18 Schritte (mit Bildern)
So laden Sie MicroPython-Code auf XBee 3 herunter: MicroPython ist eine von Python 3.0 inspirierte Programmiersprache, die auf Mikrocontrollern wie dem XBee 3 funktioniert . Ich fou jedoch
So kopieren Sie Spielstände auf einfache Weise auf eine Microsoft- oder Drittanbieter-MU.: 9 Schritte
So kopieren Sie Spielstände einfach auf eine Microsoft- oder Drittanbieter-MU.: Original-Tutorial HIER CD, die es einfach macht, genau das zu tun. Dies ist kein vollständiges Softmod-Tutorial, dies
Wie zeichne ich einen Computerbildschirm auf einem Mac auf?: 7 Schritte
Wie zeichne ich den Computerbildschirm auf dem Mac auf?: Wie zeichne ich den Bildschirm auf dem Mac auf? Wollten Sie schon immer etwas aufzeichnen, was auf Ihrem Computer oder Telefon passiert? Vielleicht sehen Sie sich ein Video an und möchten einen Clip aufnehmen; Vielleicht versuchst du jemandem zu zeigen, wie man etwas macht, und ein Video würde es schaffen
Stativ-Kopf auf Einbeinstativ-Kopf Adapter auf 43 Cent. Wörtlich.: 6 Schritte
Stativ-Kopf auf Einbeinstativ-Kopf Adapter auf 43 Cent. Wörtlich.: Kurze Version meiner Geschichte: Ich habe eine Kamera gekauft, sie kam mit einem Bündel an Zubehör, darunter ein Samsonite 1100 Stativ. Ich habe ein Einbeinstativ. Ich möchte sehr bald Fotos mit einem Schwenkkopf auf dem Einbeinstativ machen und hatte keine 40 $, um ein L