Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Arduino Touch Tic-Tac-Toe-spel

Componenten en benodigdheden

Arduino UNO
× 1
2.8" touchscreen
× 1

Apps en online services

Arduino IDE

Over dit project

Beste vrienden, welkom bij een nieuwe Arduino-tutorial! In deze gedetailleerde tutorial gaan we een Arduino Tic-Tac-Toe-spel bouwen. Zoals je kunt zien, gebruiken we een touchscreen en spelen we tegen de computer. Een eenvoudig spel zoals Tic-Tac-Toe is een geweldige introductie tot gameprogrammering en kunstmatige intelligentie. Ook al gebruiken we in deze game geen kunstmatige-intelligentie-algoritmen, we zullen begrijpen waarom kunstmatige-intelligentie-algoritmen nodig zijn in complexere games.

Het ontwikkelen van games voor Arduino is niet eenvoudig en kost veel tijd. Maar we kunnen enkele eenvoudige spellen voor Arduino bouwen omdat het leuk is en het ons in staat zal stellen om wat meer geavanceerde programmeeronderwerpen te verkennen, zoals kunstmatige intelligentie. Het is een geweldige leerervaring en aan het eind heb je een leuk spel voor de kinderen!

Laten we nu dit project bouwen.

Stap 1:Verkrijg alle onderdelen

De onderdelen die nodig zijn om dit project te bouwen zijn de volgende:

  • Een Arduino Uno
  • Een 2,8-inch touchscreen

De kosten van het project zijn erg laag. Het is slechts $ 15.

Voordat u probeert dit project te bouwen, kunt u de video bekijken die ik heb voorbereid over het aanraakscherm door hier op de kaart te klikken. Het zal u helpen de code te begrijpen en het aanraakscherm te kalibreren.

Stap 2:Het 2,8-inch kleurenaanraakscherm voor Arduino

Ik ontdekte dit touchscreen op banggood.com en besloot het te kopen om te proberen het in sommige van mijn projecten te gebruiken. Zoals u kunt zien, is het scherm niet duur, het kost ongeveer $ 11.

Haal het hier.

Het display biedt een resolutie van 320x240 pixels en wordt geleverd als een schild wat de verbinding met Arduino uiterst eenvoudig maakt. Zoals je kunt zien, gebruikt het display bijna alle digitale en analoge pinnen van de Arduino Uno. Bij gebruik van dit schild blijven er slechts 2 digitale pinnen en 1 analoge pin over voor onze projecten. Gelukkig werkt het display ook prima met de Arduino Mega, dus als we meer pinnen nodig hebben, kunnen we de Arduino Mega gebruiken in plaats van de Arduino Uno. Helaas werkt dit display niet met het Arduino Due of het Wemos D1 ESP8266 board. Een ander voordeel van het schild is dat het een micro SD-slot biedt dat heel gemakkelijk te gebruiken is.

Stap 3:Het project bouwen en testen

Nadat we het scherm op de Arduino Uno hebben aangesloten, kunnen we de code laden en zijn we klaar om te spelen.

Eerst drukken we op de knop "Game starten" en het spel begint. De Arduino speelt eerst. We kunnen dan onze zet spelen door simpelweg het scherm aan te raken. De Arduino speelt dan zijn zet enzovoort. De speler die erin slaagt drie van zijn merktekens in een horizontale, verticale of diagonale rij te plaatsen, wint het spel. Als het spel afgelopen is, verschijnt het Game Over-scherm. We kunnen dan op de play again-knop drukken om het spel opnieuw te starten.

De Arduino is erg goed in dit spel. Het zal de meeste spellen winnen, of als je een zeer goede speler bent, eindigt het spel in een gelijkspel. Ik heb dit algoritme opzettelijk ontworpen om enkele fouten te maken om de menselijke speler een kans te geven om te winnen. Door nog twee regels aan de code van het spel toe te voegen, kunnen we de Arduino onmogelijk maken het spel te verliezen. Maar hoe kan een chip van $ 2, de Arduino-CPU, het menselijk brein verslaan? Is het programma dat we hebben ontwikkeld slimmer dan het menselijk brein?

Stap 4:Het spelalgoritme

Laten we om deze vraag te beantwoorden eens kijken naar het algoritme dat ik heb geïmplementeerd.

De computer speelt altijd eerst. Deze beslissing alleen al maakt het spel veel gemakkelijker voor de Arduino om te winnen. De eerste zet is altijd een corner. De, tweede zet voor de Arduino is ook een willekeurige hoek van de rest, zonder dat je je druk maakt om de zet van de speler. Vanaf dit punt controleert de Arduino eerst of de speler de volgende zet kan winnen en blokkeert die zet. Als de speler niet in één zet kan winnen, speelt hij een hoekzet als deze beschikbaar is of een willekeurige zet uit de resterende. Dat is het, dit eenvoudige algoritme kan de menselijke speler elke keer verslaan of in het ergste geval resulteert het spel in een gelijkspel. Dit is niet het beste tic-tac-toe-spelalgoritme, maar wel een van de eenvoudigste.

Dit algoritme kan eenvoudig in Arduino worden geïmplementeerd, omdat het Tic-Tac-Toe-spel heel eenvoudig is en we het gemakkelijk kunnen analyseren en oplossen. Als we de game tree ontwerpen, kunnen we enkele winnende strategieën ontdekken en deze gemakkelijk in code implementeren of we kunnen de CPU de game tree in realtime laten berekenen en zelf de beste zet kiezen. Natuurlijk is het algoritme dat we in dit spel gebruiken heel eenvoudig, omdat het spel heel eenvoudig is. Als we proberen een winnend algoritme voor schaken te ontwerpen, zelfs als we de snelste computer gebruiken, kunnen we de spelboom in duizend jaar niet berekenen! Voor games als deze hebben we een andere aanpak nodig, we hebben wat kunstmatige intelligentie-algoritmen nodig en natuurlijk enorme verwerkingskracht. Meer hierover in een toekomstige video.

