Sisukord:

Arduino Touch Tic Tac Toe mäng: 6 sammu (piltidega)
Arduino Touch Tic Tac Toe mäng: 6 sammu (piltidega)

Video: Arduino Touch Tic Tac Toe mäng: 6 sammu (piltidega)

Video: Arduino Touch Tic Tac Toe mäng: 6 sammu (piltidega)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Juuni
Anonim
Image
Image
Arduino Touch Tic Tac Toe mäng
Arduino Touch Tic Tac Toe mäng
Arduino Touch Tic Tac Toe mäng
Arduino Touch Tic Tac Toe mäng
Arduino Touch Tic Tac Toe mäng
Arduino Touch Tic Tac Toe mäng

Kallid sõbrad, tere tulemast järjekordsesse Arduino õpetusse! Selles üksikasjalikus õpetuses ehitame Arduino Tic Tac Toe mängu. Nagu näete, kasutame puuteekraani ja mängime arvuti vastu. Lihtne mäng nagu Tic Tac Toe on suurepärane sissejuhatus mängude programmeerimisse ja tehisintellekti. Kuigi me ei kasuta selles mängus tehisintellekti algoritme, mõistame, miks on tehisintellekti algoritme keerulisemates mängudes vaja.

Arduino jaoks mängude arendamine pole lihtne ja nõuab palju aega. Kuid me saame Arduino jaoks luua mõned lihtsad mängud, sest see on lõbus ja võimaldab meil uurida mõnda täpsemat programmeerimisteemat, näiteks tehisintellekti. See on suurepärane õppimiskogemus ja lõpuks on teil lastele tore mäng!

Nüüd ehitame selle projekti üles.

Samm: hankige kõik osad

Image
Image
2.8
2.8

Selle projekti loomiseks vajalikud osad on järgmised:

Arduino Uno ▶

2,8 -tolline puutetundlik ekraan ▶

Projekti maksumus on väga madal. See on ainult 15 dollarit

Enne selle projekti loomist vaadake palun puuteekraani kohta koostatud videot. Lisasin selle sellesse juhendisse. See aitab teil koodist aru saada ja puuteekraani kalibreerida.

Samm: 2,8 -tolline puutetundlik värviline ekraan Arduino jaoks

Image
Image
2.8
2.8
2.8
2.8

Avastasin selle puutetundliku ekraani saidilt banggood.com ja otsustasin selle osta, et proovida seda mõnes oma projektis kasutada. Nagu näete, on ekraan odav, maksab see umbes 11 dollarit.

Hankige see siit ▶

Ekraani eraldusvõime on 320x240 pikslit ja see on varjestus, mis muudab ühenduse Arduinoga äärmiselt lihtsaks. Nagu näete, kasutab ekraan peaaegu kõiki Arduino Uno digitaalseid ja analoogpistikuid. Selle kilbi kasutamisel jääb meie projektide jaoks ainult 2 digitaalset tihvti ja 1 analoognõel. Õnneks töötab ekraan hästi ka Arduino Mega puhul, nii et kui vajame rohkem nööpnõelu, saame Arduino Uno asemel kasutada Arduino Megat. Kahjuks ei tööta see ekraan Arduino Due ega Wemos D1 ESP8266 plaadiga. Kilbi teine eelis on see, et see pakub micro SD pesa, mida on väga lihtne kasutada.

3. samm: projekti koostamine ja selle testimine

Projekti loomine ja selle testimine
Projekti loomine ja selle testimine
Projekti loomine ja selle testimine
Projekti loomine ja selle testimine
Projekti loomine ja selle testimine
Projekti loomine ja selle testimine

Pärast ekraani ühendamist Arduino Unoga saame koodi laadida ja oleme mängimiseks valmis.

Algul vajutame nuppu „Alusta mängu“ja mäng algab. Kõigepealt mängib Arduino. Seejärel saame oma käiku mängida lihtsalt ekraani puudutades. Seejärel mängib Arduino oma käigu ja nii edasi. Mängija, kellel õnnestub paigutada kolm oma märki horisontaalsele, vertikaalsele või diagonaalsele reale, võidab mängu. Kui mäng on lõppenud, ilmub ekraanile Game Over. Seejärel võime mängu uuesti alustamiseks vajutada uuesti esitamise nuppu.

Arduino on selles mängus väga hea. See võidab enamiku mänge või kui olete väga hea mängija, lõpeb mäng viigiga. Kavatsesin selle algoritmi tahtlikult mõne vea tegemiseks, et anda inimmängijale võimalus võita. Lisades mängu koodile veel kaks rida, saame muuta Arduino mängu kaotamise võimatuks. Kuid kuidas saab 2 -dollarine kiip, Arduino protsessor, inimese aju võita? Kas meie arendatud programm on targem kui inimese aju?

Samm: mängualgoritm

Mängu algoritm
Mängu algoritm
Mängu algoritm
Mängu algoritm

Sellele küsimusele vastamiseks vaatame algoritmi, mille olen rakendanud.

Arvuti mängib alati esimesena. Ainuüksi see otsus muudab mängu Arduino jaoks palju lihtsamaks. Esimene käik on alati nurk. Arduino teine käik on ka ülejäänud nurgast juhuslik nurk, hoolimata mängija käigust. Sellest hetkest alates kontrollib Arduino kõigepealt, kas mängija saab järgmisel käigul võita, ja blokeerib selle käigu. Kui mängija ei saa ühe käiguga võita, mängib ta nurgalööki, kui see on saadaval, või juhuslikku ülejäänud käigust. See on kõik, see lihtne algoritm võib inimmängijat iga kord võita või halvimal juhul toob mäng kaasa viigi. See pole parim tic tac toe mängu algoritm, kuid üks lihtsamaid.

Seda algoritmi saab Arduinos hõlpsasti rakendada, sest Tic Tac Toe mäng on väga lihtne ning me saame seda hõlpsalt analüüsida ja lahendada. Kui kujundame mängupuu, võime avastada mõned võidustrateegiad ja neid hõlpsalt koodis rakendada või lasta protsessoril reaalajas mängupuu välja arvutada ja valida parima käigu. Muidugi on selles mängus kasutatav algoritm väga lihtne, sest mäng on väga lihtne. Kui proovime male jaoks välja töötada võitva algoritmi, isegi kui kasutame kiireimat arvutit, ei suuda me mängupuud tuhande aasta jooksul arvutada! Selliste mängude jaoks vajame teist lähenemist, vajame tehisintellekti algoritme ja muidugi tohutut töötlemisvõimsust. Sellest lähemalt tulevases videos.

Samm: projekti kood

Projekti kood
Projekti kood

Vaatame kiiresti projekti koodi. Koodi koostamiseks vajame kolme raamatukogu.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Puuteekraan:

Nagu näete, nõuab isegi selline lihtne mäng rohkem kui 600 koodirida. Kood on keeruline, nii et ma ei ürita seda lühikese õpetusega selgitada. Näitan teile siiski Arduino käikude algoritmi rakendamist.

Algul mängime kahte juhuslikku nurka.

<int firstMoves = {0, 2, 6, 8}; // kasutab neid positsioone kõigepealt (loendur = 0; loendur <4; loendur ++) // Loe esimesed mängitud käigud {if (board [firstMoves [counter]!! = 0) // Esimest käiku mängib keegi {movePlayed ++; }} do {if (liigub <= 2) {int randomMove = juhuslik (4); int c = firstMoves [randomMove]; if (laud [c] == 0) {viivitus (1000); laud [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Järgmisena kontrollime igas voorus, kas mängija saab järgmisel käigul võita.

int checkOponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; muidu kui (board [0] == 1 && board [1] == 0 && board [2] == 1) return 1; muidu kui (board [1] == 1 && board [2] == 1 && board [0] == 0) return 0; muidu kui (juhatus [3] == 1 && juhatus [4] == 1 && laud [5] == 0) tagastab 5; muidu kui (laud [4] == 1 && juhatus [5] == 1 && laud [3] == 0) tagasta 3; muidu kui (juhatus [3] == 1 && juhatus [4] == 0 && laud [5] == 1) tagasta 4; muidu kui (board [1] == 0 && board [4] == 1 && board [7] == 1) return 1; muidu tagasta 100; }

Kui jah, blokeerime selle käigu enamasti. Me ei blokeeri kõiki käike, et anda inimmängijale võimalus võita. Kas leiate, millised käigud pole blokeeritud? Pärast käigu blokeerimist mängime järelejäänud nurka või juhuslikku käiku. Saate koodi uurida ja hõlpsalt oma parima algoritmi rakendada. Nagu alati, leiate selle juhendi kaudu lisatud projekti koodi.

MÄRKUS. Kuna Banggood pakub sama ekraani kahe erineva draiveriga, kui ülaltoodud kood ei tööta, muutke initDisplay funktsioon järgmiseks:

void initDisplay ()

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

6. samm: lõplikud mõtted ja täiustused

Lõplikud mõtted ja parandused
Lõplikud mõtted ja parandused

Nagu näete, saame isegi Arduino Unoga luua lihtsate mängude jaoks ületamatu algoritmi. See projekt on suurepärane, sest seda on lihtne ehitada ja samal ajal suurepärane sissejuhatus tehisintellekti ja mängude programmeerimisse. Püüan tulevikus ehitada tehisintellektiga rohkem arenenud projekte, kasutades võimsamat Raspberry Pi, nii et olge lainel! Tahaksin kuulda teie arvamust selle projekti kohta.

Palun postitage oma kommentaarid allpool ja ärge unustage, et teile meeldivad juhised meeldivad. Tänan!

Soovitan: