Talaan ng mga Nilalaman:

Arduino Touch Tic Tac Toe Game: 6 Hakbang (na may Mga Larawan)
Arduino Touch Tic Tac Toe Game: 6 Hakbang (na may Mga Larawan)

Video: Arduino Touch Tic Tac Toe Game: 6 Hakbang (na may Mga Larawan)

Video: Arduino Touch Tic Tac Toe Game: 6 Hakbang (na may Mga Larawan)
Video: Arduino - Tic Tac Toe Game with Touchpad 2024, Hunyo
Anonim
Image
Image
Arduino Touch Tic Tac Toe Game
Arduino Touch Tic Tac Toe Game
Arduino Touch Tic Tac Toe Game
Arduino Touch Tic Tac Toe Game
Arduino Touch Tic Tac Toe Game
Arduino Touch Tic Tac Toe Game

Minamahal na mga kaibigan maligayang pagdating sa isa pang Arduino tutorial! Sa detalyadong tutorial na ito magtatayo kami ng isang laro ng Arduino Tic Tac Toe. Tulad ng nakikita mo, gumagamit kami ng isang touch screen at naglalaro kami laban sa computer. Ang isang simpleng laro tulad ng Tic Tac Toe ay isang mahusay na pagpapakilala sa programa ng laro at Artipisyal na Katalinuhan. Kahit na hindi kami gagamit ng anumang Artipisyal na Mga Algorithm ng Intelligence sa larong ito, mauunawaan namin kung bakit kinakailangan ang mga Artipisyal na Algorithm ng Intelligence sa mas kumplikadong mga laro.

Ang pagbuo ng mga laro para sa Arduino ay hindi madali at nangangailangan ng maraming oras. Ngunit makakagawa kami ng ilang simpleng mga laro para sa Arduino sapagkat masaya ito at papayagan kaming tuklasin ang ilang mas advanced na mga paksa sa programa, tulad ng Artipisyal na talino. Ito ay isang mahusay na karanasan sa pag-aaral at sa huli magkakaroon ka ng magandang laro para sa mga bata!

Buuin natin ngayon ang proyektong ito.

Hakbang 1: Kunin ang Lahat ng Mga Bahagi

Image
Image
Ang 2.8
Ang 2.8

Ang mga bahagi na kinakailangan upang maitayo ang proyektong ito ay ang mga sumusunod:

Isang Arduino Uno ▶

Isang 2.8 "Touch Screen ▶

Ang gastos ng proyekto ay napakababa. 15 $ lang ito

Bago tangkaing buuin ang proyektong ito mangyaring panoorin ang video na inihanda ko tungkol sa touch display. Inilakip ko ito sa itinuturo na ito. Tutulungan ka nitong maunawaan ang code, at i-calibrate ang touch screen.

Hakbang 2: Ang 2.8 "Pagpapakita ng Kulay ng Touch para sa Arduino

Image
Image
Ang 2.8
Ang 2.8
Ang 2.8
Ang 2.8

Natuklasan ko ang touch screen na ito sa banggood.com at nagpasyang bilhin ito upang subukang gamitin ito sa ilan sa aking mga proyekto. Tulad ng nakikita mong mura ang display, nagkakahalaga ito ng humigit-kumulang na $ 11.

Kunin ito dito ▶

Nag-aalok ang display ng isang resolusyon ng 320x240 pixel at ito ay dumating bilang isang kalasag na ginagawang napakadali ng koneksyon sa Arduino. Tulad ng nakikita mo, ang display ay gumagamit ng halos lahat ng mga digital at analog na pin ng Arduino Uno. Kapag ginagamit ang kalasag na ito ay naiwan lamang kami sa 2 mga digital na pin at 1 analog pin para sa aming mga proyekto. Sa kasamaang palad, gumagana ang display nang maayos sa Arduino Mega din, kaya't kapag kailangan namin ng higit pang mga pin maaari naming gamitin ang Arduino Mega sa halip na ang Arduino Uno. Sa kasamaang palad ang display na ito ay hindi gumagana sa Arduino Dahil o sa board ng Wemos D1 ESP8266. Ang isa pang bentahe ng kalasag ay nag-aalok ito ng isang micro SD slot na napakadaling gamitin.

Hakbang 3: Pagbuo ng Proyekto at Pagsubok Ito

Pagbuo ng Proyekto at Pagsubok Ito
Pagbuo ng Proyekto at Pagsubok Ito
Pagbuo ng Proyekto at Pagsubok Ito
Pagbuo ng Proyekto at Pagsubok Ito
Pagbuo ng Proyekto at Pagsubok Ito
Pagbuo ng Proyekto at Pagsubok Ito

Matapos ikonekta ang screen sa Arduino Uno, maaari nating mai-load ang code at handa na kaming maglaro.

Sa una, pinindot namin ang pindutang "Start Game" at nagsisimula ang laro. Naglalaro muna ang Arduino. Maaari naming i-play ang aming paglipat sa pamamagitan lamang ng pagpindot sa screen. Pagkatapos ay ginampanan ng Arduino ang paglipat nito at iba pa. Ang manlalaro na magtagumpay sa paglalagay ng tatlo sa kanilang mga marka sa isang pahalang, patayong, o dayagonal na hilera ay nanalo sa laro. Kapag natapos na ang laro, lilitaw ang screen ng Game Over. Maaari naming pindutin muli ang play button upang muling simulan ang laro.

Ang Arduino ay napakahusay sa larong ito. Manalo ito sa karamihan ng mga laro, o kung ikaw ay napakahusay na manlalaro ang laro ay magtatapos sa isang draw. Sinadya kong idisenyo ang algorithm na ito upang makagawa ng ilang mga pagkakamali upang mabigyan ng pagkakataon ang manlalaro na manalo. Sa pamamagitan ng pagdaragdag ng dalawa pang mga linya sa code ng laro, maaari nating gawing imposible ang Arduino na mawala ang laro. Ngunit paano ang isang 2 $ chip, ang Arduino CPU, ay matalo ang utak ng tao? Ang programa ba na binuo natin ay mas matalino kaysa sa utak ng tao?

Hakbang 4: Ang Game Algorithm

Ang Game Algorithm
Ang Game Algorithm
Ang Game Algorithm
Ang Game Algorithm

Upang sagutin ang katanungang ito, tingnan natin ang algorithm na ipinatupad ko.

Palaging naglalaro muna ang computer. Ang pasyang ito lamang, ginagawang mas madali ang laro para manalo ang Arduino. Ang unang paglipat ay palaging isang sulok. Ang, pangalawang paglipat para sa Arduino ay isang random na sulok din mula sa natitirang hindi nangangalaga tungkol sa paglipat ng manlalaro. Mula sa puntong ito, susuriin muna ng Arduino kung ang manlalaro ay maaaring manalo sa susunod na paglipat at hinaharangan ang paglipat. Kung ang manlalaro ay hindi maaaring manalo sa isang solong paglipat, gumaganap ito ng isang paglipat ng sulok kung ito ay magagamit o isang random na isa mula sa natitira. Iyon lang, ang simpleng algorithm na ito ay maaaring talunin ang manlalaro ng tao sa bawat oras o sa pinakapangit na sitwasyon na magreresulta sa isang draw. Hindi ito ang pinakamahusay na algorithm ng laro ng tic tac toe, ngunit isa sa pinakasimpleng.

Ang algorithm na ito ay maaaring ipatupad nang madali sa Arduino, sapagkat ang laro ng Tic Tac Toe ay napaka-simple, at madali namin itong masusuri at malulutas ito. Kung dinisenyo namin ang puno ng laro maaari naming matuklasan ang ilang mga diskarte sa panalong at madaling ipatupad ang mga ito sa code o maaari nating hayaan ang CPU na makalkula ang puno ng laro sa real time at pinili ang pinakamahusay na paglipat nang mag-isa. Siyempre, ang algorithm na ginagamit namin sa larong ito ay napaka-simple, dahil ang laro ay napaka-simple. Kung susubukan naming magdisenyo ng isang panalong algorithm para sa chess, kahit na gumamit kami ng pinakamabilis na computer ay hindi namin makalkula ang puno ng laro sa loob ng isang libong taon! Para sa mga larong ito, kailangan namin ng isa pang diskarte, kailangan namin ng ilang mga algorithm ng Artipisyal na Intelligence at syempre malaking kapangyarihan sa pagpoproseso. Higit pa tungkol dito sa isang hinaharap na video.

Hakbang 5: Code ng Project

Code ng Proyekto
Code ng Proyekto

Tingnan natin nang mabilis ang code ng proyekto. Kailangan namin ng tatlong mga silid-aklatan upang maipon ang code.

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

Tulad ng nakikita mo, kahit isang simpleng laro na tulad nito, nangangailangan ng higit sa 600 mga linya ng code. Ang code ay kumplikado, kaya't hindi ko susubukan na ipaliwanag ito sa maikling tutorial. Ipapakita ko sa iyo ang pagpapatupad ng algorithm para sa paglipat ng Arduino.

Sa una, naglalaro kami ng dalawang random na sulok.

<int firstMove = {0, 2, 6, 8}; // gagamitin muna ang mga posisyon na ito para sa (counter = 0; counter <4; counter ++) // Bilangin ang unang paglipat na nilalaro {kung (board [firstMove [counter]! = 0) // Ang unang paglipat ay nilalaro ng isang tao {gumagalawPlayed ++; }} gawin {kung (gumalaw <= 2) {int randomMove = random (4); int c = firstMove [randomMove]; kung (board [c] == 0) {pagkaantala (1000); board [c] = 2; Serial.print (firstMove [randomMove]); Serial.println (); drawCpuMove (firstMove [randomMove]); b = 1; }}

Susunod, sa bawat pag-ikot sinusuri namin kung ang manlalaro ay maaaring manalo sa susunod na paglipat.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) return 2; kung hindi man (board [0] == 1 && board [1] == 0 && board [2] == 1) bumalik 1; kung hindi man (board [1] == 1 && board [2] == 1 && board [0] == 0) ibalik ang 0; kung hindi man (board [3] == 1 && board [4] == 1 && board [5] == 0) ibalik ang 5; kung hindi man (board [4] == 1 && board [5] == 1 && board [3] == 0) ibalik ang 3; kung hindi man (board [3] == 1 && board [4] == 0 && board [5] == 1) ibalik ang 4; kung hindi man (board [1] == 0 && board [4] == 1 && board [7] == 1) bumalik 1; kung hindi man bumalik 100; }

Kung oo hinaharangan natin ang paglipat na iyon, sa lahat ng mga oras. Hindi namin hinahadlangan ang lahat ng mga paggalaw upang mabigyan ng pagkakataon ang manlalaro na manalo. Mahahanap mo ba kung aling mga paggalaw ang hindi naka-block? Matapos harangan ang paglipat, naglalaro kami ng natitirang sulok, o isang random na paglipat. Maaari mong pag-aralan ang code, at ipatupad ang iyong sariling hindi matalo na algorithm nang madali. Tulad ng dati maaari mong makita ang code ng proyekto na nakakabit sa itinuturo na ito.

TANDAAN: Dahil ang Banggood ay nag-aalok ng parehong display na may dalawang magkakaibang mga display driver, kung hindi gumagana ang code sa itaas, baguhin ang pagpapaandar ng initDisplay sa mga sumusunod:

walang bisa initDisplay ()

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

Hakbang 6: Pangwakas na Mga Saloobin at Pagpapabuti

Pangwakas na Mga Saloobin at Pagpapabuti
Pangwakas na Mga Saloobin at Pagpapabuti

Tulad ng nakikita mo, kahit na sa isang Arduino Uno, makakabuo kami ng isang hindi matatalo na algorithm para sa mga simpleng laro. Magaling ang proyektong ito, sapagkat madali itong maitayo, at sa parehong oras isang mahusay na pagpapakilala sa Artipisyal na talino at pagprograma ng laro. Susubukan kong bumuo ng ilang mas advanced na mga proyekto sa Artipisyal na Katalinuhan sa hinaharap gamit ang mas malakas na Raspberry Pi kaya't manatiling nakatutok! Gusto kong marinig ang iyong opinyon tungkol sa proyektong ito.

Mangyaring i-post ang iyong mga komento sa ibaba at huwag kalimutang magustuhan ang itinuturo kung nakikita mong kawili-wili. Salamat!

Inirerekumendang: