Turinys:

„Space Invaders“„Micropython on Micro“: bit: 5 žingsniai
„Space Invaders“„Micropython on Micro“: bit: 5 žingsniai

Video: „Space Invaders“„Micropython on Micro“: bit: 5 žingsniai

Video: „Space Invaders“„Micropython on Micro“: bit: 5 žingsniai
Video: Space Invaders in Micropython on Micro:bit 2024, Liepa
Anonim
Image
Image

Ankstesniuose straipsniuose mes ištyrėme žaidimų kūrimą „GameGo“- nešiojamoje retro žaidimų konsolėje, kurią sukūrė TinkerGen edukacija. Mūsų sukurti žaidimai priminė senus „Nintendo“žaidimus. Šiandienos straipsnyje mes žengsime žingsnį atgal, į arkadinių žaidimų aukso amžių. Mes iš naujo sukursime „Space Invaders“žaidimą „Micropython“sistemoje „Micro: bit“mikrovaldiklyje - ir kaip posūkį taip pat naudosime „BitPlayer Micro: bit“plėtinį, kuris leis mums patogiau žaisti žaidimą.

Kadangi ši pamoka skirta žaidimo kodavimui „Micropython“, vietoj tradicinės nuoseklios nuoseklios sekos, kurią anksčiau naudojome grafinio programavimo pamokoms, ketiname pereiti prie kodo pagal bloką-peržvelgsime svarbias funkcijas, klases ir pagrindines kilpa. Visą kodą galite atsisiųsti šio projekto „GitHub“saugykloje. Užsisegti ir pradėti!

Prekės

TinkerGen BitPlayer

„BBC Micro“: bit

1 žingsnis: pagrindinė kilpa

Vairasvirtė
Vairasvirtė

Šioje pamokoje aš gana dažnai vartosiu žodį „metodas“. „Python“metodas yra šiek tiek panašus į funkciją, išskyrus tai, kad jis yra susietas su objektu/klasėmis. Taigi supaprastinimui galite jį perskaityti kaip „klasės funkciją“. Daugiau apie metodus galite paskaityti čia.

Įeiname į pagrindinę kilpą su

o ne game_over:

būklė. Viduje gauname įsibrovėlių skaičių, jų pasirodymo tikimybę ir skaičių, reikalingą norint patekti į kitą lygį iš lygių žodyno. Toliau mes patikriname judėjimą iš kairės į dešinę naudodami „Class_ instance“„JoyStick“metodus „Listen_Dir“. Jei viena iš sąlygų įvertinama kaip „Tiesa“, mes padidiname/sumažiname žaidžiamo personažo x reikšmę. Mes apribojame jį iki [-2, 2], jei yra dvi sąlygos. Tada inicijuojame „DisplayBuffer“klasės egzempliorių ir patikriname, ar paspaudžiamas „skydas“arba „ugnies kulka“. Mes naudojame metodą „DisplayBuffer.set ()“, kad nustatytume objektus vėlesniam atvaizdavimui. Skydui atvaizduoti naudojame tiesiogiai „DisplayBuffer.set“(), bet kulkoms ir įsibrovėliams pridedame juos prie atitinkamo sąrašo ir nustatome () juos vieną po kito ciklui su šiuo kodu, kad vėliau pateiktume „DispBuffer.render“():

„b in bullets“: b.render (dispBuf) „v in vaders“: v.render (dispBuf)

Visi įsibrovėliai, kulkos ir skydas rodomi ekrane kiekvieną kartą kartojant pagrindinę kilpą

dispBuf.render ()

Prieš pagrindinės kilpos pabaigą patikriname, ar bet kuri užpuolikų kulka nepasiekė ekrano pabaigos, ir jei taip, ištriname jas iš atitinkamų sąrašų.

2 žingsnis: vairasvirtė

Vairasvirtė
Vairasvirtė

„BitPlayer“lengva laikyti ir naudoti, naudojant 2 ašių vairasvirtę, pvz., „Gameboy“ar PSP valdiklius, taip pat yra dar 6 programuojami mygtukai, pažymėti kaip „L“, „R“, „A“, „B“, „C“ir „D.“. Jame yra garsinis signalas, vibracinis variklis ir „Grove I2C“prievadas, skirtas prijungti papildomus išorinius įrenginius, tokius kaip OLED ekranas.

Šiam žaidimui naudojame tik vairasvirtės kairįjį ir dešinįjį klavišus. Norėdami pamatyti visą „BitPlayer“mygtukų naudojimo pavyzdį, šio projekto „GitHub“saugykloje galite pažvelgti į joystick_example.py. Kurdami „JoyStick“klasės egzempliorių, patikriname, ar yra X ašies numatytasis skaitymas, ir išsaugome šią vertę savarankiškai. Read_X. Tada funkcijoje „Listen_Dir“patikriname, ar nukrypimas nuo tos numatytosios vertės yra didesnis nei jautrumo kintamasis (pabandykite jį patikslinti patys, jei manote, kad „JoyStick“yra per jautrus) ir pagal nustatytą kryptį pateikiame „True of False“.

Pažvelkime į konkretų pavyzdį, kaip tai veikia:

Tarkime, kad numatytasis X ašies rodmuo yra 0. Tada, jei perkeliame vairasvirtę į dešinę:

New_X = JoyStick_X.read_analog () #New_X = 200

Dešinė = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200

Tada, kai tikriname kryptį:

Tikslumas = 150if Teisė> Tikslumas: #200> 150 Tikras Get_Rocker = DIR ['R'] elif Left> Tikslumas: #-200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: return True else: return False

3 žingsnis: rodykite buferį

Rodyti buferį
Rodyti buferį

„DisplayBuf“klasė yra atsakinga už LED ekrano valdymą. Tai atliekama naudojant du metodus: set () ir render (). set () metodas keičia reikšmes, atitinkančias LED ekrano pikselius. Galbūt prisiminsite, kad „Micro: bit“LED ekrano pikseliai gali būti išreikšti kaip eilutė arba sąrašas - „00000: 00000: 00000: 00000: 00000“yra tuščias ekranas. „00000: 00000: 00000: 00000: 00100“yra ekranas su silpnai apšviestu pikseliu apatinės eilutės centre.

00000:

00000

:00000

:00000:

00100"

Šį užrašą gali būti lengviau apdoroti:)

Taigi, tai, ką mes darome pagrindinės kilpos metu, yra „DisplayBuf“skambučių nustatymo () metodas, skirtas nustatyti visus mūsų objektus, kuriuos reikia rodyti ekrane. Tada mes naudojame render () metodą, kad juos visus vienu metu parodytume ekrane.

4 žingsnis: Įsibrovėliai, kulkos ir žaidėjas

Užpuolikai, kulkos ir žaidėjas
Užpuolikai, kulkos ir žaidėjas

Kulkos ir užpuolikai priklauso „Mover“klasei. „Mover“klasės egzemplioriai turi savo x, y vietas ir greitį, taip pat ryškumą. „Mover“klasėje yra du egzempliorių metodai: set () ir move (). set () metodas tiesiog iškviečia „DisplayBuf set“() metodą su atnaujintomis koordinatėmis, kad vėliau išsaugotų LED matricą. „move ()“metodas atnaujina egzempliorių koordinates pagal egzempliorių greitį - tai praverčia vėliau, kai, keičiantis lygiui, turime keisti įsibrovėlių greitį.

„Class Bullet“ir „Class Invader“yra „Mover“klasės poklasiai. Čia mes naudojame tai, kas vadinama paveldėjimu. Super () funkcionalumas leidžia mums iškviesti superklasės metodus poklasyje, nereikia kartoti kodo.

5 žingsnis: padarykite tai savo

Padarykite tai savo
Padarykite tai savo

Sveikinu! Jūs ką tik iš naujo sukūrėte klasikinį „Space Invaders“žaidimą „Micro: bit“su šaunia žaidimų aparatūra. Žinoma, čia galite patobulinti žaidimo kodą - pavyzdžiui, kol kas žaidimas turi tik vieną lygį - galite pridėti sudėtingesnių. Be to, kaip galite prisiminti, originaliame žaidime priešais grotuvą plaukioja akmenys, kuriuos taip pat galite pridėti.

Jei sukūrėte patobulintą žaidimo versiją, pasidalykite ja komentaruose žemiau! Norėdami gauti daugiau informacijos apie „BitPlayer“ir kitą aparatūrą, skirtą kūrėjams ir STEM pedagogams, apsilankykite mūsų svetainėje https://tinkergen.com/ ir užsiprenumeruokite mūsų naujienlaiškį.

„TinkerGen“neseniai sukūrė „Kickstarter“kampaniją, skirtą „MARK“(„Make A Robot Kit“) - tai robotų rinkinys, skirtas mokyti kodavimo, robotikos, AI!

Originalus „Micropython“kodas iš „hexkcd“/„micro-vaders“buvo pakeistas, kad veiktų su „TinkerGen BitPlayer“.

Rekomenduojamas: