Kazalo:

Arduino Touch Tic Tac Toe Igra: 6 korakov (s slikami)
Arduino Touch Tic Tac Toe Igra: 6 korakov (s slikami)

Video: Arduino Touch Tic Tac Toe Igra: 6 korakov (s slikami)

Video: Arduino Touch Tic Tac Toe Igra: 6 korakov (s slikami)
Video: CS50 2015 – 10-я неделя 2024, Junij
Anonim
Image
Image
Arduino Touch Tic Tac Toe igra
Arduino Touch Tic Tac Toe igra
Arduino Touch Tic Tac Toe igra
Arduino Touch Tic Tac Toe igra
Arduino Touch Tic Tac Toe igra
Arduino Touch Tic Tac Toe igra

Dragi prijatelji, dobrodošli v drugi vadnici Arduino! V tej podrobni vadnici bomo zgradili igro Arduino Tic Tac Toe. Kot vidite, uporabljamo zaslon na dotik in igramo proti računalniku. Preprosta igra, kot je Tic Tac Toe, je odličen uvod v programiranje iger in umetno inteligenco. Čeprav v tej igri ne bomo uporabljali nobenih algoritmov za umetno inteligenco, bomo razumeli, zakaj so algoritmi za umetno inteligenco potrebni v bolj zapletenih igrah.

Razvoj iger za Arduino ni enostaven in zahteva veliko časa. Lahko pa zgradimo nekaj preprostih iger za Arduino, ker je zabavno in nam bo omogočilo raziskovanje nekaterih naprednejših programskih tem, kot je umetna inteligenca. To je odlična učna izkušnja in na koncu boste imeli lepo igro za otroke!

Zdaj zgradimo ta projekt.

Korak: Pridobite vse dele

Image
Image
2.8
2.8

Za izdelavo tega projekta so potrebni naslednji deli:

Arduino Uno ▶

2,8 -palčni zaslon na dotik ▶

Stroški projekta so zelo nizki. Stane le 15 $

Preden poskušate zgraditi ta projekt, si oglejte videoposnetek, ki sem ga pripravil o zaslonu na dotik. Priložil sem ga v to navodilo. Pomagal vam bo razumeti kodo in umeriti zaslon na dotik.

2. korak: 2,8 -palčni barvni zaslon na dotik za Arduino

Image
Image
2.8
2.8
2.8
2.8

Ta zaslon na dotik sem odkril na banggood.com in se odločil za nakup, da bi ga poskusil uporabiti v nekaterih svojih projektih. Kot lahko vidite, je zaslon poceni in stane okoli 11 USD.

Pridobite ga tukaj ▶

Zaslon ponuja ločljivost 320x240 slikovnih pik in je ščit, zaradi česar je povezava z Arduinom izjemno enostavna. Kot lahko vidite, zaslon uporablja skoraj vse digitalne in analogne zatiče Arduino Uno. Ko uporabljamo ta ščit, imamo za naše projekte le 2 digitalna zatiča in 1 analogni zatič. Na srečo zaslon dobro deluje tudi z Arduino Mega, zato lahko, ko potrebujemo več zatičev, namesto Arduino Uno uporabimo Arduino Mega. Žal ta zaslon ne deluje s ploščo Arduino Due ali Wemos D1 ESP8266. Druga prednost ščita je, da ponuja režo za mikro SD, ki je zelo enostavna za uporabo.

3. korak: Zgradite projekt in ga preizkusite

Gradnja projekta in njegovo testiranje
Gradnja projekta in njegovo testiranje
Gradnja projekta in njegovo testiranje
Gradnja projekta in njegovo testiranje
Gradnja projekta in njegovo testiranje
Gradnja projekta in njegovo testiranje

Po priključitvi zaslona na Arduino Uno lahko naložimo kodo in pripravljeni smo za igro.

Najprej pritisnemo gumb »Začni igro« in igra se začne. Najprej igra Arduino. Svojo potezo lahko nato preprosto odigramo tako, da se dotaknemo zaslona. Arduino nato igra svojo potezo itd. Igralec, ki uspe postaviti tri svoje oznake v vodoravno, navpično ali diagonalno vrsto, zmaga v igri. Ko je igre konec, se prikaže zaslon Game Over. Nato lahko znova pritisnemo gumb za predvajanje, da znova začnemo igro.

Arduino je v tej igri zelo dober. V večini tekem bo zmagal, če pa ste zelo dober igralec, se bo igra končala z neodločenim izidom. Ta algoritem sem namenoma naredil, da naredi nekaj napak, da bi človeškemu igralcu dal priložnost za zmago. Če kodi igre dodamo še dve vrstici, lahko Arduinu onemogočimo izgubo igre. Kako pa lahko 2 -milijonski čip, procesor Arduino, premaga človeške možgane? Je program, ki smo ga razvili, pametnejši od človeških možganov?

4. korak: Algoritem igre

Algoritem igre
Algoritem igre
Algoritem igre
Algoritem igre

Za odgovor na to vprašanje poglejmo algoritem, ki sem ga uvedel.

Računalnik vedno igra prvi. Že sama ta odločitev Arduinu olajša igro. Prva poteza je vedno kot. Druga poteza za Arduino je tudi naključni kot iz preostalega, ne da bi sploh skrbel za igralčevo potezo. Od tega trenutka naprej Arduino najprej preveri, ali lahko igralec v naslednji potezi zmaga, in blokira to potezo. Če igralec ne more zmagati v eni sami potezi, izvede potezo v kotu, če je na voljo, ali naključno od preostalih. To je to, ta preprost algoritem lahko vsakič premaga človeškega igralca ali pa bo v najslabšem primeru igra povzročila neodločeno. To ni najboljši algoritem igre tic tac toe, ampak eden najpreprostejših.

Ta algoritem je mogoče enostavno implementirati v Arduino, ker je igra Tic Tac Toe zelo preprosta in jo lahko enostavno analiziramo in rešimo. Če oblikujemo drevo iger, lahko odkrijemo nekaj zmagovalnih strategij in jih preprosto implementiramo v kodo, ali pa lahko CPU -ju v realnem času izračunamo drevo iger in sami izberemo najboljšo potezo. Seveda je algoritem, ki ga uporabljamo v tej igri, zelo preprost, saj je igra zelo preprosta. Če poskušamo oblikovati zmagovalni algoritem za šah, tudi če uporabljamo najhitrejši računalnik, drevesa igre ne moremo izračunati v tisoč letih! Za takšne igre potrebujemo drug pristop, potrebujemo nekaj algoritmov umetne inteligence in seveda ogromno procesorsko moč. Več o tem v prihodnjem videu.

5. korak: Koda projekta

Koda projekta
Koda projekta

Na hitro poglejmo kodo projekta. Za sestavljanje kode potrebujemo tri knjižnice.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Zaslon na dotik:

Kot lahko vidite, tudi preprosta igra, kot je ta, zahteva več kot 600 vrstic kode. Koda je zapletena, zato je ne bom poskušal razložiti v kratki vadnici. Pokazal pa vam bom implementacijo algoritma za poteze Arduino.

Sprva igramo dva naključna kota.

<int firstMoves = {0, 2, 6, 8}; // bo te položaje najprej uporabil za (števec = 0; števec <4; števec ++) // Šteje prve odigrane poteze {if (deska [firstMoves [counter]! = 0) // Prvo potezo igra nekdo {potezPlayed ++; }} naredi {if (premakne <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (tabla [c] == 0) {zamuda (1000); deska [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Nato v vsakem krogu preverimo, ali lahko igralec v naslednji potezi zmaga.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; sicer če (tabla [0] == 1 && deska [1] == 0 && deska [2] == 1) vrne 1; else if (board [1] == 1 && board [2] == 1 && board [0] == 0) return 0; sicer 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; drugače vrni 100; }

Če da, to potezo večinoma blokiramo. Ne blokiramo vseh potez, da bi človeškemu igralcu dali priložnost za zmago. Ali lahko ugotovite, kateri premiki niso blokirani? Ko blokiramo potezo, igramo preostali kot ali naključno potezo. Kodo lahko preučite in preprosto uporabite svoj nepremagljiv algoritem. Kot vedno lahko najdete kodo projekta, priloženo temu navodilu.

OPOMBA: Ker Banggood ponuja isti zaslon z dvema različnima gonilnikoma zaslona, če zgornja koda ne deluje, spremenite funkcijo initDisplay na naslednje:

void initDisplay ()

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

Korak 6: Končne misli in izboljšave

Zadnje misli in izboljšave
Zadnje misli in izboljšave

Kot lahko vidite, tudi z Arduino Uno lahko zgradimo neprekosljiv algoritem za preproste igre. Ta projekt je odličen, saj ga je enostavno zgraditi in hkrati odličen uvod v umetno inteligenco in programiranje iger. V prihodnosti bom z umetno inteligenco poskušal zgraditi nekaj naprednejših projektov z uporabo močnejšega Raspberry Pi, zato ostanite z nami! Rad bi slišal vaše mnenje o tem projektu.

Spodaj objavite svoje komentarje in ne pozabite všečkati navodil, če se vam zdi zanimivo. Hvala!

Priporočena: