Mundarija:

Arduino Touch Tic Tac Toe o'yini: 6 qadam (rasmlar bilan)
Arduino Touch Tic Tac Toe o'yini: 6 qadam (rasmlar bilan)

Video: Arduino Touch Tic Tac Toe o'yini: 6 qadam (rasmlar bilan)

Video: Arduino Touch Tic Tac Toe o'yini: 6 qadam (rasmlar bilan)
Video: Arduino - Tic Tac Toe Game with Touchpad 2024, Iyun
Anonim
Image
Image
Arduino Touch Tic Tac Toe o'yini
Arduino Touch Tic Tac Toe o'yini
Arduino Touch Tic Tac Toe o'yini
Arduino Touch Tic Tac Toe o'yini
Arduino Touch Tic Tac Toe o'yini
Arduino Touch Tic Tac Toe o'yini

Aziz do'stlar, Arduino -ning boshqa darsiga xush kelibsiz! Ushbu batafsil qo'llanmada biz Arduino Tic Tac Toe o'yinini qurmoqchimiz. Ko'rib turganingizdek, biz sensorli ekranni ishlatamiz va biz kompyuterga qarshi o'ynaymiz. Tic Tac Toe kabi oddiy o'yin - bu o'yin dasturlash va sun'iy intellektga ajoyib kirish. Garchi biz bu o'yinda sun'iy intellekt algoritmlaridan foydalanmasak ham, nima uchun sun'iy intellekt algoritmlari murakkab o'yinlarda talab qilinishini tushunamiz.

Arduino uchun o'yinlarni ishlab chiqish oson emas va ko'p vaqtni talab qiladi. Ammo biz Arduino uchun oddiy o'yinlar qura olamiz, chunki bu qiziqarli va bu bizga sun'iy intellekt kabi bir qancha ilg'or dasturlash mavzularini o'rganishga imkon beradi. Bu ajoyib o'rganish tajribasi va oxirida siz bolalar uchun yoqimli o'yin o'tkazasiz!

Endi bu loyihani tuzamiz.

1 -qadam: Barcha qismlarni oling

Image
Image
2.8
2.8

Loyihani amalga oshirish uchun quyidagi qismlar zarur:

Bir Arduino Uno ▶

2.8 dyuymli sensorli ekran ▶

Loyihaning qiymati juda past. Bu atigi 15 dollar

Ushbu loyihani amalga oshirishdan oldin, men sensorli displey haqida tayyorlagan videoni tomosha qiling. Men buni ushbu ko'rsatmaga biriktirdim. Bu sizga kodni tushunishga va sensorli ekranni sozlashga yordam beradi.

2 -qadam: Arduino uchun 2,8 dyuymli sensorli rangli displey

Image
Image
2.8
2.8
2.8
2.8

Men bu sensorli ekranni banggood.com saytida topdim va uni ba'zi loyihalarimda ishlatishga harakat qilib sotib olishga qaror qildim. Ko'rib turganingizdek, displey arzon, uning narxi 11 dollar atrofida.

Bu yerdan oling ▶

Displey 320x240 pikselli piksellar sonini taqdim etadi va u qalqon sifatida keladi, bu esa Arduino bilan ulanishni juda osonlashtiradi. Ko'rib turganingizdek, displeyda Arduino Uno -ning deyarli barcha raqamli va analog pinlari ishlatiladi. Ushbu qalqondan foydalanganda bizda faqat 2 ta raqamli pin va 1 ta analog pin bor. Yaxshiyamki, displey Arduino Mega bilan ham yaxshi ishlaydi, shuning uchun bizga ko'proq pin kerak bo'lganda Arduino Uno o'rniga Arduino Mega -dan foydalanishimiz mumkin. Afsuski, bu displey Arduino Due yoki Wemos D1 ESP8266 kartasi bilan ishlamaydi. Qalqonning yana bir afzalligi shundaki, u foydalanish uchun juda qulay bo'lgan micro SD uyasini taklif qiladi.

3 -qadam: Loyihani yaratish va uni sinovdan o'tkazish

