به کارگاه ترجمه ی سینا2 خوش آمدید!

تبلیغات شما در اینجا بالا

تنظیم صحنه برای بازی آردوینو

اکثر بازی ها نیاز دارند تا حالت های مختلفی را بکار ببرند. و بازی Pragduino نیز از این قاعده مستثنی نیست. بنابراین این بازی نیز در کدهای خود با یک لیست از ثابت ها(constant) و متغیرها شروع می شود. که عبارتند از:

#include <Wire.h>
#include <TVout.h>
#include <fontALL.h>
#include "nunchuk.h"
const int WIDTH = 128;
const int HEIGHT = 96;
const int CH_LEN = 8;
const int MAX_TARGET = 10;
const int TARGET_LIFESPAN = 1500;

 کدهای بالا در آدرس زیر قرار دارند:

Tinkering/Pragduino/Pragduino.ino

مثل همیشه، ما تمام فایل های header که به آنها نیاز داریم را اضافه می کنیم و تعدادی ثابت را نیز تعریف می کنیم. ثابت های WIDTH و HEIGHT حاوی اندازه های صفحه ی نمایش هستند و ثابت CH_LEN نیز حاوی طول یک عنصر تکی ضربدر یا همان  crosshairs  است(عنصر  ضربدر حاوی چهار عنصر است). ثابت MAX_TARGET حاوی تعداد دایره هایی است که ما باید آنها را شوت کنیم و ثابت TARGET_LIFESPAN حاوی میزان طول عمر یک دایره به میلی ثانیه است. اکنون ما چند متغیر سراسری(global) را تعریف می کنیم:

TVout tv;
Nunchuk nunchuk;

boolean up, down, left, right, c_button, z_button;
int chx, chy;
int chvx, chvy;
int target_x, target_y, target_r;
unsigned int target_count;
unsigned int hits;
unsigned long target_creation;

enum GameState { 
  INTRO, STARTING, RUNNING, DONE
};

GameState state;

 کدهای بالا در آدرس زیر قرار دارند:

Tinkering/Pragduino/Pragduino.ino

 در برنامه نویسی بازی، ما اغلب باید متغیر های سراسری(global) زیادی را مدیریت کنیم-حتی در بازی های کوچکی مثل این. ما در کدهای بالا، ابتدا یک نمونه(instance) از کلاس TVout به نام tv ایجاد می کنیم و از کلاس Nunchuk نیز یک نمونه به نام nunchuk ایجاد می کنیم. این کار در کدهای بالا در خط 1 و 2 انجام شده است. پس از آن، ما متغیرهای بولین را برای تمام پروپرتی های Nunchuk که به آنها علاقه مند هستیم، تعریف می کنیم. همه ی این متغیرها، مشابه یکدیگر کار می کنند. و همه ی آنها را برابر با true قرار می دهیم. بعنوان مثال، اگر کاربر جوی استیک(اهرمک) دسته ی Nunchuk را به طرف بالا فشار دهد، چنین کاری را انجام می دهیم.

متغیرهای chx و chy حاوی موقعیت فعلی crosshair علامت ضربدر(crosshairs) هستند. متغیرهای chvx و chvy نیز حاوی سرعت های X و Y آن هستند. به طور مشابه، متغیرهای target_x و target_y حاوی موقعیت target فعلی هستند . به دلیل اینکه target ما یک دایره است، به یک شعاع نیز نیاز داریم ؛ که آن را در داخل متغیر target_r قرار می دهیم. متغیر target_count حاوی تعداد دایره هایی است که قبلا ایجاد کرده ایم . متغیر hits نیز تعداد دایره هایی که بازیکن تاکنون به آنها ضربه زده است را مشخص می کند. دایره ها به طور اتوماتیک پس از یک زمان کوتاه ناپدید می شوند؛ بنابراین ما نیاز داریم تا زمان ایجاد دایره ی فعلی را ذخیره کنیم. زمان مذکور، در داخل متغیر target_creation ذخیره می شود. در خط 12، ما یک enumeration  به نام GameState را تعریف کرده ایم که چند ثابت را در خود نگهداری می کند. این ثابت ها، حالت های بالقوه ی بازی ما را تشکیل می دهند.

 اگر بازی ما به حالت INTRO برود، یک صفحه ی عنوان(title screen) را نمایش می دهد و منتظر بازیکن می شود تا دکمه ی Z را فشار دهد. اگر بازیکن دکمه ی Z را فشار دهد، بازی به حالت STARTING می رود. سپس پیغام READY? را نمایش می دهد و منتظر می ماند تا یک دکمه ی دیگر فشار داده شود؛ و به بازیکن کمی زمان داده می شود تا آماده شود.در حالت RUNNING نیز تمام کارهای بازی انجام می شود. در این حالت، حلقه ی بازی، دایره های جدید را ایجاد می کند و بررسی می کند که آیا بازیکن حرکت می کند یا نه. پس از اینکه تمام دایره ها ظاهر شدند، حالت بازی به DONE تغییر می کند.

 در این حالت، بازیکن یک عبارت مبنی بر پایان یافتن بازی را در صفحه مشاهده می کند و تعداد دایره هایی که او به آنها ضربه زده است را مشاهده می کند. ما باید تمام این متغیرهای سراسری را هنگامی که یک بازی جدید شروع می شود، مقدار دهی اولیه(initialize) کنیم. توابع زیر، این کار را برای ما انجام می دهند:

void init_game() {
  up = down = left = right = c_button = z_button = false;
  chx = WIDTH / 2;
  chy = HEIGHT / 2;
  chvx = 1;
  chvy = 1;
  state = INTRO;
  target_count = 0;
  hits = 0;
  create_target();
}

void create_target() {
  target_r = random(7, 11);
  target_x = random(target_r, WIDTH - target_r);
  target_y = random(target_r, HEIGHT - target_r);
  target_count++;
  target_creation = millis();
}

 کد بالا در آدرس زیر قرار دارد:

Tinkering/Pragduino/Pragduino.ino

 تابع init_game اکثر متغیرهای سراسری(global) را با استفاده از مقادیر ثابت ها تنظیم می کند. تابع create_target  کمی جذاب تر است. این تابع یک دایره ی جدید را در یک موقعیت تصادفی ایجاد می کند که یک سایز تصادفی دارد. ما بعدا در حلقه ی این بازی، وقتی که خواستیم یک دایره ی جدید ایجاد کنیم،  از تابع مذکور استفاده خواهیم کرد. توجه کنید که این تابع، اطمینان حاصل می کند که دایره ی مورد نظر همواره در داخل محدوده ی صفحه ی نمایش قرار گیرد. همچنین این تابع، از تابع millis استفاده می کند تا زمان ایجاد دایره ها را مشخص کند.

!Donate

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.


تصویر امنیتی
تصویر امنیتی جدید

ستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعال