رفتن به محتوا

متغیرها و داده‌ها

متغیرها و داده‌ها در Scratch: راهنمای کامل

Section titled “متغیرها و داده‌ها در Scratch: راهنمای کامل”

متغیرها و مدیریت داده‌ها از اساسی‌ترین مفاهیم برنامه‌نویسی هستند. این راهنما شما را با تمام جنبه‌های کار با داده‌ها در Scratch آشنا می‌کند.

متغیر مکانی در حافظه کامپیوتر است که برای ذخیره و مدیریت اطلاعات استفاده می‌شود. متغیرها مانند جعبه‌هایی هستند که می‌توانید در آن‌ها مقادیر مختلف قرار دهید.

امتیاز بازیکن
سطح فعلی
تعداد جان‌های باقی‌مانده
نام کاربر
موقعیت اسپرایت
سرعت حرکت
وضعیت بازی
زمان باقی‌مانده
اگر امتیاز > 100 → برنده
اگر سلامتی < 10 → بازی تمام
اگر کلید فشرده شد → حرکت

۴. ارتباط بین اسپرایت‌ها

Section titled “۴. ارتباط بین اسپرایت‌ها”
اشتراک اطلاعات
هماهنگی عمل‌ها
کنترل مرکزی
1. رفتن به بخش "Variables"
2. کلیک "Make a Variable"
3. انتخاب نام متغیر
4. انتخاب دامنه (برای همه اسپرایت‌ها یا فقط این اسپرایت)
5. تأیید ایجاد
✓ نام‌های توصیفی: "player_score" به جای "s"
✓ استفاده از underscore: "max_speed"
✓ زبان یکسان: همه فارسی یا همه انگلیسی
✓ اجتناب از کلمات رزرو شده
✗ نام‌های مبهم: "x", "temp", "var1"
✗ استفاده از فاصله: "player score"
✗ شروع با عدد: "1score"

متغیرهای سراسری (For all sprites)

Section titled “متغیرهای سراسری (For all sprites)”
قابل دسترسی از همه اسپرایت‌ها
مناسب برای:
- امتیاز کل بازی
- سطح فعلی
- تنظیمات عمومی
- وضعیت بازی

متغیرهای محلی (For this sprite only)

Section titled “متغیرهای محلی (For this sprite only)”
فقط در اسپرایت مربوطه قابل دسترسی
مناسب برای:
- سلامتی شخصیت
- سرعت خاص اسپرایت
- وضعیت داخلی
- شمارنده‌های خصوصی
// متغیرهای سراسری
امتیاز_کل
سطح_بازی
زمان_باقی_مانده
// متغیرهای محلی (برای اسپرایت بازیکن)
سلامتی_بازیکن
سرعت_حرکت
تعداد_گلوله
// متغیرهای محلی (برای اسپرایت دشمن)
سلامتی_دشمن
الگوی_حرکت
قدرت_حمله
امتیاز را 0 قرار بده
نام_بازیکن را "علی" قرار بده
سرعت را 10 قرار بده
بازی_شروع_شده را true قرار بده
امتیاز_نهایی را ((امتیاز) * (2)) قرار بده
فاصله را (sqrt of (((x1) - (x2)) * ((x1) - (x2)))) قرار بده
درصد را (((امتیاز) / (امتیاز_کل)) * (100)) قرار بده
امتیاز را 10 تغییر بده // افزایش
سلامتی را -5 تغییر بده // کاهش
سرعت را 0.5 تغییر بده // افزایش اعشاری
شمارنده را 1 تغییر بده // شمارش
اگر <key up arrow pressed?>
سرعت را 2 تغییر بده
پایان
اگر <touching Enemy?>
سلامتی را -10 تغییر بده
پایان
امتیاز را نمایش بده // نمایش روی صحنه
امتیاز را مخفی کن // حذف از صحنه
// تغییر موقعیت نمایش
// کلیک راست روی متغیر → تغییر موقعیت
// تغییر اندازه
// کلیک راست → large readout / normal readout
// تغییر رنگ
// از طریق ویرایشگر ظاهر
امتیاز: 100
تعداد_جان: 3
سطح: 1
تعداد_سکه: 25
سرعت: 5.5
زمان: 12.34
درصد: 85.7
موقعیت_x: 123.45
جهت: -90
تغییر_y: -5
دما: -10
نام: "احمد"
پیام: "سلام!"
وضعیت: "در حال بازی"
پیام_کامل: join ["امتیاز شما: "] [امتیاز]
اطلاعات: join [نام] [" در سطح "] [سطح]
// Scratch مقادیر بولی مستقل ندارد
// اما می‌توان از اعداد استفاده کرد:
بازی_فعال را 1 قرار بده // true
بازی_فعال را 0 قرار بده // false
// یا از متن:
وضعیت را "فعال" قرار بده
وضعیت را "غیرفعال" قرار بده
وقتی پرچم سبز کلیک شد
امتیاز را 0 قرار بده
امتیاز را نمایش بده
وقتی touching Star
امتیاز را 10 تغییر بده
صدای ding پخش کن
وقتی touching Coin
اگر <(نوع_سکه) = ("طلا")>
امتیاز را 50 تغییر بده
وگرنه
اگر <(نوع_سکه) = ("نقره")>
امتیاز را 20 تغییر بده
وگرنه
امتیاز را 10 تغییر بده
پایان
پایان
وقتی touching PowerUp
ضریب را 2 قرار بده
10 ثانیه صبر کن
ضریب را 1 قرار بده
// هنگام کسب امتیاز
امتیاز را ((10) * (ضریب)) تغییر بده

۲. مدیریت ویژگی‌های شخصیت

Section titled “۲. مدیریت ویژگی‌های شخصیت”
وقتی پرچم سبز کلیک شد
سلامتی را 100 قرار بده
حداکثر_سلامتی را 100 قرار بده
وقتی touching Enemy
سلامتی را -20 تغییر بده
اگر <(سلامتی) < (1)>
"بازی تمام شد!" بگو
همه را متوقف کن
پایان
وقتی کلید space فشرده شد
اگر <(انرژی) > (10)>
// پرش
y را 50 تغییر بده
انرژی را -10 تغییر بده
پایان
// بازیابی انرژی
همیشه
اگر <(انرژی) < (100)>
انرژی را 1 تغییر بده
پایان
1 ثانیه صبر کن
پایان
وقتی touching Enemy
تجربه را 5 تغییر بده
اگر <(تجربه) > ((سطح) * (100))>
سطح را 1 تغییر بده
"سطح بالا رفت!" بگو
تجربه را 0 قرار بده
پایان
نام را ask ["نام شما چیست؟"] and wait قرار بده
join ["سلام "] [نام] بگو
سن را ask ["چند سال دارید؟"] and wait قرار بده
اگر <(سن) > (18)>
"خوش آمدید!" بگو
وگرنه
"سلام کودک عزیز!" بگو
پایان
انتخاب را ask ["1: شروع بازی، 2: تنظیمات، 3: خروج"] and wait قرار بده
اگر <(انتخاب) = ("1")>
پیام [شروع_بازی] ارسال کن
وگرنه
اگر <(انتخاب) = ("2")>
پیام [نمایش_تنظیمات] ارسال کن
وگرنه
اگر <(انتخاب) = ("3")>
همه را متوقف کن
پایان
پایان
پایان
وقتی پرچم سبز کلیک شد
سرعت_پایه را 5 قرار بده
همیشه
// محاسبه سرعت بر اساس سطح
سرعت_فعلی را ((سرعت_پایه) + ((سطح) * (2))) قرار بده
(سرعت_فعلی) قدم حرکت کن
پایان
وقتی پرچم سبز کلیک شد
الگوی_حرکت را pick random 1 to 3 قرار بده
همیشه
اگر <(الگوی_حرکت) = (1)>
// حرکت مستقیم
10 قدم حرکت کن
وگرنه
اگر <(الگوی_حرکت) = (2)>
// حرکت زیگزاگی
10 قدم حرکت کن
15 درجه راست بچرخ
وگرنه
// حرکت تصادفی
pick random 5 to 15 قدم حرکت کن
pick random -45 to 45 درجه بچرخ
پایان
پایان
پایان
1. رفتن به بخش "Variables"
2. کلیک "Make a List"
3. انتخاب نام لیست
4. انتخاب دامنه
5. تأیید ایجاد
لیست اعداد: [10, 20, 30, 40]
لیست متن: ["سیب", "موز", "پرتقال"]
لیست ترکیبی: ["علی", 25, "تهران", true]
"سیب" را به [میوه‌ها] اضافه کن
(امتیاز) را به [امتیازها] اضافه کن
عنصر 1 از [میوه‌ها] را حذف کن
عنصر last از [امتیازها] را حذف کن
عنصر all از [لیست_موقت] را حذف کن
عنصر 1 از [میوه‌ها] را "انگور" قرار بده
عنصر (شماره) از [امتیازها] را (مقدار_جدید) قرار بده
item 1 of [میوه‌ها] // اولین عنصر
item last of [امتیازها] // آخرین عنصر
item (شماره) of [لیست] // عنصر خاص
وقتی پرچم سبز کلیک شد
عنصر all از [بهترین_امتیازها] را حذف کن
// هنگام پایان بازی
اگر <(امتیاز) > (item 1 of [بهترین_امتیازها])>
عنصر 1 از [بهترین_امتیازها] را (امتیاز) قرار بده
پایان
// اضافه کردن آیتم
وقتی touching Sword
"شمشیر" را به [موجودی] اضافه کن
// استفاده از آیتم
وقتی کلید i فشرده شد
اگر <[موجودی] contains ["شمشیر"]>
قدرت_حمله را 20 تغییر بده
"شمشیر" را از [موجودی] حذف کن
پایان
وقتی پرچم سبز کلیک شد
عنصر all از [سوالات] را حذف کن
"پایتخت ایران کجاست؟" را به [سوالات] اضافه کن
"2+2 چند است؟" را به [سوالات] اضافه کن
سوال_فعلی را item (pick random 1 to (length of [سوالات])) of [سوالات] قرار بده
(سوال_فعلی) را ask and wait

۱. متغیرهای محلی در مقابل سراسری

Section titled “۱. متغیرهای محلی در مقابل سراسری”
// سراسری: اطلاعات مشترک
امتیاز_کل
سطح_بازی
تنظیمات
// محلی: اطلاعات خصوصی
سلامتی_شخصیت
موقعیت_داخلی
وضعیت_انیمیشن
// اسپرایت بازیکن
وقتی پرچم سبز کلیک شد
سلامتی_من را 100 قرار بده // محلی
وقتی touching Enemy
سلامتی_من را -10 تغییر بده
اگر <(سلامتی_من) < (1)>
جان_های_باقی را -1 تغییر بده // سراسری
پایان

۲. ارتباط بین اسپرایت‌ها

Section titled “۲. ارتباط بین اسپرایت‌ها”

استفاده از متغیرهای سراسری:

Section titled “استفاده از متغیرهای سراسری:”
// اسپرایت کنترل‌کننده
وقتی پرچم سبز کلیک شد
وضعیت_بازی را "شروع" قرار بده
// اسپرایت بازیکن
همیشه
اگر <(وضعیت_بازی) = ("شروع")>
// منطق بازی
وگرنه
اگر <(وضعیت_بازی) = ("توقف")>
// توقف حرکت
پایان
پایان
پایان
// اسپرایت A
وقتی touching Sprite B
امتیاز_مشترک را 10 تغییر بده
پیام [امتیاز_تغییر_کرد] ارسال کن
// اسپرایت B
وقتی پیام [امتیاز_تغییر_کرد] دریافت شد
// به‌روزرسانی نمایش
join ["امتیاز: "] [امتیاز_مشترک] بگو
// بد: محاسبه مکرر
همیشه
اگر <((x position) * (x position)) > (10000)>
// عمل
پایان
پایان
// خوب: محاسبه یک‌بار
همیشه
فاصله_مربع را ((x position) * (x position)) قرار بده
اگر <(فاصله_مربع) > (10000)>
// عمل
پایان
پایان

استفاده از متغیرهای کش:

Section titled “استفاده از متغیرهای کش:”
وقتی پرچم سبز کلیک شد
// محاسبه مقادیر ثابت
نصف_عرض را ((480) / (2)) قرار بده
نصف_ارتفاع را ((360) / (2)) قرار بده
همیشه
اگر <(x position) > (نصف_عرض)>
// خارج از صحنه
پایان
پایان
وقتی پرچم سبز کلیک شد
حالت را "منتظر" قرار بده
همیشه
اگر <(حالت) = ("منتظر")>
// منطق انتظار
اگر <key space pressed?>
حالت را "بازی" قرار بده
پایان
وگرنه
اگر <(حالت) = ("بازی")>
// منطق بازی
اگر <(سلامتی) < (1)>
حالت را "تمام" قرار بده
پایان
وگرنه
// منطق پایان
پایان
پایان
پایان
وقتی پرچم سبز کلیک شد
زمان_شروع را (timer) قرار بده
همیشه
زمان_سپری_شده را ((timer) - (زمان_شروع)) قرار بده
اگر <(زمان_سپری_شده) > (60)>
"زمان تمام شد!" بگو
همه را متوقف کن
پایان
پایان

مشکلات رایج و راه‌حل‌ها

Section titled “مشکلات رایج و راه‌حل‌ها”
✗ متغیر تعریف نشده
✗ دامنه اشتباه (محلی/سراسری)
✗ منطق شرط غلط
✗ اسپرایت اشتباه
✓ بررسی وجود متغیر
✓ تأیید دامنه مناسب
✓ تست منطق با say blocks
✓ بررسی اسپرایت فعال
✗ تداخل نام متغیرها
✗ تغییر همزمان از چند مکان
✗ عدم مقداردهی اولیه
✓ نام‌گذاری منحصربه‌فرد
✓ کنترل نقاط تغییر
✓ مقداردهی در شروع
✗ دسترسی به ایندکس نامعتبر
✗ لیست خالی
✗ نوع داده اشتباه
✓ بررسی طول لیست
اگر <(length of [لیست]) > (0)>
// دسترسی به عناصر
پایان
✓ اعتبارسنجی ایندکس
اگر <(شماره) > (0)> and <(شماره) < ((length of [لیست]) + (1))>
// دسترسی امن
پایان

متغیرها و مدیریت داده‌ها اساس هر برنامه قدرتمند در Scratch هستند. با تسلط بر:

  • مفاهیم پایه: تعریف، انواع، دامنه
  • عملیات اساسی: تنظیم، تغییر، نمایش
  • کاربردهای عملی: امتیازدهی، تعامل، کنترل
  • لیست‌ها: ذخیره‌سازی مجموعه داده‌ها
  • تکنیک‌های پیشرفته: بهینه‌سازی، الگوهای طراحی

شما می‌توانید پروژه‌های پیچیده و تعاملی بسازید که اطلاعات را به طور هوشمند مدیریت کنند.

آماده‌اید تا با قدرت داده‌ها، برنامه‌های شگفت‌انگیز بسازید؟ 📊✨