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, Jun
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 ekran osjetljiv na dodir i igramo se protiv računara. Jednostavna igra poput Tic Tac Toe je odličan 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 lak i zahtijeva puno vremena. Ali 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 projekat.

Korak 1: Nabavite sve dijelove

Image
Image
2.8
2.8

Dijelovi potrebni za izgradnju ovog projekta su sljedeći:

Arduino Uno ▶

2.8”ekran osetljiv na dodir ▶

Cijena projekta je vrlo niska. To je samo 15 dolara

Prije nego što pokušate izgraditi ovaj projekt, pogledajte video koji sam pripremio o ekranu osjetljivom na dodir. Priložio sam ga u ovu uputu. Pomoći će vam da razumijete kôd i kalibrirate 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 ekran osjetljiv na dodir na banggood.com i odlučio sam ga kupiti kako bih ga pokušao koristiti u nekim od svojih projekata. Kao što vidite, ekran je jeftin, košta oko 11 USD.

Nabavite ga ovdje ▶

Ekran nudi rezoluciju 320x240 piksela i dolazi kao štit koji povezivanje s Arduinom čini izuzetno lakim. Kao što vidite, zaslon koristi gotovo sve digitalne i analogne pinove Arduino Uno. Kada koristimo ovaj štit, preostaju nam samo 2 digitalna pina i 1 analogni pin za naše projekte. Na sreću, 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 ekrana s Arduino Uno, možemo učitati kôd i spremni smo za igru.

Prvo pritisnemo tipku “Start Game” i igra počinje. Arduino svira prvi. Tada možemo odigrati svoj potez jednostavnim dodirom ekrana. 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. Kada igra završi, pojavljuje se ekran Game Over. Zatim možemo ponovno pritisnuti tipku za reprodukciju za ponovno pokretanje igre.

Arduino je vrlo dobar u ovoj igri. Pobijedit će u većini utakmica, ili ako ste vrlo dobar igrač igra će završiti neriješeno. Namjerno sam dizajnirao 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. Ali 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čunar uvek igra prvi. Sama ova odluka Arduinu čini igru mnogo lakšom za pobjedu. Prvi potez je uvijek korner. Drugi potez za Arduino je također nasumični ugao od preostalog, bez ikakve brige 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, svira korner ako je dostupan ili nasumični iz preostalog. 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 algoritam može se 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 dobitne strategije i lako ih implementirati u kôd ili možemo dozvoliti CPU -u da izračuna stablo igre u stvarnom vremenu i sam odabere najbolji potez. Naravno, algoritam koji koristimo u ovoj igri je vrlo jednostavan, jer je igra vrlo jednostavna. Ako pokušamo dizajnirati pobjednički algoritam za šah, čak i ako koristimo najbrži računar, ne možemo izračunati stablo igre za hiljadu 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 kompajliranje koda potrebne su nam tri biblioteke.

  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 linija koda. Kôd je složen, pa ga neću pokušavati 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 (tabla [firstMoves [counter]! = 0) // Prvi potez igra neko {potezPlayed ++; }} uradi {if (pomaci <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (tabla [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 sa Arduino Uno, možemo izgraditi nenadmašan algoritam za jednostavne igre. Ovaj je projekt odličan jer se lako gradi, a ujedno je 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 moćniji Raspberry Pi pa budite u toku! Volio bih čuti vaše mišljenje o ovom projektu.

Molimo vas da objavite svoje komentare ispod i ne zaboravite lajkati upute ako vam se učine zanimljivim. Hvala!

Preporučuje se: