Inhoudsopgave:

Arduino Touch Tic Tac Toe Game - Ajarnpa
Arduino Touch Tic Tac Toe Game - Ajarnpa

Video: Arduino Touch Tic Tac Toe Game - Ajarnpa

Video: Arduino Touch Tic Tac Toe Game - Ajarnpa
Video: Arduino Game Project: Tic Tac Toe Game with a touch screen and an Arduino from Banggood.com 2024, Juni-
Anonim
Image
Image
Arduino Touch Tic Tac Toe-spel
Arduino Touch Tic Tac Toe-spel
Arduino Touch Tic Tac Toe-spel
Arduino Touch Tic Tac Toe-spel
Arduino Touch Tic Tac Toe-spel
Arduino Touch Tic Tac Toe-spel

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. Hoewel we in dit spel geen kunstmatige-intelligentie-algoritmen zullen gebruiken, zullen we 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 einde heb je een leuk spel voor de kinderen!

Laten we nu dit project bouwen.

Stap 1: Verkrijg alle onderdelen

Image
Image
de 2.8
de 2.8

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 $

Bekijk de video die ik heb voorbereid over het aanraakscherm voordat u probeert dit project te bouwen. Ik heb het in dit instructable bijgevoegd. Het zal u helpen de code te begrijpen en het aanraakscherm te kalibreren.

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

Image
Image
de 2.8
de 2.8
de 2.8
de 2.8

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.

Download 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

Het project bouwen en testen
Het project bouwen en testen
Het project bouwen en testen
Het project bouwen en testen
Het project bouwen en testen
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 voorbij 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 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 ervoor zorgen dat de Arduino het spel niet kan verliezen. Maar hoe kan een 2$-chip, de Arduino-CPU, het menselijk brein verslaan? Is het door ons ontwikkelde programma slimmer dan het menselijk brein?

Stap 4: Het spelalgoritme

Het spelalgoritme
Het spelalgoritme
Het spelalgoritme
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 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

Code van het project
Code van het project

Laten we snel de code van het project bekijken. We hebben drie bibliotheken nodig om de code te compileren.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. 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=eerste zet[willekeurige zet]; 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(bord[0]==1 && bord[1]==1 && bord[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 100 teruggeven; }

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 vindt u de code van het project bijgevoegd op deze instructable.

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

ongeldig initDisplay()

{ tft.reset(); tft.begin(0x9341); tft.setRotatie(3); }

Stap 6: Laatste gedachten en verbeteringen

Laatste gedachten en verbeteringen
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 instructable leuk te vinden als u dit interessant vindt. Bedankt!

Aanbevolen: