Obsah:

Hra Arduino Touch Tic Tac Toe: 6 krokov (s obrázkami)
Hra Arduino Touch Tic Tac Toe: 6 krokov (s obrázkami)

Video: Hra Arduino Touch Tic Tac Toe: 6 krokov (s obrázkami)

Video: Hra Arduino Touch Tic Tac Toe: 6 krokov (s obrázkami)
Video: Leslie Kean on David Grusch (UFO Whistleblower): Non-Human Intelligence, Recovered UFOs, UAP, & more 2024, November
Anonim
Image
Image
Hra Arduino Touch Tic Tac Toe
Hra Arduino Touch Tic Tac Toe
Hra Arduino Touch Tic Tac Toe
Hra Arduino Touch Tic Tac Toe
Hra Arduino Touch Tic Tac Toe
Hra Arduino Touch Tic Tac Toe

Milí priatelia, vitajte pri ďalšom návode na Arduino! V tomto podrobnom návode postavíme hru Arduino Tic Tac Toe. Ako vidíte, používame dotykový displej a hráme proti počítaču. Jednoduchá hra, ako je Tic Tac Toe, je skvelým úvodom do programovania hier a umelej inteligencie. Aj keď v tejto hre nebudeme používať žiadne algoritmy umelej inteligencie, pochopíme, prečo sú algoritmy umelej inteligencie požadované v zložitejších hrách.

Vývoj hier pre Arduino nie je jednoduchý a vyžaduje si veľa času. Môžeme však pre Arduino vytvoriť niekoľko jednoduchých hier, pretože sú zábavné a umožní nám preskúmať pokročilejšie témy z oblasti programovania, ako je umelá inteligencia. Je to úžasný zážitok z učenia a na konci budete mať peknú hru pre deti!

Teraz postavme tento projekt.

Krok 1: Získajte všetky diely

Image
Image
2.8
2.8

Časti potrebné na výstavbu tohto projektu sú tieto:

Arduino Uno ▶

2,8 palcový dotykový displej ▶

Náklady na projekt sú veľmi nízke. Stojí iba 15 dolárov

Predtým, ako sa pokúsite postaviť tento projekt, pozrite si video, ktoré som pripravil o dotykovom displeji. Prikladám to v tomto návode. Pomôže vám to porozumieť kódu a kalibrovať dotykový displej.

Krok 2: 2,8 palcový dotykový farebný displej pre Arduino

Image
Image
2.8
2.8
2.8
2.8

Tento dotykový displej som objavil na banggood.com a rozhodol som sa ho kúpiť, aby som ho skúsil použiť v niektorých svojich projektoch. Ako vidíte, displej je lacný a stojí okolo 11 dolárov.

Získajte ho tu ▶

Displej ponúka rozlíšenie 320 x 240 pixelov a je dodávaný ako štít, ktorý mimoriadne uľahčuje spojenie s Arduinom. Ako vidíte, displej používa takmer všetky digitálne a analógové piny Arduino Uno. Pri použití tohto štítu nám pre naše projekty zostanú iba 2 digitálne piny a 1 analógový kolík. Našťastie displej funguje dobre aj s Arduino Mega, takže keď potrebujeme viac pinov, môžeme namiesto Arduino Uno použiť Arduino Mega. Tento displej bohužiaľ nefunguje s doskou Arduino Due alebo Wemos D1 ESP8266. Ďalšou výhodou štítu je, že ponúka slot micro SD, ktorý sa veľmi ľahko používa.

Krok 3: Budovanie projektu a testovanie

Budovanie projektu a testovanie
Budovanie projektu a testovanie
Budovanie projektu a testovanie
Budovanie projektu a testovanie
Budovanie projektu a testovanie
Budovanie projektu a testovanie

Po pripojení obrazovky k Arduino Uno môžeme načítať kód a sme pripravení hrať.

Najprv stlačíme tlačidlo „Spustiť hru“a hra sa spustí. Arduino hrá ako prvé. Potom môžeme svoj pohyb hrať jednoduchým dotykom obrazovky. Arduino potom zahrá svoj ťah a podobne. Hráč, ktorý uspeje v umiestnení troch svojich značiek do horizontálneho, vertikálneho alebo diagonálneho radu, vyhráva. Keď sa hra skončí, zobrazí sa obrazovka Game Over. Potom môžeme hru znova spustiť stlačením tlačidla Prehrať znova.

Arduino je v tejto hre veľmi dobré. Vyhrá väčšinu hier, alebo ak ste veľmi dobrý hráč, hra sa skončí remízou. Tento algoritmus som úmyselne navrhol tak, aby robil niekoľko chýb, aby mal ľudský hráč šancu vyhrať. Pridaním ďalších dvoch riadkov do kódu hry dokážeme znemožniť Arduino stratu hry. Ako však môže 2 $ čip, procesor Arduino, poraziť ľudský mozog? Je program, ktorý sme vyvinuli, múdrejší ako ľudský mozog?

Krok 4: Herný algoritmus

Herný algoritmus
Herný algoritmus
Herný algoritmus
Herný algoritmus

Na zodpovedanie tejto otázky sa pozrime na algoritmus, ktorý som implementoval.

Počítač vždy hrá ako prvý. Už len toto rozhodnutie veľmi uľahčuje hre Arduino vyhrať. Prvý krok je vždy roh. Druhý ťah pre Arduino je tiež náhodný roh od zvyšku bez toho, aby sa vôbec staral o pohyb hráča. Od tohto bodu Arduino najskôr skontroluje, či hráč môže vyhrať v nasledujúcom ťahu a či blokuje tento ťah. Ak hráč nemôže vyhrať jediným ťahom, bude hrať rohový ťah, ak je k dispozícii, alebo náhodný zo zostávajúceho. To je všetko, tento jednoduchý algoritmus môže poraziť ľudského hráča zakaždým, alebo v najhoršom prípade hra skončí remízou. Toto nie je najlepší tic tac toe algoritmus hry, ale jeden z najjednoduchších.

Tento algoritmus je možné v Arduine ľahko implementovať, pretože hra Tic Tac Toe je veľmi jednoduchá a môžeme ju ľahko analyzovať a vyriešiť. Ak navrhneme herný strom, môžeme objaviť niektoré víťazné stratégie a ľahko ich implementovať v kóde alebo môžeme nechať CPU vypočítať strom hry v reálnom čase a vybrať si najlepší ťah sám. Algoritmus, ktorý v tejto hre používame, je samozrejme veľmi jednoduchý, pretože hra je veľmi jednoduchá. Ak sa pokúsime navrhnúť víťazný algoritmus pre šach, aj keď použijeme najrýchlejší počítač, nemôžeme vypočítať strom hry za tisíc rokov! V prípade hier, ako je táto, potrebujeme iný prístup, potrebujeme niekoľko algoritmov umelej inteligencie a samozrejme obrovský výpočtový výkon. Viac o tom v budúcom videu.

Krok 5: Kód projektu

Kód projektu
Kód projektu

Pozrime sa rýchlo na kód projektu. Na zostavenie kódu potrebujeme tri knižnice.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Dotyková obrazovka:

Ako vidíte, aj taká jednoduchá hra vyžaduje viac ako 600 riadkov kódu. Kód je zložitý, takže sa ho nepokúsim vysvetliť v krátkom návode. Ukážem vám však implementáciu algoritmu pre pohyby Arduina.

Najprv zahráme dva náhodné rohy.

<int firstMoves = {0, 2, 6, 8}; // použije tieto pozície ako prvé (počítadlo = 0; počítadlo <4; počítadlo ++) // počet prvých odohratých ťahov {if (doska [prvý pohyb [počítadlo]! = 0) // prvý ťah niekto zahrá {movePlayed ++; }} robiť {if (ťahy <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (board [c] == 0) {delay (1000); doska [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Ďalej v každom kole kontrolujeme, či hráč môže vyhrať v nasledujúcom ťahu.

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; inak vráťte 100; }

Ak áno, väčšinou tento pohyb zablokujeme. Neblokujeme všetky ťahy, aby sme dali ľudskému hráčovi šancu vyhrať. Môžete zistiť, ktoré pohyby nie sú zablokované? Po zablokovaní ťahu zahráme zostávajúci roh, alebo náhodný ťah. Môžete si preštudovať kód a ľahko implementovať svoj vlastný bezkonkurenčný algoritmus. Ako vždy, v tomto návode nájdete kód projektu.

POZNÁMKA: Keďže Banggood ponúka rovnaký displej s dvoma rôznymi ovládačmi displeja, ak vyššie uvedený kód nefunguje, zmeňte funkciu initDisplay na nasledujúcu:

void initDisplay ()

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

Krok 6: Záverečné myšlienky a vylepšenia

Záverečné myšlienky a vylepšenia
Záverečné myšlienky a vylepšenia

Ako vidíte, dokonca aj s Arduino Uno dokážeme vytvoriť jednoduchý algoritmus pre jednoduché hry. Tento projekt je skvelý, pretože je ľahké ho postaviť, a zároveň je to skvelý úvod do umelej inteligencie a programovania hier. V budúcnosti sa pokúsim vybudovať pokročilejšie projekty s umelou inteligenciou pomocou výkonnejšieho Raspberry Pi, takže zostaňte naladení! Rád by som počul váš názor na tento projekt.

Uverejnite svoje komentáre nižšie a nezabudnite, že sa vám páči návod, ak vás to bude zaujímať. Vďaka!

Odporúča: