Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1595 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Fonction TIR pour jeu en SDL.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction TIR pour jeu en SDL.

n°2193397
sx72100
Posté le 08-06-2013 à 17:46:12  profilanswer
 

Bonjour à toutes et à tous :)  
Je viens vous demander de l'aide en C/SDL ! Je suis loin d'être un expert, et j'ai des difficultés sur une fonction précise. Je réalise un jeu C/SDL, et je souhaiterai que mon personnage puisse tirer (des balles) ainsi que les ennemis. Cependant je ne sais pas trop par où me jeter.  
J'ai lu sur ce forum des topics ressemblant où il était question de tableau dynamique avec des structures et pointeurs.  
Quel est votre avis, quelle vous semble être la manière la plus simple ?  
 
Merci d'avance pour votre aide à tous.  
Amicalement.  
SX

mood
Publicité
Posté le 08-06-2013 à 17:46:12  profilanswer
 

n°2193415
spark
Luc ?
Posté le 09-06-2013 à 08:16:47  profilanswer
 

commence par la fenêtre :o


---------------
Un cycle complet sera une série de 100.
n°2193427
Profil sup​primé
Posté le 09-06-2013 à 12:16:35  answer
 

Salut,  
 
ce que je peux te conseiller, c'est d'abord de faire ton jeu sans aucune texture / image, juste avec la console, en faisant des printf.
 
Une fois que ton algo sera fonctionnel alors tu rajouteras la SDL, qui est assez simple d'utilisation.
 
C'est ce que j'ai fait pour un projet perso, en 3 jours, j'ai reussi a faire un tetris. ;)


Message édité par Profil supprimé le 09-06-2013 à 12:16:59
n°2193435
sx72100
Posté le 09-06-2013 à 15:36:08  profilanswer
 

Merci Djswiti pour ta réponse :) Le problème c'est que mon projet (qui est scolaire) est déjà pas mal avancé dans d'autres domaines, et ce que j'arrive à faire en console ne fonctionne pas trop quand je l'intègre au projet. En SDL, mon perso se déplace, interagit avec le décor etc etc. Me manque la fonction TIR... Je vais suivre ton conseil et retester en console ! Si quelqu'un à d'autres solutions... :) Merci encore.  

n°2193458
Terminapor
I'll see you rise.
Posté le 10-06-2013 à 01:00:51  profilanswer
 

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 :
  1. struct Bullet
  2. {
  3.   int x,y; // Coordonnées sur l'écran
  4.   float DirX,DirY; // Vecteur normalisé pour la direction (DirX = cos(Angle), DirY = -sin(Angle))
  5.   int Vitesse;
  6.   int Rayon; // Rayon de collision
  7.   SDL_Image* Sprite; // Pour le dessin
  8. };
  9. void UpdateBullet(bullet * b)
  10. {
  11.   b->x += DirX * Vitesse;
  12.   b->y += DirY * Vitesse;
  13. }
 

Il te faudra un truc qui gère toutes les instances du jeu (voilà pourquoi perso j'ai toujours fait en C++ :D), mais en C tu peux tenter un truc comme ça :

 
Code :
  1. struct InstanceController
  2. {
  3.     Bullet **BulletList; // Tableau de pointeurs de balles
  4.     int NumBullets; // nb de balles
  5.     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)
  6.     int NumObjet;
  7. };
  8. // Créer une nouvelle balle enregistrée dans un IC :
  9. Bullet* CreateBullet(InstanceController * IC)
  10. {
  11. // alloc mémoire
  12.   Bullet * B = new Bullet;
  13.   Bullet ** Tmp = malloc(sizeof(Bullet) * (IC->NumBullets+1));
  14.   // Réallocation du tableau (y'a peut être realloc qui existe en C)
  15.   memcpy(IC->BulletList, Tmp, sizeof(Bullet) * (IC->NumBullets));
  16.   free(IC->BulletList);
  17.   IC->BulletList = Tmp;
  18.   IC->BulletList[IC->NumBullet] = B;
  19.   ++IC->NumBullets;
  20.   return B;
  21. }
  22. void UpdateIC(InstanceController * IC)
  23. {
  24.   for (int i=0;i<IC->NumBullets;++i)
  25.     UpdateBullet(IC->BulletList[i]);
  26. for (int i=0;i<IC->NumObject;++i)
  27.    UpdateObject(IC->ObjectList[i]);
  28. // 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.
  29. // 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
  30. }
 

Normalement, ton jeu doit être comme ça dans le main :

 
Code :
  1. boucle principale cassée lorsqu'on veut quitter le jeu
  2.     Tick : Mise à jour de tout les objets du jeu (balles, persos, etc,etc)
  3.     effacer l'écran
  4.     Draw : Dessin de tout les objets
  5.     Timer de pause pour limiter le framerate
  6. 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 :D

 

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 :o


Message édité par Terminapor le 10-06-2013 à 01:04:12

---------------
Perhaps you don't deserve to breathe
n°2193591
Profil sup​primé
Posté le 10-06-2013 à 18:50:09  answer
 

sx72100 a écrit :

Merci Djswiti pour ta réponse :) Le problème c'est que mon projet (qui est scolaire) est déjà pas mal avancé dans d'autres domaines, et ce que j'arrive à faire en console ne fonctionne pas trop quand je l'intègre au projet. En SDL, mon perso se déplace, interagit avec le décor etc etc. Me manque la fonction TIR... Je vais suivre ton conseil et retester en console ! Si quelqu'un à d'autres solutions... :) Merci encore.  


 
En fait, l'essayer en console te prouve que tu fais bien ce que tu penses faire.
"afficher un X a la collision", etc.
 
Apres si tu as deja une partie graphique 100% fonctionnelle tu peux tres bien le faire directement en mode graphique, et donc si ton jeu est deja tres avance, tu peux en effet le faire directement...
 
Dis toi que pour lancer un tir, il faut simplement que tu fasses comme si tu deplacais un joueur (mais un tir est une nouvelle entite), mais sans appuyer sur la touche continuellement.
Tant que tu ne touches pas d'objet (ni de personnage) alors le tir continue dans sa trajectoire.

n°2193659
sx72100
Posté le 10-06-2013 à 21:03:58  profilanswer
 

Merci pour vos conseils :)
Mon groupe s'est inspiré de ce que m'a proposé Terminapor !  
Merci beaucoup pour votre aide à tous !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Fonction TIR pour jeu en SDL.

 

Sujets relatifs
[VBA Excel 2002] Formater le résultat d'une fonction persoRequete pour afficher le nom en fonction de l'ip
la sortie d'une fonction soit un paramétre d'entrèe de la même fonctioutilisation de la fonction run() d'un service windows
copie classeur a classeur, en fonction du contenufonction checkdnsrr ne fonctionne pas
retourner une structure dans une fonctionCouper/coller ligne en fonction N° de commande
[C] [Résolu] Tetris -> SDL ? Réseaux ?Ecrire y et z en fonction de x
Plus de sujets relatifs à : Fonction TIR pour jeu en SDL.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR