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

Arduino Touch Tic-Tac-Toe-Spiel

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
2,8" Touchscreen
× 1

Apps und Onlinedienste

Arduino-IDE

Über dieses Projekt

Liebe Freunde, willkommen zu einem weiteren Arduino-Tutorial! In diesem ausführlichen Tutorial bauen wir ein Arduino Tic-Tac-Toe-Spiel. Wie Sie sehen, verwenden wir einen Touchscreen und spielen gegen den Computer. Ein einfaches Spiel wie Tic-Tac-Toe ist eine großartige Einführung in die Spieleprogrammierung und künstliche Intelligenz. Auch wenn wir in diesem Spiel keine Algorithmen der künstlichen Intelligenz verwenden werden, werden wir verstehen, warum Algorithmen der künstlichen Intelligenz in komplexeren Spielen erforderlich sind.

Spiele für Arduino zu entwickeln ist nicht einfach und erfordert viel Zeit. Aber wir können einige einfache Spiele für Arduino entwickeln, weil es Spaß macht und es uns ermöglicht, fortgeschrittenere Programmierthemen wie Künstliche Intelligenz zu erkunden. Es ist eine großartige Lernerfahrung und am Ende haben Sie ein schönes Spiel für die Kinder!

Lassen Sie uns nun dieses Projekt erstellen.

Schritt 1:Holen Sie sich alle Teile

Die Teile, die für den Bau dieses Projekts benötigt werden, sind die folgenden:

  • Ein Arduino Uno
  • Ein 2,8-Zoll-Touchscreen

Die Projektkosten sind sehr gering. Es kostet nur 15 Dollar.

Bevor Sie versuchen, dieses Projekt zu erstellen, sehen Sie sich bitte das Video an, das ich über das Touch-Display vorbereitet habe, indem Sie hier auf die Karte klicken. Es hilft Ihnen, den Code zu verstehen und den Touchscreen zu kalibrieren.

Schritt 2:Das 2,8-Zoll-Touch-Farbdisplay für Arduino

Ich habe diesen Touchscreen auf banggood.com entdeckt und beschlossen, ihn zu kaufen, um ihn in einigen meiner Projekte zu verwenden. Wie Sie sehen, ist das Display günstig, es kostet etwa 11 US-Dollar.

Hier herunterladen.

Das Display bietet eine Auflösung von 320x240 Pixeln und wird als Shield geliefert, was die Verbindung mit Arduino extrem einfach macht. Wie Sie sehen, verwendet das Display fast alle digitalen und analogen Pins des Arduino Uno. Bei Verwendung dieses Shields bleiben uns nur noch 2 digitale Pins und 1 analoger Pin für unsere Projekte. Glücklicherweise funktioniert das Display auch mit dem Arduino Mega gut, so dass wir, wenn wir mehr Pins benötigen, den Arduino Mega anstelle des Arduino Uno verwenden können. Leider funktioniert dieses Display nicht mit dem Arduino Due oder dem Wemos D1 ESP8266 Board. Ein weiterer Vorteil des Shields ist, dass es einen Micro-SD-Slot bietet, der sehr einfach zu bedienen ist.

Schritt 3:Erstellen des Projekts und Testen

Nachdem wir den Bildschirm mit dem Arduino Uno verbunden haben, können wir den Code laden und wir sind bereit zu spielen.

Zuerst drücken wir die Schaltfläche „Spiel starten“ und das Spiel beginnt. Der Arduino spielt zuerst. Wir können dann unseren Zug spielen, indem wir einfach den Bildschirm berühren. Der Arduino spielt dann seinen Zug und so weiter. Der Spieler, dem es gelingt, drei seiner Markierungen in einer horizontalen, vertikalen oder diagonalen Reihe zu platzieren, gewinnt das Spiel. Wenn das Spiel vorbei ist, wird der Bildschirm Game Over angezeigt. Wir können dann die Play Again-Taste drücken, um das Spiel erneut zu starten.

Der Arduino ist in diesem Spiel sehr gut. Es wird die meisten Spiele gewinnen, oder wenn Sie ein sehr guter Spieler sind, endet das Spiel unentschieden. Ich habe diesen Algorithmus absichtlich so entworfen, dass er einige Fehler macht, um dem menschlichen Spieler eine Chance zu geben, zu gewinnen. Indem wir dem Code des Spiels zwei weitere Zeilen hinzufügen, können wir es dem Arduino unmöglich machen, das Spiel zu verlieren. Aber wie kann ein 2-Dollar-Chip, die Arduino-CPU, das menschliche Gehirn schlagen? Ist das von uns entwickelte Programm intelligenter als das menschliche Gehirn?

Schritt 4:Der Spielalgorithmus

Um diese Frage zu beantworten, schauen wir uns den von mir implementierten Algorithmus an.

Der Computer spielt immer zuerst. Allein diese Entscheidung macht es dem Arduino viel einfacher, das Spiel zu gewinnen. Der erste Zug ist immer eine Ecke. Der zweite Zug für den Arduino ist auch eine zufällige Ecke aus dem Rest, ohne sich um den Spielerzug zu kümmern. Ab diesem Zeitpunkt prüft der Arduino zunächst, ob der Spieler im nächsten Zug gewinnen kann und blockiert diesen Zug. Wenn der Spieler in einem einzigen Zug nicht gewinnen kann, spielt er einen Eckzug, falls verfügbar, oder einen zufälligen aus den verbleibenden. Das war's, dieser einfache Algorithmus kann den menschlichen Spieler jedes Mal schlagen oder im schlimmsten Fall führt das Spiel zu einem Unentschieden. Dies ist nicht der beste Tic-Tac-Toe-Spielalgorithmus, aber einer der einfachsten.

Dieser Algorithmus kann leicht in Arduino implementiert werden, da das Tic-Tac-Toe-Spiel sehr einfach ist und wir es leicht analysieren und lösen können. Wenn wir den Spielbaum entwerfen, können wir einige Gewinnstrategien entdecken und sie einfach in Code implementieren oder wir können die CPU den Spielbaum in Echtzeit berechnen lassen und den besten Zug selbst auswählen. Natürlich ist der Algorithmus, den wir in diesem Spiel verwenden, sehr einfach, denn das Spiel ist sehr einfach. Wenn wir versuchen, einen Gewinnalgorithmus für Schach zu entwickeln, können wir selbst mit dem schnellsten Computer den Spielbaum in tausend Jahren nicht berechnen! Für Spiele wie dieses brauchen wir einen anderen Ansatz, wir brauchen einige Algorithmen der künstlichen Intelligenz und natürlich eine riesige Rechenleistung. Mehr dazu in einem zukünftigen Video.

Schritt 5:Code des Projekts

Werfen wir einen kurzen Blick auf den Code des Projekts. Wir benötigen drei Bibliotheken, um den Code zu kompilieren.

  • Modifiziertes Adafruit-TFTLCD
  • Adafruit GFX
  • Touchscreen

Wie Sie sehen, benötigt selbst ein einfaches Spiel wie dieses mehr als 600 Zeilen Code. Der Code ist komplex, daher werde ich nicht versuchen, ihn in einem kurzen Tutorial zu erklären. Ich zeige Ihnen jedoch die Implementierung des Algorithmus für die Arduino-Bewegungen.

Zuerst spielen wir zwei zufällige Ecken.

int firstMoves[]={0,2,6,8}; // verwendet diese Positionen zuerst for(counter=0;counter<4;counter++) //Zähle die ersten gespielten Züge { if(board[firstMoves[counter]]!=0) // Der erste Zug wird von jemandem gespielt { movePlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=firstMoves[randomMove]; if (board[c]==0) { Verzögerung (1000); Brett[c]=2; Serial.print (firstMoves [randomMove]); Serial.println(); drawCpuMove(firstMoves[randomMove]); b =1; } } 

Als nächstes prüfen wir in jeder Runde, ob der Spieler im nächsten Zug 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; sonst 100 zurückgeben;}

Wenn ja, blockieren wir diese Bewegung meistens. Wir blockieren nicht alle Züge, um dem menschlichen Spieler eine Gewinnchance zu geben. Können Sie herausfinden, welche Züge nicht blockiert sind? Nachdem wir den Zug blockiert haben, spielen wir eine verbleibende Ecke oder einen zufälligen Zug. Sie können den Code studieren und Ihren eigenen unschlagbaren Algorithmus einfach implementieren. Wie immer finden Sie den Code des Projekts in diesem Tutorial angehängt.

HINWEIS:Da Banggood dasselbe Display mit zwei verschiedenen Display-Treibern anbietet, ändern Sie die initDisplay-Funktion wie folgt, wenn der obige Code nicht funktioniert:

void initDisplay(){tft.reset();tft.begin(0x9341);tft.setRotation(3);} 
graphics.c TicTacToeEasy.ino

Schritt 6:Abschließende Gedanken und Verbesserungen

Wie Sie sehen, können wir selbst mit einem Arduino Uno einen unschlagbaren Algorithmus für einfache Spiele bauen. Dieses Projekt ist großartig, weil es einfach zu bauen ist und gleichzeitig eine großartige Einführung in künstliche Intelligenz und Spieleprogrammierung. Ich werde versuchen, in Zukunft mit dem leistungsstärkeren Raspberry Pi einige fortgeschrittenere Projekte mit künstlicher Intelligenz zu erstellen, also bleiben Sie dran! Ich würde gerne Ihre Meinung zu diesem Projekt hören.

Bitte posten Sie Ihre Kommentare unten und vergessen Sie nicht, das Tutorial zu mögen, wenn Sie es interessant finden. Danke!

Code

  • Code-Snippet Nr. 1
  • Code-Snippet 2
Code-Snippet Nr. 1Nur-Text

int firstMoves[]={0,2,6,8}; // verwendet diese Positionen zuerst

for(counter=0;counter<4;counter++) //Zähle die ersten gespielten Züge { if(board[firstMoves[counter]]!=0) // Erster Zug wird von jemandem gespielt { movePlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=firstMoves[randomMove]; if (board[c]==0) { Verzögerung (1000); Brett[c]=2; Serial.print (firstMoves [randomMove]); Serial.println(); drawCpuMove(firstMoves[randomMove]); b =1; } }

Code-Snippet #2Kurztext

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; Sonst 100 zurückgeben;}

Github
https://github.com/adafruit/Adafruit-GFX-Bibliothekhttps://github.com/adafruit/Adafruit-GFX-Bibliothek
Github
https://github.com/adafruit/Touch-Screen-Bibliothekhttps://github.com/adafruit/Touch-Screen-Bibliothek

Herstellungsprozess

  1. Schach
  2. Arduino-Gyroskop-Spiel mit MPU-6050
  3. Arduino Pong-Spiel - OLED-Display
  4. Tragbares kapazitives Touch-Piano
  5. Arduino-Gamecontroller
  6. Arduino-Pong-Spiel auf einer 24x16-Matrix mit MAX7219
  7. Arduino Touch Breakout-Spiel
  8. Giant Animatronics Lego Minfig Operationsspiel
  9. Pixel-Chaser-Spiel
  10. Automatisiertes Dino-Spiel mit Arduino