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

C++ Discussion :

[AVIS] Jeu console en C++


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Par défaut [AVIS] Jeu console en C++
    Bonjour à toutes et à tous,
    Je programme en c++ depuis environ 6 mois, j'ai commencé l'orienté objet il y a environ 2 semaines et j'ai alors fait un petit jeu dans la console pour me pratiquer.
    Le jeu est un jeu de combat tour par tour à deux joueur(je n'ai même pas pensé coder un AI ), au début, on achète notre arme(3 choix), un bouclier, si désiré, et des potions de vie. ensuite le combat commence...
    J'ai donc fait une classe Character pour tout ce qui est du joueur, une classe Weapon pour l'arme et une classe Menu, pour les menu ^^.

    Je me demandais donc s'il y avais des programmeurs plus expérimenté que moi qui voulais bien analyser mon code et me dire ce qui est bien/pas bien, à modifier, etc.

    Donc en bref, mon code est-il correct sachant que je débute en orienté objet(je suis rendu aux surcharges d'opérateur dans le cours C++ )?

    Merci !
    voici mes fichiers .cpp et .h : MyGame(fichiers).rar
    P.S: Mon code est-il const-correct ?

  2. #2
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 735
    Par défaut
    Bonjour.

    Quelques remarques en vrac :

    Les lignes du genre if(foo==true) return true; else return false; s'écrivent de façon plus courte en return foo;.
    La fonction Character::isPotion() devrait se nommer Character::hasAPotion().
    Le fonction confirmChoice(int, int) utilise un nombre magique 48. Je présume qu'il s'agit du caractère ASCII '0' et qu'il sert à convertir des char en int. il vaut mieux écrire '0' plutôt que 48 voire (mieux) créer des fonctions int charToInt(char) et char intToChar(int) qui seront plus explicites.
    Les dégâts des armes sont écrites « en dur » dans le menu. Il faudrait faire en sorte de les récupérer depuis la classe Arme avec quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Arme{
    public:
        enum Type {Dagger, Sword, Bow};
        const int damages[3] = {10, 17, 25};
        static int getWeaponDamage(Type type) {
            return damages[type];
        }
    };
    Dans la foulée, l'utilisation des enum est conseillé plutôt que d'utiliser des std::string pour identifier / comparer une arme.
    Les fonctions Weapon::isCrit(), Weapon::isMissed() devraient être const.
    Attention aux system("pause") et system("cls") qui ne sont pas portables (i.e. qui ne fonctionnent que sur Windows).

    Maintenant un plus gros morceau :
    Les responsabilités de Character et Weapon devraient être limitées à se présenter et indiquer leurs caractéristiques (noms, dégâts, etc…).
    Une idée serait de créer une classe « Maître du jeu » qui, conformément à un jeu de rôle, va veiller au respect des règles et au bon fonctionnement du jeu.
    Il aura notamment la responsabilité de gérer les combats (calculs des dégâts, ratés, critiques, etc…) et les enchaînements du tour par tour.

    Voili voilou !
    Ceci étant dit, le code est assez propre, bien indenté, et très agréable à lire
    Continue comme ça !

    Cordialement.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 6
    Par défaut
    Merci beaucoup pour ton aide!

    Citation Envoyé par Daïmanu Voir le message
    Les dégâts des armes sont écrites « en dur » dans le menu. Il faudrait faire en sorte de les récupérer depuis la classe Arme avec quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Arme{
    public:
        enum Type {Dagger, Sword, Bow};
        const int damages[3] = {10, 17, 25};
        static int getWeaponDamage(Type type) {
            return damages[type];
        }
    };
    Je ne suis pas sur de comprendre... si je fais par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int i;
    Arme arme;
    i = arme.getWeaponDamage("Sword");
    cout << i << endl; //ça affichera 17 ?
    Le i sera égale à 17 ?
    ensuite,
    Citation Envoyé par Daïmanu Voir le message
    Attention aux system("pause") et system("cls") qui ne sont pas portables (i.e. qui ne fonctionnent que sur Windows).
    Y a-t-il des fonctions plus "portables" et qui font le même travail ?

    Merci beaucoup encore une fois !

  4. #4
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 735
    Par défaut
    Citation Envoyé par girv97 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int i;
    Arme arme;
    i = arme.getWeaponDamage("Sword");
    cout << i << endl; //ça affichera 17 ?
    Le i sera égale à 17 ?
    L'utilisation sera plutôt i = arme.getWeaponDamage(Arme::Sword);.
    L'avantage des enum est qu'on ne peut pas accéder à une arme qui n'existe pas, car le choix est limité.
    L'autre avantage est qu'un enum n'est rien de plus qu'un ensemble d'entier après la compilation. En gros enum E{A, B, C}; est équivalent à const int A = 0; const int B = 1; const int C = 2; dans l’exécutable. C'est nettement plus simple et plus rapide que de travailler avec des std::string.
    Et en l’occurrence oui i vaudra bien 17.


    Citation Envoyé par girv97 Voir le message
    Y a-t-il des fonctions plus "portables" et qui font le même travail ?
    Pour "cls", non il n'existe rien de portable. La commande équivalent pour Mac et Linux est "clear". Si tu vises le multi-plateforme il faudra simplement y faire attention.
    Pour "pause", je t'invite à consulter l'entrée dans notre FAQ.

    Cordialement.

Discussions similaires

  1. [FLASH 8] Aide et avis sur un jeu de f1
    Par otagun dans le forum Flash
    Réponses: 4
    Dernier message: 30/10/2006, 11h35
  2. Vos avis: mon jeu Sonic 3D GL ( moteur 3D perso)
    Par Flipz137 dans le forum Moteurs 3D
    Réponses: 21
    Dernier message: 28/06/2006, 18h02
  3. [Développement jeu] - Votre avis sur le site et le jeu
    Par Leobaillard dans le forum Mon site
    Réponses: 22
    Dernier message: 15/06/2006, 20h52
  4. [Console] Police et jeu de caractères
    Par Séb. dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 18/09/2005, 15h24

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