Съдържание:

Space Invaders в Micropython на Micro: bit: 5 стъпки
Space Invaders в Micropython на Micro: bit: 5 стъпки

Видео: Space Invaders в Micropython на Micro: bit: 5 стъпки

Видео: Space Invaders в Micropython на Micro: bit: 5 стъпки
Видео: Space Invaders in Micropython on Micro:bit 2024, Юли
Anonim
Image
Image

В предишните си статии изследвахме създаването на игри на GameGo, преносима ретро игрална конзола, разработена от TinkerGen education. Игрите, които направихме, напомняха за старите игри на Nintendo. В днешната статия ще направим крачка назад, към златния век на аркадните игри. Ще пресъздадем играта Space Invaders в Micropython на Micro: bit микроконтролер - и като обрат, ще използваме и разширението BitPlayer Micro: bit, което ни позволява да играем играта по -удобно.

Тъй като този урок е за кодиране на играта в Micropython, вместо традиционната поетапна последователност, която използвахме преди за уроци по графично програмиране, ще преминем кодовия блок по блок-ще преминем през важни функции, класове и основните цикъл. Можете да изтеглите пълния код в хранилището на GitHub на този проект. Закопчайте се и започваме!

Консумативи

TinkerGen BitPlayer

BBC Micro: бит

Стъпка 1: Основен цикъл

Джойстик
Джойстик

В този урок ще използвам думата „метод“доста често. Методът в python е донякъде подобен на функция, освен че е свързан с обект/класове. Така че, за опростяване, можете да го прочетете като "функция в рамките на класа". Можете да прочетете повече за методите тук.

Влизаме в основния цикъл с

докато не е game_over:

състояние. Вътре получаваме броя на нашествениците, шанса за появата им и необходимия брой, за да стигнем до следващото ниво от речника на нивата. След това проверяваме за ляво-дясно движение с методите на Listen_Dir за екземпляра на класа JoyStick. Ако едно от условията се оценява като Истина, ние увеличаваме/намаляваме x-стойността на нашия играем герой. Ограничаваме го до [-2, 2] с две if условия. След това инициализираме екземпляр от клас DisplayBuffer и проверяваме за натискане на бутон "щит" или "огнена куршум". Използваме метода DisplayBuffer.set (), за да зададем обекти за по -късно изобразяване. За изобразяване на щита използваме DisplayBuffer.set () директно, но за куршуми и нашественици ги добавяме към съответния им списък и ги задаваме () един по един във цикъл for със следния код за по -късно изобразяване с DispBuffer.render ():

за b в куршуми: b.render (dispBuf) за v в vaders: v.render (dispBuf)

Всички нашественици, куршуми и щит се изобразяват веднъж на всеки основен цикъл с итерация с

dispBuf.render ()

Преди края на основния цикъл проверяваме дали някой от куршумите на нашественици е достигнал края на екрана и ако са, ги изтриваме от съответните им списъци.

Стъпка 2: Джойстик

Джойстик
Джойстик

BitPlayer е лесен за държане и използване, с 2-осен джойстик като Gameboy или PSP контролери, той включва и още 6 програмируеми бутона, обозначени като L, R, A, B, C и D. За потапящо и интерактивно изживяване, BitPlayer самата разполага със звуков сигнал, вибрационен двигател и Grove I2C порт за свързване на допълнителни периферни устройства като OLED дисплей.

Използваме само ляв-десен рокер на джойстика за тази игра, за пълен пример за използване на всички бутони на BitPlayer можете да разгледате joystick_example.py в хранилището на GitHub на този проект. При създаването на екземпляра на клас JoyStick проверяваме за четене по подразбиране на оста X и съхраняваме тази стойност в self. Read_X. След това във функция Listen_Dir проверяваме дали отклонението от тази стойност по подразбиране е по -високо от променливата на чувствителността (опитайте да я настроите сами, ако смятате, че JoyStick е твърде чувствителен) и връщаме True of False според откритата посока.

Нека да разгледаме конкретен пример за това как работи:

Да кажем, че нашето четене по оста X по подразбиране е 0. След това, ако преместим джойстика надясно:

New_X = JoyStick_X.read_analog () #New_X = 200

Вдясно = New_X - self. Read_X #Right = 200 Вляво = self. Read_X - New_X #Left = -200

След това, когато проверяваме посоката:

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

Стъпка 3: Показване на буфер

Буфер за показване
Буфер за показване

Класът DisplayBuf отговаря за контрола на LED екрана. Това се прави с помощта на два метода, set () и render (). методът set () променя стойностите, съответстващи на пикселите на LED екрана. Може би си спомняте, че пикселите на Micro: bit LED екрана могат да бъдат изразени като низ или списък - „00000: 00000: 00000: 00000: 00000“е празен екран. „00000: 00000: 00000: 00000: 00100“е екран с слабо осветени пиксели в центъра на долния ред.

00000:

00000

:00000

:00000:

00100"

Тази нотация може да бъде по -лесна за обработка:)

И така, това, което правим по време на основния цикъл, е методът call () на DisplayBuf, за да зададем всички наши обекти, които трябва да се показват на екрана. След това използваме метода render (), за да ги покажем всички едновременно на екрана.

Стъпка 4: Нашественици, куршуми и играч

Нашественици, куршуми и играч
Нашественици, куршуми и играч

Куршумите и нашествениците принадлежат към клас Mover. Екземплярите на клас Mover имат своите x, y местоположения и скорост, както и яркост. Класът Mover има два метода на екземпляр, set () и move (). методът set () просто извиква DisplayBuf метод set () с актуализирани координати, за да се запази за по -късно изобразяване на LED матрица. метода move () актуализира координатите на инстанцията според скоростта на екземпляра - това е полезно по -късно, когато трябва да променим скоростта на нашествениците с напредването на нивата.

Class Bullet и class Invader са подкласове на клас Mover. Тук използваме нещо, наречено наследяване. Функционалността на super () ни позволява да извикваме методи на суперкласа в подклас, без да е необходимо да повтаряме кода.

Стъпка 5: Направете го сам

Направи го сам
Направи го сам

Честито! Току-що пресъздадохте класическата игра Space Invaders на Micro: bit с готин хардуер за игри. Разбира се, можете да подобрите кода на играта оттук - например, засега играта има само едно ниво - можете да добавите още предизвикателни. Също така, както може би си спомняте, оригиналната игра има скали, плаващи пред плейъра, които също можете да добавите.

Ако все пак направите подобрена версия на играта, споделете я в коментарите по -долу! За повече информация относно BitPlayer и друг хардуер за създатели и преподаватели по STEM посетете нашия уебсайт https://tinkergen.com/ и се абонирайте за нашия бюлетин.

TinkerGen наскоро създаде Kickstarter кампания за MARK (Make A Robot Kit), робот комплект за преподаване на кодиране, роботика, AI!

Оригиналният код на Micropython от hexkcd/micro-vaders беше променен, за да работи с TinkerGen BitPlayer.

Препоръчано: