Jeu d'échec

M_Konate Messages postés 6 Date d'inscription jeudi 26 mai 2016 Statut Membre Dernière intervention 31 mai 2016 - 26 mai 2016 à 21:38
M_Konate Messages postés 6 Date d'inscription jeudi 26 mai 2016 Statut Membre Dernière intervention 31 mai 2016 - 31 mai 2016 à 01:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/101497-jeu-d-echec

M_Konate Messages postés 6 Date d'inscription jeudi 26 mai 2016 Statut Membre Dernière intervention 31 mai 2016
31 mai 2016 à 01:35
D'accord merci pour les consignes et conseils
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 30/05/2016 à 11:59
Bonjour.

La section source est utilisée pour les choses suivantes:
  • Montrer une bonne pratique (comment faire un code propre).
  • Montrer une méthode pédagogique (bien commentée, avec une documentation).
  • Montrer une technique compliquée ou astuce peu évidente.


Ici, ta source ne répond a aucun de ces critères (code sale, pas d'explications de code ou de commentaire, technique peu avancé). Tu devrais plutôt poster celle-ci dans le forum, avec pour titre: "Jeu d'echec, critiquez mon travail".

Je vais mettre tout ce qui ne va pas ici, avant de supprimer cette source (qui a sa place sur ce site, mais pas dans cette section).


Quelques conseils de départ:
  • Évite les using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace
  • Nettoie ton projet ! Les *.exe, *.o, les fichiers sources non utilisées, n'ont rien à faire dans ce projet. Sur les 15 fichiers que tu as envoyés, seul 5 sont vraiment indispensables.
  • N'utilise pas Dev-C++ ! C'est un *très* vieil IDE, qui embarque un compilateur complètement dépassé. Préfère Code::Block, QtCreator or SublimeText2.
  • Attention, tout le monde n'a pas Windows. Si tu veux que ton code compile partout, évite les "system" (qui ne sont de toute façon pas indispensable).



Au niveau de l'utilisation du programme:
  • Il y a plein de règles qui sont mal gérées, mal protégées. Il est facile de faire planter ton programme. Par exemple, le fait de choisir un pion hors plateau fait planter ton programme.
  • Si on demande à déplacer un pion incorrectement (hors plateau), le programme accepte silencieusement.
  • Quand on déplace un simple pion, si on fait une demande invalide, alors le tour est sauté ! (On passe directement à l'autre joueur).



Au niveau du design de code:
  • Des fonctions monolithiques horribles... Une fonction ne devrait pas dépasser 25-30 lignes. Tu as certaines fonctions qui font près de 300 lignes !
  • Des copier-coller/répétitions partout: Les fonctions servent aussi à factoriser le code. Par exemple, verification_p1 et verification_p2 font pratiquement la même chose !
  • La classe tout_lois ne sert à rien.
  • Plutôt que de faire un std::vector<std::vector<char>>, un simple std::array<char, 64> aurait suffit (ou std::vector<char>). Il est possible de représenter un plateau avec un tableau à simple dimension. Voici un exemple de classe que tu peux réutiliser: https://github.com/cptpingu/game/blob/master/src/Core/Array2D.hh



Au niveau technique de code:
  • Les booléens ne sont pas utilisé de manière élégante. Par exemple: au lieu de "while (condition == true)" préfère utiliser "while (condition)". De même plutôt que "while (condition == false)" préfère "while (!condition)". À la place de "if(condition) return false else return true", préfère: "return condition;"
  • Des fois, tu confonds "=" et "==". Par exemple dans ton main, tu as un "while (ECHEC_ROI=true)".
  • Attention, les && et les || n'ont pas la même priorité. Il faut ajouter des parenthèses lorsque tu mélanges des && et des ||.
  • Préfère "||" plutôt que "or".
  • Vérifie tes entrées ! Si je lance ton programme et que je tape "coucou", celui-ci fera n'importe quoi. On sécurise toujours les std::cin, voir: https://stackoverflow.com/questions/12721911/c-how-to-verify-is-the-data-input-is-of-the-correct-datatype
  • Il n'y a pas de ";" après un "}" d'une fonction ou méthode.
  • Si tu n'as qu'une seule ligne, il n'est pas nécessaire de mettre d'accolades.
  • Au lieu de copier-coller, utilise des boucles. Je pense notamment à la fonction init_body qui a beaucoup de répétitions pour rien. Une double boucle aurait fortement réduit sa taille !
  • Il y a plus de 30 warnings lorsque l'on compile. Il faut les corriger et ne pas les ignorer ! C'est souvent signe qu'il y a des soucis.
  • Plutôt que de faire des std::cout partout, chaîne-les !

Exemple:
std::cout << "coucou1" << std::endl;
std::cout << "coucou2" << std::endl;
std::cout << "coucou3" << std::endl;
std::cout << "coucou4" << std::endl;

Devrait être:
std::cout << "coucou1" << std::endl
   << "coucou2" << std::endl
   << "coucou3" << std::endl
   << "coucou4" << std::endl;

Voir même (encore mieux):
std::cout << "coucou1\n"
    "coucou2\n"
    "coucou3\n"
    "coucou4" << std::endl;



Style de code:
  • Une classe prend une majuscule.
  • Un attribut de classe commence par "_" pour le différencier.
  • On évite de retourner de gros tableau. On les passe par référence.
  • On déclare les variables au moment de les utiliser, pas besoin de les mettre forcément au début d'une fonction (on n'est plus en C des années 90).
  • On initialise toujours ses variables.
  • En C++, le header porte l'extension ".hh" ou ".hpp", mais pas ".h" qui est pour du C.
  • Si tu ne fais rien dans un constructeur ou un destructeur, alors ne les crée pas (ça ne sert à rien).
M_Konate Messages postés 6 Date d'inscription jeudi 26 mai 2016 Statut Membre Dernière intervention 31 mai 2016
30 mai 2016 à 00:25
Je serai très ravi d'avoir des critiques et suggestion
Merci!
Rejoignez-nous