Mundarija:

ATtiny85 va SSD1306 OLED displeyidagi Flappy Bird: 6 qadam (rasmlar bilan)
ATtiny85 va SSD1306 OLED displeyidagi Flappy Bird: 6 qadam (rasmlar bilan)

Video: ATtiny85 va SSD1306 OLED displeyidagi Flappy Bird: 6 qadam (rasmlar bilan)

Video: ATtiny85 va SSD1306 OLED displeyidagi Flappy Bird: 6 qadam (rasmlar bilan)
Video: ATtiny85 Project DHT21 Temperature & Humidity Sensor and SSD1306 Oled Display, Arduino IDE 2024, Noyabr
Anonim
Image
Image
Uskuna
Uskuna

Salom hammaga

Bugun men sizga o'zim yaratgan qushlarning asosiy klonini va shunga o'xshash o'yinni qanday qilish kerakligini ko'rsataman. Men siz bilan kodimni ko'rib chiqaman va u har qadamda qanday ishlashini tushuntiraman. Bu o'yin I2C OLED displeyli, 1 MGts chastotali ATtiny85 da ishlash uchun qurilgan. Oldinga!

1 -qadam: Uskuna

Agar siz o'yin sxemasini tuzishni xohlamasangiz, lekin uning nazariyasini tushunsangiz, bu bosqichni o'tkazib yuborishingiz mumkin.

Mening o'yinim uchun ikkita tugma, ATtiny85, I2C OLED 128x64 pikselli ekran va quvvat manbai kerak. Mening yo'riqnomam/O'yin konsoli: ATtiny85 va OLED ekrani sizga kerakli hamma narsani o'z ichiga olgan taxtani qanday qurishni ko'rsatib beradi! Agar siz mening taxtamni yasashni xohlamasangiz, non panelidan chiqing, men sizga texnik xususiyatlarni aytib beraman. Siz ATtiny85 -ning istalgan variantidan foydalanishingiz mumkin. Men shunga o'xshash OLED -displeylarni tavsiya qilaman.

  1. ATtiny85 -dagi 2 va 3 -pinlarga ikkita tugmachaning bir tomonini ulang. Ushbu simlarga, shuningdek, erga ulangan 10k ohmli rezistor qo'shing (pastga tushadigan qarshilik).
  2. Ushbu tugmachalarning boshqa tomonini kuchlanish bilan bog'lang. Tugma bosilmaganda, pin holati past bo'ladi. U bosilganda, pin holati baland bo'ladi.
  3. 7 -pinni displeydagi SCL piniga va 5 -pinni displeydagi SDA piniga ulang. Quvvat pinlarini (VCC va GND) mos ravishda displeyga ulang.
  4. Nihoyat, ATtiny -dagi 4 -pinni erga va 8 -pinni kuchlanish bilan ulang.

2 -qadam: Dasturiy ta'minot

Dasturiy ta'minot!
Dasturiy ta'minot!

Bu erda o'yinni ishga tushirish uchun kerak bo'lgan barcha fayllar joylashgan papka biriktirilgan. FlappyBird.ino va WallFunctions.h fayllaridan ikkitasi o'qishdan zavqlanish uchun juda yaxshi izohlangan. Siz FlappyBird.ino eskizini ATtiny85 -ga (1 MGts chastotasida) yuklashingiz va o'ynab ketishingiz mumkin! Agar bu o'yinning nazariyasini o'rganish sizni qiziqtirsa yoki siz o'z o'yiningizni yaratmoqchi bo'lsangiz, o'qing!

O'yinimda hali ham bir nechta muammolar bor. I2C har qanday usulda ma'lumotlarni uzatishning eng yaxshi usuli emas. Bu xabarga ko'ra, displey faqat 100 kGts tezlikdagi ma'lumotlarni qabul qila oladi, shuning uchun ATtiny soat tezligini 8 MGts ga ko'targanimizda ham, I2C kanali hamon to'siq bo'ladi. Displey maksimal 10 kadr tezlikda chiqishi mumkin. Ekran qancha alohida rasm chizishi kerak bo'lsa, butun jarayon shunchalik sekinlashadi. Shunday qilib, mening o'yinim juda oson, chunki siz devorlarni ekran bo'ylab tez harakat qila olmaysiz! Agar siz o'z vazifangizni bajardingiz deb hisoblasangiz, quyida siz uchun ba'zi qiyinchiliklar mavjud:

  • O'yinni qiyinlashtirish uchun, devorlar orasidagi masofani 4 o'rniga 2 ga bo'lishini bilib oling, mening dasturim qanday ishlashini tushunganingizdan keyin juda qiyin bo'lmasligi kerak:). Ishlay olsangiz, iltimos, izohlarda yozing!
  • Mening o'yinimning yana bir kamchiligi - bu ballar tizimi va hisobni ko'rsatish va uni saqlash usuli. Qarang, siz buni amalga oshira olasizmi!
  • Va nihoyat, devorlar birma -bir ustunni siljitmasdan, silliqroq harakat qilish uchun har bir devorni bir vaqtning o'zida bitta pikselga o'tkazishga harakat qiling.

3 -qadam: Flappy Bird ATtiny85: nazariya

Flappy Bird ATtiny85: nazariya
Flappy Bird ATtiny85: nazariya

Garchi biz foydalanadigan displeyda o'yin uchun foydalanish mumkin bo'lgan 64 pikselli balandlik bo'lsa -da, elementlarni faqat 8 pikselli bloklarga joylashtirish mumkin. Shunday qilib, faqat 8 ta y koordinatalari mavjud. Ishni osonlashtirish uchun, dasturiy ta'minotda men butun ekranni shunday ajratdim, har bir blok 8x8 pikselli 16 blokli 8 blokli panjara yasadim. Har bir blokni to'ldirish uchun o'yindagi har bir sprite 8x8 piksel. Bu hamma narsani boshqarishni ancha osonlashtiradi. Agar siz yuqoridagi rasmga qarasangiz, ekranni qanday ajratganimni ko'rasiz. Har bir devor 6 blokdan iborat bo'lib, teshiklari 2 blok balandlikda, har bir devorning umumiy balandligi 8 blokdan iborat.

Dasturda har bir devor devor deb nomlangan struktura sifatida tasvirlangan. Har bir devor tuzilishi ikkita xususiyatga ega - holePosition va ustun. "holePosition"-bu 0-6 raqami, chunki 2 blok balandlikdagi teshik uchun 8 blokli devorda atigi 7 ta pozitsiya mavjud. "ustun"-bu 0-15 raqami, chunki ekranda 16 ta blokli ustun bo'lishi mumkin.

Tavsiya: