حسگر هدف در روبی: «رسیدم؟»
مهمترین پرسش هر ماموریت: «رسیدم یا نه؟». حسگر onTarget جواب این پرسش را به ربات روبی میدهد.
حسگر هدف چه کار میکند؟
onTarget وقتی بله است که خانهای که روبی روی آن ایستاده، خانهی هدف باشد. این حسگر به جهت روبی کاری ندارد و فقط خانهی زیر پا را نگاه میکند.
برای دیدن هدف در خانهی کناری هم سه حسگر جهتدار هست: frontIsTarget، leftIsTarget و rightIsTarget. اینها وقتی بلهاند که خانهی جلو، چپ یا راست روبی داخل نقشه و خانهی هدف باشد.
با frontIsTarget میتوان یک قدم زودتر تصمیم گرفت؛ مثلا اگر هدف جلوی روبی است، دیگر لازم نیست بپیچد. ترکیب onTarget برای پایان حلقه و frontIsTarget برای انتخاب جهت، الگوریتمهای کوتاه و هوشمندی میسازد.
شکل بلوکی و شکل کد
حسگر هدف در حالت کد نوشته میشود؛ فهرست کوتاه بلوکها روی حسگرهای مانع، باز، نشونه و رنگ تمرکز دارد. مثل بقیهی حسگرها، بزرگی و کوچکی حروف و خط زیر مهم نیست.
- ✅ زیر پا: onTarget، on_target، روی_هدف
- ✅ جلو: frontIsTarget
- ✅ چپ و راست: leftIsTarget و rightIsTarget
یک مثال کوچک با ربات روبی
برنامهی معروف درس ۱۸: while not onTarget: forward. روبی تا وقتی روی هدف نیست جلو میرود. به فارسی: تا_وقتی نه روی_هدف: جلو. اگر راه پیچ داشته باشد، داخل همین حلقه یک if frontIsWall: right اضافه کنید تا روبی خودش بپیچد.
اشتباههای رایج
اگر هدف در راستای حرکت روبی نباشد، حلقهی سادهی while not onTarget به دیوار میرسد. روبی در این حالت چند بار به دیوار میخورد و حلقه آرام تمام میشود، بدون اینکه به هدف رسیده باشد.
- ✅ فراموش کردن not و تمام شدن فوری حلقه
- ✅ انتظار اینکه onTarget هدف جلو را ببیند
- ✅ نبودن چرخش در حلقه برای مسیرهای پیچدار
در کدام درسها و لیگها استفاده میشود؟
onTarget حسگر اصلی درس ۱۸ «تا وقتی برس» است و در درس ۲۱ «هزارتو» شرط پایان الگوریتم حل هزارتو میشود.
نکته برای والدین و معلم
از کودک بخواهید برنامهی «تا وقتی نرسیدی، برو» را برای یک کار واقعی بگوید؛ مثل «تا وقتی به ایستگاه نرسیدی، پیاده نشو». وقتی شرط پایان را به زبان خودش بگوید، نوشتن while آسان میشود. بعد جای هدف را روی همان راهرو عوض کنید تا ببیند برنامهاش بدون هیچ تغییری باز هم درست کار میکند.
سوالهای پرتکرار
onTarget به فارسی چه نوشته میشود؟
روی_هدف؛ مثلا تا_وقتی نه روی_هدف: جلو.
آیا onTarget هدف جلو را میبیند؟
نه. برای خانهی جلو از frontIsTarget استفاده کنید.
چرا حلقه قبل از رسیدن به هدف تمام شد؟
احتمالا روبی به دیوار رسیده و دیگر حرکتی ممکن نبوده؛ چرخش یا شرط دیوار را اضافه کنید.