Loyihani yaratish va uni sinovdan o'tkazish
Loyihani yaratish va uni sinovdan o'tkazish
Loyihani yaratish va uni sinovdan o'tkazish
Loyihani yaratish va uni sinovdan o'tkazish
Loyihani yaratish va uni sinovdan o'tkazish
Loyihani yaratish va uni sinovdan o'tkazish

Ekranni Arduino Uno -ga ulab bo'lgach, biz kodni yuklay olamiz va biz o'ynashga tayyormiz.

Avvaliga biz "O'yinni boshlash" tugmachasini bosamiz va o'yin boshlanadi. Arduino birinchi bo'lib o'ynaydi. Biz o'z harakatlarimizni ekranga tekkizishimiz mumkin. Keyin Arduino o'z harakatini o'ynaydi va hokazo. Uchta belgini gorizontal, vertikal yoki diagonal qatorga qo'yishga muvaffaq bo'lgan o'yinchi g'alaba qozonadi. O'yin tugagach, O'yin tugashi ekrani paydo bo'ladi. Keyin o'yinni qayta boshlash uchun yana o'ynash tugmachasini bosishimiz mumkin.

Arduino bu o'yinda juda yaxshi. U ko'p o'yinlarda g'alaba qozonadi, yoki agar siz juda yaxshi o'yinchi bo'lsangiz, o'yin durang bilan tugaydi. Men bu algoritmni qasddan odam o'yinchisiga g'alaba qozonish uchun xato qilish uchun ishlab chiqdim. O'yin kodiga yana ikkita qator qo'shib, biz Arduino -ni o'yinni yutqazib bo'lmaydigan qilib qo'yishimiz mumkin. Lekin qanday qilib 2 dollarlik chip - Arduino CPU inson miyasini mag'lub qila oladi? Biz ishlab chiqqan dastur inson miyasidan aqlli bo'ladimi?

4 -qadam: O'yin algoritmi

O'yin algoritmi
O'yin algoritmi
O'yin algoritmi
O'yin algoritmi

Bu savolga javob berish uchun, men bajargan algoritmni ko'rib chiqaylik.

Kompyuter har doim birinchi o'rinda turadi. Faqatgina bu qaror Arduino uchun g'alabani osonlashtiradi. Birinchi qadam har doim burchakdir. Arduino uchun ikkinchi harakat - bu o'yinchining harakatiga umuman ahamiyat bermasdan qolganlarning tasodifiy burchagi. Shu vaqtdan boshlab, Arduino birinchi navbatda o'yinchi keyingi harakatda g'alaba qozona oladimi yoki yo'qligini tekshiradi. Agar o'yinchi bitta harakatda g'alaba qozona olmasa, u burchakda, qolganida tasodifiy harakatda o'ynaydi. Mana, bu oddiy algoritm har safar odam o'yinchisini mag'lub etishi mumkin yoki eng yomon holatda o'yin durangga olib keladi. Bu eng yaxshi tac toe o'yini algoritmi emas, lekin eng oddiylaridan biri.

Bu algoritm Arduinoda osonlik bilan amalga oshirilishi mumkin, chunki Tic Tac Toe o'yini juda oddiy va biz uni oson tahlil qilib, hal qila olamiz. Agar biz o'yin daraxtini loyihalashtirsak, biz ba'zi yutuqli strategiyalarni kashf etamiz va ularni kodda osonlik bilan amalga oshiramiz, yoki biz protsessorga o'yin daraxtini real vaqtda hisoblashiga ruxsat beramiz va o'zi eng yaxshi harakatni tanlaydi. Albatta, biz bu o'yinda ishlatadigan algoritm juda oddiy, chunki o'yin juda oddiy. Agar biz shaxmat uchun yutuqli algoritmni yaratishga harakat qilsak, hatto eng tezkor kompyuterdan foydalansak ham, ming yil ichida o'yin daraxtini hisoblay olmaymiz! Bunday o'yinlar uchun bizga boshqa yondashuv kerak, bizga sun'iy intellektning ba'zi algoritmlari va, albatta, katta ishlov berish kuchi kerak. Bu haqda batafsil keyingi videoda.

5 -qadam: Loyihaning kodi

Loyihaning kodi
Loyihaning kodi

Loyihaning kodini tezda ko'rib chiqaylik. Kodni kompilyatsiya qilish uchun bizga uchta kutubxona kerak.

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

Ko'rib turganingizdek, hatto bunday oddiy o'yin uchun ham 600 dan ortiq kod satri kerak. Kod murakkab, shuning uchun men uni qisqa darslikda tushuntirishga harakat qilmayman. Men sizga Arduino harakatlari algoritmining bajarilishini ko'rsataman.

Avvaliga biz ikkita tasodifiy burchakni o'ynaymiz.

<int firstMoves = {0, 2, 6, 8}; // bu pozitsiyalarni birinchi navbatda ishlatadi (taymer = 0; hisoblagich <4; hisoblagich ++) // Birinchi o'ynalgan harakatlarni sanash {if (board [firstMoves [counter]! = 0) // Birinchi harakatni kimdir o'ynaydi {movePlayed ++; }} qilish {if (harakatlari <= 2) {int randomMove = random (4); int c = firstMoves [randomMove]; if (taxta [c] == 0) {kechikish (1000); taxta [c] = 2; Serial.print (firstMoves [randomMove]); Serial.println (); drawCpuMove (firstMoves [randomMove]); b = 1; }}

Keyingi, har bir turda o'yinchi keyingi harakatda g'alaba qozona oladimi yoki yo'qligini tekshirib ko'ramiz.

int checkOpponent ()

{if (board [0] == 1 && board [1] == 1 && board [2] == 0) qaytish 2; else if (board [0] == 1 && board [1] == 0 && board [2] == 1) 1 qaytarish; aks holda (board [1] == 1 && board [2] == 1 && board [0] == 0) 0 qaytaring; aks holda (bort [3] == 1 && board [4] == 1 && board [5] == 0) 5 qaytish; aks holda (board [4] == 1 && board [5] == 1 && board [3] == 0) 3 qaytish; aks holda (bort [3] == 1 && board [4] == 0 && board [5] == 1) qaytish 4; aks holda (board [1] == 0 && board [4] == 1 && board [7] == 1) 1 qaytarish; boshqa 100 qaytaring; }

Ha bo'lsa, biz ko'pincha bu harakatni to'sib qo'yamiz. Biz inson o'yinchisiga g'alaba qozonish imkoniyatini berish uchun barcha harakatlarni to'smaymiz. Qaysi harakatlar bloklanmaganligini topa olasizmi? Harakatni to'sib qo'ygandan so'ng, biz qolgan burchakni yoki tasodifiy harakatni o'ynaymiz. Siz kodni o'rganishingiz va o'zingizning tengsiz algoritmingizni osongina amalga oshirishingiz mumkin. Har doimgidek, ushbu ko'rsatmaga biriktirilgan loyiha kodini topishingiz mumkin.

QAYD: Banggood ikkita displey drayveri bilan bir xil displeyni taklif qilgani uchun, agar yuqoridagi kod ishlamasa, initDisplay funksiyasini quyidagicha o'zgartiring:

void initDisplay ()

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

6 -qadam: Yakuniy fikrlar va yaxshilanishlar

Yakuniy fikrlar va yaxshilanishlar
Yakuniy fikrlar va yaxshilanishlar

Ko'rib turganingizdek, hatto Arduino Uno -da ham biz oddiy o'yinlar uchun tengsiz algoritm tuza olamiz. Bu loyiha juda zo'r, chunki uni qurish oson va shu bilan birga sun'iy intellekt va o'yin dasturlashiga ajoyib kirish. Men kelgusida yanada kuchli Raspberry Pi yordamida sun'iy intellekt yordamida yanada ilg'or loyihalarni qurishga harakat qilaman, shuning uchun bizni kuzatib turing! Bu loyiha haqidagi fikringizni eshitishni istardim.

Iltimos, sharhlaringizni quyida yozing va agar sizga qiziq bo'lsa, ko'rsatmalarni yoqtirishni unutmang. Rahmat!

Tavsiya: