Агуулгын хүснэгт:

Micropython дахь Space Invaders in Micro: bit: 5 алхам
Micropython дахь Space Invaders in Micro: bit: 5 алхам

Видео: Micropython дахь Space Invaders in Micro: bit: 5 алхам

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

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

Энэхүү гарын авлага нь тоглоомыг Micropython дээр кодлохтой холбоотой бөгөөд өмнө нь график програмчлалын хичээлд ашигладаг уламжлалт үе шаттай дарааллын оронд бид кодын блокыг чухал блок, функц, ангиуд болон үндсэн хэсгүүдийг судлах болно. гогцоо. Та энэ төслийн GitHub репозитороос бүрэн кодыг татаж авах боломжтой. Тэврээд, эхэлцгээе!

Хангамж

TinkerGen BitPlayer

BBC Micro: жаахан

Алхам 1: Үндсэн гогцоо

Joystick
Joystick

Энэ гарын авлагад би "арга" гэсэн үгийг ихэвчлэн ашиглах болно. Питон дахь арга нь функцтэй төстэй боловч объект/ангиудтай холбоогүй болно. Тиймээс хялбарчлахын тулд та үүнийг "анги доторх функц" гэж уншиж болно. Та аргын талаар илүү ихийг эндээс уншиж болно.

Бид үндсэн давталтыг оруулна уу

game_over биш байхад:

нөхцөл. Дотор нь бид түрэмгийлэгчдийн тоо, тэдний гарч ирэх магадлал, түвшний толь бичгээс дараагийн түвшинд хүрэх шаардлагатай тоог олж авдаг. Дараа нь бид JoyStick ангийн жишээний Listen_Dir жишээ аргуудын тусламжтайгаар зүүнээс баруун тийш шилжих хөдөлгөөнийг шалгадаг. Хэрэв нөхцлүүдийн аль нэг нь Үнэн гэж үнэлэгдвэл бид тоглох боломжтой дүрийнхээ x-утгыг нэмэгдүүлж/бууруулдаг. Бид үүнийг хоёр нөхцөлтэйгээр [-2, 2] гэж хязгаарладаг. Дараа нь бид DisplayBuffer ангийн жишээг эхлүүлж, "бамбай" эсвэл "галын сум" товчлуур дарагдсан эсэхийг шалгана уу. Бид DisplayBuffer.set () аргыг ашиглан объектуудыг дараа нь үзүүлэх болно. Бамбайг гаргахын тулд бид DisplayBuffer.set () -ийг шууд ашигладаг, харин сум, халдагчдын хувьд тэдгээрийг тус тусын жагсаалтад нэмж, дараа нь DispBuffer.render () ашиглан үзүүлэхийн тулд дараах код бүхий давталтын дарааллаар () тохируулдаг.

b сумны хувьд: b.render (dispBuf) v in vaders: v.render (dispBuf)

Бүх түрэмгийлэгч, сум, бамбайг гол давталтын давталт бүрт нэг удаа дэлгэц дээр харуулдаг

dispBuf.render ()

Үндсэн давталт дуусахаас өмнө бид түрэмгийлэгчдийн сумны аль нэг нь дэлгэцийн төгсгөлд хүрсэн эсэхийг шалгаж, хэрэв байгаа бол тэдгээрийг тус тусын жагсаалтаас устгадаг.

Алхам 2: Joystick

Joystick
Joystick

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

Бид энэ тоглоомонд зөвхөн джойстикийн баруун зүүн талын рокерыг ашигладаг, жишээ нь BitPlayer-ийн бүх товчлуурыг ашиглахын тулд та энэ төслийн GitHub репозитороос joystick_example.py-ийг үзэх боломжтой. JoyStick классын жишээг үүсгэх үед бид X тэнхлэгийн анхдагч уншилтыг шалгаж, энэ утгыг өөртөө хадгалдаг. Read_X. Дараа нь Listen_Dir функц дээр бид анхдагч утгаас хазайлт нь мэдрэмтгий хувьсагчаас өндөр эсэхийг шалгадаг (хэрэв та JoyStick хэт мэдрэмтгий гэж бодож байвал өөрөө өөрчилж үзээрэй), илэрсэн чиглэлийн дагуу Үнэн худлыг буцаана.

Энэ нь хэрхэн ажилладаг талаар тодорхой жишээг авч үзье.

Бидний X тэнхлэгийн үндсэн утга 0 байна гэж бодъё. Дараа нь хэрэв бид Joystick-ийг зөв хөдөлгөвөл:

New_X = JoyStick_X.read_analog () #New_X = 200

Баруун = New_X - өөрөө. Read_X #Баруун = 200 Зүүн = өөрөө. Read_X - New_X #Зүүн = -200

Дараа нь бид чиглэлийг шалгах үед:

Precision = 150if Right> Precision: #200> 150 True Get_Rocker = DIR ['R'] elif Left> Precision: #-200> 150 False Get_Rocker = DIR ['L'] other: 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: Үүнийг өөрийн болгох

Үүнийг өөрийн болгох
Үүнийг өөрийн болгох

Баяр хүргэе! Та зүгээр л Micro: Bit дээр сонгодог Space Invaders тоглоомыг дахин бүтээсэн бөгөөд зарим гайхалтай тоглоомын тоног төхөөрөмжөөр бүтээсэн. Мэдээжийн хэрэг, та тоглоомын кодыг эндээс сайжруулах боломжтой - жишээлбэл, одоогоор тоглоом зөвхөн нэг түвшинтэй байгаа тул та илүү төвөгтэй зүйлийг нэмж болно. Түүнчлэн, санаж байгаа шиг анхны тоглоом нь тоглогчийн урд талд хөвж буй чулуутай бөгөөд үүнийг нэмж болно.

Хэрэв та тоглоомын сайжруулсан хувилбарыг хийвэл доорх сэтгэгдлээр хуваалцаарай! BitPlayer болон үйлдвэрлэгчид болон STEM сургагчдад зориулсан бусад тоног төхөөрөмжийн талаар дэлгэрэнгүй мэдээлэл авахыг хүсвэл манай вэбсайт https://tinkergen.com/ хаягаар орж манай мэдээллийн хуудсыг захиалаарай.

TinkerGen саяхан MARK (Make A Robot Kit), код бичих, робот техник, хиймэл оюун ухаанд заах роботын Kickstarter кампанит ажлыг бүтээжээ.

Hexkcd/micro-vaders-ийн анхны Micropython кодыг TinkerGen BitPlayer-тэй ажиллахаар өөрчилсөн.

Зөвлөмж болгож буй: