فهرست مطالب:

مهاجمان فضایی در Micropython در Micro: بیت: 5 مرحله
مهاجمان فضایی در Micropython در Micro: بیت: 5 مرحله

تصویری: مهاجمان فضایی در Micropython در Micro: بیت: 5 مرحله

تصویری: مهاجمان فضایی در Micropython در Micro: بیت: 5 مرحله
تصویری: AtGames Legends Pinball Micro Review! 2024, جولای
Anonim
Image
Image

در مقاله های قبلی ما ساخت بازی در GameGo ، یک کنسول بازی قابل حمل یکپارچهسازی با سیستمعامل توسعه یافته توسط TinkerGen را بررسی کرده ایم. بازی هایی که ساختیم یادآور بازی های قدیمی نینتندو بود. در مقاله امروز ، ما یک قدم عقب می رویم ، به عصر طلایی بازی های آرکید. ما بازی Space Invaders را در Micropython در Micro: bit microcontroller دوباره ایجاد می کنیم - و به عنوان یک پیچ و تاب ، ما همچنین از BitPlayer Micro: extension bit استفاده خواهیم کرد که به ما امکان می دهد راحت تر بازی کنیم.

از آنجا که این آموزش درباره برنامه نویسی بازی در Micropython است ، به جای توالی مرحله به مرحله سنتی که قبلاً برای آموزش برنامه نویسی گرافیکی استفاده می کردیم ، ما بلاک به بلوک کد را مرور می کنیم-توابع مهم ، کلاس ها و اصلی حلقه می توانید کد کامل را در مخزن GitHub این پروژه بارگیری کنید. دست و پا بزنید و شروع کنیم!

تدارکات

TinkerGen BitPlayer

میکرو بی بی سی: کمی

مرحله 1: حلقه اصلی

جوی استیک
جوی استیک

در این آموزش من اغلب از کلمه "روش" استفاده می کنم. یک روش در پایتون تا حدودی شبیه یک تابع است ، با این تفاوت که با شی/کلاس مرتبط است. بنابراین ، برای ساده سازی ، می توانید آن را به عنوان "یک تابع در کلاس" بخوانید. در اینجا می توانید روشهای بیشتر را بخوانید.

ما حلقه اصلی را با وارد می کنیم

در حالی که بازی نیست_:

وضعیت. در داخل ما تعداد مهاجمان ، احتمال ظهور آنها و تعداد مورد نیاز برای رسیدن به سطح بعدی از دیکشنری سطوح را دریافت می کنیم. سپس حرکت متد چپ به راست را با متدهای نمونه Listen_Dir نمونه کلاس JoyStick بررسی می کنیم. اگر یکی از شرایط به عنوان True ارزیابی شود ، مقدار x را برای شخصیت قابل پخش خود افزایش یا کاهش می دهیم. با دو شرط if آن را به [-2 ، 2] محدود می کنیم. سپس یک نمونه از کلاس DisplayBuffer را راه اندازی می کنیم و فشار دکمه های "shield" یا "bullet fire" را بررسی می کنیم. ما از متد DisplayBuffer.set () برای تنظیم اشیاء برای رندرینگ بعدی استفاده می کنیم. برای ارائه سپر ما از DisplayBuffer.set () مستقیم استفاده می کنیم ، اما برای گلوله ها و مهاجمان آنها را به لیست مربوطه اضافه می کنیم و () آنها را یک به یک در حلقه با کد زیر برای رندر بعدی با 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 است. اگر Joystick را به راست حرکت دهیم:

New_X = JoyStick_X.read_analog () #New_X = 200

راست = New_X - self. Read_X #Right = 200 Left = 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'] اگر Dir == Get_Rocker: return True other: return False

مرحله 3: نمایش بافر

نمایش بافر
نمایش بافر

کلاس DisplayBuf وظیفه کنترل صفحه LED را بر عهده دارد. این کار با دو روش set () و render () انجام می شود. متد set () مقادیر مربوط به پیکسل های صفحه LED را تغییر می دهد. شاید به خاطر داشته باشید که پیکسل های روی صفحه نمایش Micro: bit LED می توانند به صورت رشته یا لیست بیان شوند - "00000: 00000: 00000: 00000: 00000" یک صفحه خالی است. "00000: 00000: 00000: 00000: 00000: 00100" صفحه ای با پیکسل کم نور در مرکز ردیف پایین است.

00000:

00000

:00000

:00000:

00100"

پردازش این نماد ممکن است ساده تر باشد:)

بنابراین ، کاری که ما در حلقه اصلی انجام می دهیم متد () set () DisplayBuf است تا همه اشیاء مورد نیاز خود را روی صفحه نمایش دهیم. سپس از متد render () برای نشان دادن همه آنها به طور همزمان در صفحه استفاده می کنیم.

مرحله 4: مهاجمان ، گلوله ها و پخش کننده

مهاجمان ، گلوله ها و پخش کننده
مهاجمان ، گلوله ها و پخش کننده

گلوله ها و مهاجمان متعلق به کلاس Mover هستند. نمونه های کلاس Mover دارای مکان x ، y و سرعت و همچنین روشنایی خود هستند. کلاس Mover دارای دو متد نمونه ، set () و move () است. متد set () به سادگی متد DisplayBuf () را با مختصات به روز شده فراخوانی می کند تا در رندر بعدی در ماتریس LED ذخیره شود. move () Method به روز رسانی نمونه را با توجه به سرعت نمونه هماهنگ می کند - این بعداً مفید خواهد بود ، هنگامی که ما نیاز به تغییر سرعت مهاجمان با پیشرفت سطح داریم.

Class Bullet و class Invader زیر کلاس های کلاس Mover هستند. در اینجا ما از چیزی به نام وراثت استفاده می کنیم. عملکرد super () به ما امکان می دهد بدون نیاز به تکرار کد ، متدهای فوق کلاس را در زیر کلاس فراخوانی کنیم.

مرحله 5: آن را متعلق به خود کنید

آن را متعلق به خود کنید
آن را متعلق به خود کنید

تبریک می گویم! شما به تازگی بازی کلاسیک Space Invaders را در Micro ایجاد کرده اید: کمی با سخت افزار بازی جذاب. البته ، می توانید کد بازی را از اینجا بهبود بخشید - به عنوان مثال ، در حال حاضر ، بازی فقط یک سطح دارد - می توانید موارد چالش برانگیزتری را اضافه کنید. همچنین ، همانطور که ممکن است به یاد بیاورید ، بازی اصلی دارای صخره هایی است که جلوی پخش کننده شناور است ، که می توانید آنها را نیز اضافه کنید.

اگر نسخه بهبود یافته بازی را ساختید ، آن را در نظرات زیر به اشتراک بگذارید! برای کسب اطلاعات بیشتر در مورد BitPlayer و سایر سخت افزارها برای سازندگان و مربیان STEM ، از وب سایت ما ، https://tinkergen.com/ دیدن کنید و در خبرنامه ما مشترک شوید.

TinkerGen اخیراً یک کمپین Kickstarter برای MARK (Make A Robot Kit) ایجاد کرده است ، یک کیت روبات برای آموزش کد نویسی ، رباتیک ، AI!

کد اصلی Micropython از hexkcd/micro-vaders ، برای کار با TinkerGen BitPlayer تغییر کرد.

توصیه شده: