💧 دستورهای روبی

حسگر آب در روبی: «جلوی من آب است؟»

ربات روبی نمی‌تواند شنا کند. حسگر آب کمک می‌کند قبل از رسیدن به آب، راه دیگری انتخاب کند یا از رویش بپرد.

حسگر آب چه کار می‌کند؟

frontIsWater فقط وقتی بله است که خانه‌ی جلوی روبی داخل نقشه و از نوع آب باشد. بیرون از نقشه برای این حسگر آب نیست و جواب خیر می‌دهد. leftIsWater و rightIsWater همین را برای خانه‌ی سمت چپ و راست روبی می‌پرسند.

اگر روبی بدون بررسی به آب برسد و جلو برود، حرکت نمی‌کند و پیام «جلویت آبه! ربات نمی‌تونه توی آب بره.» نشان داده می‌شود و برنامه ادامه پیدا می‌کند. حسگر دیوار آب را مانع نمی‌داند، پس برای آب باید همین حسگر را پرسید.

شکل بلوکی و شکل کد

حسگر آب در حالت کد استفاده می‌شود و در فهرست کوتاه بلوک‌ها نیست. در بلوک‌ها، جلو_باز آب را هم بسته حساب می‌کند.

  • ✅ جلو: frontIsWater، front_is_water، water_ahead، جلو_آب
  • ✅ چپ: leftIsWater، water_left، چپ_آب
  • ✅ راست: rightIsWater، water_right، راست_آب

یک مثال کوچک با ربات روبی

در مسیری که گاهی یک خانه‌ی آب دارد، این برنامه روبی را رد می‌کند: repeat(6): و داخلش if frontIsWater: jump، else: forward. هر جا جلوی روبی آب باشد، از رویش می‌پرد، به شرطی که خانه‌ی بعد از آب خشک باشد.

اگر آب پهن‌تر از یک خانه باشد، پرش ممکن نیست و روبی باید با چرخش و چند قدم از کنار آب دور بزند؛ مثلا if frontIsWater: right و بعد دستورهای دور زدن. ترکیب حسگر آب با حسگر دیوار و جلو_باز به روبی اجازه می‌دهد برای هر نوع مانع واکنش جداگانه داشته باشد.

اشتباه‌های رایج

آب و دیوار دو حسگر جدا دارند و این برای کودکان تازه‌کار عجیب است.

  • ✅ استفاده از frontIsWall برای تشخیص آب
  • ✅ انتظار اینکه لبه‌ی نقشه آب حساب شود
  • ✅ پریدن روی آبی که دو خانه پهنا دارد

در کدام درس‌ها و لیگ‌ها استفاده می‌شود؟

مفهوم آب از درس ۴ «از روی آب نرو» وارد می‌شود؛ جایی که کودک یاد می‌گیرد مسیر دیگری پیدا کند. حسگر آب بعدا در رده‌ی ۳ کنار حسگرهای دیوار در درس ۱۶ و درس ۱۷ معرفی می‌شود.

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

از کودک بخواهید فهرست کند روبی از چه چیزهایی نمی‌تواند رد شود و برای هر کدام کدام حسگر را باید بپرسد. این طبقه‌بندی ساده، دقت در خواندن محیط را تقویت می‌کند.

سوال‌های پرتکرار

آیا frontIsWall آب را تشخیص می‌دهد؟

نه. برای آب از frontIsWater یا جلو_آب استفاده کنید.

روبی می‌تواند از روی آب بپرد؟

بله، با دستور بپر، اگر آب فقط یک خانه باشد و خانه‌ی فرود خشک باشد.

بیرون نقشه برای حسگر آب چیست؟

آب حساب نمی‌شود و جواب خیر است.