Bonjour à tous ,
J´ai décidé de faire un petit jeu de tétris
( je change de projet comme de chemise ) , et pour une fois , ayant plus avance dans la lecture de mes bouquins sur le c++ , j´ai décidé de programmer proprement
Bon , c´est un tetris alors pas besoin de classes avec polymorphisme , mais j´essaye de faire au moins un header + fichier cpp
Donc , en fait , si j´ai bien compris ce qu´est un moteur de jeu , mon header se résumerais à un moteur de jeu .
Puisque j´ai mis dedans les fonctions d´inialisation de la SDL , d´affichage d´images etc
Mais j´ai pas mal de problèmes :
Le fonction initialisation SDL semble ne pas foncitonner si je l´inclus dans le . h et que je l´appelle via main .
par contre , si je la copie-colle dans main , ca marche , c´est moi qui fait une erreur ou l´initialisation de la sdl DOIT se faire dans le . cpp ?
autre chose , j´ai une fonction ChargementImage qui charge un bmp .
Je l´ai mise dans le header , mais comment faire pour charger l´image que je passerai en argument ?
je veux dire , si je dis ChargementImage(Grille) , ca serait cool si le compialteur faisait ( Grille = SDL_LoadBMP("DATA/Grille.bmp") )
je sais pas si c´est possible par contre ?
autrement , j´aurais une question sur les fonts
j´ai trouve des tutoriaux pour pouvoir ecrire des phrases multicolores , qui bougnet et tout et tout , mais je ne comprends pas comment afficher une variable ?
c´est a dire qu´a chaque ligne remplit , j´ai mon int Score qui s´incremente , mais comment afficher ce chiffre à l´écran ? je vais quand meme pas faire un bitmap pour chaque score ? !
voila , c´est tout pour le moment , j´espere avoir ete assez clair
merci ![]()
Je sais pas pour les autre mais pour le chargement d´image il te faudrait une fonction comme ceci pris du tutorial de [DmX].
SDL_Surface *ChargementImage(const char *filename)
{
SDL_Surface *temp, *image;
temp=SDL_LoadBMP(filename);
image=SDL_DisplayFormat(temp);//Ceci permet de gagner du temp a l´affichage
SDL_FreeSuface(temp);
return image;
}
Puis dans ton main() il te faudrait quelque chose comme:
grille=ChargementImage("DATA/Grille.bmp")
Oops j´ai oublié de demander si tu pouvais donner le lien sur où tu a trouvé le tutrial pour ecrire sur l´ecran.
alors, rapidement :
" c´est un tetris alors pas besoin de classes avec polymorphisme"
moi j´en vois deja un gros bien naif : un concept generique de piece que tu specialises en L et T etc. dessus tu as tes operations generiques de rotation et deplacement par ex. Le tout combine avec une fabrique abstraite, et c´est 95% du jeu.
Dans tes headers faut pas foutre les implementations, mais les protos. Paste ton code sur un wall qu´on voit quelle tronche ca a, y´a surement un truc de mal gaule dans ton approche.
" comment faire pour charger l´image que je passerai en argument"
solution " bete", tu passes un char *, tu transformes au sein de la methode pour charger la bonne ressource, et tu retournes l´objet charge. Par ex. Ou alors a coup de macros.
Sinon tu parlais de code " propre", un concept de " ressource" ( tiens encore du polymorphisme qui se pointe) c´est bien aussi, qui associe un nom de ressource et un objet, le tout avec un manager de type singleton. Mais la c´est purement du design de code.
pour ta fonte, transforme la valeur de ta variable en chaine de caractere avec un sprintf par ex.
Merci , je vais essayer ce que tu m´as dit
sinon , je parlais de ce site la :
http://tastalian.free.fr/.fr/cours.php?part=SDL&index=3
mais il utilise une librairie addtionnelle , SDL_TTF , car sdl ne gere pas les fonts je crois . ..
ouais, SDL_ttf charge les fichiers font : tu lui passes une chaine en char* et tu recuperes un SDL_Surface* pret a etre blitté.
sinon, comme dis LGV, pour convertir tes variables en char --> sprintf
Bon , mea culpa LGV , je fais mettre des classes de partout avec un mass pointeurs
mais . .. plus tard
en fait , la mon but était déjà de parvenir à afficher une image , avec juste UNE brique qui serait tombe d´un nombre détermine de pixels par secondes
Je n´ai pas encore appris a me servir du temps ( sdl_getticks ? ) , ca m´entrainera ![]()
sinon , j´avoue que lorsque j´ai pense aux rotations et tout le nécessaire , la seule reponse qu´y m´est venue à l´esprit a ete : gogogo jeuxvideo.com ^^
Mais bon , j´y penserais plus tard a tout ca ![]()
je poste mon code dans deux secondes
dailleurs , vous pourrez me dire si c´est exactement ca , un moteur de jeu 2d ?
J´ai deja essayé de l´installer mais je n´y comprends rien.Je suis un peut spécial moi je suis rentré dans l´age be^te avant les autre et je suis pas près d´en sortir
le . cpp :
http://rafb.net/paste/results/Je317N10.html
le header correspondant ( affichage.h ) :
http://rafb.net/paste/results/upw84G96.html
vous en pensez quoi ? ![]()
merci pour tout conseil , remarque , critique . ..
ne met pas de code dans ton affichage.h
si tu veux le faire a part, renomme ton fichier
affichage.cpp
et met au dessus :
et dans affichage.h
tu mets juste les prototypes :
void ChargementImage();
void AffichageTout( SDL_Surface *img , int x , int y ) ;
void AffichageBout( SDL_Surface *img , int x , int y , int w , int h , int x2 , int y2 ) ;
Bon je ne suis pas professional mais voila ma sul critiqUn moteur de jeu sers a etre reutilisé,mais avec ta fonctions ChargementImage() elle ne peut que charger l´image plateau.La fonction que je t´ai mis en au elle permet de charge plusiere image.
Bon , je suis en train de reecrire mon header en enlevant tout nom propre à mon jeu .
Mais j´ai un problème ( encore ^^ ) pour l´initialisation de la SDL .
dans mon . cpp , j´ai ca :
SDL_Surface *Ecran;
InitialisationSDL(800,600,16,Ecran);
dans mon header , j´ai ca :
void InitialisationSDL( int x , int y , int bbp , SDL_Surface *img ) { . .. }
les points de suspension correspondent à un copier coller de la fonction d´initialisation , inclue auparavant dans le . cpp
a la difference que j´ai remplace Ecran par img , 800 par x , 600 par y et 16 par bbp .
Normalement , tout devrait marcher , mais a la compilation , le programme se lance ( ecran noir ) et s´arrete tout de suite , le fichier de log sterr donne :
" fatal signal : Segmentation Fault ( SDL Parachute Deployed) "
A quoi cela peut il etre du ? c ma faute ? oO ou alors on ne peut vraiment pas initialiser la SDL dans un . h .
. .. A ce propos , je n´ai pas bien compris ce que tu m´as dit , JYY :
si j´ai bien compris , mon header serait presque vide , il ne contiendrait que des prototypes ? je vois mal l´interet a vrai dire ![]()
faut que tu debug.
L´interet est simple :
il sert a séparer : quand tu feras un gros prog, l´interet sera flagrant.
Dans le fichier . h, tu mets juste les prototypes, c´est a dire ce que tu autorises a appeler de l´exétrieur.
Comme le sommaire d´un livre : l´idée est de faire un outil transparent, réutilisable par la suite, sans que tu aies besoin de revenir dans affiche.cpp
Bon , en utilisant , pour la premiere fois de ma vie , quelle emotion , le debuggeur de devcpp , j´obtiens :
" une violation d´acces ( erreur de segmentation ) est apparue dans votre programme . "
![]()
c´est normal, si ton prog a planté : ce qui est intéressant, c´est de savoir OU.
en lançant le debugger, tu vois ou.
Euh . .. ou ca ? j´ai remarqué sur la droite , dans l´onglet debug , ceci :
{<text variable, no debug info>} 0x402150 < printf> = Could not watch this variable
mais , je ne vois pas de ligne , ni de nom de variable .
dailleurs , je n´ai pas mis de " text variable "
( char qqchose ) ?
bizarre, quand le débugger se lance, au moment ou ça plante, tu dois avoir un curseur qq part non ?
Bon , le machin c´est l´horreur , j´ai redebuguer pour voir ( quand tu dis un curseur qq part , tu veux bien dire toute une ligne du programme surlignéee en marron-rouge ? )
Mais la , gros probleme
j´ai plusieurs trucs ( include , event , machin , for ? ! ) qui sont " not found in current context " . .. gné ?
ma text variable not watch est toujours la en plus . ..
je vais reposter mon code , ou mieux , remettre mon programme comme avant , c´est a dire avec l´initialisation dans le . cpp , parceque la ca marchait . ..
commence par me copier ici la ligne marron-rouge ![]()
Bah non , justement , y en a pas
mais ce qui est etrange ( je trouve ) c´est que des trucs comme " for " et SDL_BlitSurface " soient " not found in current context "
c´est bizarre quand meme . .. nan ? ^^
sinon , je n´ai pas de lignes en rouge comme d´ahbitude a la compilation , ni dans le . h ni dans le . cpp . ..