Satura rādītājs:

Arduino Touch Tic Tac Toe spēle: 6 soļi (ar attēliem)
Arduino Touch Tic Tac Toe spēle: 6 soļi (ar attēliem)

Video: Arduino Touch Tic Tac Toe spēle: 6 soļi (ar attēliem)

Video: Arduino Touch Tic Tac Toe spēle: 6 soļi (ar attēliem)
Video: Es strādāju privātajā bagāto un slaveno muzejā. Šausmu stāsti. Šausmas. 2024, Jūnijs
Anonim
Image
Image
Arduino Touch Tic Tac Toe spēle
Arduino Touch Tic Tac Toe spēle
Arduino Touch Tic Tac Toe spēle
Arduino Touch Tic Tac Toe spēle
Arduino Touch Tic Tac Toe spēle
Arduino Touch Tic Tac Toe spēle

Dārgie draugi, laipni lūdzam citā Arduino apmācībā! Šajā detalizētajā apmācībā mēs izveidosim spēli Arduino Tic Tac Toe. Kā redzat, mēs izmantojam skārienekrānu un spēlējam pret datoru. Vienkārša spēle, piemēram, Tic Tac Toe, ir lielisks ievads spēļu programmēšanā un mākslīgajā intelektā. Lai gan šajā spēlē mēs neizmantosim mākslīgā intelekta algoritmus, mēs sapratīsim, kāpēc mākslīgā intelekta algoritmi ir nepieciešami sarežģītākās spēlēs.

Spēļu izstrāde Arduino nav vienkārša un prasa daudz laika. Bet mēs varam izveidot dažas vienkāršas spēles Arduino, jo tas ir jautri, un tas ļaus mums izpētīt dažas sarežģītākas programmēšanas tēmas, piemēram, mākslīgo intelektu. Tā ir lieliska mācīšanās pieredze, un beigās jums būs jauka spēle bērniem!

Tagad veidosim šo projektu.

1. darbība: iegūstiet visas detaļas

Image
Image
2.8
2.8

Lai izveidotu šo projektu, ir nepieciešamas šādas detaļas:

Arduino Uno ▶

2,8 collu skārienekrāns ▶

Projekta izmaksas ir ļoti zemas. Tas ir tikai 15 $

Pirms mēģināt izveidot šo projektu, lūdzu, noskatieties manu sagatavoto video par skārienekrānu. Es to pievienoju šajā pamācībā. Tas palīdzēs jums saprast kodu un kalibrēt skārienekrānu.

2. solis: 2,8 collu skārienekrāna displejs Arduino

Image
Image
2.8
2.8
2.8
2.8

Es atklāju šo skārienekrānu vietnē banggood.com un nolēmu to iegādāties, lai mēģinātu to izmantot dažos savos projektos. Kā redzat, displejs ir lēts, tas maksā aptuveni 11 USD.

Iegūstiet to šeit ▶

Displejs piedāvā 320x240 pikseļu izšķirtspēju, un tas ir kā vairogs, kas padara savienojumu ar Arduino ļoti vienkāršu. Kā redzat, displejā tiek izmantotas gandrīz visas Arduino Uno digitālās un analogās tapas. Izmantojot šo vairogu, mūsu projektiem paliek tikai 2 digitālās tapas un 1 analogā tapa. Par laimi, displejs darbojas arī ar Arduino Mega, tāpēc, kad mums ir vajadzīgas vairāk tapas, mēs varam izmantot Arduino Mega, nevis Arduino Uno. Diemžēl šis displejs nedarbojas ar Arduino Due vai Wemos D1 ESP8266 plati. Vēl viena vairoga priekšrocība ir tā, ka tā piedāvā ļoti viegli lietojamu micro SD slotu.

3. darbība: projekta izveidošana un tā pārbaude

Projekta veidošana un testēšana
Projekta veidošana un testēšana
Projekta veidošana un testēšana
Projekta veidošana un testēšana
Projekta veidošana un testēšana
Projekta veidošana un testēšana

Pēc ekrāna pievienošanas Arduino Uno mēs varam ielādēt kodu un esam gatavi spēlēt.

Sākumā mēs nospiežam pogu “Sākt spēli”, un spēle sākas. Vispirms spēlē Arduino. Pēc tam mēs varam spēlēt savu kustību, vienkārši pieskaroties ekrānam. Pēc tam Arduino spēlē savu gājienu un tā tālāk. Spēlētājs, kuram izdodas novietot trīs savas atzīmes horizontālā, vertikālā vai diagonālā rindā, uzvar spēli. Kad spēle ir beigusies, parādās ekrāns Game Over. Pēc tam mēs varam nospiest atskaņošanas pogu, lai atkal sāktu spēli.

Arduino ir ļoti labs šajā spēlē. Tā uzvarēs lielākajā daļā spēļu, vai, ja esat ļoti labs spēlētājs, spēle beigsies neizšķirti. Es apzināti izstrādāju šo algoritmu, lai pieļautu dažas kļūdas, lai dotu iespēju spēlētājam uzvarēt. Pievienojot spēles kodam vēl divas rindiņas, mēs varam padarīt Arduino neiespējamu spēles zaudēšanu. Bet kā 2 $ mikroshēma, Arduino CPU, var pārspēt cilvēka smadzenes? Vai mūsu izstrādātā programma ir gudrāka par cilvēka smadzenēm?

4. solis: spēles algoritms

Spēles algoritms
Spēles algoritms
Spēles algoritms
Spēles algoritms

