Erf désolé, mon MSN: youlcdk@hotmail.com
Bonjour à tous , j´aurais besoin d´explication avec les headers/fichier sources
je m´explique , j´ai decide de continuer mon jeu du pingouin , mais lorsque je l´avais commence , je l´avais fait en un seul fichier . cpp . ..
la , comme ca commence a grossir ( houlala , 324 lignes ! ^^ ) , j´aimerais savoir coment le partager en plusieurs fichiers . il est relativement bien construit ( enfin , les focntions sont independantes quoi , j´ai une partie image , une partie son etc )
donc il serait facile a decouper , sije savais comment faire . ..
j´avais pense le mettre en . h , mais d´apres vos dires ( et les exemples de . h du repertoire include aussi ) les . h ne contiennent QUE es prototypes de fonction . ..
comment je pourrais faire svp ?
parceque sa serait cool de faire une partie affichage image , une autre texte , son , et seulement la boucle dans le main .
bah je vois le systeme d´appel:
un prog qui apelle : le sons, l´image , et l´anime,
exemple concret:
< début du prog>
j´apelle mon fichier . cpp sons
" " " " " " """ " """ " " " image
" " " " " " " " " " " " " " animation
< fin du prog>
j´appelle = #include " son.cpp" ?
jejej -> Bon alors ça va marcher comme ça :
Tu as différents headers contenant les prototypes des fonctions du *.cpp correspondant.
Si tu utilises un certain type, tu inclues dans ce *.h les *.h dont tu as besoin ( par exemple SDL.h pour faire un SDL_Rect...)
Ensuite tu crées les *.cpp, au début tu inclues leur header, puis tu fais le reste comme tu veux.
Dans les headers que tu crées, comme tu dois inclure le header dans le cpp ou tu définis les fonctions, mais aussi dans le cpp où tu te sers des fonctions, si tu laisses le tout comme ça, le compilo va te sortir " multiple definition"...C´est pourquoi, dans les headers que tu crées, il faudra commencer par mettre :
et à la fin du header :
Le nom repère souvent on met _nomdufichier_h_ ( enfin c ce qu´on m´a dit et je fais comme ça, après je sais pas si c´est une convention ou une habitude)
Par exemple :
Donc en gros imagine que tu aies un main qui ait besoin d´une fonction Dire_Salut(), ça ferait un truc dans ce genre :
::: main.h :::
int main(int argc, char* argv);
::: main.cpp :::
int main(int argc, char* argv)
{
Dire_Salut();
return 0;
}
::: Dire_Salut.h :::
void Dire_Salut();
::: Dire_Salut.cpp :::
void Dire_Salut()
{
printf("%s\n", Salut);
}
Ca donnerait un truc comme ça...Ensuite, si tu dois modifier des variables dans une fonction incluse, alors tu ne pourras pas la modifier comme si la fonction était dans le même fichier ( et alors, elle connaitrait cette variable), là, tu devras lui faire un pointeur vers la variable à changer en argument.
Salut,
voila, je suis débutant en c++ ( commencé hier^^), donc je m´excuse si mes questions ne sont ni très intéligentes ni très bien formulées.
Pour commencer, le sdl.
Jai effectué linstallation du sdl comme dit sur ton tuto JeanYvesYves.
et lorsque je met ce code :
SDL_Surface* screen; // l´ecran principale
SDL_Surface* firstscreen; / / tampon temporaire
SDL_Event event; // gestion d´evenement
void init_SDL() // initialise SDL
{
SDL_Init(SDL_INIT_VIDEO); // preapare SDL
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN); / / mode graphique
/ /SDL_ShowCursor(0); eneleve la souris
}
void waitkey() // attend qu´on appuie sur RETURN
{
while(1) // boucle
{
while(SDL_PollEvent(&)) // aquisition d´evenement
{
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?
{
if ( event.key.keysym.sym == SDLK_RETURN) return; / / c´est " RETURN" ?
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1; // structure rectangle
init_SDL(); // initialise ( plus haut)
firstscreen = SDL_LoadBMP("image.bmp"); // charge l´image
/ / on dessine
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024; // défini le rectangle
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1); /
/ colle l´image sur l´écran, NULL car on affiche TOUTE l´image
SDL_Flip(screen); // affiche la prochaine frame
waitkey(); // attends qu´on appuie sur Return ( plus haut)
SDL_ShowCursor(1); // reactive la souris
SDL_Quit(); // quitte SDL
return 0; // quitte le programme
}
Ben, ca plante. L´écran est noir ( pourtant l´image est dans le même répertoire que le programme) et ca reste blocqué.
je suis obligé de faire ctr+alt+supp et fermer le programme.
S´il était mal installé, ne devrais-je pas avoir une erreur au moment de la compilation?
SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
peut etre que ca vient de la , perso j´ai remarqué que mon ordi ne supportait ni le mode 32 bbp , ni le fullscreen . ..
essaye de changer certaines valeurs peut etre , tu pourrais mettre ( 800,600,0 / * si on met zero , SDL cherche la valeur la plus adapteee je crois , sinon essaye 16 ? */ | SDL_SWSURFACE |SDL_DOUBLEBUF | SDL_NOFRAME ) ;
sinon bah . .. c´est pas normal ^^
Nan, bah ca marche toujour pas ![]()
par contre , quand tu dis que ca reste bloque , c´est meme lorsque tu appuies sur RETURN ? ( == entree , j´ai mis du temps a trouver ^^ )
parceque , ce code ci ne " gere" pas l´appuie sur altF4 , alttab ou escape . ..
Ptival : merci beaucoup , j´essaye de suite ![]()
Le coup des multiples definitions of . .. c´est si on inclut SDL dans main.cpp et qu´on l´inclut aussi dans Affichage.cpp c´est ca ?
si oui , pas besoin des #ifndef chez moi , parceque mon but est d´avoir un seul fichier dedie a l´affichage , un autre au son etc . ..
mais je presume que ca pourrait etre utile quand meme , lors d´un projet plus gros , d´avoir plusieurs sources dediees a l´affichage . ..
alors j´ai quand meme essaye le coup des #define , mais ca marche pas :
il me dit " unterminated #ifndef , pourtant je ne crois pas qu´il faille mettre quoi que ce soit de plus ?
merci
est ce qu´en C++ avec iostream on peut effacer l´écran ( la console je veut dire) sans utiliser un system("CLS") c´est à dire juste avec les classe de iostream ( cout.clear() ne fait pas ça apparement).
et aussi, est-il possible de déplacer le curseur à une ligne et une colonne choisis arbitrairement ?
tant que j´y suis, peut-on changer a couleurs de la sortie ? et enfin comment peut-on remplacer le system("pause") par une commande c/c++ ( donc portable) qui se débloque réellement à l´appuie de n´importe quelle touch et pas juste de entrée.
merci d´avance pour vos réponse.
arg , j´ai parle trop vite , j´ai besoin des ces #define . ..
en effet , j´ai une fonction de SDL_TTF qui se sert de SDL_COLOR . ..
Donc , comment je peux faire pour inclure SDL.h dans mon texte.cpp , sans avoir de multiple definitons ? et sinon , ok pour les headers , mais pour les variables ?
parceque , j´ai ma surface d´affichage déclarée ainsi dans mon main.cpp :
SDL_Surface *Affichage;
mais , je m´en sert d´en ma fonction d´ecriture de texte , mise dans texte.cpp . .. un conseil ?
![]()
Merci jeje, mais j´ai tout essayé, y compris le enter... rien à faire. Il me met " le programme ne répond pas" quand je veu le fermer...
Ou trouver un tutorial complet de A à Z pour programmer en C et C++
perdu_de_linfo => ca ressemble à une boucle infini ton problème...
nopseudonym => lis un peu partout sur ce topic tu trouveras tout seul. Si tu n´as pas le courage de faire deja ca, laisse tomber.
C´est vrai que ca y ressemble, mais la je suis pas trop apte à trouver l´erreur... Je n´ai fais qun bête copier-coller...
Pouriez vous m´expliquer ce que veut dire le " 1" comme argument dans la premier boucle?
et la deuxieme?
while(SDL_PollEvent(&)) // aquisition d´evenement
?
Merci d´avance ![]()
normallement pour que le programme se ance tu doit appuyer une fois sur entrée, puis une deuxième fois pour le quitter.
le 1 ça veut duste dire que la boucle ne s´arrète jamais.
mais normallement, y´a pas une fonction waitkey() que tu aurait du copier coller aussi ?
je te conseilel de faire les autre tuto avant, plutot que de comencer directement par la SDL.
ça ne sers à rien, car tu ne comprend pas ce que tu fait, et tu ne pourra donc rien faire d´autre que du copier coller, ce qui ne vat pas t´apprendre grand chose.
aprend d´abord le C++.
1. La base du C++
2. SDL : programmation graphique 2D
J´ai pas sauté d´étape, le sdl c´est bien le second chapitre ![]()
Sinon le code donné par jeanyvesyves est la:
http://perso.numericable.fr/~fvirtman/info/tuto/2_1_01_image.cpp
Le copier coller, je trouve que c´est le meilleur moyen d´apprendre, ca me permet de voir le résultat ![]()
merci++
ah oui, le copier coller du forum est trop moche, ça m´a induit en erreur.
normallement le code marche t´as peut-être un problème avec la SDL.
je ne sais pas si elle utilise DX ou oGL, mais tu devrait vérifier la version des driver de ta carte graphique peut-être.