بکار بردن حالت های متفاوت بازی
به کار بردن حالت های مختلف(state) این بازی ضروری است. بنابراین ما تابع های متفاوتی را برای سر و کله زدن با هریک از این حالت ها مورد ا ستفاده قرار می دهیم:
void intro() {
tv.select_font(font8x8);
tv.printPGM(28, 20, PSTR("Pragduino"));
tv.select_font(font6x8);
tv.printPGM(16, 40, PSTR("A Pragmatic Game"));
tv.select_font(font4x6);
tv.printPGM(18, 74, PSTR("Press Z-Button to Start"));
if (z_button) {
state = STARTING;
z_button = false;
delay(200);
}
}
void start_game() {
tv.clear_screen();
tv.select_font(font8x8);
tv.printPGM(40, 44, PSTR("READY?"));
if (z_button) {
init_game();
state = RUNNING;
}
}
void game_over() {
tv.clear_screen();
tv.select_font(font8x8);
tv.printPGM(28, 38, PSTR("Game Over"));
int x = (WIDTH - 7 * 8) / 2;
if (hits > 9)
x = (WIDTH - 8 * 8) / 2;
tv.printPGM(x, 50, PSTR("Hits: "));
tv.print(x + 6 * 8, 50, hits);
if (z_button) {
state = STARTING;
z_button = false;
delay(200);
}
}
void update_game() {
tv.clear_screen();
tv.draw_circle(target_x, target_y, target_r, WHITE);
move_crosshairs();
draw_crosshairs();
check_target();
if (target_count == MAX_TARGET + 1) {
state = DONE;
z_button = false;
delay(200);
}
}
آدرس:
Tinkering/Pragduino/Pragduino.ino
تابع های intro و start_game و game_over بسیار مشابه یکدیگر هستند. اینها، یک پیام را در صفحه چاپ می کنند، سپس صبر می کنند تا دکمه ی Z فشار داده شود. اگر دکمه ی Z فشار داده شود، آنها به حالت(state) بعدی می روند. قبل از اینکه این تابع ها ما را به حالت بعدی ببرند، مقدار z_button را به false تنظیم می کنند و برای 200 میلی ثانیه صبر می کنند. این کار برای انجام پرش زدایی(debounce) دکمه ی Z ضروری است. تمام این سه تابع، از یک متد دیگر TVout استفاده می کنند. بعنوان مثال به خط 3 توجه کنید. در این خط، ما از متد printPGM متعلق به کتابخانه ی TVout استفاده کرده ایم. این متد، مانند متد عادی print عمل می کند؛ اما متد مذکور رشته ای که قرار است از فلش مموری آردوینو خارج شود را قرائت می کند نه از SRAM. برای اپلیکیشن هایی که پیغام های ثابت زیادی را نمایش می دهند، این کار می تواند باعث شود که بسیار در حافظه(memory) صرفه جویی شود. برای انتقال رشته به فلش مموری، ما از ماکروی PSTR استفاده می کنیم. این ماکرو به ما اطمینان می دهد که رشته هایی که با استفاده از متد printPGM در خروجی نشان می دهیم، وقتی که برنامه کامپایل می شود، در داخل فلش مموری کپی شوند.
اصلی ترین تابع بازی ما، تابع update_game است. این تابع حلقه ی(loop) اصلی بازی را اجرا می کند و ابتدا صفحه ی نمایش را با فراخوانی متد clear_screen پاک می کند. سپس از متد draw_circle برای رسم دایره ی فعلی استفاده می کند. سپس در خط 44، متد move_crosshairs موقعیت جدید علامت ضربدر(crosshairs ) را بسته به حرکت بازیکن محاسبه می کند. سپس در خط 45، متد draw_crosshairs علامت ضربدر را در خروجی در صفحه ی نمایش نشان می دهد. متد check_target در خط 46، حالت دایره ی فعلی را مشخص می کند. به عبارت دیگر، بررسی می کند که آیا کاربر به دایره ضربه زده است یا نه؛ یا اینکه آیا دایره برای یک زمان طولانی در صفحه بوده است یا نه؛ یا اینکه آیا اتفاق خاصی افتاده است یا نه. اگر تمام دایره ها از قبل نشان داده شده باشند، بازی تمام می شود.
نوشتن دیدگاه
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.
دیدگاهها
рage. Ӏm reɑlly impressed by yoir blog Hеllo there, You һave performed а
greɑt job.
I needs to spend some time learning more or understanding more.
Thanks for wonderful information I was looking for this information for my mission.
you made running a blog glance easy. The entire glance of your web
site is excellent, let alone the content material!