diff --git a/docs/Analyse.md b/docs/Analyse.md new file mode 100644 index 0000000000000000000000000000000000000000..18311ae41c9cbe653342bbbb25b571f62206c388 --- /dev/null +++ b/docs/Analyse.md @@ -0,0 +1,100 @@ +# 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 + typedef struct { + int rows; + int cols; + cell board[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.