Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu, Tour par Tour, Console, C++

Sujet résolu
Anonyme
    28 août 2021 à 18:30:25

    Bonjour !

    Nous sommes deux étudiants apprenant le C++ sur notre temps libre. On a commencé la semaine dernière à travailler ensemble sur un petit jeu en tour par tour qui s’utilise en ligne de commande.

    Le but est simple, on incarne un personnage (un mage ou un chevalier) et on doit affronter des ennemis (Gobelins et/ou Trolls). On gagne de l’xp en tuant des ennemis ce qui permet de passer des niveaux et d’améliorer nos compétences (points de vie, armure/bouclier ou les dégâts) et aussi d’augmenter la difficulté du jeu par la même occasion.

    Le lien github : https://github.com/Haulun/Console_Turn_Based_Game

    On aimerait, si c’est possible, avoir des retours sur la structure de notre code, positifs comme négatifs. On veut savoir si on part dans une mauvaise direction ou s' il y a une erreur qui pourrait nous porter préjudice plus tard par exemple.

    Pour l’instant notre projet est très simple :
    On a un fichier main.cpp avec une boucle while qui gère le tour par tour tant que le joueur n’est pas mort.
    On a :
    Une classe Entity
    Deux classes Hero et Enemy qui héritent de Entity.
    Deux classes Knight et Mage qui héritent de Hero
    Et deux classes Goblin et Troll qui héritent de Enemy.


    L’objectif de ce petit jeu, est d’apprendre le C++ tout en pratiquant.
    Sur le long terme, il nous permettrait de créer des jeux un peu plus évolués qu’un simple jeu console.

    Cordialement
    • Partager sur Facebook
    • Partager sur Twitter
      28 août 2021 à 19:09:23

      Bonjour,

      Pour ce qui est des jeux de rôles, j'ai lu sur ce forum que beaucoup conseillaient une approche entity component system ( ou ECS ) pour ce type de jeu car c'est plus flexible. En effet l'héritage multiple avec tout un tas de classes induit du couplage, ce qui n'est pas le cas d'un ECS (tu trouveras beaucoup de ressources sur internet qui parlent de cette façon de coder). Il existe plusieurs façon d'implémenter un ECS. Cela dit je dois t' avouer que je ne suis pas pro 'héritage' , je l'ai même plutôt banni de mes codes à quelques exceptions près.

      • Partager sur Facebook
      • Partager sur Twitter

      Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

        28 août 2021 à 19:59:08

        Un ECS n'est pas meilleur dans l'absolue. Il est meilleur sur certains points, dans un contexte donné.

        Pour un jeu aussi simple, il y a, a mon avis, d'autres choses a corriger avant d'envisager un ECS. (En plus, il débute en C++, il faudrait se focaliser sur l'apprentissage des syntaxes du C++ plutôt que de partir dans des problématiques d'architecture).

        -------------------------------------------

        Je ne vais pas faire une analyse ligne par ligne, il y a trop de choses.

        Au niveau syntaxique :

        - ca manque de const et référence, en particulier dans les paramètres et retours de fonction.

        - aucun move, aucun override

        - a mon avis, ton code ne compile pas sans warning. A corriger. (Je vois en particulier des fonctions virtuelles dans une classe sans destructeur virtuel)

        - utilise les enum classes

        - initialise par défaut tes variables membres lors de la déclaration

        En termes d'architecture :

        - la fonction main est trop longue. Refactorise la logique du jeu dans une classe dédiée

        - tu as des classes pour les trolls, les mages, etc, mais tu as aussi une partie de la gestion des classes qui est codé en dure dans la classe entity. Gros problème d'organisation de la responsabilité de tes classes.

        - beaucoup trop de getter et setter. Revoir la logique d'organisation de tes classes et les principes SOLID

        -
        Edité par gbdivers 28 août 2021 à 19:59:51

        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          28 août 2021 à 22:01:45

          Merci beaucoup pour vos retours très instructifs
          • Partager sur Facebook
          • Partager sur Twitter
            29 août 2021 à 10:00:21

            Bonjour Haulun,

            Je me permets d'ajouter 2 autres remarques (passer après GBDivers, ça met la barre haute !)

            1) Pourquoi as-tu mis tes objets dans un namespace "JeuConsole", si tu ajoutes en début de ton main.cpp un "using namespace JeuConsole;" qui fait que ce "namespace ne sert à rien !

            [de même, "using namespace std;" c'est pas beau ! il faut pas !]

            2) Généralement, on configure le compilateur (ou le make) pour qu'il retrouve les directories des includes ou des sources, et on ne les met pas en dur dans les sources. C'est pas une bonne solution de mettre : #include "Entities/entity.hpp", rapidement ça va être difficile de retrouver tes sources

            Cordialement



            • Partager sur Facebook
            • Partager sur Twitter

            Jeu, Tour par Tour, Console, C++

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown