Inhaltsverzeichnis:

Arduino Space Rocks-Spiel - Gunook
Arduino Space Rocks-Spiel - Gunook

Video: Arduino Space Rocks-Spiel - Gunook

Video: Arduino Space Rocks-Spiel - Gunook
Video: How I Built a Mars Perseverance Rover Replica - Arduino based Project 2024, November
Anonim
Arduino Space Rocks-Spiel
Arduino Space Rocks-Spiel

Egal, ob sie auf einem Computer, auf einem Telefon, auf einer Spielekonsole oder auf einer eigenständigen Box gespielt werden, viele Videospiele beinhalten ein Element der Hindernisvermeidung. Sicher, es können Punkte für das Sammeln von Token oder das Finden des Weges durch ein Labyrinth vergeben werden, aber seien Sie versichert, dass es wahrscheinlich etwas im Spiel gibt, dessen einziger Zweck darin besteht, Sie daran zu hindern. Das erste Videospiel war Pong, aber danach waren die beliebtesten Spiele Dinge wie „Asteroids“oder „Pac-Man“. Eine neuere Variante wäre das einfache, aber süchtig machende Spiel „Flappy Birds“.

Vor kurzem sah ich, dass jemand eine einfache zweistufige Version von „Flappy Bird“erstellt hatte, die auf einem gewöhnlichen 1602-LCD abgespielt wurde. Ich dachte, das würde den Enkeln gefallen, also beschloss ich, meine eigene Variation von Grund auf neu zu machen. Die 1602-Version hat nur zwei Level, also habe ich mich für ein 2004er LCD (20x4) entschieden, um die Spielschwierigkeit etwas zu erhöhen. Ich habe mich auch dafür entschieden, es eher wie „Asteroiden“zu machen, indem der Spieler ein „Schiff“durch ein Labyrinth aus „Weltraumfelsen“führt. Auch wenn Sie nicht daran interessiert sind, das Spiel zu entwickeln, gibt es möglicherweise einige Elemente der Software, die Sie in einem Ihrer eigenen Projekte verwenden können.

Schritt 1: Hardware

Hardware
Hardware
Hardware
Hardware
Hardware
Hardware

Die Hardware kann auf so ziemlich jeder Arduino-Version basieren. Ich habe das Prototyping mit einem Nano gemacht und dann den Code in einen ATMega328-Chip gebrannt. Dies ist der gleiche Chip, der im Nano verwendet wird, aber die Verwendung allein ermöglicht eine kompaktere Bauweise und einen geringeren Stromverbrauch. Wie Sie sehen können, habe ich die Schaltung auf einem kleinen Steckbrett gebaut, das auf dem LCD-Modul huckepack sitzt. Der andere Aspekt, der sich unterscheidet, ist, dass der Nano mit einem externen Quarz mit 16 MHz läuft, aber ich habe mich dafür entschieden, den eingebauten 8-MHz-Oszillator für den ATMega328-Chip zu verwenden. Das spart Teile und Strom.

Das LCD von 2004 ist mit dem Arduino genauso verbunden wie ein 1602 LCD. Ein interessanter Unterschied besteht in der Adressierung der Anzeigeorte. Offensichtlich gibt es einen Unterschied, weil es vier statt zwei Linien gibt, aber im Jahr 2004 ist die dritte Linie eine Erweiterung der ersten Linie und die vierte Linie eine Erweiterung der zweiten Linie. Mit anderen Worten, wenn Sie ein Testprogramm hätten, das gerade eine Zeichenfolge an das LCD aussendet, würde das 21. Zeichen am Anfang der dritten Zeile erscheinen und das 41. Zeichen springt zurück zum Anfang der ersten Zeile. Ich verwende diese Eigenschaft in der Software, um die Länge des Labyrinths effektiv zu verdoppeln.

Ich beschloss, meine Version batteriebetrieben zu machen, also benutzte ich einen gewöhnlichen 18650 Li-Ion, 3,6-Volt-Akku. Dazu musste ich eine kleine Platine hinzufügen, um das Aufladen über USB zu ermöglichen, und eine weitere kleine Platine, um die Batteriespannung für das LCD und den ATMega-Chip auf 5 Volt zu erhöhen. Die Bilder zeigen die Module, die ich verwendet habe, aber es gibt auch All-in-One-Module, die beide Funktionen erfüllen.

Schritt 2: Software

Die Software ist für den Nano- und den ATMega328-Chip gleich. Der einzige Unterschied liegt in der Programmiermethode. Ich verwende meine eigene Barebone-Version der 1602 LCD-Software und die LCD-Software in diesem Projekt basiert darauf. Ich musste Funktionen hinzufügen, um die zusätzlichen Zeilen der Anzeige von 2004 zu adressieren, und auch Routinen zum Verschieben der Anzeige hinzugefügt. Die Anzeigeverschiebung sorgt für den Bewegungseffekt der „Felsen“am „Schiff“vorbei.

Wie bereits erwähnt, bilden die Linien 1 und 3 eine kreisförmige Warteschlange und die Linien 2 und 4 ebenfalls. Das bedeutet, dass nach 20 Schichten die Zeilen 1 und 3 getauscht werden und die Zeilen 2 und 4 getauscht werden. Nach 40 Schichten befinden sich die Linien wieder in ihrer ursprünglichen Position. Aufgrund dieses Verhaltens wird das ursprüngliche 20-Zeichen-Labyrinth völlig anders, wenn die Zeilen vertauscht werden. Das machte das Leben interessant, als ich versuchte, ein Labyrinth zu bilden. Schließlich habe ich gerade eine Excel-Tabelle geöffnet, damit ich den Pfad aufzeichnen konnte, ohne ständig die Software ändern zu müssen. Die hier bereitgestellte Software enthält zwei Versionen des Labyrinths (eine ist auskommentiert), sodass Sie auswählen können, welche Sie möchten, oder Ihre eigene erstellen.

Ich wollte ursprünglich, dass dies so einfach ist, dass die jungen Enkelkinder es spielen können, aber ich wollte auch, dass es eine zusätzliche Herausforderung darstellt, wenn sie (oder jemand anderes) zu gut darin werden. Das Spiel beginnt mit der Shift-Rate von 1 Sekunde. Die interne Tic-Rate beträgt 50 ms, dh es gibt 20 Intervalle, in denen die Auf-/Ab-Tasten gedrückt werden können. Tatsächlich verbraucht eine gedrückte Taste 2 Tics, da ein 50-ms-Intervall verwendet wird, um das Drücken zu erkennen und ein weiteres 50-ms-Intervall verwendet wird, um auf die Freigabe zu warten. Mit dem Standardlabyrinth beträgt die maximale Anzahl von Drücken, die vor der nächsten Schicht erforderlich sind, drei. Die einfache Möglichkeit, den Schwierigkeitsgrad des Spiels zu erhöhen, besteht darin, die Zeit zwischen den Schichten zu verkürzen, sodass ein paar Codezeilen genau das tun, wenn die Punktzahl steigt. Die Schaltrate ist so eingestellt, dass sie alle 20 Schichten um 50 ms beschleunigt, wobei die minimale Rate auf 500 ms begrenzt ist. Es ist einfach, diese Parameter zu ändern.

Abgesehen von der Änderung der Verschiebungsrate besteht die primäre Logik in der Software darin, das „Schiff“zu bewegen und festzustellen, ob das „Schiff“mit einem „Stein“kollidiert ist. Diese Funktionen nutzen das definierte „Rock/Space“-Array und auch das Array, das die Speicherplätze im Display definiert. Der Verschiebungszähler entspricht der Zeilenlänge des LCD (0-19) und wird als Index in diese Arrays verwendet. Die Logik wird durch die Tatsache, dass die Leitungen alle 20 Schichten tauschen, etwas kompliziert. Eine ähnliche Logik wird verwendet, um die Position des „Schiffs“zu bestimmen, das sich auf einer der vier Linien befinden kann.

Die Punktzahl für jedes Spiel ist einfach die Anzahl der aufgetretenen Verschiebungen und der Highscore wird im internen EEROM des Mikrocontrollers gespeichert. Die EEPROM-Bibliothek wird verwendet, um die Lese- und Schreibvorgänge in diesem Speicher durchzuführen. Die verfügbaren Routinen ermöglichen Einzelbyte-Lese-/Schreibvorgänge und Lese-/Schreibvorgänge von Gleitkommawerten. Ein Wert von 0xA5 wird im ersten EEROM-Speicherort gespeichert, um anzuzeigen, dass ein Highscore gespeichert wurde. Wenn dieser Wert beim Einschalten vorhanden ist, wird der Gleitkommawert für den Highscore gelesen und angezeigt. Wenn der Wert 0xA5 nicht vorhanden ist, wird eine Routine aufgerufen, um den Highscore auf einen Wert von 1 zu initialisieren. Dieselbe Routine wird aufgerufen, wenn ein Reset des Highscores gewünscht wird. Der Highscore wird auf den Wert 1 zurückgesetzt, indem man eine der Auf-/Ab-Tasten gedrückt hält und dann kurz die Reset-Taste drückt.

Schritt 3: Das Spiel spielen

Das Spiel spielen
Das Spiel spielen
Das Spiel spielen
Das Spiel spielen

Beim Einschalten wird der aktuelle Highscore angezeigt. Nachdem der Highscore angezeigt wird, werden das Labyrinth aus „Felsen“und das „Schiff“angezeigt und das Spiel beginnt einige Sekunden später. Wenn das „Schiff“auf einen „Felsen“trifft, blinkt die Meldung „CRASH AND BURN“einige Male, bevor der Spielstand angezeigt wird. Wenn ein neuer Highscore erstellt wird, wird diese Nachricht ebenfalls angezeigt. Durch Drücken der Reset-Taste wird ein neues Spiel gestartet.

Empfohlen: