Arduino Tic-Tac-Toe Spiel auf Touchscreen bauen: Schritt-für-Schritt-Anleitung
Benötigte Komponenten
| Arduino UNO | 1 Stück |
| 2,8" Touchscreen (Shield, 320x240 Pixel) | 1 Stück |
Software & Online-Dienste
- Arduino IDE
Projektübersicht
In diesem Tutorial bauen wir ein Tic-Tac-Toe-Spiel mit einem Arduino UNO und einem 2,8-Zoll-Touchscreen. Der Arduino spielt gegen den menschlichen Spieler. Obwohl das Spiel einfach ist, eignet es sich hervorragend als Einführung in Spielprogrammierung und künstliche Intelligenz. Wir verwenden keine komplexen KI-Algorithmen, aber der Algorithmus zeigt, warum diese bei komplexeren Spielen notwendig sind.
Die Entwicklung von Spielen für Arduino ist zeitaufwendig, aber einfache Projekte wie dieses machen Spaß und vermitteln fortgeschrittene Programmierkonzepte. Am Ende haben Sie ein funktionierendes Spiel für Kinder – und haben viel gelernt.
Schritt 1: Alle Teile besorgen
Benötigte Hardware:
- Arduino UNO
- 2,8" Touchscreen (Shield)
Gesamtkosten: ca. 15 $.
Tipp: Schauen Sie sich vor dem Bau das Video zur Kalibrierung des Touchscreens an – es erleichtert das Verständnis des Codes erheblich.
Schritt 2: Der 2,8" Touch-Farbbildschirm
Das Display kostet ca. 11 $ (z. B. bei Banggood). Es bietet 320x240 Pixel Auflösung und wird als Shield direkt auf den Arduino UNO gesteckt – keine Verdrahtung nötig. Allerdings belegt es fast alle digitalen und analogen Pins. Nur 2 digitale Pins und 1 analoger Pin bleiben frei. Für mehr Pins kann ein Arduino Mega verwendet werden. Das Shield verfügt zudem über einen microSD-Kartenslot.
Hinweis: Das Display funktioniert nicht mit Arduino Due oder Wemos D1 ESP8266.
Schritt 3: Aufbau & Test
Nach dem Aufstecken des Shields auf den Arduino UNO wird der Code hochgeladen. Das Spiel startet mit dem Druck auf „Start Game“. Der Arduino beginnt immer. Der menschliche Spieler setzt seinen Zug per Touch. Gewinner ist, wer drei Zeichen in eine Reihe (horizontal, vertikal, diagonal) bringt. Nach Spielende erscheint ein „Game Over“-Bildschirm mit „Play Again“-Button.
Der Arduino spielt sehr stark – er gewinnt meistens oder erzwingt ein Unentschieden. Der Algorithmus macht absichtlich Fehler, damit der Mensch eine Chance hat. Mit zwei zusätzlichen Codezeilen ließe sich der Arduino unschlagbar machen.
Schritt 4: Der Spielalgorithmus
Der Algorithmus ist bewusst einfach gehalten:
- Der Computer spielt immer zuerst – das vereinfacht das Gewinnen enorm.
- Erster Zug: immer eine Ecke.
- Zweiter Zug: eine zufällige freie Ecke (ignoriert den menschlichen Zug).
- Ab dem dritten Zug: Prüfen, ob der Mensch im nächsten Zug gewinnen kann → blockieren.
- Falls keine Blockade nötig: freie Ecke spielen, sonst zufälliges freies Feld.
Dieser Algorithmus schlägt den Menschen fast immer oder erzwingt Unentschieden. Er ist nicht optimal, aber extrem einfach zu implementieren. Bei komplexen Spielen wie Schach reicht diese Baumsuche nicht – dort braucht man echte KI und massive Rechenleistung.
Schritt 5: Der Code
Benötigte Bibliotheken:
- Modifizierte Adafruit TFTLCD
- Adafruit GFX
- Touchscreen
Der Code umfasst über 600 Zeilen. Hier die Kernlogik für die Computerzüge:
// Erste zwei Züge: zufällige Ecken
int firstMoves[] = {0, 2, 6, 8};
// ... Code zur Ermittlung gespielter Züge ...
if (moves <= 2) {
int randomMove = random(4);
int c = firstMoves[randomMove];
if (board[c] == 0) {
delay(1000);
board[c] = 2; // Computer = 2
drawCpuMove(firstMoves[randomMove]);
}
}
Prüfung, ob der Gegner (Mensch = 1) gewinnen kann:
int checkOpponent() {
if (board[0]==1 && board[1]==1 && board[2]==0) return 2;
else if (board[0]==1 && board[1]==0 && board[2]==1) return 1;
else if (board[1]==1 && board[2]==1 && board[0]==0) return 0;
else if (board[3]==1 && board[4]==1 && board[5]==0) return 5;
else if (board[4]==1 && board[5]==1 && board[3]==0) return 3;
else if (board[3]==1 && board[4]==0 && board[5]==1) return 4;
else if (board[1]==0 && board[4]==1 && board[7]==1) return 1;
else return 100; // keine Gewinnmöglichkeit
}
Wird ein Gewinn erkannt, blockiert der Arduino meistens – aber nicht immer, um dem Menschen eine Chance zu lassen. Welche Züge nicht blockiert werden? Finden Sie es im Code heraus!
Wichtig: Falls der Code nicht funktioniert (Banggood liefert zwei verschiedene Display-Treiber), ändern Sie die initDisplay()-Funktion:
void initDisplay() {
tft.reset();
tft.begin(0x9341);
tft.setRotation(3);
}
Schritt 6: Fazit & Verbesserungen
Selbst mit einem Arduino UNO lässt sich für einfache Spiele ein unschlagbarer Algorithmus bauen. Dieses Projekt ist ein toller Einstieg in KI und Spielprogrammierung. Zukünftig sind komplexere Projekte mit Raspberry Pi geplant. Viel Spaß beim Nachbauen!
Herstellungsprozess
- Schach: Von antiken Ursprüngen zur modernen Fertigung – Ein Expertenüberblick
- Echtzeit-Gyroskop-Spiel mit Arduino Nano & MPU-6050
- Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
- Tragbares kapazitives Touch-Piano mit Arduino & MPR121 – Bauanleitung
- DIY Arduino USB Gaming Controller – Bauen Sie Ihren eigenen High-Performance Gamepad
- 24×16 LED Pong-Konsole mit Arduino Nano & MAX7219 bauen
- Arduino Touch Breakout-Spiel: Klassisches Arcade auf 2,4″ TFT LCD
- Riesige Lego-Minifigur als Animatronic-Operation-Game mit Arduino bauen
- Pixel Chaser: Interaktives One-Tap-LED-Spiel mit Arduino Nano
- Arduino-gesteuertes automatisiertes Chrome Dino-Spiel bauen