دراین قسمت از سری آموزش های صفر تا صد ساخت بازی با جاوا، بازی معروف و محبوب snake  را آموزش خواهیم داد.

همانطور که میدانید در این بازی ،بازیکن وظیفه ی کنترل کردن یک مار را برعهده دارد. به طوریکه مار رابه کمک کلیدهای جهت نما به سمت سیب هایی که در برد ظاهر میشود هدایت کند. مار با خوردن هر سیب به طول بدنش اضافه میشود.
در صورت برخورد مار با بدن خودش یا هر کدام از دیوار های برد، بازی تمام خواهد شد(در واقع هر کدام از این برخوردها منجر به باخت میشود)

 

بسیار خب، پروژه ی جدیدی در NetBeans ایجاد میکنیم و در آن پیکجی به نام snake قرار میدهیم.
کلاس Board  را در این پکیج ایجاد میکنیم و مطابق روند زیر، آن را کامل میکنیم :

ابتدا ثابت هایی را که در برنامه به آنها نیاز داریم، تعریف میکنیم:

 

  • این دو ثابت، ابعاد برد را مشخص میکنند.

 

 

  • ثابت DOT_SIZE، فاصله ی بین هر دو مفصل مار را مشخص میکند.(در ابتدای بازی، مار دارای 3 مفصل است)
  • ثابت ALL_DOTS، حداکثر تعداد مفاصل ممکن را که با توجه به ابعاد برد و همینطور سایز مفاصل، به شکل زیر محاسبه میشود را، مشخص میکند:
 
  • ثابت RAND_POS ، برای محاسبه ی یک موقعیت تصادفی در برد، برای قرارگیری سیب، مورد استفاده قرار میگیرد.
  • ثابت DELAY نیز برای تعیین سرعت بازی خواهد بود.

پس از آن ، دو آرایه به شکل زیر تعریف میکنیم تا مختصات x,yمجموعه مفاصل مار را در خود ذخیره کنند:

سایرثابتهای تعریف شده نیز کاملا واضح هستند.
حال به سراغ متدهایی که تعریف کردیم میرویم:

 

  • متد loadImages  را به شکل زیر تعریف میکنیم، در آن ابتدا تصاویر مورد نظر را دریافت میکنیم (توجه کنید که تصاویر مورد نیاز (سیب،بدن مار و سر مار ) در محل ذخیره ی پروژه و در پوشه  ی src کپی شده اند) و سپس توسط کلاس ImageIcon که برای نمایش تصاویر png مورد استفاده قرار میگیرد، آنها را دراختیار میگیریم :
سپس توسط متد doDrawing در وقت نیاز، تصاویر را نمایش میدهیم.

  • در متد initGame، یک snake  (با 3 مهره) میسازیم و مقدار x,y هر مهره را ذخیره میکنیم. سپس توسط متد locateApple یک موقعیت تصادفی برای قرارگیری سیب، ایجادمیکنیم و سپس تایمر را استارت میزنیم.
     

    در متد checkApple بررسی میکنیم که در صورت برخورد سیب با سر مار (یعنی در صورت خورده شدن سیب توسط مار) به طول مار اضافه میکنیم (یعنی به تعداد مهره های مار 1 واحد اضافه میکنیم) و بلافاصله از طریق متد locateApple یک موقغیت تصادفی دیگر برای قرارگیری سیب ایجاد میکنیم:

    در متدlocateApple، که برای یافتن یک موقعیت تصادفی برای قرار گیری سیب در برد، پیاده سازی شده است، توسط Math.random یک مقدار عددی تصادفی تولید میکنیم سپس برای اینکه عدد تولید شده در رنج طول ممکن مفاصل مار قرار بگیرد، آن را در RAND_POS ضرب میکنیم. عدد صحیح تولید شده را دراندازه ی مفصل (DOT_SIZE) ضرب میکنیم تا مختصه ی تصادفی x مکان سیب، تولید شود. روند مشابه را برای تولید مختصه ی y مکان سیب، انجام میدهیم.

  • در متد move، حرکت snake را از طریق کلیدهای جهت نما، پیاده سازی میکنیم.
    در واقع از طریق کلیدهای جهت نما، کنترل سر مار را بر عهده میگیریم و با کلیدهای جهت نما آن را حرکت میدهیم (برای مثال با فشردن کلید جهت نما ی راست، یک واحد به مختصه ی x مهره ی سر اضافه میشود). به ازای هر حرکت، مفصلی از بدن مار که به سر چسبیده، در مکان قبلی سر مار قرار میگیرد. مفصل دوم در موقعیت قبلی مفصل اول و این حرکت به شکل زنجیری ادامه پیدا میکند… لذا این تغییر مکان زنجیره ای مهره ها را نیز از طریق حلقه ی for پیاده سازی میکینم:

  • متد keyPressed هم اعمالی که باید بعد از فشردن هر یک از کلیدهای جهت نما اتفاق افتد را نشان میدهد:

برای مثال قطعه کد زیر به این معناست که اگر کلید جهت نمای چپ فشرده شد و جهت فعلی مار به سمت راست (سمت مخالف جهتی که فشرده شده) نبود، متغیر مربوط به حرکت به سمت چپ( leftDirection) را true و باقی متغیرها را false کن. (به این معنا که یک واحد به سمت چپ حرکت کن)

  • در متد checkCollision، برخوردهایی که سبب باخت در بازی میشود (یعنی برخورد مار با خودش ویا برخورد مار با دیوارهای برد) را بررسی میکنیم و در صورت اتفاق افتادن هریک از این برخوردها با false  کردن متغیر inGame بازی را  متوقف میکنیم.

شرط فوق برخورد مار با بدنه اش رابررسی میکند.

چهار شرط فوق نیز ، برخورد مار با هرکدام از دیواره های برد را بررسی میکند.

  • متد gameOver نیز تصویر زیر را به هنگام اتمام بازی نمایش میدهد:

GameOverSnake

 

  • حال کلاسی به عنوان snake، ازکنترل Jframe ایجاد میکنیم که حاوی متد main است و قابلیت اجرای بازیمان را فراهم خواهد کرد:

MainSnake

 

برنامه اماده ی اجراست.
تصویری از خروجی را در شکل زیر میبینید:

 

SnakeFinal

آموزش ساخت بازی snake  را نیز در اینجا به پایان میبریم.
در آینده ی نزدیک با ساخت بازیهای بیشتر، درخدمت شما خواهیم بود. فایل کامل پروژه را میتوانید از انتهای پست دانلود کنید.

 

ozviiiiiiiat

 

دانلود فایل پروژه