Sadržaj:

Arduino Touch Tic Tac Toe igra: 6 koraka (sa slikama)
Arduino Touch Tic Tac Toe igra: 6 koraka (sa slikama)

Video: Arduino Touch Tic Tac Toe igra: 6 koraka (sa slikama)

Video: Arduino Touch Tic Tac Toe igra: 6 koraka (sa slikama)
Video: CS50 2015 – 10-я неделя 2024, Lipanj
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 u još jedan Arduino vodič! U ovom detaljnom vodiču napravit ćemo igru Arduino Tic Tac Toe. Kao što vidite, koristimo zaslon osjetljiv na dodir i igramo se protiv računala. Jednostavna igra poput Tic Tac Toe je izvrstan uvod u programiranje igara i umjetnu inteligenciju. Iako u ovoj igri nećemo koristiti nikakve algoritme umjetne inteligencije, razumjet ćemo zašto su algoritmi umjetne inteligencije potrebni u složenijim igrama.

Razvoj igara za Arduino nije jednostavan i zahtijeva puno vremena. No, možemo stvoriti neke jednostavne igre za Arduino jer je zabavno i omogućit će nam da istražimo neke naprednije programske teme, poput umjetne inteligencije. To je sjajno iskustvo učenja i na kraju ćete imati lijepu igru za djecu!

Izgradimo sada ovaj projekt.

Korak 1: Nabavite sve dijelove

Image
Image
2.8
2.8

Dijelovi potrebni za izgradnju ovog projekta su sljedeći:

Arduino Uno ▶

Zaslon osjetljiv na dodir od 2,8 inča ▶

Cijena projekta je vrlo niska. To je samo 15 dolara

Prije nego što pokušate izgraditi ovaj projekt, pogledajte video koji sam pripremio o zaslonu osjetljivom na dodir. Priložio sam ga u ovu uputu. Pomoći će vam razumjeti kôd i kalibrirati zaslon osjetljiv na dodir.

Korak 2: 2,8 -inčni zaslon u boji osjetljiv na dodir za Arduino

Image
Image
2.8
2.8
2.8
2.8

Otkrio sam ovaj zaslon osjetljiv na dodir na banggood.com i odlučio sam ga kupiti kako bih ga pokušao koristiti u nekim svojim projektima. Kao što vidite, zaslon je jeftin, košta oko 11 USD.

Preuzmite ga ovdje ▶

Zaslon nudi rezoluciju 320x240 piksela i dolazi kao štit koji povezivanje s Arduinom čini iznimno lakim. Kao što vidite, zaslon koristi gotovo sve digitalne i analogne pinove Arduino Uno. Kad koristimo ovaj štit, ostaju nam samo 2 digitalna pina i 1 analogni pin za naše projekte. Srećom, zaslon radi dobro i s Arduino Megom, pa kada nam zatreba više pinova možemo koristiti Arduino Mega umjesto Arduino Uno. Nažalost, ovaj zaslon ne radi s Arduino Due ili Wemos D1 ESP8266 pločom. Još jedna prednost štita je to što nudi utor za mikro SD koji je vrlo jednostavan za korištenje.

Korak 3: Izgradnja projekta i njegovo testiranje

Izgradnja projekta i njegovo testiranje
Izgradnja projekta i njegovo testiranje
Izgradnja projekta i njegovo testiranje
Izgradnja projekta i njegovo testiranje
Izgradnja projekta i njegovo testiranje
Izgradnja projekta i njegovo testiranje

Nakon povezivanja zaslona s Arduino Uno, možemo učitati kôd i spremni smo za igru.

Najprije pritisnemo gumb "Pokreni igru" i igra počinje. Arduino svira prvi. Tada možemo odigrati svoj potez jednostavnim dodirom zaslona. Arduino tada igra svoj potez i tako dalje. Igrač koji uspije postaviti tri svoje oznake u vodoravni, okomiti ili dijagonalni red pobjeđuje u igri. Kad igra završi, pojavit će se zaslon Game Over. Zatim možemo ponovno pritisnuti tipku za reprodukciju za ponovno pokretanje igre.

Arduino je jako dobar u ovoj igri. Pobijedit će u većini utakmica, ili ako ste jako dobar igrač igra će završiti neriješeno. Namjerno sam osmislio ovaj algoritam da napravi neke greške kako bi čovjeku dao priliku za pobjedu. Dodavanjem još dva retka kodu igre, možemo onemogućiti Arduino da izgubi igru. No, kako čip od 2 USD, Arduino CPU, može pobijediti ljudski mozak? Je li program koji smo razvili pametniji od ljudskog mozga?

Korak 4: Algoritam igre

Algoritam igre
Algoritam igre
Algoritam igre
Algoritam igre

Da bismo odgovorili na ovo pitanje, pogledajmo algoritam koji sam implementirao.

Računalo uvijek igra prvo. Sama ova odluka Arduinu znatno olakšava pobjedu u igri. Prvi potez je uvijek korner. Drugi potez za Arduino također je nasumični kutak od preostalih, a da uopće ne brinete o potezu igrača. Od ovog trenutka, Arduino prvo provjerava može li igrač pobijediti u sljedećem potezu i blokira taj potez. Ako igrač ne može pobijediti u jednom potezu, pušta kutni potez ako je dostupan ili nasumičan iz preostalih. To je to, ovaj jednostavan algoritam može pobijediti ljudskog igrača svaki put ili će u najgorem slučaju igra rezultirati neriješeno. Ovo nije najbolji algoritam igre tic tac toe, ali jedan od najjednostavnijih.

Ovaj se algoritam može lako implementirati u Arduino, jer je igra Tic Tac Toe vrlo jednostavna, a mi je možemo lako analizirati i riješiti. Ako dizajniramo stablo igara, možemo otkriti neke pobjedničke strategije i lako ih implementirati u kôd ili možemo dopustiti CPU -u da izračuna stablo igre u stvarnom vremenu i sam odabere najbolji potez. Naravno, algoritam koji koristimo u ovoj igri vrlo je jednostavan, jer je igra vrlo jednostavna. Pokušamo li osmisliti pobjednički algoritam za šah, čak i ako koristimo najbrže računalo, ne možemo izračunati stablo igre u tisuću godina! Za ovakve igre potreban nam je drugi pristup, potrebni su nam algoritmi umjetne inteligencije i naravno ogromna procesorska snaga. Više o tome u budućem videu.

Korak 5: Kod projekta

Kod projekta
Kod projekta

Pogledajmo nakratko kôd projekta. Za sastavljanje koda potrebne su nam tri knjižnice.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Zaslon osjetljiv na dodir:

Kao što vidite, čak i jednostavna igra poput ove zahtijeva više od 600 redaka koda. Kôd je složen pa ga neću pokušati objasniti u kratkom vodiču. Ipak ću vam pokazati implementaciju algoritma za Arduino poteze.

U početku igramo dva slučajna kornera.

<int firstMoves = {0, 2, 6, 8}; // prvo će koristiti ove pozicije za (brojač = 0; brojač <4; brojač ++) // Brojati prve odigrane poteze {if (ploča [firstMoves [counter]! = 0) // Prvi potez igra netko {potezPlayed ++; }} učiniti {if (pomiče se <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (ploča [c] == 0) {kašnjenje (1000); ploča [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Zatim u svakoj rundi provjeravamo može li igrač pobijediti u sljedećem potezu.

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 vrati 100; }

Ako da, blokiramo taj potez, najčešće. Ne blokiramo sve poteze kako bismo ljudskom igraču dali priliku za pobjedu. Možete li pronaći koji potezi nisu blokirani? Nakon blokiranja poteza, sviramo preostali korner ili nasumični potez. Možete proučiti kôd i lako implementirati vlastiti nepobjedivi algoritam. Kao i uvijek, kôd projekta možete pronaći u prilogu ove upute.

NAPOMENA: Budući da Banggood nudi isti zaslon s dva različita upravljačka programa, ako gornji kôd ne radi, promijenite funkciju initDisplay na sljedeće:

void initDisplay ()

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

Korak 6: Završna razmišljanja i poboljšanja

Završna razmišljanja i poboljšanja
Završna razmišljanja i poboljšanja

Kao što vidite, čak i s Arduino Uno možemo izgraditi nepobjediv algoritam za jednostavne igre. Ovaj je projekt izvrstan jer ga je lako izgraditi, a ujedno i odličan uvod u umjetnu inteligenciju i programiranje igara. Pokušat ću u budućnosti izgraditi neke naprednije projekte s umjetnom inteligencijom koristeći snažniji Raspberry Pi pa ostanite s nama! Volio bih čuti vaše mišljenje o ovom projektu.

Molimo vas da svoje komentare objavite ispod i ne zaboravite lajkati upute ako vam budu zanimljive. Hvala!

Preporučeni: