Obsah:

Hra Arduino Touch Tic Tac Toe: 6 kroků (s obrázky)
Hra Arduino Touch Tic Tac Toe: 6 kroků (s obrázky)

Video: Hra Arduino Touch Tic Tac Toe: 6 kroků (s obrázky)

Video: Hra Arduino Touch Tic Tac Toe: 6 kroků (s obrázky)
Video: DIY Tic-Tac-Toe Game using Arduino #shorts 2024, Listopad
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

Vážení přátelé, vítejte u dalšího tutoriálu k Arduinu! V tomto podrobném tutoriálu budeme stavět hru Arduino Tic Tac Toe. Jak vidíte, používáme dotykový displej a hrajeme proti počítači. Jednoduchá hra, jako je Tic Tac Toe, je skvělým úvodem do programování her a umělé inteligence. I když v této hře nebudeme používat žádné algoritmy umělé inteligence, pochopíme, proč jsou algoritmy umělé inteligence ve složitějších hrách vyžadovány.

Vývoj her pro Arduino není jednoduchý a vyžaduje hodně času. Můžeme však pro Arduino vytvořit několik jednoduchých her, protože je zábavné a umožní nám prozkoumat některá pokročilejší témata programování, jako je umělá inteligence. Je to skvělý zážitek z učení a na konci budete mít pěknou hru pro děti!

Pojďme nyní vytvořit tento projekt.

Krok 1: Získejte všechny díly

Image
Image
2.8
2.8

Díly potřebné k vybudování tohoto projektu jsou následující:

Arduino Uno ▶

2,8”dotykový displej ▶

Náklady na projekt jsou velmi nízké. Je to jen 15 $

Než se pokusíte vytvořit tento projekt, podívejte se na video, které jsem o dotykovém displeji připravil. Připojil jsem to v tomto návodu. Pomůže vám porozumět kódu a kalibrovat dotykovou obrazovku.

Krok 2: 2,8 "dotykový barevný displej pro Arduino

Image
Image
2.8
2.8
2.8
2.8

Tuto dotykovou obrazovku jsem objevil na banggood.com a rozhodl jsem se ji koupit, abych ji zkusil použít v některých svých projektech. Jak vidíte, displej je levný, stojí kolem 11 dolarů.

Získejte jej zde ▶

Displej nabízí rozlišení 320 x 240 pixelů a je dodáván jako štít, díky kterému je spojení s Arduinem velmi snadné. Jak vidíte, displej využívá téměř všechny digitální a analogové piny Arduino Uno. Při použití tohoto štítu nám pro naše projekty zbývají pouze 2 digitální piny a 1 analogový pin. Naštěstí displej funguje dobře i s Arduino Mega, takže když potřebujeme více pinů, můžeme místo Arduino Uno použít Arduino Mega. Tento displej bohužel nefunguje s deskou Arduino Due nebo Wemos D1 ESP8266. Další výhodou štítu je, že nabízí slot micro SD, který se velmi snadno používá.

Krok 3: Sestavení projektu a jeho testování

Budování projektu a jeho testování
Budování projektu a jeho testování
Budování projektu a jeho testování
Budování projektu a jeho testování
Budování projektu a jeho testování
Budování projektu a jeho testování

Po připojení obrazovky k Arduino Uno můžeme načíst kód a jsme připraveni hrát.

Nejprve stiskneme tlačítko „Spustit hru“a hra se spustí. Arduino hraje jako první. Poté můžeme svůj tah hrát jednoduše dotykem obrazovky. Arduino poté zahraje svůj tah a tak dále. Hráč, který uspěje v umístění tří svých značek do horizontální, vertikální nebo diagonální řady, vyhrává hru. Když hra skončí, objeví se obrazovka Game Over. Poté můžeme hru znovu spustit stisknutím tlačítka Přehrát znovu.

Arduino je v této hře velmi dobré. Vyhraje většinu her, nebo pokud jste velmi dobrý hráč, hra skončí remízou. Tento algoritmus jsem záměrně navrhl tak, aby dělal chyby, aby měl lidský hráč šanci vyhrát. Přidáním dalších dvou řádků do kódu hry můžeme znemožnit Arduino prohrát hru. Jak ale může 2 $ čip, CPU Arduino, porazit lidský mozek? Je program, který jsme vyvinuli, chytřejší než lidský mozek?

Krok 4: Algoritmus hry

Herní algoritmus
Herní algoritmus
Herní algoritmus
Herní algoritmus

Abychom na tuto otázku odpověděli, podívejme se na algoritmus, který jsem implementoval.

Počítač vždy hraje jako první. Toto rozhodnutí samo o sobě značně usnadňuje výhru hry Arduino. První tah je vždy roh. Druhý tah pro Arduino je také náhodný roh od zbývajícího, aniž by se vůbec staral o tah hráče. Od tohoto okamžiku Arduino nejprve kontroluje, zda hráč může vyhrát v dalším tahu a blokuje tento tah. Pokud hráč nemůže vyhrát jediným tahem, zahraje tah rohem, pokud je k dispozici, nebo náhodný ze zbývajících. To je vše, tento jednoduchý algoritmus může porazit lidského hráče pokaždé, nebo v nejhorším případě hra povede k remíze. Nejedná se o nejlepší algoritmus tic tac toe her, ale o jeden z nejjednodušších.

Tento algoritmus lze v Arduinu implementovat snadno, protože hra Tic Tac Toe je velmi jednoduchá a můžeme ji snadno analyzovat a vyřešit. Pokud navrhneme herní strom, můžeme objevit některé vítězné strategie a snadno je implementovat v kódu, nebo můžeme nechat CPU vypočítat herní strom v reálném čase a vybrat si nejlepší tah sám. Algoritmus, který v této hře používáme, je samozřejmě velmi jednoduchý, protože hra je velmi jednoduchá. Pokud se pokusíme navrhnout vítězný algoritmus pro šachy, i když použijeme nejrychlejší počítač, nemůžeme vypočítat herní strom za tisíc let! U her, jako je tato, potřebujeme jiný přístup, potřebujeme nějaké algoritmy umělé inteligence a samozřejmě obrovský výpočetní výkon. Více o tom v budoucím videu.

Krok 5: Kód projektu

Kód projektu
Kód projektu

Pojďme se rychle podívat na kód projektu. K kompilaci kódu potřebujeme tři knihovny.

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

Jak vidíte, i taková jednoduchá hra vyžaduje více než 600 řádků kódu. Kód je složitý, takže se ho nepokusím vysvětlit v krátkém tutoriálu. Ukážu vám však implementaci algoritmu pro tahy Arduina.

Nejprve zahrajeme dva náhodné rohy.

<int firstMoves = {0, 2, 6, 8}; // použije tyto pozice jako první pro (counter = 0; counter <4; counter ++) // // Počítání prvních odehraných tahů {if (board [firstMoves [counter]! = 0) // První tah hraje někdo {movePlayed ++; }} dělat {if (tahy <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (board [c] == 0) {zpoždění (1000); deska [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Dále v každém kole kontrolujeme, zda může hráč v dalším tahu vyhrát.

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; jinak vrátit 100; }

Pokud ano, většinou tento pohyb zablokujeme. Neblokujeme všechny tahy, abychom dali lidskému hráči šanci vyhrát. Můžete zjistit, které pohyby nejsou blokovány? Po zablokování tahu zahrajeme zbývající roh, nebo náhodný tah. Můžete studovat kód a snadno implementovat svůj vlastní neporazitelný algoritmus. Jako vždy najdete kód projektu připojený k tomuto pokynu.

POZNÁMKA: Protože Banggood nabízí stejný displej se dvěma různými ovladači zobrazení, pokud výše uvedený kód nefunguje, změňte funkci initDisplay na následující:

void initDisplay ()

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

Krok 6: Závěrečné myšlenky a vylepšení

Závěrečné myšlenky a vylepšení
Závěrečné myšlenky a vylepšení

Jak vidíte, dokonce i s Arduino Uno dokážeme postavit bezkonkurenční algoritmus pro jednoduché hry. Tento projekt je skvělý, protože se snadno staví, a zároveň skvělý úvod do umělé inteligence a programování her. Pokusím se v budoucnu vybudovat nějaké pokročilejší projekty s umělou inteligencí pomocí výkonnějšího Raspberry Pi, takže zůstaňte naladěni! Rád bych slyšel váš názor na tento projekt.

Napište prosím své komentáře níže a nezapomeňte lajkovat instrukce, pokud vás to zaujme. Dík!

Doporučuje: