Skip to content

Instantly share code, notes, and snippets.

@Raphhh
Last active August 29, 2015 14:06
Show Gist options
  • Save Raphhh/6dab1aec9df4aca2a697 to your computer and use it in GitHub Desktop.
Save Raphhh/6dab1aec9df4aca2a697 to your computer and use it in GitHub Desktop.
Chess coding challenge

#Chess coding challenge

Le challenge réside dans la conceptualisation des algorithmes au niveau de l'architecture d'un code. L'idée n'est donc pas d'atteindre une performence dans le code, mais une écriture lisible, réutilisable, et emprunte de bonnes pratiques type SOLID.

Règles

Le code doit être testé et pushé sur un repo git public.

Etape 1: déplacements basiques

Créer un package modélisant les déplacements basiques des pièces d'un jeu d'échec.

Par mouvements simples, on entend que le code:

  1. doit assurer le déplacement d'une pièce, comme si cette pièce était seule sur l'échiquier. Le code ne doit donc pas assurer les règles spéciales. Par ailleurs, le pion ne doit avancer que d'une case vers l'avant.
  2. doit garantir que la pièce ne sorte de l'échiquier.
  3. doit empêcher de déplacer une pièce sur une case déjà occupée par une pièce de la même couleur.

Etape 2: déplacements complexes

  1. Le pion peut avancer de deux cases lors de son premier coup.
  2. Le pion ne prend un autre pion que sur le côté.
  3. Le roque (attention que le roi ne peut pas être en échec. Par ailleurs, tant le roi que la tour ne peuvent avoir déjà été déplacés avant le roque).
  4. La prise en passant.
  5. Empécher le roi de se déplacer sur une case en échec.

Etape 3: les situations de jeu

  1. La promotion.
  2. L'échec.
  3. Le mat.
  4. Le pat.

Etape 4: la gestion du jeu

  1. alternance des couleurs (les blancs commencent, puis les noirs, etc).
  2. gestion du temps.
  3. fin de partie avec vainqueur.
  4. fin de partie par abandon.
  5. fin de partie nulle.

Idées pour les étapes suivantes

  • interface REST
  • interface graphique
  • gestion d'un historique (undo et redo).
  • sauvegarde d'une partie.
  • AI de base (bouger une pièce au hasard en s'assurant qu'elle ne peut pas être prise par une pièce adverse).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment