Bonjour,



Essayant de comprendre et digérer la conception en c++, j'ai voulu partir sur de bonnes bases et me suis donc lancé dans la programmation d'un jeu simple: le Morpion.zip

Je me suis inspiré de (voire plagié) certaines parties du code du livre Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++).(Tant de réponses à tant de questions, merci )
J'avoue ne pas avoir encore tout saisit, d'autres lectures seront sans doute nécessaires. (non pas que ce soit mal expliqué, je ne suis pas des plus vifs..).

Je vous décris rapidement le fonctionnement:

Le programme est séparé en deux grandes parties. Game et ses composants, et le system d'entrée/sortie, en l'occurrence; Console.

Main lance game.

Game contient
--board les cases
--players les joueurs
--rules les rêgles
--interface<system>

Interface est générique et sert à charger une interface héritant des abstractions View et Controler, selon le system d'entrée/sortie définit.

View a deux fonction virtuelles pures:
--virtual void display(const Game& game) = 0;
--virtual const Input read() = 0;
Controler a une fonction viruelle pure:
--virtual void work(const Input& input, Game& game) = 0;

Console spécialise View et Controler selon le system ConsoleTag et définit le type d'interface.
ConsoleMain, ConsoleOptions et ConsoleWin sont les interfaces concrètes de Console.

ConsoleParser traite la std::string du retour clavier
ConsoleEntry stocke les choix possibles et interprète la réponse via le ConsoleParser
ConsoleWriter met en forme et affiche les informations reçues sur la console.

  • Je suis conscient ne pas respecter certains aspects de SOLID notamment les contrats, mais suis-je en bonne voie ?

  • Je n'arrive pas à faire d'abstraction pour ma classe Input, selon le système, on peut avoir des entrées différentes!..(peut-être en faisant des vectors de toutes sortes pour la rendre plus générique, mais c'est pas beau)

  • Je ne connais pas la limite de l'over-engineering, j'ai déjà pas mal de classe pour un tout petit projet, mais le concept de single responsability aurait pu être mieux respecté avec quelques classes supplémentaire.


Suggestion et critiques sont les biens venues!

Merci d'avance!