diff --git a/travail_individuel/Belkhiri/GameOfLife/Res/background.png b/travail_individuel/Belkhiri/GameOfLife/Res/background.png new file mode 100755 index 0000000000000000000000000000000000000000..ce1617d38161087fdac873c90a2511d7c38677f9 Binary files /dev/null and b/travail_individuel/Belkhiri/GameOfLife/Res/background.png differ diff --git a/travail_individuel/Belkhiri/GameOfLife/map.txt b/travail_individuel/Belkhiri/GameOfLife/map.txt new file mode 100644 index 0000000000000000000000000000000000000000..5858bfb8de8f758990b661cf90de8f3e8d0e4d62 --- /dev/null +++ b/travail_individuel/Belkhiri/GameOfLife/map.txt @@ -0,0 +1,20 @@ +0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 +0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 +0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 +0 0 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 +0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 +0 0 0 1 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 +0 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 diff --git a/travail_individuel/Belkhiri/GameOfLife/run b/travail_individuel/Belkhiri/GameOfLife/run index cc9b9a76df8c962a5b219ba1b0f781bebca3ab35..5091a0fc6309b406237ba71628156f6fa53f0452 100755 Binary files a/travail_individuel/Belkhiri/GameOfLife/run and b/travail_individuel/Belkhiri/GameOfLife/run differ diff --git a/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c b/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c index 8b3a2d5894b9d81f214dd27bad46a1caf9cfc43b..a56b164917fbaec04ab02e89c3c1590a31197f91 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c +++ b/travail_individuel/Belkhiri/GameOfLife/src/gest_event.c @@ -39,17 +39,25 @@ void gestGame(){ running = 0; break; - case SDL_KEYUP: + case SDL_KEYDOWN: switch (event.key.keysym.sym) { case SDLK_x: running = 0; continue; + + case SDLK_RIGHT: + updateMap(map); + continue; + + case SDLK_s: + writeMap(map, "map.txt"); + printf("Saved map to map.txt\n"); default: continue; } - break; + continue; case SDL_MOUSEBUTTONDOWN: if (event.button.button == SDL_BUTTON_LEFT){ @@ -62,7 +70,7 @@ void gestGame(){ map[j][i] = !map[j][i]; } } - break; + continue; default: continue; diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.c b/travail_individuel/Belkhiri/GameOfLife/src/map.c index cb922b4765c5aed5624acf3bc05775e9abe57ac7..30a49ee806d1e71c952d8fffb9f1408ab6b8ccca 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/map.c +++ b/travail_individuel/Belkhiri/GameOfLife/src/map.c @@ -7,7 +7,7 @@ int map[MAPSIZE][MAPSIZE]; void initMap(int map[MAPSIZE][MAPSIZE]) { for(int i = 0; i < MAPSIZE; i++){ for(int j = 0; j < MAPSIZE; j++){ - map[i][j] = rand() % 2; + map[i][j] = 0; } } } @@ -20,4 +20,16 @@ void printMap(int map[MAPSIZE][MAPSIZE]){ } printf("\n"); } +} + + +void writeMap(int map[MAPSIZE][MAPSIZE], char* filename){ + FILE* f = fopen(filename, "w"); + for(int i = 0; i < MAPSIZE; i++){ + for(int j = 0; j < MAPSIZE; j++){ + fprintf(f, "%d ", map[i][j]); + } + fprintf(f, "\n"); + } + fclose(f); } \ No newline at end of file diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.h b/travail_individuel/Belkhiri/GameOfLife/src/map.h index 111b8545fc513e390c2d75b9c9f0fe61dd046b0a..b50040c93b8fa9ebed34986df1a5eaae64590376 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/map.h +++ b/travail_individuel/Belkhiri/GameOfLife/src/map.h @@ -8,5 +8,6 @@ extern int map[MAPSIZE][MAPSIZE]; void printMap(int map[MAPSIZE][MAPSIZE]); void initMap(int map[MAPSIZE][MAPSIZE]); +void writeMap(int map[MAPSIZE][MAPSIZE], char* filename); #endif \ No newline at end of file diff --git a/travail_individuel/Belkhiri/GameOfLife/src/render.c b/travail_individuel/Belkhiri/GameOfLife/src/render.c index 9889be58826005c54def13e958b8b02843bfa837..4d5a88bdebd808d7a50f416ee27a81154e8efb0c 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/render.c +++ b/travail_individuel/Belkhiri/GameOfLife/src/render.c @@ -15,6 +15,9 @@ SDL_Surface * playButtonSurface = NULL; SDL_Texture * columnTexture = NULL; SDL_Surface * columnSurface = NULL; +SDL_Texture * backgroundTexture = NULL; +SDL_Surface * backgroundSurface = NULL; + void CreateWindow(){ if (SDL_Init(SDL_INIT_VIDEO) != 0){ @@ -52,6 +55,11 @@ void drawBackground(){ SDL_RenderFillRect(renderer, &rect); } +void drawBackground2(){ + SDL_Rect rect = {0, 0, ScreenDimension.w, ScreenDimension.h}; + SDL_RenderCopy(renderer, backgroundTexture, NULL, &rect); +} + void drawTitle(){ int titleWidth, titleHeight; SDL_QueryTexture(titleTexture, NULL, NULL, &titleWidth, &titleHeight); @@ -93,7 +101,6 @@ void drawMap(int map[MAPSIZE][MAPSIZE]){ } void drawColumns(){ - // draw 2 columnTexture, 1 left 1 right int columnWidth, columnHeight; SDL_QueryTexture(columnTexture, NULL, NULL, &columnWidth, &columnHeight); int x_offset = ScreenDimension.w/2 - MAPSIZE*CELLSIZE/2; @@ -106,6 +113,7 @@ void drawColumns(){ void drawGame(){ SDL_RenderClear(renderer); drawBackground(); + drawBackground2(); drawMap(map); drawColumns(); SDL_RenderPresent(renderer); @@ -117,14 +125,17 @@ void MainLoop(){ titleSurface = IMG_Load("Res/title.png"); playButtonSurface = IMG_Load("Res/playButton.png"); columnSurface = IMG_Load("Res/column.png"); + backgroundSurface = IMG_Load("Res/background.png"); titleTexture = SDL_CreateTextureFromSurface(renderer, titleSurface); playButtonTexture = SDL_CreateTextureFromSurface(renderer, playButtonSurface); columnTexture = SDL_CreateTextureFromSurface(renderer, columnSurface); + backgroundTexture = SDL_CreateTextureFromSurface(renderer, backgroundSurface); SDL_FreeSurface(titleSurface); SDL_FreeSurface(playButtonSurface); SDL_FreeSurface(columnSurface); + SDL_FreeSurface(backgroundSurface); unsigned int a = SDL_GetTicks(); unsigned int b = SDL_GetTicks(); @@ -140,7 +151,6 @@ void MainLoop(){ a = SDL_GetTicks(); delta = (a - b); if (delta > 1/FPS_TO_GET){ - printf("fps : %f\n", 1000/delta); b = a; switch (game_state){ case MENU: diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.c b/travail_individuel/Belkhiri/GameOfLife/src/utility.c index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0fd5618855756ec723c6f15b952c6effd01ca6d5 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/utility.c +++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.c @@ -0,0 +1,39 @@ +#include "utility.h" + +int surviveRule[NB_RULES] = {0, 0, 1, 1, 0, 0, 0, 0, 0}; +int bornRule[NB_RULES] = {0, 0, 0, 1, 0, 0, 0, 0, 0}; + +int survivingNeighbors(int x, int y){ + int count = 0; + for(int i = -1; i <= 1; i++){ + for(int j = -1; j <= 1; j++){ + if(i == 0 && j == 0) continue; + if(map[(x+i+MAPSIZE)%MAPSIZE][(y+j+MAPSIZE)%MAPSIZE] == 1) count++; + } + } + return count; +} + + +void updateMap(){ + int newMap[MAPSIZE][MAPSIZE]; + for (int i=0; i<MAPSIZE; i++){ + for (int j=0; j<MAPSIZE; j++){ + int count = survivingNeighbors(j, i); + if (map[j][i] == 1){ + if (!surviveRule[count]) newMap[j][i] = 0; + else newMap[j][i] = 1; + } + else{ + if (bornRule[count]) newMap[j][i] = 1; + else newMap[j][i] = 0; + } + } + } + for (int i=0; i<MAPSIZE; i++){ + for (int j=0; j<MAPSIZE; j++){ + map[i][j] = newMap[i][j]; + } + } +} + diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.h b/travail_individuel/Belkhiri/GameOfLife/src/utility.h index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5d34b4b4e0f3f0122eec2cb91099b02b0de8dab0 100644 --- a/travail_individuel/Belkhiri/GameOfLife/src/utility.h +++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.h @@ -0,0 +1,13 @@ +#ifndef _UTILITY_H_ +#define _UTILITY_H_ + +#include "main.h" +#include "map.h" + + +#define NB_RULES 9 + +void updateMap(); + + +#endif \ No newline at end of file