summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-08 17:33:53 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-08 17:33:53 (EDT)
commitaea75d09f6df521b4b30298eea2c9d8c9bd7c9c9 (patch)
tree4f61df52518ad65e6d659a39fa14d0600aa7039e /src
parentbc9b48f31048fc1bf756666ecccbf40c95c15135 (diff)
downloadmazefight-aea75d09f6df521b4b30298eea2c9d8c9bd7c9c9.zip
mazefight-aea75d09f6df521b4b30298eea2c9d8c9bd7c9c9.tar.gz
mazefight-aea75d09f6df521b4b30298eea2c9d8c9bd7c9c9.tar.bz2
game: Add win condition
Diffstat (limited to 'src')
-rw-r--r--src/game.c55
1 files changed, 41 insertions, 14 deletions
diff --git a/src/game.c b/src/game.c
index 8c3a8ff..5a410e2 100644
--- a/src/game.c
+++ b/src/game.c
@@ -33,6 +33,13 @@ struct _mf_game {
struct mftk_widget *timer;
char time_buf[6];
Uint32 beg;
+ int player_cx;
+ int player_cy;
+ int player_travel;
+ int player_dx;
+ int player_dy;
+ int player_x;
+ int player_y;
};
static int
@@ -63,8 +70,8 @@ _mf_game_form(SDL_Renderer *renderer, TTF_Font *text_font,
}
static int
-_mf_game_fow(SDL_Renderer *renderer, struct mf_maze *maze,
- struct mf_player *player, int cw)
+_mf_game_fow(SDL_Renderer *renderer, struct _mf_game *game,
+ struct mf_maze *maze, int cw)
{
int x1;
int y1;
@@ -84,8 +91,11 @@ _mf_game_fow(SDL_Renderer *renderer, struct mf_maze *maze,
return -1; \
}
- mf_player_get_vector(player, &x1, &y1, &travel, &dx, &dy);
- x2 = x1, y2 = y1;
+ x2 = x1 = game->player_cx;
+ y2 = y1 = game->player_cy;
+ travel = game->player_travel;
+ dx = game->player_dx;
+ dy = game->player_dy;
while (!mf_maze_is_wall(maze, dx >= 0 ? x2 : x1, dy >= 0 ? y2 : y1,
dx, dy)) {
if (dx >= 0) x2 += dx;
@@ -142,6 +152,7 @@ mf_game(long seed, int size, int fow, int reveal, SDL_Renderer *renderer)
struct _mf_game game;
struct mftk_window *win = NULL;
int fr;
+ int won;
Uint32 beg;
int secs;
Uint32 end;
@@ -189,6 +200,7 @@ mf_game(long seed, int size, int fow, int reveal, SDL_Renderer *renderer)
game.beg = SDL_GetTicks();
fr = 30;
+ won = SDL_FALSE;
while(1) {
beg = SDL_GetTicks();
while (SDL_PollEvent(&event)) {
@@ -215,26 +227,41 @@ mf_game(long seed, int size, int fow, int reveal, SDL_Renderer *renderer)
goto err;
}
}
- mf_player_update(player);
+ if (won == SDL_FALSE) {
+ mf_player_update(player);
+ mf_player_get_vector(player, &game.player_cx,
+ &game.player_cy, &game.player_travel,
+ &game.player_dx, &game.player_dy);
+ game.player_x = game.player_cx * MF_WINDOW_H / size;
+ game.player_y = game.player_cy * MF_WINDOW_H / size;
+ game.player_x += game.player_travel * game.player_dx;
+ game.player_y += game.player_travel * game.player_dy;
+ if (game.player_cx == size - 1 &&
+ game.player_cy == size - 1) {
+ won = SDL_TRUE;
+ }
+ }
SDL_SetRenderDrawColor(renderer,
MF_COLOR_BACK_R, MF_COLOR_BACK_G,
MF_COLOR_BACK_B, MF_COLOR_BACK_A);
SDL_RenderClear(renderer);
mf_player_render(player, renderer);
- if (fow == SDL_TRUE && _mf_game_fow(renderer, maze, player,
+ if (fow == SDL_TRUE && _mf_game_fow(renderer, &game, maze,
MF_WINDOW_H / size) < 0) {
goto err;
}
mf_maze_render(maze, renderer, &maze_color, MF_WINDOW_H / size);
- secs = (beg - game.beg) / 1000;
- if (sprintf(game.time_buf, "%02d:%02d", secs / 60, secs % 60)
- < 0) {
- SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
- "Couldn't allocate string: %s",
- strerror(errno));
- goto err;
+ if (won == SDL_FALSE) {
+ secs = (beg - game.beg) / 1000;
+ if (sprintf(game.time_buf, "%02d:%02d",
+ secs / 60, secs % 60) < 0) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
+ "Couldn't allocate string: %s",
+ strerror(errno));
+ goto err;
+ }
+ mftk_text_set_value(game.timer, game.time_buf);
}
- mftk_text_set_value(game.timer, game.time_buf);
mftk_window_render(win, renderer);
SDL_RenderPresent(renderer);
end = SDL_GetTicks();