Bonjour,
je vous écris ce message pour vous demander conseil.
Mon code ci dessous fonctionne parfaitement mais je voulais savoir s'il existait des "améliorations" dans les fonctions. J'ai cherché sur internet sans trouver mon bonheur.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
 
#include ...
 
#define EcranLarg 800
#define EcranHaut 600
 
#define couleurTexteVert (SDL_Color){0,255,0,0}
#define couleurTexteRouge (SDL_Color){250,0,0,0}
 
void initSDL(SDL_Surface **ecran)
{    ...   }
 
void  EcrireTexte(SDL_Surface *ecran, TTF_Font *police,char *mot, int positionY)
{
    SDL_Surface *texte=TTF_RenderText_Blended(police, mot, couleurTexteVert);
 
    SDL_Rect positionTexte= {100, positionY, 0, 0};//centrage du mot dans la zone de bouton
 
    SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
 
    SDL_Flip(ecran);
    SDL_FreeSurface(texte);
}
 
void  EcrireTexteRacourci(SDL_Surface *ecran, TTF_Font *police,char *mot, int positionY)
{
    SDL_Rect positionTexte= {100, positionY, 0, 0};//centrage du mot dans la zone de bouton
 
    SDL_BlitSurface(TTF_RenderText_Blended(police, mot, couleurTexteVert), NULL, ecran, &positionTexte);
 
    SDL_Flip(ecran);
}
 
void  EcrireTexteDecompose(SDL_Surface *ecran, TTF_Font *police,char *motDebut,char *motFin, int positionY)
{
    SDL_Surface *texteDebut=TTF_RenderText_Blended(police, motDebut, couleurTexteVert);
    SDL_Surface *texteFin=TTF_RenderText_Blended(police, motFin, couleurTexteRouge);
    SDL_Rect positionTexteDebut= {400, positionY, 0, 0};//centrage du mot dans la zone de bouton
    SDL_Rect positionTexteFin= {400, positionY, 0, 0};//centrage du mot dans la zone de bouton
 
    if(strcmp(motDebut,"")==0)
        positionTexteFin.x= positionTexteDebut.x;
    else
        positionTexteFin.x= positionTexteDebut.x+texteDebut->w;//centrage du mot dans la zone de bouton
 
    SDL_BlitSurface(texteDebut, NULL, ecran, &positionTexteDebut);
    SDL_BlitSurface(texteFin, NULL, ecran, &positionTexteFin);
 
    SDL_Flip(ecran);
    SDL_FreeSurface(texteDebut);
    SDL_FreeSurface(texteFin);
}
 
void  EcrireTexteEntierCaractere(SDL_Surface *ecran, TTF_Font *police,int NbMax, int positionY)
{
 
    int i;
    char texte[10];
    SDL_Surface *texteAAfficher=NULL;
    SDL_Rect positionTexte= {400, positionY, 0, 0};//centrage du mot dans la zone de bouton
 
    for (i=0; i<10; i++)
    {
        sprintf(texte, "%d", i);
        texteAAfficher=TTF_RenderText_Blended(police, texte, couleurTexteVert);
        positionTexte.x=positionTexte.x+texteAAfficher->w;
        SDL_BlitSurface(texteAAfficher, NULL, ecran, &positionTexte);
    }
 
    SDL_Flip(ecran);
    SDL_FreeSurface(texteAAfficher);
}
 
int main(int argc, char **argv)
{
    SDL_Surface *ecran=NULL;
    TTF_Font *police = NULL;//declaration de la police d'ecriture
 
    initSDL(&ecran);
    police = TTF_OpenFont("times.ttf", 30);//chargement de la police d'ecriture et de la taille
    if(police == NULL)
    {
        fprintf(stderr, "Erreur de police");
    }
 
    EcrireTexte(ecran, police, "Bonjour",100);//chargement du style et de la taille d'ecriture
    EcrireTexteRacourci(ecran, police, "Salut",200);//chargement du style et de la taille d'ecriture
    EcrireTexteDecompose(ecran, police, "Bien","tot",100);//chargement du style et de la taille d'ecriture
    EcrireTexteDecompose(ecran, police, "","Bravo",200);//chargement du style et de la taille d'ecriture
    EcrireTexteEntierCaractere(ecran, police,10,300);
 
    SDL_Delay(3000);
 
    TTF_CloseFont(police); // Fermeture de la police, doit être fermée avant TTF_Quit()
    TTF_Quit();
    SDL_Quit();
 
    return EXIT_SUCCESS;//on quitte le jeu avec succes
}
1ere amélioration souhaitée : j'ai vu dans un forum quelqu'un qui conseillait de passer la police en #define afin de ne pas la passer en paramètre à chaque fois, mais sans expliquer comment on fait.

2eme amélioration souhaitée : habituellement, j'affiche mon texte en utilisant la fonction "EcrireTexte" (méthode souvent vue dans le forum). Puis j'ai vu une fois quelqu'un qui la raccourcissait en utilisant la méthode de "EcrireTexteRacourci". Est-ce toujours applicable ? Est-ce pratique d'imbriquer directement le TTF_RenderText_Blended dans le SDL_BlitSurface sans définir le SDL_Surface *texte puis le SDL_FreeSurface(texte).

3eme amélioration souhaitée : l'idée est de coller les deux parties d'un mot coupés en 2 et d'afficher chaque partie d'une manière différente (couleur, gras italique, souligné...).
* La méthode "accélérée" ferait gagner quelque lignes (déclaration, free). Par contre comme je veux juxtaposer les deux parties, je ne serais plus capable de faire "positionTexteFin.x= positionTexteDebut.x+texteDebut->w;" car "texteDebut" n'existera plus , donc obligé d'utiliser la méthode normale ou existe-t-il une astuce?
* De plus si une des parties est vide "", j'ai constaté que dans ce cas "texteDebut->w" n'existait pas alors que je pensais qu'elle serait égale à 0. Est-ce normal? D'où les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
if(strcmp(motDebut,"")==0)
        positionTexteFin.x= positionTexteDebut.x;
    else
        positionTexteFin.x= positionTexteDebut.x+texteDebut->w;//centrage du mot dans la zone de bouton
N'y a-t-il pas une solution de remplacer cette comparaison par quelque chose de plus "simple"?

4eme amélioration souhaitée : je veux afficher une variable entier en texte.
Suis-je vraiment obligé d'utiliser texte et texteAAffiche? N'existe-t-il pas un raccourci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
    char texte[10];
    SDL_Rect positionTexte= {400, positionY, 0, 0};//centrage du mot dans la zone de bouton
    SDL_Surface *texteAAfficher=NULL;
 
    sprintf(texte, "%d", i);
    texteAAfficher=TTF_RenderText_Blended(police, texte, couleurTexteVert);
    SDL_BlitSurface(texteAAfficher, NULL, ecran, &positionTexte);
free()
Merci à tous ceux qui voudront bien prendre le temps de me répondre.
ludovic