Skip to content
Snippets Groups Projects
Commit ca254624 authored by Margot NOYELLE's avatar Margot NOYELLE
Browse files

Gestion des évènements

click gauche -> ajout d'une cellule
click droit -> suppression d'une cellule
touche q, echap -> quitter
touche espace -> pause
parent bcd4f864
Branches che_sig-2.4
No related tags found
No related merge requests found
......@@ -11,7 +11,7 @@ int jeu_de_la_vie() {
SDL_Renderer * renderer = NULL;
int largeur = LARGEUR_DEFAUT, hauteur = HAUTEUR_DEFAUT;
int continuer = 1, nb_vivants = 0;
int continuer = 1, pause = 0, nb_vivants = 0;
// Initialisation de la SDL + gestion de l'échec possible
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
......@@ -64,30 +64,81 @@ int jeu_de_la_vie() {
{
SDL_Event event;
coordonnees_t souris = {0,0};
coordonnees_t i_j = {0,0};
gen_tab(tab, GRILLE_H, GRILLE_L);
affiche_ecran(renderer, tab, GRILLE_H, GRILLE_L, largeur, hauteur);
while (continuer)
{
// SDL_GetWindowSize(fenetre, &largeur, &hauteur);
affiche_ecran(renderer, tab, GRILLE_H, GRILLE_L, largeur, hauteur);
nb_vivants = maj_situation(tab_prec, tab, GRILLE_H, GRILLE_L);
if(nb_vivants == 0)
{
affiche_ecran(renderer, tab, GRILLE_H, GRILLE_L, largeur, hauteur);
printf("Toutes les cellules sont mortes...\n");
continuer = 0;
}
SDL_Delay(250);
while (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
switch (event.type)
{
case SDL_QUIT :
continuer = 0;
break;
case SDL_KEYDOWN :
switch (event.key.keysym.sym)
{
case SDLK_SPACE :
pause = !pause;
break;
case SDLK_ESCAPE :
continuer = 0;
break;
case SDLK_q :
continuer = 0;
break;
default :
break;
}
break;
case SDL_MOUSEBUTTONDOWN :
souris.x = event.button.x;
souris.y = event.button.y;
if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_LEFT))
{
i_j = pixel_a_case(souris, GRILLE_H, GRILLE_L, largeur, hauteur);
if (i_j.x >= 0 && i_j.x < GRILLE_L && i_j.y >= 0 && i_j.y < GRILLE_H)
{
tab[i_j.y][i_j.x] = 1;
affiche_ecran(renderer, tab, GRILLE_H, GRILLE_L, largeur, hauteur);
SDL_Delay(250);
}
}
else if (SDL_GetMouseState(NULL, NULL) & SDL_BUTTON(SDL_BUTTON_RIGHT))
{
i_j = pixel_a_case(souris, GRILLE_H, GRILLE_L, largeur, hauteur);
if (i_j.x >= 0 && i_j.x < GRILLE_L && i_j.y >= 0 && i_j.y < GRILLE_H)
{
tab[i_j.y][i_j.x] = 0;
affiche_ecran(renderer, tab, GRILLE_H, GRILLE_L, largeur, hauteur);
SDL_Delay(250);
}
}
break;
default :
break;
}
}
if (!pause)
{
// SDL_GetWindowSize(fenetre, &largeur, &hauteur);
nb_vivants = maj_situation(tab_prec, tab, GRILLE_H, GRILLE_L);
affiche_ecran(renderer, tab, GRILLE_H, GRILLE_L, largeur, hauteur);
if(nb_vivants == 0)
{
affiche_ecran(renderer, tab, GRILLE_H, GRILLE_L, largeur, hauteur);
printf("Toutes les cellules sont mortes...\n");
continuer = 0;
}
SDL_Delay(250);
}
SDL_Delay(100);
SDL_Delay(50);
}
free_tab(tab_prec, GRILLE_H);
......@@ -129,4 +180,12 @@ void affiche_ecran( SDL_Renderer * renderer, int ** tab, int nb_ligne, int nb_co
}
SDL_RenderPresent(renderer);
}
coordonnees_t pixel_a_case(coordonnees_t pixels, int nb_ligne, int nb_colonne, int largeur, int hauteur)
{
int hauteur_case = hauteur/nb_ligne;
int largeur_case = largeur/nb_colonne;
coordonnees_t res = {pixels.x/largeur_case,pixels.y/hauteur_case};
return res;
}
\ No newline at end of file
......@@ -10,8 +10,16 @@
#define HAUTEUR_DEFAUT 480
#define LARGEUR_DEFAUT 640
typedef struct coordonnees
{
int x;
int y;
}coordonnees_t;
int jeu_de_la_vie();
void affiche_ecran( SDL_Renderer * renderer, int ** tab, int nb_ligne, int nb_colonne, int largeur, int hauteur);
coordonnees_t pixel_a_case(coordonnees_t pixels, int nb_ligne, int nb_colonne, int largeur, int hauteur);
#endif
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment