Bonjour,
Je commence un nouveau projet qui est de développer un jeu sur angular. J'ai décidé pour m'entrainer d'essayer de créer un jeu d'échecs. Vu que mon projet est de créer un jeu de plateau basé sur du tour par tour.

J'aimerais avoir des informations quelles sont les bonnes pratiques surtout au point de vue de l'architecture et des différents composants de mon jeu.

J'ai pensé à organiser mon projet, en utilisant des classes pour mes différents éléments.
Pour l'instant dans ma phase de conception j'ai pensé à :
  • Class :
  • Board,
  • Cell,
  • Player,
  • Piece
  • Pawn extends of piece .
  • etc ...



Pour le rendu dans le navigateur de mon plateau etc j'ai différents composants :
  • BoardComponent (génère plateau + cellule),
  • MenuComponent,
  • etc.


Et pour terminer,j'utilise un service qui récupère les différents events, qui envoient aux composants les données utiles avec le modèle observable.
GameService.
dans ce service je pensais mettre tous les events que les composants vont utiliser et dont on a besoin d'avoir un retour côtés utilisateurs, par la suite ce service ou un autre gèrerera la connexion a la bdd.

Hier, j'ai rencontré un "problème", lorsque je voulais qu'un utilisateur déplace une pièce je me demandais "qui" et "ou" va se charger d'effectuer l'action.

Ma première approche a était de créer quelques fonctions dans mes différentes classes voici plus ou moins le déroulé de l'action : Déplacer une pièce.
  1. BoardComponent : click directives on cell.
  2. GameService trigger a select event when click is fired.
  3. Player => selectAPiece () selectWhereTo().
  4. Board => Si le mouvement est accepté appel de la méthode moveTo(), déplacer la pièce d'un point A un point B.
  5. GameService déclenchera la modification des différents sujets pour que BoardComponent remmettent à jour l'affichage.



Pour résumé :
Clique sur une cellule (BoardComponent && GameService) => Piece sélectionnée (Player) => choisis la nouvelle destination (Player) => Piece déplacé (Board) => Modification des données (GameService) => affichage du Plateau.

Je ne sais pas si ma structure et mon raisonement sont bons ou s'il y a d'autres façons de le faire. J'aimerais avoir votre avis sur ce raisonement. Dans le cas là ne vaut-il pas mettre toutes ces méthodes dans le plateau, ou meme toutes les méthodes dans GameService ou même par la suite le diviser en plusieurs services.

Merci d'avoir pris le temps de lire, en attente de vos conseils.