Isi kandungan:

Space Invaders in Micropython on Micro: bit: 5 Langkah
Space Invaders in Micropython on Micro: bit: 5 Langkah

Video: Space Invaders in Micropython on Micro: bit: 5 Langkah

Video: Space Invaders in Micropython on Micro: bit: 5 Langkah
Video: Space Invaders in Micropython on Micro:bit 2024, November
Anonim
Image
Image

Dalam artikel sebelumnya kami telah meneroka pembuatan permainan di GameGo, konsol permainan retro mudah alih yang dikembangkan oleh TinkerGen education. Permainan yang kami buat mengingatkan pada permainan Nintendo lama. Dalam artikel hari ini, kita akan mengambil langkah mundur, ke zaman kegemilangan permainan arcade. Kami akan membuat semula permainan Space Invaders di Micropython on Micro: bit microcontroller - dan sebagai kelainan, kami juga akan menggunakan BitPlayer Micro: bit extension, yang membolehkan kami bermain permainan dengan lebih mudah.

Oleh kerana tutorial ini adalah mengenai pengekodan permainan di Micropython, bukannya urutan tahap demi tahap tradisional yang kami gunakan sebelumnya untuk tutorial pengaturcaraan grafik, kami akan membahas blok kod secara blok - membahas fungsi penting, kelas dan yang utama gelung. Anda boleh memuat turun kod penuh di repositori GitHub projek ini. Bersabar dan mari kita mulakan!

Bekalan

TinkerGen BitPlayer

Mikro BBC: sedikit

Langkah 1: Gelung Utama

Batang Joystick
Batang Joystick

Dalam tutorial ini saya akan sering menggunakan perkataan "method". Kaedah dalam python agak serupa dengan fungsi, kecuali ia dikaitkan dengan objek / kelas. Jadi, untuk memudahkan, anda boleh membacanya sebagai "fungsi dalam kelas". Anda boleh membaca lebih lanjut mengenai kaedah di sini.

Kami memasuki gelung utama dengan

sementara tidak permainan_over:

keadaan. Di dalamnya kita mendapatkan jumlah penyerang, kemungkinan mereka muncul dan jumlah yang diperlukan untuk sampai ke tingkat berikutnya dari kamus tingkat. Seterusnya kita periksa pergerakan kiri-kanan dengan kaedah instance Listen_Dir dari instance kelas JoyStick. Sekiranya salah satu syarat dinilai sebagai Benar, kita menambah / mengurangkan nilai x bagi watak yang boleh dimainkan. Kami menghadkannya kepada [-2, 2] dengan dua jika syarat. Kemudian kami memulakan contoh kelas DisplayBuffer dan memeriksa penekanan butang "perisai" atau "peluru api". Kami menggunakan kaedah DisplayBuffer.set () untuk menetapkan objek untuk rendering kemudian. Untuk memberikan perisai, kami menggunakan DisplayBuffer.set () secara langsung, tetapi untuk peluru dan penyerang kami menambahkannya ke senarai masing-masing dan menetapkannya (satu per satu untuk gelung dengan kod berikut untuk rendering kemudian dengan DispBuffer.render ():

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

Semua penceroboh, peluru dan perisai ditampilkan pada setiap lelaran gelung utama dengan

dispBuf.render ()

Sebelum akhir gelung utama, kami memeriksa sama ada peluru penyerang telah sampai ke hujung skrin, dan jika ada, kami menghapusnya dari senarai masing-masing.

Langkah 2: Joystick

Batang Joystick
Batang Joystick

BitPlayer mudah dipegang dan digunakan, dengan kayu bedik 2 paksi seperti pengawal Gameboy atau PSP, ia juga menyertakan 6 butang lain yang dapat diprogramkan berlabel L, R, A, B, C dan D. Untuk pengalaman yang mendalam dan interaktif, BitPlayer ia sendiri dilengkapi buzzer, motor getaran dan port Grove I2C untuk menghubungkan periferal tambahan seperti paparan OLED.

Kami hanya menggunakan rocker kiri-kanan kayu bedik untuk permainan ini, sebagai contoh penuh pada penggunaan semua butang BitPlayer anda boleh melihat joystick_example.py di repositori GitHub projek ini. Semasa membuat contoh kelas JoyStick, kami memeriksa bacaan lalai paksi-X dan menyimpan nilai itu dalam diri. Read_X. Kemudian dalam fungsi Listen_Dir, kami memeriksa apakah penyimpangan dari nilai lalai itu lebih tinggi daripada pembolehubah kepekaan (cuba ubah sendiri, jika anda merasakan JoyStick terlalu sensitif) dan kembali True of False mengikut arah yang dikesan.

Mari kita lihat contoh konkrit bagaimana ini berfungsi:

Katakan bacaan paksi X lalai kami adalah 0. Kemudian, jika kita menggerakkan Joystick ke kanan:

Baru_X = JoyStick_X.read_analog () # Baru_X = 200

Kanan = Baru_X - diri. Read_X #Kanan = 200 Kiri = diri. Read_X - Baru_X #Left = -200

Kemudian apabila kita memeriksa arah:

Precision = 150if Right> Precision: # 200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: # -200> 150 Palsu Get_Rocker = DIR ['L'] lain: Get_Rocker = DIR ['TIADA'] jika Dir == Get_Rocker: kembali Betul lain: kembali Palsu

Langkah 3: Penampan Paparan

Penampan Paparan
Penampan Paparan

Kelas DisplayBuf bertanggungjawab untuk mengawal skrin LED. Ia dilakukan dengan menggunakan dua kaedah, set () dan render (). kaedah set () mengubah nilai yang sesuai dengan piksel skrin LED. Anda mungkin ingat, bahawa piksel pada skrin LED Mikro: bit boleh dinyatakan sebagai rentetan atau senarai - "00000: 00000: 00000: 00000: 00000" adalah skrin kosong. "00000: 00000: 00000: 00000: 00100" adalah skrin dengan piksel cahaya malap di tengah baris bawah.

00000:

00000

:00000

:00000:

00100"

Notasi ini mungkin lebih mudah diproses:)

Jadi, apa yang kita lakukan semasa gelung utama adalah kaedah panggilan set () DisplayBuf untuk menetapkan semua objek kita yang perlu dipaparkan di skrin. Kemudian kami menggunakan kaedah render () untuk benar-benar menunjukkan semuanya di skrin secara serentak.

Langkah 4: Penjajah, Peluru dan Pemain

Penjajah, Peluru dan Pemain
Penjajah, Peluru dan Pemain

Peluru dan Penjajah tergolong dalam kelas Mover. Contoh kelas penggerak mempunyai lokasi dan kelajuan x, y, serta kecerahan. Mover class mempunyai dua kaedah contoh, tetapkan () dan pindahkan (). kaedah set () hanya memanggil kaedah DisplayBuf set () dengan koordinat yang dikemas kini untuk disimpan untuk rendering kemudian pada matriks LED. move () kaedah mengemas kini koordinat instance mengikut kelajuan instance - yang berguna kemudian, apabila kita perlu mengubah kelajuan penyerang seiring dengan kemajuan tahap.

Class Bullet dan class Invader adalah subkelas kelas Mover. Di sini kita menggunakan sesuatu yang disebut warisan. Fungsi super () membolehkan kita memanggil kaedah superclass dalam subkelas, tanpa perlu mengulang kod.

Langkah 5: Jadikannya Milik Anda

Jadikannya Milik Anda
Jadikannya Milik Anda

Tahniah! Anda baru sahaja mencipta permainan Space Invaders klasik di Micro: bit dengan beberapa perkakasan permainan yang hebat. Sudah tentu, anda boleh meningkatkan kod permainan dari sini - sebagai contoh, seperti sekarang, permainan hanya mempunyai satu tahap - anda boleh menambahkan yang lebih mencabar. Seperti yang anda ingat, permainan asalnya mempunyai batu yang melayang di depan pemain, yang boleh anda tambahkan juga.

Sekiranya anda membuat versi permainan yang lebih baik, bagikan dalam komen di bawah! Untuk maklumat lebih lanjut mengenai BitPlayer dan perkakasan lain untuk pembuat dan pendidik STEM, lawati laman web kami, https://tinkergen.com/ dan langgan buletin kami.

TinkerGen baru-baru ini membuat kempen Kickstarter untuk MARK (Make A Robot Kit), sebuah kit robot untuk mengajar pengkodan, robotik, AI!

Kod Micropython asal dari hexkcd / micro-vader, telah diubah untuk bekerja dengan TinkerGen BitPlayer.

Disyorkan: