Talaan ng mga Nilalaman:
- Mga gamit
- Hakbang 1: Pangunahing Loop
- Hakbang 2: Joystick
- Hakbang 3: Display Buffer
- Hakbang 4: Mga Invaders, Bullet at ang Player
- Hakbang 5: Gawin itong Iyong Sarili
Video: Space Invaders sa Micropython sa Micro: bit: 5 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:11
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
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
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
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
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
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:
Lego Portable Gaming Console With Space Invaders: 4 Hakbang
Lego Portable Gaming Console With Space Invaders: Naisip mo ba na maging isang developer ng laro at pagbuo ng iyong sariling gaming console na maaari mong i-play on-the-go? Ang kailangan mo lang ay kaunting oras, hardwareLego bricksa Mini-Calliope (maaaring mag-order sa website na ito https://calliope.cc/en)and ilang kasanayan
LCD Invaders: isang Space Invaders Tulad ng Laro sa 16x2 LCD Character Display: 7 Mga Hakbang
LCD Invaders: isang Space Invaders Tulad ng Laro sa 16x2 LCD Character Display: Hindi na kailangang ipakilala ang isang maalamat na laro na "Space Invaders". Ang pinaka-kagiliw-giliw na tampok ng proyektong ito ay ang paggamit nito ng pagpapakita ng teksto para sa grapikong output. Nakamit ito sa pamamagitan ng pagpapatupad ng 8 pasadyang mga character. Maaari mong i-download ang kumpletong Arduino
Paano Gumawa ng Mga Space Invaders sa Micro Bit .: 4 Mga Hakbang
Paano Gumawa ng Mga Space Invaders sa Micro Bit .: Kaya ang unang hakbang ay upang lumikha ng aming barko. Pumunta ka sa " Pangunahin " at magdagdag ng " Sa pagsisimula " harangan Pagkatapos ay pupunta ka sa " Mga variable " at lumikha ka ng isang variable na tinatawag na " SHIP " at pumili ng isang bloke mula sa " Mga variable " tab t
Pagprograma ng isang Micro: Bit Robot at Joystick: Bit Controller Sa MicroPython: 11 Mga Hakbang
Programming a Micro: Bit Robot & Joystick: Bit Controller With MicroPython: Para sa Robocamp 2019, ang aming tag-init na robotics camp, ang mga kabataan na may edad 10-13 ay nag-solder, nagprogram at nagtatayo ng isang BBC micro: bit based 'antweight robot', pati na rin ang programa isang micro: kaunti upang magamit bilang isang remote control. Kung kasalukuyan kang nasa Robocamp, ski
Space Invaders Clock (sa isang Budget!): 6 na Hakbang (na may Mga Larawan)
Space Invaders Clock (sa isang Budget!): Kamakailan-lamang na nakita ko ang isang cool na pagbuo ng GeckoDiode at nais ko agad itong itayo. Ang Instructable ay Space Invaders Desktop Clock at inirerekumenda kong tingnan mo ito pagkatapos basahin ito. Ang proyekto ay halos nag-iisa lamang na binuo sa mga bahagi na nakuha