# Analyse Technique - Implémentation de Puissance 4 en C
## 1. Introduction
Ce document détaille l'analyse technique pour l'implémentation d'un [puissance 4](https://fr.wikipedia.org/wiki/Puissance_4) en C, en respectant les contraintes et spécifications du cahier des charges [Cahier des charges](./CDC.pdf).
## 2. Spécifications du Jeu
### 2.1 Modes de Jeu
Le jeu devra supporter trois modes distincts :
-**Mode deux joueurs** : Deux joueurs humains s'affrontent.
-**Mode un joueur (IA aléatoire)** : L'ordinateur joue des coups aléatoires.
-**Mode un joueur (IA intelligente)** : L'ordinateur tente de gagner ou d'empêcher la défaite.
### 2.2 Interface Utilisateur
L'affichage du jeu se fera en mode texte avec un rendu ASCII Art.
Exemple :
```text
┌─┬─┬─┬─┬─┬─┬─┐
│ │ │ │ │ │ │ │
├─┼─┼─┼─┼─┼─┼─┤
│ │ │ │X│ │ │ │
└─┴─┴─┴─┴─┴─┴─┘
1 2 3 4 5 6 7
```
## 3. Conception Technique
### 3.1 Structures de Données
-**Plateau de jeu** : Utilisation d'un tableau 2D `char board[MAX_ROWS][MAX_COLS]`.
-**Enum pour les éléments du plateau** :
```c
enum{
EMPTY,CROSS,CIRCLE
}cell;
```
-**Struct pour le jeu** :
```c
typedefstruct{
introws;
intcols;
cellboard[MAX_ROWS][MAX_COLS];
}game_board;
```
### 3.2 Modules
Le projet va être organisé en plusieurs fichiers :
-`main.c` : Point d'entrée du programme.
-`game.c/.h` : Gestion du jeu (initialisation, mise à jour, conditions de victoire).
-`display.h/display.c` : Affichage en ASCII Art.
-`ai.h/ai.c` : IA aléatoire et intelligente.
-`tests.h/tests.c` : Tests unitaires et de validation.
### 3.3 Algorithme Principal
1. Initialisation du jeu et du plateau.
2. Affichage initial du plateau.
3. Boucle principale :
- Demander au joueur/IA de jouer.
- Mettre à jour le plateau.
- Vérifier les conditions de victoire.
- Afficher le plateau mis à jour.
4. Fin du jeu : affichage du résultat.
## 4. Questions Techniques
### 4.1 Gestion des Entrées Utilisateur
## 5. En plus
### 5.1 Utilisation de (CI/CD)
Pour automatiser les tests, une pipeline CI/CD pourrait être mise en place avec :
-**GitLab CI** : Compilation automatique et exécution des tests unitaires à chaque push de commit.
-**Tests automatisés** : Exécution de `make tests` pour valider chaque modification.
-**Analyse statique** : Utilisation d'outils comme `clang-tidy` ou `cppcheck` pour vérifier la qualité du code (à voir).
### 5.2 Sauvegarde des Résultats
Afin de permettre le suivi des parties et des scores, une fonctionnalité de sauvegarde des résultats peut être ajoutée :
-**Format de stockage** : Fichier texte (`results.txt`).
-**Informations enregistrées** :
- Mode de jeu (1 joueur / 2 joueurs / IA)
- Nombre de coups joués
- Vainqueur
- Date et heure de la partie
-**Lecture et affichage des scores** : Possibilité de consulter l'historique des parties gagnées/perdues.