Мазмұны:

Micropython ішіндегі ғарыштық басқыншылар: бит: 5 қадам
Micropython ішіндегі ғарыштық басқыншылар: бит: 5 қадам

Бейне: Micropython ішіндегі ғарыштық басқыншылар: бит: 5 қадам

Бейне: Micropython ішіндегі ғарыштық басқыншылар: бит: 5 қадам
Бейне: ESP32 Tutorial 52 - WS2812 CheerLights MQTT Global Sync with LCD | SunFounder ESP32 IoT Learnig kit 2024, Шілде
Anonim
Image
Image

Алдыңғы мақалаларда біз TinkerGen білім беруімен жасалған портативті ретро ойын консолі GameGo -да ойын жасауды зерттедік. Біз жасаған ойындар ескі Nintendo ойындарын еске түсірді. Бүгінгі мақалада біз артқа, арткада ойындарының алтын дәуіріне бір қадам шегінетін боламыз. Біз Micropython -да Micro: bit микроконтроллерінде Space Invaders ойынын қайта құрамыз және бұрылыс ретінде біз BitPlayer Micro: bit кеңейтімін қолданамыз, бұл бізге ойынды ыңғайлы ойнауға мүмкіндік береді.

Бұл оқулық Micropython-да ойынды кодтау туралы болғандықтан, біз бұрын графикалық программалау сабақтарында қолданған дәстүрлі кезең-кезеңмен емес, біз блоктар бойынша блок-блок арқылы өтеміз-маңызды функцияларды, сыныптарды және негізгі цикл Сіз толық кодты осы жобаның GitHub репозиторийінен жүктей аласыз. Бекітіңіз, бастайық!

Жабдықтар

TinkerGen BitPlayer

BBC Micro: аз

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

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

Бұл оқулықта мен «әдіс» сөзін жиі қолданатын боламын. Питондағы әдіс функцияға біршама ұқсас, тек объектімен/сыныптармен байланысты. Осылайша, жеңілдету үшін сіз оны «сыныптағы функция» ретінде оқи аласыз. Сіз әдістер туралы толығырақ мына жерден оқи аласыз.

Біз негізгі циклды енгіземіз

game_over болмаған кезде:

шарт. Ішінде біз басқыншылардың санын, олардың пайда болу мүмкіндігін және деңгейлік сөздіктен келесі деңгейге өту үшін қажет санды аламыз. Содан кейін біз JoyStick сыныптық данасының Listen_Dir даналық әдістерімен солға-оңға қозғалысты тексереміз. Егер шарттардың бірі «True» деп бағаланса, біз ойнайтын кейіпкеріміздің x мәнін көбейтеміз/азайтамыз. Біз оны екі шартпен [-2, 2] шектейміз. Содан кейін біз DisplayBuffer класының данасын инициализациялаймыз және «қалқан» немесе «атыс қаруы» түймелерінің басылуын тексереміз. Нысандарды кейін көрсету үшін DisplayBuffer.set () әдісін қолданамыз. Қалқанды көрсету үшін біз DisplayBuffer.set () тікелей қолданамыз, бірақ оқтар мен басқыншылар үшін оларды тиісті тізімге қосамыз және дисплейлерді кейін көрсету үшін келесі кодпен циклге бір -бірлеп орнатамыз ():

оқтардағы b үшін: b.render (dispBuf) v үшін вадерлерде: v.render (dispBuf)

Барлық басқыншылар, оқтар мен қалқандар әр негізгі цикл қайталанатын кезде бір рет көрсетіледі

dispBuf.render ()

Негізгі цикл аяқталмас бұрын біз басқыншылардың кез келген оқтары экранның соңына жеткенін тексереміз, егер олар болса, біз оларды тиісті тізімнен өшіреміз.

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

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

BitPlayer-ді ұстау және пайдалану оңай, Gameboy немесе PSP контроллері сияқты 2 осьті джойстикпен, сонымен қатар L, R, A, B, C және D деп белгіленген 6 бағдарламаланатын батырманы қамтиды. Терең және интерактивті тәжірибе үшін BitPlayer өзі дыбыстық сигнал, діріл қозғалтқышы және OLED дисплейі сияқты қосымша перифериялық құрылғыларды қосуға арналған Grove I2C портынан тұрады.

Біз бұл ойын үшін джойстиктің сол жақ-оң жақ рокерін ғана қолданамыз, мысалы BitPlayer-дің барлық түймелерін пайдалану үшін сіз осы жобаның GitHub репозиторийінде joystick_example.py сайтына кіре аласыз. JoyStick класының данасын құрған кезде біз X осінің әдепкі оқуын тексереміз және сол мәнді self. Read_X ішінде сақтаймыз. Содан кейін Listen_Dir функциясында біз осы әдепкі мәннен ауытқу сезімталдық айнымалысынан жоғары екенін тексереміз (егер сіз JoyStick тым сезімтал деп ойласаңыз, оны өзіңіз реттеп көріңіз) және анықталған бағыт бойынша True False мәнін қайтарыңыз.

Бұл қалай жұмыс істейтіні туралы нақты мысалды қарастырайық:

Біздің осьтік X осінің көрсеткіші 0 деп айтайық. Егер Джойстикті оңға жылжытсақ:

New_X = JoyStick_X.read_analog () #New_X = 200

Оңға = Жаңа_Х - өзін -өзі. Оқу_Х #Оңға = 200 Солға = өзін -өзі оқу. X -Жаңа_Х #Солға = -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 else: False қайтару

3 -қадам: дисплей буфері

Дисплей буфері
Дисплей буфері

DisplayBuf класы жарықдиодты экранды басқаруға жауап береді. Бұл set () және render () екі әдісін қолдана отырып орындалады. set () әдісі жарықдиодты экран пикселдеріне сәйкес келетін мәндерді өзгертеді. Естеріңізде болар, 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 () әдісін шақырады. move () әдісі дана жылдамдығына сәйкес даналық координатаны жаңартады - бұл деңгейлердің өсуімен басқыншылардың жылдамдығын өзгерту қажет болған кезде пайдалы болады.

Class Bullet және class Invader - бұл Mover класының ішкі сыныптары. Мұнда біз мұрагерлік деп аталатын нәрсені қолданамыз. Super () функционалдығы кодты қайталамай -ақ, кіші сыныптағы суперкласстың әдістерін шақыруға мүмкіндік береді.

5 -қадам: Оны өзіңізге айналдырыңыз

Оны өзіңізге айналдырыңыз
Оны өзіңізге айналдырыңыз

Құттықтаймын! Сіз жай ғана Micro: бит ойынында классикалық Space Invaders ойынын қайта құрдыңыз. Әрине, сіз ойын кодын осы жерден жақсарта аласыз - мысалы, қазіргі уақытта ойынның тек бір деңгейі бар - сіз одан да күрделі ойындарды қоса аласыз. Сондай -ақ, есіңізде болар, бастапқы ойында плеердің алдында жартастар бар, оларды да қосуға болады.

Егер сіз ойынның жақсартылған нұсқасын жасасаңыз, оны төмендегі түсініктемелерде бөлісіңіз! BitPlayer және өндірушілер мен STEM тәрбиешілеріне арналған басқа жабдық туралы қосымша ақпарат алу үшін біздің веб -сайтқа кіріңіз, https://tinkergen.com/ және біздің ақпараттық бюллетеньге жазылыңыз.

TinkerGen жақында MARK (Make A Robot Kit) үшін Kickstarter науқанын құрды, бұл кодтауды, робототехниканы, AI үйретуге арналған роботтар жиынтығы!

Hexkcd/micro-vaders бастап Micropython бастапқы коды, TinkerGen BitPlayer жұмыс істеу үшін өзгертілді.

Ұсынылған: