Obsah:
- Zásoby
- Krok 1: Hlavní smyčka
- Krok 2: Joystick
- Krok 3: Zobrazení vyrovnávací paměti
- Krok 4: Invaders, Bullets and the Player
- Krok 5: Přizpůsobte si ho
Video: Space Invaders in Micropython na Micro: bit: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:20
V našich předchozích článcích jsme prozkoumali tvorbu her na GameGo, přenosné retro herní konzoli vyvinuté vzděláváním TinkerGen. Hry, které jsme vytvořili, připomínaly staré hry Nintendo. V dnešním článku se vrátíme o krok zpět, do zlatého věku arkádových her. Znovu vytvoříme hru Space Invaders v Micropythonu na mikrokontroléru Micro: bit - a jako zápletku použijeme také rozšíření BitPlayer Micro: bit, které nám umožní hrát hru pohodlněji.
Protože tento tutoriál je o kódování hry v Micropythonu, namísto tradiční posloupnosti krok za krokem, kterou jsme dříve používali pro výukové programy grafického programování, projdeme kód blok po bloku-projdeme důležité funkce, třídy a hlavní smyčka. Celý kód si můžete stáhnout v úložišti GitHub tohoto projektu. Připoutejte se a můžeme začít!
Zásoby
TinkerGen BitPlayer
BBC Micro: bit
Krok 1: Hlavní smyčka
V tomto tutoriálu budu používat slovo „metoda“poměrně často. Metoda v pythonu je poněkud podobná funkci, kromě toho, že je spojena s objektem/třídami. Pro zjednodušení jej tedy můžete číst jako „funkci v rámci třídy“. Více o metodách si můžete přečíst zde.
Do hlavní smyčky vstupujeme pomocí
zatímco není game_over:
stav. Uvnitř dostaneme počet útočníků, šanci na jejich objevení a počet potřebný k tomu, abychom se dostali ze slovníku úrovní na další úroveň. Dále zkontrolujeme pohyb zleva doprava pomocí metod instance Listen_Dir instance třídy JoyStick. Pokud je jedna z podmínek vyhodnocena jako True, zvyšujeme/snižujeme hodnotu x naší hratelné postavy. Omezíme jej na [-2, 2] dvěma podmínkami if. Poté inicializujeme instanci třídy DisplayBuffer a zkontrolujeme, zda není stisknuto tlačítko „štít“nebo „požární střela“. K nastavení objektů pro pozdější vykreslování používáme metodu DisplayBuffer.set (). Pro vykreslování štítu používáme přímo DisplayBuffer.set (), ale pro kulky a vetřelce je přidáme do příslušného seznamu a nastavíme () jeden po druhém do smyčky for s následujícím kódem pro pozdější vykreslení pomocí DispBuffer.render ():
pro b v odrážkách: b.render (dispBuf) pro v in vaders: v.render (dispBuf)
Všichni útočníci, kulky a štít jsou vykresleni na displeji při každé iteraci hlavní smyčky pomocí
dispBuf.render ()
Před koncem hlavní smyčky zkontrolujeme, zda některá z odrážek útočníků dosáhla konce obrazovky, a pokud ano, odstraníme je z příslušných seznamů.
Krok 2: Joystick
BitPlayer se snadno drží a používá, s dvouosým joystickem, jako jsou ovladače Gameboy nebo PSP, obsahuje také dalších 6 programovatelných tlačítek označených jako L, R, A, B, C a D. Pro pohlcující a interaktivní zážitek nabízí BitPlayer samotný je vybaven bzučákem, vibračním motorem a portem Grove I2C pro připojení dalších periferií, jako je OLED displej.
Pro tuto hru používáme pouze kolébku joysticku vlevo a vpravo, například při použití všech tlačítek BitPlayer se můžete podívat na joystick_example.py v úložišti GitHub tohoto projektu. Při vytváření instance třídy JoyStick zkontrolujeme výchozí čtení osy X a uložíme tuto hodnotu do self. Read_X. Poté ve funkci Listen_Dir zkontrolujeme, zda odchylka od této výchozí hodnoty je vyšší než proměnná citlivosti (zkuste ji vyladit sami, pokud máte pocit, že JoyStick je příliš citlivý) a podle detekovaného směru vrátíme True of False.
Podívejme se na konkrétní příklad toho, jak to funguje:
Řekněme, že naše výchozí hodnota osy X je 0. Potom, pokud pohneme joystickem doprava:
New_X = JoyStick_X.read_analog () #New_X = 200
Vpravo = New_X - self. Read_X #Right = 200 Left = self. Read_X - New_X #Left = -200
Když pak zkontrolujeme směr:
Precision = 150if Right> Precision: #200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: #-200> 150 False Get_Rocker = DIR ['L'] else: Get_Rocker = DIR ['NONE'] if Dir == Get_Rocker: return True else: return False
Krok 3: Zobrazení vyrovnávací paměti
Za ovládání LED obrazovky je zodpovědná třída DisplayBuf. Provádí se pomocí dvou metod, set () a render (). metoda set () mění hodnoty odpovídající pixelům LED obrazovky. Možná si pamatujete, že pixely na LED obrazovce Micro: bit mohou být vyjádřeny jako řetězec nebo seznam - „00000: 00000: 00000: 00000: 00000“je prázdná obrazovka. „00000: 00000: 00000: 00000: 00100“je obrazovka se slabě osvětleným pixelem uprostřed spodní řady.
00000:
00000
:00000
:00000:
00100"
Zpracování tohoto zápisu může být jednodušší:)
To, co děláme během hlavní smyčky, je metoda volání set () DisplayBuf k nastavení všech našich objektů, které je třeba zobrazit na obrazovce. Poté použijeme metodu render (), abychom je všechny současně zobrazili na obrazovce.
Krok 4: Invaders, Bullets and the Player
Kulky a vetřelci patří do třídy Mover. Instance třídy Mover mají své umístění x, y a rychlost, stejně jako jas. Třída Mover má dvě metody instance, set () a move (). metoda set () jednoduše zavolá metodu DisplayBuf set () s aktualizovanými souřadnicemi pro uložení pro pozdější vykreslení na matici LED. metoda move () aktualizuje souřadnici instance podle rychlosti instance - to se hodí později, když potřebujeme s postupem úrovní měnit rychlost útočníků.
Class Bullet a Class Invader jsou podtřídy třídy Mover. Zde používáme něco, čemu se říká dědičnost. Funkce super () nám umožňuje volat metody nadtřídy v podtřídě, aniž by bylo nutné kód opakovat.
Krok 5: Přizpůsobte si ho
Gratulujeme! Právě jste znovu vytvořili klasickou hru Space Invaders na Micro: bit s nějakým skvělým herním hardwarem. Odtud můžete samozřejmě herní kód vylepšit - například hra má nyní pouze jednu úroveň - můžete přidat náročnější. Také, jak si možná pamatujete, původní hra má před hráčem plovoucí kameny, které můžete také přidat.
Pokud vytvoříte vylepšenou verzi hry, podělte se o ni v níže uvedených komentářích! Další informace o BitPlayeru a dalším hardwaru pro výrobce a pedagogy STEM najdete na našem webu https://tinkergen.com/ a přihlaste se k odběru našeho zpravodaje.
TinkerGen nedávno vytvořil kampaň Kickstarter pro MARK (Make A Robot Kit), robotickou sadu pro výuku kódování, robotiky, AI!
Původní kód Micropython z hexkcd/micro-vaders byl změněn tak, aby fungoval s TinkerGen BitPlayer.
Doporučuje:
LCD Invaders: Space Invaders Like Game na 16x2 LCD Character Display: 7 kroků
LCD Invaders: Space Invaders Like Game na displeji LCD s rozlišením 16x2: Legendární hru „Space Invaders“není třeba představovat. Nejzajímavější vlastností tohoto projektu je, že pro grafické výstupy používá zobrazení textu. Toho je dosaženo implementací 8 vlastních znaků. Můžete si stáhnout kompletní Arduino
Jak vyrobit Space Invaders na Micro Bit .: 4 kroky
Jak vyrobit Space Invaders na Micro Bit .: Prvním krokem je tedy vytvoření naší lodi. Přejdete na " Základní " a přidejte " Při spuštění " blok. Poté přejděte na " Proměnné " a vytvoříte proměnnou s názvem " SHIP " a vyberte blok z " Proměnných " záložka
Programování Micro: Bit Robot & Joystick: Bit Controller s MicroPython: 11 kroků
Programování Micro: Bit Robot & Joystick: Bitový ovladač s MicroPython: Pro Robocamp 2019, náš letní tábor robotiky, mladí lidé ve věku 10-13 let pájí, programují a staví „antweight robot“na bázi micro: bit založený na BBC, stejně jako programování micro: bit pro použití jako dálkové ovládání. Pokud jste právě na Robocampu, lyžujte
Hodiny Space Invaders (s rozpočtem!): 6 kroků (s obrázky)
Hodiny Space Invaders (s rozpočtem!): Nedávno jsem viděl skvělou sestavu od GeckoDiode a okamžitě jsem ji chtěl postavit sám. Instructable jsou stolní hodiny Space Invaders a po přečtení tohoto článku vám doporučuji se na něj podívat. Projekt byl téměř výhradně postaven z částí pocházejících z
Lustr Space Invaders With Glow in the Dark Akce: 16 kroků (s obrázky)
Lustr Space Invaders With Glow in the Dark Action: Použijte 3D modelování/tisk, laserem řezaný akryl, lití pryskyřice, UV reaktivní pigment, LED diody a jednoduché zapojení, abyste vytvořili vysoce stylový a retro chladný lustr nebo lampu pro invazi do vesmíru. Zahrnul jsem pěkný trik pro vytváření zakřivených rohů z laserového