readme.txt 9,02 ko
Newer Older
## Analyse du code produit par ChatGPT par rapport au code attendu :
### Pour PieceSquadro
- Le code généré par l'IA a omis d'ajouter les constantes en les déclarant comme `public` et en utilisant `static`.
- Après des tests, nous avons constaté que :
    - `const` est effectivement `static` par défaut.
    - Si aucun modificateur d'accès n'est précisé pour une variable ou une méthode, celles-ci sont considérées comme `public` par défaut. Il n'y a donc rien à signaler ici.
- Dans le diagramme UML, les attributs `couleur` et `direction` sont indiqués comme étant `protected`. Cependant, dans la première version du code générée et déposée par l'IA, ces attributs ont été déclarés en `private`. On a donc corrigé cette erreur.
- Une nouvelle version de la méthode `toString` a été ajoutée pour représenter la direction d'une pièce par une flèche, afin de faciliter l'affichage des pièces.  
  Un prompt demandant cette fonctionnalité a été donné à l'IA, et elle a su discerner les 4 cas suivants :  
    - `>` pour l'Est  
    - `<` pour l'Ouest  
    - `^` pour le Nord  
    - `v` pour le Sud  

> **Après test de la classe :** tout fonctionne correctement, pas de nouvelle erreur.
### Pour ArrayPieceSquadro
- J'avais demandé de ne coder que les méthodes définies dans le schéma UML. L'IA a cependant ajouté les méthodes des deux interfaces qu'elle a redéfinies. Cela peut être vu comme une initiative positive, mais ce n'était pas explicitement demandé.
- Les messages d'erreur des exceptions générées sont en anglais, alors que le projet est spécifiquement en français. Nous avons donc corrigé ceci en mettant les commentaires en français.
## Pour les tests

- En demandant simplement à ChatGPT de tester la classe `PieceSquadro`, il a utilisé par défaut **PHPUnit**. Il s'agit d'une erreur provenant de mon prompt, car je n'avais pas précisé de tester simplement sans PHPUnit.
    - J'ai corrigé cela en modifiant le prompt et en ajoutant une nouvelle classe de test sur la forge, sans utiliser PHPUnit.

- Lorsqu'il m'a redonné une version sans PHPUnit, il a effectivement testé l'ensemble des fonctionnalités, en les organisant dans des méthodes séparées.  
    - Ces tests ont montré la robustesse de la classe `PieceSquadro`.  
    - Même constat pour les tests de la classe `ArrayPieceSquadro`.

---

## Pour la PHPDoc

- L'IA n'a pas ajouté de PHPDoc par défaut.  
    - J'ai donc dû les ajouter manuellement, un par un, aux classes que j'avais déjà écrites.

- **Visibilité des constantes non précisées :** elle devrait être `public`.
    - RAS, quand la visibilité n'est pas précisée, elle est `public` par défaut.
  
- **Types des variables d'instances non précisés de même que le retour des fonctions :**
    - Évidemment, j'ai oublié de le préciser dans mon prompt.
- **Getters des lignes et colonnes jouables non faits :**
    - ChatGPT est nul ? Probablement prompt pas correctement fait.
- **Méthodes `toJson`, `fromJson` et `__toString()` non implémentées :**
    - ChatGPT est nul ? Probablement prompt pas correct... Sérieusement ?
G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé

G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé

- **Méthode `reculePiece` semble incorrecte :**
    - La remise à zéro est censée mettre les pièces se dirigeant vers l'est à l'est, vers l'ouest à l'ouest, ainsi de suite... ce qui n'est pas fait : toutes les pièces est-ouest sont remises à l'ouest et toutes les pièces nord-sud sont remises au nord.
G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé

    - **Méthode à tester** une fois les tests implémentés.
G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé

- **Méthode `gererSautsAdversaires` venue de nulle part.**
G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé

- **Méthode `jouePiece` à réécrire** puisqu'elle est censée utiliser `reculePiece` pour déplacer les pièces adversaires conformément aux règles du jeu.
G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé

## Prompt 2
- **Prompt** : j'ai demandé à ChatGPT de corriger les codes de Plateau et Action en s'assurant que les diagrammes UML et les instructions soient respectées
- **résultat :**
    - Les fonctions non implémentées le sont maintenant.
    - Les paramètres des fonctions et leurs retours sont typés.
    - Je crois que je corrigerai reculePièce et jouePièce à la main.

G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé
## Écriture de tests
- **erreurs précédemment manquées** :
    - Les `require` appropriés non faits.
    - Les fonctions `init` du constructeur de Plateau utilise des variables non encore instanciées.
    - Les fonctions `init` pour les pièces jouables ne sont pas correctement implémentés : correction à la main.
    - __toString() de Plateau non implémenté.
- **corrections** :
    - La classe ArrayPiece permet d'utiliser la variable plateau de Plateau comme un tableau 2D : simplification de l'accès à plateau dans certaines méthodes
    - reculePièce et jouePièce ont été corrigées.
    - Les tests ont été écrits et fonctionnent correctement.
G. Daryl M. OKOU's avatar
G. Daryl M. OKOU a validé
    - Génération de la documentation PHPDoc pour les classes Plateau et Action.


----------------------------------------------------------------------------------------------------------------------------
# README - Étape 2
## Premier prompt - Étape 2
- Pour l'instant, le résultat n'est pas satisfaisant. Des recalibrations sont nécessaires et il est essentiel d'améliorer la compréhension des tâches à effectuer de mon côté.
Mathéo Beaudouin's avatar
Mathéo Beaudouin a validé
---
## Deuxième prompt - Étape 2

Nous avons trouvé une meilleure proposition générée par GPT.  
Ainsi, les classes `PieceSquadroUI` et `TestSquadroUI` ont été modifiées en conséquence.
- Dans la nouvelle classe (`TestPieceSquadroUI`), l'IA utilise des méthodes non définies dans `PieceSquadroUI`. Il faut les remplacer par les méthodes appropriées.
---

## Rédaction de SquadroUIGenerator
- Les méthodes d'entête et de pied ont été écrites manuellement.
- Les 3 méthodes d'affichage de page ont été générées par l'IA, après lui avoir précisé qu'il est préférable d'utiliser une méthode d'entête et de fin, plutôt que de les écrire en dur dans une autre méthode.
- J'ai fait des corrections par-ci, par-là et ajouté des méthodes pour dessiner correctement le plateau.
- Par contre, les méthodes de génération des pages fournies par l'IA sont à revoir.
- **Test de la classe `SquadroUIGenerator` :** il ne passe pas, car elle affiche deux fois l'entête du document.
  - Après vérification, cela est dû au fait que nous avons mis des tests à la fin de `SquadroUIGenerator`.

---

## Modifications dans `SquadroUIGenerator.php`

- **Ajout d'un formulaire dans `pageConfirmerMouvement` :**  
  - Permet à l'utilisateur de **confirmer son déplacement**.
  - Affiche les **coordonnées de la pièce sélectionnée**.
  - Utilisation de **POST** pour envoyer les coordonnées à un nouveau fichier `processMove.php`.
  - Deux boutons :
    - **Confirmation** : soumission du formulaire.
    - **Annulation** : retour à la page précédente.
    - Dans la méthode plateauJeu, on a associé les cases ( boutons ) à des formulaires, car la premiere version de l'IA n'en n'avait pas mise.

---

## Rédaction de `processMove.php`

- Récupération des coordonnées **x** et **y** envoyées par le formulaire.
- Vérification de la validité des coordonnées.
- Mise à jour du plateau en fonction du mouvement.
- Redirection vers la **page principale après le déplacement**.

---

## Corrections sur l'utilisation des méthodes

- L'IA utilisait la méthode `deplacerPiece`, mais il est **préférable d'utiliser** `jouePiece` de la classe `ActionSquadro`.
- Pour gérer la victoire d'un joueur, l'IA utilisait `partieTerminee()` (méthode inexistante).
  - **Correction :** remplacement par `remporteVictoire` de `ActionSquadro`, qui fait déjà cette vérification.
- Pour cela, nous avons dû :
  - Renvoyer la classe `ActionSquadro` à l'IA.
  - Lui demander de **réécrire `processMove.php`** en utilisant les bonnes méthodes.
  - **Ajouter la PHPDoc** en même temps.
  
  ---

## Correction de l'approche sur l'Étape 2

Nous nous sommes trompés dans l'approche de l'Étape 2.  

À partir du début du **Run 2**, nous avions déjà pris en compte **la gestion des états et des actions**, ce qui **n'était pas demandé** pour cette phase du projet.  

Nous avons donc dû **reprendre correctement l'Étape 2**, cette fois en nous contentant simplement :  
- **D'afficher les pages avec les formulaires**.  
Mathéo Beaudouin's avatar
Mathéo Beaudouin a validé
- **D'afficher les informations transmises par les formulaires**, sans gérer les actions associées.

---

## Étape 3 : Sans utilisation d'IA générative

Pour l'Étape 3, nous avons décidé de **ne pas utiliser d'IA générative**.  
Tout le code et les modifications ont été réalisés **manuellement**, en suivant les consignes du projet et en structurant nous-mêmes la logique de l'application.

---

## Étape 4 : Création de la classe `JoueurSquadro`

Pour l'Étape 4, nous avons créé une nouvelle classe **`JoueurSquadro`**, ainsi que sa classe de test.  

- Pour cette phase, nous avons utilisé **une IA générative** afin d'accélérer le développement.
- Pour l'etat home nous avons demandé à l'ia de nous modifier index.php pour gerer ce nouvel etat