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 :

Question de structure pour un jeu de type Bomberman


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut Question de structure pour un jeu de type Bomberman
    Bonjour,

    J’ai le projet avec des amis de réaliser un jeu Bomberman. C’est a dire pour ceux qui ne connaissent pas, qu’il y aura des joueurs qui poseront des bombes. Pour réaliser cela, j’ai pensé faire deux classes : une classe CJoueur et une class CBombe.

    Le joueur pourra poser des bombe en appuyant sur une touche. Je vais donc faire une méthode poser_bombe() pour CJoueur. Dans cette méthode, il y aura création d’une nouvelle bombe via new CBombe (problème n°1 : ou placer le pointeur sur CBombe ?).

    Une bombe comprendra : un Timer, un pointeur vers le CJoueur qui l’a posé, d’autre variables (état, animations, ect). A la fin du timer, la bombe explose (méthode exploser() par exemple) et à la fin de l’explosion, il faut donc supprimer la bombe avec delete[] d’où le problème n°2 : comment faire en sorte que la class se supprime elle même ?

    Bien entendu, il faut que toutes les CBombe soient accessible dans le main.
    J’ai pensé enregistrer les CBombe dans les objets CJoueur qui l’on posé (dans un tableau ou liste chaînée par exemple), mais cette solution me semble bancale puisque aux yeux du jeu, toutes les bombes sont identiques face à leur poseurs.

    D’avance merci pour vos réponses.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je suppose que quelque part, il y a une classe qui contient le terrain du jeu aussi. Cette classe que j'appelle généralement Jeu posséderait aussi les instances des joueurs et les bombes posées mais aussi les cases touchées par une explosion.

    Citation Envoyé par FabaCoeur
    Le joueur pourra poser des bombe en appuyant sur une touche. Je vais donc faire une méthode poser_bombe() pour CJoueur. Dans cette méthode, il y aura création d’une nouvelle bombe via new CBombe (problème n°1 : ou placer le pointeur sur CBombe ?).
    Suffit de demander à la classe Jeu d'ajouter une bombe à une certaine case.

    Une bombe comprendra : un Timer, un pointeur vers le CJoueur qui l’a posé, d’autre variables (état, animations, ect). A la fin du timer, la bombe explose (méthode exploser() par exemple) et à la fin de l’explosion, il faut donc supprimer la bombe avec delete[] d’où le problème n°2 : comment faire en sorte que la class se supprime elle même ?
    - Pourquoi un pointeur vers le joueur qui l'a posé ?
    - Ta boucle générale devrait appelé l'instance de la classe Jeu pour mettre à jour tout le monde, du coup, cette fonction vérifiera les timers et fera exploser les bombes. C'est donc elle qui détruira la bombe.

    Bien entendu, il faut que toutes les CBombe soient accessible dans le main.
    Pourquoi ???
    Tout est inclu dans une jolie classe qui gére tout joliment.

    J’ai pensé enregistrer les CBombe dans les objets CJoueur qui l’on posé (dans un tableau ou liste chaînée par exemple), mais cette solution me semble bancale puisque aux yeux du jeu, toutes les bombes sont identiques face à leur poseurs.
    En effet, c'est bancal comme solution...

    Jc

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Ha oui, la class CJeu semble donc être une bonne solution !

    Ainsi quand un joueur posera une bombe, dans sa méthode poser_bombe() on appellera la méthode de CJeu ajouter_bombe() qui prendra en paramètre un couple de coordonnée (il suffira d'envoyer les coordonnées du joueur lui même).

    Pourquoi un pointeur vers le joueur qui l'a posé ?
    On pourrait immaginer donner des points aux joueurs qui en tue d'autre. Ainsi, avec le pointeur on saurait à qui donner le point si la bombe tue un joueur, de la même manière on pourrait lui en enlever un s'il se tue lui même.

    Pourquoi ???
    Tout est inclu dans une jolie classe qui gére tout joliment.
    Oui sans la class CJeu, ca aurait été le main qui l'aurait remplacé, avec une fonction (et non pas méthode) ajouter_bombe() mais c'est beaucoup moins propre à écrire.


    Encore une fois merci pour tes réponses !
    C'est rapide et efficace, bravo

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    J'ai fait lire ce topic à un des amis qui va programmer le jeu avec moi, et il m'a fait remarqué quelque chose à laquelle je n'avais pas pensé.
    J'ai écrit juste au dessus:

    Citation Envoyé par Moi-même
    Ainsi quand un joueur posera une bombe, dans sa méthode poser_bombe() on appellera la méthode de CJeu ajouter_bombe() qui prendra en paramètre un couple de coordonnée (il suffira d'envoyer les coordonnées du joueur lui même).
    Mais comment l'objet issu de CJoueur va-t-il connaitre l'objet issu de CJeu? Je voie mal une méthode de CJoueur faire l'instruction jeu.ajouter_bombe() puisque pour la classe CJoueur, l'objet jeu n'existe pas.

    C'est a dire qu'il faut, à l'initialisation d'un objet CJoueur, il faut enregistrer un pointeur vers l'objet de la classe CJeu à laquelle il appartient? Ainsi la méthode poser_bombe() de CJoueur appelera de la manière suivante: jeu->ajouter_bombe(). Cela aussi me semble bancal non?

  5. #5
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    non, ca n'a rien de bancal, ca me semble logique qu'un joueur puisse connaitre le jeu dans lequel il se deplace...

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par FabaCoeur
    C'est a dire qu'il faut, à l'initialisation d'un objet CJoueur, il faut enregistrer un pointeur vers l'objet de la classe CJeu à laquelle il appartient? Ainsi la méthode poser_bombe() de CJoueur appelera de la manière suivante: jeu->ajouter_bombe(). Cela aussi me semble bancal non?
    Soit tu mets un pointeur vers le CJeu, soit tu transforme la classe CJeu en classe singleton (ou style singleton) et tu récupères un pointeur directement avec une méthode static de la classe, soit tu mets une instance en variable globale.

    La version singleton est généralement la plus sûre puisque de toute facon il y aura un seul objet CJeu en place dans le programme mais plus difficile à mettre en place.

    Généralement, il est bon de commencer avec la variable globale et voir comment ca fonctionne bien

    A savoir que je ne suis pas pour les variables globales mais généralement dans un programme de jeu, mais j'ai tout de même un ou deux objets qui sont en globaux car ce sont les pièces maîtresses du programme.

    Jc

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par fearyourself
    [...]soit tu transforme la classe CJeu en classe singleton (ou style singleton)
    Gosh, je viens d'apprendre l'existence des singletons. D'après mes recherches, c'est une class qui a pour but de n'avoir qu'une seule et unique instance, je n'ai pas bien compris comment on la met en place (lectures en diagonales).

    Je pense plutot m'orienter vers une instance globale, ca sera beaucoup plus simple à gérer pour un modeste programme. J'ai une petite question à ce sujet: où est ce que je dois déclarer l'objet ?

    Car mon projet sera décomposé en plusieurs fichiers, par exemple cjoueur.cpp contiendra les méthodes de CJoueur. Et il faut donc que j'ai accès à l'instance jeu de CJeu dans ce fichier, donc comment dois-je faire pour l'inclure ?
    Je ne vais tout de même pas inclure un header dans lequel l'objet sera déclaré (beurk) !

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par FabaCoeur
    Je ne vais tout de même pas inclure un header dans lequel l'objet sera déclaré (beurk) !
    Généralement, je mets l'instance dans le fichier main.cpp et je déclare un extern dans les .cpp qui en ont besoin.

    Une solution plus élégante serait de le mettre dans le .cpp du code de la classe et déclarer quelque chose de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /* Variable globale */
    static MaClasse *monInstance = NULL;
     
    /* Fonction statique de la classe */
    MaClasse *MaClasse::MaFonctionStatique()
    {
      if(monInstance == NULL) {
         monInstance = new MaClasse();
      }
      return monInstance;
    }
    Jc

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    1) Erf, je viens maintenant de découvrir ce qu'est le mot clé extern
    J'en apprends à tous les posts lol

    En gros si je fais:

    extern CJeu jeu;

    Lors de la compilation, le compilateur (ou linker) va aller chercher l'instance 'jeu' ailleurs dans les sources, et si dans mon main.cpp je l'ai déclaré, ca va être bon ?



    2) Avec le second mécanisme, étant donné que le pointeur est static, ca voudrais dire que pour toutes les instances de CJeu j'aurais le choix d'enregistrer un pointeur vers la class qui m'interesse? Bien sur, dans mon cas je n'aurais qu'un seul objet donc cela convient très bien. En gros, dans le main, j'aurai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CJeu jeu;
    CJeu::MaFonctionStatique(); // Définition du pointeur
    Et si j'utilise ce code, après dans mon joueur.cpp, si j'inclus le fichier jeu.h je pourrais donc accèder à la méthode ajouter_bombe() l'objet jeu avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CJeu::monInstance->ajouter_bombe();
    Est-ce bien cela?

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par FabaCoeur
    1) Erf, je viens maintenant de découvrir ce qu'est le mot clé extern
    J'en apprends à tous les posts lol

    En gros si je fais:

    extern CJeu jeu;

    Lors de la compilation, le compilateur (ou linker) va aller chercher l'instance 'jeu' ailleurs dans les sources, et si dans mon main.cpp je l'ai déclaré, ca va être bon ?
    Oui c'est cela.

    2) Avec le second mécanisme, étant donné que le pointeur est static, ca voudrais dire que pour toutes les instances de CJeu j'aurais le choix d'enregistrer un pointeur vers la class qui m'interesse? Bien sur, dans mon cas je n'aurais qu'un seul objet donc cela convient très bien. En gros, dans le main, j'aurai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CJeu jeu;
    CJeu::MaFonctionStatique(); // Définition du pointeur
    Et si j'utilise ce code, après dans mon joueur.cpp, si j'inclus le fichier jeu.h je pourrais donc accèder à la méthode ajouter_bombe() l'objet jeu avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CJeu::monInstance->ajouter_bombe();
    Est-ce bien cela?
    Non, si dans une autre sources tu voulais ton instance de jeu, il faudrait faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CJeu *ptr = CJeu::monInstance();
    ptr->ajouter_bombe();
    Jc

  11. #11
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 385
    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 385
    Points : 20 463
    Points
    20 463
    Par défaut
    Tout cela m'a l'air compliqué: tu as un perso qui est le joueur si le joueur appuie sur la touche espace tu crées une nouvelle bombe avec un new MAIS que tu ajoutes à une liste parce que dans un bomberman on peut placer plusieurs bombes à la fois (il me semble )
    Avec un timer on regarde si le temps de retardement est écoulé si c'est le cas la bombe explose détruit les cases alentours et on retire la bombe de la liste
    Ce pourrait être cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    std::vector<CBombe> tabBombes;
    //.......
    if( Touche_enfoncee==SPACE)
    {
    CBombe bombe;
    bombe.attribut1=quelquevaleur;
    bombe.temps_retardement=500;//500ms
    tabBombes.push_back(bombe);
    }
    Dans le timer bombe.temps_retardement-- et si égal=0 alors explosion
    Une bombe comprendra : un Timer, un pointeur vers le CJoueur qui l’a posé, d’autre variables (état, animations, ect). A la fin du timer, la bombe explose (méthode exploser() par exemple) et à la fin de l’explosion, il faut donc supprimer la bombe avec delete[] d’où le problème n°2 : comment faire en sorte que la class se supprime elle même ?
    ->std::vector::erase voir la STL

    Si j'ai un instant samedi ou dimanche je te ferai le code qu'il faut

  12. #12
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Mat.M
    Tout cela m'a l'air compliqué: tu as un perso qui est le joueur si le joueur appuie sur la touche espace tu crées une nouvelle bombe avec un new MAIS que tu ajoutes à une liste parce que dans un bomberman on peut placer plusieurs bombes à la fois (il me semble )
    Avec un timer on regarde si le temps de retardement est écoulé si c'est le cas la bombe explose détruit les cases alentours et on retire la bombe de la liste
    C'est la même idée mais je ne mets pas la liste en évidence, je l'encapsule dans une classe qui la contiendra c'est tout...

    Histoire de ne pas avoir une liste d'objets, une liste de bombe, une liste de persos en évidence quoi...

    Jc

  13. #13
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 385
    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 385
    Points : 20 463
    Points
    20 463
    Par défaut
    Citation Envoyé par fearyourself
    Histoire de ne pas avoir une liste d'objets, une liste de bombe, une liste de persos en évidence quoi...
    Jc
    Je veux bien mais faut tout de même avoir une liste de bombes qui ont été déposées ?

  14. #14
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Mat.M
    Je veux bien mais faut tout de même avoir une liste de bombes qui ont été déposées ?
    Oui mais je mettrais cette liste en interne de la classe CJeu. Il n'y a normalement un seul endroit qui aurait besoin de cette liste : la fonction qui vérifie les timers et du coup, si on met cette fonction dans la class CJeu...

    Jc

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par fearyourself
    Non, si dans une autre sources tu voulais ton instance de jeu, il faudrait faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CJeu *ptr = CJeu::monInstance();
    ptr->ajouter_bombe();
    Oui en réalité je voulais écrire:
    CJeu::monInstance()->ajouter_bombe()
    Ce qui revient au même je pense, à moins que la syntaxe ne soit pas acceptée par le C++. De toute facçon, cela va être très lourd à écrire, je préfère de loin ta syntaxe.


    Citation Envoyé par Mat.M
    Je veux bien mais faut tout de même avoir une liste de bombes qui ont été déposées ?
    Oui mais en fait, nous on parle plus en terme de spécification que d'implémentation. Je préfère que dans mon code j'appelle:
    jeu->ajouter_bombe() plutot que tasBombe.push_back()
    Cela me semble plus clair à la relecture.
    Le jeu devient plus souple, on n'a plus besoin de savoir sous quelle forme sont stockées les données (listes chainées ou non, tableau...) mais juste savoir qu'en appelant ajouter_bombe() on va ajouter une bombe, point final.

    D'après ce que l'on a construit jusque là, si j'ai bien tout suivit, il suffirait de déclarer le tas de bombe en tant que variable privée de la class CJeu. Ainsi, dans joueur.cpp par exemple je peux appeller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CJeu *ptr = CJeu::monInstance();
     
    /* plus loin dans le code ... */
     
    ptr->ajouter_bombe(joueur.x, joueur.y); // par exemple
    Et dans mon jeu.cpp j'aurais alors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void CJeu :: ajouter_bombe(int x, int y) {
     
      CBombe b;
      b.timer = ...;
      b.x = x; b.y = y;
      /* autres attribus */
     
      this->tas_bombe.push_back(b);
    }
    Et de la même manière, on va pouvoir ajouter des autres méthodes CJeu tel que supprimer_bombe() par exemple pour quand une bombe a explosé.


    Citation Envoyé par Mat.m
    ->std::vector::erase voir la STL

    Si j'ai un instant samedi ou dimanche je te ferai le code qu'il faut
    Merci bien en tout cas si tu as le temps ca serait sympas !
    J'aimerai bien que quelqu'un m'explique la différence entre la class list et la class vector car j'ai pas bien compris la nuance. Je sais très bien ce qu'est une liste chainée et comment on les gères, mais les vecteurs je ne sais pas déjà ce que c'est (surement rien a voir avec un vecteur au sens mathématique) mais en plus on retrouve toutes les méthodes de la class list alors je m'interroge !

  16. #16
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 385
    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 385
    Points : 20 463
    Points
    20 463
    Par défaut
    Citation Envoyé par FabaCoeur
    Merci bien en tout cas si tu as le temps ca serait sympas !
    huumm ça risque de couter cher
    as-tu des graphismes déjà tout faits ?

    J'aimerai bien que quelqu'un m'explique la différence entre la class list et la class vector car j'ai pas bien compris la nuance. Je sais très bien ce qu'est une liste chainée et comment on les gères, mais les vecteurs je ne sais pas déjà ce que c'est
    vector=tableau dynamique indicé.Pour accéder à un élement on y accéde par indice
    list=même chose que vector mais de manière circulaire.Il faut un itérateur pour accéder à un élement.
    Citation Envoyé par fearyourself
    Oui mais je mettrais cette liste en interne de la classe CJeu. Il n'y a normalement un seul endroit qui aurait besoin de cette liste : la fonction qui vérifie les timers et du coup, si on met cette fonction dans la class CJeu...

    Jc
    Ah ok je n'avais pas vu cela comme ça

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Citation Envoyé par Mat.M
    huumm ça risque de couter cher
    as-tu des graphismes déjà tout faits ?
    La réponse est non !
    Pour l'instant, le projet est à zéro, j'en suis à l'élaboration de la structure (titre du topic ^^) pour partir sur une bonne base.
    J'essaye d'y voir plus clair pour partir dans une bonne direction, donc s'il y a un bout de code que tu pourrait m'offrir c'est un bout qui donne les grandes lignes de la création (je ne veux pas d'un travail tout fait, au contraire), et même si tu veux gagner du temps une source à cheval entre l'algorithmie et la syntaxe C/C++ fera très bien l'affaire.

    D'ailleur en parlant de structure je me rends compte qu'au fil du topic, la structure du programme prends forme

  18. #18
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 385
    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 385
    Points : 20 463
    Points
    20 463
    Par défaut
    J'ai fait un embryon de jeu téléchargeable ici :

    http://www.megaone.com/mmarty/source_jeu_bomberman.zip

    ou bien voir la pièce jointe

    Il a été compilé avec VC++ 6.0.
    Il faut impérativement installer SDL et ajouter SDL.lib et SDLMain.lib au projet.

    Ceux qui veulent une version Direct Draw plus performante peuvent me demander

    Ce qui a été fait :
    *gestion affichage ( décor, perso )
    *déplacement perso
    *quand on presse une touche ajout d'une bombe et explosion.

    Reste à faire :
    *gestion de l'explosion et faire disparaitre les cases
    *si perso proche bombe qui explose alors moins de points de vie
    *un éditeur de décor

    Le code n'est pas très académique mais parfaitement fonctionnel libre à toi ou à ceux qui veulent utiliser l'héritage de classe etc....

    S'assurer que tous les objets alloués soient bien libérés également j'ai pas bien vérifié

    Les autres peuvent participer aussi libre à eux..

    Si ça peut intéresser la rubrique Contribution......du forum

  19. #19
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Merci c'est toujours intéressant de regarder le code des autres !
    J'ai regardé en diagonale, j'approfondirai sous peu.

    Question rapide, pourquoi utilises-tu SDL_PumpEvents() ?

  20. #20
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 385
    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 385
    Points : 20 463
    Points
    20 463
    Par défaut
    Citation Envoyé par FabaCoeur
    Question rapide, pourquoi utilises-tu SDL_PumpEvents() ?
    Hello,
    en fait je ne sais pas pourquoi j'ai utilisé cette instruction le code n'est pas finalisé à 100% ( bien que j'aie passé un peu de temps dessus )
    J'ai fait un copier coller d'un autre bout de code.
    Tu peux l'enlever ou non

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Choix d'un type intelligence artificiel pour un jeu de carte
    Par acia78 dans le forum Intelligence artificielle
    Réponses: 0
    Dernier message: 13/12/2012, 18h36
  2. [Débutant] question du mécanisme pour la structure de program grand
    Par xingjing910 dans le forum VB.NET
    Réponses: 6
    Dernier message: 27/03/2012, 08h20
  3. Question pour un jeu de plateau : Solitaire en C++
    Par Shr3ck dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 07/04/2010, 16h25
  4. Structure pour un jeu
    Par Unknown13 dans le forum C
    Réponses: 23
    Dernier message: 30/11/2007, 13h54
  5. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47

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