From 7d1461d2683378df5017f12ca33b5a4fcbad52fa Mon Sep 17 00:00:00 2001 From: valentin carmona Date: Thu, 24 Mar 2022 14:53:45 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20de=20l'impossibilit=C3=A9=20dees=20undo?= =?UTF-8?q?=20redo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 3 +- model.c | 91 ++++++++++++++++++++++++++++++++++++--------------------- model.h | 5 +--- 3 files changed, 61 insertions(+), 38 deletions(-) diff --git a/main.c b/main.c index 3519ad4..245d910 100644 --- a/main.c +++ b/main.c @@ -39,11 +39,12 @@ int main(int argc, char* argv[]) { SDL_Event e; bool quit = false; SDL_Event prec_e; + int nb_coups = 0, nb_undo = 0; while (!quit) { /* manage events */ while (SDL_PollEvent(&e)) { /* process your events */ - quit = process(win, env, &e, &prec_e); + quit = process(win, env, &e, &prec_e, &nb_coups, &nb_undo); if (quit) break; } diff --git a/model.c b/model.c index 48cbfd8..2e61a5a 100644 --- a/model.c +++ b/model.c @@ -450,7 +450,27 @@ void ToggleFullscreen(SDL_Window* Window) { SDL_ShowCursor(IsFullscreen); } -bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { +void play_light(uint i, uint j, Env* env) { + if (game_is_blank(env->g, i, j) || game_is_marked(env->g, i, j)) { + game_play_move(env->g, i, j, S_LIGHTBULB); + play_Music(env, true, true, false); + } else if (game_is_lightbulb(env->g, i, j)) { + game_play_move(env->g, i, j, S_BLANK); + play_Music(env, true, true, false); + } +} + +void play_mark(uint i, uint j, Env* env) { + if (game_is_blank(env->g, i, j) || game_is_lightbulb(env->g, i, j)) { + game_play_move(env->g, i, j, S_MARK); + play_Music(env, false, true, true); + } else if (game_is_marked(env->g, i, j)) { + game_play_move(env->g, i, j, S_BLANK); + play_Music(env, false, true, true); + } +} + +bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e, int* nb_coups, int* nb_undo) { int w, h; SDL_GetWindowSize(win, &w, &h); if (e->type == SDL_QUIT) { @@ -458,16 +478,25 @@ bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { } if (e->type == SDL_KEYDOWN) { const Uint8* state = SDL_GetKeyboardState(NULL); - if (state[SDL_SCANCODE_F11]) + if (state[SDL_SCANCODE_F11]){ ToggleFullscreen(win); - if (state[SDL_SCANCODE_Z]) + }else if (state[SDL_SCANCODE_Z]){ game_undo(env->g); - if (state[SDL_SCANCODE_Y]) + (*nb_undo) ++; + (*nb_coups) --; + }else if (state[SDL_SCANCODE_Y]){ game_redo(env->g); - if (state[SDL_SCANCODE_S]) + (*nb_undo) --; + (*nb_coups) ++; + }else if (state[SDL_SCANCODE_S]){ game_solve(env->g); - if (state[SDL_SCANCODE_R] || state[SDL_SCANCODE_F5]) + (*nb_undo) = 0; + (*nb_coups) ++; + }else if (state[SDL_SCANCODE_R] || state[SDL_SCANCODE_F5]){ game_restart(env->g); + (*nb_undo) = 0; + (*nb_coups) = 0; + } } if (game_is_over(env->g) && !env->won) { Mix_PlayMusic(env->win_music, 1); @@ -493,15 +522,19 @@ bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { env->pressed_redo = false; env->pressed_solve = false; } else if (SDL_PointInRect(&mouse, env->rec_undo)) { - env->pressed_undo = true; - env->pressed_restart = false; - env->pressed_redo = false; - env->pressed_solve = false; + if((*nb_coups) <= 0){ + env->pressed_undo = true; + env->pressed_restart = false; + env->pressed_redo = false; + env->pressed_solve = false; + } } else if (SDL_PointInRect(&mouse, env->rec_redo)) { - env->pressed_redo = true; - env->pressed_undo = false; - env->pressed_restart = false; - env->pressed_solve = false; + if((*nb_undo) <= 0){ + env->pressed_redo = true; + env->pressed_undo = false; + env->pressed_restart = false; + env->pressed_solve = false; + } } else if (SDL_PointInRect(&mouse, env->rec_solve)) { env->pressed_solve = true; env->pressed_undo = false; @@ -529,18 +562,27 @@ bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { mouse.x = e->tfinger.x; mouse.y = e->tfinger.y; } + if (SDL_PointInRect(&mouse, env->rec_restart)) { game_restart(env->g); + (*nb_undo) = 0; + (*nb_coups) = 0; } else if (SDL_PointInRect(&mouse, env->rec_undo)) { if (env->pressed_undo == true) { game_undo(env->g); + (*nb_undo) ++; + (*nb_coups) --; } } else if (SDL_PointInRect(&mouse, env->rec_redo)) { if (env->pressed_redo == true) { game_redo(env->g); + (*nb_undo) --; + (*nb_coups) ++; } } else if (SDL_PointInRect(&mouse, env->rec_solve)) { game_solve(env->g); + (*nb_undo) = 0; + (*nb_coups) ++; } else if (SDL_PointInRect(&mouse, env->rec_game)) { uint i = (((float)mouse.y - (float)env->rec_game->y) / (float)env->rec_game->h * game_nb_rows(env->g)) - 0.00001 /*to avoid if clicked exacly on the bottom right corner to result a 7*/; @@ -558,31 +600,14 @@ bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e) { } else if (e->type == SDL_FINGERUP) { play_mark(i, j, env); } + (*nb_undo) = 0; + (*nb_coups) ++; } } } return false; } -void play_light(uint i, uint j, Env* env) { - if (game_is_blank(env->g, i, j) || game_is_marked(env->g, i, j)) { - game_play_move(env->g, i, j, S_LIGHTBULB); - play_Music(env, true, true, false); - } else if (game_is_lightbulb(env->g, i, j)) { - game_play_move(env->g, i, j, S_BLANK); - play_Music(env, true, true, false); - } -} - -void play_mark(uint i, uint j, Env* env) { - if (game_is_blank(env->g, i, j) || game_is_lightbulb(env->g, i, j)) { - game_play_move(env->g, i, j, S_MARK); - play_Music(env, false, true, true); - } else if (game_is_marked(env->g, i, j)) { - game_play_move(env->g, i, j, S_BLANK); - play_Music(env, false, true, true); - } -} /* **************************************************************** */ void clean(Env* env) { diff --git a/model.h b/model.h index 7d999dc..644c4cb 100644 --- a/model.h +++ b/model.h @@ -45,10 +45,7 @@ typedef struct Env_t Env; Env* init(SDL_Renderer* ren, int argc, char* argv[]); void render(SDL_Window* win, SDL_Renderer* ren, Env* env); void clean(Env* env); -bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e); -void render_blended_numbered_wall(SDL_Renderer* ren, Env* env); -void play_light(unsigned int i, unsigned int j, Env* env); -void play_mark(unsigned int i, unsigned int j, Env* env); +bool process(SDL_Window* win, Env* env, SDL_Event* e, SDL_Event* prec_e, int* nb_coups, int* nb_undo); /* **************************************************************** */