Sisällysluettelo:

Arduino Touch Tic Tac Toe -peli: 6 vaihetta (kuvilla)
Arduino Touch Tic Tac Toe -peli: 6 vaihetta (kuvilla)

Video: Arduino Touch Tic Tac Toe -peli: 6 vaihetta (kuvilla)

Video: Arduino Touch Tic Tac Toe -peli: 6 vaihetta (kuvilla)
Video: DIY Tic-Tac-Toe Game using Arduino #shorts 2024, Marraskuu
Anonim
Image
Image
Arduino Touch Tic Tac Toe -peli
Arduino Touch Tic Tac Toe -peli
Arduino Touch Tic Tac Toe -peli
Arduino Touch Tic Tac Toe -peli
Arduino Touch Tic Tac Toe -peli
Arduino Touch Tic Tac Toe -peli

Rakkaat ystävät, tervetuloa toiseen Arduino -opetusohjelmaan! Tässä yksityiskohtaisessa opetusohjelmassa aiomme rakentaa Arduino Tic Tac Toe -pelin. Kuten näette, käytämme kosketusnäyttöä ja pelaamme tietokonetta vastaan. Yksinkertainen peli, kuten Tic Tac Toe, on loistava johdanto peliohjelmointiin ja tekoälyyn. Vaikka emme käytä mitään tekoälyalgoritmeja tässä pelissä, ymmärrämme, miksi tekoälyalgoritmeja tarvitaan monimutkaisemmissa peleissä.

Pelien kehittäminen Arduinolle ei ole helppoa ja vaatii paljon aikaa. Mutta voimme rakentaa yksinkertaisia pelejä Arduinolle, koska se on hauskaa ja antaa meille mahdollisuuden tutkia joitain kehittyneempiä ohjelmointiteemoja, kuten tekoälyä. Se on loistava oppimiskokemus ja lopussa sinulla on mukava peli lapsille!

Rakennetaan nyt tämä projekti.

Vaihe 1: Hanki kaikki osat

Image
Image
2.8
2.8

Tämän projektin rakentamiseen tarvittavat osat ovat seuraavat:

Arduino Uno ▶

A 2,8 tuuman kosketusnäyttö ▶

Hankkeen kustannukset ovat erittäin alhaiset. Se on vain 15 dollaria

Ennen kuin yrität rakentaa tätä projektia, katso kosketusnäytöstä tekemäni video. Olen liittänyt sen tähän ohjeeseen. Se auttaa sinua ymmärtämään koodin ja kalibroimaan kosketusnäytön.

Vaihe 2: 2,8 tuuman kosketusvärinäyttö Arduinolle

Image
Image
2.8
2.8
2.8
2.8

Löysin tämän kosketusnäytön osoitteesta banggood.com ja päätin ostaa sen yrittääkseni käyttää sitä joissakin projekteissani. Kuten näette, näyttö on halpa, se maksaa noin 11 dollaria.

Lataa se täältä ▶

Näytön resoluutio on 320x240 pikseliä ja se on suoja, joka tekee yhteyden Arduinoon erittäin helpoksi. Kuten näette, näyttö käyttää lähes kaikkia Arduino Unon digitaalisia ja analogisia nastoja. Tätä suojaa käytettäessä meillä on vain 2 digitaalista nastaa ja 1 analoginen nasta projektejamme varten. Onneksi näyttö toimii hyvin myös Arduino Megan kanssa, joten kun tarvitsemme lisää nastoja, voimme käyttää Arduino Megaa Arduino Unon sijasta. Valitettavasti tämä näyttö ei toimi Arduino Due- tai Wemos D1 ESP8266 -levyn kanssa. Toinen suojan etu on, että se tarjoaa erittäin SD -korttipaikan, jota on erittäin helppo käyttää.

Vaihe 3: Projektin rakentaminen ja testaaminen

Projektin rakentaminen ja testaaminen
Projektin rakentaminen ja testaaminen
Projektin rakentaminen ja testaaminen
Projektin rakentaminen ja testaaminen
Projektin rakentaminen ja testaaminen
Projektin rakentaminen ja testaaminen

Kun olet yhdistänyt näytön Arduino Unoon, voimme ladata koodin ja olemme valmiita pelaamaan.

Aluksi painamme”Aloita peli” -painiketta ja peli alkaa. Arduino pelaa ensin. Voimme sitten pelata liikkeemme yksinkertaisesti koskettamalla näyttöä. Arduino pelaa sitten liikkeensä ja niin edelleen. Pelaaja, joka onnistuu asettamaan kolme merkkiä vaaka-, pystysuoraan tai lävistäjäriville, voittaa pelin. Kun peli on ohi, Game Over -näyttö tulee näkyviin. Voimme sitten aloittaa toiston painamalla toistopainiketta.

Arduino on erittäin hyvä tässä pelissä. Se voittaa suurimman osan peleistä, tai jos olet erittäin hyvä pelaaja, peli päättyy tasapeliin. Suunnittelin tarkoituksella tämän algoritmin tekemään joitakin virheitä, jotta ihmispelaajalla olisi mahdollisuus voittaa. Lisäämällä kaksi riviä pelikoodiin voimme tehdä Arduinosta mahdottoman häviämään pelin. Mutta miten 2 dollarin siru, Arduino -prosessori, voi voittaa ihmisen aivot? Onko kehittämämme ohjelma älykkäämpi kuin ihmisen aivot?

Vaihe 4: Pelin algoritmi

Pelin algoritmi
Pelin algoritmi
Pelin algoritmi
Pelin algoritmi

Jotta voimme vastata tähän kysymykseen, katsotaan käyttämääni algoritmia.

Tietokone toistaa aina ensin. Pelkästään tämä päätös tekee pelistä paljon helpompaa Arduinolle voittaa. Ensimmäinen siirto on aina kulma. Arduinon toinen siirto on myös satunnainen kulma jäljellä olevasta pelistä välittämättä ollenkaan. Tästä lähtien Arduino tarkistaa ensin, voiko pelaaja voittaa seuraavassa siirrossa, ja estää sen. Jos pelaaja ei voi voittaa yhdellä siirrolla, hän pelaa kulmaliikkeen, jos se on käytettävissä, tai satunnaisen jäljellä olevasta. Siinä kaikki, tämä yksinkertainen algoritmi voi voittaa ihmispelaajan joka kerta tai pahimmassa tapauksessa peli johtaa tasapeliin. Tämä ei ole paras tic tac toe -algoritmi, mutta yksi yksinkertaisimmista.

Tämä algoritmi voidaan toteuttaa Arduinossa helposti, koska Tic Tac Toe -peli on hyvin yksinkertainen, ja voimme helposti analysoida sen ja ratkaista sen. Jos suunnittelemme pelipuun, voimme löytää joitain voittostrategioita ja toteuttaa ne helposti koodissa tai voimme antaa CPU: n laskea pelipuun reaaliajassa ja valita parhaan liikkeen itse. Tietenkin tässä pelissä käytettävä algoritmi on hyvin yksinkertainen, koska peli on hyvin yksinkertainen. Jos yritämme suunnitella voittavan algoritmin shakille, vaikka käytämme nopeinta tietokonetta, emme voi laskea pelipuuta tuhanteen vuoteen! Tällaisissa peleissä tarvitsemme toisen lähestymistavan, tarvitsemme joitain tekoälyalgoritmeja ja tietysti valtavaa käsittelytehoa. Tästä lisää tulevassa videossa.

Vaihe 5: Projektin koodi

Projektin koodi
Projektin koodi

Katsotaanpa nopeasti projektin koodia. Tarvitsemme kolme kirjastoa koodin kääntämiseksi.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Kosketusnäyttö:

Kuten näette, jopa tällainen yksinkertainen peli vaatii yli 600 koodiriviä. Koodi on monimutkainen, joten en yritä selittää sitä lyhyessä opetusohjelmassa. Näytän kuitenkin algoritmin toteutuksen Arduinon liikkeille.

Aluksi pelaamme kahta satunnaista kulmaa.

<int firstMoves = {0, 2, 6, 8}; // käyttää näitä paikkoja ensin (laskuri = 0; laskuri <4; laskuri ++) // Laske ensimmäiset siirrot {if (board [firstMoves [counter]!! = 0) // Ensimmäinen siirto pelataan joku {movePlayed ++; }} tee {jos (liikkuu <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (board [c] == 0) {delay (1000); lauta [c] = 2; Serial.print (firstMoves [randomMove]); Sarja.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Seuraavaksi tarkistamme jokaisella kierroksella, voiko pelaaja voittaa seuraavassa siirrossa.

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; muuten jos (board [1] == 1 && board [2] == 1 && board [0] == 0) palauta 0; muuten jos (board [3] == 1 && board [4] == 1 && board [5] == 0) palauta 5; muuten jos (board [4] == 1 && board [5] == 1 && board [3] == 0) return 3; muuten jos (board [3] == 1 && board [4] == 0 && board [5] == 1) palauta 4; muuten jos (board [1] == 0 && board [4] == 1 && board [7] == 1) return 1; muuten palauta 100; }

Jos kyllä, estämme tämän liikkeen useimmiten. Emme estä kaikkia liikkeitä antaaksemme ihmispelaajalle mahdollisuuden voittaa. Löydätkö, mitkä liikkeet eivät ole estettyjä? Kun olemme estäneet liikkeen, pelaamme jäljellä olevan kulman tai satunnaisen siirron. Voit tutkia koodia ja ottaa käyttöön lyömättömän algoritmin helposti. Kuten aina, löydät tämän ohjeen liitteenä olevan projektin koodin.

HUOMAUTUS: Koska Banggood tarjoaa saman näytön kahdella eri näytönohjaimella, jos yllä oleva koodi ei toimi, muuta initDisplay -toiminto seuraavaksi:

void initDisplay ()

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

Vaihe 6: Viimeiset ajatukset ja parannukset

Lopulliset ajatukset ja parannukset
Lopulliset ajatukset ja parannukset

Kuten näette, jopa Arduino Unon avulla voimme rakentaa lyömättömän algoritmin yksinkertaisille peleille. Tämä projekti on loistava, koska se on helppo rakentaa ja samalla erinomainen johdanto tekoälyyn ja peliohjelmointiin. Yritän tulevaisuudessa rakentaa joitakin kehittyneempiä projekteja tekoälyn avulla käyttämällä tehokkaampaa Raspberry Pi: tä, joten pysy kuulolla! Haluaisin kuulla mielipiteesi tästä projektista.

Lähetä kommenttisi alle ja älä unohda pitää ohjeesta, jos löydät sen kiinnostavalta. Kiitos!

Suositeltava: