code minimal #include <stdio.h> #include <stdlib.h> int main() { printf("Hello world!

\n"); return 0; }

remarque: int main(int argc, char *argv[]) ======= int main() #include <stdio.h> #include <stdlib.h> directives de préprocesseur return 0; succés affichage : printf("texte"); * \n : retour à la ligne (= "Entrée") * \t : tabulation // commentaire /*commentaire Sur plusieurs lignes */

char, int, long nombres entiers loat, double nombres décimaux remarque : unsigned char 0 à 255 unsigned int 0 à 4 294 967 295 unsigned long 0 à 4 294 967 295

declaration variable : int nom_variable; double nom_variable2; plusieurs : int nombreDeVies, niveau, ageDuJoueur; affectation '=' : nombreDeVies = 5; initialisation + affectation : int nombreDeVies = 5; declaration + initialisation constante : const int nom_constante = 5; afficher afficher afficher afficher : printf("texte",variable); entier : printf("Il vous reste %d ", nom_var); decimal : printf("Il vous reste %f ", nom_var); plusieurs : printf("Vous avez %d niveau n°%d", nom_var1, nom_var2);

recuperé saisie entier : scanf("%d", &age); recuperé saisie entier : scanf("%lf", &taille);

* * * * *

Addition : + Soustraction : Multiplication : * Division : / 5/2 = 2 meme declaré double ==> 5.0 / 2.0 = 2.500000000 Modulo : %

h> valeur absolue:fabs(nomb re). puissance). puissance : pow(nombre. case 6: instruction. arondi au dessus = ceil(nombre). arondi au dessous = floor(nombre). break. break. case 68: instruction. break. decrementation : nom_var --. + sin cos tan aco s asin atan log log10 exp renvoi des doubles symbole : egal "==" inf sup inf ou egal sup ou egal et "&&" ou" " non"!" if (condition ) { // Instructions à exécuter si la condition est vraie } else if (condition) { // Instructions à exécuter si la condition est vraie } else { // Instructions à exécuter si la condition est vraie } remarque: en c il n'y a pas de variable booleen donc int majeur >=18) switch (age) { case 2: instruction. break. %= 3. += 4. different de "!=" exemple majeur = (age . break. racine : sqrt(nombre). /= 3.incrementation : nom_var autre racourcit : nombre nombre nombre nombre nombre ++. -= 3. break. inclure la bibliotheque mathématique : #include <math. case 18: instruction. break. *= 5. case 16: instruction. default: instruction. case 12: instruction.

etc) nom_var elle conservera son ancienne valeur une fonction n'est accessible que par son fichier si on la precede par static .c variable global par fichier : static int (double.' on les regroupe dan s les .h avec #include "nom-fich. if else nom_var = (condition ) ? valeur1 : valeur2. return nom_var.char etc) nom_var variable de fonction non supprimé : static int (double. } while (condition).c les utilisant et le main.h on inclut les .h" et ceci dans les . } #include <time. incrementation) { instruction.char. (le variable meme type que la fonction) } type c'est la sortie void si ne renvoi rien int long char double etc le prototype est la declaration d'une fonction suivit de '. condition . initialiser le générateur de nombre aléatoires et srand(time(NULL)) fonctions : type nomFonction(parametres) { instructions.} condition ternaire boucles: while (Condition ) { // Instructions à répéter } do { instruction. for (initialisation.h> : util pour les nombre aleatoire .

V2..char) nom_tableau[nbr de case] nom_tableau [n°case] = valeur tableau c'est un pointeur ie tableau[0] = valeur ou *tableau = valeur tableau[2] = valeur = *(tableau + 2) intialisation : boucle Tableau[i]= valeur ou int tableau[nbr case] = {v1.&nom_var) utiliser les fonctions de chaine : #include <string. il fau mettre a jour le prototype aussi les ptrs: afficher adresse %P (hexa) %d (decimal) et &nom_var declaration int (double.nom_var") lecture scanf("%c". : char* strcpy(char* copieDeLaChaine. c'est-à-dire qu'elle renvoie l'adresse de ce caractère dans la mémoire.exp : static int triple (int) . retourne 0 si egal : size_t strlen(const char* chaine). strcmp : comparer 2 chaînes st char* chaine2). variante Il existe une fonction strrchr strictement identique à strchr.double.char. .&nom_var) chaine de charactere : char nom_chaine[taille] remarque taille = nbr de caractere + 1 car la chaine se termine par ###BOT_TEXT### declaration chaine : char nom_chaine[] = "la chaine" le taille sera automatiqu e affichage printf("%s".h> strlen : calculer la longueur d'une chaîne strcpy : copier une chaîne dans une autre const char* chaineACopier). Elle renv oie NULL si elle n'a rien trouvé. : char* strcat(char* chaine1.etc} remarque si le nombre de valeur < au nbr de case les suivantes recevront 0 declaration caractere +initialisation : char nom_var = 'caractere' affichage printf("%c". remarque : La fonction renvoie un pointeur vers le premier caractère qu'elle a t rouvé.nom_var") lecture scanf("%s". con strchr : rechercher un caractère : char* strchr(const char* chaine. in t caractereARechercher).long) *nom_pointeur meme type que la variable pointé declaration + affectation int *nom_pointeur = NULL affectation nom_pointeur = &nom_var affichage : afficher contenu du pointé %d (%f) *nom_pointeur les tableau : declaration affectation int (long. strcat : concaténer 2 chaînes r* chaine2). sauf que c elle-là renvoie un pointeur vers le dernier caractère qu'elle a trouvé dans la chaîne au lieu du premier .. const cha : int strcmp(const char* chaine1.

comme les autres elle renvoi le pointeur de la chaine quan recherche si elle exi ste et NULL sinon sprintf : écrire dans une chaîne exp: sprintf(chaine. Toutes les règles du printf s'appliquent.strpbrk : premier caractère de la liste : char* strpbrk(const char* chaine. on peut mettre plusieur ligne au macro separées par \ exp : #define RACONTER_SA_VIE() printf("Coucou. \ printf("J'aime la glisse\n"). \ printf("J'habite a Nice\n").h.h se trouvant dans le dossier où est installé votre IDE inclure un fichier . "Tu as %d ans !". à côté des prototypes remarque : les defines contrairement au constante sont remplacé dans toutes les fo nctions du fichier Il est possible de faire quelques petits calculs dans les defines exp : #define LARGEUR_FENETRE 800 #define HAUTEUR_FENETRE 600 #define NOMBRE_PIXELS (LARGEUR_FENETRE * HAUTEUR_FENETRE) mettre les calcules entre parentheses Les constantes prédéfinies: # __LINE__ : donne le numéro de la ligne actuelle # __FILE__ : donne le nom du fichier actuel # __DATE__ : donne la date de la compilation # __TIME__ : donne l'heure de la compilation macro : le define permet de remplace aussi un mot par un code source entier exp : #define COUCOU() printf("Coucou"). c onst char* lettresARechercher).donc on peut inserer une chaine dans une autre les directive du preprocesseur: les includes: inclure un fichier . nous renvoi l'apparition d'un des lettre a recherché . c onst char* chaineARechercher). je m'appelle Brice\n"). . Cela permet d'asso cier une valeur à un mot exp : #define LARGEUR_FENETRE 800 #define HAUTEUR_FENETRE 600 #define TAILLEMAX 100 on peut ecrire int tableau[TAILLEMAX] car ca n'est pas une variable remarque : les #define sont généralement placés dans des . age).h" les define : #define Mot valeur Cette directive permet de définir une constante de préprocesseur.h se trouvant dans le dossier de projet : #include "monfic hier.le premier qui aparait dans la chaine strstr : rechercher une chaîne dans une autre : char* strstr(const char* chaine.

l_age.' a la fin exp int main(int argc..) */ .h (autres includes` prototypes de vos fonctions` de fines.h (contient son inc lude) et inversement on rentrera dans une boucle infinie d'ou l'interet di #ifndef #ifndef DEF_NOMDUFICHIER // Si la constante n'a pas été définie` le fichier n'a jamais été inclus #define DEF_NOMDUFICHIER // On définit la constante pour que la prochaine fois le fichier ne soit plus inclus /* Contenu de votre fichier . char *argv[]) { RACONTER_SA_VIE() return 0. #if condition /* Code source à compiler si la condition est vraie */ #elif condition2 /* Sinon` si la condition 2 est vraie` compiler ce code source */ #endif #ifdef. } les macro peuvent prendre des parametres exp : #define majeur(age.h utilise B. condition du preprocesseur : permet de faire des compilations conditionnelles.. #ifndef on definit une constante du preprocesseur dans lui affecté de valeur exp : #define WINDOWS #ifdef WINDOWS /* Code source pour Windows */ #endif #ifdef LINUX /* Code source pour Linux */ #endif #ifdef MAC /* Code source pour Mac */ #endif donc pour executé le programme sous linux on modifie la premier ligne : #define LI NUX et recomplier #ifndef pour éviter les inclusions infinies : si A. l'appel sera majeur(.nom) .nom) if(age >= 18) \ printf("vous etes majeur %s".la macro dans l'appel ne prend pas de '."le_nom") sans .

#endif structures : generalement on les declarent dans les fichier. pour modifier les composants de la structures sant exp : point. }. int y. # typedef : indique que nous allons créer un alias de structure. (*point). # Coordonnees : c'est le nom de l'équivalent. // Abscisses int y. pour definir une variable de ce type on declare : struct Coordonnees point. int variable2. 0. struct Coordonnees { int x. en declare : Coordonnees point. 0}. // Ordonnées }. "" permet d'initialiser une chaine de caractere Coordonnees po pointeur sur structure : Coordonnees* point = NULL. pour initialiser les coordonnees en utilisant un pointeur void initialiserCoordonnees(Coordonnees* point) { (*point). exp : struct Coordonnees { int x. pour eviter d'ecrire a chaque foi struct on definit un typedef exp : typedef struct Coordonnees Coordonnees. Cela mettra tous les éléments de la structure à 0. "". # struct Coordonnees : c'est le nom de la structure dont vous allez créer un alias (c'est-à-dire un "équivalent"). Personne utilisateur = {"".nom_du_compo initialisation : Coordonnees point = {0. *point2 = NULL. double nombreDecimal.x = 0. "". }.h struct NomDeVotreStructure { int variable1.x =2 .y = 0. int autreVariable.y). etc nom_de_la_structure. int = {0}.point. } . Coordonnees *point1 = NULL. printf("%d". 0}.

declaration : ou typedef enum Volume Volume. SDL_INIT_CDROM Charge le système de CD-Rom. debut du pgrm * SDL_Quit() : libère la SDL de la mémoire (des free y sont faits).ou point->x = 0. enum Volume { FAIBLE. on utilise le "point" pointeur->x = 10. FORT = 100 }. C'est la partie que nous chargerons le plus souvent.x = 10. } les enumeration : typedef enum Volume Volume. fin du p grm le parametre est la partie du pgrm qu'on souhaite chargé : SDL_INIT_VIDEO Charge le système d'affichage (vidéo). on utilise la flèche return 0. remarque : on peut aussi mettre des ptrs ou des struct à l'interieur des struct SDL * SDL_Init(parametre) : charge la SDL en mémoire (des malloc y sont faits). void initialiserCoordonnees(Coordonnees* point) { point->x = 0. Coordonnees *pointeur = &monPoint. monPoint. char *argv[]) { Coordonnees monPoint. enum Volume { FAIBLE = 10. } resumé : int main(int argc. // On travaille sur un pointeur. Vous permettra de manipuler votre lecteur de CD-Rom volume music = MOYEN. point->y = 0. FORT }. SDL_INIT_AUDIO Charge le système de son. // On travaille sur une variable. Vous permettra donc par exemple de jouer de la musique. MOYEN. MOYEN = 50. .

changer le titre de la fenetre SDL : SDL_WM_SetCaption Cette fonction prend 2 paramètres. Voici les principaux flags que vous pouvez utiliser (et combiner avec le sy mbole " ") : * SDL_HWSURFACE : les données seront chargées dans la mémoire vidéo. C'est une technique très utilisée dans les jeux 2D qui permet de faire en sorte que les déplacements des objets à l'écran soi ent fluides (sinon ça scintille et c'est moche). * SDL_FULLSCREEN : mode plein écran. SDL_GetError ()). * SDL_RESIZABLE : la fenêtre sera redimensionnable. Si erreur alors. Avantage : il y a plein de place dans cette mémoire. "Erreur d'initialisation de la SDL : %s\n". le second est le titre que vous voulez donner à l'icône. aucune fenêtre n'est ouverte. choisir les option d'affichage : SDL_SetVideoMode() qui prend 4 paramètres : et qui renvoi un pointeur (a voir plut ard) * * * * La largeur de la fenêtre désirée (en pixels) La hauteur de la fenêtre désirée (en pixels) Le nombre de couleurs affichables (en bits / pixel) 32 16 8 Des options (des flags) Les options : comme pour SDL_Init on doit utiliser des flags pour définir des opti ons. . * SDL_SWSURFACE : les données seront chargées dans la mémoire système (c'est-à-dire la RAM à priori). * SDL_NOFRAME : la fenêtre n'aura pas de barre de titre ni de bordure.SDL_INIT_JOYSTICK Charge le système de gestion du joystick. Défaut : il y a en général moins d'espace dans cette mémoire que dans l'autre (SDL_SWSURFACE). Le premier est le titre que vous voulez donner à la fenêtre. SDL_INIT_EVERYTHING Charge tous les systèmes listés ci-dessus à la fois. * SDL_DOUBLEBUF : mode double buffering. Dans ce mode. Cela vous permet de gérer le temps dans votre programme (très pratique).. SDL_INIT_TIMER Charge le système de timer. Je vous expliquerai les détails de cette technique très intéressante plus loin. Défaut : c'est mo ins rapide et moins optimisé. // Ecriture de l'erreur exit(EXIT_FAILURE). { fprintf(stderr. en changeant automatiquement la rés olution de votre écran au besoin. c'est-à-dire dans la mémoire de votre carte 3D. // On quitte le programme } * EXIT_FAILURE : valeur à renvoyer en cas d'échec du programme * EXIT_SUCCESS : valeur à renvoyer en cas de réussite du programme. pour charger quelque parametre on utilise la ametre2 parametre3 ) gestion des erreurs : exp : SDL_Init(parametre1 par if (SDL_Init(SDL_INIT_VIDEO) == -1) // Démarrage de la SDL. Avantage : cette mémoire est plus rapide. Votre programme prendra toute la place à l'écran. Par défaut elle ne l'est pas ..

SDL_FillRect(ecran. 206. donc que tout est bon ! gestion d'erreur : if (ecran == NULL) // Si l'ouverture a échoué. pour allouer un espace (surface) non global : SDL_CreateRGBSurface prend 8 param etres et renvoi dans un pointeur dont 4: . * La partie de la surface qui doit être remplie. 206.creer une variable d'ecran : chaque surface est mémorisée dans une variable de type SDL_Surface exp : SDL_Surface *ecran = NULL. c'est que la SDL a p u allouer la surface en mémoire. "Impossible de charger le mode vidéo : %s\n". 32. SDL_HWSURFACE). Mise à jour de l'écran : SDL_Flip : prend un parametres exp SDL_Flip(ecran). Cela arrive si vous demandez une trop grande résolution ou un trop gra nd nombre de couleurs que ne supporte pas votre ordinateur. Ce format dépend du nombre de bits / pixel que vous avez demandé avec SDL_SetVideoMode. 112)). SDL_GetError ()). * Une autre valeur : si la valeur est différente de NULL. Vous pouvez le récupérer. ecran = SDL_SetVideoMode(640. SDL_MapRGB(ecran->format. NULL. on écrit l'erreur et on arrête { fprintf(stderr. 480. ou SDL_FillRect(ecran. on recupere un pointeur s ur l'ecran * NULL : ecran vaut NULL si la SDL_SetVideoMode n'a pas réussi à charger le mode vidéo demandé. Si vous voulez remplir toute la surface (et c'est ce qu'on veut faire). 17. exit(EXIT_FAILURE). * La couleur à utiliser pour remplir la surface. } SDL_FillRect : colorer une surface avec une couleur unie prend 3 parametres : * Un pointeur sur la surface dans laquelle on doit dessiner (par exemple ecr an). NULL. bleuvert). 17. envoyez NULL. SDL_MapRGB : envoi un Uint32 (nombre desigant une couleur sur 32) elle prend 4 p arametre : * Le format des couleurs. 112). il est stocké dans la sous -variable ecran->format * La quantité de rouge de la couleur * La quantité de vert de la couleur * La quantité de bleu de la couleur exp : Uint32 bleuVert = SDL_MapRGB(ecran->format.

). pour ajouter une icone a une fenetre : SDL_WM_SetIcon prend 2 parametres la surface qui contient l'image à afficher ainsi que des informations sur la trans parence (NULL si on ne veut pas de transparence). donc on enverra NULL # La surface sur laquelle on doit coller.. mais cela obligera votre processeur à faire plus de calculs. on doit utiliser une structure de type SDL_Rect qui contient plusieur variable dont x et y exp : coord. avec les cartes 3D qu'on sort de nos jours. c'est la carte 3D qui aurait fait la plupart des ca lculs. gestion de la transparence : SDL_SetColorKey prend 3 parametres et doit etre uti lisé avant de blindé la surface qui doi etre rendu transparente une liste de flags il faut utiliser SDL_SRCCOLORKEY pour rendre transpa rent et 0 sinon indiquer la couleur qui faut rendre transparente avec SDL_MapRGB(la sur face ->format. bleu) . prend 4 parametres # La surface à coller (ici. bmp"). c'est-à-dire ecran dans notre cas. # La largeur de la surface (en pixels) # La hauteur de la surface (en pixels) # Le nombre de couleurs (en bits / pixel) pour libere l'espace allouer : SDL_FreeSurface() prend un parametres le pointeur pour la coller sur l'ecran on utilise : SDL_BlitSurface. Il y a moins d'espace dans cette mémoire que dans la mémoire système (quoique.. * SDL_FillRect : qui remplissait la structure d'une couleur unie. # Un pointeur sur une variable contenant des coordonnées. Ces coordonnées indiquent où devra être collée notre surface sur l'écran Pour indiquer les coordonnées.x et coord. Si vous aviez c hargé la surface en mémoire vidéo. * SDL_SWSURFACE : la surface sera chargée en mémoire système où il y a beaucoup de p lace. La fonction SDL_LoadBMP remplace 2 fonctions que vous connaissez : * SDL_CreateRGBSurface : qui se chargeait d'allouer de la mémoire pour stocker une surface de la taille demandée (= malloc). vert.# * SDL_HWSURFACE : la surface sera chargée en mémoire vidéo. rouge.y charger une image sur une surface la fonction : maSurface = SDL_LoadBMP("image. ce sera rectangle) # Une information sur la partie de la surface à coller (facultative). Ca ne nous i ntéresse pas car on veut coller toute la surface. mais cette mémoire est plus optimisée et accélérée.

* Le délai (en millisecondes) entre chaque génération d'un évènement SDL_KEYDOWN une f ois que la répétition a été activée. 255)). parmis les variable de SDL_Event on a "type" : donc event. SDL_MapRGB(ecran->format. shema dun gestionnaire d'evenement while (continuer) { SDL_WaitEvent(&event). 255. /* On e fface l'écran (ici fond blanc) */ . NULL.type) { case SDL_TRUC: /* Gestion des évènements de type TRUC */ case SDL_BIDULE: /* Gestion des évènements de type BIDULE */ } SDL_FillRect(ecran.type les touche stocké dans SDL_Event key.sym recuperation des evenements : SDL_WaitEvent fonction bloquante (suspend le pgm en attente d'un evenement) prend &event SDL_PollEvent non bloquante nous informe selemen t si un evenement s'est produit les evenements du clavier : SDL_KEYDOWN SDL_KEYUP etc SDL_EnableKeyRepeat : permet de gerer le fait de gardé la touche appuyer prend 2 p arametres : * La durée (en millisecondes) pendant laquelle une touche doit rester enfoncée a vant d'activer la répétition des touches.transparence Alpha : permet de faire un fondu peut etre activé avec SDL_SetAlpha p rend 3 parametres la surface en question une liste de flafs il faut mettre SDL_SRCALPHA pour activé la transparence et 0 sinon la valeur alpha de la transparence compris entre 0 (totalement transpar ente ) et 255 remarque : la 128 aplha et optimisé par la SDL (plus rapide a calculer par le proc esseur) charger plus de formats d'images rajouter une extension a la SDL la bibliotheq ue SDL_Image one utilise la fonction : IMG_Load prend un parametres l'image a inclure Remarque pour recuperer la largeur d'une surface on fait nom_surface -> w ou nom _surface -> h LES EVENEMENTS EN SDL : pour gere les evenement on cree une variable SDL_Event e xp SDL_Event event. switch(event. 255.keysym.

appliquer sur la surface. Le Le Le le premier argument est en deuxième est l'angle de troisième est le zoom à quatrième argument sert fait le nom de la surface à modifier. A chaque fois que la souris b ouge dans la fenêtre pour mousebuttonup on peut recupere deux information sur l'evenement : * Le bouton de la souris avec lequel on a cliqué (clic gauche ? clic droit ? c lic bouton du milieu ?) * Les coordonnées de la souris au moment du clic (x et y) Récupérer le bouton de la souris : * SDL_BUTTON_LEFT : clic avec le bouton gauche de la souris. moment où le bouton d e la souris est enfoncé.button. int smooth). la variable click droit gauche etc est : event. * SDL_BUTTON_WHEELUP : molette de la souris vers le haut. * SDL_BUTTON_RIGHT : clic avec le bouton droit de la souris.ttf) * TTF_CloseFont : ferme une police ouverte.x event. à lisser la surface tournée 1 ou 0 SDL ttf: on ouvre et on la ferme avec : * TTF_Init : démarre SDL_ttf. /* On met à jour l'affichage */ } LA souris : La souris peut générer 3 types d'évènements différents : * SDL_MOUSEBUTTONDOWN : lorsqu'on clique avec la souris. * SDL_MOUSEMOTION : lorsqu'on déplace la souris. double angle. rotation./* On fait tous les SDL_BlitSurface nécessaires pour coller les surfaces à l'écran */ SDL_Flip(ecran). * SDL_BUTTON_MIDDLE : clic avec le bouton du milieu de la souris (tout le mo nde n'en a pas forcément un).button.button. double zoom. .y faire des rotation inclure sdl_gfx utiliser la fonction : SDL_Surface * rotozoomSurface (SDL_S urface *src. * SDL_BUTTON_WHEELDOWN : molette de la souris vers le bas. * TTF_Quit : arrête SDL_ttf.button la variable des coordonnées est event. * SDL_MOUSEBUTTONUP : lorsqu'on relâche le bouton de la souris. charger la police avec * TTF_OpenFont : ouvre un fichier de police (.

La seule différence av ec Shaded. pas très "arrondi" surtout s'il est écrit gros. En fa it. L'idéal c'est de mettre le fichier de police dans le répertoire de votre projet. Pour spécifier une couleur à SDL_ttf :une structure de la SDL : SDL_Color. Il y a un défaut par contre : le fond doit être d'une co uleur unie. Ce sont les mêmes tailles que celles que vous avez dans un logiciel de texte comme Word. c'est que vous pouvez blitter le texte sur une image et la transparen ce sera respectée (contrairement à Shaded qui imposait un fond uni). le texte sera joli. Vous de vez créer un pointeur de TTF_Font La fonction TTF_OpenFont prend 2 paramètres : * Le nom du fichier de police (au format . le texte à écrire. Pas moyen de rendre le fond de la SDL_Surface transparente en Shaded . Vous pouvez par exemple utiliser une tail le de 22. Les lettres seront antialiasées. C'est pratique. Exemple de fichier : ari al. mais le texte ne sera pas très joli. Cette str . C'est là que la différence de lenteur avec Shaded se fait : au moment du blit et non au moment de la création de la SDL_Surface. le texte apparaîtra plus lisse.ttf (pour la police Arial).TTF_OpenFont doit stocker son résultat dans une variable de type TTF_Font. La surface sera transparente mais n'utili sera qu'un niveau de transparence . Utilisez cette technique lors que vous devez souvent changer le texte par exemple pour afficher le temps qui s 'écoule * Shaded : cette fois. pour chaque methode une palette de caractères différentes. * Blended : c'est la technique la plus puissante. mais elle est lente. Attention : le calcul du blit sera plus lent que pour Shaded. La fonction TTF_CloseFont prend un parametre c'est le pointeur qui contient la p olice remarque les police se trouve sur l'ordinateur C:/Windows/Fonts Les différentes méthodes d'écriture: * Solid :technique la plus rapide. elle met autant de temps que Shaded à créer la SDL_Surface. Il y en a 4 : * * * * Latin1 UTF8 Unicode Unicode Glyph Les 3 fonctions utilisant le charset Latin1 sont : * TTF_RenderText_Solid * TTF_RenderText_Shaded * TTF_RenderText_Blended en leur envoi dans l'ordre : la police (de type TTF_Font). * La taille de la police à utiliser. et enf in la couleur (de type SDL_Color).ttf) à ouvrir.

" . TTF_STYLE_UNDERLINE : souligné.ucture comporte 3 sous-variables : la quantité de rouge. Ce dernier paramètre est la couleur de fond à utiliser. La fonction TTF_RenderText_Shaded prend un 4ème paramètre contrairement aux 2 autres . La fonction prend 2 paramètres : * La police à modifier * Une combinaison de flags pour indiquer le style à donner : gras.int) convertir un int en chaine utiliser la fonction sprintf(tab[char]. de vert et de bleu. Vous devrez donc créer une a utre variable de type SDL_Color pour indiquer une couleur de fond (par exemple l e blanc). Pour les flags. TTF_STYLE_BOLD : gras. " . italique ou souligné. TTF_STYLE_ITALIC : italique.flags). vous devez utiliser ces constantes : * * * * TTF_STYLE_NORMAL : normal. attribut d'ecriture : TTF_SetFontStyle(le_nom_TTF_font.