Satura rādītājs:

Kosmosa iebrucēji Micropython on Micro: bits: 5 soļi
Kosmosa iebrucēji Micropython on Micro: bits: 5 soļi

Video: Kosmosa iebrucēji Micropython on Micro: bits: 5 soļi

Video: Kosmosa iebrucēji Micropython on Micro: bits: 5 soļi
Video: Боги закрыли наше живое светило! Строение мира, форма планеты 2024, Novembris
Anonim
Image
Image

Iepriekšējos rakstos mēs esam izpētījuši spēļu veidošanu GameGo - pārnēsājamā retro spēļu konsolē, ko izstrādājusi TinkerGen izglītība. Mūsu izveidotās spēles atgādināja vecās Nintendo spēles. Šodienas rakstā mēs spersim soli atpakaļ, līdz arkādes spēļu zelta laikmetam. Mēs atkārtoti izveidosim Space Invaders spēli Micropython uz Micro: bit mikrokontrollera - un kā pagriezienu mēs izmantosim arī BitPlayer Micro: bit paplašinājumu, kas ļauj mums spēlēt spēli ērtāk.

Tā kā šī apmācība ir par spēles kodēšanu programmā Micropython, tā vietā, lai tradicionālās secīgās secības secības, ko iepriekš izmantojām grafiskās programmēšanas apmācības, vietā, mēs pa blokiem apskatīsim kodu-apskatīsim svarīgās funkcijas, klases un galvenos cilpa. Pilnu kodu varat lejupielādēt šī projekta GitHub krātuvē. Piesprādzējiet un sāksim!

Piegādes

TinkerGen BitPlayer

BBC Micro: mazliet

1. darbība: galvenā cilpa

Kursorsvira
Kursorsvira

Šajā apmācībā es diezgan bieži lietošu vārdu "metode". Metode python ir nedaudz līdzīga funkcijai, izņemot to, ka tā ir saistīta ar objektu/klasēm. Vienkāršības labad varat to izlasīt kā “funkciju klasē”. Vairāk par metodēm varat lasīt šeit.

Mēs ieejam galvenajā cilpā ar

kamēr nav game_over:

stāvoklis. Iekšpusē mēs iegūstam iebrucēju skaitu, viņu parādīšanās iespēju un vajadzīgo skaitu, lai nokļūtu nākamajā līmenī no līmeņu vārdnīcas. Tālāk mēs pārbaudām kustību pa kreisi-labo, izmantojot klases instances JoyStick Listen_Dir instanču metodes. Ja kāds no nosacījumiem tiek novērtēts kā Patiess, mēs palielinām/samazinām mūsu spēlējamā rakstura x vērtību. Mēs to ierobežojam līdz [-2, 2] ar diviem nosacījumiem. Pēc tam mēs inicializējam DisplayBuffer klases gadījumu un pārbaudām, vai nav nospiesti pogas "vairogs" vai "uguns aizzīme". Mēs izmantojam metodi DisplayBuffer.set (), lai iestatītu objektus vēlākai atveidošanai. Vairoga atveidošanai mēs tieši izmantojam DisplayBuffer.set (), bet aizzīmēm un iebrucējiem mēs pievienojam tos attiecīgajam sarakstam un iestatām () tos pa vienam cilpai ar šādu kodu vēlākai renderēšanai ar DispBuffer.render ():

b aizzīmēm: b.render (dispBuf) v vaders: v.render (dispBuf)

Visi iebrucēji, lodes un vairogs tiek parādīti displejā reizi galvenajā cilpas atkārtojumā ar

dispBuf.render ()

Pirms galvenās cilpas beigām mēs pārbaudām, vai kāda no iebrucēju lodēm ir sasniegusi ekrāna beigas, un, ja tā ir, mēs izdzēšam tās no attiecīgajiem sarakstiem.

2. solis: kursorsvira

Kursorsvira
Kursorsvira

BitPlayer ir viegli turēt un lietot, izmantojot 2 asu kursorsviru, piemēram, Gameboy vai PSP kontrolierus, tajā ir arī vēl 6 programmējamas pogas, kas apzīmētas kā L, R, A, B, C un D. Lai iegūtu aizraujošu un interaktīvu pieredzi, BitPlayer tai ir skaņas signāls, vibrācijas motors un Grove I2C ports, lai savienotu papildu perifērijas ierīces, piemēram, OLED displeju.

Šai spēlei mēs izmantojam tikai kursorsviras kreiso un labo sviru, lai iegūtu pilnu piemēru par visu BitPlayer pogu izmantošanu, šī projekta GitHub krātuvē varat apskatīt joystick_example.py. Veidojot JoyStick klases eksemplāru, mēs pārbaudām, vai nav X ass noklusējuma nolasījuma, un saglabājam šo vērtību sevī. Read_X. Pēc tam funkcijā Listen_Dir mēs pārbaudām, vai novirze no šīs noklusējuma vērtības ir augstāka par jutības mainīgo (mēģiniet to pielāgot pats, ja uzskatāt, ka JoyStick ir pārāk jutīga), un atgriežam True of False saskaņā ar noteikto virzienu.

Apskatīsim konkrētu piemēru, kā tas darbojas:

Pieņemsim, ka mūsu noklusējuma X ass rādījums ir 0. Tad, ja mēs pārvietojam kursorsviru pa labi:

New_X = JoyStick_X.read_analog () #New_X = 200

Pa labi = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200

Tad, kad mēs pārbaudām virzienu:

Precizitāte = 150if Pa labi> Precizitāte: #200> 150 True Get_Rocker = DIR ['R'] elif Pa kreisi> Precizitāte: #-200> 150 False Get_Rocker = DIR ['L'] cits: Get_Rocker = DIR ['NONE'], ja Režisors == Get_Rocker: atgriezties True else: return False

3. darbība: parādiet buferi

Displeja buferis
Displeja buferis

DisplayBuf klase ir atbildīga par LED ekrāna vadību. Tas tiek darīts, izmantojot divas metodes set () un render (). set () metode maina vērtības, kas atbilst LED ekrāna pikseļiem. Jūs varētu atcerēties, ka Micro: bit LED ekrāna pikseļus var izteikt kā virkni vai sarakstu - "00000: 00000: 00000: 00000: 00000" ir tukšs ekrāns. "00000: 00000: 00000: 00000: 00100" ir ekrāns ar vāji apgaismotu pikseļu apakšējās rindas centrā.

00000:

00000

:00000

:00000:

00100"

Šo apzīmējumu varētu būt vieglāk apstrādāt:)

Tātad galvenās cilpas laikā mēs darām DisplayBuf metodi call set (), lai iestatītu visus objektus, kas jāparāda ekrānā. Tad mēs izmantojam metodi render (), lai tos visus vienlaikus parādītu ekrānā.

4. solis: iebrucēji, lodes un spēlētājs

Iebrucēji, lodes un spēlētājs
Iebrucēji, lodes un spēlētājs

Lodes un iebrucēji pieder Mover klasei. Mover klases instancēm ir savas x, y vietas un ātrums, kā arī spilgtums. Mover klasei ir divas instanču metodes set () un move (). set () metode vienkārši izsauc DisplayBuf set () metodi ar atjauninātām koordinātām, lai saglabātu vēlākai renderēšanai uz LED matricas. move () metode atjaunina instances koordinātu atbilstoši instances ātrumam - tas noderēs vēlāk, kad, mainoties līmeņiem, mums jāmaina iebrucēju ātrums.

Class Bullet un class Invader ir Mover klases apakšklases. Šeit mēs izmantojam kaut ko, ko sauc par mantojumu. Super () funkcionalitāte ļauj mums izsaukt virsklases metodes apakšklasē, neatkārtojot kodu.

5. darbība. Padariet to par savu

Padariet to par savu
Padariet to par savu

Apsveicam! Jūs tikko no jauna izveidojāt klasisko Space Invaders spēli vietnē Micro: bit, izmantojot lielisku spēļu aparatūru. Protams, jūs varētu uzlabot spēles kodu no šejienes - piemēram, šobrīd spēlei ir tikai viens līmenis - varat pievienot sarežģītākus. Tāpat, kā jūs varētu atcerēties, sākotnējā spēlē spēlētāja priekšā peld akmeņi, kurus varat arī pievienot.

Ja jūs izveidojat uzlabotu spēles versiju, kopīgojiet to komentāros zemāk! Lai iegūtu vairāk informācijas par BitPlayer un citu aparatūru ražotājiem un STEM pedagogiem, apmeklējiet mūsu vietni https://tinkergen.com/ un abonējiet mūsu biļetenu.

TinkerGen nesen izveidoja Kickstarter kampaņu MARK (Make A Robot Kit) - robotu komplektu kodēšanas, robotikas, AI mācīšanai!

Sākotnējais Micropython kods no hexkcd/micro-vaders tika mainīts, lai tas darbotos ar TinkerGen BitPlayer.

Ieteicams: