From b844a2b1a10b799d0318eb19c9b3d441097b5f38 Mon Sep 17 00:00:00 2001 From: iggy Date: Thu, 4 Aug 2011 20:37:02 +0200 Subject: [PATCH] invaders can exit, size reduction with static fkts --- firmware/l0dable/EXPORTS | 1 + firmware/l0dable/invaders.c | 106 ++++++++++++++++++------------------ 2 files changed, 55 insertions(+), 52 deletions(-) diff --git a/firmware/l0dable/EXPORTS b/firmware/l0dable/EXPORTS index 7242605..bb474bb 100644 --- a/firmware/l0dable/EXPORTS +++ b/firmware/l0dable/EXPORTS @@ -79,3 +79,4 @@ setExtFont getFontHeight menuflags delayms_queue_plus +getInputWaitTimeout diff --git a/firmware/l0dable/invaders.c b/firmware/l0dable/invaders.c index 9a08d01..c2f6062 100644 --- a/firmware/l0dable/invaders.c +++ b/firmware/l0dable/invaders.c @@ -52,33 +52,33 @@ struct gamestate { uint8_t bunker[BUNKERS][BUNKER_WIDTH]; } game; char key; -bool highscore_set(uint32_t score, char nick[]); -uint32_t highscore_get(char nick[]); -void init_game(); -void init_enemy(); -void check_end(); -void move_ufo(); -void move_shot(); -void move_shots(); -void move_player(); -void move_enemy(); -void draw_score(); -void draw_bunker(); -void draw_player(); -void draw_enemy(); -void draw_shots(); -void draw_sprite(char type, char x, char y); -void draw_ufo(); -void screen_intro(); -void screen_gameover(); -void screen_level(); -bool check_bunker(char xpos, char ypos, int8_t shift); +static bool highscore_set(uint32_t score, char nick[]); +static uint32_t highscore_get(char nick[]); +static void init_game(); +static void init_enemy(); +static void check_end(); +static void move_ufo(); +static void move_shot(); +static void move_shots(); +static void move_player(); +static void move_enemy(); +static void draw_score(); +static void draw_bunker(); +static void draw_player(); +static void draw_enemy(); +static void draw_shots(); +static void draw_sprite(char type, char x, char y); +static void draw_ufo(); +static bool screen_intro(); +static bool screen_gameover(); +static void screen_level(); +static bool check_bunker(char xpos, char ypos, int8_t shift); void ram(void) { - //gpioSetValue (RB_LED1, CFG_LED_OFF); - //backlightInit(); - while(1) { + while(1) { + if (!screen_intro()) + return; screen_intro(); game.rokets = 3; game.level = 1; @@ -104,19 +104,20 @@ void ram(void) { lcdDisplay(); delayms(12); } - screen_gameover(); + if (!screen_gameover()) + return; } - return; } -void screen_intro() { +static bool screen_intro() { uint32_t highscore; char highnick[20]; char key=0; + bool step = false; while(key==0) { lcdFill(0); font = &Font_Invaders; - DoString(28,25,"ABC"); + DoString(28,25,step?"ABC":"abc"); font = &Font_7x8; DoString (28,40,"SPACE"); DoString (18,50,"INVADERS"); @@ -125,13 +126,13 @@ void screen_intro() { DoInt(0, 0, highscore); DoString (0, 9, highnick); lcdDisplay(); - - delayms_queue(50); - key=getInput(); + step = !step; + key=getInputWaitTimeout(1); } + return !(key==BTN_LEFT); } -void screen_gameover() { +static bool screen_gameover() { char key =0; while(key==0) { lcdFill(0); @@ -143,9 +144,10 @@ void screen_gameover() { lcdDisplay(); key=getInputWaitTimeout(5); } + return !(key==BTN_LEFT); } -void screen_level() { +static void screen_level() { lcdFill(0); draw_score(); font = &Font_7x8; @@ -155,7 +157,7 @@ void screen_level() { delayms_queue(500); } -bool highscore_set(uint32_t score, char nick[]) { +static bool highscore_set(uint32_t score, char nick[]) { MPKT * mpkt= meshGetMessage('i'); if(MO_TIME(mpkt->pkt)>score) return false; @@ -165,7 +167,7 @@ bool highscore_set(uint32_t score, char nick[]) { return true; } -uint32_t highscore_get(char nick[]){ +static uint32_t highscore_get(char nick[]){ MPKT * mpkt= meshGetMessage('i'); strcpy(nick,(char*)MO_BODY(mpkt->pkt)); @@ -173,7 +175,7 @@ uint32_t highscore_get(char nick[]){ return MO_TIME(mpkt->pkt); } -void init_game(void) { +static void init_game(void) { game.player = POS_PLAYER_X; game.shot_x = DISABLED; game.shot_y = 0; @@ -212,7 +214,7 @@ void init_game(void) { } } -void init_enemy() { +static void init_enemy() { for (int row = 0; rowBUNKER_X[BUNKERS-1-b] && xpos 0 ){ game.player-=1; } @@ -352,7 +354,7 @@ void move_player() { } } -void move_enemy() { +static void move_enemy() { if(game.move > 0){ game.move-=game.level/5+1; return; @@ -390,16 +392,16 @@ void move_enemy() { game.move = game.alive*2-1; } -void draw_player() { +static void draw_player() { draw_sprite(TYPE_PLAYER, game.player, POS_PLAYER_Y); } -void draw_ufo() { +static void draw_ufo() { if (game.ufo!=DISABLED) draw_sprite(TYPE_UFO, game.ufo, POS_UFO_Y); } -void draw_enemy() { +static void draw_enemy() { for (int row = 0; row