Commit e1a00a2b authored by Valentin MEUNIER's avatar Valentin MEUNIER
Browse files

timer ecran de fin menu pause

parent fff43626
......@@ -218,7 +218,7 @@ void afficherImageBrouillard(SDL_Renderer *renderer,SDL_Window *window,int **tab
voisin[5]=x+P*y-P-1;
}
if (x<P-1){
if (((tab[x][y] & FLAG_N) && (tab[x+1][y-1] & FLAG_E )) || ((tab[x][y] & FLAG_E) && (tab[x][y-1] & FLAG_N)))
if (((tab[x][y] & FLAG_N) && (tab[x][y-1] & FLAG_E )) || ((tab[x][y] & FLAG_E) && (tab[x+1][y] & FLAG_N)))
voisin[6]=x+P*y-P+1;
}
}
......@@ -247,6 +247,15 @@ void afficherImageBrouillard(SDL_Renderer *renderer,SDL_Window *window,int **tab
}
}
free(voisin);
SDL_Rect rectangle, window_dimensions={0};
SDL_SetRenderDrawBlendMode(renderer,SDL_BLENDMODE_BLEND);
SDL_SetRenderDrawColor(renderer, 0,0,0,150);
SDL_GetWindowSize(window, &window_dimensions.w, &window_dimensions.h);
rectangle.x=0;
rectangle.y=0;
rectangle.w=window_dimensions.w;
rectangle.h=window_dimensions.h;
SDL_RenderFillRect(renderer,&rectangle);
}
......
......@@ -15,7 +15,7 @@ void affichage_txt(SDL_Window *window,SDL_Renderer *renderer)
SDL_Color color = {230, 200, 0, 255}; // la couleur du texte
SDL_Surface* text_surface = NULL; // la surface (uniquement transitoire)
text_surface = TTF_RenderText_Blended(font, "Vous avez atteint votre maman !", color); // création du texte dans la surface
text_surface = TTF_RenderText_Blended(font, "Vous avez atteint votre maman ! (:", color); // création du texte dans la surface
if (text_surface == NULL) exit(EXIT_FAILURE);
......@@ -26,8 +26,8 @@ void affichage_txt(SDL_Window *window,SDL_Renderer *renderer)
SDL_FreeSurface(text_surface); // la texture ne sert plus à rien
SDL_QueryTexture(text_texture, NULL, NULL, &pos.w, &pos.h); // récupération de la taille (w, h) du texte
pos.x= (window_dimensions.w-pos.w)/4;
pos.y= 0;
pos.x= (window_dimensions.w-pos.w)/2;
pos.y= (window_dimensions.h-pos.h)/2;
SDL_RenderCopy(renderer, text_texture, NULL, &pos); // Ecriture du texte dans le renderer
SDL_DestroyTexture(text_texture);
......@@ -51,25 +51,134 @@ void affichage_txt_pause(SDL_Window *window,SDL_Renderer *renderer)
SDL_Color color = {230, 200, 0, 255}; // la couleur du texte
SDL_Surface* text_surface = NULL; // la surface (uniquement transitoire)
SDL_Surface* text_surface1 = NULL; // la surface (uniquement transitoire)
SDL_Surface* text_surface2 = NULL; // la surface (uniquement transitoire)
SDL_Surface* text_surface3 = NULL; // la surface (uniquement transitoire)
text_surface = TTF_RenderText_Blended(font, "pause\n", color); // création du texte dans la surface
text_surface = TTF_RenderText_Blended(font, "p :pause\n", color); // création du texte dans la surface
text_surface1 = TTF_RenderText_Blended(font, "m : afficher minimap\n", color); // création du texte dans la surface
text_surface2 = TTF_RenderText_Blended(font, "l : relancer \n", color); // création du texte dans la surface
text_surface3 = TTF_RenderText_Blended(font, "r : appliquer dijkstra\n", color); // création du texte dans la surface
if (text_surface == NULL) exit(EXIT_FAILURE);
if (text_surface1 == NULL) exit(EXIT_FAILURE);
if (text_surface2 == NULL) exit(EXIT_FAILURE);
if (text_surface3 == NULL) exit(EXIT_FAILURE);
SDL_Texture* text_texture = NULL; // la texture qui contient le texte
SDL_Texture* text_texture1 = NULL; // la texture qui contient le texte
SDL_Texture* text_texture2 = NULL; // la texture qui contient le texte
SDL_Texture* text_texture3 = NULL; // la texture qui contient le texte
text_texture = SDL_CreateTextureFromSurface(renderer, text_surface); // transfert de la surface à la texture
text_texture1 = SDL_CreateTextureFromSurface(renderer, text_surface1); // transfert de la surface à la texture
text_texture2 = SDL_CreateTextureFromSurface(renderer, text_surface2); // transfert de la surface à la texture
text_texture3 = SDL_CreateTextureFromSurface(renderer, text_surface3); // transfert de la surface à la texture
if (text_texture == NULL) exit(EXIT_FAILURE);
SDL_FreeSurface(text_surface); // la texture ne sert plus à rien
if (text_texture1 == NULL) exit(EXIT_FAILURE);
if (text_texture2 == NULL) exit(EXIT_FAILURE);
if (text_texture3 == NULL) exit(EXIT_FAILURE);
SDL_QueryTexture(text_texture, NULL, NULL, &pos.w, &pos.h); // récupération de la taille (w, h) du texte
pos.x= (window_dimensions.w-pos.w)/4;
pos.y= 0;
pos.y= 0;
SDL_RenderCopy(renderer, text_texture, NULL, &pos); // Ecriture du texte dans le renderer
SDL_QueryTexture(text_texture1, NULL, NULL, &pos.w, &pos.h); // récupération de la taille (w, h) du texte
pos.x= (window_dimensions.w-pos.w)/4;
pos.y+= pos.h +10;
SDL_RenderCopy(renderer, text_texture1, NULL, &pos); // Ecriture du texte dans le renderer
SDL_QueryTexture(text_texture2, NULL, NULL, &pos.w, &pos.h); // récupération de la taille (w, h) du texte
pos.x= (window_dimensions.w-pos.w)/4;
pos.y+= pos.h+10;
SDL_RenderCopy(renderer, text_texture2, NULL, &pos); // Ecriture du texte dans le renderer
SDL_QueryTexture(text_texture3, NULL, NULL, &pos.w, &pos.h); // récupération de la taille (w, h) du texte
pos.x= (window_dimensions.w-pos.w)/4;
pos.y+= pos.h+10;
SDL_RenderCopy(renderer, text_texture3, NULL, &pos); // Ecriture du texte dans le renderer
SDL_DestroyTexture(text_texture);
SDL_FreeSurface(text_surface); // la texture ne sert plus à rien
SDL_DestroyTexture(text_texture1);
SDL_FreeSurface(text_surface1); // la texture ne sert plus à rien
SDL_DestroyTexture(text_texture2);
SDL_FreeSurface(text_surface2); // la texture ne sert plus à rien
SDL_DestroyTexture(text_texture3);
SDL_FreeSurface(text_surface3); // la texture ne sert plus à rien
TTF_CloseFont(font);
TTF_Quit();
//ne pas oublier le TTF_Quit() dans le programme principal
}
void timer(SDL_Window * window, SDL_Renderer * renderer, int compteur)
{
SDL_Rect window_dimensions = {0}, pos = {0, 0, 0, 0};
SDL_GetWindowSize(window,&window_dimensions.w,&window_dimensions.h);
if (TTF_Init() < 0) exit(EXIT_FAILURE);
TTF_Font* font = NULL; // la variable 'police de caractère'
font = TTF_OpenFont("Pacifico.ttf", 65); // La police à charger, la taille désirée
if (font == NULL) exit(EXIT_FAILURE);
char * temps=malloc(10*sizeof(char));
SDL_Color color = {230, 200, 0, 255}; // la couleur du texte
SDL_Surface* text_surface = NULL; // la surface (uniquement transitoire)
sprintf(temps,"%d",compteur);
text_surface = TTF_RenderText_Solid(font, temps , color);
if (text_surface == NULL) exit(EXIT_FAILURE);
SDL_Texture* text_texture = NULL; // la texture qui contient le texte
text_texture = SDL_CreateTextureFromSurface(renderer, text_surface); // transfert de la surface à la texture
if (text_texture == NULL) exit(EXIT_FAILURE);
SDL_FreeSurface(text_surface); // la texture ne sert plus à rien
SDL_QueryTexture(text_texture, NULL, NULL, &pos.w, &pos.h); // récupération de la taille (w, h) du texte
pos.x= window_dimensions.w-pos.w;
pos.y= 0;
SDL_RenderCopy(renderer, text_texture, NULL, &pos); // Ecriture du texte dans le renderer
SDL_DestroyTexture(text_texture);
TTF_CloseFont(font);
TTF_Quit();
free(temps);
}
void affichage_txt_perdu(SDL_Window * window, SDL_Renderer * renderer)
{
SDL_Rect window_dimensions = {0}, pos = {0, 0, 0, 0};
SDL_GetWindowSize(window,&window_dimensions.w,&window_dimensions.h);
if (TTF_Init() < 0) exit(EXIT_FAILURE);
TTF_Font* font = NULL; // la variable 'police de caractère'
font = TTF_OpenFont("Pacifico.ttf", 65); // La police à charger, la taille désirée
if (font == NULL) exit(EXIT_FAILURE);
SDL_Color color = {230, 200, 0, 255}; // la couleur du texte
SDL_Surface* text_surface = NULL; // la surface (uniquement transitoire)
text_surface = TTF_RenderText_Blended(font, "Oh non!!! Vous n'avez pas retrouve votre maman :(" , color);
if (text_surface == NULL) exit(EXIT_FAILURE);
SDL_Texture* text_texture = NULL; // la texture qui contient le texte
text_texture = SDL_CreateTextureFromSurface(renderer, text_surface); // transfert de la surface à la texture
if (text_texture == NULL) exit(EXIT_FAILURE);
SDL_FreeSurface(text_surface); // la texture ne sert plus à rien
SDL_QueryTexture(text_texture, NULL, NULL, &pos.w, &pos.h); // récupération de la taille (w, h) du texte
pos.x= window_dimensions.w/2 -pos.w/2;
pos.y= window_dimensions.h/2 -pos.h/2;
SDL_RenderCopy(renderer, text_texture, NULL, &pos); // Ecriture du texte dans le renderer
SDL_DestroyTexture(text_texture);
TTF_CloseFont(font);
TTF_Quit();
}
......@@ -5,5 +5,7 @@
#include <SDL2/SDL_ttf.h>
void affichage_txt(SDL_Window *window,SDL_Renderer *renderer);
void affichage_txt_pause(SDL_Window *window,SDL_Renderer *renderer);
void affichage_txt_perdu(SDL_Window *window,SDL_Renderer *renderer);
void timer(SDL_Window * window,SDL_Renderer * renderer, int timer);
#endif
......@@ -79,6 +79,7 @@ int * dijkstra(int ** laby, int noeuds, int depart)
}
free(distance);
free(voisin);
free(indice_valeur);
liberer(tas);
return parent;
......
......@@ -169,6 +169,9 @@ int main (int argc, char** argv)
int affiche_carte=0;
int dijkstra_ok=0;
int premier=1;
int temps_fin=20;
int perdu=0;
int compteur=0;
int * minimap=malloc((TAILLE+1)*sizeof(int));
for (int iter=0;iter<TAILLE+1;iter++)
minimap[iter]=0;
......@@ -183,6 +186,8 @@ int main (int argc, char** argv)
minimap[minimap[0]]=noeud_actuel;
if (noeud_actuel==noeud_arrive)
fin_mama=1;
if (temps_fin==0)
perdu=1;
while (SDL_PollEvent(&event))
{
switch (event.type)
......@@ -227,8 +232,6 @@ int main (int argc, char** argv)
if (premier){
tab_parents=dijkstra(tab,graph->noeuds,noeud_arrive);
premier=0;}
if (noeud_actuel==noeud_arrive && temps==1)
free(tab_parents);
if(tab_parents[noeud_actuel]/P==(noeud_actuel/P)-1){
if (right){
play_with_elve_N(texture_elve,texture,window,renderer,pos_x,pos_y,deplacement,zoom,tab,taille_cell,texture_fin,noeud_arrive);
......@@ -318,7 +321,7 @@ int main (int argc, char** argv)
{
affiche_carte=0;
SDL_RenderClear(renderer);
temps=0;
temps=1;
}
}
if (relancer && !pause)
......@@ -339,9 +342,16 @@ int main (int argc, char** argv)
minimap[1]=pos_y*P/taille_cell+pos_x/taille_cell;
}
else if (!pause && !affiche_carte)
if (!pause && !affiche_carte)
{
compteur+=30;
SDL_RenderClear(renderer2);
if (compteur>1000 && temps_fin>0)
{
temps_fin-=1;
compteur-=1000;
}
timer(window2, renderer2,temps_fin);
for (int iter=1;iter<minimap[0];iter++)
{
peindreMap(texture2,window2,renderer2,minimap[iter],taille_cell2,tab);
......@@ -362,6 +372,7 @@ int main (int argc, char** argv)
play_with_elve_N_l(texture_elve_reverse,texture,window,renderer,pos_x,pos_y,deplacement,zoom,tab,taille_cell,texture_fin,noeud_arrive);
pos_y=pos_y-deplacement;
stand=0;
compteur+=100;
}
}
if ((keystates[SDL_SCANCODE_DOWN]||keystates[SDL_SCANCODE_S]))
......@@ -375,6 +386,7 @@ int main (int argc, char** argv)
play_with_elve_S_l(texture_elve_reverse,texture,window,renderer,pos_x,pos_y,deplacement,zoom,tab,taille_cell,texture_fin,noeud_arrive);
pos_y=pos_y+deplacement;
stand=0;
compteur+=100;
}
}
if ((keystates[SDL_SCANCODE_LEFT]||keystates[SDL_SCANCODE_A]))
......@@ -386,6 +398,7 @@ int main (int argc, char** argv)
pos_x=pos_x-deplacement;
stand=0;
right=0;
compteur+=100;
}
}
if ((keystates[SDL_SCANCODE_RIGHT]||keystates[SDL_SCANCODE_D]))
......@@ -397,6 +410,7 @@ int main (int argc, char** argv)
pos_x=pos_x+deplacement;
stand=0;
right=1;
compteur+=100;
}
}
if (right)
......@@ -460,6 +474,13 @@ int main (int argc, char** argv)
affiche_carte=0;
affichage_txt_pause(window, renderer);
}
if (perdu)
{
affichage_txt_perdu(window,renderer);
temps++;
if (temps>50)
running=0;
}
SDL_Delay(30);
SDL_RenderPresent(renderer);
}
......@@ -473,6 +494,8 @@ int main (int argc, char** argv)
free(minimap);
free(graph->liste);
free(graph);
if (dijkstra_ok)
free(tab_parents);
for (int i=0; i<P; i++)
free(tab[i]);
free(tab);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment