Мазмуну:

Micropythonдогу Space Invaders Micro: bit: 5 Steps
Micropythonдогу Space Invaders Micro: bit: 5 Steps

Video: Micropythonдогу Space Invaders Micro: bit: 5 Steps

Video: Micropythonдогу Space Invaders Micro: bit: 5 Steps
Video: Вводный урок по программированию ESP32, ESP8266 на MicroPython 2024, Июль
Anonim
Image
Image

Мурунку макалаларыбызда TinkerGen билим берүүчү тарабынан иштелип чыккан GameGo портативдүү ретро оюн консолунда оюн жасоону изилдедик. Биз жасаган оюндар эски Nintendo оюндарын эске салды. Бүгүнкү макалада биз артка кадам таштайбыз, аркада оюндарынын алтын дооруна. Биз Micropython'до Space Invaders оюнун Micro: bit microcontroller -де кайра түзөбүз жана бурулуш катары биз BitPlayer Micro: bit кеңейтүүсүн колдонобуз, бул бизге оюнду ыңгайлуураак ойнотууга мүмкүндүк берет.

Бул үйрөткүч оюнду Micropythonдо коддоо жөнүндө болгондуктан, биз мурда графикалык программалоо сабактары үчүн колдонулган этап-этабы менен этаптын ордуна, биз блоктордун блокторун карайбыз-маанилүү функцияларды, класстарды жана негизги цикл. Толук кодду бул долбоордун GitHub репозиторийинен жүктөп алсаңыз болот. Токтогула жана баштайлы!

Жабдуулар

TinkerGen BitPlayer

BBC Micro: бир аз

1 -кадам: Негизги цикл

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

Бул окуу куралында мен "метод" сөзүн көп колдоном. Питондогу метод функцияга бир аз окшош, бирок ал объект/класстар менен байланышкан эмес. Ошентип, жөнөкөйлөштүрүү үчүн сиз аны "класстагы функция" катары окуй аласыз. Методдор жөнүндө көбүрөөк бул жерден окуй аласыз.

Биз негизги циклге киребиз

game_over эмес:

шарт. Ичинде баскынчылардын санын, алардын пайда болуу мүмкүнчүлүгүн жана деңгээлдер сөздүгүнөн кийинки баскычка өтүү үчүн керектүү санды алабыз. Кийинки биз JoyStick класстын Listen_Dir экземплярдык методдору менен сол-оңго кыймылын текшеребиз. Эгерде шарттардын бири "True" деп бааласа, биз ойной турган мүнөзүбүздүн x-наркын көбөйтөбүз/азайтамыз. Биз аны эки шарт менен [-2, 2] менен чектейбиз. Андан кийин биз DisplayBuffer классынын инициализациясын жүргүзүп, "калкан" же "октун огу" баскычын басууну текшеребиз. Кийинки рендеринг үчүн объекттерди коюу үчүн DisplayBuffer.set () ыкмасын колдонобуз. Калканды көрсөтүү үчүн биз түздөн -түз DisplayBuffer.set () колдонобуз, бирок ок жана баскынчылар үчүн аларды тиешелүү тизмеге кошобуз жана кийинчерээк DispBuffer.render () менен көрсөтүү үчүн төмөнкү код менен циклге бирден коебуз ():

ок үчүн b үчүн: b.render (dispBuf) v in vaders үчүн: v.render (dispBuf)

Бардык баскынчылар, октор жана калкан экранда негизги циклди кайталоо жолу менен көрсөтүлөт

dispBuf.render ()

Негизги укуруктун аягына чейин биз баскынчылардын окторунун экрандын аягына жеткенин текшеребиз жана эгер болсо, биз аларды тиешелүү тизмелеринен өчүрөбүз.

2 -кадам: Джойстик

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

BitPlayerди кармоо жана колдонуу оңой, Gameboy же PSP контроллери сыяктуу 2 огу бар джойстик менен бирге L, R, A, B, C жана D деп белгиленген дагы 6 программалоочу баскычтарды камтыйт. өзү OZD дисплейи сыяктуу кошумча перифериялык түзүлүштөрдү туташтыруу үчүн коңгуроо, вибрация мотору жана Grove I2C портун камтыйт.

Биз бул оюн үчүн джойстиктин сол-оң рокерин гана колдонобуз, мисалы, BitPlayerдин бардык баскычтарын колдонуу боюнча, мисалы, бул долбоордун GitHub репозиторийинде joystick_example.py менен таанышсаңыз болот. JoyStick классынын экземплярын түзүүдө биз X огунун демейки окуусун текшеребиз жана бул маанини өзүнчө сактайбыз. Read_X. Андан кийин, Listen_Dir функциясында, биз бул демейки мааниден четтөө сезимталдыктын өзгөрмөсүнөн жогору экендигин текшеребиз (эгерде сиз JoyStick өтө сезимтал деп ойлосоңуз, өзүңүз жөндөп көрүңүз) жана аныкталган багытка ылайык "Туура" дегенди кайтарыңыз.

Келгиле, бул кантип иштээринин конкреттүү мисалын карап көрөлү:

Келгиле, X-огунун демейки көрсөткүчү 0 деп коёлу. Андан кийин, биз Джойстикти оңго жылдырсак:

New_X = JoyStick_X.read_analog () #New_X = 200

Оңго = Жаңы_Х - өзүн. Ред_Х #Оңго = 200 Солго = өзүнчө. Оку_Х - Жаңы_Х #Солго = -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 Туура башка: жалганга кайтуу

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"

Бул жазууну иштетүү оңой болушу мүмкүн:)

Ошентип, биз негизги цикл учурунда эмне кылабыз, DisplayBufтун call (set) ыкмасы экранда көрсөтүлүшү керек болгон бардык объекттерибизди орнотуу үчүн. Андан кийин биз 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 жана башка жабдыктар жөнүндө көбүрөөк маалымат алуу үчүн, биздин веб -сайтка, https://tinkergen.com/ кирип, биздин баракчага жазылыңыз.

TinkerGen жакында MARK (Make A Robot Kit) үчүн Kickstarter кампаниясын түздү, коддоо, робототехника, AI үйрөтүү үчүн робот -комплект!

Hexkcd/micro-vadersтен баштапкы Micropython коду TinkerGen BitPlayer менен иштөө үчүн өзгөртүлгөн.

Сунушталууда: