# Lois du jeu d’échecs (FIDE) — référence projet

Ce document décrit **comment ce logiciel applique** les *FIDE Laws of Chess*
en vigueur depuis le **1er janvier 2023**, avec texte explicatif et renvois
aux articles officiels.

## Documents officiels

| Document | Lien |
|----------|------|
| Handbook FIDE — Laws of Chess (effet 01/01/2023) | https://handbook.fide.com/chapter/E012023 |
| PDF Lois FIDE 2023 (RCC) | https://rcc.fide.com/wp-content/uploads/2022/11/Laws_of_Chess-2023.pdf |
| Extraits cités dans le jeu | [`fide_official_excerpts.md`](fide_official_excerpts.md) |

**Texte de référence** : *FIDE Laws of Chess*, approuvées par l’Assemblée générale
FIDE (07/08/2022), applicables à partir du **01/01/2023**.

Dans le code : module `chess/terminal.py` (états terminaux) et catalogue
`chess/fide_rules.py` (textes + références exposés via `GET /api/rules`).

---

## 1. Fin de partie gagnante — échec et mat

**Article FIDE** : **5.1.1**

Quand le roi adverse est attaqué (**échec**) et qu’aucun coup légal ne permet
d’échapper à cette attaque, le camp qui a donné l’échec gagne. C’est
l’**échec et mat**.

**Dans l’appli** : détection immédiate après chaque coup (`checkmate`).  
Le mat **prime** toujours sur une nulle éventuelle (ex. règle des 75 coups
si le dernier coup mate — art. **9.6.2**).

---

## 2. Pat

**Article FIDE** : **5.2.1** / **5.2.2** (partie nulle)

Le joueur au trait n’est **pas** en échec, mais **aucun coup légal** n’est
possible → la partie est **nulle** (pat).

**Dans l’appli** : `stalemate` → résultat `1/2-1/2`.

---

## 3. Matériel insuffisant (position morte)

**Article FIDE** : **5.2.2** (impossible de mater par toute suite de coups légaux)

Exemples classiques retenus ici (approximation pratique) :

- roi contre roi ;
- roi + fou (ou cavalier) contre roi ;
- roi + fou contre roi + fou (simplification : couleur des cases non distinguée).

**Dans l’appli** : `insufficient-material` → nulle automatique.

---

## 4. Triple répétition (réclamation)

**Article FIDE** : **9.2** (définition de l’identité des positions : **9.2.2**)

La même position s’est présentée **au moins trois fois** (pas forcément
par une suite cyclique de coups) : même camp au trait, mêmes pièces sur
les mêmes cases, mêmes droits de roque et possibilité d’en passant.

Le joueur au trait peut **réclamer** la nulle (art. 9.2 / procédure 9.5).

**Dans l’appli** : pas d’arbitre → **réclamation automatique**
(`threefold-repetition`, `auto_claim=True`).  
Clé de position = 4 premiers champs FEN (pièces, trait, roque, en passant),
conformément à **9.2.2**.

---

## 5. Règle des 50 coups (réclamation)

**Article FIDE** : **9.3**

Le joueur au trait peut réclamer la nulle si les **50 derniers coups de
chaque camp** ont été joués **sans déplacement de pion et sans prise**
(soit **100 demi-coups** / horloge FEN `halfmove`).

**Dans l’appli** : réclamation automatique dès `halfmove_clock >= 100`
→ `50-move-rule`.

---

## 6. Quintuple répétition (nulle automatique)

**Article FIDE** : **9.6.1**

Si la même position (au sens de **9.2.2**) est apparue **au moins cinq fois**,
la partie est **nulle sans réclamation**.

**Dans l’appli** : `fivefold-repetition` (appliqué même si `auto_claim=False`).

---

## 7. Règle des 75 coups (nulle automatique)

**Article FIDE** : **9.6.2**

Si une série d’**au moins 75 coups de chaque camp** a été jouée sans pion
ni prise (**150 demi-coups**), la partie est **nulle automatiquement**.

**Exception** : si le **dernier** coup est un **échec et mat**, le mat
l’emporte.

**Dans l’appli** : `75-move-rule` dès `halfmove_clock >= 150`, après le test
de mat.

---

## Synthèse — ce que fait le logiciel

| Situation | Article | Seuil / critère | Mode | Code `state` |
|-----------|---------|-----------------|------|--------------|
| Échec et mat | 5.1.1 | roi attaqué, 0 coup légal | Victoire | `checkmate` |
| Pat | 5.2.1 | pas d’échec, 0 coup légal | Nulle auto | `stalemate` |
| Matériel insuffisant | 5.2.2 | position morte (approx.) | Nulle auto | `insufficient-material` |
| Triple répétition | 9.2 | position × 3 | Réclamation → **auto** | `threefold-repetition` |
| 50 coups | 9.3 | 100 demi-coups | Réclamation → **auto** | `50-move-rule` |
| Quintuple répétition | 9.6.1 | position × 5 | Nulle auto | `fivefold-repetition` |
| 75 coups | 9.6.2 | 150 demi-coups | Nulle auto | `75-move-rule` |

Il n’y a **pas** de plafond artificiel de coups hors ces règles.

---

## Coups spéciaux (rappel)

Implémentés dans `chess/rules.py` (lois de base, art. 3) :

- **Roque** (3.8) ;
- **Prise en passant** (3.7.4.1) ;
- **Promotion** (3.7.5).

---

## API

```http
GET /api/rules
```

Retourne le catalogue structuré (articles, explications, liens) utilisé
par le panneau **Règles FIDE** de l’interface.
