Vous êtes sur la page 1sur 15

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 prprocesseur return 0; succs affichage : printf("texte"); * \n : retour la ligne (= "Entre") * \t : tabulation // commentaire /*commentaire Sur plusieurs lignes */

char, int, long nombres entiers loat, double nombres dcimaux 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 : %

incrementation : nom_var autre racourcit : nombre nombre nombre nombre nombre

++; decrementation : nom_var --; += 4; -= 3; *= 5; /= 3; %= 3;

inclure la bibliotheque mathmatique : #include <math.h> valeur absolue:fabs(nomb re); arondi au dessus = ceil(nombre); arondi au dessous = floor(nombre); puissance : pow(nombre, puissance); racine : sqrt(nombre); + 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 excuter si la condition est vraie } else if (condition) { // Instructions excuter si la condition est vraie } else { // Instructions excuter 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; case 6: instruction; break; case 12: instruction; break; case 16: instruction; break; case 18: instruction; break; case 68: instruction; break; default: instruction; break;

different de "!="

exemple majeur = (age

} condition ternaire boucles: while (Condition ) { // Instructions rpter } do { instruction; } while (condition); if else nom_var = (condition ) ? valeur1 : valeur2;

for (initialisation; condition ; incrementation) { instruction; } #include <time.h> : util pour les nombre aleatoire ; initialiser le gnrateur de nombre alatoires et srand(time(NULL))

fonctions : type nomFonction(parametres) { instructions; return nom_var; (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 ';' on les regroupe dan s les .h on inclut les .h avec #include "nom-fich.h" et ceci dans les .c les utilisant et le main.c

variable global par fichier : static int (double,char etc) nom_var variable de fonction non supprim : static int (double,char,etc) nom_var elle conservera son ancienne valeur une fonction n'est accessible que par son fichier si on la precede par static

exp : static int triple (int) , il fau mettre a jour le prototype aussi les ptrs: afficher adresse %P (hexa) %d (decimal) et &nom_var declaration int (double,char,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,double,char) nom_tableau[nbr de case] nom_tableau [ncase] = 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, V2, ...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",nom_var") lecture scanf("%c",&nom_var) chaine de charactere : char nom_chaine[taille] remarque taille = nbr de caractere + 1 car la chaine se termine par \0 declaration chaine : char nom_chaine[] = "la chaine" le taille sera automatiqu e affichage printf("%s",nom_var") lecture scanf("%s",&nom_var) utiliser les fonctions de chaine : #include <string.h> strlen : calculer la longueur d'une chane strcpy : copier une chane dans une autre const char* chaineACopier); strcat : concatner 2 chanes r* chaine2); strcmp : comparer 2 chanes st char* chaine2); retourne 0 si egal : size_t strlen(const char* chaine); : char* strcpy(char* copieDeLaChaine, : char* strcat(char* chaine1, const cha : int strcmp(const char* chaine1, con

strchr : rechercher un caractre : char* strchr(const char* chaine, in t caractereARechercher); remarque : La fonction renvoie un pointeur vers le premier caractre qu'elle a t rouv, c'est--dire qu'elle renvoie l'adresse de ce caractre dans la mmoire. Elle renv oie NULL si elle n'a rien trouv. variante Il existe une fonction strrchr strictement identique strchr, sauf que c elle-l renvoie un pointeur vers le dernier caractre qu'elle a trouv dans la chane au lieu du premier

strpbrk : premier caractre de la liste : char* strpbrk(const char* chaine, c onst char* lettresARechercher); nous renvoi l'apparition d'un des lettre a recherch ,le premier qui aparait dans la chaine strstr : rechercher une chane dans une autre : char* strstr(const char* chaine, c onst char* chaineARechercher); comme les autres elle renvoi le pointeur de la chaine quan recherche si elle exi ste et NULL sinon sprintf : crire dans une chane exp: sprintf(chaine, "Tu as %d ans !", age); Toutes les rgles du printf s'appliquent,donc on peut inserer une chaine dans une autre

les directive du preprocesseur: les includes: inclure un fichier .h se trouvant dans le dossier o est install votre IDE inclure un fichier .h se trouvant dans le dossier de projet : #include "monfic hier.h" les define : #define Mot valeur Cette directive permet de dfinir une constante de prprocesseur. 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 gnralement placs dans des .h, ct 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 prdfinies: # __LINE__ : donne le numro 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"); on peut mettre plusieur ligne au macro separes par \ exp : #define RACONTER_SA_VIE() printf("Coucou, je m'appelle Brice\n"); \ printf("J'habite a Nice\n"); \ printf("J'aime la glisse\n");

la macro dans l'appel ne prend pas de ';' a la fin exp int main(int argc, char *argv[]) { RACONTER_SA_VIE() return 0; } les macro peuvent prendre des parametres exp : #define majeur(age,nom) if(age >= 18) \ printf("vous etes majeur %s",nom) ; l'appel sera majeur(,l_age,"le_nom") sans ; condition du preprocesseur : permet de faire des compilations conditionnelles. #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, #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.h utilise B.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 dfinie` le fichier n'a jamais t inclus #define DEF_NOMDUFICHIER // On dfinit la constante pour que la prochaine fois le fichier ne soit plus inclus /* Contenu de votre fichier .h (autres includes` prototypes de vos fonctions` de fines...) */

#endif

structures : generalement on les declarent dans les fichier.h struct NomDeVotreStructure { int variable1; int variable2; int autreVariable; double nombreDecimal; }; exp : struct Coordonnees { int x; // Abscisses int y; // Ordonnes }; pour definir une variable de ce type on declare : struct Coordonnees point; pour eviter d'ecrire a chaque foi struct on definit un typedef exp : typedef struct Coordonnees Coordonnees; struct Coordonnees { int x; int y; };

# typedef : indique que nous allons crer un alias de structure. # struct Coordonnees : c'est le nom de la structure dont vous allez crer un alias (c'est--dire un "quivalent"). # Coordonnees : c'est le nom de l'quivalent. en declare : Coordonnees point; pour modifier les composants de la structures sant exp : point.x =2 ; printf("%d",point.y); etc nom_de_la_structure.nom_du_compo

initialisation : Coordonnees point = {0, 0}; int = {0}; Cela mettra tous les lments de la structure 0. Personne utilisateur = {"", "", "", 0, 0}; "" permet d'initialiser une chaine de caractere

Coordonnees po

pointeur sur structure : Coordonnees* point = NULL; Coordonnees *point1 = NULL, *point2 = NULL; pour initialiser les coordonnees en utilisant un pointeur void initialiserCoordonnees(Coordonnees* point) { (*point).x = 0; (*point).y = 0; }

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

SDL_INIT_JOYSTICK Charge le systme de gestion du joystick. SDL_INIT_TIMER Charge le systme de timer. Cela vous permet de grer le temps dans votre programme (trs pratique). SDL_INIT_EVERYTHING Charge tous les systmes lists ci-dessus la fois. pour charger quelque parametre on utilise la ametre2 parametre3 ) gestion des erreurs : exp : SDL_Init(parametre1 par

if (SDL_Init(SDL_INIT_VIDEO) == -1) // Dmarrage de la SDL. Si erreur alors... { fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError ()); // Ecriture de l'erreur exit(EXIT_FAILURE); // On quitte le programme }

* EXIT_FAILURE : valeur renvoyer en cas d'chec du programme * EXIT_SUCCESS : valeur renvoyer en cas de russite du programme.

choisir les option d'affichage : SDL_SetVideoMode() qui prend 4 paramtres : et qui renvoi un pointeur (a voir plut ard) * * * * La largeur de la fentre dsire (en pixels) La hauteur de la fentre dsire (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 dfinir des opti ons. Voici les principaux flags que vous pouvez utiliser (et combiner avec le sy mbole " ") : * SDL_HWSURFACE : les donnes seront charges dans la mmoire vido, c'est--dire dans la mmoire de votre carte 3D. Avantage : cette mmoire est plus rapide. Dfaut : il y a en gnral moins d'espace dans cette mmoire que dans l'autre (SDL_SWSURFACE). * SDL_SWSURFACE : les donnes seront charges dans la mmoire systme (c'est--dire la RAM priori). Avantage : il y a plein de place dans cette mmoire. Dfaut : c'est mo ins rapide et moins optimis. * SDL_RESIZABLE : la fentre sera redimensionnable. Par dfaut elle ne l'est pas . * SDL_NOFRAME : la fentre n'aura pas de barre de titre ni de bordure. * SDL_FULLSCREEN : mode plein cran. Dans ce mode, aucune fentre n'est ouverte. Votre programme prendra toute la place l'cran, en changeant automatiquement la rs olution de votre cran au besoin. * SDL_DOUBLEBUF : mode double buffering. C'est une technique trs utilise dans les jeux 2D qui permet de faire en sorte que les dplacements des objets l'cran soi ent fluides (sinon a scintille et c'est moche). Je vous expliquerai les dtails de cette technique trs intressante plus loin. changer le titre de la fenetre SDL : SDL_WM_SetCaption Cette fonction prend 2 paramtres. Le premier est le titre que vous voulez donner la fentre, le second est le titre que vous voulez donner l'icne.

creer une variable d'ecran : chaque surface est mmorise dans une variable de type SDL_Surface exp : SDL_Surface *ecran = NULL; ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE); on recupere un pointeur s ur l'ecran * NULL : ecran vaut NULL si la SDL_SetVideoMode n'a pas russi charger le mode vido demand. Cela arrive si vous demandez une trop grande rsolution ou un trop gra nd nombre de couleurs que ne supporte pas votre ordinateur. * Une autre valeur : si la valeur est diffrente de NULL, c'est que la SDL a p u allouer la surface en mmoire, donc que tout est bon ! gestion d'erreur : if (ecran == NULL) // Si l'ouverture a chou, on crit l'erreur et on arrte { fprintf(stderr, "Impossible de charger le mode vido : %s\n", SDL_GetError ()); exit(EXIT_FAILURE); }

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). * La partie de la surface qui doit tre remplie. Si vous voulez remplir toute la surface (et c'est ce qu'on veut faire), envoyez NULL. * La couleur utiliser pour remplir la surface.

SDL_MapRGB : envoi un Uint32 (nombre desigant une couleur sur 32) elle prend 4 p arametre : * Le format des couleurs. Ce format dpend du nombre de bits / pixel que vous avez demand avec SDL_SetVideoMode. Vous pouvez le rcuprer, 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, 17, 206, 112);

SDL_FillRect(ecran, NULL, bleuvert); ou SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112)); Mise jour de l'cran : SDL_Flip : prend un parametres exp SDL_Flip(ecran);

pour allouer un espace (surface) non global : SDL_CreateRGBSurface prend 8 param etres et renvoi dans un pointeur dont 4:

# * SDL_HWSURFACE : la surface sera charge en mmoire vido. Il y a moins d'espace dans cette mmoire que dans la mmoire systme (quoique, avec les cartes 3D qu'on sort de nos jours...), mais cette mmoire est plus optimise et acclre. * SDL_SWSURFACE : la surface sera charge en mmoire systme o il y a beaucoup de p lace, mais cela obligera votre processeur faire plus de calculs. Si vous aviez c harg la surface en mmoire vido, c'est la carte 3D qui aurait fait la plupart des ca lculs. # 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. prend 4 parametres # La surface coller (ici, ce sera rectangle) # Une information sur la partie de la surface coller (facultative). Ca ne nous i ntresse pas car on veut coller toute la surface, donc on enverra NULL # La surface sur laquelle on doit coller, c'est--dire ecran dans notre cas. # Un pointeur sur une variable contenant des coordonnes. Ces coordonnes indiquent o devra tre colle notre surface sur l'cran Pour indiquer les coordonnes, on doit utiliser une structure de type SDL_Rect qui contient plusieur variable dont x et y exp : coord.x et coord.y charger une image sur une surface la fonction : maSurface = SDL_LoadBMP("image. bmp"); La fonction SDL_LoadBMP remplace 2 fonctions que vous connaissez : * SDL_CreateRGBSurface : qui se chargeait d'allouer de la mmoire pour stocker une surface de la taille demande (= malloc). * SDL_FillRect : qui remplissait la structure d'une couleur unie.

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).

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, rouge, vert, bleu)

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; parmis les variable de SDL_Event on a "type" : donc event.type les touche stock dans SDL_Event key.keysym.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 dure (en millisecondes) pendant laquelle une touche doit rester enfonce a vant d'activer la rptition des touches. * Le dlai (en millisecondes) entre chaque gnration d'un vnement SDL_KEYDOWN une f ois que la rptition a t active.

shema dun gestionnaire d'evenement while (continuer) { SDL_WaitEvent(&event); switch(event.type) { case SDL_TRUC: /* Gestion des vnements de type TRUC */ case SDL_BIDULE: /* Gestion des vnements de type BIDULE */ } SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On e fface l'cran (ici fond blanc) */

/* On fait tous les SDL_BlitSurface ncessaires pour coller les surfaces l'cran */ SDL_Flip(ecran); /* On met jour l'affichage */ }

LA souris : La souris peut gnrer 3 types d'vnements diffrents : * SDL_MOUSEBUTTONDOWN : lorsqu'on clique avec la souris. moment o le bouton d e la souris est enfonc. * SDL_MOUSEBUTTONUP : lorsqu'on relche le bouton de la souris. * SDL_MOUSEMOTION : lorsqu'on dplace la souris. A chaque fois que la souris b ouge dans la fentre

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 coordonnes de la souris au moment du clic (x et y) Rcuprer le bouton de la souris : * SDL_BUTTON_LEFT : clic avec le bouton gauche de la souris. * SDL_BUTTON_MIDDLE : clic avec le bouton du milieu de la souris (tout le mo nde n'en a pas forcment un). * SDL_BUTTON_RIGHT : clic avec le bouton droit de la souris. * SDL_BUTTON_WHEELUP : molette de la souris vers le haut. * SDL_BUTTON_WHEELDOWN : molette de la souris vers le bas. la variable click droit gauche etc est : event.button.button la variable des coordonnes est event.button.x event.button.y faire des rotation inclure sdl_gfx utiliser la fonction : SDL_Surface * rotozoomSurface (SDL_S urface *src, double angle, double zoom, int smooth); Le Le Le le premier argument est en deuxime est l'angle de troisime est le zoom quatrime argument sert fait le nom de la surface modifier. rotation. appliquer sur la surface. lisser la surface tourne 1 ou 0

SDL ttf: on ouvre et on la ferme avec : * TTF_Init : dmarre SDL_ttf. * TTF_Quit : arrte SDL_ttf. charger la police avec * TTF_OpenFont : ouvre un fichier de police (.ttf) * TTF_CloseFont : ferme une police ouverte.

TTF_OpenFont doit stocker son rsultat dans une variable de type TTF_Font. Vous de vez crer un pointeur de TTF_Font La fonction TTF_OpenFont prend 2 paramtres : * Le nom du fichier de police (au format .ttf) ouvrir. L'idal c'est de mettre le fichier de police dans le rpertoire de votre projet. Exemple de fichier : ari al.ttf (pour la police Arial). * La taille de la police utiliser. Vous pouvez par exemple utiliser une tail le de 22. Ce sont les mmes tailles que celles que vous avez dans un logiciel de texte comme Word. 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 diffrentes mthodes d'criture: * Solid :technique la plus rapide. La surface sera transparente mais n'utili sera qu'un niveau de transparence . C'est pratique, mais le texte ne sera pas trs joli, pas trs "arrondi" surtout s'il est crit gros. Utilisez cette technique lors que vous devez souvent changer le texte par exemple pour afficher le temps qui s 'coule * Shaded : cette fois, le texte sera joli. Les lettres seront antialiases, le texte apparatra plus lisse. Il y a un dfaut par contre : le fond doit tre d'une co uleur unie. Pas moyen de rendre le fond de la SDL_Surface transparente en Shaded . * Blended : c'est la technique la plus puissante, mais elle est lente. En fa it, elle met autant de temps que Shaded crer la SDL_Surface. La seule diffrence av ec Shaded, c'est que vous pouvez blitter le texte sur une image et la transparen ce sera respecte (contrairement Shaded qui imposait un fond uni). Attention : le calcul du blit sera plus lent que pour Shaded. C'est l que la diffrence de lenteur avec Shaded se fait : au moment du blit et non au moment de la cration de la SDL_Surface. pour chaque methode une palette de caractres diffrentes. 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), le texte crire, et enf in la couleur (de type SDL_Color). Pour spcifier une couleur SDL_ttf :une structure de la SDL : SDL_Color. Cette str

ucture comporte 3 sous-variables : la quantit de rouge, de vert et de bleu. La fonction TTF_RenderText_Shaded prend un 4me paramtre contrairement aux 2 autres . Ce dernier paramtre est la couleur de fond utiliser. Vous devrez donc crer une a utre variable de type SDL_Color pour indiquer une couleur de fond (par exemple l e blanc). attribut d'ecriture : TTF_SetFontStyle(le_nom_TTF_font,flags); La fonction prend 2 paramtres : * La police modifier * Une combinaison de flags pour indiquer le style donner : gras, italique ou soulign.

Pour les flags, vous devez utiliser ces constantes : * * * * TTF_STYLE_NORMAL : normal. TTF_STYLE_BOLD : gras. TTF_STYLE_ITALIC : italique. TTF_STYLE_UNDERLINE : soulign. " ,int)

convertir un int en chaine utiliser la fonction sprintf(tab[char],"