Debug EndGameMenu

merge-requests/1/head
marouault 4 years ago
parent 0a9a214cc3
commit 544ea39083

@ -13,7 +13,7 @@
This file is meant to be modified (used only to called other tests functions)
*/
int main(/*int argc, char *argv[]*/) {
int main(int argc, char *argv[]) {
//testTextureLoader();
//testAudioHandler();
//testFontLoader();

@ -5,6 +5,11 @@
#include "model/Player.h"
#include "engine/FontLoader.h"
#include "engine/Button.h"
#include "engine/TextureLoader.h"
P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect);
void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, FontHandler* fontHandler);
#endif // MENU_FIN_INCLUDED

Binary file not shown.

Binary file not shown.

@ -9,7 +9,12 @@ TextLabel createTextLabel(const char text[], const SDL_Point* pos, const SDL_Col
.texture = NULL
};
label.text = (char*) malloc(sizeof(char)*strlen(text));
if (label.text == NULL) {
fprintf(stderr, "ERROR: allocation error (createTextLabel)\n");
fflush(stderr);
}
strcpy(label.text, text);
{
@ -18,11 +23,13 @@ TextLabel createTextLabel(const char text[], const SDL_Point* pos, const SDL_Col
if(surface == NULL)
{
fprintf(stderr, "WARNING: Can't write on TextLabel\n");
fflush(stderr);
}
label.texture = SDL_CreateTextureFromSurface(renderer, surface);
if(label.texture == NULL)
{
fprintf(stderr, "WARNING: Can't create texture from surface: %s\n", SDL_GetError());
fflush(stderr);
}
SDL_FreeSurface(surface);
@ -65,12 +72,26 @@ TextLabel createTextLabel(const char text[], const SDL_Point* pos, const SDL_Col
}
void freeTextLabel(TextLabel* label) {
free(label->text);
label->text = NULL;
if (label == NULL) return;
fprintf(stderr, "freeTextLabel begin\n");
fflush(stderr);
if (label->text != NULL){
free(label->text);
label->text = NULL;
}
fprintf(stderr, "textFreed\n");
fflush(stderr);
if (label->texture != NULL) {
SDL_DestroyTexture(label->texture);
label->texture = NULL;
fprintf(stderr, "textureFreed\n");
fflush(stderr);
}
fprintf(stderr, "freeTextLabel end\n");
fflush(stderr);
}
void drawTextLabel(SDL_Renderer* renderer, TextLabel* label) {

@ -2,45 +2,112 @@
#include <SDL2/SDL_ttf.h>
#include "engine/TextLabel.h"
P_Button createButtonForEndGameMenu(SDL_Renderer* renderer, TTF_Font* font, const SDL_Rect* rect) {
const SDL_Color black = {0,0,0,0};
const SDL_Color white = {255,255,255,255};
int sizeX;
int sizeY;
SDL_Texture* texture = createGenericButtonTexture("Retour menu", font, 14, black, white, 1, 4, &sizeX, &sizeY, renderer);
return createButton(texture, texture, rect->x, rect->y, sizeX, sizeY, NULL);
}
void drawTitle(SDL_Renderer* renderer, const SDL_Rect* rect, FontHandler* fontHandler) {
SDL_Point pos = {rect->x+rect->w/2, rect->y+rect->h/100};
SDL_Color color = {0,0,0,0};
TextLabel titre = createTextLabel("Scores", &pos, &color, fontHandler->fonts[FONT_retro], renderer, POSX_CENTER, POSY_TOP);
drawTextLabel(renderer, &titre);
freeTextLabel(&titre);
}
void drawPseudoAndRank(SDL_Renderer* renderer, const SDL_Rect* rect, const int height, TTF_Font* font, const SDL_Color* color, const size_t rank, const char *const pseudo) {
const SDL_Point posRangPseudo = {
.x = rect->x+rect->w*0.05,
.y = height
};
char *const text = (char*) malloc(sizeof(char)*(4+strlen(pseudo)));// potentialy one character wider than necesarry
if (text == NULL) {
fprintf(stderr,"allocation error\n");
fflush(stderr);
return;
}
sprintf(text, "%lld. %s", rank, pseudo);
TextLabel joueur = createTextLabel(text, &posRangPseudo, color, font, renderer, POSX_LEFT, POSY_TOP);
free(text);
drawTextLabel(renderer, &joueur);
freeTextLabel(&joueur);
}
void drawEliminationTurn(SDL_Renderer* renderer, const SDL_Rect* rect, const int height, TTF_Font* font, const SDL_Color* color, const int eliminationTurn) {
SDL_Point posTourElimination = {
.x = rect->x+rect->w*0.95,
.y = height
};
fprintf(stderr,"drawEliminationTurn 1 \n");
fflush(stderr);
char *const text = (char*) malloc(sizeof(char*) * 10);
if (text == NULL) {
fprintf(stderr,"allocation error\n");
fflush(stderr);
return;
}
fprintf(stderr,"drawEliminationTurn 2 \n");
fflush(stderr);
sprintf(text, "Tour: %d", eliminationTurn);
fprintf(stderr,"drawEliminationTurn 3 \n");
fflush(stderr);
TextLabel label = createTextLabel(text, &posTourElimination, color, font, renderer, POSX_RIGHT, POSY_TOP);
fprintf(stderr,"drawEliminationTurn 4 \n");
fflush(stderr);
free(text);
drawTextLabel(renderer, &label);
fprintf(stderr,"drawEliminationTurn 5 \n");
fflush(stderr);
freeTextLabel(&label);
fprintf(stderr,"drawEliminationTurn 6 \n");
fflush(stderr);
}
void drawPlayersScores(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, FontHandler* fontHandler) {
SDL_Color black = {0,0,0,0};
for (size_t i=0; i<nbPlayers; ++i) {
const int height = rect->y+(players[i].rank+1)*rect->h/10+rect->y+rect->h/100;
fprintf(stderr,"%lld\tBefore pseudo and rank\n", i);
fflush(stderr);
drawPseudoAndRank(renderer, rect, height, fontHandler->fonts[FONT_retro], &black, i, players[i].pseudo);
fprintf(stderr,"Between Before pseudo and rank and elimination turn\n");
fflush(stderr);
drawEliminationTurn(renderer, rect, height, fontHandler->fonts[FONT_retro], &black, players[i].eliminationTurn);
fprintf(stderr,"after elimination turn\n");
fflush(stderr);
}
}
void drawEndGameMenu(SDL_Renderer* renderer, const Player players[], const size_t nbPlayers, const SDL_Rect* rect, FontHandler* fontHandler) {
SDL_SetRenderDrawColor(renderer, 220,220,220,255);
SDL_RenderFillRect(renderer, rect);
{ // Titre
SDL_Point pos = {rect->x+rect->w/2, rect->y+rect->h/100};
SDL_Color color = {0,0,0,0};
TextLabel titre = createTextLabel("Scores", &pos, &color, fontHandler->fonts[FONT_retro], renderer, POSX_CENTER, POSY_TOP);
drawTextLabel(renderer, &titre);
freeTextLabel(&titre);
}
drawTitle(renderer, rect, fontHandler);
{// Joueurs
char* text;
for (size_t i=0; i<nbPlayers; ++i) {
SDL_Point pos = {rect->x+rect->w*0.05, rect->y+(players[i].rank+1)*rect->h/10+rect->y+rect->h/100};
SDL_Color color = {0,0,0,0};
text = (char*) realloc(text, sizeof(char)*(4+strlen(players[i].pseudo)));// potentialy one character wider than necesarry
sprintf(text, "%ld. %s", i, players[i].pseudo);
TextLabel joueur = createTextLabel(text, &pos, &color, fontHandler->fonts[FONT_retro], renderer, POSX_LEFT, POSY_TOP);
drawTextLabel(renderer, &joueur);
freeTextLabel(&joueur);
pos.x = rect->x+rect->w*0.95;
text = (char*) realloc(text, sizeof(char*) * 10);
sprintf(text, "Tour: %d", players[i].eliminationTurn);
joueur = createTextLabel(text, &pos, &color, fontHandler->fonts[FONT_retro], renderer, POSX_RIGHT, POSY_TOP);
drawTextLabel(renderer, &joueur);
freeTextLabel(&joueur);
}
free(text);
}
drawPlayersScores(renderer, players, nbPlayers, rect, fontHandler);
}

@ -5,104 +5,109 @@
#include "model/Player.h"
void testMenuEndGame() {
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
SDL_Texture* picture;
int statut = EXIT_FAILURE;
int i=0;
if(0 != SDL_Init(SDL_INIT_VIDEO))
{
fprintf(stderr, "Erreur SDL_INIT: %s\n", SDL_GetError());
goto Quit;
}
//fenetre
window = SDL_CreateWindow("Fenêtre", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640,480, SDL_WINDOW_SHOWN);
if(window == NULL)
{
fprintf(stderr, "Erreur SDL_CreateWindow: %s\n", SDL_GetError());
goto Quit;
}
//rendu
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
if(renderer == NULL)
{
fprintf(stderr, "Erreur SDL_CreateRenderer: %s\n", SDL_GetError());
goto Quit;
}
//Fonts
if(TTF_Init() == -1)
{
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
SDL_Texture* picture;
int statut = EXIT_FAILURE;
if(0 != SDL_Init(SDL_INIT_VIDEO))
{
fprintf(stderr, "Erreur SDL_INIT: %s\n", SDL_GetError());
goto Quit;
}
//fenetre
window = SDL_CreateWindow("Fenêtre", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640,480, SDL_WINDOW_SHOWN);
if(window == NULL)
{
fprintf(stderr, "Erreur SDL_CreateWindow: %s\n", SDL_GetError());
goto Quit;
}
//rendu
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);
if(renderer == NULL)
{
fprintf(stderr, "Erreur SDL_CreateRenderer: %s\n", SDL_GetError());
goto Quit;
}
//Fonts
if(TTF_Init() == -1)
{
fprintf(stderr, "Erreur: TTF_Init: %s\n", TTF_GetError());
goto Quit;
}
if(0 != SDL_SetRenderDrawColor(renderer, 0,0,0,0)) //choisi la couleur avec laquelle travailler
{
fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError());
goto Quit;
}
if(0 != SDL_RenderClear(renderer)) //efface le rendu en le repeignant avec la couleur choisi
{
fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError());
goto Quit;
}
if(0 != SDL_SetRenderDrawColor(renderer, 255,255,255,255)) //choisi la couleur avec laquelle travailler
{
fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError());
goto Quit;
}
SDL_bool quit = SDL_FALSE;
SDL_Event event;
FontHandler fontHandler = loadFonts();
SDL_RenderPresent(renderer);
while(!quit)
{
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
quit = SDL_TRUE;
break;
case SDL_MOUSEBUTTONUP:
break;
}
}
SDL_SetRenderDrawColor(renderer, 255,255,255,255);
SDL_RenderClear(renderer);
SDL_Rect rect = {.x=20, .y=0, .w=300, .h=480};
SDL_Color color = {0,0,0,0};
Player players[] = {newPlayer("Bépo", color), newPlayer("Azerty", color)};
players[0].eliminationTurn = 10;
players[1].eliminationTurn = 10;
players[0].rank = 1;
players[1].rank = 2;
drawEndGameMenu(renderer, players, 2, &rect, &fontHandler);
SDL_RenderPresent(renderer);
SDL_Delay(500);
++i;
SDL_Delay(20);
}
}
if(0 != SDL_SetRenderDrawColor(renderer, 0,0,0,0)) //choisi la couleur avec laquelle travailler
{
fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError());
goto Quit;
}
if(0 != SDL_RenderClear(renderer)) //efface le rendu en le repeignant avec la couleur choisi
{
fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError());
goto Quit;
}
if(0 != SDL_SetRenderDrawColor(renderer, 255,255,255,255)) //choisi la couleur avec laquelle travailler
{
fprintf(stderr, "Erreur SDL_SetRenderDrawColor: %s\n", SDL_GetError());
goto Quit;
}
bool quit = false;
FontHandler fontHandler = loadFonts();
SDL_RenderPresent(renderer);
SDL_Rect rectMenuEndGme = {.x=20, .y=0, .w=300, .h=480};
//P_Button buttonMenuEndGame = createButtonForEndGameMenu(renderer, fontHandler.fonts[FONT_retro], &rectMenuEndGme);
while(!quit)
{
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
fprintf(stderr, "Quit\n");
quit = true;
break;
}
}
}
SDL_SetRenderDrawColor(renderer, 255,255,255,255);
SDL_RenderClear(renderer);
SDL_Color color = {0,0,0,0};
Player players[] = {newPlayer("Bépo", color), newPlayer("Azerty", color)};
players[0].eliminationTurn = 10;
players[1].eliminationTurn = 10;
players[0].rank = 1;
players[1].rank = 2;
drawEndGameMenu(renderer, players, 2, &rectMenuEndGme, &fontHandler);
//drawButtonOnRenderer(renderer, &buttonMenuEndGame);
SDL_RenderPresent(renderer);
SDL_Delay(50);
fprintf(stderr, "Boucle\n");
fflush(stderr);
}
Quit:
freeFonts(fontHandler);
if(renderer != NULL)
SDL_DestroyRenderer(renderer);
if(window != NULL)
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
freeFonts(fontHandler);
//SDL_DestroyTexture(buttonMenuEndGame.texture);
if(renderer != NULL)
SDL_DestroyRenderer(renderer);
if(window != NULL)
SDL_DestroyWindow(window);
TTF_Quit();
SDL_Quit();
}

Loading…
Cancel
Save