MASTERMIND (MODE GRAPHIQUE EN SDL)

imadonline Messages postés 9 Date d'inscription samedi 28 janvier 2006 Statut Membre Dernière intervention 4 février 2006 - 28 janv. 2006 à 16:55
imadonline Messages postés 9 Date d'inscription samedi 28 janvier 2006 Statut Membre Dernière intervention 4 février 2006 - 29 janv. 2006 à 20:48
slt tt le monde,
je viens de m'initier un peu dans le SDL mé g encor un problém avec les sprites et la gestion de clavier,etant donné ke je conné ke le C .je suis chargé d'élaboré un projet
pour la réalisation de MASTERMIND en mode graphique g besoin d'un exemple de code source et biensur de votre aide NB:g pa trouvé dezs exemple sur le site


merci

5 réponses

MrdJack Messages postés 146 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 8 mars 2008 2
28 janv. 2006 à 20:37
salut, je suppose que tu connais deja les initialisations et tout, alors je passe directement aux autres choses :



niveau graphique, SDL fonctionne avec des surfaces :

SDL_Surface *monImage; // équivalent à un sprite.

SDL_Surface *Screen; // sera notre surface principale de la fenetre



//ensuite on crée la fenetre :

if(!(Screen = SDL_SetVideoMode(largeur, hauteur, bpp, flags)))

{

return false;

}

SDL_FillRect(Screen, NULL, SDL_MapRGBA(Screen->format,0,0,0,0)); //on remplie en noir



//ensuite, pour charger un bmp dans une surface :

if(!(monImage = SDL_LoadBMP("monImage.bmp"))

{

Log("chargement impossible : %s\n", SDL_GetError() );

}

et on peut eventuellement rendre une certaine couleur transparente :

SDL_SetColorKey(monImage, SDL_SRCCOLORKEY|SDL_RLEACCEL, SDL_MapRGB(monImage->format, rouge, vert, bleu) );



//ensuite, on va passer à l'affichage des sprites (surfaces) :

//tout d'abord, on définit un rectangle qui va correspondre à la zone
de la surface que l'on va afficher (pratique pour séparer une image en
plusieures petites...)

SDL_Rect monRectangleSource = {0, 0, 0, 0}

//on note que l'on peut lui donner des valeurs en meme temps si on veut : x, y, w et h

//ou alors on peut faire comme suit :


monRetangleSource.x monRectangleSource.y 0;


monRectangleSource.w = monImage->w;


monRectangleSource.h = monImage->h;


//( ici, ca prend toute l'image)



//puis un rectangle qui va définir ou dans l'ecran Screen on va afficher l'image :

SDL_Rect monRectangleDestination = {20, 30, Screen_Width, Screen_Height};

//affiche monImage à x20 et y 30



//puis on blit l'image dans Screen :

SDL_BlitSurface(monImage, &monRectangleSource, Screen, &monRectangleDest);



//ensuite, une fois que tu as effectué toutes les modifications sur screen, tu peut l'actualiser :

SDL_UpdateRect(Screen, 0,0,Screen_Width, Screen_Height);

//c'est comme un double buffer, comme ca, on affiche à l'ecran que ce qui est nessécaire...

//bien evidament, tu peux actualiser qu'un partie de l'ecran si tu
veux, ca te permet de garder ce qui etait deja affiché dans le reste de
l'image... exemple pour un tetris, pas besoin de réafficher tous les
graphiques, juste la zone de jeu suffit...



voilà, j'espere que tu as tout compris, sinon n'hesites pas.



@++
MrdJack Messages postés 146 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 8 mars 2008 2
28 janv. 2006 à 20:46
juste une precision sur cette partie de code :

SDL_FillRect(Screen, NULL, SDL_MapRGBA(Screen->format,0,0,0,0)); //on remplie en noir

à la place de NULL, on peut bien evidament y mettre n'importe quel rectangle...

bien que ca ne soit pas utile dans ce cas, si on met NULL, ca remplis toute le surface.



et d'autres precisions (je susi tete en l'air) :

SDL_FreeSurface(monImage); va libérer la surface

c'est mieux niveau memoire !!!



et puis il y a SDL_Flip(Screen); qui lorsque les flags sont en double buffering d'afficher l'ecran Screen

c'est pas SDL_UpdateRect() qui le fait dans ce cas...



@++


                
imadonline Messages postés 9 Date d'inscription samedi 28 janvier 2006 Statut Membre Dernière intervention 4 février 2006
28 janv. 2006 à 22:54
merci bcp,g trouvé tré interessan,et jaimerai bien ke vou majoutié plus merci d'avance
MrdJack Messages postés 146 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 8 mars 2008 2
29 janv. 2006 à 17:03
hé bien imadonline, d'abord bonjour....



si tu es un peu patient, je vais peut-etre réaliser un tutorial en francais concernant la sdl.

bien sur, ca va prendre un peu de temps !!!

je pourrais le faire en plusieures parties ( video, evenements, son, joystick etc...)

tout depend si tu es vraiment pressé pour ton projet !



sinon, je te conseille d'aller jeter un coup d'oeuil dans la doc de sdl ( anglais ) qui est assez detaillée pour les bases...

ou ya un tuto en .doc (recherche : codes, tutorial sdl sur codes
sources) perso je ne sais pas ce qu'il vaut, je n'ai pas regardé
plus....

ou bien regarde dans diverses sources exposées sur cs.



pense a me prevenir si tu veux un tuto, je pense que de toutes maniere
j'en ferais ptete un car le site en manque un peu a mon gout !!! mais
la rapidité dependra de la demande !!!



au fait, tu as réussit a utiliser tout ce que je t'ais montré dans le dernier post ?



@++

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
imadonline Messages postés 9 Date d'inscription samedi 28 janvier 2006 Statut Membre Dernière intervention 4 février 2006
29 janv. 2006 à 20:48
bjr,oui oui biensur c grace a ca ke g pu comprendre comment pouvoir deplacer des objet sur l'ecran,merci bcp.pr le tuto yen a presque pa sur le net surtout en francais,ca serai bien de publier un,je voudrais me lancer dans projet dans une semaine et la jessai de faire mon serpent avan de commencer le MASTERMIND;merci kan mém pour le tuto jle ve bien pour bien maitriser le SDL.
Rejoignez-nous