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

Projets Discussion :

Mon projet zelda


Sujet :

Projets

  1. #1
    Invité
    Invité(e)
    Par défaut Mon projet zelda
    Bonjour,

    J'avais déjà rapidement parlé de mon projet de Zelda il y a quelques semaine dans un autre topic. Cette fois ci, je voudrais le présenter plus en détail et avoir quelques retours

    Donc, j'ai commencé le développement il y a à peu près 6 mois. Je le fait pour le fun et pour apprendre à développer en C++/SDL. Les autre ressources du jeu (graphismes et musiques sont ou seront récupérées là où elles existent).

    Aujourd'hui, l'ensemble commence à être jouable (jouable dans le sens où on commence à interagir avec l'environnement) et j'ai besoin de retour sur ce que j'ai déjà fait.

    note 1 : c'est mon premier programme de cet ordre. Mon projet le plus important était jusqu'alors un résolveur de sudoku en java (et jamais rien en C++ (ni même en C)) il y a certainement de nombreuses choses que je ne fais pas comme il faudrait. Donc les remarques plus techniques sont les bienvenues aussi.

    Les sources du projet sont à télécharger à l'adresse suivante.
    http://zelda.sujets-libres.fr/

    note 2 : pour le moment, je travaille uniquement sous GNU/Linux. Je n'ai pas encore essayé de le compiler sur d'autres OS.

    note 3 : le jeu nécessite l'installation de la lib SDL, SDL_gfx et SDL_image. Le makefile est prévu.

    note 4 : mes contenus (code source intégralement et ce que j'aurai développé moi même) sera sous GPL. Ce n'est pas encore précisé dans les sources (faut que je pense à le rajouter proprement d'ailleurs).

    [edit] J'ai oublié de préciser les touches :
    a : epée
    z : maillet
    q : porter/lancer des objets
    p : pause
    touches de direction -> je vous laisse deviner

    A vous !
    Dernière modification par Invité ; 12/10/2011 à 21h47.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 928
    Points : 220 601
    Points
    220 601
    Billets dans le blog
    128
    Par défaut
    Bonjour,

    Pensez à bien faire un make clean avant de distribuer une quelconque version.

    Design:

    Pourquoi la position contiendrai un "compteurTile" , "typeBlocTraversable", "typeSol". Cela ne me semble pas vraiment être nécessaire pour une position.
    (Soit, votre structure à trop de responsabilité).

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void setPositionX (int X); // Pour lire et mettre à jour la position de Link
        void setPositionY (int Y);
        int getPositionX();
        int getPositionY();
    Encore mieux, si on pouvait passer directement une position (la structure) en paramètre. Non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void setBougeHaut(bool H); // Pour lire et mettre à jour le sens de déplacement de Link
        void setBougeBas(bool B);
        void setBougeGauche(bool G);
        void setBougeDroite(bool D);
        bool getBougeHaut();
        bool getBougeBas();
        bool getBougeGauche();
        bool getBougeDroite();
    Si vous utilisiez un enum (ou autre) pour la direction, vous auriez qu'un setteur / getteur.
    De plus, je ne suis pas sur que ce soit à un élément externe de dire la direction du personnage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void setTailleCarte(int X,int Y);
        int getLargeurCarte();
        int getHauteurCarte();
    Cela n'a pas à être dans la classe du personnage ( http://blog.emmanueldeloget.com/inde...abilite-unique )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Surface* chargementImage(const char* fichier_image);
    Même remarque. Si je n'ai pas de perso, je ne charge pas d'image ?

    Mieux vaut faire un fichier par classe (je dis cela après avoir vu personnage.h).
    Il me semble que toute vos classes possèdent trop de responsabilités (elles sont énormes).

    Ah, finalement, la classe jeu à la même fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_Surface* load_image( std::string filename );
    Pour une classe qui possède des pointeurs (donc il y aura allocation dynamique), vous n'avez pas implémenté de destructeur. Cela sent la fuite de mémoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #define LARGEUR_TILE 16  // hauteur et largeur des tiles.
    #define HAUTEUR_TILE 16
    #define LARGEUR_PERSOLINK 16  // hauteur et largeur de Link.
    #define HAUTEUR_PERSOLINK 24
    #define LARGEUR_ECRAN 320  // hauteur et largeur de l'écran.
    #define HAUTEUR_ECRAN 240
    Cela est répété dans tout les fichiers ? O_o.
    Mieux vaut que vous ne le mettiez qu'une seule et unique fois, dans un fichier .h ou dans une classe statique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    // Pour la classe héro
    SDL_Rect persoLink[26][9];
    SDL_Rect persoLinkNage[4][5];
    SDL_Rect persoLinkPorte[4][5];
    SDL_Rect persoLinkSpecial[7];
    SDL_Rect epeeLink[6][6];
    SDL_Rect bouclierLink[4];
    SDL_Rect mailletLink[4][3];
    SDL_Rect baguetteFeuLink[4][3];
    SDL_Rect baguetteGlaceLink[4][3];
    SDL_Rect objetALancer[4][3];
    SDL_Rect ombreObjetLance;
     
    SDL_Rect jaugeLink[2];
    SDL_Rect inscriptionDemiLink;
    SDL_Rect cadreArmeLink;
    SDL_Rect rubisLink;
    SDL_Rect bombeLink;
    SDL_Rect arcLink[2];
    SDL_Rect cleLink;
     
    SDL_Rect inscriptionVieLink;
    SDL_Rect petitsCoeursLink[3];
     
    SDL_Rect feuillesExplose[7][4];
     
     
    SDL_Surface *pLink = NULL;
     
    SDL_Surface *pEpeeLink = NULL;
    SDL_Surface *pBouclier = NULL;
    SDL_Surface *pObjets = NULL;
    SDL_Surface *pStatut = NULL;
    SDL_Surface *pObjetALancer = NULL;
    SDL_Surface *pOmbreObjetLance = NULL;
     
     
    SDL_Surface *pBuissonExplose = NULL;
     
    // Pour la classe personnageJeu
     
    // Pour la classe ennemi
    SDL_Rect ennemi46[4][2]; // x 22 - y 27
    SDL_Rect epee46[4];
    SDL_Rect explo[7];
     
    SDL_Surface *pExplo = NULL;
     
    SDL_Surface *pEnnemi46 = NULL;
     
    SDL_Surface *pEnnemi47 = NULL;
     
    SDL_Surface *pEnnemi48 = NULL;
     
    // Pour la classe ami
    SDL_Rect personnage1[4][2]; // x 16 - y 25
     
    SDL_Surface *pAmi1 = NULL;
    Des variables globales à foison ... alors que vous êtes en C++ et que vous avez le système de classes
    Je ne veux plus jamais voir ça. C'est du code à retirer immédiatement (je plaisante pas)
    Explication:
    Une variable globale a une visibilité très étendue (surement de trop) et en plus, on ne sait pas trop qui gère sa durée de vie (construction / destruction). Il y a un grand risque que vous ayez des fuites de mémoire / ressources

    Évitez les pointeurs pour vos tableaux. En C++, tout comme en java, vous avez des listes (std::list) et des vecteurs (sorte de liste en mieux std::vector)

    Je vous conseille la lecture de quelques cours et de la FAQ

    Niveau jeu, bah je dois dire que c'est impressionnant tout de même, que cela tienne autant debout . Bravo.
    Par contre, les ennemies se bloquent lorsqu'ils suivent le joueur, à cause d'une mauvaise gestion des collisions. Notamment, il indique aller sur le bas, le buisson est sur la droite et il n'avance plus.

    En haut à gauche, j'ai un carré de couleur uni, pas très normal.

    Sinon, gestion des animations, ça semble correct.

    Voilà pour le moment.

    Alors je ne dis pas cela pour vous décourager. Juste qu'actuellement, votre code est imbuvable (genre, vous ne pourrez pas travailler en équipe). Mais encore, vous pouvez vous dire, ouep, mais là, c'est un projet perso. Il y a un deuxième point à voir. C'est que lorsque vous allez vouloir ajouté plein de trucs (nouvelles armes / actions) vous allez prendre beaucoup de temps pour ce faire, à retoucher des petits morceaux de code éparpillés / rajouter des bugs (et des corrections encore plus mauvaise). Cela peut être évité avec une bonne architecture (il y a 5 ans, je n'aurai jamais dit cela ).
    De plus, si vous arrêtez de travailler sur votre, pendant, 1 mois, ou même 2 semaines, vous allez oublier des morceaux et vous ne saurez plus comment il fonctionne. Du coup, vous aurez du mal à continuer le projet. Certes les commentaires peuvent aider, mais si le code est bon, il est explicite (et inversement).

    Voilà mes conseils, j'ai fait les remarques afin que vous vous amélioriez

    EDIT:
    Ah ah ! J'ai trouvé un bug effectif \ o / (Je ne pouvais pas partir sans). Une fuite de mémoire.
    On tue un ennemi, on entre dans la maison, on ressort, il réapparait, on le retue et on recommence. Le jeu prend plus en plus de place en mémoire.
    Il semble que la fuite soit aussi lorsque tapons avec le maillet sur les trucs en bois

    EDIT2:
    La pause fait que mon CPU grimpe à 100%.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci de cette réponse très constructive.

    Concernant le make clean, c'est au niveau de l'archive du projet ou du makefile qu'il faut le faire ? Je pensais que j'avais bien vu la chose.

    La structure position porte en fait mal son nom et ne se rapporte pas du tout au personnage que l'on dirige.
    Elle est utilisée afin mémoriser les propriétés de la carte. De fait, chaque tuile de la carte est totalement, partiellement ou pas du tout traversante, dispose d'un compteur (utilisé notamment pour gérer les animations automatiques qui font tourner 3 tuiles différents à la même position) et d'un type sol associé (pour le moment, un cas par défaut et un autre indiquant que le sol est de l'eau).

    Pour les deux points suivants, l'idée est en fait de limiter le nombre de getteurs et de setteurs. Je ne connaissait pas enum, je vais regarder ça de plus près.

    Oui, ça semble être une bonne remarque pour la direction que l'on veut donner au personnage. Pas de raison qu'un objet d'un autre type ai à y accéder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        void setTailleCarte(int X,int Y);
        int getLargeurCarte();
        int getHauteurCarte();
    Pour ceci, j'ai voulu me simplifier la vie à un instant T même ça ne me paressait pas très naturel non plus. Je vais revoir ça et regarder le lien de plus près.

    Pour les quelques points suivants, je vais essayer de voir où je peux faire du ménage et simplifier un peu (et ajouter les destructeurs qui vont bien ; je n'ai pas cet automatisme)

    C'est entendu pour les variables étendue.

    Concernant les std::list, je n'en ai utilisée qu'une seule dans ma classe carte car je ne voyais pas comment faire simple autrement. Je donc voir à mieux utiliser ces outils ailleurs où il faut.

    Concernant le jeu en lui même, la gestion des collisions entre les ennemis et le décors n'est pas parfaite (j'y travaille en ce moment). Le petit carré est normal. Il est bleu si le jeu s'affiche à 50 fps et change de couleurs si on y est pas. Ça me permet de savoir rapidement s'il n'y a pas de ralentissement (surtout sur des machines peu puissantes ou dans des machines virtuelles).

    Je vais regarder pour la fuite mémoire mais c'est peut être dû à l'un des points évoqué plus haut. Je vais déjà la reproduire chez moi. Idem pour la pause.


    En tout cas, content d'avoir une réponse très constructive. S'il y a d'autres remarques, il ne faut pas hésiter.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 928
    Points : 220 601
    Points
    220 601
    Billets dans le blog
    128
    Par défaut
    Citation Envoyé par diabolos29 Voir le message
    Concernant le make clean, c'est au niveau de l'archive du projet ou du makefile qu'il faut le faire ? Je pensais que j'avais bien vu la chose.
    C'est à faire avant de publier l'archive. Afin que tout les .o soit supprimés.

    Concernant les std::list, je n'en ai utilisée qu'une seule dans ma classe carte car je ne voyais pas comment faire simple autrement. Je donc voir à mieux utiliser ces outils ailleurs où il faut.
    À peu de chose prêt, il faut remplacer tout les tableaux, par des std::vector :p

  5. #5
    Invité
    Invité(e)
    Par défaut
    Re-bonjour,

    Je travaille toujours sur ce projet.

    Pour la petite histoire, mon code commençant à ressembler à un sac de nœuds, je repris le projet depuis le début en essayant de mieux le modéliser avant de coder (en m'appuyant sur un diagramme de classes). Certaines parties de la première version ont été réintégrées, d'autres non. Tout ce que j'avais implémenté à l'époque ne l'a pas nécessairement encore été dans la version disponible au moment où je poste ce message.

    Bref, je me retrouve franchement mieux dans ce que code. J'ai d'ailleurs fait une pause de 6 mois sur ce projet pour avancer sur un autre et lorsque j'ai recommencé à travailler sur celui là, j'ai pu replonger dedans sans problème.

    Sinon, j'ai un moment pensé faire le jeu complètement moi même. J'ai d'ailleurs passé deux mois exclusivement à réaliser mes propres graphismes, pour un résultat franchement moyen. Après réflexion, j'ai donc privilégié le fait d'aller au bout du projet, quitte à reprendre les graphismes et la musique ailleurs pour y arriver (ça reste un jeu amateur que je fais juste pour le fun).

    Le jeu en lui même maintenant. Les dernières versions se trouvent à l'adresse suivante : http://dev.sujets-libres.fr/sources/ActionRPG/
    Voilà rapidement de quoi ça à l'air.


    Les contrôles ont un peu évolué :
    a : epée
    z : arme secondaire
    q : courrir
    entrée : menu de sélection items
    espace : lire, agir sur des objets
    echap : sortir du menu de sélection items, afficher le menu de fin de partie
    touches de direction : diriger le perso

    Le jeu est vraiment loin d'être terminé mais il est quand même possible de l'essayer et de s'amuser avec (j'espère) sans but...

    Voilà voilà, à vous !
    Dernière modification par Invité ; 15/09/2013 à 00h50.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 928
    Points : 220 601
    Points
    220 601
    Billets dans le blog
    128
    Par défaut
    Le projet Code::Blocks n'est pas très bien configuré. Pour Linux, je vous conseille de configurer de la façon suivante (voir pièce jointe).

    Sachant que pour un projet il faut choisir entre compiler de façon statique (avec les .a), ou dynamique (avec les .so).
    De plus, mettre le chemin absolu fait que vous n'avez pas de compatibilité avec les configurations qui diffèrent de votre système.

    Finalement, lorsque je démarre, j'ai juste un écran noir, sans rien dans la console Freeze ?
    Images attachées Images attachées  

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci pour le conseil.

    J'ai reconfiguré mon projet et j'ai mis l'archive à jour.

    Par contre, l'écran noir, c'est une fois les modifs appliquées sur le projet ou bien avant ? De même, sans utiliser le projet code::blocks, est-ce que make fonctionne ?

    Merci.

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 928
    Points : 220 601
    Points
    220 601
    Billets dans le blog
    128
    Par défaut
    Ça me fait bizarre d'avoir dans ma ligne de compilation "-DSFML_DYNAMIC" pour un projet en SDL .

    Cette fois, ça compile du premier coup
    Par contre, toujours une fenêtre noire, sans rien de plus.

    Il semble que je sois bloqué ici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Gestion des FPS
    do
    {
       tempsActuel = SDL_GetTicks();
       SDL_Delay(2);
    }
    while(tempsActuel<tempsPrecedent+(950/fps));
    En commentant ce code, j'ai une image \ o /

    Du coup, le jeu est un peu trop speed
    Mais au moins, il fonctionne

  9. #9
    Invité
    Invité(e)
    Par défaut
    Vu pour -DSFML_DYNAMIC.

    Par contre, c'est étrange. Je n'ai jamais eu ce problème sur les quelques machines où j'ai testé le jeu, du coup je suis un peu embêté pour le reproduire.

    Est-ce que tu as essayé (ou pourrais essayer) à tout hasard d'initialiser "tempsPrecedent" au début du main et me dire si ça change quelque chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        int tempsActuel, tempsPrecedent = 0;
        int fps = 50; // 50
    J'ai remis l'archive à jour à l'instant avec cette petite modif. Je ne vois pas ce que ça pourrait être d'autre...

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 928
    Points : 220 601
    Points
    220 601
    Billets dans le blog
    128
    Par défaut
    En effet, l'initialisation des variables semble corriger le problème.
    De toute façon, une bonne règle de programmation est de toujours initialiser ses variables.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je viens de mettre à jour la version en téléchargement (ça reste une Démo ; pas de scénario ; map toujours en cours de construction, IA pnj de base...).
    J'ai aussi prévu une version Windows (compilé dans une machine virtuelle sous XP ; Normalement, c'est OK mais bon, je ne suis pas à l'abri de bugs...).

    -> http://dev.sujets-libres.fr/

  12. #12
    Invité
    Invité(e)
    Par défaut
    J'en profite pour ajouter une petite vidéo


  13. #13
    Expert éminent
    Avatar de Vetea
    Homme Profil pro
    Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Inscrit en
    Février 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Test - Maintenance - Production - BE dans une PME d'electronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2005
    Messages : 2 061
    Points : 6 443
    Points
    6 443
    Par défaut
    Bonsoir,

    J'ai vu la vidéo mais pas encore testé ton jeu.
    C'est très sympa et très bien réalisé, bravo !

    La gestion des coups sur les ennemis est a revoir cependant, il clignote tout en reculant ce qui rend le visuel un peu confus.
    Sinon, rien à redire, cela va en s'améliorant.

    Il ne te manque plus qu'à trouver un bon graphiste 2D et tu pourras faire un véritable RPG 2D grâce à ton moteur !!
    Allez au travail !!

  14. #14
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Ah ça me rappelle des souvenirs

    Effectivement, les personnages touchés qui clignotent ça fait bizarre.

    les graphismes j'aime bien, ça ressemble vraiment à ceux de la game Boy

    Après j'ai des petits détails : ton fichier ReadMe est mal foutu : tout est à la suite, on a du mal à le lire.

    Vivement que ton projet avance en tout cas

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour et merci de vos retours.

    Pour les ennemis qui clignotent quand ils sont touchés, c'était un essai pour marquer visuellement leur état "touché". La vidéo ne rend pas bien là dessus car le clignotement est plus rapide normalement. Ceci dit, même avec le clignotement normal, ce n'est pas top. Je ferai sans doute autrement au moins pour ces ennemis là. Ça fera partie des futures améliorations.

    Pour le read me, je ne l'ai pas touché depuis longtemps. Pareil, il faudra que je le retravaille.

    Un graphiste 2D m'aiderais pour que ce projet prenne ses distances vis à vis de la licence Zelda mais c'est un très gros travail et j'avance de manière irrégulière dessus (je partage mon temps libre entre ce projet, un second projet et mes cours au CNAM). Il n'est donc pas très facile de collaborer avec moi, du moins pour le moment. Du coup, je me suis fait une raison et je réalise un clone assez fidèle.
    Pour la suite, une fois ce projet terminé, je pense quand même réutiliser mon moteur de jeu sur quelque chose de moins ambitieux mais totalement personnel cette fois. Le temps que je passe sur ce jeu n'est donc pas perdu...

    Pour revenir à ce jeu, je pense en être à 90% et je commence à travailler sur les derniers 90% .

  16. #16
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Points : 10 188
    Points
    10 188
    Par défaut
    Qu'une chose a dire c'est du bon boulot
    Pour le Readme il est "bien foutu" mais il a été fait sur Linux du coup comme les retours chariot sont différent sur windows et Linux ben sur Windows en as pas de saut a la ligne alors que sur linux oui =P

  17. #17
    Invité
    Invité(e)
    Par défaut
    Ah oui, je n'ai pas pensé à adapter le READ ME à la plateforme Windows. Le contenu sera de toute manière aussi à revoir un peu.
    Normalement, un petit "unix2dos README.txt" devra résoudre le problème sur la forme (à inclure à la prochaine mise à jour).

  18. #18
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 928
    Points : 220 601
    Points
    220 601
    Billets dans le blog
    128
    Par défaut
    Le makefile semble faux. La variable CFLAGS n'est pas du tout utilisée.
    En effet, la règle ne doit pas être :
    %.o : %.c
    mais
    %.o: %.cpp
    Du coup, on est des tonnes de warnings a supprimer !

    Ah, en mettant la pause (echap) j'ai pu appuyé sur le bouton d'action (coup d'épée) et l'animation a débuté et s'est arrêté.
    Dommage que vous mettez le jeu par défaut en plein écran, je déteste cela. (Surtout que je ne peux pas faire de Alt+Tab pour écrire ici).
    Lancer un pot sur le mur haut, fait passer le pot à travers le mur \*o /

    Wouah, le code de Ami.cpp est violent avec autant de switch/case.
    Carte.cpp est un fichier trop énorme.
    S'il manque un fichier, ça crash ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    personnage1 = chargerImage("images/personnages/personnage1.png");
                personnage2 = chargerImage("images/personnages/personnage2.png");
                personnage3 = chargerImage("images/personnages/personnage3.png");
                personnage4 = chargerImage("images/personnages/personnage4.png");
                personnage5 = chargerImage("images/personnages/personnage5.png");
                personnage6 = chargerImage("images/personnages/personnage6.png");
                personnage7 = chargerImage("images/personnages/personnage7.png");
                personnage8 = chargerImage("images/personnages/personnage8.png");
                personnage9 = chargerImage("images/personnages/personnage9.png");
                personnage10 = chargerImage("images/personnages/personnage10.png");
                personnage11 = chargerImage("images/personnages/personnage11.png");
                personnage12 = chargerImage("images/personnages/personnage12.png");
                personnage13 = chargerImage("images/personnages/personnage13.png");
                personnage14 = chargerImage("images/personnages/personnage14.png");
                personnage15 = chargerImage("images/personnages/personnage15.png");
                personnage16 = chargerImage("images/personnages/personnage16.png");
                personnage17 = chargerImage("images/personnages/personnage17.png");
                personnage18 = chargerImage("images/personnages/personnage18.png");
                personnage19 = chargerImage("images/personnages/personnage19.png");
                personnage20 = chargerImage("images/personnages/personnage20.png");
                personnage21 = chargerImage("images/personnages/personnage21.png");
                personnage22 = chargerImage("images/personnages/personnage22.png");
                personnage23 = chargerImage("images/personnages/personnage23.png");
                personnage24 = chargerImage("images/personnages/personnage24.png");
                personnage25 = chargerImage("images/personnages/personnage25.png");
                personnage26 = chargerImage("images/personnages/personnage26.png");
                personnage27 = chargerImage("images/personnages/personnage27.png");
                personnage28 = chargerImage("images/personnages/personnage28.png");
                personnage29 = chargerImage("images/personnages/personnage29.png");
                personnage30 = chargerImage("images/personnages/personnage30.png");
                personnage31 = chargerImage("images/personnages/personnage31.png");
                personnage32 = chargerImage("images/personnages/personnage32.png");
    Vous êtes sur que vous ne pouvez pas faire un tableau ?
    Bon, le code est j'imagine, difficilement maintenable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
            case 0: // bombe
            case 1: // grande clé
            case 2: // petite clé
            case 3: // parchemin
            case 4: // grand cœur
            case 5: // quart de cœur
            case 6: // bousole
            case 7: // cristal
            case 8: // lampe
            case 9: // baguette de feu
            case 10: // grande épée plantée
            case 11: // livre vert
            case 12: // médaillon rouge
            case 13: // gant 1
            case 16: // petite épée plantée
            case 17: // gant 2
            case 18: // palme
            case 19: // baguette de glace
            case 20: // médaillon vert
            case 21: // flèche argent
            case 23: // petit cœur
            case 24: // fleche normale
            case 25: // petite réserve de magie
            case 26: // grande réserve de magie
            case 27: // grappin
            case 28: // maillet
            case 29: // arc normal
            case 30: // médaillon bleu
            case 31: // bottes
    Faites un enum :'(
    Vous êtes en C++, mais je ne vois zero C++ ?

    Valgrind rapporte d'énormes fuite de mémoire (plus de 50 Mo).

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Comme précédemment LittleWhite, c'est un retour constructif.

    Bon :
    - Vu pour le Makefile.
    - Je n'avais pas constaté ce défaut du coup d'épée (j'en ai vu un autre récemment qu'il faut aussi que je corrige). A traiter donc...
    - Noté pour le plein écran. Habituellement, je commente l'une ou l'autre config d'écran dans le main. Il faudra que j'y pense la prochaine fois que je proposerai une version demo.
    - Les pots lancés traversent effectivement les murs. Ça ne m'avait pas choqué jusqu'à présent mais il y a certainement quelque chose à faire. Dans certains cas, je souhaite quand même que les pots puissent traverser des zones infranchissables par le joueur. Il faut donc que je définisse sous quels critères ça passe et sous quels critères ça casse.
    - Le code Ami.cpp me semble adapté à l'usage que je lui ai réservé.
    - La classe "carte" est effectivement assez chargée et a un rôle important. Il faudrait sans doute scinder cette classe en plusieurs autres plus petites et limiter le rôle de chacune. Il faut que j'y réfléchisse...
    - Je n'ai pas constaté de crash de l'appli s'il manque un fichier .png . Ça m'étonne un peu quand même... Il faudra que je regarde ça de plus près. Quand à mettre toutes ces informations dans un tableau, je ne sais pas si ça apporterai réellement quelque chose (mais je peux me tromper).
    - enum, j'ai toujours fait sans (par méconnaissance en fait) -> il faut que je regarde.
    - Pareil pour le fuite mémoire, je ne l'avais pas constatée. Ça va être ma première priorité dessus.

    Concernant le code en général, je cherche à le rendre le plus lisible possible (et ça passe par l'apprentissage de bonne pratiques de codage).
    J'ai d'ailleurs refactorisé pas mal de fonctions dernièrement.
    Aujourd'hui, il est encore loin d'être parfait mais je progresse à ce niveau là. J'arrive tout de même à replonger dans mon code facilement même si je n'y touche pas durant plusieurs mois. Je n'aurais pas pu dire la même chose de la première version

  20. #20
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 928
    Points : 220 601
    Points
    220 601
    Billets dans le blog
    128
    Par défaut
    - Je n'ai pas constaté de crash de l'appli s'il manque un fichier .png . Ça m'étonne un peu quand même... Il faudra que je regarde ça de plus près. Quand à mettre toutes ces informations dans un tableau, je ne sais pas si ça apporterai réellement quelque chose (mais je peux me tromper).
    Alors, je n'ai pas tester. Peut être que c'était vérifier autre part dans le code.
    Pour les tableaux, cela vous apporte que vous n'avez pas 50 variables qui se balade dans le code, mais juste une (un tableau) avec 50 cases. Le code est moins farfelu, vous pouvez utiliser des boucles for pour parcourir le tableau. Notamment pour ce que j'ai montré, une boucle fort avec un sscanf bien placé et vous avez le même chargement en cinq lignes.

    Pour les switch case, c'est dur à dire, car je ne vois pas pourquoi vous faites de la sorte. Mais pour moi, un tel switch/case avant autant de case me semble un peu étrange (peut être il est juste, quoique, il me semblait qu'il y en avait plein dans le code, trop surement, et qui pouvait être remplacé par une variable indiquant l'état du personnage ou quelque chose dans ce gout).

    Bravo à la capacité de replonger dedans après des mois, moi, je le trouvais bien trop "complexe" dans son style (je n'ai pas les même standards, donc c'est très subjectif comme avis).

Discussions similaires

  1. Du c dasn mon projet C++
    Par chronos dans le forum MFC
    Réponses: 7
    Dernier message: 07/02/2005, 15h49
  2. [FLASH MX] Incorporer un swf dans mon projet
    Par Toutouffe dans le forum Flash
    Réponses: 2
    Dernier message: 19/01/2005, 13h04
  3. [Système d'aide] Lier mon *.hlp à mon projet
    Par termerair dans le forum MFC
    Réponses: 2
    Dernier message: 18/01/2005, 14h39
  4. Choix d'un SGBDR pour mon projet: Interbase?
    Par super16 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 09/07/2004, 09h15
  5. Réponses: 5
    Dernier message: 05/06/2004, 14h12

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