Mündəricat:

ATtiny85 və OLED Display SSD1306 -da Flappy Bird: 6 Addım (Şəkillərlə birlikdə)
ATtiny85 və OLED Display SSD1306 -da Flappy Bird: 6 Addım (Şəkillərlə birlikdə)

Video: ATtiny85 və OLED Display SSD1306 -da Flappy Bird: 6 Addım (Şəkillərlə birlikdə)

Video: ATtiny85 və OLED Display SSD1306 -da Flappy Bird: 6 Addım (Şəkillərlə birlikdə)
Video: PIC32MM0064GPL028 SSD1306 I2C 2024, Noyabr
Anonim
Image
Image
Avadanlıq
Avadanlıq

Hamıya Salam

Bu gün sizə yaratdığım əsas quş quşu klonunu və oxşar bir oyun hazırlamağa necə gedə biləcəyinizi göstərəcəyəm. Əsasən kodumu sizinlə birlikdə işləyəcəyəm və hər addımda necə işlədiyini izah edəcəyəm. Bu oyun, I2C OLED ekranı olan, 1MHz tezlikli ATtiny85 üzərində çalışmaq üçün qurulmuşdur. İrəli!

Addım 1: Hardware

Oyun üçün bir dövrə qurmaqla maraqlanmırsınızsa, amma bunun arxasındakı nəzəriyyəni anlayırsınızsa, bu addımı atlaya bilərsiniz.

Oyunum iki düymə, ATtiny85, I2C OLED 128x64px ekran və bəzi güc mənbəyi tələb edir. Təlimat Verilə bilən Vizit Kartım/Oyun Konsolu: ATtiny85 və OLED Ekranı sizə lazım olan hər şeyi olan bir lövhə qurmağınızı göstərir! Lövhəmin hazırlanması ilə maraqlanmırsınızsa, çörək taxtanızdan çıxın və sizə spesifikasiyaları söyləyim. ATtiny85 -in istənilən variantından istifadə edə bilərsiniz. Bunun kimi OLED ekranları tövsiyə edirəm.

  1. İki düymənin bir tərəfini ATtiny85 -də 2 və 3 -cü pinlərə bağlayın. Bu tellərə, yerə qoşulmuş 10k ohm rezistor da əlavə edin (aşağıya doğru müqavimət).
  2. Bu düymələrin digər tərəfini gərginliyə bağlayın. Düymə basılmadığında, pin vəziyyəti aşağı olacaq. Basıldığında, pin vəziyyəti yüksək olacaq.
  3. Pin 7 -ni ekranınızdakı SCL pininə və pin 5 -i ekranınızdakı SDA pininə bağlayın. Ekrandakı güc pinlərini (VCC və GND) buna uyğun olaraq bağlayın.
  4. Nəhayət, ATtiny üzərindəki pin 4 -ü yerə və pin 8 -ni gərginliyə bağlayın.

Addım 2: Proqram təminatı

Proqram!
Proqram!

Oyunu işə salmaq üçün lazım olan bütün faylları olan bir qovluq burada əlavə olunur. Fayllardan ikisi, FlappyBird.ino və WallFunctions.h, oxumaq zövqünüz üçün çox yaxşı şərh edilmişdir. FlappyBird.ino eskizini ATtiny85 -ə (1MHz -də) yükləyib uzaqda oynaya bilərsiniz! Bu oyunun arxasındakı nəzəriyyəni öyrənmək sizi maraqlandırırsa və ya öz oyununuzu etmək istəyirsinizsə, oxuyun!

Oyunumda hələ də bir neçə problem var. I2C heç bir şəkildə məlumat ötürməyin ən yaxşı yolu deyil. Bu yazıya görə, ekran yalnız təxminən 100 KHz -də məlumat qəbul edə bilər, buna görə ATtiny saat sürətini 8 MHz -ə qədər qaldırsaq belə, I2C kanalı yenə də darboğaz olacaq. Ekran maksimum 10 kadr / saniyə çıxara bilir. Ekranın nə qədər ayrı şəkillər çəkməsi lazımdırsa, bütün proses o qədər yavaş olur. Beləliklə, divarlarımın ekran boyunca çox sürətlə hərəkət etməsini ala bilmədiyiniz üçün oyunum olduqca asandır! İşin öhdəsindən gəldiyinizi düşünürsünüzsə, aşağıda sizin üçün bəzi çətinliklər var:

  • Oyunu çətinləşdirmək üçün, divarlar arasındakı boşluğun 4 deyil, 2 olmasını əldə edə biləcəyinizə baxın. Proqramımın necə işlədiyini başa düşdükdən sonra çox çətin olmamalıdır:). Zəhmət olmasa işləyə bilsəniz şərhlərdə yazın!
  • Oyunun çatışmadığı başqa bir şey, hesab sistemi və hesabı göstərmək və saxlamaq üçün bir yoldur. Birini həyata keçirə biləcəyinizə baxın!
  • Son olaraq, divarların bir anda bir sütunu hərəkət etdirməsindən çox, daha hamar bir hərəkət üçün hər divarın bir anda bir piksel hərəkət etməsinə çalışın.

Addım 3: Flappy Bird ATtiny85: nəzəriyyə

Flappy Bird ATtiny85: nəzəriyyə
Flappy Bird ATtiny85: nəzəriyyə

Oyun üçün istifadə etdiyimiz ekranın 64 piksel yüksəklikdə olmasına baxmayaraq, elementləri yalnız 8 piksellik bloklara yerləşdirmək mümkündür. Beləliklə, yalnız 8 mümkün y koordinatı var. İşi asanlaşdırmaq üçün, proqramda, bütün blokları 8x8 piksel olan 16 blokdan 8 blokdan ibarət bir şəbəkə düzəldərək bütün ekranı bu şəkildə böldüm. Hər bloku doldurmaq üçün oyundakı hər sprite 8x8 pikseldir. Bu, hər şeyi idarə etməyi çox asanlaşdırır. Yuxarıdakı görüntüyə baxsanız, ekranı necə ayırdığımı görə bilərsiniz. Hər bir divar 6 blokdan ibarətdir, 2 blok hündürlüyündə, hər divarın ümumi hündürlüyü 8 blokdur.

Proqramda hər divar Divar adlanan bir quruluş olaraq təmsil olunur. Hər bir divar quruluşunun iki xüsusiyyəti var - holePosition və sütun. 'holePosition', 0-6 rəqəmidir, çünki 2 blok yüksəklikdə bir çuxur üçün 8 blokdan ibarət bir divarda yalnız 7 mümkün mövqe var. 'sütun' 0-15 rəqəmidir, çünki ekranda 16 blok sütunu ola bilər.

Tövsiyə: