Daftar Isi:

Space Invaders di Micropython di Micro: bit: 5 Langkah
Space Invaders di Micropython di Micro: bit: 5 Langkah

Video: Space Invaders di Micropython di Micro: bit: 5 Langkah

Video: Space Invaders di Micropython di Micro: bit: 5 Langkah
Video: How To Make A Pac Man Game With The Micro:bit 2024, November
Anonim
Image
Image

Dalam artikel kami sebelumnya, kami telah menjelajahi pembuatan game di GameGo, konsol game retro portabel yang dikembangkan oleh pendidikan TinkerGen. Game yang kami buat mengingatkan pada game Nintendo lama. Dalam artikel hari ini, kita akan mundur selangkah, ke zaman keemasan game arcade. Kami akan membuat ulang game Space Invaders di Micropython pada mikrokontroler Micro:bit - dan sebagai tambahan, kami juga akan menggunakan ekstensi BitPlayer Micro:bit, yang memungkinkan kami bermain game dengan lebih nyaman.

Karena tutorial ini adalah tentang pengkodean game di Micropython, alih-alih urutan tahap demi tahap tradisional yang kami gunakan sebelumnya untuk tutorial pemrograman grafis, kami akan membahas kode blok demi blok - membahas fungsi penting, kelas dan utama lingkaran. Anda dapat mengunduh kode lengkapnya di repositori GitHub proyek ini. Gesper dan mari kita mulai!

Perlengkapan

TinkerGen BitPlayer

BBC Mikro: bit

Langkah 1: Loop Utama

Joystik
Joystik

Dalam tutorial ini saya akan cukup sering menggunakan kata "metode". Metode dalam python agak mirip dengan fungsi, kecuali dikaitkan dengan objek/kelas. Jadi, untuk penyederhanaan, Anda dapat membacanya sebagai "fungsi di dalam kelas". Anda dapat membaca lebih lanjut tentang metode di sini.

Kami memasuki loop utama dengan

sementara tidak game_over:

kondisi. Di dalam kita mendapatkan jumlah penyerbu, peluang kemunculannya dan jumlah yang dibutuhkan untuk naik ke level berikutnya dari kamus level. Selanjutnya kita periksa pergerakan kiri-kanan dengan metode instance Listen_Dir dari instance kelas JoyStick. Jika salah satu kondisi dievaluasi sebagai Benar, kami menambah/mengurangi nilai x dari karakter yang dapat kami mainkan. Kami membatasinya ke [-2, 2] dengan dua kondisi if. Kemudian kami menginisialisasi instance kelas DisplayBuffer dan memeriksa penekanan tombol "perisai" atau "peluru api". Kami menggunakan metode DisplayBuffer.set() untuk mengatur objek untuk rendering nanti. Untuk merender perisai, kami menggunakan DisplayBuffer.set() secara langsung, tetapi untuk peluru dan penyerbu kami menambahkannya ke daftar masing-masing dan mengatur() mereka satu per satu dalam loop for dengan kode berikut untuk rendering nanti dengan DispBuffer.render():

untuk b dalam peluru: b.render(dispBuf) untuk v dalam vaders: v.render(dispBuf)

Semua penyerbu, peluru, dan perisai ditampilkan di layar setelah setiap iterasi loop utama dengan

dispBuf.render()

Sebelum akhir loop utama, kami memeriksa apakah ada peluru penyerbu yang telah mencapai akhir layar, dan jika ya, kami menghapusnya dari daftar masing-masing.

Langkah 2: Joystick

Joystik
Joystik

BitPlayer mudah dipegang dan digunakan, dengan joystick 2-sumbu seperti pengontrol Gameboy atau PSP, ia juga menyertakan 6 tombol lain yang dapat diprogram berlabel L, R, A, B, C, dan D. Untuk pengalaman yang imersif dan interaktif, BitPlayer sendiri memiliki fitur buzzer, motor getar, dan port Grove I2C untuk menghubungkan periferal tambahan seperti layar OLED.

Kami hanya menggunakan joystick kiri-kanan untuk game ini, untuk contoh lengkap tentang penggunaan semua tombol BitPlayer, Anda dapat melihat joystick_example.py di repositori GitHub proyek ini. Saat membuat instance kelas JoyStick, kami memeriksa pembacaan default sumbu X dan menyimpan nilai itu di self. Read_X. Kemudian pada fungsi Listen_Dir, kami memeriksa apakah penyimpangan dari nilai default itu lebih tinggi dari variabel sensitivitas (coba ubah sendiri, jika Anda merasa JoyStick terlalu sensitif) dan kembalikan True of False sesuai dengan arah yang terdeteksi.

Mari kita lihat contoh konkret cara kerjanya:

Katakanlah pembacaan sumbu X default kita adalah 0. Kemudian, jika kita menggerakkan Joystick ke kanan:

New_X = JoyStick_X.read_analog() #New_X=200

Kanan = New_X - self. Read_X #Kanan = 200 Kiri = self. Read_X - New_X #Left = -200

Kemudian ketika kami memeriksa arah:

Precision = 150if Right > Precision: #200 > 150 True Get_Rocker = DIR['R'] elif Left > Precision: #-200 > 150 False Get_Rocker = DIR['L'] else: Get_Rocker = DIR['NONE'] if Dir == Get_Rocker: kembalikan Benar yang lain: kembalikan Salah

Langkah 3: Tampilan Buffer

Penyangga Tampilan
Penyangga Tampilan

Kelas DisplayBuf bertanggung jawab untuk mengontrol layar LED. Hal ini dilakukan dengan menggunakan dua metode, set() dan render(). set() metode mengubah nilai yang sesuai dengan piksel layar LED. Anda mungkin ingat, bahwa piksel pada layar LED Micro:bit dapat dinyatakan sebagai string atau daftar - "0000:000000:00000:00000:00000" adalah layar kosong. "00000:000000:00000:00000:00100" adalah layar dengan piksel remang-remang di tengah baris bawah.

00000:

00000

:00000

:00000:

00100"

Notasi ini mungkin lebih mudah untuk diproses:)

Jadi, apa yang kita lakukan selama loop utama adalah memanggil metode set() dari DisplayBuf untuk mengatur semua objek kita yang perlu ditampilkan di layar. Kemudian kami menggunakan metode render() untuk benar-benar menampilkan semuanya di layar secara bersamaan.

Langkah 4: Penyerbu, Peluru dan Pemain

Penyerbu, Peluru dan Pemain
Penyerbu, Peluru dan Pemain

Peluru dan Invaders milik kelas Mover. Instans kelas penggerak memiliki lokasi dan kecepatan x, y, serta kecerahan. Kelas penggerak memiliki dua metode instance, set() dan move(). set() metode cukup memanggil metode DisplayBuf set() dengan koordinat yang diperbarui untuk disimpan untuk rendering nanti pada matriks LED. metode move() memperbarui koordinat instance sesuai dengan kecepatan instance - yang berguna nanti, ketika kita perlu mengubah kecepatan penyerbu seiring kemajuan level.

Class Bullet dan class Invader adalah subclass dari class Mover. Di sini kita menggunakan sesuatu yang disebut warisan. Fungsionalitas super() memungkinkan kita untuk memanggil metode superclass di subclass, tanpa perlu mengulang kode.

Langkah 5: Jadikan Milik Anda Sendiri

Jadikan Milik Anda Sendiri
Jadikan Milik Anda Sendiri

Selamat! Anda baru saja membuat ulang game Space Invaders klasik di Micro:bit dengan beberapa perangkat keras game yang keren. Tentu saja, Anda dapat meningkatkan kode permainan dari sini - misalnya, untuk saat ini, permainan hanya memiliki satu level - Anda dapat menambahkan yang lebih menantang. Juga, seperti yang mungkin Anda ingat, gim aslinya memiliki batu yang mengambang di depan pemain, yang dapat Anda tambahkan juga.

Jika Anda membuat versi game yang lebih baik, bagikan di komentar di bawah! Untuk informasi lebih lanjut tentang BitPlayer dan perangkat keras lainnya untuk pembuat dan pendidik STEM, kunjungi situs web kami, https://tinkergen.com/ dan berlangganan buletin kami.

TinkerGen baru-baru ini membuat kampanye Kickstarter untuk MARK (Make A Robot Kit), kit robot untuk mengajar coding, robotika, AI!

Kode Micropython asli dari hexkcd/micro-vaders, diubah agar berfungsi dengan TinkerGen BitPlayer.

Direkomendasikan: