Mündəricat:

Arduino Touch Tic Tac Toe Oyunu: 6 addım (şəkillərlə)
Arduino Touch Tic Tac Toe Oyunu: 6 addım (şəkillərlə)

Video: Arduino Touch Tic Tac Toe Oyunu: 6 addım (şəkillərlə)

Video: Arduino Touch Tic Tac Toe Oyunu: 6 addım (şəkillərlə)
Video: Arduino ile Tic Tac Toe ( XOX ) Oyunu 2024, Iyun
Anonim
Image
Image
Arduino Touch Tic Tac Toe Oyunu
Arduino Touch Tic Tac Toe Oyunu
Arduino Touch Tic Tac Toe Oyunu
Arduino Touch Tic Tac Toe Oyunu
Arduino Touch Tic Tac Toe Oyunu
Arduino Touch Tic Tac Toe Oyunu

Əziz dostlar, başqa bir Arduino dərsinə xoş gəldiniz! Bu ətraflı təlimatda bir Arduino Tic Tac Toe oyunu quracağıq. Gördüyünüz kimi, bir toxunma ekranı istifadə edirik və kompüterə qarşı oynayırıq. Tic Tac Toe kimi sadə bir oyun, oyun proqramlaşdırma və Süni Zəka üçün əla bir girişdir. Bu oyunda heç bir Süni Zəka Alqoritmindən istifadə etməsək də, daha mürəkkəb oyunlarda Süni Zəka Alqoritmlərinin niyə lazım olduğunu anlayacağıq.

Arduino üçün oyunlar hazırlamaq asan deyil və çox vaxt tələb edir. Ancaq Arduino üçün bəzi sadə oyunlar qura bilərik, çünki əyləncəlidir və süni intellekt kimi daha inkişaf etmiş proqramlaşdırma mövzularını araşdırmağa imkan verəcəkdir. Bu böyük bir öyrənmə təcrübəsidir və sonunda uşaqlar üçün gözəl bir oyun olacaq!

İndi bu layihəni hazırlayaq.

Addım 1: Bütün hissələri alın

Image
Image
2.8
2.8

Bu layihəni hazırlamaq üçün lazım olan hissələr aşağıdakılardır:

Bir Arduino Uno ▶

2.8 "Sensorlu Ekran ▶

Layihənin dəyəri çox aşağıdır. Cəmi 15 dollardır

Bu layihəni qurmağa cəhd etməzdən əvvəl lütfən toxunma ekranı haqqında hazırladığım videoya baxın. Mən bunu bu təlimata əlavə etdim. Kodu başa düşməyinizə və toxunma ekranını kalibr etməyə kömək edəcək.

Addım 2: Arduino üçün 2.8 "Touch Rəngli Ekran

Image
Image
2.8
2.8
2.8
2.8

Bu sensor ekranı banggood.com saytında kəşf etdim və bəzi layihələrimdə istifadə etməyə çalışmaq üçün satın almağa qərar verdim. Gördüyünüz kimi, ekran ucuzdur, təxminən 11 dollara başa gəlir.

Buradan əldə edin ▶

Ekran 320x240 piksel qətnamə təqdim edir və Arduino ilə əlaqəni son dərəcə asanlaşdıran bir qalxan olaraq gəlir. Gördüyünüz kimi, ekran Arduino Uno -nun demək olar ki, bütün rəqəmsal və analog pinlərindən istifadə edir. Bu qalxanı istifadə edərkən, layihələrimiz üçün yalnız 2 rəqəmsal pin və 1 analoq pinlə qalırıq. Xoşbəxtlikdən, ekran Arduino Mega ilə də yaxşı işləyir, buna görə daha çox sancağa ehtiyac duyduğumuz zaman Arduino Uno yerinə Arduino Mega istifadə edə bilərik. Təəssüf ki, bu ekran Arduino Due və ya Wemos D1 ESP8266 lövhəsi ilə işləmir. Qalxanın başqa bir üstünlüyü, istifadəsi çox asan olan bir micro SD yuvası təklif etməsidir.

