Talaan ng mga Nilalaman:

Space Invaders sa Micropython sa Micro: bit: 5 Hakbang
Space Invaders sa Micropython sa Micro: bit: 5 Hakbang

Video: Space Invaders sa Micropython sa Micro: bit: 5 Hakbang

Video: Space Invaders sa Micropython sa Micro: bit: 5 Hakbang
Video: BBC micro:bit Python Pixel Project 2024, Nobyembre
Anonim
Image
Image

Sa aming nakaraang mga artikulo na-explore namin ang paggawa ng laro sa GameGo, isang portable retro gaming console na binuo ng edukasyon ng TinkerGen. Ang mga larong ginawa namin ay nakapagpapaalala ng mga dating larong Nintendo. Sa artikulong ngayon, babawi kami, sa ginintuang edad ng mga arcade game. Lilikha ulit kami ng laro ng Space Invaders sa Micropython sa Micro: bit microcontroller - at bilang isang pag-ikot, gagamitin din namin ang BitPlayer Micro: bit extension, na nagbibigay-daan sa amin na maglaro ng mas madali.

Dahil ang tutorial na ito ay tungkol sa pag-coding ng laro sa Micropython, sa halip na tradisyonal na sunud-sunod na pagkakasunud-sunod na ginamit namin dati para sa mga graphic na tutorial sa programa, pupunta kami sa block ng code sa pamamagitan ng pag-block - pagpunta sa mahahalagang pag-andar, klase at pangunahing loop Maaari mong i-download ang buong code sa GitHub repository ng proyektong ito. Mag-buckle up at magsimula tayo!

Mga gamit

TinkerGen BitPlayer

BBC Micro: kaunti

Hakbang 1: Pangunahing Loop

Joystick
Joystick

Sa tutorial na ito, madalas akong gumagamit ng salitang "pamamaraan". Ang isang pamamaraan sa sawa ay medyo katulad sa isang pagpapaandar, maliban na ito ay naiugnay sa object / klase. Kaya, para sa pagpapagaan, mababasa mo ito bilang "isang pagpapaandar sa loob ng klase". Maaari kang magbasa nang higit pa tungkol sa mga pamamaraan dito.

Ipasok namin ang pangunahing loop na may

habang hindi game_over:

kalagayan Sa loob nakukuha namin ang bilang ng mga mananakop, pagkakataon ng kanilang paglitaw at bilang na kinakailangan upang makapunta sa susunod na antas mula sa antas ng diksyunaryo. Susunod na suriin namin ang kaliwang-kanan na paggalaw gamit ang mga pamamaraan ng Halimbawa na Listen_Dir ng halimbawa ng klase na JoyStick. Kung ang isa sa mga kundisyon ay sinusuri bilang Totoo, kami ay nagdaragdag / nagbabawas ng x-halaga ng aming mapaglarong character. Pinipigilan namin ito sa [-2, 2] na may dalawa kung kundisyon. Pagkatapos ay pinasimulan namin ang isang halimbawa ng klase ng DisplayBuffer at suriin para sa mga pagpindot sa pindutang "kalasag" o "sunog bala". Gumagamit kami ng paraan ng DisplayBuffer.set () upang magtakda ng mga bagay para sa pag-render sa ibang pagkakataon. Para sa pag-render ng kalasag ginagamit namin ang DisplayBuffer.set () nang direkta, ngunit para sa mga bala at mananakop idinagdag namin ang mga ito sa kani-kanilang listahan at itinakda ang () isa-isa sa mga ito para sa loop na may sumusunod na code para sa pag-render sa ibang pagkakataon sa DispBuffer.render ():

para sa b sa mga bala: b.render (dispBuf) para sa v sa asawa: v.render (dispBuf)

Ang lahat ng mga mananakop, bala at kalasag ay nai-render sa pagpapakita nang isang beses sa bawat pangunahing pag-ulit ng loop

dispBuf.render ()

Bago matapos ang pangunahing loop sinusuri namin kung ang alinman sa mga bala ng mga mananakop ay umabot sa dulo ng screen, at kung sila ay, tinatanggal namin ang mga ito mula sa kani-kanilang mga listahan.

Hakbang 2: Joystick

Joystick
Joystick

Madaling hawakan at gamitin ang BitPlayer, na may isang 2-axis joystick tulad ng Gameboy o PSP Controllers, nagsasama rin ito ng isa pang 6 na mga programmable na pindutan na may label na L, R, A, B, C at D. Para sa isang nakaka-engganyong at interactive na karanasan, ang BitPlayer mismo ay nagtatampok ng isang buzzer, isang panginginig ng boses motor at isang Grove I2C port upang ikonekta ang mga karagdagang peripheral tulad ng isang OLED display.

Gumagamit lang kami ng left-right rocker ng joystick para sa larong ito, para sa buong halimbawa sa paggamit ng lahat ng mga pindutan ng BitPlayer maaari kang tumingin sa joystick_example.py sa GitHub repository ng proyektong ito. Sa paglikha ng halimbawa ng klase ng JoyStick sinusuri namin ang default na pagbasa ng X-axis at iimbak ang halagang iyon sa sarili. Basahin ang_X. Pagkatapos sa pag-andar na Listen_Dir, suriin namin kung ang paglihis mula sa default na halagang iyon ay mas mataas kaysa sa variable ng pagiging sensitibo (subukang i-tweak ito mismo, kung sa palagay mo ang JoyStick ay masyadong sensitibo) at ibalik ang Totoo ng Maling ayon sa napansin na direksyon.

Tingnan natin ang kongkretong halimbawa ng kung paano ito gumagana:

Sabihin nating ang aming default na pagbabasa ng X-axis ay 0. Kung gayon, kung ilipat natin ang tama sa Joystick:

New_X = JoyStick_X.read_analog () # Bago_X = 200

Kanan = Bago_X - sarili. Basahin ang_X #Tuwid = 200 Kaliwa = sarili. Basahin ang_X - Bago_X # Kaliwa = -200

Pagkatapos kapag suriin namin ang direksyon:

Precision = 150if Kanan> Precision: # 200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: # -200> 150 False Get_Rocker = DIR ['L'] iba pa: Get_Rocker = DIR ['NONE'] kung Dir == Get_Rocker: ibalik Totoo pa: ibalik ang Mali

Hakbang 3: Display Buffer

Ipakita ang Buffer
Ipakita ang Buffer

Responsable ang klase ng DisplayBuf para sa pagkontrol sa LED screen. Ginagawa ito gamit ang dalawang pamamaraan, itakda ang () at i-render (). Itinakda ng (set) na pamamaraan ang mga halagang naaayon sa mga LED screen pixel. Maaari mong tandaan, ang mga pixel sa Micro: bit LED screen ay maaaring ipahayag bilang string o isang listahan - "00000: 00000: 00000: 00000: 00000" ay isang walang laman na screen. Ang "00000: 00000: 00000: 00000: 00100" ay isang screen na may dimly lit pixel sa gitna ng ibabang hilera.

00000:

00000

:00000

:00000:

00100"

Ang notasyong ito ay maaaring mas madaling iproseso:)

Kaya, kung ano ang ginagawa namin sa panahon ng pangunahing loop ay ang set set () na paraan ng DisplayBuf upang maitakda ang lahat ng aming mga bagay na kailangang ipakita sa screen. Pagkatapos ay gumagamit kami ng render () na paraan upang aktwal na ipakita silang lahat sa screen nang sabay-sabay.

Hakbang 4: Mga Invaders, Bullet at ang Player

Invaders, Bullets at ang Player
Invaders, Bullets at ang Player

Ang mga Bullet at Invaders ay kabilang sa klase ng Mover. Ang mga pagkakataon sa klase ng mover ay mayroong kanilang x, y mga lokasyon at bilis, pati na rin ang ningning. Ang klase ng Mover ay may dalawang mga pamamaraan ng halimbawa, itakda () at ilipat (). Ang paraan ng set () ay tumatawag lamang sa DisplayBuf set () na pamamaraan na may na-update na mga coordinate upang makatipid para sa pag-render sa paglaon sa LED matrix. ilipat () ang mga pag-update ng paraan halimbawa mag-coordinate ayon sa bilis ng halimbawa - na magiging kapaki-pakinabang sa paglaon, kung kailangan nating baguhin ang bilis ng mga mananakop habang sumusulong ang mga antas.

Ang Class Bullet at class Invader ay mga subclass ng Mover class. Dito ginagamit namin ang isang bagay na tinatawag na mana. Ang pag-andar ng super () ay nagbibigay-daan sa amin upang tumawag sa mga pamamaraan ng superclass sa subclass, nang hindi kinakailangan na ulitin ang code.

Hakbang 5: Gawin itong Iyong Sarili

Gawin Mong Sariling Sarili
Gawin Mong Sariling Sarili

Binabati kita! Nilikha mo lamang ang klasikong laro ng Space Invaders sa Micro: kaunting gamit ang ilang cool na hardware ng gaming. Siyempre, maaari mong pagbutihin ang code ng laro mula dito - halimbawa, hanggang ngayon, ang laro ay may isang antas lamang - maaari kang magdagdag ng higit pang mga mapaghamong. Gayundin, tulad ng maaari mong isipin, ang orihinal na laro ay may mga bato na lumulutang sa harap ng manlalaro, na maaari mo ring idagdag.

Kung gumawa ka ng isang pinabuting bersyon ng laro, ibahagi ito sa mga komento sa ibaba! Para sa karagdagang impormasyon sa BitPlayer at iba pang hardware para sa mga gumagawa at tagapagturo ng STEM, bisitahin ang aming website, https://tinkergen.com/ at mag-subscribe sa aming newsletter.

Kamakailan-lamang na lumikha ang TinkerGen ng isang kampanya sa Kickstarter para sa MARK (Gumawa ng Isang Robot Kit), isang robot kit para sa pagtuturo ng pag-coding, robotics, AI!

Ang orihinal na Micropython code mula sa hexkcd / micro-vaders, ay binago upang gumana sa TinkerGen BitPlayer.

Inirerekumendang: