آدرس دهی متغیر نمونه های دیگر
آدرس دهی متغیر نمونه های دیگر
همانطور که قبلا توضیح دادیم شما می توانید متغیرهای نمونه کنونی را با استفاده از دستور زیر تنظیم کنید.
اما در بعضی موارد شما می خواهید به آدرس یک متغیر در نمونه دیگری رجوع کنید. به عنوان مثال شما می خواهید که حرکت تمامی توپ ها را متوقف کنید ، یا می خواهید کاراکتر اصلی را به مکان خواصی حرکت دهید ، یا می خواهید که اسپرایت آبجکت دیگر را در حالت برخورد با آن تغییر دهید. این اعمال بوسیله استفاده از نام آبجکت و نقطه و پس از نام متغیر قابل دستیابی است. به عنوان مثال شما می توانید بنویسید :
این کد سرعت تمامی نمونه های آبجکت توپ را تغییر می دهد. تعدادی آبجکت خاص بصورت زیر نیز وجود دارد :
• self : نمونه کنونی که در حال اجرای دستورات است.
• other : نمونه دیگری که در رویداد برخورد درگیر شده است.
• all : تمامی نمونه ها
• noone : هیچ نمونه ای را شامل نمی شود. ( شاید عجیب به نظر برسد اما بعدا کاربرد آن را یاد خواهید گرفت )
• global : هیچ نمونه را شامل نمی شود ، اما نگهدارنده متغیرهای global است.
بنابراین به عنوان مثال شما می توانید از دستوراتی مانند زیر استفاده کنید :
کد:
other.sprite_index = sprite5;
all.speed = 0;
global.message = 'A good result';
global.x = ball.x
ممکنست که شما از انتساب آخر متعجب شده باشید چون ممکنست توپ های بسیاری در بازی وجود داشته باشد. خوب در واقع مختصات x اولین آنها گرفته می شود و به متغیر global نسبت داده می شود
ساختار شرطي ها و حلقه هاي تكرار
ساختار if
ساختار if شرطی بصورت زیر می باشد :
کد:
if (<expression>) <statement>
یا
if (<expression>) <statement> else <statement>
statement در ساختار فوق می تواند شامل یک بلوک کامل کد باشد. در این ساختار شرط expression تست می شود اگر برابر با false (0) بود آنگاه دستورات بعد از else اجرا می شود در غیر اینصورت دستوارت بعد از شرط اجرا می شوند. بهتر است همیشه از گذاشتن دستورات در داخل براکت در ساختار if استفاده کنید.
کد:
if (<expression>)
{
<statement>
}
else
{
<statement>
}
مثال :
برنامه زیر مکان آبچکت را به مرکز صفحه تغییر می دهد.
کد:
{
if (x<200) {x += 4} else {x -= 4};
}
ساختار Repeat
ساختار repeat یا تکرار به شکل زیر است .
کد:
repeat (<expression>) <statement>
دستورات بعد از repeat به تعداد باری که در expression ذکر شده است تکرار می شود.
مثال :
برنامه زیر پنج توپ را در مکانهای تصادفی ایجاد می کند.
کد:
{
repeat (5) instance_create(random(400),random(400),ball);
}
ساختار While
ساختار While نوعی دیگر از تکرار است که بصورت شرطی می باشد و دارای ساختار زیر است.
کد:
while (<expression>) <statement>
تا هنگامی که مقدار expression برابر true باشد ، دستوراتی بعد از آن ( که می تواند یک بلوک کامل باشد ) اجرا می شود. مراقب حلقه های تکرار while باشید این حلقه ها براحتی می توانند برای همیشه ادامه پیدا کنند که در این حالت بازی هنگ می کند و نسبت به اعمال کاربر واکنش نشان نمی دهد.
مثال
برنامه زیر آبجکت فعلی را در یک مکان باز وخالی قرار می دهد ( این عمل مانند واکنشی است که آبجکت را به مکان تصادفی می برد).
کد:
{
while (!place_free(x,y))
{
x = random(room_width);
y = random(room_height);
}
}
ساختار Do
ساختار do به شکل زیر است.
کد:
do <statement> until(<expression>)
دستورات بعد از do هنگامی که expression صحیح باشد اجرا می شود. این دستورات حداقل یکبار تکرار می شوند زیرا شرط آن در آخر تست می شود. در این نوع حلقه نیز شما می توانید براحتی یک حلقه بینهایت را ایجاد کنید و باعث از کار افتادن بازی و واکنش نسبت به اعمال کاربر شوید.
مثال :
کد زیر آبجکت فعلی را در یک مکان باز وخالی قرار می دهد.
کد:
{
do
{
x = random(room_width);
y = random(room_height);
}
until (place_free(x,y))
}
ساختار For
ساختار for به شکل زیر است :
کد:
for (<statement1> ; <expression> ;<statement2>) <statement3>
این ساختار بدین شکل کار می کند که دستور اول اجرا می شود و پس از آن expression محاسبه می شود. اگر مقدار آن true بود statement3 اجرا میشود ، سپس statement2 و سپس expression دوباره اجرا می شود. این حلقه تا هنگامی که expression اشتباه شود ادامه می یابد.
مثال :
کد زیر یک آرایه با طول 10 را با مقادیر 1 تا 10 پر می کند.
کد:
{
for (i=0; i<=9; i+=1) list[i] = i+1;
}
ساختار Switch :
در بعضی مواقع شما می خواهید که واکنش شما بسته به مقدار خاصی احرا شود. شما می توانید این عمل را با استفاده از ساختار if انجام دهید اما استفاده از ساختار switch برای این عمل ساده تر است. ساختار switch به شکل زیر است :
کد:
switch (<expression>)
{
case <expression1>: <statement1>; ... ; break;
case <expression2>: <statement2>; ... ; break;
...
default: <statement>; ...
}
این کد بدین شکل کار می کند که expression اجرا می شود سپس نتیجه آن با مقادیر متفاوت پس از دستورات case مقایسه می شود.اولین دستور case که مقدارش با مقدار بالا یکی شود اجرا می شود تا وقتی که به دستور break می رسد. اگر هیچ کدام از مقادیر case با مقدار بالا یکی نبود دستورات پس از default اجرا می شود.دقت نمایید که دستور break الزامی نیست و اگر این دستور وجود نداشته باشد اجرا تا دستور case بعدی اجرا می یابد.
مثال
کد زیر بسته به کلیدی که فشرده می شود عمل می کند.
کد:
switch (keyboard_key)
{
case vk_left:
case vk_numpad4:
x -= 4; break;
case vk_right:
case vk_numpad6:
x += 4; break;
}