Daftar Isi:

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

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

Video: Flappy Bird pada ATtiny85 dan OLED Display SSD1306: 6 Langkah (dengan Gambar)
Video: OLED Display, Slide Meter with arduino, to make a game like pong! 2024, September
Anonim
Image
Image
Perangkat Keras
Perangkat Keras

Hai semuanya, Hari ini saya akan menunjukkan kepada Anda tiruan dasar flappy bird yang saya buat, dan bagaimana Anda bisa membuat game serupa. Pada dasarnya saya akan menjalankan kode saya dengan Anda dan menjelaskan cara kerjanya di setiap langkah. Game ini dibuat untuk berjalan pada ATtiny85 dengan clock 1MHz, dengan layar OLED I2C. Maju!

Langkah 1: Perangkat Keras

Jika Anda tidak tertarik untuk benar-benar membangun sirkuit untuk gim ini tetapi memahami teori di baliknya, Anda dapat melewati langkah ini.

Game saya membutuhkan dua tombol, ATtiny85, layar I2C OLED 128x64px, dan beberapa sumber daya. Kartu Bisnis/Konsol Game Saya yang Dapat Diinstruksikan: ATtiny85 dan Layar OLED menunjukkan kepada Anda cara membuat papan yang memiliki semua yang Anda butuhkan! Jika Anda tidak tertarik untuk membuat papan saya, keluarkan papan tempat memotong roti Anda dan saya akan memberi tahu Anda spesifikasinya. Anda dapat menggunakan varian ATtiny85 apa pun. Saya merekomendasikan tampilan OLED seperti ini.

  1. Hubungkan satu sisi dari dua tombol tekan ke pin 2 dan 3 pada ATtiny85 Anda. Pada kabel ini, tambahkan juga resistor 10k ohm yang terhubung ke ground (resistor pull-down).
  2. Hubungkan sisi lain dari tombol-tombol ini ke tegangan. Saat tombol tidak ditekan, status pin akan rendah. Saat ditekan, status pin akan menjadi tinggi.
  3. Hubungkan pin 7 ke pin SCL di layar Anda, dan pin 5 ke pin SDA di layar Anda. Pasang pin daya (VCC dan GND) pada layar dengan benar.
  4. Terakhir, sambungkan pin 4 pada ATtiny ke ground dan pin 8 ke tegangan.

Langkah 2: Perangkat Lunak

Perangkat Lunak!
Perangkat Lunak!

Terlampir di sini adalah folder dengan semua file yang Anda butuhkan untuk menjalankan game. Dua file, FlappyBird.ino dan WallFunctions.h, dikomentari dengan sangat baik untuk kesenangan membaca Anda. Anda dapat mengunggah sketsa FlappyBird.ino ke ATtiny85 Anda (pada 1MHz), dan mainkan! Jika mempelajari teori di balik game ini menarik minat Anda, atau Anda ingin membuat game sendiri, baca terus!

Masih ada beberapa masalah dengan permainan saya. I2C bukan cara terbaik untuk mengirimkan data dengan cara apa pun. Menurut posting ini, layar hanya dapat menerima data sekitar 100KHz, jadi meskipun kita menaikkan kecepatan clock ATtiny ke 8MHz, saluran I2C masih akan menjadi hambatan. Layar dapat menghasilkan sekitar 10fps maksimum. Semakin banyak gambar terpisah yang perlu digambar oleh layar, semakin lambat seluruh prosesnya. Jadi, permainan saya cukup mudah karena Anda tidak bisa membuat dinding bergerak sangat cepat di layar! Di bawah ini adalah beberapa tantangan untuk Anda jika Anda merasa siap untuk tugas itu:

  • Untuk membuat permainan lebih sulit, lihat apakah Anda bisa mendapatkan jarak antara dinding menjadi 2 bukannya 4. Seharusnya tidak terlalu sulit setelah Anda memahami cara kerja program saya:). Silakan posting di komentar jika Anda bisa membuatnya bekerja!
  • Hal lain yang kurang dari permainan saya adalah sistem skor dan cara menampilkan skor dan menyimpannya. Lihat apakah Anda dapat menerapkannya!
  • Terakhir, daripada membuat dinding bergerak satu kolom pada satu waktu, cobalah membuat setiap dinding bergerak satu piksel pada satu waktu untuk gerakan yang lebih halus.

Langkah 3: Flappy Bird ATtiny85: Teori

Flappy Bird ATtiny85: Teori
Flappy Bird ATtiny85: Teori

Meskipun tampilan yang kami gunakan memiliki tinggi 64 piksel untuk digunakan untuk game, itu hanya memungkinkan untuk memposisikan elemen dalam blok 8 piksel. Jadi, hanya ada 8 kemungkinan koordinat y. Untuk mempermudah, dalam perangkat lunak saya membagi seluruh layar dengan cara ini, membuat kotak 16 blok dengan 8 blok, di mana setiap blok berukuran 8x8 piksel. Untuk mengisi setiap blok, setiap sprite dalam game berukuran 8x8 piksel. Hal ini membuat segalanya JAUH lebih mudah untuk mengelola. Jika Anda melihat gambar di atas, Anda dapat melihat bagaimana saya membagi layar. Setiap dinding terdiri dari 6 balok, dengan lubang setinggi 2 balok, sehingga total tinggi setiap dinding 8 balok.

Dalam program, setiap dinding direpresentasikan sebagai sebuah struct, yang disebut Dinding. Setiap struct Dinding memiliki dua properti - holePosition dan kolom. 'holePosition' adalah angka 0-6, karena hanya ada 7 kemungkinan posisi di dinding 8 blok untuk lubang setinggi 2 blok. 'kolom' adalah angka 0-15, karena ada 16 kolom blok yang mungkin ada di layar.

Direkomendasikan: