Obsah:

Space Invaders in Micropython na Micro: bit: 5 kroků
Space Invaders in Micropython na Micro: bit: 5 kroků

Video: Space Invaders in Micropython na Micro: bit: 5 kroků

Video: Space Invaders in Micropython na Micro: bit: 5 kroků
Video: Gra Dino w Pygame Zero - Gameplay 2024, Červenec
Anonim
Image
Image

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

Joystick
Joystick

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

Joystick
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

Vyrovnávací paměť displeje
Vyrovnávací paměť displeje

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

Vetřelci, kulky a hráč
Vetřelci, kulky a hráč

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

Přizpůsobte si to podle sebe
Přizpůsobte si to podle sebe

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: