Le mode Chess960, également connu sous le nom de Fischer Random Chess, a été entièrement implémenté dans ce jeu d'échecs selon les règles officielles de la FIDE.
- Pions : Placés normalement sur les deuxième et septième rangées
- Roi : Doit être placé entre les deux tours sur la première rangée
- Fous : Doivent être placés sur des cases de couleurs opposées
- Pièces noires : Placées en miroir exact des pièces blanches
Il existe exactement 960 positions de départ valides selon ces contraintes.
Note importante : La position #518, qui correspond à la position standard des échecs classiques (♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜), est automatiquement exclue lors de la génération aléatoire de parties Chess960. Cela garantit que chaque partie Chess960 offre une expérience véritablement différente des échecs classiques.
Le roque en Chess960 fonctionne différemment des échecs classiques :
Après le roque, le roi et la tour finissent toujours sur les mêmes cases qu'aux échecs standard :
- Petit roque (O-O) : Roi sur g1/g8, Tour sur f1/f8
- Grand roque (O-O-O) : Roi sur c1/c8, Tour sur d1/d8
- Le roi et la tour concernés n'ont pas encore bougé
- Le roi ne doit pas être en échec
- Le roi ne doit pas traverser de case attaquée
- Le roi ne doit pas finir sur une case attaquée
- Toutes les cases entre les positions initiales et finales du roi et de la tour doivent être vides (à l'exception du roi et de la tour eux-mêmes)
-
store/useGameVariantStore.ts- Store Zustand pour gérer la variante de jeu (Standard ou Chess960)
- Sauvegarde la préférence dans le localStorage
-
lib/chess960-utils.tsgenerateChess960Position(n): Génère une position spécifique (0-959)generateRandomChess960Position(): Génère une position aléatoire- Utilise l'algorithme de Scharnagl pour garantir les 960 positions valides
findRookPositions(): Trouve les tours pour le roquefindKingPosition(): Trouve le roiisValidChess960Position(): Valide une position selon les règles FIDE
-
components/GameVariantDialog.tsx- Composant modal pour sélectionner la variante (Standard/Chess960)
- Affiche des informations sur Chess960
- Nécessite une confirmation avant de changer de variante
-
types/chess.ts- Ajout du type
GameVariant - Ajout des champs Chess960 dans
GameState:isChess960: Booléen indiquant si c'est une partie Chess960- Positions initiales des tours et du roi pour chaque couleur
- Ajout du type
-
lib/chess-engine.tscreateInitialGameState(): Accepte maintenant une variante et un numéro de positiongetKingMoves(): Divisé en deux fonctions :getStandardCastlingMoves(): Roque standardgetChess960CastlingMoves(): Roque Chess960 avec les règles FIDE
executeMove(): Adapté pour gérer correctement le roque Chess960
-
components/ChessGame.tsx- Import et utilisation du store de variante
handleNewGame(): Crée une nouvelle partie avec la variante sélectionnée- Ajout du composant
GameVariantDialogaccessible depuis leGameModeSelector
-
messages/fr.jsonetmessages/en.json- Ajout des traductions pour le sélecteur de variante
- Textes explicatifs sur Chess960
L'algorithme de Scharnagl est utilisé pour générer les 960 positions valides de manière déterministe :
-
Placement des fous (16 combinaisons) :
- Un fou sur case blanche (1, 3, 5, 7)
- Un fou sur case noire (0, 2, 4, 6)
-
Placement de la dame (6 positions) :
- Sur l'une des 6 cases restantes
-
Placement des cavaliers (10 combinaisons) :
- Sur 2 des 5 cases restantes
-
Placement Tour-Roi-Tour (1 arrangement) :
- Les 3 pièces restantes sont placées dans l'ordre T-R-T sur les 3 cases restantes
Formule : 16 × 6 × 10 × 1 = 960 positions possibles
- Sélectionnez "Chess960" dans le sélecteur de variante
- Cliquez sur "Nouvelle partie"
- Une position aléatoire sera générée automatiquement
- Le roque fonctionne avec les règles Chess960
- Chaque nouvelle partie Chess960 génère une position aléatoire parmi les 959 positions (la position standard #518 est exclue)
- Cela garantit que chaque partie Chess960 est véritablement différente des échecs classiques
- Le roque aboutit toujours aux mêmes cases finales qu'aux échecs classiques
- Les autres règles (pions, prise en passant, promotion, etc.) sont identiques aux échecs standard
-
Génération de positions :
- Vérifier que toutes les positions générées respectent les contraintes
- Tester les 960 positions numérotées
-
Roque :
- Tester le roque depuis différentes positions initiales
- Vérifier que les cases finales sont correctes
- Tester les cas limites (roi et tour adjacents, etc.)
-
Persistance :
- Vérifier que la variante sélectionnée est sauvegardée
- Tester le changement de variante pendant et entre les parties