Lai atbildētu uz šo jautājumu, apskatīsim algoritmu, kuru esmu ieviesis.

Dators vienmēr spēlē pirmais. Šis lēmums vien padara spēli daudz vieglāk uzvarēt Arduino. Pirmais gājiens vienmēr ir stūris. Otrais Arduino gājiens ir arī nejaušs stūris no atlikušajiem, nemaz nerūpējoties par spēlētāja gājienu. Kopš šī brīža Arduino vispirms pārbauda, vai spēlētājs var uzvarēt nākamajā gājienā, un bloķē šo gājienu. Ja spēlētājs nevar uzvarēt ar vienu gājienu, tas spēlē stūra gājienu, ja tas ir pieejams, vai nejaušu gājienu no pārējiem. Tieši tā, šis vienkāršais algoritms var pārspēt cilvēku spēlētāju katru reizi, vai sliktākajā gadījumā spēles rezultāts būs neizšķirts. Tas nav labākais tic tac toe spēles algoritms, bet viens no vienkāršākajiem.

Šo algoritmu var viegli ieviest Arduino, jo spēle Tic Tac Toe ir ļoti vienkārša, un mēs to varam viegli analizēt un atrisināt. Izstrādājot spēles koku, mēs varam atklāt dažas uzvarošas stratēģijas un viegli tās ieviest kodā, vai arī ļaut CPU aprēķināt spēles koku reālā laikā un izvēlēties labāko gājienu. Protams, algoritms, ko mēs izmantojam šajā spēlē, ir ļoti vienkāršs, jo spēle ir ļoti vienkārša. Ja mēs cenšamies izveidot šaham uzvarošu algoritmu, pat ja mēs izmantojam ātrāko datoru, mēs nevaram aprēķināt spēles koku tūkstoš gadu laikā! Šādām spēlēm mums ir nepieciešama cita pieeja, mums ir vajadzīgi daži mākslīgā intelekta algoritmi un, protams, milzīga apstrādes jauda. Vairāk par to nākamajā video.

5. solis: projekta kods

Projekta kods
Projekta kods

Īsi apskatīsim projekta kodu. Lai apkopotu kodu, mums ir vajadzīgas trīs bibliotēkas.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Skārienekrāns:

Kā redzat, pat šādai vienkāršai spēlei ir nepieciešamas vairāk nekā 600 koda rindas. Kods ir sarežģīts, tāpēc nemēģināšu to izskaidrot īsā apmācībā. Tomēr es jums parādīšu Arduino kustību algoritma ieviešanu.

Sākumā mēs spēlējam divus nejaušus stūrus.

<int firstMoves = {0, 2, 6, 8}; // vispirms izmantos šīs pozīcijas (skaitītājs = 0; skaitītājs <4; skaitītājs ++) // Skaitīt pirmos izspēlētos gājienus {if (board [firstMoves [counter]!! = 0) // Pirmo gājienu spēlē kāds {movePlayed ++; }} do {ja (pārvietojas <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; ja (tāfele [c] == 0) {kavēšanās (1000); dēlis [c] = 2; Serial.print (firstMoves [randomMove]); Sērijas.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Tālāk katrā kārtā mēs pārbaudām, vai spēlētājs var uzvarēt nākamajā gājienā.

int checkOonon ()

{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; citādi, ja (dēlis [1] == 1 && dēlis [2] == 1 && dēlis [0] == 0) atgriež 0; citādi, ja (dēlis [3] == 1 && dēlis [4] == 1 && dēlis [5] == 0) atgriežas 5; citādi, ja (dēlis [4] == 1 && dēlis [5] == 1 && dēlis [3] == 0) atgriežas 3; citādi, ja (dēlis [3] == 1 && dēlis [4] == 0 && dēlis [5] == 1) atgriežas 4; citādi, ja (dēlis [1] == 0 && dēlis [4] == 1 && dēlis [7] == 1) atgriežas 1; citādi atdod 100; }

Ja jā, mēs bloķējam šo kustību, vairumā gadījumu. Mēs nebloķējam visus gājienus, lai dotu iespēju spēlētājam uzvarēt. Vai varat atrast, kuras kustības nav bloķētas? Pēc gājiena bloķēšanas mēs izspēlējam atlikušo stūri vai nejaušu gājienu. Jūs varat izpētīt kodu un viegli ieviest savu nepārspējamo algoritmu. Kā vienmēr, šajā instrukcijā varat atrast pievienoto projekta kodu.

PIEZĪME. Tā kā Banggood piedāvā to pašu displeju ar diviem dažādiem displeja draiveriem, ja iepriekš minētais kods nedarbojas, nomainiet initDisplay funkciju uz šādu:

void initDisplay ()

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

6. darbība. Pēdējās domas un uzlabojumi

Pēdējās domas un uzlabojumi
Pēdējās domas un uzlabojumi

Kā redzat, pat ar Arduino Uno mēs varam izveidot nepārspējamu vienkāršu spēļu algoritmu. Šis projekts ir lielisks, jo to ir viegli izveidot, un tajā pašā laikā lielisks ievads mākslīgajā intelektā un spēļu programmēšanā. Es mēģināšu nākotnē izveidot dažus progresīvākus projektus ar mākslīgo intelektu, izmantojot jaudīgāko Raspberry Pi, tāpēc sekojiet līdzi! Es labprāt uzzinātu jūsu viedokli par šo projektu.

Lūdzu, ievietojiet savus komentārus zemāk un, ja jums šķiet interesanti, neaizmirstiet iepatikties pamācībai. Paldies!

Ieteicams: