Update from 10
This commit is contained in:
parent
8a9bab3a4e
commit
e9eb0f9a65
2 changed files with 117 additions and 91 deletions
|
|
@ -70,112 +70,138 @@ void moveleft(player_pos *frog_pos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void on_start_state(signals sig, frog_state *state)
|
||||||
|
{
|
||||||
|
switch (sig)
|
||||||
|
{
|
||||||
|
case ENTER_BTN:
|
||||||
|
*state = SPAWN;
|
||||||
|
break;
|
||||||
|
case ESCAPE_BTN:
|
||||||
|
*state = EXIT_STATE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*state = START;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_spawn_state(frog_state *state, game_stats_t *stats, board_t *map, player_pos *frog_pos)
|
||||||
|
{
|
||||||
|
if (stats->level > LEVEL_CNT)
|
||||||
|
*state = GAMEOVER;
|
||||||
|
else
|
||||||
|
if (!lvlproc(map, stats))
|
||||||
|
{
|
||||||
|
fill_finish(map->finish);
|
||||||
|
print_finished(map);
|
||||||
|
frogpos_init(frog_pos);
|
||||||
|
*state = MOVING;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*state = FILE_ERROR_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_moving_state(signals sig, frog_state *state, board_t *map, player_pos *frog_pos)
|
||||||
|
{
|
||||||
|
switch (sig)
|
||||||
|
{
|
||||||
|
case MOVE_UP:
|
||||||
|
moveup(frog_pos);
|
||||||
|
break;
|
||||||
|
case MOVE_DOWN:
|
||||||
|
movedown(frog_pos);
|
||||||
|
break;
|
||||||
|
case MOVE_RIGHT:
|
||||||
|
moveright(frog_pos);
|
||||||
|
break;
|
||||||
|
case MOVE_LEFT:
|
||||||
|
moveleft(frog_pos);
|
||||||
|
break;
|
||||||
|
case ESCAPE_BTN:
|
||||||
|
*state = EXIT_STATE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*state != EXIT_STATE)
|
||||||
|
{
|
||||||
|
if (check_collide(frog_pos, map))
|
||||||
|
*state = COLLIDE;
|
||||||
|
else if (check_finish_state(frog_pos, map))
|
||||||
|
*state = REACH;
|
||||||
|
else
|
||||||
|
*state = SHIFTING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_shifting_state(frog_state *state, game_stats_t *stats, board_t *map, player_pos *frog_pos)
|
||||||
|
{
|
||||||
|
shift_map(map);
|
||||||
|
|
||||||
|
if (check_collide(frog_pos, map))
|
||||||
|
*state = COLLIDE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*state = MOVING;
|
||||||
|
print_board(map, frog_pos);
|
||||||
|
print_stats(stats);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_reach_state(frog_state *state, game_stats_t *stats, board_t *map, player_pos *frog_pos)
|
||||||
|
{
|
||||||
|
stats->score += 1;
|
||||||
|
add_proggress(map);
|
||||||
|
|
||||||
|
if (check_level_compl(map))
|
||||||
|
{
|
||||||
|
stats->level++;
|
||||||
|
stats->speed++;
|
||||||
|
*state = SPAWN;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
frogpos_init(frog_pos);
|
||||||
|
print_finished(map);
|
||||||
|
*state = MOVING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_collide_state(frog_state *state, game_stats_t *stats, player_pos *frog_pos)
|
||||||
|
{
|
||||||
|
if (stats->lives)
|
||||||
|
{
|
||||||
|
stats->lives--;
|
||||||
|
frogpos_init(frog_pos);
|
||||||
|
*state = MOVING;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*state = GAMEOVER;
|
||||||
|
}
|
||||||
|
|
||||||
void sigact(signals sig, frog_state *state, game_stats_t *stats, board_t *map, player_pos *frog_pos)
|
void sigact(signals sig, frog_state *state, game_stats_t *stats, board_t *map, player_pos *frog_pos)
|
||||||
{
|
{
|
||||||
switch (*state)
|
switch (*state)
|
||||||
{
|
{
|
||||||
case START:
|
case START:
|
||||||
switch (sig)
|
on_start_state(sig, state);
|
||||||
{
|
|
||||||
case ENTER_BTN:
|
|
||||||
*state = SPAWN;
|
|
||||||
break;
|
|
||||||
case ESCAPE_BTN:
|
|
||||||
*state = EXIT_STATE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
*state = START;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case SPAWN:
|
case SPAWN:
|
||||||
if (stats->level > LEVEL_CNT)
|
on_spawn_state(state, stats, map, frog_pos);
|
||||||
*state = GAMEOVER;
|
|
||||||
else
|
|
||||||
if (!lvlproc(map, stats))
|
|
||||||
{
|
|
||||||
fill_finish(map->finish);
|
|
||||||
print_finished(map);
|
|
||||||
frogpos_init(frog_pos);
|
|
||||||
*state = MOVING;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*state = FILE_ERROR_STATE;
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case MOVING:
|
case MOVING:
|
||||||
switch (sig)
|
on_moving_state(sig, state, map, frog_pos);
|
||||||
{
|
|
||||||
case MOVE_UP:
|
|
||||||
moveup(frog_pos);
|
|
||||||
break;
|
|
||||||
case MOVE_DOWN:
|
|
||||||
movedown(frog_pos);
|
|
||||||
break;
|
|
||||||
case MOVE_RIGHT:
|
|
||||||
moveright(frog_pos);
|
|
||||||
break;
|
|
||||||
case MOVE_LEFT:
|
|
||||||
moveleft(frog_pos);
|
|
||||||
break;
|
|
||||||
case ESCAPE_BTN:
|
|
||||||
*state = EXIT_STATE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*state != EXIT_STATE)
|
|
||||||
{
|
|
||||||
if (check_collide(frog_pos, map))
|
|
||||||
*state = COLLIDE;
|
|
||||||
else if (check_finish_state(frog_pos, map))
|
|
||||||
*state = REACH;
|
|
||||||
else
|
|
||||||
*state = SHIFTING;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case SHIFTING:
|
case SHIFTING:
|
||||||
shift_map(map);
|
on_shifting_state(state, stats, map, frog_pos);
|
||||||
|
|
||||||
if (check_collide(frog_pos, map))
|
|
||||||
*state = COLLIDE;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*state = MOVING;
|
|
||||||
print_board(map, frog_pos);
|
|
||||||
print_stats(stats);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case REACH:
|
case REACH:
|
||||||
stats->score += 1;
|
on_reach_state(state, stats, map, frog_pos);
|
||||||
add_proggress(map);
|
|
||||||
if (check_level_compl(map))
|
|
||||||
{
|
|
||||||
stats->level++;
|
|
||||||
stats->speed++;
|
|
||||||
*state = SPAWN;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
frogpos_init(frog_pos);
|
|
||||||
print_finished(map);
|
|
||||||
*state = MOVING;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case COLLIDE:
|
case COLLIDE:
|
||||||
if (stats->lives)
|
on_collide_state(state, stats, frog_pos);
|
||||||
{
|
|
||||||
stats->lives--;
|
|
||||||
frogpos_init(frog_pos);
|
|
||||||
*state = MOVING;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
*state = GAMEOVER;
|
|
||||||
break;
|
break;
|
||||||
case GAMEOVER:
|
case GAMEOVER:
|
||||||
print_banner(stats);
|
print_banner(stats);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue