From fd3e7f43c9be359b2b352ed588288908913003a1 Mon Sep 17 00:00:00 2001 From: maberet <marcbere@LAPTOP-CJC0G094.localdomain> Date: Tue, 21 Jun 2022 15:05:10 +0200 Subject: [PATCH] Ajout de prototype de Jeu_de la vie --- .../Beret/jeu_de_la_vie/Makefile | 25 ++++ .../Beret/jeu_de_la_vie/src/main.c | 108 ++++++++++++++++++ .../Beret/jeu_de_la_vie/src/map.c | 59 ++++++++++ .../Beret/jeu_de_la_vie/src/map.h | 15 +++ .../Beret/jeu_de_la_vie/src/render.c | 65 +++++++++++ .../Beret/jeu_de_la_vie/src/render.h | 11 ++ 6 files changed, 283 insertions(+) create mode 100644 travail_individuel/Beret/jeu_de_la_vie/Makefile create mode 100644 travail_individuel/Beret/jeu_de_la_vie/src/main.c create mode 100644 travail_individuel/Beret/jeu_de_la_vie/src/map.c create mode 100644 travail_individuel/Beret/jeu_de_la_vie/src/map.h create mode 100644 travail_individuel/Beret/jeu_de_la_vie/src/render.c create mode 100644 travail_individuel/Beret/jeu_de_la_vie/src/render.h diff --git a/travail_individuel/Beret/jeu_de_la_vie/Makefile b/travail_individuel/Beret/jeu_de_la_vie/Makefile new file mode 100644 index 0000000..40029b9 --- /dev/null +++ b/travail_individuel/Beret/jeu_de_la_vie/Makefile @@ -0,0 +1,25 @@ +CC=gcc +CFLAGS=-Wextra -Wall -lm -lSDL2 +LDFLAGS= +EXEC=run + +all:$(EXEC) + +run: main.o render.o map.o + $(CC) -o $@ $^ $(LDFLAGS) + @echo "Lancer le programme avec ./run" + +map.o : src/map.c src/map.h + $(CC) -o $@ -c $< $(CFLAGS) + +render.o : src/render.c src/render.h + $(CC) -o $@ -c $< $(CFLAGS) + +main.o : src/main.c + $(CC) -o $@ -c $< $(CFLAGS) + +clean: + rm -rf *.o + +rmExec: clean + rm -rf $(EXEC) \ No newline at end of file diff --git a/travail_individuel/Beret/jeu_de_la_vie/src/main.c b/travail_individuel/Beret/jeu_de_la_vie/src/main.c new file mode 100644 index 0000000..97b3199 --- /dev/null +++ b/travail_individuel/Beret/jeu_de_la_vie/src/main.c @@ -0,0 +1,108 @@ +#include <stdlib.h> +#include <stdio.h> +#include <SDL2/SDL.h> +#include "map.h" +#include "render.h" + +int main (int argc, char **argv) { + + if (argc=! 2){ + printf("trop/peu d'argument \n"); + exit(0); + } + SDL_Window + *window_1 = NULL; + SDL_Renderer + *renderer = NULL; + SDL_bool + program_on= SDL_TRUE; + + int dimension_grille= atoi(argv[1]); + int regles_naissances [9]={0,0,0,1,0,0,0,0,0}; + int regles_survie [9]={0,0,1,1,0,0,0,0,0}; + int **grille; + int i; + + init_sdl(window_1,renderer,dimension_grille); + + grille = malloc(dimension_grille*sizeof(int)); + if (grille==NULL){ + fin_sdl(renderer,window_1); + printf("erreur alloc\n"); + exit(0); + } + else{ + for (i=0;i<dimension_grille; i++){ + grille[i]=malloc(dimension_grille*sizeof(int)); + if (grille[i]==NULL){ + fin_sdl(renderer,window_1); + liberer_grille(grille,i-1); + printf("erreur alloc\n"); + exit(0); + } + } + } + + int ** nouvelle_grille; + + nouvelle_grille = malloc(dimension_grille*sizeof(int)); + if (nouvelle_grille==NULL){ + fin_sdl(renderer,window_1); + printf("erreur alloc\n"); + exit(0); + } + else{ + for (i=0;i<dimension_grille; i++){ + nouvelle_grille[i]=malloc(dimension_grille*sizeof(int)); + if (nouvelle_grille[i]==NULL){ + fin_sdl(renderer,window_1); + liberer_grille(nouvelle_grille,i-1); + printf("erreur alloc\n"); + exit(1); + } + } + } + + SDL_Event event; + + while (program_on) { /// boucle d'event + if(SDL_PollEvent(&event)) { + + switch (event.type) { + case SDL_QUIT: + program_on=SDL_FALSE; + break; + case SDL_MOUSEBUTTONDOWN: + printf("Appui :%d %d\n", event.button.x, event.button.y); + changer_case(grille, event.button.x, event.button.y,dimension_grille); + break; + case SDL_KEYDOWN: + switch(event.key.keysym.sym){ + case SDLK_RIGHT: + printf("goo calcul!\n"); + iteration_suivante(grille,nouvelle_grille,regles_naissances,regles_survie,dimension_grille); + break; + default: + printf("une touche est tapee\n"); + break; + } + break; + case SDL_WINDOWEVENT_CLOSE: + printf("appui sur la croix\n"); + break; + + } + } + dessiner_grille(renderer,grille, dimension_grille); + + SDL_RenderPresent(renderer); + SDL_Delay(20); + } + + liberer_grille(grille, dimension_grille); + liberer_grille(nouvelle_grille,dimension_grille); + + fin_sdl(renderer,window_1); + + return 0; +} \ No newline at end of file diff --git a/travail_individuel/Beret/jeu_de_la_vie/src/map.c b/travail_individuel/Beret/jeu_de_la_vie/src/map.c new file mode 100644 index 0000000..336c4df --- /dev/null +++ b/travail_individuel/Beret/jeu_de_la_vie/src/map.c @@ -0,0 +1,59 @@ +#include "map.h" + +int nombrevoisin(int **grille,int i , int j,int w){ + int cpt=0; + + if (grille[(i-1)%w][(j-1)%w]==1){cpt++;} + if (grille[(i)%w][(j-1)%w]==1){cpt++;} + if (grille[(i+1)%w][(j-1)%w]==1){cpt++;} + if (grille[(i+1)%w][(j)%w]==1){cpt++;} + if (grille[(i-1)%w][(j)%w]==1){cpt++;} + if (grille[(i-1)%w][(j+1)%w]==1){cpt++;} + if (grille[(i)%w][(j+1)%w]==1){cpt++;} + if (grille[(i+1)%w][(j+1)%w]==1){cpt++;} + + return (cpt); +} +void liberer_grille(int ** grille,int taille){ + int i= taille-1; + + while(i>=0){ + free(grille[i]); + i--; + } + free(grille); + +} + +void iteration_suivante(int **grille, int **nouvelle_grille ,int *regles_survie, int *regles_naissances, int taille){ + int i; + int j; + int nb_voisin; + + for (i=0;i<taille;i++){ + for (j=0;j<taille; j ++){ + nb_voisin=nombrevoisin(grille,i,j,taille); + if ((grille [i][j]==0)&& (regles_naissances[nb_voisin])){ + nouvelle_grille [i][j]=1; + } + else if ((grille [i][j]==1)&& (!regles_survie[nb_voisin])){ + nouvelle_grille [i][j]=0; + } + else{nouvelle_grille[i][j]=grille[i][j];} + } + } + + grille=nouvelle_grille; +} + + +void changer_case(int **grille,int i,int j,int taille){ + + if (grille[i%taille][j%taille]==0){ + grille[i%taille][j%taille]=1; + } + else { + grille[i%taille][j%taille]=0; + } +} + diff --git a/travail_individuel/Beret/jeu_de_la_vie/src/map.h b/travail_individuel/Beret/jeu_de_la_vie/src/map.h new file mode 100644 index 0000000..9a45946 --- /dev/null +++ b/travail_individuel/Beret/jeu_de_la_vie/src/map.h @@ -0,0 +1,15 @@ +#ifndef projet + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <SDL2/SDL.h> + +#endif + +/* ------------------------------- Déclaration des fonctions.---------------------------------------*/ + +int nombrevoisin(int **grille,int i , int j,int w); +void liberer_grille(int **grille,int taille); +void iteration_suivante(int **grille,int **nouvelle_grille, int *regles_mort, int *regles_naissances, int taille); +void changer_case(int **grille,int i,int j,int taille); diff --git a/travail_individuel/Beret/jeu_de_la_vie/src/render.c b/travail_individuel/Beret/jeu_de_la_vie/src/render.c new file mode 100644 index 0000000..28ddbac --- /dev/null +++ b/travail_individuel/Beret/jeu_de_la_vie/src/render.c @@ -0,0 +1,65 @@ +#include "render.h" + +void init_sdl(SDL_Window *window_1,SDL_Renderer *renderer,int dimension_grille){ + + if (SDL_Init(SDL_INIT_VIDEO) != 0) { + SDL_Log("Error : SDL initialisation - %s\n", + SDL_GetError()); // l'initialisation de la SDL a échoué + exit(EXIT_FAILURE);} + + window_1 = SDL_CreateWindow("Jeu de la vie", + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, 10*dimension_grille, + 10*dimension_grille, + SDL_WINDOW_OPENGL); + + if (window_1 == NULL) { + SDL_Log("Error : SDL window 1 creation - %s\n", + SDL_GetError()); // échec de la création de la fenêtre + SDL_Quit(); // On referme la SDL + exit(EXIT_FAILURE); + } + + renderer = SDL_CreateRenderer(window_1, -1, + SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC); + if (renderer == NULL) {SDL_DestroyRenderer(renderer); // Attention : on suppose que les NULL sont maintenus !! + renderer = NULL; + SDL_DestroyWindow(window_1); + window_1 = NULL;}; + +} + +void dessiner_grille(SDL_Renderer* renderer, int **grille,int taille){ + + int i; + int j; + + for (i=0;i<taille;i++){ + for(j=0;j<taille;j++){ + + SDL_Rect rectangle= {10*i,10*j,10,10}; + + if (grille [i][j]==1){ + SDL_SetRenderDrawColor(renderer, + 0, 0, 0, // mode Red, Green, Blue (tous dans 0..255) + 255); + SDL_RenderFillRect(renderer, &rectangle);} + + else{ + SDL_SetRenderDrawColor(renderer, + 255, 255, 255, // mode Red, Green, Blue (tous dans 0..255) + 255); + SDL_RenderFillRect(renderer, &rectangle); + } + } + } +} + +void fin_sdl(SDL_Renderer* renderer,SDL_Window *window_1){ + SDL_DestroyRenderer(renderer); + renderer = NULL; + + SDL_DestroyWindow(window_1); + window_1 = NULL; + SDL_Quit(); + } \ No newline at end of file diff --git a/travail_individuel/Beret/jeu_de_la_vie/src/render.h b/travail_individuel/Beret/jeu_de_la_vie/src/render.h new file mode 100644 index 0000000..aa5d4ae --- /dev/null +++ b/travail_individuel/Beret/jeu_de_la_vie/src/render.h @@ -0,0 +1,11 @@ +#ifndef projet + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <SDL2/SDL.h> + +#endif +void init_sdl(SDL_Window *window_1 ,SDL_Renderer *renderer,int dimension_grille); +void dessiner_grille(SDL_Renderer* renderer, int ** grille, int taille); +void fin_sdl(SDL_Renderer* renderer,SDL_Window *window_1); \ No newline at end of file -- GitLab