برنامه نویسی بازی فلپی برد برای دانش آموزان
ربیکو امروز تصمیم گرفته تا با دوستانش در یک مسابقه بازی سازی دانش آموزی شرکت کند. او بعد از اینکه با دوستانش مشورت کرد به این نتیجه رسیدند تا یک بازی بامزه به نام فلپی برد را در آی کد بسازند.
در طراحی هر بازی مرحله اول طرح صورت مساله است. برای این کار،به پرسش هایی مثل زیر پاسخ می دهند:
- در این بازی چه اتفاقی می افتد؟
- چه اشیائی در بازی داریم؟
- شخصیت اصلی بازی چه چیزی یا کسی است؟
- چه رویدادهایی در بازی اتفاق می افتد؟
- در ازای اتفاق افتادن هر رویداد چه کاری باید انجام بگیرد؟
- آیا بازی مرحله ای است؟
- بازی چند مرحله دارد؟
- اشیاء هر کدام چند حالت دارند؟
- شیوه کسب امتیاز در بازی چگونه است؟
- نقطه شروع بازی کجاست؟
- نقطه پایان بازی کجاست؟
- برد و باخت بازی چه زمانی یا در چه شرایطی اتفاق می افتد؟
- آیا بازی دارای زمان محدود است؟
- محیط گرافیکی بازی چگونه است؟
- آیا بازیکن (شخصیت اصلی) موانعی بر سر راه خود دارد؟
- در چه شرایطی بازیکن به مرحله بعدی می رود؟
- آیا بازی درجه سختی دارد؟
- درجه سختی به چه روشی در بازی اعمال می شود؟
- آیا بازیکن چند جان دارد؟
- تعداد جان در ابتدای بازی چه تعداد است؟
- با چه رویدادهایی جان بازیکن افزایش پیدا می کند؟
- با چه رویدادهایی جان بازیکن کاهش پیدا می کند؟
غیر از این پرسش ها شاید بتوان پرسش های دیگری را نیز لیست کرد. این شیوه یعنی طرح پرسش های مختلف درباره یک موضوع یک شیوه فکر کردن است که در دنیای تفکر به آن روش سقراطی می گویند.
روش سقراطی یعنی طرح سوالات برای جستجو در یک موضوع برای شفاف تر کردن مساله و فهم دقیق تر موضوعات مختلف به کار می رود. هر چقدر پرسش ها دقیق تر و جزئی تر باشند، مساله برای ما شفاف تر می شود.
طرح سوال در مرحله اول طراحی یک بازی (برنامه) کمک می کند تا داده ها لیست شوند و از دست نروند. در واقع ما با طرح پرسش همه داده های مورد نیاز را روی کاغذ می آوریم تا فراموش نکنیم.
اما حالا یک مساله با کلی سوال پیش روی ماست. چطور با این پرسش های زیاد مساله را برای خودمان بنویسیم؟
حالا نوبت به پاسخ دادن و معلوم کردن مساله می رسد. در بازی فلپی برد:
- یک بازی تکرار شونده از تشخیص موانع است. بازیکن باید از بین موانع به درستی عبور کند و به آن ها برخورد نکند.
- اشیاء داخل بازی :
- شخصیت اصلی (بازیکن) ، پرنده
- موانع، لوله های تکرار شونده
- دکمه شروع بازی
- پیام برد بازی
- پیام باخت بازی
- علامت جان و به تعداد جان های بازی
- پیام رفتن به مرحله بعد بازی
- دکمه توقف موقت بازی
- دکمه شروع مجدد بازی
- پس زمینه مرحله های بازی
- پرنده، دارای چند پوسته مختلف در حالات مختلف پرواز
- شروع، پرواز پرنده، حرکت پرنده (در حین بازی)، برد یا باخت (پایان بازی)
- رویدادها:
- زدن دکمه شروع: شروع بازی: پرنده در حالت آماده به حرکت بال بزند ولی نیفتد، تا زمانی که کاربر دکمه فاصله کیبورد را بفشارد و اقدام به شروع کند.
- در حین بازی پرنده دائماً بین پوسته های مختلف پرواز تغییر کند تا حالت پرواز ایجاد شود.
- برخورد به مانع لوله، پرنده به حالت پوسته سرگیجه تغییر کند و پیام باخت نمایش داده شود. از دست دادن یک جان به ازای هر برخورد تا زمانی که جان تمام شود.
- عدم برخورد به لوله: ادامه بازی تا رسیدن به امتیاز مورد نظر مرحله
- رسیدن به امتیاز مورد نظر هر مرحله: نمایش پیام برد، تغییر پوسته به مرحله بعدی، تبدیل امتیاز ها به جان و …
- سقوط پرنده: شروع مجدد از نقطه ابتدایی مرحله و از دست دادن یکی از جان ها.
- می تواند مرحله ای باشد. در شکل ساده می تواند فقط امتیازی باشد و تک مرحله ای باشد.
- می تواند به دلخواه از 1 تا چند مرحله داشته باشد.
- همه اشیاء غیر از بازیکن، یک حالت دارند. می توانند به دلخواه چند حالته شوند. مثلا لوله ها در مرحله بعدی خاردار شوند. بازیکن در مرحله بعدی تغییر چهره دهد و … .
- با عبور از بین هر یک جفت لوله، یک امتیاز داخل متغیر ذخیره می شود. با هر برخورد به لوله می تواند کسر امتیاز داشته باشد یا از تعداد جان ها کسر شود و بازی از ابتدا شروع شود.
- نقطه شروع بازی زمانی است که کاربر دکمه شروع را کلیک می کند. در این وضعیت پرنده به حالت آماده حرکت در می آید و منتظر کاربر می ماند تا کلید فاصله را بفشارد. در صورتی که بلافاصله بازی شروع شود احتما سقوط پرنده خیلی بالا رفته و کنترل حرکت توسط بازیکن سخت می شود. به همین دلیل شرایط شروع بازی را اینطور طراحی کردیم. از نظر گرافیکی و منطقی نیز زیباتر و کارآمدتر به نظر می رسد.
- پایان بازی زمانی اتفاق می افتد که بازیکن همه جان ها را از دست بدهد یا پرنده سقوط کند یا به مانع برخورد کند. این بستگی به خواست ما از بازی دارد. در ساده ترین حالت برخورد به لوله می تواند منجر به باخت و پایان بازی شود. ضمناً کسب حدنصاب امتیاز تعیین شده می تواند منجر به برد و پایان بازی شود.
- در پرسش قبل بطور مفصل پاسخ داده شد. برد: کسب امتیاز کافی. باخت: سقوط یا برخورد به لوله پرنده. این در ساده ترین حالت بازی است.
- می تواند زمان دار هم باشد. در این صورت شرط خروج از محدوده زمانی باعث باخت می شود. یا می تواند ثبت رکورد زمانی داشته باشد. در این صورت فقط رکورد ثبت می شود و برد و باخت به زمان ربطی ندارد. یعنی هر کاربر یا هر بار بازی با چه رکورد زمانی صاحب امتیاز کافی می شود.
- محیط گرافیکی شامل مناظری است که در پس زمینه بازی می تواند ثبت یا متحرک باشد. در شکل ساده می تواند فقط یک پس زمینه و ثابت باشد.
- بله این موانع در ساده ترین شکل می تواند لوله ها باشد. در حالت های سخت تر می تواند موانع دیگری اضافه شود یا می تواند شامل جایزه یا غذا باشد که با خوردن آن به تعداد جان اضافه شود.
- کسب میزان معینی از امتیاز یا عبور از همه موانع هر مرحله.
- می تواند درجه سختی با تغییر هر مرحله تغییر کند. درجه سختی می تواند با تغییر سرعت بازی یا فواصل مانع های لوله ای در ابتدای بازی قابل تنظیم باشد. درجه سختی می تواند با محدودیت زمانی هم قابل کنترل باشد، یعنی کاربر مجبور باشد در زمان کوتاه تری امتیاز لازم را کسب کند.
- در پرسش قبلی پاسخ داده شد.
- می تواند یک یا چند جان داشته باشد.
- مقدار دلخواه است. داشتن بین 3 تا 5 قلب در ابتدای بازی رایج تر است.
- می تواند با خوردن یک مجموعه جایزه در مسیر بازی باشد؛ مثل سکه، غذای پرنده و …. می تواند با کسب یک مقدار معین از امتیاز باشد. مثلاً هر 10 امتیاز معادل یک جان باشد. می تواند با کسب حدنصاب امتیاز هر مرحله یک جان کسب کند. البته حداکثر جان ها مشخص است و بیشتر از مثلاً 5 جان نمی تواند شود. در صورت از دست دادن جان می تواند جایگزین شود.
- با برخورد به لوله ها، سقوط پرنده، باخت بازی. هر یک از موارد می تواند با توجه به خواست برنامه نویس یا تولید کننده بازی انتخاب شود.
بسیار خوب. تا اینجا ما با پاسخ به پرسش ها همه حالت های ممکن یا استراتژی های احتمالی بازی را گردآوری کردیم. حالا نوبت به پیاده سازی است. پس قبل از برنامه نویسی باید در بین حجم زیادی از اطلاعات و راه های ممکن ساده ترین راه ها و شکل بازی را انتخاب کنیم. در حین برنامه نویسی هم باید سعی کنیم بازی را به گونه ای طراحی کنیم که به راحتی قابل تغییر و ارتقاء باشد.
حالا من از بین همه اطلاعات، راه حل ها، قابلیت ها و مشخصات بازی ساده ترین ها را انتخاب می کنم و مساله کلی بازی را طرح می کنم.
صورت مساله اصلی برنامه نویسی بازی فلپی برد به ساده ترین شکل ممکن:
یک پرنده شخصیت اصلی بازی فلپی برد است. این پرنده باید یک مسیر معین را در طول بازی پرواز کند و سقوط نکند. ضمن اینکه از بین موانع لوله ای شکل جفتی عبور کند بی آنکه به آن لوله ها برخورد کند. پس از عبور از بین هر جفت لوله یک امتیاز کسب می کند. بازی تک مرحله ای است و جان در بازی وجود ندارد. اگر بازیکن بتواند 10 امتیاز کسب کند یعنی با موفقت و بدون برخورد از بین 10 جفت لوله بدون سقوط عبور کند بازی را می برد. در صورت برد پیام برد نمایش داده شده و بازی تمام می شود. در صورت سقوط پرنده یا برخورد به اولین لوله بازیکن می بازد و پیام باخت ظاهر می شود. سپس بازی پایان می یابد.
پرنده دارای 5 پوسته است که پرواز پرنده را شبیه سازی می کند. یک پوسته نیز مربوط به وضعیت سقوط پرنده یا برخورد به لوله است.
حالا نوبت به این رسید که درباره حالت اشیاء داخل بازی صحبت کنیم. یعنی به این فکر کنیم که هر شیء چه وضعیت هایی در بازی دارد؟
اشیاء ما در بازی که در پرسش اول لیست کردیم در ساده ترین شکل بازی:
- شخصیت اصلی (بازیکن) ، پرنده
- موانع، لوله های تکرار شونده
- دکمه شروع بازی
- پیام برد بازی
- پیام باخت بازی
- پس زمینه
پرنده:
- بال زدن
- توقف
- در حین بازی
- برخورد به لوله
- سقوط (خوردن به زمین بازی)
پس زمینه:
- همراه در حال نمایش ثابت
دکمه شروع بازی (عملگر/محرک بازی):
- کلیک شده/شروع بازی
- توقف/غیرفعال/کلیک نشده/پایان بازی
لوله:
- توقف/پایان بازی/قبل از شروع
- حرکت کردن و جایگیری تصادفی/در حین بازی
پیام برد:
- پنهان/شروع و در حین بازی
- نمایان/کسب حدنصاب امتیاز/بردن بازی
پیام باخت:
- پنهان/شروع و در حین بازی
- نمایان/سقوط پرنده/برخورد به لوله
زمین:
- همواره وجود دارد و مختصات مشخصی دارد
این برنامه چطور کار می کند؟
بخش اول بلوک ها همانطور که در توضیحات برنامه نوشته شده مربوط به حالت انتظار یا آماده باش پرنده در ابتدای بازی است. در این وضعیت دکمه شروع بازی کلیک شده اما هنوز کاربر(بازیکن) کلید فاصله را فشار نداده است. در بلوک ابتدایی موقعیت اولیه پرنده را در پنل مشخص می کنیم. این موقعیت به دلخواه است. معمولاً حرکت از سمت چپ به راست است. برای همین ما پرنده را در سمت چپ پنل و در خط میانی قرار داده ایم. سپس جهت آن را نیز تنظیم می کنیم که در راستای خط افق قرار بگیرد.
یک متغیر به نام “شدت ارتفاع گرفتن” تعریف کرده ایم. این متغیر شدت بال زدن و بالا رفتن را تعیین می کند. یعنی پرنده با هر بار بال زدن چه مقدار بالا برود؟ سپس یک حلقه “همیشه تکرار کن” داریم. این یعنی بلوک های این بخش از برنامه در طول برنامه همیشه اجرا می شوند. به عبارت دیگر پرنده در طول بازی همیشه در حال بال زدن است.
داخل حلقه “همیشه تکرار کن” یک شرط قرار دادیم. این شرط به حالت های بازی اشاره دارد. متغیر “وضعیت بازی” حالت بازی را نشان می دهد که در چه وضعیتی قرار دارد. در این شرط گفته شده اگر وضعیت در حال شروع بازی یا در حال بازی بود در هر دو صورت بلوک های دستوری داخل شکاف “اگر … شده بود” اجرا شود.
داخل شکاف بلوک شرطی “اگر … شده بود” بلوک های مربوط به بال زدن پرنده قرار داده شده است.
یک صدا که برای بال زدن انتخاب شده است. 3 پوسته مختلف که پرنده را در حالت بال زدن در 3 وضعیت متفاوت نشان می دهد. بال زدن با تغییر پوسته پرنده با بلوک “تعویض پوسته ات با …” اجرا می شود. تعدادی بلوک وقفه کوتاه ما بین این بلوک ها و همچنین کمی تغییر موقعیت و جهت این بال زدن را زیباتر می کند!
تا اینجا یک بخش مساله برنامه نویسی بازی فلپی برد، را حل کرده ایم. در ادامه فایل کامل برنامه بازی را قرار داده ایم تا خودتان با کشف بخش های مختلف بیشتر یاد بگیرید.
دیدگاهتان را بنویسید