متغیرها و دادهها
متغیرها و دادهها در Scratch: راهنمای کامل
Section titled “متغیرها و دادهها در Scratch: راهنمای کامل”متغیرها و مدیریت دادهها از اساسیترین مفاهیم برنامهنویسی هستند. این راهنما شما را با تمام جنبههای کار با دادهها در Scratch آشنا میکند.
درک متغیرها
Section titled “درک متغیرها”تعریف متغیر
Section titled “تعریف متغیر”متغیر مکانی در حافظه کامپیوتر است که برای ذخیره و مدیریت اطلاعات استفاده میشود. متغیرها مانند جعبههایی هستند که میتوانید در آنها مقادیر مختلف قرار دهید.
چرا متغیرها مهم هستند؟
Section titled “چرا متغیرها مهم هستند؟”۱. ذخیرهسازی اطلاعات
Section titled “۱. ذخیرهسازی اطلاعات”امتیاز بازیکنسطح فعلیتعداد جانهای باقیماندهنام کاربر
۲. ردیابی تغییرات
Section titled “۲. ردیابی تغییرات”موقعیت اسپرایتسرعت حرکتوضعیت بازیزمان باقیمانده
۳. تصمیمگیری
Section titled “۳. تصمیمگیری”اگر امتیاز > 100 → برندهاگر سلامتی < 10 → بازی تماماگر کلید فشرده شد → حرکت
۴. ارتباط بین اسپرایتها
Section titled “۴. ارتباط بین اسپرایتها”اشتراک اطلاعاتهماهنگی عملهاکنترل مرکزی
ایجاد و مدیریت متغیرها
Section titled “ایجاد و مدیریت متغیرها”۱. ایجاد متغیر جدید
Section titled “۱. ایجاد متغیر جدید”مراحل ایجاد:
Section titled “مراحل ایجاد:”1. رفتن به بخش "Variables"2. کلیک "Make a Variable"3. انتخاب نام متغیر4. انتخاب دامنه (برای همه اسپرایتها یا فقط این اسپرایت)5. تأیید ایجاد
نکات نامگذاری:
Section titled “نکات نامگذاری:”✓ نامهای توصیفی: "player_score" به جای "s"✓ استفاده از underscore: "max_speed"✓ زبان یکسان: همه فارسی یا همه انگلیسی✓ اجتناب از کلمات رزرو شده
✗ نامهای مبهم: "x", "temp", "var1"✗ استفاده از فاصله: "player score"✗ شروع با عدد: "1score"
۲. انواع دامنه متغیر
Section titled “۲. انواع دامنه متغیر”متغیرهای سراسری (For all sprites)
Section titled “متغیرهای سراسری (For all sprites)”قابل دسترسی از همه اسپرایتهامناسب برای:- امتیاز کل بازی- سطح فعلی- تنظیمات عمومی- وضعیت بازی
متغیرهای محلی (For this sprite only)
Section titled “متغیرهای محلی (For this sprite only)”فقط در اسپرایت مربوطه قابل دسترسیمناسب برای:- سلامتی شخصیت- سرعت خاص اسپرایت- وضعیت داخلی- شمارندههای خصوصی
مثال عملی:
Section titled “مثال عملی:”// متغیرهای سراسریامتیاز_کلسطح_بازیزمان_باقی_مانده
// متغیرهای محلی (برای اسپرایت بازیکن)سلامتی_بازیکنسرعت_حرکتتعداد_گلوله
// متغیرهای محلی (برای اسپرایت دشمن)سلامتی_دشمنالگوی_حرکتقدرت_حمله
عملیات پایه با متغیرها
Section titled “عملیات پایه با متغیرها”۱. تنظیم مقدار (Set)
Section titled “۱. تنظیم مقدار (Set)”تنظیم مقدار ثابت:
Section titled “تنظیم مقدار ثابت:”امتیاز را 0 قرار بدهنام_بازیکن را "علی" قرار بدهسرعت را 10 قرار بدهبازی_شروع_شده را true قرار بده
تنظیم با محاسبه:
Section titled “تنظیم با محاسبه:”امتیاز_نهایی را ((امتیاز) * (2)) قرار بدهفاصله را (sqrt of (((x1) - (x2)) * ((x1) - (x2)))) قرار بدهدرصد را (((امتیاز) / (امتیاز_کل)) * (100)) قرار بده
۲. تغییر مقدار (Change)
Section titled “۲. تغییر مقدار (Change)”افزایش/کاهش:
Section titled “افزایش/کاهش:”امتیاز را 10 تغییر بده // افزایشسلامتی را -5 تغییر بده // کاهشسرعت را 0.5 تغییر بده // افزایش اعشاریشمارنده را 1 تغییر بده // شمارش
تغییر شرطی:
Section titled “تغییر شرطی:”اگر <key up arrow pressed?> سرعت را 2 تغییر بدهپایان
اگر <touching Enemy?> سلامتی را -10 تغییر بدهپایان
۳. نمایش متغیرها
Section titled “۳. نمایش متغیرها”کنترل نمایش:
Section titled “کنترل نمایش:”امتیاز را نمایش بده // نمایش روی صحنهامتیاز را مخفی کن // حذف از صحنه
سفارشیسازی نمایش:
Section titled “سفارشیسازی نمایش:”// تغییر موقعیت نمایش// کلیک راست روی متغیر → تغییر موقعیت
// تغییر اندازه// کلیک راست → large readout / normal readout
// تغییر رنگ// از طریق ویرایشگر ظاهر
انواع دادهها
Section titled “انواع دادهها”۱. اعداد (Numbers)
Section titled “۱. اعداد (Numbers)”اعداد صحیح:
Section titled “اعداد صحیح:”امتیاز: 100تعداد_جان: 3سطح: 1تعداد_سکه: 25
اعداد اعشاری:
Section titled “اعداد اعشاری:”سرعت: 5.5زمان: 12.34درصد: 85.7موقعیت_x: 123.45
اعداد منفی:
Section titled “اعداد منفی:”جهت: -90تغییر_y: -5دما: -10
۲. متن (Text/String)
Section titled “۲. متن (Text/String)”رشتههای ساده:
Section titled “رشتههای ساده:”نام: "احمد"پیام: "سلام!"وضعیت: "در حال بازی"
رشتههای ترکیبی:
Section titled “رشتههای ترکیبی:”پیام_کامل: join ["امتیاز شما: "] [امتیاز]اطلاعات: join [نام] [" در سطح "] [سطح]
۳. مقادیر بولی (Boolean)
Section titled “۳. مقادیر بولی (Boolean)”استفاده غیرمستقیم:
Section titled “استفاده غیرمستقیم:”// Scratch مقادیر بولی مستقل ندارد// اما میتوان از اعداد استفاده کرد:
بازی_فعال را 1 قرار بده // trueبازی_فعال را 0 قرار بده // false
// یا از متن:وضعیت را "فعال" قرار بدهوضعیت را "غیرفعال" قرار بده
کاربردهای عملی
Section titled “کاربردهای عملی”۱. سیستم امتیازدهی
Section titled “۱. سیستم امتیازدهی”امتیاز ساده:
Section titled “امتیاز ساده:”وقتی پرچم سبز کلیک شدامتیاز را 0 قرار بدهامتیاز را نمایش بده
وقتی touching Starامتیاز را 10 تغییر بدهصدای ding پخش کن
امتیاز پیچیده:
Section titled “امتیاز پیچیده:”وقتی touching Coinاگر <(نوع_سکه) = ("طلا")> امتیاز را 50 تغییر بدهوگرنه اگر <(نوع_سکه) = ("نقره")> امتیاز را 20 تغییر بده وگرنه امتیاز را 10 تغییر بده پایانپایان
سیستم ضریب:
Section titled “سیستم ضریب:”وقتی touching PowerUpضریب را 2 قرار بده10 ثانیه صبر کنضریب را 1 قرار بده
// هنگام کسب امتیازامتیاز را ((10) * (ضریب)) تغییر بده
۲. مدیریت ویژگیهای شخصیت
Section titled “۲. مدیریت ویژگیهای شخصیت”سیستم سلامتی:
Section titled “سیستم سلامتی:”وقتی پرچم سبز کلیک شدسلامتی را 100 قرار بدهحداکثر_سلامتی را 100 قرار بده
وقتی touching Enemyسلامتی را -20 تغییر بدهاگر <(سلامتی) < (1)> "بازی تمام شد!" بگو همه را متوقف کنپایان
سیستم انرژی:
Section titled “سیستم انرژی:”وقتی کلید space فشرده شداگر <(انرژی) > (10)> // پرش y را 50 تغییر بده انرژی را -10 تغییر بدهپایان
// بازیابی انرژیهمیشه اگر <(انرژی) < (100)> انرژی را 1 تغییر بده پایان 1 ثانیه صبر کنپایان
سیستم تجربه:
Section titled “سیستم تجربه:”وقتی touching Enemyتجربه را 5 تغییر بدهاگر <(تجربه) > ((سطح) * (100))> سطح را 1 تغییر بده "سطح بالا رفت!" بگو تجربه را 0 قرار بدهپایان
۳. تعامل با کاربر
Section titled “۳. تعامل با کاربر”دریافت ورودی:
Section titled “دریافت ورودی:”نام را ask ["نام شما چیست؟"] and wait قرار بدهjoin ["سلام "] [نام] بگو
سن را ask ["چند سال دارید؟"] and wait قرار بدهاگر <(سن) > (18)> "خوش آمدید!" بگووگرنه "سلام کودک عزیز!" بگوپایان
منوی انتخاب:
Section titled “منوی انتخاب:”انتخاب را ask ["1: شروع بازی، 2: تنظیمات، 3: خروج"] and wait قرار بده
اگر <(انتخاب) = ("1")> پیام [شروع_بازی] ارسال کنوگرنه اگر <(انتخاب) = ("2")> پیام [نمایش_تنظیمات] ارسال کن وگرنه اگر <(انتخاب) = ("3")> همه را متوقف کن پایان پایانپایان
۴. کنترل رفتار پویا
Section titled “۴. کنترل رفتار پویا”تغییر سرعت:
Section titled “تغییر سرعت:”وقتی پرچم سبز کلیک شدسرعت_پایه را 5 قرار بده
همیشه // محاسبه سرعت بر اساس سطح سرعت_فعلی را ((سرعت_پایه) + ((سطح) * (2))) قرار بده (سرعت_فعلی) قدم حرکت کنپایان
تغییر رفتار دشمن:
Section titled “تغییر رفتار دشمن:”وقتی پرچم سبز کلیک شدالگوی_حرکت را pick random 1 to 3 قرار بده
همیشه اگر <(الگوی_حرکت) = (1)> // حرکت مستقیم 10 قدم حرکت کن وگرنه اگر <(الگوی_حرکت) = (2)> // حرکت زیگزاگی 10 قدم حرکت کن 15 درجه راست بچرخ وگرنه // حرکت تصادفی pick random 5 to 15 قدم حرکت کن pick random -45 to 45 درجه بچرخ پایان پایانپایان
کار با لیستها
Section titled “کار با لیستها”۱. ایجاد لیست
Section titled “۱. ایجاد لیست”مراحل ایجاد:
Section titled “مراحل ایجاد:”1. رفتن به بخش "Variables"2. کلیک "Make a List"3. انتخاب نام لیست4. انتخاب دامنه5. تأیید ایجاد
انواع لیست:
Section titled “انواع لیست:”لیست اعداد: [10, 20, 30, 40]لیست متن: ["سیب", "موز", "پرتقال"]لیست ترکیبی: ["علی", 25, "تهران", true]
۲. عملیات پایه لیست
Section titled “۲. عملیات پایه لیست”اضافه کردن عنصر:
Section titled “اضافه کردن عنصر:”"سیب" را به [میوهها] اضافه کن(امتیاز) را به [امتیازها] اضافه کن
حذف عنصر:
Section titled “حذف عنصر:”عنصر 1 از [میوهها] را حذف کنعنصر last از [امتیازها] را حذف کنعنصر all از [لیست_موقت] را حذف کن
جایگزینی عنصر:
Section titled “جایگزینی عنصر:”عنصر 1 از [میوهها] را "انگور" قرار بدهعنصر (شماره) از [امتیازها] را (مقدار_جدید) قرار بده
دسترسی به عنصر:
Section titled “دسترسی به عنصر:”item 1 of [میوهها] // اولین عنصرitem last of [امتیازها] // آخرین عنصرitem (شماره) of [لیست] // عنصر خاص
۳. کاربردهای لیست
Section titled “۳. کاربردهای لیست”ذخیره امتیازات:
Section titled “ذخیره امتیازات:”وقتی پرچم سبز کلیک شدعنصر all از [بهترین_امتیازها] را حذف کن
// هنگام پایان بازیاگر <(امتیاز) > (item 1 of [بهترین_امتیازها])> عنصر 1 از [بهترین_امتیازها] را (امتیاز) قرار بدهپایان
مدیریت موجودی:
Section titled “مدیریت موجودی:”// اضافه کردن آیتموقتی touching Sword"شمشیر" را به [موجودی] اضافه کن
// استفاده از آیتموقتی کلید i فشرده شداگر <[موجودی] contains ["شمشیر"]> قدرت_حمله را 20 تغییر بده "شمشیر" را از [موجودی] حذف کنپایان
سوالات چندگزینهای:
Section titled “سوالات چندگزینهای:”وقتی پرچم سبز کلیک شدعنصر all از [سوالات] را حذف کن"پایتخت ایران کجاست؟" را به [سوالات] اضافه کن"2+2 چند است؟" را به [سوالات] اضافه کن
سوال_فعلی را item (pick random 1 to (length of [سوالات])) of [سوالات] قرار بده(سوال_فعلی) را ask and wait
تکنیکهای پیشرفته
Section titled “تکنیکهای پیشرفته”۱. متغیرهای محلی در مقابل سراسری
Section titled “۱. متغیرهای محلی در مقابل سراسری”استراتژی انتخاب:
Section titled “استراتژی انتخاب:”// سراسری: اطلاعات مشترکامتیاز_کلسطح_بازیتنظیمات
// محلی: اطلاعات خصوصیسلامتی_شخصیتموقعیت_داخلیوضعیت_انیمیشن
مثال عملی:
Section titled “مثال عملی:”// اسپرایت بازیکنوقتی پرچم سبز کلیک شدسلامتی_من را 100 قرار بده // محلی
وقتی touching Enemyسلامتی_من را -10 تغییر بدهاگر <(سلامتی_من) < (1)> جان_های_باقی را -1 تغییر بده // سراسریپایان
۲. ارتباط بین اسپرایتها
Section titled “۲. ارتباط بین اسپرایتها”استفاده از متغیرهای سراسری:
Section titled “استفاده از متغیرهای سراسری:”// اسپرایت کنترلکنندهوقتی پرچم سبز کلیک شدوضعیت_بازی را "شروع" قرار بده
// اسپرایت بازیکنهمیشه اگر <(وضعیت_بازی) = ("شروع")> // منطق بازی وگرنه اگر <(وضعیت_بازی) = ("توقف")> // توقف حرکت پایان پایانپایان
استفاده از پیامها:
Section titled “استفاده از پیامها:”// اسپرایت Aوقتی touching Sprite Bامتیاز_مشترک را 10 تغییر بدهپیام [امتیاز_تغییر_کرد] ارسال کن
// اسپرایت Bوقتی پیام [امتیاز_تغییر_کرد] دریافت شد// بهروزرسانی نمایشjoin ["امتیاز: "] [امتیاز_مشترک] بگو
۳. بهینهسازی عملکرد
Section titled “۳. بهینهسازی عملکرد”کاهش محاسبات:
Section titled “کاهش محاسبات:”// بد: محاسبه مکررهمیشه اگر <((x position) * (x position)) > (10000)> // عمل پایانپایان
// خوب: محاسبه یکبارهمیشه فاصله_مربع را ((x position) * (x position)) قرار بده اگر <(فاصله_مربع) > (10000)> // عمل پایانپایان
استفاده از متغیرهای کش:
Section titled “استفاده از متغیرهای کش:”وقتی پرچم سبز کلیک شد// محاسبه مقادیر ثابتنصف_عرض را ((480) / (2)) قرار بدهنصف_ارتفاع را ((360) / (2)) قرار بده
همیشه اگر <(x position) > (نصف_عرض)> // خارج از صحنه پایانپایان
۴. الگوهای طراحی
Section titled “۴. الگوهای طراحی”ماشین حالت:
Section titled “ماشین حالت:”وقتی پرچم سبز کلیک شدحالت را "منتظر" قرار بده
همیشه اگر <(حالت) = ("منتظر")> // منطق انتظار اگر <key space pressed?> حالت را "بازی" قرار بده پایان وگرنه اگر <(حالت) = ("بازی")> // منطق بازی اگر <(سلامتی) < (1)> حالت را "تمام" قرار بده پایان وگرنه // منطق پایان پایان پایانپایان
شمارنده زمان:
Section titled “شمارنده زمان:”وقتی پرچم سبز کلیک شدزمان_شروع را (timer) قرار بده
همیشه زمان_سپری_شده را ((timer) - (زمان_شروع)) قرار بده اگر <(زمان_سپری_شده) > (60)> "زمان تمام شد!" بگو همه را متوقف کن پایانپایان
مشکلات رایج و راهحلها
Section titled “مشکلات رایج و راهحلها”۱. متغیر تغییر نمیکند
Section titled “۱. متغیر تغییر نمیکند”علتهای احتمالی:
Section titled “علتهای احتمالی:”✗ متغیر تعریف نشده✗ دامنه اشتباه (محلی/سراسری)✗ منطق شرط غلط✗ اسپرایت اشتباه
راهحلها:
Section titled “راهحلها:”✓ بررسی وجود متغیر✓ تأیید دامنه مناسب✓ تست منطق با say blocks✓ بررسی اسپرایت فعال
۲. مقادیر غیرمنتظره
Section titled “۲. مقادیر غیرمنتظره”علتها:
Section titled “علتها:”✗ تداخل نام متغیرها✗ تغییر همزمان از چند مکان✗ عدم مقداردهی اولیه
راهحلها:
Section titled “راهحلها:”✓ نامگذاری منحصربهفرد✓ کنترل نقاط تغییر✓ مقداردهی در شروع
۳. مشکلات لیست
Section titled “۳. مشکلات لیست”خطاهای رایج:
Section titled “خطاهای رایج:”✗ دسترسی به ایندکس نامعتبر✗ لیست خالی✗ نوع داده اشتباه
پیشگیری:
Section titled “پیشگیری:”✓ بررسی طول لیستاگر <(length of [لیست]) > (0)> // دسترسی به عناصرپایان
✓ اعتبارسنجی ایندکساگر <(شماره) > (0)> and <(شماره) < ((length of [لیست]) + (1))> // دسترسی امنپایان
متغیرها و مدیریت دادهها اساس هر برنامه قدرتمند در Scratch هستند. با تسلط بر:
- مفاهیم پایه: تعریف، انواع، دامنه
- عملیات اساسی: تنظیم، تغییر، نمایش
- کاربردهای عملی: امتیازدهی، تعامل، کنترل
- لیستها: ذخیرهسازی مجموعه دادهها
- تکنیکهای پیشرفته: بهینهسازی، الگوهای طراحی
شما میتوانید پروژههای پیچیده و تعاملی بسازید که اطلاعات را به طور هوشمند مدیریت کنند.
آمادهاید تا با قدرت دادهها، برنامههای شگفتانگیز بسازید؟ 📊✨