Inhaltsverzeichnis:

Das härteste Spiel der Welt auf dem Arduino neu erstellen - Gunook
Das härteste Spiel der Welt auf dem Arduino neu erstellen - Gunook

Video: Das härteste Spiel der Welt auf dem Arduino neu erstellen - Gunook

Video: Das härteste Spiel der Welt auf dem Arduino neu erstellen - Gunook
Video: Arduino Tutorial - 1. Einführung (#1) 2024, Juli
Anonim
Image
Image

Dieses Projekt basiert auf einem Computerspiel, das Sie online finden können. Sein Name ist "Das härteste Spiel der Welt". Ich konnte es auf dem Arduino mit einer LED-Matrix mit vier Modulen neu erstellen. In diesem anweisbaren bringe ich Ihnen bei, wie Sie es selbst konstruieren. Bevor wir auf zu viele Details eingehen, möchte ich einen kurzen Überblick über die Schritte geben, die ich durchlaufen habe, um dieses Spiel zu erstellen.

  1. Ich habe alle benötigten Teile zusammengetragen.
  2. Ich habe die Teile miteinander verbunden.
  3. Ich habe eine Skizze geschrieben, die den Joystick verwendet, um die Player-LED über alle Module zu bewegen.
  4. Ich entwarf die ersten Hindernisse und fügte sie der Skizze hinzu, damit sie das härteste Spiel der Welt nachahmen.
  5. Ich habe dann Code hinzugefügt, um eine Kollision mit den Hindernissen zu erkennen, wodurch das Spiel neu gestartet wird.
  6. Und dann habe ich zwei weitere Level von Hindernissen entworfen.

Schritt 1: Alle Teile

Alle Teile
Alle Teile
Alle Teile
Alle Teile

Hier ist eine Liste aller benötigten Teile:

  1. Ein Arduino UNO und USB-Anschluss:
  2. Ein vier Module 8x8: LED-Matrix
  3. Ein Joystick:
  4. 10 männliche zu weibliche Drähte:

Schritt 2: So verbinden Sie die Teile mit dem Arduino

So verbinden Sie die Teile mit dem Arduino
So verbinden Sie die Teile mit dem Arduino

So verbinden Sie die LED-Matrix mit dem Arduino

  1. GND geht zu GND
  2. VCC geht auf 5V
  3. DataIn geht an digitalen Pin 12
  4. CLK geht an digitalen Pin 11
  5. CS oder LOAD geht an digitalen Pin 10

So schließen Sie den Joystick an

  1. GND geht zu GND
  2. 5V geht zu 5V
  3. VRx geht an analogen Pin A0
  4. VRy geht an analogen Pin A1
  5. SW wird nicht verwendet

Die Batterie wird an die 9-V-Buchse angeschlossen, um das Arduino mit Strom zu versorgen

Schritt 3: Flussdiagramm des Programms

Flussdiagramm des Programms
Flussdiagramm des Programms

Das Oval kennzeichnet den Start des Programms.

Der erste Schritt besteht darin, alle Hindernisse zu definieren.

Die nächsten beiden Schritte zeigen das Festlegen der Variablen und das Einschalten aller Module.

Der nächste Schritt besteht darin, die LEDs auf die erste Stufe und alle anderen Variablen einzustellen.

Als nächstes wird das Level angezeigt, auf dem sich der Spieler gerade befindet.

Die Raute zeigt an, dass der Joystick gelesen wird, um zu sehen, in welche Richtung er gedrückt wird.

Bewegen Sie dann den Player in die Richtung, in die der Joystick gedrückt wurde.

Überprüfen Sie, ob der Spieler mit einem Hindernis kollidiert ist.

Wenn der Spieler auf ein Hindernis trifft, gehe zurück zum ersten Level. Wenn nicht, überprüfen Sie, ob der Spieler das Ende des Levels erreicht hat.

Wenn sich der Spieler am Ende des Levels befindet, gehe zum nächsten Level und gehe dann zurück zu "Aktuelles Level anzeigen". Wenn sie nicht am Ende sind, verschieben Sie die Hindernisse und gehen Sie zurück zu "Joystick lesen".

Schritt 4: Programmieren des Joysticks

Um den kleinen Punkt, der der Spieler ist, zu bewegen, brauchen wir natürlich einen Joystick. und damit der Joystick den Player tatsächlich bewegen kann, müssen wir ihn in der Arduino IDE codieren. Sie müssen die LedControl-Bibliothek einschließen, die Sie finden können, indem Sie auf das Skizzenmenü> Bibliotheken einschließen> Bibliotheken verwalten klicken und nach LedControl suchen. So sieht der Code für den Joystick aus.

#include "LedControl.h"

int DataIn = 12; intCLK = 11; intDIN = 10; LedControl lc=LedControl(DataIn, CLK, DIN, 4); // Erzeugt Objekt für vier Module int delaytime = 50; // Geschwindigkeit, mit der das Spiel läuft int joystick_RtLt, joystick_UpDn; int player_x = 0; // Spieler horizontale Position von 0 bis 31 int player_y = 3; // Spieler vertikale Position von 0 bis 7 int Reihe, Spalte, Modul; Void setup () { initialize_modules (); // alle vier LED-Module einschalten und einstellen aufrechtzuerhalten. Void loop () { move_player (); // Schleife starten, indem überprüft wird, ob sich der Spieler bewegt Verzögerung (Verzögerungszeit); aufrechtzuerhalten. Void initialize_modules () {lc.shutdown (0, false); // startet Modul 0 lc.setIntensity (0, 1); lc.shutdown (1, falsch); // startet Modul 1 lc.setIntensity(1, 1); lc.shutdown(2, false); // startet Modul 2 lc.setIntensity(2, 1); lc.shutdown(3, false); // startet Modul 3 lc.setIntensity(3, 1); lc.clearDisplay(0); // löscht Modul 0} void move_player(){ module = player_x/8; // definiert, auf welchem Modul sich der Player befindet column = Players_x%8; // definiert die Spalte, in der sich der Player in der Modulzeile befindet = Players_y; lc.setLed (Modul, Zeile, Spalte, falsch); // LED an der aktuellen Position des Spielers ausschalten Joystick_RtLt = analogRead (A0)/204 - 2; // X-Joystick und Kartenbereich von 2 bis -2 lesen if(joystick_RtLt > 0) //wenn Joystick richtig ist player_x++; // nach rechts gehen sonst if(joystick_RtLt 0) //wenn der Joystick links und nicht am Anfang ist player_x--; // Joystick nach links bewegen_UpDn = analogRead (A1)/204 - 2; // Y-Joystick und Kartenbereich von 2 bis -2 lesen if (joystick_UpDn 0) // wenn der Joystick unten ist und der Spieler nicht unten ist player_y--; //nach unten bewegen else if(joystick_UpDn > 0 && player_y < 7) //wenn der Joystick oben ist und der Spieler nicht oben ist player_y++; // Modul nach oben gehen = player_x/8; // Modul auf neue Positionsspalte der Spieler setzen = player_x%8; //Spalte auf Spieler setzen neue Position row = player_y; // setze die Zeile auf die neue Position des Spielers lc.setLed (Modul, Zeile, Spalte, wahr); // LED an der neuen Position des Spielers einschalten}

Nachdem Sie den Joystick hinzugefügt haben, arbeiten wir am ersten Hindernis!

Schritt 5: Die erste Ebene

Also gut, jetzt ist es an der Zeit, in den Hauptteil des Programms einzusteigen, die Hindernisse! Die Hindernisse sind es, die dieses Spiel zum „härtesten Spiel der Welt“machen. Wenn Sie das Spiel also tatsächlich spielen möchten, müssen Sie dies zu Ihrem Code hinzufügen:

Byte-Hindernis[LEVELS][SCENES][COLUMNS][ROWS] = { //drei Ebenen, 8 Szenen, 8 Spalten, 8 Reihen

{{{1, 1, 1, 1, 1, 1, 0, 0}, //erste Ebene, erste Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 1}, { 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //erste Ebene, zweite Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 1, 1, 1 }, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //erste Ebene, dritte Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //zuerst Ebene, vierte Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //erste Ebene, fünfte Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 1, 1, 1, 1, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, //erste Ebene, sechste Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, { 1, 1, 1, 1, 1, 0, 0, 1}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 1, 1, 1, 1, 1, 1}, //erste Ebene, siebte Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0 }, {1, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 1, 1, 1, 1, 1, 1, 1}, //erste Ebene, achte Szene {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}}}, Void setup () { initialize_modules (); // alle vier LED-Module einschalten und einstellen start_level (0); Void Schleife () { move_player (); // Schleife starten, indem überprüft wird, ob sich der Spieler bewegt if (collision ()) { // auf Kollisionsstufe prüfen = 0; // wenn Kollision wahr, Level zurücksetzen start_level (level); // Spiel neu starten} sonst if(delay_count == Obstacle_delay){//wenn keine Kollision Hindernis bewege jede zweite Verzögerung moveobstacle(); delay_count = 0; }sonst delay_count++; Verzögerung (Verzögerungszeit); // Verzögerung durch Spielgeschwindigkeit}

Und das ist das erste Hindernis! Wenn Ihnen dies als erstes Level langweilig wird, können Sie die Bytes jederzeit ändern. Denken Sie daran, dass Sie acht verschiedene Szenen haben müssen! Fahren wir mit dem nächsten Schritt fort, der Kollisionserkennung!

Schritt 6: Kollisionserkennung

Dieser Schritt ist ein weiterer wichtiger Teil des Spiels, ohne ihn gäbe es keine große Herausforderung! Sie könnten sich ohne Konsequenzen durch die Hindernisse hindurchschlängeln! das würde nicht viel spaß machen oder? Lassen Sie uns das Spiel herausfordernder (und unterhaltsamer!) machen, indem wir diesen Abschnitt des Programms hinzufügen:

Leere Schleife () {

Spieler bewegen(); // Schleife starten, indem überprüft wird, ob sich der Spieler bewegt if (collision ()) { // auf Kollisionsstufe prüfen = 0; // wenn Kollision wahr, Level zurücksetzen start_level (level); // Spiel neu starten} sonst if(delay_count == Obstacle_delay){//wenn keine Kollision Hindernis bewege jede zweite Verzögerung moveobstacle(); delay_count = 0; }sonst delay_count++; Verzögerung (Verzögerungszeit); // Verzögerung durch die Geschwindigkeit des Spiels} Int Kollision () { // Überprüfen Sie, ob der Spieler im Szenenmodul auf ein Hindernis trifft = Players_x/8; Spalte = Spieler_x%8; Reihe = Spieler_y; if(module > 0) if(obstacle[level][scene][column][row] == 1) //wenn die Position des Spielers dieselbe ist wie das Hindernis Return(1); // Kollision erkannt Rückgabe true return (0); //keine Kollision Rückgabe falsch }

Und los gehts! Jetzt können Sie das Spiel viel mehr genießen! Jetzt zeige ich dir, wie du die letzten beiden Level des Spiels programmierst! Ihr fast fertig mit diesem instructable, und ich bin sicher, dass Sie bereit sind, es auszuprobieren!

Schritt 7: Die letzten beiden Ebenen

Wir kamen zum Ende des instructable, diese letzten beiden Levels sind alles, was Sie brauchen, um dieses Spiel zu beenden. Dann können Sie es selbst ausprobieren! hier ist der code:

byte hindernis[LEVELS][SCENES][COLUMNS][ROWS] = { //zweite und dritte Ebene, 8 Szenen, 8 Spalten, 8 Reihen

{{{1, 0, 0, 0, 0, 0, 0, 1}, //zweite Ebene, erste Szene {0, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, { 0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 0}, {1, 0, 0, 0, 0, 0, 0, 1}}, {{1, 1, 0, 0, 0, 0, 0, 1}, //zweite Ebene, zweite Szene {0, 0, 1, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 0, 0, 0 }, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 1, 1}}, {{0, 1, 0, 0, 0, 0, 0, 0}, //zweite Ebene, dritte Szene {0, 0, 1, 1, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 0}, {0, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 0, 1, 1, 0}, {0, 0, 0, 0, 0, 0, 1, 0}}, {{0, 0, 1, 0, 0, 0, 0, 0}, // zweite Ebene vierte Szene {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {0, 1, 1, 1, 1, 0, 1, 0}, {0, 1, 0, 1, 1, 1, 1, 0}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}}, {{0, 0, 0, 1, 0, 0, 0, 0}, //zweite Ebene, fif Szene {0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // zweite Ebene, sechste Szene {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 1, 1}, {0, 0, 1, 0, 0, 1, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 1, 0, 0}, //zweite Ebene, siebte Szene {0, 0, 0, 0, 0, 1, 0, 0}, {1, 1, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 1, 1}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 1, 0}, // Achte Szene der zweiten Ebene {1, 1, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 0, 1, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 1, 1}, {0, 1, 0, 0, 0, 0, 0, 0}}}, {{{0, 1, 0, 0, 0, 0, 0, 1}, //dritte Ebene, erste Szene {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 0, 0} }, {{0, 0, 0, 0, 1, 0, 0, 1}, // dritte Ebene, zweite Szene {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, //dritte Ebene, dritte Szene {0, 0, 0, 1, 0, 0, 1, 0}, { 0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, //dritte Ebene, vierte Szene {1, 0, 0, 1, 0, 0, 1, 0 }, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // dritte Ebene, fünfte Szene {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 1}, // dritte Ebene, sechste Szene {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}, {{0, 1, 0, 0, 1, 0, 0, 1}, // dritte Ebene, siebte Szene {0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}}, {{0, 0, 0, 0, 1, 0, 0, 0}, // dritte Ebene, achte Szene { 1, 0, 0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 1, 0, 0}, {0, 1, 0, 0, 1, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 1, 0}}} };

Und das ist es! Sie sind bereit, zu versuchen, das härteste Spiel der Welt zu beenden. Auch der vollständige Arduino-Code ist unten beigefügt.

Empfohlen: