Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Klassisches Asteroids-Spiel mit Arduino Mega und MAX72XX LED-Matrix

Komponenten und Materialien

Komponente Menge
Arduino Mega 2560 1
MAX7219 LED-Matrix Shield (Maxim MAXREFDES99#) 1 8x8 LED Matrix
Taster 12mm (SparkFun) 2 Links / Rechts
Summer (Buzzer) 1 aktiv, für Soundeffekte
Steckbrett (Breadboard) 1

Spielbeschreibung

Ein einfaches Arcade-Spiel auf einer 8x8 LED-Matrix. Der Spieler steuert ein Raumschiff (ein Pixel in der untersten Reihe) per zwei Tastern nach links/rechts. Asteroiden (Pixel) fallen von oben nach unten. Das Spiel wird mit der Zeit schneller. Bei Kollision: Explosionsanimation, Sound, Anzeige der Überlebenszeit (Score). Tastendruck nach Game Over startet neues Spiel.

Hardware-Anschluss

Software

Code-Übersicht

Der vollständige Code ist im Repository enthalten. Hier die Kernlogik:

Initialisierung

LedControl lc = LedControl(12, 11, 10, 1); // DIN, CLK, LOAD, Geräteanzahl
int ship = 3; // Startposition Raumschiff (Spalte 0-7)
int columns[8] = {0}; // Asteroiden-Positionen pro Spalte (0=kein, 1-10=Reihe)
int tick = 300; // Spielgeschwindigkeit (ms)
int tickCounter = 1;
bool gameOver = false;

Interrupts für Tasten (entprellt)


void left() {
  if(millis() - buttonPressed > 150) {
    ship = (ship == 0) ? 7 : ship - 1; // Wrap-around
    lc.clearDisplay(0);
    buttonPressed = millis();
  }
  if(gameOver) { gameOver = false; setup(); } // Neustart
}
void right() {
  if(millis() - buttonPressed > 150) {
    ship = (ship == 7) ? 0 : ship + 1;
    lc.clearDisplay(0);
    buttonPressed = millis();
  }
  if(gameOver) { gameOver = false; setup(); }
}

Haupt-Loop (Game Tick)


void loop() {
  if(millis() - now > tick) {
    score++; // Score = überlebte Ticks
    now = millis();

    // Alle 4 Ticks: neues Asteroiden-Spawn & Beschleunigung
    if(tickCounter == 1) {
      tick = tick / 1.02; // schneller
      int col = random(0, 8);
      if(columns[col] == 0) columns[col] = 1; // neuer Asteroid oben
    }
    tickCounter = (tickCounter == 4) ? 1 : tickCounter + 1;

    // Alle Asteroiden eine Reihe nach unten bewegen
    for(int i=0; i<8; i++) {
      if(columns[i] == 10) columns[i] = 0; // unten raus -> entfernen
      if(columns[i] != 0) columns[i]++;
    }
    lc.clearDisplay(0);
  }

  // Anzeige: Raumschiff (Reihe 7), Asteroiden
  lc.setLed(0, 7, ship, true);
  for(int i=0; i<8; i++) {
    if(columns[i] > 0) {
      lc.setLed(0, columns[i]-2, i, true); // zwei Pixel hoch
      lc.setLed(0, columns[i]-3, i, true);
    }
  }

  // Kollision prüfen (Asteroid in Reihe 8 oder 9 bei Schiffsspalte)
  if(columns[ship] == 9 || columns[ship] == 10) {
    // Explosionsanimation + Sound
    for(int i=0; i<4; i++) {
      lc.setLed(0, 7, ship+i, true);
      lc.setLed(0, 7, ship-i, true);
      lc.setLed(0, 7-i, ship+i, true);
      lc.setLed(0, 7-i, ship-i, true);
      lc.setLed(0, 7-1.5*i, ship, true);
      tone(9, random(1000), 250); // zufälliger Sound
      delay(250); lc.clearDisplay(0); noTone(9);
    }
    delay(500);

    // Score anzeigen (bis 99 auf Matrix, >99: letzte zwei Stellen + Hunderter als Punkte)
    // ... (Zeichen-Routinen draw0() bis draw9() im Vollcode)
    gameOver = true;
    while(gameOver); // wartet auf Tastendruck (Interrupt startet neu)
  }
}

Ziffern-Darstellung (3 Spalten pro Ziffer)

Funktionen draw0() bis draw9() setzen Spalten-Bitmuster für 7-Segment-ähnliche Darstellung auf der Matrix.

Schaltplan

Der Schaltplan zeigt die Verbindungen: MAX7219 an SPI-Pins (12,11,10), Taster an Pin 2/3 mit Pullup, Summer an Pin 9.

Erweiterungsideen

Herstellungsprozess

  1. Schach: Von antiken Ursprüngen zur modernen Fertigung – Ein Expertenüberblick
  2. Flipper: Geschichte, Design und Fertigung eines klassischen Arcade-Spiels
  3. Die Evolution und Handwerkskunst des American Football: Von antiken Spielen zu modernen NFL-Standards
  4. Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
  5. 37-LED-Roulette-Spiel mit Arduino Nano bauen – Europäisches Layout
  6. 24×16 LED Pong-Konsole mit Arduino Nano & MAX7219 bauen
  7. Tetris-Spiel mit Arduino Nano auf selbstgebauter 16×8 LED-Matrix
  8. Interaktives Joystick-Spiel mit Arduino & LED-Feedback
  9. Interaktive LED-Matrix Tür-Anzeige mit PIR-Bewegungssensor – Arduino Feiertagsgruß
  10. Soundgesteuerte 8-LED-Lichtanzeige mit Arduino