diff --git a/travail_de_groupe/chef_oeuvre/Res/buttonPlayAgain.png b/travail_de_groupe/chef_oeuvre/Res/buttonPlayAgain.png new file mode 100755 index 0000000000000000000000000000000000000000..4e1a604f96562b6bca91838ac1883635d48bf792 Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/buttonPlayAgain.png differ diff --git a/travail_de_groupe/chef_oeuvre/Res/buttonPlayAgainHover.png b/travail_de_groupe/chef_oeuvre/Res/buttonPlayAgainHover.png new file mode 100755 index 0000000000000000000000000000000000000000..46d7bcfee768adfcd777e6ca100a7ac1b319cd0c Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/buttonPlayAgainHover.png differ diff --git a/travail_de_groupe/chef_oeuvre/Res/buttonQuit.png b/travail_de_groupe/chef_oeuvre/Res/buttonQuit.png new file mode 100755 index 0000000000000000000000000000000000000000..8f9dc4f7b4ad18067cebd082f37e13f28128efb1 Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/buttonQuit.png differ diff --git a/travail_de_groupe/chef_oeuvre/Res/buttonQuitHover.png b/travail_de_groupe/chef_oeuvre/Res/buttonQuitHover.png new file mode 100755 index 0000000000000000000000000000000000000000..3e9b2abd467c6f9b804cd0b07b190f7b901a4f7b Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/buttonQuitHover.png differ diff --git a/travail_de_groupe/chef_oeuvre/Res/heart_spritesheet.png b/travail_de_groupe/chef_oeuvre/Res/heart_spritesheet.png new file mode 100755 index 0000000000000000000000000000000000000000..b243a9e50a45d451682c1eaaaa598817e528ded9 Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/heart_spritesheet.png differ diff --git a/travail_de_groupe/chef_oeuvre/Res/lostScreen.png b/travail_de_groupe/chef_oeuvre/Res/lostScreen.png new file mode 100755 index 0000000000000000000000000000000000000000..bf802aa8b51dca40a8ac3daa9057f6e9be10ef28 Binary files /dev/null and b/travail_de_groupe/chef_oeuvre/Res/lostScreen.png differ diff --git a/travail_de_groupe/chef_oeuvre/src/gest_event.c b/travail_de_groupe/chef_oeuvre/src/gest_event.c index 92749b566d57083cf004fb92a5d554e70ce79845..3be92ab575620bc0026087a20c9d7a5250657cc2 100644 --- a/travail_de_groupe/chef_oeuvre/src/gest_event.c +++ b/travail_de_groupe/chef_oeuvre/src/gest_event.c @@ -53,7 +53,62 @@ void manageMenu(){ continue; } } - manageMovement(); + SDL_Delay(5); +} + +void manageLost(){ + SDL_Event event; + while (SDL_PollEvent(&event)){ + switch(event.type) + { + case SDL_QUIT: + running = 0; + break; + + case SDL_KEYUP: + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + running = 0; + continue; + + default: + continue; + } + break; + + case SDL_KEYDOWN: + switch (event.key.keysym.sym) + { + case SDLK_ESCAPE: + running = 0; + continue; + + default: + continue; + } + break; + + case SDL_MOUSEMOTION: + mousePosition.x = event.motion.x; + mousePosition.y = event.motion.y; + continue; + + + case SDL_MOUSEBUTTONDOWN: + if (SDL_PointInRect(&mousePosition, &playAgainButtonRect)){ + initAll(); + gameState = GAME; + } + if (SDL_PointInRect(&mousePosition, &quitButtonRect)){ + running = 0; + } + break; + + default: + continue; + } + } SDL_Delay(5); } @@ -140,7 +195,7 @@ void manageGame(){ continue; } } - manageMovement(); + updatePlayer(); SDL_Delay(5); } @@ -149,6 +204,7 @@ void *eventLoop(void *arg){ switch(gameState){ case MENU : manageMenu();break; case GAME : manageGame();break; + case LOSE : manageLost();break; default:printf("game state fault");break; } } diff --git a/travail_de_groupe/chef_oeuvre/src/main.h b/travail_de_groupe/chef_oeuvre/src/main.h index a898cd4a75c5e164e4781f6a28deec163f31c3b1..3604248fe8252e88ac6148f5c29f5e03f17cfe1c 100644 --- a/travail_de_groupe/chef_oeuvre/src/main.h +++ b/travail_de_groupe/chef_oeuvre/src/main.h @@ -23,6 +23,7 @@ #define MENU 0 #define GAME 1 +#define LOSE 2 extern int running; extern int gameState; diff --git a/travail_de_groupe/chef_oeuvre/src/player.c b/travail_de_groupe/chef_oeuvre/src/player.c index a722ebbb7dbefb4a4dd61dd59757a50e20193d90..5143e876b36472dabfc7b207a4a37cc9bae88bb9 100644 --- a/travail_de_groupe/chef_oeuvre/src/player.c +++ b/travail_de_groupe/chef_oeuvre/src/player.c @@ -200,4 +200,16 @@ void fillWater(int x, int y){ } } +void updatePlayer(){ + if (player.currentHP <= 0){ + gameState = LOSE; + } + manageMovement(); +} + +void initAll(){ + initFire(); + initPlayer(); +} + diff --git a/travail_de_groupe/chef_oeuvre/src/player.h b/travail_de_groupe/chef_oeuvre/src/player.h index b0b2253d9de191eb31765e0829459949a217cfc4..31e3e59271ea6a999caa92e5a7a3d0d9e7229f7a 100644 --- a/travail_de_groupe/chef_oeuvre/src/player.h +++ b/travail_de_groupe/chef_oeuvre/src/player.h @@ -34,5 +34,7 @@ int selectStateHover(); void pourWater(int, int); void fillWater(int, int); int giveCaseBelowPosition(int, int); +void updatePlayer(); +void initAll(); #endif \ No newline at end of file diff --git a/travail_de_groupe/chef_oeuvre/src/render.c b/travail_de_groupe/chef_oeuvre/src/render.c index b633e43b7b8aa4b64aa6db6fcc7ce424accbeae7..2654af017b237092a4e354031184085121f0d28c 100644 --- a/travail_de_groupe/chef_oeuvre/src/render.c +++ b/travail_de_groupe/chef_oeuvre/src/render.c @@ -10,6 +10,8 @@ TTF_Font *robotoFont; SDL_DisplayMode screenDimension; SDL_Rect buttonRect; +SDL_Rect playAgainButtonRect; +SDL_Rect quitButtonRect; SDL_Surface * grassSurface; SDL_Texture * grassTexture; @@ -35,12 +37,27 @@ SDL_Texture * backgroundTexture; SDL_Surface * backgroundSidesSurface; SDL_Texture * backgroundSidesTexture; +SDL_Surface * backgroundLostSurface; +SDL_Texture * backgroundLostTexture; + SDL_Surface * playButtonSurface; SDL_Texture * playButtonTexture; SDL_Surface * playButtonHoverSurface; SDL_Texture * playButtonHoverTexture; +SDL_Surface * playAgainButtonSurface; +SDL_Texture * playAgainButtonTexture; + +SDL_Surface * playAgainButtonHoverSurface; +SDL_Texture * playAgainButtonHoverTexture; + +SDL_Surface * quitButtonSurface; +SDL_Texture * quitButtonTexture; + +SDL_Surface * quitButtonHoverSurface; +SDL_Texture * quitButtonHoverTexture; + SDL_Surface * fireSurface; SDL_Texture * fireTexture; @@ -53,6 +70,9 @@ SDL_Texture * emptyBucketTexture; SDL_Surface * filledBucketSurface; SDL_Texture * filledBucketTexture; +SDL_Surface * heartSurface; +SDL_Texture * heartTexture; + SDL_Surface * scoreSurface; SDL_Texture * scoreTexture; @@ -65,7 +85,7 @@ void createWindow(){ SDL_GetCurrentDisplayMode(0, &screenDimension); - window = SDL_CreateWindow("Game Of Life", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, screenDimension.w, screenDimension.h, SDL_WINDOW_INPUT_GRABBED | SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN_DESKTOP); + window = SDL_CreateWindow("Mat the Firefighter", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, screenDimension.w, screenDimension.h, SDL_WINDOW_INPUT_GRABBED | SDL_WINDOW_SHOWN | SDL_WINDOW_FULLSCREEN_DESKTOP); if (window == NULL){ printf("Couldn't create window"); @@ -246,16 +266,24 @@ void drawPlayerHP(){ SDL_Rect rect; rect.h = borderWidth/player.HPMax; rect.w = rect.h; + SDL_Rect destRect; + destRect.w = 1024; + destRect.h = 1024; + destRect.x = destRect.w * (SDL_GetTicks()/200 % 4); + destRect.y = 0; int count = player.currentHP; for (int i=0; i<player.HPMax; i++){ rect.x = (i*rect.h); rect.y = screenDimension.h - 3 * rect.h; if (count){ count--; - SDL_RenderCopy(renderer, filledBucketTexture, NULL, &rect); + SDL_RenderCopy(renderer, heartTexture, &destRect, &rect); } else { - SDL_RenderCopy(renderer, emptyBucketTexture, NULL, &rect); + SDL_SetTextureColorMod( heartTexture,0,0,0); + SDL_RenderCopy(renderer, heartTexture, &destRect, &rect); + SDL_SetTextureColorMod( heartTexture,255,255,255); + } } } @@ -306,6 +334,20 @@ void drawGame(){ SDL_RenderPresent(renderer); } + +void drawLost(){ + SDL_Rect rect; + rect.h = screenDimension.h; + rect.w = screenDimension.w; + rect.x = 0; + rect.y = 0; + SDL_RenderCopy(renderer, backgroundLostTexture, NULL, &rect); + SDL_RenderCopy(renderer, playAgainButtonHoverTexture, NULL, &rect); + SDL_RenderCopy(renderer, quitButtonHoverTexture, NULL, &rect); + SDL_RenderCopy(renderer, playAgainButtonHoverTexture, NULL, &rect); + SDL_RenderPresent(renderer); +} + void mainLoop(){ createWindow(); initPlayer(); @@ -334,12 +376,27 @@ void mainLoop(){ backgroundSidesSurface = IMG_Load("Res/background_sides.png"); backgroundSidesTexture = SDL_CreateTextureFromSurface(renderer, backgroundSidesSurface); + backgroundLostSurface = IMG_Load("Res/lostScreen.png"); + backgroundLostTexture = SDL_CreateTextureFromSurface(renderer, backgroundLostSurface); + playButtonSurface = IMG_Load("Res/play_button.png"); playButtonTexture = SDL_CreateTextureFromSurface(renderer, playButtonSurface); playButtonHoverSurface = IMG_Load("Res/play_button_hover.png"); playButtonHoverTexture = SDL_CreateTextureFromSurface(renderer, playButtonHoverSurface); + quitButtonSurface = IMG_Load("Res/buttonQuit.png"); + quitButtonTexture = SDL_CreateTextureFromSurface(renderer, quitButtonSurface); + + quitButtonHoverSurface = IMG_Load("Res/buttonQuitHover.png"); + quitButtonHoverTexture = SDL_CreateTextureFromSurface(renderer, quitButtonHoverSurface); + + playAgainButtonSurface = IMG_Load("Res/buttonPlayAgain.png"); + playAgainButtonTexture = SDL_CreateTextureFromSurface(renderer, playAgainButtonSurface); + + playAgainButtonHoverSurface = IMG_Load("Res/buttonPlayAgainHover.png"); + playAgainButtonHoverTexture = SDL_CreateTextureFromSurface(renderer, playAgainButtonHoverSurface); + fireSurface = IMG_Load("Res/fire_spritesheet.png"); fireTexture = SDL_CreateTextureFromSurface(renderer, fireSurface); @@ -355,6 +412,11 @@ void mainLoop(){ scoreSurface = IMG_Load("Res/score.png"); scoreTexture = SDL_CreateTextureFromSurface(renderer, scoreSurface); + heartSurface = IMG_Load("Res/heart_spritesheet.png"); + heartTexture = SDL_CreateTextureFromSurface(renderer, heartSurface); + + + SDL_FreeSurface(grassSurface); SDL_FreeSurface(treeSurface); SDL_FreeSurface(hoverSurface); @@ -369,7 +431,22 @@ void mainLoop(){ SDL_FreeSurface(emptyBucketSurface); SDL_FreeSurface(filledBucketSurface); SDL_FreeSurface(scoreSurface); - + SDL_FreeSurface(backgroundLostSurface); + SDL_FreeSurface(playAgainButtonSurface); + SDL_FreeSurface(quitButtonSurface); + SDL_FreeSurface(quitButtonHoverSurface); + SDL_FreeSurface(playAgainButtonHoverSurface); + SDL_FreeSurface(heartSurface); + + playAgainButtonRect.x = (screenDimension.w * 700)/1920; + playAgainButtonRect.y = (screenDimension.h * 615)/1080; + playAgainButtonRect.w = (screenDimension.w * 400)/1920; + playAgainButtonRect.h = (screenDimension.h * 130)/1080; + + quitButtonRect.x = playAgainButtonRect.x; + quitButtonRect.w = playAgainButtonRect.w; + quitButtonRect.y = (screenDimension.h * 887)/1080; + quitButtonRect.h = playAgainButtonRect.h; unsigned int a = SDL_GetTicks(); unsigned int b = SDL_GetTicks(); @@ -399,6 +476,10 @@ void mainLoop(){ } drawGame(); break; + + case LOSE: + drawLost(); + break; } } else { diff --git a/travail_de_groupe/chef_oeuvre/src/render.h b/travail_de_groupe/chef_oeuvre/src/render.h index e48f6490fda5bab38584450152ee9c86df4130fd..a66e4e72c449a86699f7d63a720b45ca6bbfec39 100644 --- a/travail_de_groupe/chef_oeuvre/src/render.h +++ b/travail_de_groupe/chef_oeuvre/src/render.h @@ -12,6 +12,8 @@ extern SDL_Window *window; extern SDL_Renderer *renderer; extern SDL_DisplayMode screenDimension; extern SDL_Rect buttonRect; +extern SDL_Rect playAgainButtonRect; +extern SDL_Rect quitButtonRect; extern float timer; void drawHover(int x, int y);