İçindekiler:

ATtiny85 ve OLED Ekran SSD1306'da Flappy Bird: 6 Adım (Resimlerle)
ATtiny85 ve OLED Ekran SSD1306'da Flappy Bird: 6 Adım (Resimlerle)

Video: ATtiny85 ve OLED Ekran SSD1306'da Flappy Bird: 6 Adım (Resimlerle)

Video: ATtiny85 ve OLED Ekran SSD1306'da Flappy Bird: 6 Adım (Resimlerle)
Video: GC_Rogue OLED + Arduino +Joystiсk 2024, Kasım
Anonim
Image
Image
Donanım
Donanım

Selam millet, Bugün size oluşturduğum basit bir flappy bird klonunu ve benzer bir oyunu nasıl yapabileceğinizi göstereceğim. Esasen kodumu sizinle birlikte inceleyeceğim ve yolun her adımında nasıl çalıştığını açıklayacağım. Bu oyun, I2C OLED ekranlı, 1MHz'de saat hızına sahip bir ATtiny85'te çalışacak şekilde tasarlanmıştır. İleri!

Adım 1: Donanım

Oyun için gerçekten bir devre inşa etmekle ilgilenmiyorsanız, ancak arkasındaki teoriyi anlıyorsanız, bu adımı atlayabilirsiniz.

Oyunum iki düğme, bir ATtiny85, bir I2C OLED 128x64px ekran ve bir miktar güç kaynağı gerektiriyor. Eğitilebilir Kartvizitim/Oyun Konsolum: ATtiny85 ve OLED Ekranı, üzerinde ihtiyacınız olan her şeye sahip bir tahtayı nasıl oluşturacağınızı gösterir! Tahtamı yapmakla ilgilenmiyorsanız, devre tahtanızı çıkarın, size özellikleri anlatacağım. ATtiny85'in herhangi bir çeşidini kullanabilirsiniz. Bunun gibi OLED ekranları öneririm.

  1. ATtiny85'inizdeki 2 ve 3 numaralı pinlere iki basmalı düğmenin bir tarafını bağlayın. Bu kabloların üzerine ayrıca toprağa bağlı 10k ohm'luk bir direnç ekleyin (aşağı çekme direnci).
  2. Bu butonların diğer tarafını voltaja bağlayın. Düğmeye basılmadığında, pin durumu düşük olacaktır. Basıldığında, pin durumu yüksek olacaktır.
  3. 7 numaralı pini ekranınızdaki SCL pinine ve 5 numaralı pini ekranınızdaki SDA pinine bağlayın. Ekrandaki güç pimlerini (VCC ve GND) uygun şekilde bağlayın.
  4. Son olarak, ATtiny'deki 4 numaralı pini toprağa ve 8 numaralı pini voltaja bağlayın.

Adım 2: Yazılım

Yazılım!
Yazılım!

Ekli, oyunu çalıştırmak için ihtiyacınız olan tüm dosyaları içeren bir klasördür. Dosyalardan ikisi, FlappyBird.ino ve WallFunctions.h, okuma zevkiniz için çok iyi yorumlanmıştır. FlappyBird.ino çizimini ATtiny85'inize (1MHz'de) yükleyebilir ve oynayabilirsiniz! Bu oyunun arkasındaki teoriyi öğrenmek ilginizi çekiyorsa veya kendi oyununuzu yapmak istiyorsanız okumaya devam edin!

Oyunumda hala birkaç sorun var. I2C, hiçbir şekilde veri iletmenin en iyi yolu değildir. Bu gönderiye göre, ekran yalnızca yaklaşık 100KHz'de veri kabul edebilir, bu nedenle ATtiny saat hızını 8MHz'e çıkarsak bile I2C kanalı hala darboğaz olacaktır. Ekran maksimum yaklaşık 10 fps çıkış verebilir. Ekranın ne kadar ayrı resim çizmesi gerekiyorsa, tüm süreç o kadar yavaş olur. Bu nedenle, duvarları ekran boyunca çok hızlı hareket ettiremeyeceğiniz için oyunum oldukça kolay! Göreve hazır olduğunuzu düşünüyorsanız, aşağıda sizin için bazı zorluklar var:

  • Oyunu zorlaştırmak için, duvarlar arasındaki mesafeyi 4 yerine 2'ye getirip getiremeyeceğinize bakın. Programımın nasıl çalıştığını anladıktan sonra bu çok zor olmamalı:). Çalıştırabilirseniz lütfen yorumlara yazın!
  • Oyunumda eksik olan başka bir şey de bir skor sistemi ve skoru göstermenin ve kaydetmenin bir yolu. Bakalım bir tane uygulayabilecek misin!
  • Son olarak, duvarların her seferinde bir sütunu hareket ettirmesini sağlamak yerine, daha yumuşak hareket için her bir duvarın her seferinde bir pikseli hareket ettirmesini deneyin.

Adım 3: Flappy Bird ATtiny85: Teori

Flappy Bird ATtiny85: Teori
Flappy Bird ATtiny85: Teori

Kullandığımız ekran oyun için 64 piksel yüksekliğe sahip olsa da, öğeleri yalnızca 8 piksellik bloklar halinde konumlandırmak mümkün. Bu nedenle, yalnızca 8 olası y koordinatı vardır. İşleri kolaylaştırmak için, yazılımda tüm ekranı bu şekilde böldüm, her bloğun 8x8 piksel olduğu 16 blok x 8 bloktan oluşan bir ızgara yaptım. Her bloğu doldurmak için oyundaki her hareketli karakter 8x8 pikseldir. Bu, her şeyi yönetmeyi ÇOK daha kolay hale getirir. Yukarıdaki resme bakarsanız, ekranı nasıl böldüğümü görebilirsiniz. Her bir duvar, 2 blok yüksekliğinde bir delik ile 6 bloktan oluşur ve her bir duvarın toplam yüksekliğini 8 blok yapar.

Programda her duvar, Duvar adı verilen bir yapı olarak temsil edilmektedir. Her Duvar yapısının iki özelliği vardır - delikKonumu ve sütun. 'holePosition' 0-6 sayısıdır, çünkü 2 blok yüksekliğinde bir delik için 8 bloktan oluşan bir duvarda yalnızca 7 olası konum vardır. 'sütun' 0-15 arasında bir sayıdır, çünkü ekranda 16 sütun blok olabilir.

Önerilen: