
Мазмуну:
2025 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2025-01-23 14:51


Мурунку макалаларыбызда 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 менен иштөө үчүн өзгөртүлгөн.
Сунушталууда:
Arduino Nano-MMA8452Q 3-Axis 12-bit/8-bit Digital Accelerometer Tutorial: 4 Steps

Arduino Nano-MMA8452Q 3-Axis 12-bit/8-bit Digital Accelerometer Tutorial: MMA8452Q-акылдуу, аз кубаттуу, үч огу, сыйымдуулугу, микромахиндүү акселерометр, 12 бит. Колдонуучунун ийкемдүү варианттары акселерометрге орнотулган функциялардын жардамы менен камсыз кылынат, эки үзүлүүгө конфигурацияланат
Moto: Bit Micro: Bit: 7 Steps (Сүрөттөр менен)

Moto: bit менен Micro: bitти колдонуу менен Servo Motorsту кантип иштетүү керек: micro: bitтин функционалын кеңейтүүнүн бир жолу-SparkFun Electronics тарабынан moto: bit деп аталган тактаны колдонуу (болжол менен $ 15-20). Бул татаал көрүнөт жана көптөгөн өзгөчөлүктөргө ээ, бирок андан servo моторлорду иштетүү кыйын эмес. Moto: бит сизге мүмкүндүк берет
Love Meter - Micro: Bit: 10 Steps (Сүрөттөр менен)

Love Meter - Micro: Bit: Бул окуу куралы үчүн сиз " сүйүү өлчөгүчүн " түзөсүз. Microbit менен. Бул абдан оңой иш, ал бир аз кодду жана зымдарды талап кылбайт. Аяктагандан кийин, Microbitтин ар бир четинен эки адам кармашат жана алардын ортосундагы сан
Micro: bit: 6 Steps менен Ultrasonic Distant Tester жасаңыз

Micro: bit менен УЗИ аралыкты текшерүүчү жасаңыз
Space Invaders Сааты (бюджетте!): 6 кадам (сүрөттөр менен)

Space Invaders Clock (Бюджет боюнча!): Жакында мен GeckoDiodeдун салкын курулушун көрдүм жана аны дароо өзүм кургум келди. Instructable - Space Invaders Desktop Clock, мен муну окуп чыккандан кийин аны карап чыгууну сунуштайм. Долбоор дээрлик бир гана булактардан курулган