Stap 5:Code van het project

Laten we eens kijken naar de code van het project. We hebben drie bibliotheken nodig om de code te compileren.

  • Aangepaste Adafruit TFTLCD
  • Adafruit GFX
  • Touchscreen

Zoals je kunt zien, vereist zelfs een eenvoudig spel als dit meer dan 600 regels code. De code is complex, dus ik zal niet proberen het in een korte tutorial uit te leggen. Ik zal je echter de implementatie van het algoritme voor de Arduino-bewegingen laten zien.

Eerst spelen we twee willekeurige hoeken.

int firstMoves[]={0,2,6,8}; // zal deze posities eerst gebruiken voor (counter=0;counter<4;counter++) //Tel eerste gespeelde zetten { if(board[firstMoves[counter]]!=0) // Eerste zet wordt gespeeld door iemand { movesPlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=eersteBewegen[willekeurigeVerplaatsing]; if (bord [c]==0) { vertraging (1000); bord[c]=2; Serial.print(firstMoves[willekeurigeMove]); Serieel.println(); drawCpuMove(firstMoves[willekeurigeMove]); b=1; } } 

Vervolgens controleren we in elke ronde of de speler de volgende zet kan winnen.

int checkOpponent()
{ if(board[0]==1 &&board[1]==1 &&board[2]==0) return 2; else if(bord[0]==1 &&bord[1]==0 &&bord[2]==1) return 1; anders if (bord[1]==1 &&bord [2]==1 &&bord[0]==0) return 0; anders if (bord[3]==1 &&bord[4]==1 &&bord[5]==0) return 5; anders if (bord[4]==1 &&bord[5]==1&&bord[3]==0) return 3; anders if (bord[3]==1 &&bord[4]==0&&bord[5]==1) return 4; anders if (bord[1]==0 &&bord[4]==1&&bord[7]==1) return 1; anders geef 100 terug;}

Zo ja, dan blokkeren we die beweging meestal. We blokkeren niet alle zetten om de menselijke speler een kans te geven om te winnen. Kun jij zien welke zetten niet geblokkeerd zijn? Na het blokkeren van de zet spelen we een resterende corner of een willekeurige zet. U kunt de code bestuderen en eenvoudig uw eigen onverslaanbare algoritme implementeren. Zoals altijd kun je de code van het project bij deze tutorial vinden.

OPMERKING:aangezien Banggood hetzelfde beeldscherm biedt met twee verschillende beeldschermstuurprogramma's, als de bovenstaande code niet werkt, wijzigt u de initDisplay-functie in het volgende:

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

Stap 6:Laatste gedachten en verbeteringen

Zoals je kunt zien, kunnen we zelfs met een Arduino Uno een onverslaanbaar algoritme bouwen voor eenvoudige games. Dit project is geweldig, omdat het eenvoudig te bouwen is en tegelijkertijd een geweldige introductie tot kunstmatige intelligentie en game-programmering. Ik zal in de toekomst proberen wat meer geavanceerde projecten met kunstmatige intelligentie te bouwen met behulp van de krachtigere Raspberry Pi, dus houd ons in de gaten! Ik hoor graag uw mening over dit project.

Plaats uw opmerkingen hieronder en vergeet niet de tutorial leuk te vinden als u dit interessant vindt. Bedankt!

Code

  • Codefragment #1
  • Codefragment #2
Codefragment #1Platte tekst

int firstMoves[]={0,2,6,8}; // zal deze posities eerst gebruiken

for(counter=0;counter<4;counter++) //Tel eerste zetten gespeeld { if(board[firstMoves[counter]]!=0) // First move wordt gespeeld door iemand { movesPlayed++; } } do{ if(moves<=2) { int randomMove =random(4); int c=eersteBewegen[willekeurigeVerplaatsing]; if (bord [c]==0) { vertraging (1000); bord[c]=2; Serial.print(firstMoves[willekeurigeMove]); Serieel.println(); drawCpuMove(firstMoves[willekeurigeMove]); b=1; } }

Codefragment #2Platte tekst

int checkOpponent()
{ if(board[0]==1 &&board[1]==1 &&board[2]==0) return 2; else if(bord[0]==1 &&bord[1]==0 &&bord[2]==1) return 1; anders if (bord[1]==1 &&bord [2]==1 &&bord[0]==0) return 0; anders if (bord[3]==1 &&bord[4]==1 &&bord[5]==0) return 5; anders if (bord[4]==1 &&bord[5]==1&&bord[3]==0) return 3; anders if (bord[3]==1 &&bord[4]==0&&bord[5]==1) return 4; anders if (bord[1]==0 &&bord[4]==1&&bord[7]==1) return 1; anders geef 100 terug;}

Github
https://github.com/adafruit/Adafruit-GFX-Libraryhttps://github.com/adafruit/Adafruit-GFX-Library
Github
https://github.com/adafruit/Touch-Screen-Libraryhttps://github.com/adafruit/Touch-Screen-Library

Productieproces

  1. Schaken
  2. Arduino-gyroscoopspel met MPU-6050
  3. Arduino Pong Game - OLED-scherm
  4. Draagbare capacitieve aanraakpiano
  5. Arduino-gamecontroller
  6. Arduino Pong Game op 24x16 Matrix met MAX7219
  7. Arduino Touch Breakout-spel
  8. Giant Animatronics Lego Minfig Operation Game
  9. Pixel Chaser-game
  10. Geautomatiseerd Dino-spel met arduino
  11. Touch Controlled Light met Arduino