Addım 3: Layihənin qurulması və sınanması

Layihənin qurulması və sınaqdan keçirilməsi
Layihənin qurulması və sınaqdan keçirilməsi
Layihənin qurulması və sınaqdan keçirilməsi
Layihənin qurulması və sınaqdan keçirilməsi
Layihənin qurulması və sınaqdan keçirilməsi
Layihənin qurulması və sınaqdan keçirilməsi

Ekranı Arduino Uno -ya bağladıqdan sonra kodu yükləyə bilərik və oynamağa hazırıq.

Əvvəlcə "Oyuna Başla" düyməsini basırıq və oyun başlayır. Əvvəlcə Arduino oynayır. Ekrana toxunaraq hərəkətimizi oynaya bilərik. Arduino daha sonra hərəkətini oynayır və s. Üfüqi, şaquli və ya diaqonal olaraq üç işarəni qoymağı bacaran oyunçu oyunu qazanır. Oyun bitdikdən sonra "Oyun bitdi" ekranı görünür. Daha sonra oyuna yenidən başlamaq üçün yenidən oynat düyməsini basa bilərik.

Arduino bu oyunda çox yaxşıdır. Oyunların çoxunu qazanacaq və ya çox yaxşı bir oyunçu olsanız, oyun heç -heçə bitəcək. Bu alqoritmi insan oyunçusuna qazanmaq şansı vermək üçün bəzi səhvlər etmək üçün qəsdən hazırladım. Oyunun koduna daha iki sətir əlavə edərək, Arduinonun oyunu uduzmasını qeyri -mümkün edə bilərik. Bəs 2 dollarlıq bir çip olan Arduino CPU insan beynini necə döyə bilər? İnkişaf etdirdiyimiz proqram insan beynindən daha ağıllıdırmı?

Addım 4: Oyun Alqoritmi

Oyun Alqoritmi
Oyun Alqoritmi
Oyun Alqoritmi
Oyun Alqoritmi

Bu suala cavab vermək üçün tətbiq etdiyim alqoritmə baxaq.

Kompüter həmişə birinci yerdə oynayır. Yalnız bu qərar, oyunu Arduinonun qazanmasını çox asanlaşdırır. İlk hərəkət həmişə bir küncdür. Arduino üçün ikinci hərəkət, oyunçunun hərəkətinə əhəmiyyət vermədən qalanlardan təsadüfi bir küncdür. Bu andan etibarən Arduino əvvəlcə oyunçunun növbəti hərəkətdə qalib gələ biləcəyini yoxlayır və bu hərəkəti bloklayır. Oyunçu tək bir hərəkətdə qalib gələ bilmirsə, əgər varsa küncdən hərəkət edir və ya qalanından təsadüfi. Budur, bu sadə alqoritm hər dəfə insan oyunçusunu məğlub edə bilər və ya ən pis halda oyun heç -heçə ilə nəticələnəcək. Bu ən yaxşı tic tac toe oyun alqoritmi deyil, ən sadələrindən biridir.

Bu alqoritm Arduinoda asanlıqla tətbiq oluna bilər, çünki Tic Tac Toe oyunu çox sadədir və asanlıqla analiz edib həll edə bilərik. Oyun ağacını dizayn etsək, bəzi qalibiyyət strategiyalarını kəşf edə və onları kodda asanlıqla tətbiq edə bilərik və ya CPU -nun oyun ağacını real vaxtda hesablamasına icazə verə bilərik və ən yaxşı hərəkəti özü seçər. Təbii ki, bu oyunda istifadə etdiyimiz alqoritm çox sadədir, çünki oyun çox sadədir. Şahmat üçün qalib bir alqoritm hazırlamağa çalışsaq, ən sürətli kompüterdən istifadə etsək də, min il ərzində oyun ağacını hesablaya bilmərik! Belə oyunlar üçün başqa bir yanaşmaya ehtiyacımız var, bəzi Süni Zəka alqoritmlərinə və əlbəttə ki, böyük emal gücünə ehtiyacımız var. Gələcək videoda bu barədə daha çox məlumat veriləcək.

Addım 5: Layihənin kodu

Layihənin kodu
Layihənin kodu

Layihənin koduna qısa bir nəzər salaq. Kodun tərtib edilməsi üçün üç kitabxanaya ehtiyacımız var.

  1. Adafruit TFTLCD:
  2. Adafruit GFX:
  3. Dokunmatik ekran:

Gördüyünüz kimi, belə sadə bir oyun belə, 600 -dən çox kod xətti tələb edir. Kod mürəkkəbdir, buna görə qısa dərslikdə izah etməyə çalışmayacağam. Sizə Arduino hərəkətləri alqoritminin tətbiqini göstərəcəyəm.

Əvvəlcə iki təsadüfi künc oynayırıq.

<int firstMoves = {0, 2, 6, 8}; // əvvəlcə bu mövqelərdən istifadə edəcək (counter = 0; counter <4; counter ++) // Oynanan ilk hərəkətləri say {if (board [firstMoves [counter]! = 0) // İlk hərəkəti kimsə oynayır {movePlayed ++; }} do {if (Move <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (board [c] == 0) {gecikmə (1000); lövhə [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Sonra, hər turda oyunçunun növbəti hərəkətdə qalib gələ biləcəyini yoxlayırıq.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) qayıt 2; başqa halda (board [0] == 1 && board [1] == 0 && board [2] == 1) 1 qaytar; başqa halda (board [1] == 1 && board [2] == 1 && board [0] == 0) 0 qaytar; başqa halda (board [3] == 1 && board [4] == 1 && board [5] == 0) 5 qaytar; başqa halda (board [4] == 1 && board [5] == 1 && board [3] == 0) qayıt 3; başqa halda (board [3] == 1 && board [4] == 0 && board [5] == 1) qayıt 4; başqa halda (board [1] == 0 && board [4] == 1 && board [7] == 1) 1 qaytar; başqa 100 qaytar; }

Bəli, çox vaxt bu hərəkəti maneə törədirik. İnsan oyunçusuna qazanmaq şansı vermək üçün bütün hərəkətləri maneə törətmirik. Hansı hərəkətlərin bloklanmadığını tapa bilərsinizmi? Hərəkəti maneə törətdikdən sonra qalan bir künc və ya təsadüfi bir hərəkət oynayırıq. Kodu öyrənə və öz rəqibsiz alqoritminizi asanlıqla tətbiq edə bilərsiniz. Həmişə olduğu kimi, bu təlimata əlavə olunan layihənin kodunu tapa bilərsiniz.

Qeyd: Banggood eyni ekranı iki fərqli ekran sürücüsü ilə təqdim etdiyi üçün yuxarıdakı kod işləmirsə, initDisplay funksiyasını aşağıdakı kimi dəyişdirin:

etibarsız initDisplay ()

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

Addım 6: Son Düşüncələr və Təkmilləşdirmələr

Son Fikirlər və Təkmilləşdirmələr
Son Fikirlər və Təkmilləşdirmələr

Gördüyünüz kimi, bir Arduino Uno ilə belə sadə oyunlar üçün misilsiz bir alqoritm qura bilərik. Bu layihə əladır, çünki qurmaq asandır və eyni zamanda Süni intellekt və oyun proqramlaşdırma üçün əla bir girişdir. Gələcəkdə daha güclü Raspberry Pi istifadə edərək Süni Zəka ilə daha inkişaf etmiş layihələr qurmağa çalışacağam, buna görə də bizi izləyin! Bu layihə haqqında fikirlərinizi eşitmək istərdim.

Zəhmət olmasa şərhlərinizi aşağıda yazın və maraqlı olarsa təlimatı bəyənməyi unutmayın. Təşəkkürlər!

Tövsiyə: