En même temps, pas sûr que le C soit vraiment bien choisi pour du jeu vidéo
Sinon, tu peux faire ça :
Code :
- struct Bullet
- {
- int x,y; // Coordonnées sur l'écran
- float DirX,DirY; // Vecteur normalisé pour la direction (DirX = cos(Angle), DirY = -sin(Angle))
- int Vitesse;
- int Rayon; // Rayon de collision
- SDL_Image* Sprite; // Pour le dessin
- };
- void UpdateBullet(bullet * b)
- {
- b->x += DirX * Vitesse;
- b->y += DirY * Vitesse;
- }
|
Il te faudra un truc qui gère toutes les instances du jeu (voilà pourquoi perso j'ai toujours fait en C++ ), mais en C tu peux tenter un truc comme ça :
Code :
- struct InstanceController
- {
- Bullet **BulletList; // Tableau de pointeurs de balles
- int NumBullets; // nb de balles
- Objet* ObjectsList; // Tableau de tout les objets du jeu (je simplifie, mais en gros tu auras probablement un tableau d'ennemi, un joueur, etc, etc)
- int NumObjet;
- };
- // Créer une nouvelle balle enregistrée dans un IC :
- Bullet* CreateBullet(InstanceController * IC)
- {
- // alloc mémoire
- Bullet * B = new Bullet;
- Bullet ** Tmp = malloc(sizeof(Bullet) * (IC->NumBullets+1));
- // Réallocation du tableau (y'a peut être realloc qui existe en C)
- memcpy(IC->BulletList, Tmp, sizeof(Bullet) * (IC->NumBullets));
- free(IC->BulletList);
- IC->BulletList = Tmp;
- IC->BulletList[IC->NumBullet] = B;
- ++IC->NumBullets;
- return B;
- }
- void UpdateIC(InstanceController * IC)
- {
- for (int i=0;i<IC->NumBullets;++i)
- UpdateBullet(IC->BulletList[i]);
- for (int i=0;i<IC->NumObject;++i)
- UpdateObject(IC->ObjectList[i]);
- // Ensuite là tu vérifie les collisions, mais j'ai la flemme de faire le code, et puis je sais pas si tu comptes faire des AABB ou des Bounding Spheres ou autre.
- // Lorsqu'une collision est détectée (je te laisse zieuter les codes pour les AABBs & les Bounding spheres, c'est très simple à faire), tu peux appeler une fonction de traitement, qui s'occupera de baisser la vie / tuer un perso
- }
|
Normalement, ton jeu doit être comme ça dans le main :
Code :
- boucle principale cassée lorsqu'on veut quitter le jeu
- Tick : Mise à jour de tout les objets du jeu (balles, persos, etc,etc)
- effacer l'écran
- Draw : Dessin de tout les objets
- Timer de pause pour limiter le framerate
- fin boucle
|
Donc, le tick serait l'appel de UpdateIC(...), le Draw DrawIC (où tu fais tes blits en fonction des coordonnées x & y et de l'image associée de tout les objets contenues dans ta structure)
En C++, étant donné que tu peux faire du polymorphisme, c'est nettement plus pratique pour ce système là.
Et je vois pas pourquoi faire des printf ça l'aiderait, que ce soit avec la SDL ou en console c'est pareil, en fait c'est carrément plus chiant en console
L'intégration d'un système comme ça en C peut être assez chiant, mais une fois mis en place, le reste est facile.
edit : Je suis pas programmeur C, donc y'a probablement des espèces de résidu de C++ zarb dans mon code, il me semble qu'il faut préciser le mot-clef struct à chaque fois qu'on se sert d'une variable de type structure, ou alors via un typedef mais la flemme de vérifier
Message édité par Terminapor le 10-06-2013 à 01:04:12
---------------
Perhaps you don't deserve to breathe