UFO Attack: Eigenes Arduino-Spiel mit MAX7219 Matrix & Joystick
Komponenten und Zubehör
| Komponente | Anzahl |
|---|---|
| Arduino UNO | 1 |
| MAX7219 4-in-1 Dot Matrix Modul (32×8) | 1 |
| DB9 9-Pin Schraubklemmen-Breakout (für Atari-Joystick) | 1 |
| NPN-Transistor (z. B. 2N2222) | 1 |
| Steckbrett (Breadboard) | 1 |
| Passiver Piezo-Summer | 1 |
| Male/Female Jumper-Kabel | 5 |
| Jumper-Kabel (gemischt) | 10 |
| Widerstand 1 kΩ | 1 |
| Atari-kompatibler 9-Pin Joystick | 1 |
Über dieses Projekt
Ein klassisches Arcade-Spiel auf Arduino-Basis: Steuern Sie Ihr Raumschiff per Joystick, schießen Sie UFOs ab, weichen Sie Geschossen aus und besiegen Sie den Boss. Geschrieben mit Max72xxPanel, Adafruit_GFX und SPI Bibliotheken.
Spielprinzip: Jedes Level hat ein Abschussziel. Erreicht man es, erscheint der Boss. Steuerung per Atari-9-Pin-Joystick (altes Gerät wiederverwenden oder selbst bauen). Zukünftig als Handheld geplant.
Code-Struktur (Auszug)
Der vollständige Code ist umfangreich – hier die Kernbereiche:
Setup & Display-Konfiguration
const int pinCS = 10;
const int numberOfHorizontalDisplays = 4;
const int numberOfVerticalDisplays = 1;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
// Sprite-Definitionen (8x8) im PROGMEM: Schiff, UFO, Explosion, Boss, etc.
const unsigned char ship[] PROGMEM = { 0x80, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char ufo[] PROGMEM = { 0x40, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
const unsigned char boss[] PROGMEM = { 0x18, 0x24, 0x42, 0xff, 0x24, 0xff, 0x7e, 0x3c };
// ... weitere Sprites
Joystick-Pins (INPUT_PULLUP)
int up = 2, down = 3, left = 4, right = 5, trigger = 6;
Haupt-Loop (vereinfacht)
void loop() {
if (!gameStart) Ticker(true); // Titel-Scrolltext
SpawnTimer();
JoystickControl();
UfoControl();
BouncerControl();
LaserControl();
ScreenLimit();
BossBattle();
BossControl();
UFOLaserControl();
LTControl();
FallerControl();
RiserControl();
ShipCollision();
matrix.write();
delay(50);
matrix.fillScreen(LOW);
}
Level-Logik
10 Level mit steigender Schwierigkeit: Spawn-Raten, Boss-Lebenspunkte, Laser-Geschwindigkeit, Minion-Timer werden pro Level angepasst (Level(int level)).
Kollisionserkennung
Pixel-genaue Prüfung für Schiff-Laser vs. Feinde, Feinde-Laser vs. Schiff, Schiff vs. Feinde. Treffer → Explosion, Sound, Punkte.
Boss-Kampf
Bei Erreichen des Kill-Ziels: Sirene, Boss erscheint, schießt Laser, spawnnt ab Level 4 „Fallers“ und ab Level 5 „Risers“. Boss stirbt nach Treffern → Level-Up, neuer Titel-Scroll mit Score.
Schaltplan
Verdrahtung: Arduino Pins 2–6 → Joystick, Pin 10 → MAX7219 CS, Pin 11 (MOSI) → DIN, Pin 13 (SCK) → CLK, Pin 9 → Summer, L298N nicht benötigt.

Hinweise
- Code nutzt
random()für unvorhersehbare Feindbewegungen. - Sound per
tone()auf Pin 9. - Matrix-Rotation per
setRotation(0,3)für alle 4 Module. - Originalcode von Anthony Clarke, Open-Source-Snippets gekennzeichnet.
Herstellungsprozess
- Arduino Digitaler Würfel: LCD-Würfel mit Zufallszahlen (1–6)
- Wasserbasierter Flammeneffekt: Arduino UNO + NeoPixel Stick + Ultraschallvernebler
- 3D RGB Arduclock – Bluetooth-LED-Uhr mit Echtzeituhr
- River Health Monitor: Arduino-basiertes Wasserqualitäts-Messsystem
- Arduino Iron Man bauen: Komponenten, Sensoren & Schritt-für-Schritt-Anleitung
- Interaktives Joystick-Spiel mit Arduino & LED-Feedback
- Find Me: Smarter Gegenstands-Finder mit Arduino und Bluetooth
- Funktionaler 3D-gedruckter Roboterarm mit Arduino – Schritt-für-Schritt-Anleitung
- Tragbarer Entfernungsmesser – Arduino Nano DIY-Kit mit HC-SR04, 18650-Akku und 3D-gedrucktem Gehäuse
- DIY Arduino Luftbefeuchter-Steuerung mit Relais – Sichere Hochspannungs-Installation