Isi kandungan:

Flappy Bird pada Paparan ATtiny85 dan OLED SSD1306: 6 Langkah (dengan Gambar)
Flappy Bird pada Paparan ATtiny85 dan OLED SSD1306: 6 Langkah (dengan Gambar)

Video: Flappy Bird pada Paparan ATtiny85 dan OLED SSD1306: 6 Langkah (dengan Gambar)

Video: Flappy Bird pada Paparan ATtiny85 dan OLED SSD1306: 6 Langkah (dengan Gambar)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, November
Anonim
Image
Image
Perkakasan
Perkakasan

Hai semua, Hari ini saya akan menunjukkan kepada anda klon burung flappy asas yang saya buat, dan bagaimana anda boleh membuat permainan serupa. Pada dasarnya saya akan membaca kod saya dengan anda dan menerangkan bagaimana ia berfungsi setiap langkah. Permainan ini dibuat untuk berjalan pada ATtiny85 yang dicatat pada 1MHz, dengan paparan OLED I2C. Maju!

Langkah 1: Perkakasan

Sekiranya anda tidak berminat untuk benar-benar membina litar untuk permainan tetapi memahami teori di belakangnya, anda boleh melangkau langkah ini.

Permainan saya memerlukan dua butang, ATtiny85, layar I2C OLED 128x64px, dan beberapa sumber kuasa. Kad Perniagaan / Konsol Permainan Saya yang Dapat Diajar: ATtiny85 dan OLED Screen menunjukkan kepada anda cara membina papan yang mempunyai semua yang anda perlukan! Sekiranya anda tidak berminat membuat papan saya, keluarkan papan roti anda dan saya akan memberitahu spesifikasinya. Anda boleh menggunakan sebarang varian ATtiny85. Saya cadangkan paparan OLED seperti ini.

  1. Kabelkan satu sisi dari dua butang tekan ke pin 2 dan 3 pada ATtiny85 anda. Pada wayar ini, tambahkan perintang 10k ohm yang disambungkan ke tanah (perintang tarik ke bawah).
  2. Kabelkan bahagian lain butang tekan ini ke voltan. Apabila butang tidak ditekan, keadaan pin akan rendah. Apabila ditekan, keadaan pin akan tinggi.
  3. Sambungkan pin 7 ke pin SCL pada paparan anda, dan pin 5 ke pin SDA pada paparan anda. Kabelkan pin kuasa (VCC dan GND) pada paparan dengan sewajarnya.
  4. Akhir sekali, sambungkan pin 4 pada ATtiny ke tanah dan pin 8 ke voltan.

Langkah 2: Perisian

Perisian!
Perisian!

Terlampir di sini adalah folder dengan semua fail yang anda perlukan untuk menjalankan permainan. Dua fail, FlappyBird.ino dan WallFunctions.h, sangat baik dikomen untuk keseronokan membaca anda. Anda boleh memuat naik lakaran FlappyBird.ino ke ATtiny85 anda (pada 1MHz), dan bermain! Sekiranya mempelajari teori di sebalik permainan ini menarik minat anda, atau anda ingin membuat permainan anda sendiri, maka baca terus!

Masih ada beberapa masalah dengan permainan saya. I2C bukanlah kaedah terbaik untuk menghantar data dengan cara apa pun. Menurut catatan ini, paparan hanya dapat menerima data pada sekitar 100KHz, jadi walaupun kita menaikkan kecepatan jam ATtiny hingga 8MHz, saluran I2C akan tetap menjadi hambatan. Paparan boleh menghasilkan maksimum 10fps. Semakin banyak gambar yang terpisah yang perlu dilukis oleh paparan, semakin perlahan keseluruhan prosesnya. Oleh itu, permainan saya agak mudah kerana anda tidak boleh bergerak ke dinding dengan sangat pantas! Berikut adalah beberapa cabaran untuk anda jika anda fikir anda mampu melaksanakan tugas:

  • Untuk menjadikan permainan lebih sukar, lihat apakah jarak antara dinding menjadi 2 dan bukannya 4. Tidak semestinya terlalu sukar setelah anda memahami bagaimana program saya berfungsi:). Sila masukkan komen jika anda dapat membuatnya berfungsi!
  • Perkara lain yang kurang dimiliki oleh permainan saya adalah sistem skor dan cara untuk memaparkan skor dan menyimpannya. Lihat sama ada anda boleh melaksanakannya!
  • Terakhir, alih-alih membuat dinding menggerakkan satu lajur pada satu masa, cubalah setiap dinding menggerakkan satu piksel pada satu masa untuk gerakan yang lebih lancar.

Langkah 3: Flappy Bird ATtiny85: Teori

Flappy Bird ATtiny85: Teori
Flappy Bird ATtiny85: Teori

Walaupun layar yang kami gunakan memiliki ketinggian 64 piksel untuk digunakan, permainan hanya dapat menempatkan elemen dalam blok 8 piksel. Oleh itu, hanya ada 8 kemungkinan koordinat-y. Untuk mempermudah, dalam perisian saya membahagikan keseluruhan skrin dengan cara ini, membuat grid 16 blok dengan 8 blok, di mana setiap blok berukuran 8x8 piksel. Untuk mengisi setiap blok, setiap sprite dalam permainan adalah 8x8 piksel. Ini menjadikan semuanya JAUH lebih mudah diuruskan. Sekiranya anda melihat gambar di atas, anda dapat melihat bagaimana saya membahagikan skrin. Setiap dinding terdiri dari 6 blok, dengan lubang 2 blok tinggi, menjadikan total ketinggian setiap dinding 8 blok.

Dalam program, setiap dinding diwakili sebagai struktur, yang disebut Wall. Setiap struktur Dinding mempunyai dua sifat - kedudukan lubang dan lajur. 'holePosition' adalah nombor 0-6, kerana hanya ada 7 kemungkinan posisi di dinding 8 blok untuk lubang setinggi 2 blok. 'kolom' adalah nombor 0-15, kerana terdapat 16 lajur blok yang mungkin di layar.

Disyorkan: