Isi kandungan:

Permainan Arduino Space Rocks: 3 Langkah
Permainan Arduino Space Rocks: 3 Langkah

Video: Permainan Arduino Space Rocks: 3 Langkah

Video: Permainan Arduino Space Rocks: 3 Langkah
Video: Cara membuat game Android Space Shooter || construct 3 #gameandroid #coding 2024, Julai
Anonim
Permainan Arduino Space Rocks
Permainan Arduino Space Rocks

Sama ada ia dimainkan di komputer, di telefon, di konsol permainan, atau di kotak yang berdiri sendiri, banyak permainan video merangkumi elemen penghindaran halangan. Tentu, mungkin ada mata yang diberikan untuk mengumpulkan token atau mencari jalan melalui labirin, tetapi yakinlah bahawa mungkin ada sesuatu dalam permainan yang tujuannya hanya untuk mengelakkan anda melakukan perkara itu. Permainan video pertama adalah Pong, tetapi selepas itu permainan yang paling popular adalah seperti "Asteroid" atau "Pac-Man". Variasi yang lebih baru adalah permainan yang sederhana tetapi ketagihan dari "Flappy Birds".

Baru-baru ini saya melihat bahawa seseorang membuat versi dua tingkat "Flappy Bird" sederhana yang dimainkan pada 1602 LCD biasa. Saya fikir itu akan menjadi sesuatu yang mungkin disukai oleh cucu-cucu jadi saya memutuskan untuk melakukan variasi saya sendiri dari awal. Versi 1602 hanya mempunyai dua tahap jadi saya memutuskan untuk menggunakan LCD 2004 (20x4) sebagai gantinya untuk sedikit meningkatkan kesukaran bermain. Saya juga memilih untuk membuatnya lebih seperti "Asteroid" dengan meminta pemain memandu "kapal" melalui labirin "batu ruang". Walaupun anda tidak berminat untuk membina permainan, mungkin ada beberapa elemen perisian yang dapat anda gunakan dalam salah satu projek anda sendiri.

Langkah 1: Perkakasan

Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan
Perkakasan

Perkakasan boleh didasarkan pada hampir semua versi Arduino. Saya melakukan prototaip menggunakan Nano dan kemudian membakar kodnya ke cip ATMega328. Itu cip yang sama yang digunakan di Nano tetapi menggunakannya dengan sendirinya memungkinkan untuk membina yang lebih padat dan penggunaan tenaga yang lebih sedikit. Seperti yang anda lihat, saya membina litar di papan roti kecil yang memberikan sokongan pada modul LCD. Aspek lain yang berbeza adalah bahawa Nano berjalan pada 16-MHz menggunakan kristal luaran tetapi saya memilih untuk menggunakan pengayun 8-MHz terbina dalam untuk cip ATMega328. Itu menjimatkan bahagian dan kuasa.

LCD 2004 antara muka ke Arduino dengan cara yang sama seperti LCD 1602. Perbezaan yang menarik adalah dalam menangani lokasi paparan. Jelas ada perbezaan kerana ada empat baris bukan dua tetapi, pada tahun 2004, baris ketiga adalah lanjutan dari baris pertama dan baris keempat adalah lanjutan dari baris kedua. Dengan kata lain, jika anda mempunyai program ujian yang hanya menghantar rentetan watak ke LCD, watak ke-21 akan muncul pada permulaan baris ketiga dan watak ke-41 kembali ke permulaan baris pertama. Saya menggunakan ciri itu dalam perisian untuk menggandakan panjang labirin dengan berkesan.

Saya memutuskan untuk menjadikan bateri versi saya dikuasakan jadi saya menggunakan bateri 18650 Li-ion biasa, 3.6 volt. Itu memerlukan saya menambahkan papan kecil untuk membolehkan pengisian semula USB dan papan kecil lain untuk meningkatkan voltan bateri kepada 5 volt untuk LCD dan cip ATMega. Gambar menunjukkan modul yang saya gunakan tetapi ada juga modul all-in-one yang melakukan kedua fungsi tersebut.

Langkah 2: Perisian

Perisiannya sama untuk cip Nano dan ATMega328. Satu-satunya perbezaan adalah dalam kaedah pengaturcaraan. Saya menggunakan perisian barebones 1602 LCD versi saya sendiri dan perisian LCD dalam projek ini berdasarkan itu. Saya perlu menambah keupayaan untuk menangani baris tambahan pada paparan 2004 dan juga menambah rutin untuk menukar paparan. Peralihan paparan memberikan kesan pergerakan "batu" melewati "kapal".

Seperti disebutkan sebelumnya, baris 1 dan 3 membentuk barisan bulat dan garis 2 dan 4 juga. Ini bermakna selepas 20 shift, garis 1 dan 3 ditukar dan garis 2 dan 4 ditukar. Selepas 40 shift, garisan kembali ke kedudukan semula. Kerana tingkah laku ini, labirin 20 watak yang asli menjadi sama sekali berbeza ketika garis bertukar. Itu menjadikan hidup menarik ketika saya berusaha membentuk labirin. Saya akhirnya membuka spreadsheet Excel supaya saya dapat memetakan jalan tanpa perlu menukar perisian secara berterusan. Perisian yang disediakan di sini mempunyai dua versi labirin (satu dikomentari) sehingga anda dapat memilih mana yang anda inginkan atau buat sendiri.

Saya pada awalnya mahukan ini cukup sederhana sehingga cucu-cucu muda dapat memainkannya, tetapi saya juga mahu ia mempunyai cabaran tambahan sekiranya mereka (atau orang lain) terlalu mahir. Permainan dimulakan dengan kadar peralihan yang ditetapkan pada 1 saat. Kadar tic dalaman adalah 50ms sehingga bermakna terdapat 20 selang di mana butang atas / bawah dapat ditekan. Sebenarnya, butang yang ditekan menggunakan 2 tics kerana selang 50ms digunakan untuk mengesan penekan dan selang 50 ms lain digunakan untuk menunggu pelepasan. Dengan labirin lalai jumlah penekanan maksimum yang diperlukan sebelum peralihan seterusnya adalah tiga. Cara mudah untuk meningkatkan kesukaran permainan adalah dengan memendekkan waktu antara pergeseran sehingga beberapa baris kod melakukan hal itu ketika skor meningkat. Kadar peralihan ditetapkan untuk mempercepat 50ms setiap 20 shift, dengan kadar minimum terhad kepada 500ms. Mudah untuk menukar parameter ini.

Selain mengubah laju pergeseran, logika utama dalam perangkat lunak adalah memindahkan "kapal" dan untuk menentukan apakah "kapal" telah bertembung dengan "batu". Fungsi-fungsi ini memanfaatkan array "batu / ruang" yang ditentukan dan juga susunan yang menentukan lokasi memori dalam paparan. Jumlah peralihan sepadan dengan panjang garis LCD (0-19) dan digunakan sebagai indeks ke dalam susunan ini. Logiknya agak rumit oleh fakta bahawa garis bertukar setiap 20 pergeseran. Logik serupa digunakan untuk menentukan kedudukan "kapal" yang dapat berada pada salah satu dari empat garis.

Skor untuk setiap permainan hanyalah kiraan jumlah pergeseran yang berlaku dan skor tinggi disimpan dalam EEROM dalaman mikrokontroler. Perpustakaan EEPROM digunakan untuk membaca dan menulis ke memori ini. Rutin yang tersedia membolehkan membaca / menulis byte tunggal dan membaca / menulis nilai titik terapung. Nilai 0xA5 disimpan di lokasi EEROM pertama untuk menunjukkan bahawa skor tinggi telah disimpan. Sekiranya nilai itu ada semasa power up, maka nilai floating point untuk skor tinggi dibaca dan dipaparkan. Sekiranya nilai 0xA5 tidak ada, maka rutin dipanggil untuk menginisialisasi skor tinggi hingga nilai 1. Rutin yang sama dipanggil jika tetapan semula skor tinggi diinginkan. Skor tinggi ditetapkan kembali ke nilai 1 dengan menekan salah satu butang atas / bawah dan kemudian menekan butang reset sebentar.

Langkah 3: Bermain Permainan

Bermain Permainan
Bermain Permainan
Bermain Permainan
Bermain Permainan

Apabila kuasa digunakan, skor tinggi semasa dipaparkan. Setelah skor tinggi ditampilkan, labirin "batu" dan "kapal" dipaparkan maka permainan dimulakan beberapa saat kemudian. Apabila "kapal" memukul "batu", pesan "CRASH AND BURN" berkelip beberapa kali sebelum menunjukkan skor untuk permainan. Sekiranya skor tinggi baru dibuat, maka mesej itu juga akan dipaparkan. Permainan baru dimulakan dengan menekan butang reset.

Disyorkan: