Skip to content
Snippets Groups Projects
Commit 3855d640 authored by Taha Belkhiri's avatar Taha Belkhiri
Browse files

Merge branch 'main' of github.com:maberet/ProjetZZ1 into main

parents 1f2323f0 7b5842dd
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -8,13 +8,12 @@ int survie[TAILLE_TABLEAU_REGLES] = {0, 0, 1, 1, 0, 0, 0, 0, 0}; ...@@ -8,13 +8,12 @@ int survie[TAILLE_TABLEAU_REGLES] = {0, 0, 1, 1, 0, 0, 0, 0, 0};
int naissance[TAILLE_TABLEAU_REGLES] = {0, 0, 0, 1, 0, 0, 0, 0, 0}; int naissance[TAILLE_TABLEAU_REGLES] = {0, 0, 0, 1, 0, 0, 0, 0, 0};
SDL_Window *window; SDL_Window *window;
int width = 700; int width = 600;
int height = 700; int height = 700;
SDL_Renderer *renderer; SDL_Renderer *renderer;
SDL_Rect rect; SDL_Rect rect;
SDL_Event event; SDL_Event event;
int running = 1; int running = 1;
int tailleAffichage = 30;
int taille_monde_delimitee = 20; int taille_monde_delimitee = 20;
...@@ -55,7 +54,13 @@ void destroySDL2(){ ...@@ -55,7 +54,13 @@ void destroySDL2(){
SDL_Quit(); SDL_Quit();
} }
void initMonde(int monde[taille_monde_delimitee][taille_monde_delimitee]){ int quelleTaillePourLesCases(int divise, int diviseur){
int r;
r = divise/diviseur;
return r;
}
void initMonde(int ** monde){
int i = 0; int i = 0;
int j = 0; int j = 0;
...@@ -66,10 +71,9 @@ void initMonde(int monde[taille_monde_delimitee][taille_monde_delimitee]){ ...@@ -66,10 +71,9 @@ void initMonde(int monde[taille_monde_delimitee][taille_monde_delimitee]){
} }
} }
void afficheMonde(int monde[taille_monde_delimitee][taille_monde_delimitee]){ void afficheMonde(int ** monde){
int i = 0; int i = 0;
int j = 0; int j = 0;
for(i=0; i<taille_monde_delimitee; i++){ for(i=0; i<taille_monde_delimitee; i++){
for(j=0; j<taille_monde_delimitee; j++){ for(j=0; j<taille_monde_delimitee; j++){
switch(monde[i][j]){ switch(monde[i][j]){
...@@ -80,19 +84,19 @@ void afficheMonde(int monde[taille_monde_delimitee][taille_monde_delimitee]){ ...@@ -80,19 +84,19 @@ void afficheMonde(int monde[taille_monde_delimitee][taille_monde_delimitee]){
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
break; break;
default: default:
printf("Problème valeur tableau monde.\n"); printf("Problème valeur tableau monde. %d; %d\n", i, j);
break; break;
} }
rect.x = tailleAffichage*i; rect.x = quelleTaillePourLesCases(width, taille_monde_delimitee)*i;
rect.y = tailleAffichage*j; rect.y = quelleTaillePourLesCases(height, taille_monde_delimitee)*j;
rect.w = tailleAffichage-2; rect.w = quelleTaillePourLesCases(width, taille_monde_delimitee)-2;
rect.h = tailleAffichage-2; rect.h = quelleTaillePourLesCases(height, taille_monde_delimitee)-2;
SDL_RenderFillRect(renderer, &rect); SDL_RenderFillRect(renderer, &rect);
} }
} }
} }
void afficherEcran(int monde[taille_monde_delimitee][taille_monde_delimitee]){ void afficherEcran(int ** monde){
SDL_SetRenderDrawColor(renderer, 0, 16, 158, 0); SDL_SetRenderDrawColor(renderer, 0, 16, 158, 0);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
...@@ -102,9 +106,9 @@ void afficherEcran(int monde[taille_monde_delimitee][taille_monde_delimitee]){ ...@@ -102,9 +106,9 @@ void afficherEcran(int monde[taille_monde_delimitee][taille_monde_delimitee]){
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
} }
void changeCellule(int monde[taille_monde_delimitee][taille_monde_delimitee], int clic_x, int clic_y){ void changeCellule(int ** monde, int clic_x, int clic_y){
int ligne = clic_y/tailleAffichage; int ligne = clic_y/quelleTaillePourLesCases(height, taille_monde_delimitee);
int colonne = clic_x/tailleAffichage; int colonne = clic_x/quelleTaillePourLesCases(width, taille_monde_delimitee);
if(0 == monde[colonne][ligne]){ if(0 == monde[colonne][ligne]){
monde[colonne][ligne] = 1; monde[colonne][ligne] = 1;
}else{ }else{
...@@ -112,7 +116,7 @@ void changeCellule(int monde[taille_monde_delimitee][taille_monde_delimitee], in ...@@ -112,7 +116,7 @@ void changeCellule(int monde[taille_monde_delimitee][taille_monde_delimitee], in
} }
} }
int nombreVoisinsVivants(int monde[taille_monde_delimitee][taille_monde_delimitee], int cel_x, int cel_y){ int nombreVoisinsVivants(int ** monde, int cel_x, int cel_y){
int nbrVoisinsVivants = 0; int nbrVoisinsVivants = 0;
if(cel_x==0 && cel_y==0){ if(cel_x==0 && cel_y==0){
nbrVoisinsVivants = monde[cel_x+1][cel_y] + monde[cel_x][cel_y+1] + monde[cel_x+1][cel_y+1]; nbrVoisinsVivants = monde[cel_x+1][cel_y] + monde[cel_x][cel_y+1] + monde[cel_x+1][cel_y+1];
...@@ -137,7 +141,7 @@ int nombreVoisinsVivants(int monde[taille_monde_delimitee][taille_monde_delimite ...@@ -137,7 +141,7 @@ int nombreVoisinsVivants(int monde[taille_monde_delimitee][taille_monde_delimite
return nbrVoisinsVivants; return nbrVoisinsVivants;
} }
void reglesEvolutions(int monde[taille_monde_delimitee][taille_monde_delimitee]){ void reglesEvolutions(int ** monde){
int i = 0; int i = 0;
int j = 0; int j = 0;
...@@ -170,16 +174,21 @@ void reglesEvolutions(int monde[taille_monde_delimitee][taille_monde_delimitee]) ...@@ -170,16 +174,21 @@ void reglesEvolutions(int monde[taille_monde_delimitee][taille_monde_delimitee])
} }
} }
void chargeNiveauFichier(char *nom_fichier, int monde[taille_monde_delimitee][taille_monde_delimitee]){ void chargeNiveauFichier(char *nom_fichier, int ** monde, int nbrLigne){
FILE *fichier = NULL; FILE *fichier = NULL;
int valeur; int valeur;
int ligne = -1; int ligne = -1;
int colonne = 0; int colonne = 0;
fichier = fopen(nom_fichier, "r"); fichier = fopen(nom_fichier, "r");
if(fichier != NULL){ if(fichier != NULL){
while(fscanf(fichier, "%d", &valeur) != EOF){ while(fscanf(fichier, "%d", &valeur) != EOF){
if(ligne == -1){ if(ligne == -1){
taille_monde_delimitee = valeur; taille_monde_delimitee = valeur;
if(taille_monde_delimitee != nbrLigne){
printf("PROBLEME DE DIMENSION\n");
return;
}
ligne = 0; ligne = 0;
}else{ }else{
monde[colonne][ligne] = valeur; monde[colonne][ligne] = valeur;
...@@ -204,11 +213,22 @@ int main(int argc, char** argv) { ...@@ -204,11 +213,22 @@ int main(int argc, char** argv) {
taille_monde_delimitee = atoi(argv[1]); taille_monde_delimitee = atoi(argv[1]);
} }
int monde[taille_monde_delimitee][taille_monde_delimitee]; int ** monde;
monde = malloc(taille_monde_delimitee*sizeof(int*));
for(int i = 0; i < taille_monde_delimitee; ++i)
{
monde[i] = malloc(taille_monde_delimitee*sizeof(int));
}
initSDL2(); initSDL2();
initMonde(monde); if(argc < 3){
initMonde(monde);
}else if(argc == 3){
chargeNiveauFichier(argv[2], monde, atoi(argv[1]));
}
while (running) { while (running) {
while (SDL_PollEvent(&event)){ while (SDL_PollEvent(&event)){
...@@ -224,6 +244,9 @@ int main(int argc, char** argv) { ...@@ -224,6 +244,9 @@ int main(int argc, char** argv) {
height = event.window.data2; height = event.window.data2;
printf("Size : %d%d\n", width, height); printf("Size : %d%d\n", width, height);
break; break;
default:
afficherEcran(monde);
break;
} }
break; break;
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONDOWN:
...@@ -238,7 +261,7 @@ int main(int argc, char** argv) { ...@@ -238,7 +261,7 @@ int main(int argc, char** argv) {
break; break;
case SDLK_c: case SDLK_c:
printf("charge niveau.txt...\n"); printf("charge niveau.txt...\n");
chargeNiveauFichier("niveau.txt", monde); initMonde(monde);
break; break;
default: default:
printf("une touche est tapee\n"); printf("une touche est tapee\n");
......
...@@ -2,7 +2,12 @@ CC=gcc ...@@ -2,7 +2,12 @@ CC=gcc
main:main.o main:main.o
$(CC) -o main main.o -lm -lSDL2 $(CC) -o main main.o -lm -lSDL2
@echo "=> Lancer le programme avec ./main" @echo "=> Lancer le programme avec : ./main --taille --fichier"
@echo "=> Flèche de droite : avance la simulation"
@echo "=> Touche c : vide la grille"
@echo "exemple : ./main (grille de 20x20)"
@echo "exemple : ./main 30 (grille de 30x30)"
@echo "exemple : ./main 20 niveau.txt (grille de 20x20 chargé depuis niveau.txt)"
main.o:main.c main.o:main.c
$(CC) -c main.c -g -Wall -Wextra $(CC) -c main.c -g -Wall -Wextra
......
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