Skip to content
Snippets Groups Projects
Commit fd3e7f43 authored by maberet's avatar maberet
Browse files

Ajout de prototype de Jeu_de la vie

parent 41475c4f
No related branches found
No related tags found
No related merge requests found
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
#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
#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;
}
}
#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);
#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
#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
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