IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

[SDL] Gestion combats


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [SDL] Gestion combats
    Bonjour,

    je réalise actuellement un petit mario en c++ avec SDL.

    Un perso peut avoir une arme avec plusieurs munitions

    Une classe perso et une classe arme.
    Le probleme, lorsque je tire avec mon mario sur une plante (aussi de la classe perso), je ne sais pas lui infliger des dégats...

    Chaque arme inflige un certain nombre dégats et chaque perso a un certain nombre de vie.

    Mon projet se trouve ici

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Avatar de N_I_C_S
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    450
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 450
    Points : 681
    Points
    681
    Par défaut
    Salut,

    le plus simple est sûrement d'avoir une classe Munition qui contient le nombre de dégats infligés et une fonction getDegats(). Dans la classe Perso, tu fais une fonction virtual retirerVie(int) dans laquelle tu pourra aussi implémenter le comportement spécifique de chaque perso quand vie<=0. Quand il y a collision, tu fais unPerso->retirerVie( uneMunition->getDegats() ).

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    En réalité le problème c'est qu'il m'est impossible de retirer les vies de mes enemis.

    Je m'explique: mon perso possède un tableau de munition. Pour chaque tire on appel le constructeur de munition et on incrmente le nombre balle de 1.

    A chaque tour et pour chaque perso je parcours les munitions qu'ils ont tirées. Si mario tire une balle je sais lorsqu'il touche un objet mais je ne sais pas dire c'est cet objet là , je lui retire des vies...

    Je suis clair ou ...

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par Splinter_7

    A chaque tour et pour chaque perso je parcours les munitions qu'ils ont tirées. Si mario tire une balle je sais lorsqu'il touche un objet mais je ne sais pas dire c'est cet objet là , je lui retire des vies...

    Je suis clair ou ...
    Ultra simplissime
    Si ton perso tire tu parcours des listes d'objets et en fonction des cordonnées du projectile et voire de d'autres paramêtres ( dégats à causer donc points de vie à retirer ) l'objet voit ainsi ses paramêtres évoluer...
    Le probleme, lorsque je tire avec mon mario sur une plante (aussi de la classe perso), je ne sais pas lui infliger des dégats...
    Il faut faire le distinguo sinon c'est pas possible....soit utiliser l'héritage soit faire une classe différente avec des listes différentes ...( std::list,std::vector)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oki je vais tester sa !
    Juste une dernière question... j'ai une classe perso je voudrai réaliser une méthode getArme(int i) qui me renvoi l'arme qui se trouve à l'indice i

    Arme Perso::getArme(int i)
    {
    return arme[i];
    }

    , que j'utiliserai comme ceci:

    Mario->getArme(i).getDegats();

    Comment faire ? mon programme coupe lorsque je fais cela

  6. #6
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    je crois qu'il faut utiliser un pointeur dans ton cas, essaie dans le doute



    Arme *Perso::getArme(int i)
    {
    return &this->arme[i];
    }

    Mario->getArme(i)->getDegats();

    Si ca ne marche pas, le problème est autrepart

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Oui sa fonctionne nikel ... peux tu m'expliquer pourquoi il faut un pointeur ici ?

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Plutôt une référence, tant qu'à faire. Le pointeur c'est lorsqu'on veut pouvoir renvoyer NULL.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Arme &Perso::getArme(int i)
    {
        return this->arme[i];
    }
    Le problème ici c'est qu'en renvoyant par valeur tu vas renvoyer non pas l'arme stockée dans le tableau, mais une copie de celle-ci. Après j'imagine que la copie est mal gérée au niveau de ta classe Arme, ce qui produit un comportement non souhaité.

Discussions similaires

  1. C++, SDL, gestion retour de force du joystick
    Par Guilbert69 dans le forum SDL
    Réponses: 16
    Dernier message: 20/01/2010, 19h15
  2. [SDL] Gestion du saut
    Par john93 dans le forum SDL
    Réponses: 8
    Dernier message: 16/05/2008, 15h53
  3. [SDL] Gestion d'évènements au clavier
    Par Shargat dans le forum SDL
    Réponses: 3
    Dernier message: 12/05/2008, 21h11
  4. [SDL] Gestion des sauts
    Par Splinter_7 dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 02/05/2007, 19h29
  5. [SDL] Gestion des touches claviers problématique
    Par Invité4 dans le forum SDL
    Réponses: 3
    Dernier message: 13/10/2006, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo