رفتارهای پی در پی و متنوع قهرمان یا دشمن:
در بازی هواپیما و فرودگاه .
من ابتدا با تعریف یک متغیر یک فاز تعریف کردم....مثلا فاز فرود یا فاز برخواست هواپیما..
مثلا متغیر landing یا take_off که در حالت شروع بازی مقدارشون صفره... وقتی بخواد بره توی فاز مقدارش ۱ یا ۲ و ..میشه...
بعد یک متغییر را عددی بین ۵۰۰ تا ۱۵۰۰ دادم.
بعد با نوشتن یک if این جوری:
یک منطقه کد تعیین کردم.
بعدش که اون عدد را مقدار هزار دادم ، landing را ۲ کردم.
بعد در همون منطقه ایجاد شده با کد بالا ، اون عدد که مثلا اسمش run بود را یکی یکی کم کردم...
و در ایستگاههای مختلف از run یک رفتار خاصی از قهرمان یا دشمن انجام میشه... مثلا هواپیما اوج می گیره یا کارهای دیگه می کنه.
کد کلی:
JavaScript:
if ( landing>0)
{
if (landing == 1){
run = 600;
hero.elevation=0;
hero.y=322;
landing=2;
}//landing==1
if (run==540)
{
hero.y+=4;
}// run=450
if (landing == 2 && run==1) {
forod=1;
}//if end run
if (run > 0 )
{
run -= 1;
} // if run
} // if landing>0
در کد بالا ، بعد از عدد دادن به run مقدار landing برابر با ۲ میشه ، که دیگه به run عدد ندهیم..
بعدش در درون همین قسمت landing>0 یعنی داخل کروشه های landing بزرگتر از صفر ، مقدار run یکی یکی کم میشه... و با هر run اش کاری انجام میشه ، مثلا در run==400 قهرمان یک رفتار خاص انجام می دهد. که با تغییر متغیرهای قهرمان ، مثلا تغییر سرعت بالا رفتن هواپیما ، یا تغییر y هواپیما ، انجام میشه...همون متغیرهای تعریف شده در کلاس قهرمان منظور است.
در کد بالا می بینید که وقتی run به صفر می رسه ، متغیری به نام forod برابر یک میشه....یعنی از فاز landing به فاز forod می رسیم. در فاز forod اتفاقات دیگری می افتد... هواپیما از حرکت می ایستد و کارهای دیگر فاز فرود انجام می شود.
بعد یک دکمه است که بازیکن می زند، اسمش دکمه take_off است، و متغیرهای landing و forod برابر صفر میشن تا بازی به حالت عادی وارد بشه...
ولی بعدش من فاز take_off هم تعریف کردم.. و هواپیما به طور خودکار با رفتارهایی مثل همین کد landing از زمین بلند شد.... و بعد اینکه اون متغیر که در موقع برخواستن اسمش دیگه run نبود و run_take_off بود... بله ، وقتی متغیر برخواستن یکی یکی ، کم شد و به صفر رسید ، خودبخود فاز برخواستن تمام شد با صفر دادن به متغیر take_off..
در کد بالا ، چند تا رفتار متفاوت از هواپیما به طور پشت سر هم و منظم انجام شد ، در موقع فرود و در موقع برخواستن...
مثلا می توانید یک دکمه تعیین کنید که بازیکن با زدن اون یک برخواستن اتوماتیک را داشته باشه.... یا می تواند نزند و خودش بلند شود.
در بالا خواستم چگونگی تعریف کردن یک فاز در بازی با چند متغیر را بگویم.هواپیمای بازی من با این کدها رفتارهای فرود و برخواستن اتوماتیک داشت. یک سکویی بود ، وقتی بازیکن هواپیما را با اون سکو برخورد می داد ، فاز فرود شروع میشد، یعنی در موقع برخورد هواپیما با اون شی خاص روی فرودگاه ، متغیر landing برابر ۱ میشد و می رفت توی فاز فرود.... (یک دردسری هایی قبلش داشتم، چون بعد برخورد به اون سکوی خاص هواپیما باز برخورد با همون سکو داشت یا با چیزهای دیگه برخود داشت و برنامه هنگ می کرد...چون فکر کنم برخورد مکرر ایجاد میشد، پس تعریف فاز نشستن یک باید و اجبار بود برام اون موقع.... ولی میشد مسیرهای دیگری برای مدیریت برخورد رفت ولی من مسیر ایجاد خلبان اتوماتیک را این بار رفتم)
اگر فاز فرود وجود نداشت ، بازیکن باید خودش فرود می آمد ، که بازی من امکانات چنین کاری نداشت ، ،مثلا کاهش قدرت موتور ، ترمز ، باله های کمکی هواپیما... و شاید بازیکن حوصله انجام چنین مراحلی را نداشت... و با تعیین فاز فرود با دو تا متغییر ، خلبان خودکار ساخته شد.
لینک بازی اینه:
و در بازی ، متغیر run و run_take_off هم روی صفحه چاپ میشه و کاهش اون از مثلا ۱۰۰۰ به صفر را می تونید روی صفحه ببینید...
و من با نگاه به اون عدد و نگاه به وضعیت هواپیما ، تصمیم گرفتم که در هر عدد run چه کاری انجام بشه.. مثلا در موقع برخواست گفتم اول کمی روی باند فرودگاه راه برود ، بعد مختصری ارتفاه بگیره. مثلا از run برابر ۵۰۰ تا run برابر ۲۰۰ در حالت ارتفاع کم روی باند بود...
یعنی خودتون عدد متغییر run. را روی صفحه می بینید و تصمیم می گیرید در کدام شماره از run کدام رفتار هواپیما انجام شود.
من می خواستم هواپیما موقع برخواست در قسمتی از فاز برخواست بدنه اش رو به بالا باشد.. ولی کدش را آماده نداشتم ، کد چرخش شکل را آماده نداشتم. میشه برای قهرمان که اینجا هواپیما است رفتارهای مختلف ساخت و در فازهای مختلف ازشون استفاده کرد.
من در فازهای landing و take_off کلیدهای بازیکن را از کار انداختم تا اخلال در کار نکند..این جوری:
JavaScript:
function accelerate(n) {
if (landing==0 && take_off==0){
hero.elevation = n;
if(n==0)
{
hero.elevation = 0;
// hero. = 0;
}//n==0
}//landing ==0
} //accelerate
یعنی گفتم وقتی در فاز نشستن یا برخواست است ، کلیدهای کاربر کار نکند... تابع accelerate مسئول دریافت از کلیدهای برنامه است.
ولی فکر کنم بشه فازهایی را تعریف کرد که کلیدهای کاربر از کار نیافته..
یعنی اتوپایلوت(خلبان اتوماتیک) ، به شکل کمکی در کنار خلبان کار کند... مثلا خلبان با زدن دکمه ای فاز خط را فعال می کند ، و وقتی موشک دشمن به سمت هواپیما می آید ، اتوپایلوت جاخالی می دهد...یعنی ارتفاع هواپیما را مقداری کن یا زیاد می کند تا موشک به هواپیما نخورد. البته کدش را کار نکردم ، فقط فعلا همکاری خلبان اتوماتیک با خلبان زنده در حد بحث است.
در این پست خواستم با if و استفاده از متغیرها به عنوان نشانه آشنا بشوید.
متغیرهای مورد نیاز در فایل اصلی برنامه در کف اسکریپت تعریف میشه.... کف اسکریپت یعنی داخل تابعی نیست...تا تمام توابع بتونن ازش استفاده کنن ، مثل این است چیزی را بزاریم توی پارکینگ آپارتمان تا تمام ساکنین طبقات بتونن بردارن.تعریف متغیرها در فایل اصلی:
JavaScript:
var landing=0;
var forod=0;
var run=0;
var take_off=0;
var run_take_off=0;