راهنمای mblock
- ۱. mBlock چیست؟
- ۲. mBlock چه کاربردی دارد و چه چیزهایی با آن یاد میگیریم؟
- ۳. شروع کار با mBlock؛ روش پیشنهادی
- ۴. خطاهای منطقی در کدنویسی و بازیسازی
- ۵. اتصال دستگاه و اجرای Live / Upload
- ۶. خطاهای برنامهنویسی، بازیسازی و اتصال در mBlock
- چکلیست سریع خطایابی برنامه و بازی
- ۷. پرسشهای متداول برنامهنویسی و بازیسازی در mBlock
- جمعبندی
خانه ‹ وبلاگ ‹ برنامهنویسی ‹ راهنمای mBlock و حل خطاهای رایج
راهنمای کامل mBlock؛ برنامهنویسی، بازیسازی و حل خطاهای رایج
mBlock یک محیط آموزشی برای یادگیری برنامهنویسی بلوکی است که هنرجو در آن میتواند با مفاهیمی مثل رویداد، شرط، حلقه، متغیر، پیام، مختصات و برخورد کار کند و بازیها و پروژههای تعاملی بسازد. در این مقاله علاوه بر معرفی محیط mBlock، تمرکز اصلی روی خطاهای واقعی هنگام کدنویسی و بازیسازی است؛ یعنی مشکلاتی که حتی بدون اتصال هیچ بردی هم ممکن است در پروژه رخ دهند.
اگر کاراکتر حرکت نمیکند، امتیاز درست افزایش پیدا نمیکند، جان بازی کم نمیشود، برخورد تشخیص داده نمیشود، پیامها به Sprite درست نمیرسند، بازی بعد از Game Over دوباره شروع نمیشود یا چند Script همزمان با هم تداخل دارند، این راهنما برای پیدا کردن علت و حل مرحلهبهمرحله همین مشکلات طراحی شده است.
راهنمای آموزشی سیگما • مناسب هنرجویان برنامهنویسی و والدین
۱. mBlock چیست؟
mBlock محیطی برای آموزش برنامهنویسی بلوکی است. در این روش، به جای تایپ کردن همه دستورات، بلوکهایی با شکل و رنگ مشخص کنار هم قرار میگیرند و هر بلوک یک دستور یا مفهوم برنامهنویسی را نمایش میدهد. این روش باعث میشود هنرجو در شروع بیشتر روی منطق حل مسئله تمرکز کند؛ مثلاً چه زمانی برنامه شروع شود، چه شرطی بررسی شود، چه چیزی تکرار شود و چه متغیری تغییر کند.
mBlock فقط برای ساخت انیمیشن نیست. هنرجو میتواند با Spriteها و Stage پروژه تعاملی بسازد، پیام بین کاراکترها ارسال کند، امتیاز و زمان ایجاد کند، از شرط و حلقه استفاده کند و در پروژههای سختافزاری نیز با دستگاههای پشتیبانیشده ارتباط برقرار کند. mBlock همچنین امکان کدنویسی متنی/Python را در بخشهایی از پلتفرم فراهم میکند.
بخشهای مهم محیط mBlock
یک برنامه mBlock چگونه اجرا میشود؟
بیشتر پروژهها از یک رویداد شروع آغاز میشوند؛ برای مثال «وقتی پرچم سبز کلیک شد». بعد از آن دستورها از بالا به پایین اجرا میشوند، مگر اینکه از حلقه، شرط، پیام یا چند Script همزمان استفاده شده باشد. اگر برنامه هیچ رویداد شروعی نداشته باشد، ممکن است بلوکها کاملاً درست چیده شده باشند اما با اجرای پروژه هیچ اتفاقی نیفتد.
۲. mBlock چه کاربردی دارد و چه چیزهایی با آن یاد میگیریم؟
mBlock برای آموزش مفاهیم پایه برنامهنویسی بسیار مناسب است، چون نتیجه کد سریع دیده میشود. هنرجو میتواند از پروژههای کوتاه شروع کند و بعد کمکم چند مفهوم را در یک پروژه ترکیب کند.
- حرکت و مختصات: جابهجایی Sprite و کار با x و y.
- رویدادها: اجرای برنامه با پرچم سبز، کلیک، کلید کیبورد یا دریافت پیام.
- شرطها: تصمیمگیری با if و if/else.
- حلقهها: تکرار دستورها با repeat، forever و حالتهای مشابه.
- متغیرها: ساخت امتیاز، زمان، جان، سرعت و وضعیت.
- Broadcast: ارتباط بین چند Sprite و هماهنگ کردن بخشهای پروژه.
- بازی و انیمیشن: برخورد، امتیاز، مرحله، کنترل کاراکتر و تعامل با کاربر.
- اتصال سختافزار: در دستگاههای پشتیبانیشده، اجرای پروژه به شکل Live یا Upload.
در آموزش برنامهنویسی، مهمترین هدف این نیست که هنرجو فقط جای بلوکها را حفظ کند. باید بتواند مسئله را به چند مرحله کوچک تقسیم کند، نتیجه هر مرحله را تست کند و وقتی خروجی اشتباه است، دلیل آن را از روی رفتار برنامه پیدا کند.
۳. شروع کار با mBlock؛ روش پیشنهادی
برای شروع یک پروژه جدید بهتر است همیشه یک روال مشخص داشته باشیم. این کار باعث میشود وقتی پروژه پیچیدهتر شد، هنرجو بداند هر قسمت کجا ساخته شده و برای پیدا کردن خطا از کدام مرحله شروع کند.
قبل از نوشتن کد مطمئن شوید روی Sprite یا Stage درست قرار دارید؛ کد هر Sprite مستقل است.
مثلاً «وقتی پرچم سبز کلیک شد» تا مشخص باشد برنامه از کجا آغاز میشود.
حرکت، شرط یا متغیر را جداگانه آزمایش کنید و بعد بخش بعدی را اضافه کنید.
بعد از هر مرحله مهم یک نسخه سالم داشته باشید تا در صورت خراب شدن پروژه بتوانید برگردید.
چطور خطای منطقی را سریعتر پیدا کنیم؟
اگر برنامه اجرا میشود ولی نتیجه اشتباه است، معمولاً با یک خطای منطقی روبهرو هستیم. مقادیر متغیرها را روی Stage نمایش دهید، چند دستور را موقتاً حذف کنید و شرطها را یکییکی تست کنید. اگر پروژه چند Sprite دارد، هر Sprite را جداگانه بررسی کنید و با Broadcastها مشخص کنید پیام واقعاً ارسال و دریافت میشود یا نه.
روش عیبیابی: 1) فقط یک بخش را اجرا کن 2) نتیجه را مشاهده کن 3) متغیرها را بررسی کن 4) شرط را ساده کن 5) بخش بعدی را اضافه کن هر بار فقط یک تغییر.
۴. خطاهای منطقی در کدنویسی و بازیسازی
در mBlock خیلی از خطاها هیچ پیام قرمزی ندارند؛ برنامه اجرا میشود ولی نتیجه همان چیزی نیست که انتظار داریم. این نوع مشکل را خطای منطقی مینامیم. در بازیسازی این خطاها بیشتر دیده میشوند چون همزمان حرکت، امتیاز، جان، برخورد، زمان، پیامها و چند Sprite با یکدیگر درگیر هستند.
مثالهای رایج در بازی
کاراکتر با یک بار فشردن کلید چند خانه میپرد، امتیاز خیلی سریع زیاد میشود، دشمن بعد از مخفی شدن دوباره ظاهر نمیشود، برخورد فقط بعضی وقتها تشخیص داده میشود، Game Over چند بار اجرا میشود یا مرحله جدید بدون Reset شدن متغیرها شروع میشود. این مشکلات معمولاً از ترتیب بلوکها، حلقهها، Broadcastها، متغیرها یا اجرای همزمان چند Script به وجود میآیند.
۵. اتصال دستگاه و اجرای Live / Upload
اگر در mBlock با سختافزار کار میکنید، علاوه بر کد باید اتصال دستگاه هم درست باشد. در Live Mode برنامه هنگام تست به ارتباط رایانه و دستگاه وابسته است؛ در Upload Mode برنامه روی دستگاه منتقل میشود و در دستگاههای پشتیبانیشده میتواند پس از جدا شدن نیز اجرا شود.
اگر پورت یا دستگاه دیده نشد
ابتدا مدل دستگاه و کابل USB را بررسی کنید. کابل باید قابلیت انتقال داده داشته باشد، نه فقط شارژ. سپس پورت USB دیگری را امتحان کنید. اگر دستگاه از مبدل CH340 استفاده میکند، درایور آن باید درست نصب باشد. همچنین اجرای چند تب mBlock یا باز بودن نرمافزار دیگری که همان COM را گرفته است میتواند اتصال را مختل کند.
۶. خطاهای برنامهنویسی، بازیسازی و اتصال در mBlock
این بخش مهمترین قسمت مقاله است. ابتدا خطاهای کدنویسی و بازیسازی بدون برد را بررسی میکنیم و بعد به مشکلات اتصال سختافزار میرسیم. برای پیدا کردن خطا، هر بار فقط یک بخش را تغییر دهید و نتیجه را دوباره تست کنید.
بررسی کنید Script با یک Event شروع شده باشد و روی Sprite درست قرار داشته باشد. اگر دستورها داخل شرط هستند، شرط را موقتاً حذف کنید تا مطمئن شوید اصل Script اجرا میشود.
اول Show و Go to x:0 y:0 را تست کنید. بعد ببینید بلوک حرکت واقعاً در Script اجراشونده قرار دارد یا نه. اگر حرکت داخل if است، شرط را جدا تست کنید.
مختصات x و y را بررسی کنید. برای بازیهایی که کاراکتر نباید خارج شود، شرط مرزی بگذارید یا بعد از خروج، مختصات را به محدوده مجاز برگردانید.
اگر بلوک key pressed داخل Forever است، در هر فریم اجرا میشود. مقدار حرکت را کمتر کنید یا با Wait کوتاه، سرعت را کنترل کنید. روش بهتر این است که سرعت را با یک متغیر مدیریت کنید.
وقتی شرط فشرده بودن کلید داخل Forever است، تا زمانی که کلید نگه داشته شده چند بار اجرا میشود. برای عمل یکباره میتوانید بعد از اجرا منتظر رها شدن کلید بمانید یا از Event مناسب استفاده کنید.
برای پرش فقط تغییر y کافی نیست. باید بالا رفتن، پایین آمدن و وضعیت زمین مدیریت شود. متغیری مثل velocityY یا jumping کمک میکند پرش منطقیتر شود.
اگر سرعت تغییر y زیاد باشد، Sprite ممکن است در یک فریم از بالای زمین به پایین آن برسد. سرعت سقوط را کمتر کنید یا برخورد را در هر مرحله کوچک حرکت بررسی کنید.
بررسی برخورد باید داخل حلقهای باشد که مرتب اجرا میشود. اگر Sprite خیلی سریع حرکت میکند، برخورد ممکن است بین دو فریم از دست برود. سرعت را کمتر یا حرکت را مرحلهای کنید.
لبه شفاف Costume، اندازه Sprite و شکل واقعی تصویر میتواند روی برخورد اثر بگذارد. Costume را بررسی کنید و در صورت نیاز از Sprite یا ناحیه برخورد سادهتر استفاده کنید.
رنگ انتخابشده باید دقیق باشد. تغییر پسزمینه، افکت گرافیکی یا رنگ نزدیک میتواند نتیجه را عوض کند. رنگ را دوباره با ابزار انتخاب رنگ تعیین کنید و افکتهای ظاهری را هنگام تست خاموش کنید.
افزایش Score احتمالاً داخل Forever و شرط Touching قرار دارد؛ تا زمانی که دو Sprite روی هم هستند، امتیاز چند بار زیاد میشود. بعد از ثبت امتیاز Sprite را جابهجا کنید، مخفی کنید یا تا پایان تماس صبر کنید.
در Event شروع بازی، متغیر Score را روی صفر قرار دهید. اگر Reset در Script دیگری است که اجرا نمیشود، مقدار قبلی باقی میماند.
مثل Score، شرط برخورد در چند فریم پشت سر هم True میماند. بعد از کم کردن Life یک زمان مصونیت کوتاه، تغییر مکان یا Wait until not touching اضافه کنید.
اگر شرط Life <= 0 داخل Forever باشد، بعد از صفر شدن جان دائماً True میماند. بعد از Game Over از Stop مناسب استفاده کنید یا یک متغیر gameState تعریف کنید تا Game Over فقط یک بار اجرا شود.
در شروع مجدد باید متغیرها، وضعیت Spriteها، مختصات، Costume، Visibility و gameState دوباره مقداردهی شوند. فقط Reset کردن Score کافی نیست.
مشخص کنید کدام متغیر باید بین مراحل حفظ شود و کدام باید Reset شود. Resetهای مربوط به Stage را در یک Broadcast مثل Start Level قرار دهید تا همه Spriteها همزمان آماده شوند.
نام پیام فرستنده و گیرنده را دقیقاً مقایسه کنید. سپس داخل گیرنده یک Say یا تغییر ظاهر موقت بگذارید تا مطمئن شوید پیام دریافت میشود.
ممکن است پیام از چند Script مختلف ارسال شود یا گیرنده چند Script با همان Event داشته باشد. محل همه Broadcastها را بررسی کنید و برای پیامهای مهم یک منبع مشخص تعریف کنید.
این وضعیت باعث نتایج غیرقابل پیشبینی میشود. مشخص کنید مسئول تغییر هر متغیر کدام Sprite یا Script است. برای متغیرهای حساس یک Script مرکزی بهتر است.
بررسی کنید متغیر برای همه Spriteها ساخته شده یا فقط مخصوص همان Sprite است. متغیر محلی و عمومی را با هم اشتباه نگیرید.
ورودیها را بررسی کنید. اگر یک مقدار به شکل متن ذخیره شده باشد یا فضای اضافی داشته باشد، مقایسه ممکن است مطابق انتظار نباشد. مقدار متغیر را روی Stage نمایش دهید.
مقدار واقعی متغیر را قبل از شرط بررسی کنید. اگر شرط ترکیبی با AND/OR دارید، آن را به چند شرط سادهتر تقسیم کنید تا مشخص شود کدام بخش اشتباه است.
شرط خروج از حلقه برقرار نمیشود یا متغیری که باید تغییر کند داخل حلقه تغییر نمیکند. مقدار شرط را هنگام اجرا نمایش دهید.
اگر دستورها در همان Script بعد از Forever قرار گرفتهاند، هرگز به آنها نمیرسد. دستورهای بعدی را در Script جدا یا قبل از Forever قرار دهید.
Wait کل همان Script را متوقف میکند. اگر زمان انتظار زیاد باشد، پاسخ آن Sprite دیر میشود. برای بعضی سیستمها بهتر است از Timer یا منطق حالت به جای Waitهای طولانی استفاده کنید.
Reset Timer را دقیقاً در لحظه شروع مرحله یا بازی اجرا کنید. اگر چند Script آن را Reset کنند، زمان دائماً از نو شروع میشود.
Show را در نقطهای قرار دهید که هنگام شروع یا Spawn دوباره اجرا شود. اگر Script دشمن بعد از Hide با Stop تمام شده باشد، ممکن است دستور Show هیچوقت اجرا نشود.
کد مربوط به Clone باید زیر Event مخصوص شروع Clone قرار بگیرد. همچنین متغیرهای مشترک و محلی را بررسی کنید؛ همه Cloneها نباید ناخواسته از یک وضعیت مشترک استفاده کنند.
برای Cloneهایی که از صفحه خارج شدهاند یا دیگر لازم نیستند، Delete This Clone را اجرا کنید. ساخت Clone بدون حذف آنها به مرور پروژه را سنگین میکند.
از دستورات لایهها مثل Go to Front/Back استفاده کنید. اگر چند Sprite دائماً لایه را تغییر دهند، نتیجه ممکن است مدام عوض شود.
سرعت تغییر Costume و ترتیب آنها را بررسی کنید. اگر Next Costume داخل Forever بدون Wait باشد، انیمیشن بیش از حد سریع دیده میشود.
Rotation Style و Direction را بررسی کنید. برای کاراکترهای چپ/راست معمولاً Left-Right مناسبتر از All Around است.
مطمئن شوید فایل واقعاً به پروژه اضافه شده و نام آن تغییر نکرده است. اگر از Asset خاصی استفاده شده، آن را دوباره Import و در بلوک مربوط انتخاب کنید.
اگر Play Sound داخل Forever یا برخورد دائمی باشد، صدا مرتب شروع میشود. از Play Sound Until Done، Wait یا یک متغیر وضعیت برای جلوگیری از تکرار استفاده کنید.
اگر چند شرط key pressed روی یک متغیر یا جهت اثر دارند، ترتیب آنها را بررسی کنید. برای حرکت مورب یا همزمان، منطق هر محور را جدا کنید.
بازه Random را بررسی کنید و مطمئن شوید دو سر بازه مناسب هستند. اگر عدد تصادفی برای انتخاب Costume یا مرحله استفاده میشود، تعداد واقعی گزینهها را با بازه مقایسه کنید.
تعداد Cloneها، Foreverهای زیاد، Broadcastهای پیدرپی و افکتهای گرافیکی را بررسی کنید. Scriptهای غیرضروری را حذف و Cloneها را مدیریت کنید.
ممکن است چند Script با Green Flag یک متغیر یا موقعیت را همزمان تغییر دهند. Resetها را در یک Script یا Broadcast مرکزی جمع کنید.
نوع Stop را بررسی کنید. Stop All همه Scriptها را میبندد؛ در بعضی بازیها باید فقط This Script یا Other Scripts in Sprite متوقف شود.
این یکی از رایجترین خطاهای آموزشی است. قبل از ویرایش، نام Sprite انتخابشده را بررسی کنید. اگر کد کاراکتر اصلی روی دشمن نوشته شده باشد، ظاهر بلوکها درست است ولی رفتار پروژه اشتباه میشود.
در مراحل مهم پروژه نسخه جدا ذخیره کنید. قبل از تغییر بزرگ یک Copy داشته باشید تا در صورت خراب شدن منطق بتوانید به نسخه سالم برگردید.
کابل Data، پورت USB و Device Manager را بررسی کنید. بعضی کابلها فقط شارژ میکنند. اگر دستگاه مبتنی بر CH340 است و درایور نصب نیست، درایور مناسب را نصب و mBlock را دوباره باز کنید.
ممکن است پورت توسط برنامه دیگری اشغال شده باشد. نسخه وب و دسکتاپ mBlock یا نرمافزار Serial دیگر را همزمان باز نگذارید و دوباره اتصال را امتحان کنید.
از Chrome یا Edge بهروز استفاده کنید، مجوز دسترسی به پورت را تأیید کنید و فقط یک تب mBlock را برای اتصال باز نگه دارید.
Device، COM، کابل و Firmware را بررسی کنید. ابتدا یک پروژه بسیار ساده Upload کنید تا مشخص شود مشکل از پروژه است یا اتصال.
این رفتار میتواند طبیعی باشد؛ Live Mode به ارتباط زنده با رایانه وابسته است. برای اجرای مستقل، در دستگاههای پشتیبانیشده از Upload Mode استفاده کنید.
مطمئن شوید Upload موفق شده و دستگاه/پورت درست انتخاب شده است. یک تغییر واضح ایجاد کنید و دوباره Upload کنید.
چکلیست سریع خطایابی برنامه و بازی
۷. پرسشهای متداول برنامهنویسی و بازیسازی در mBlock
چون بسیاری از مشکلات mBlock خطای منطقی هستند، نه Syntax Error. برنامه اجرا میشود اما ترتیب بلوکها، شرطها یا متغیرها اشتباه است.
پروژه را به بخشهای کوچک تقسیم کنید؛ حرکت، برخورد، امتیاز، جان و پیامها را جدا تست کنید و هر بار فقط یک تغییر انجام دهید.
چون شرط Touching در چند فریم پشت سر هم True میماند. بعد از ثبت امتیاز تماس را قطع کنید یا تا پایان تماس صبر کنید.
برخورد در حلقه چند بار تشخیص داده میشود. پس از کم شدن جان، زمان مصونیت کوتاه یا Wait until not touching قرار دهید.
یک متغیر gameState بسیار مفید است. وقتی جان به صفر رسید، gameState را روی GameOver قرار دهید و Scriptهای اصلی را بر اساس همین وضعیت کنترل کنید.
نام پیام، Sprite گیرنده و Event دریافت پیام را بررسی کنید. برای تست، گیرنده را وادار کنید چند ثانیه Say نمایش دهد.
برای هر مرحله یک Broadcast شروع داشته باشید و Resetهای همان مرحله را در یک نقطه مشخص انجام دهید. متغیر gameState یا level هم کمک زیادی میکند.
Cloneهایی که دیگر لازم نیستند باید حذف شوند. اگر داخل Forever دائماً Clone میسازید، تعداد آنها سریع زیاد میشود.
متغیر عمومی بین همه Spriteها مشترک است؛ متغیر محلی مخصوص همان Sprite است. انتخاب اشتباه نوع متغیر میتواند باعث رفتار عجیب در بازی شود.
اگر حرکت به تعداد اجرای حلقه وابسته باشد، سرعت سیستم میتواند روی حس حرکت اثر بگذارد. از سرعت کنترلشده، Wait مناسب یا منطق زمانبندی استفاده کنید.
خیر. هر Sprite مسئول رفتار خودش باشد و برای هماهنگی از Broadcast و متغیرهای مشخص استفاده کنید. این کار عیبیابی را خیلی سادهتر میکند.
معمولاً نه. اول آخرین تغییر را برگردانید و بخشها را جدا تست کنید. داشتن نسخههای ذخیرهشده از مراحل سالم پروژه بسیار کمککننده است.
جمعبندی
در mBlock بخش بزرگی از خطاهای واقعی هنرجوها اصلاً به برد و اتصال مربوط نیست؛ بلکه از منطق بازی، Eventها، شرطها، حلقهها، متغیرها، برخورد، Broadcast و Cloneها ایجاد میشود. یاد گرفتن روش پیدا کردن همین خطاها، بخش مهمی از آموزش برنامهنویسی است.
اگر پروژه کار نکرد، آن را پاک نکنید. بخش مشکلدار را کوچک کنید، متغیرها را نمایش دهید، Spriteها را یکییکی تست کنید و هر بار فقط یک تغییر انجام دهید. وقتی این روش تبدیل به عادت شود، هنرجو میتواند حتی پروژههای بازیسازی بزرگتر را هم با منطق مشخص عیبیابی کند.
mBlock
برنامهنویسی بلوکی
خطای برنامهنویسی
COM Port
CH340
Live / Upload