Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
ens:cvda-2016:tpnote [2016/06/05 13:30] admin Cordier Amelie () [Phase 3. Implémentation de votre premier effet] |
ens:cvda-2016:tpnote [2016/07/15 08:30] (Version actuelle) |
||
|---|---|---|---|
| Ligne 72: | Ligne 72: | ||
| ==== Phase 1. Prise en main du projet | ==== Phase 1. Prise en main du projet | ||
| - | 1. Avec votre navigateur préféré, connectez-vous à Github puis faites un fork du projet **P4Magic**. | + | 1. Avec votre navigateur préféré, connectez-vous à Github puis faites un fork du projet **P4Magic** |
| - | + | ||
| - | < | + | |
| 2. Depuis votre IDE préféré, clonez le projet que vous venez de forker. | 2. Depuis votre IDE préféré, clonez le projet que vous venez de forker. | ||
| Ligne 80: | Ligne 78: | ||
| 3. Au besoin, fixez les imports. Vous pourriez être amenés à ajouter JUnit 4.12 et Harmcrest 1.3 dans Test Libraries. Si vous rencontrez des difficultés dans cette phase, n' | 3. Au besoin, fixez les imports. Vous pourriez être amenés à ajouter JUnit 4.12 et Harmcrest 1.3 dans Test Libraries. Si vous rencontrez des difficultés dans cette phase, n' | ||
| - | 4. Exécutez le programme pour le tester en mode graphique. La première fenêtre vous permet de choisir le pourcentage de cases qui seront porteuses | + | 4. Exécutez le programme pour le tester en mode graphique. La première fenêtre vous permet de choisir le pourcentage de chances qu'une case soit porteuse |
| ==== Phase 2. Découverte du code et prise en main des tests ==== | ==== Phase 2. Découverte du code et prise en main des tests ==== | ||
| Ligne 88: | Ligne 86: | ||
| Avant d' | Avant d' | ||
| - | Pour mieux comprendre les explications qui suivent, n' | + | Pour mieux comprendre les explications qui suivent, n' |
| Le projet est implémenté en respectant l' | Le projet est implémenté en respectant l' | ||
| - | |||
| - | < | ||
| Dans le package **controller**, | Dans le package **controller**, | ||
| Ligne 120: | Ligne 116: | ||
| <WRAP center round help 60%> | <WRAP center round help 60%> | ||
| - | **Q1 :** dans votre compte-rendu, | + | **Q1 :** dans votre compte-rendu, |
| </ | </ | ||
| 2. Récupérez le code de test pour la classe '' | 2. Récupérez le code de test pour la classe '' | ||
| - | <note>Mettre | + | <file java DisappearEffectTest.java> |
| + | package model; | ||
| + | /** | ||
| + | * MagicP4 | ||
| + | * IUT Lyon 1 - 2016 | ||
| + | */ | ||
| + | |||
| + | |||
| + | import org.junit.After; | ||
| + | import org.junit.AfterClass; | ||
| + | import org.junit.Before; | ||
| + | import org.junit.BeforeClass; | ||
| + | import org.junit.Test; | ||
| + | import static org.junit.Assert.*; | ||
| + | |||
| + | /** | ||
| + | * Classe de tests de l' | ||
| + | * Principe de l' | ||
| + | * une case portant l' | ||
| + | * l' | ||
| + | * et le tour de jeu change | ||
| + | * | ||
| + | * @author acordier | ||
| + | */ | ||
| + | public class DisappearEffectTest { | ||
| + | |||
| + | static Game aGame; | ||
| + | |||
| + | public DisappearEffectTest() { | ||
| + | } | ||
| + | |||
| + | @BeforeClass | ||
| + | public static void setUpClass() { | ||
| + | |||
| + | } | ||
| + | |||
| + | @AfterClass | ||
| + | public static void tearDownClass() { | ||
| + | } | ||
| + | |||
| + | @Before | ||
| + | public void setUp() { | ||
| + | |||
| + | // Création d'un jeu vide | ||
| + | aGame = new Game(); | ||
| + | Board b = new Board(10, 10); | ||
| + | aGame.setBoard(b); | ||
| + | |||
| + | } | ||
| + | |||
| + | @After | ||
| + | public void tearDown() { | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Test du bon fonctionnement du jeu, en dehors de l' | ||
| + | * attendus après le coup : - un pion de plus sur le plateau - le tour de | ||
| + | * jeu est passé - l' | ||
| + | */ | ||
| + | @Test | ||
| + | public void testDisappearEffectNormalGame() { | ||
| + | |||
| + | // On pré-remplit le plateau pour les besoins de la simulation | ||
| + | Utils.simulateAGame(aGame); | ||
| + | |||
| + | // Effet fixé sur une case (qui n'est pas encore remplie) | ||
| + | int height = aGame.getBoard().getHeight(); | ||
| + | // height-3 correspond à la première case vide dans la colonne O, vu que l'on a déjà joué deux coups dans cette colonne | ||
| + | aGame.getBoard().getTileIJ(height - 3, 0).setEffect(new DisappearEffect()); | ||
| + | |||
| + | // Récupération de l'ID du joueur avant que le coup soit joué | ||
| + | int id_player = aGame.getCurrentPlayer().getId(); | ||
| + | |||
| + | // Récupération du nombre de pions présents | ||
| + | int nb_tokens_before = aGame.getBoard().getTotalTilesCount(); | ||
| + | |||
| + | // Coup joué sur une case ne contenant pas l' | ||
| + | aGame.playMove(1); | ||
| + | |||
| + | // Récupération du nombre de pions après le coup | ||
| + | int nb_tokens_after = aGame.getBoard().getTotalTilesCount(); | ||
| + | |||
| + | // Vérifications : | ||
| + | // - l' | ||
| + | // - le tour de jeu a bien changé | ||
| + | // - il y a bien un pion de plus sur le plateau | ||
| + | assertTrue(" | ||
| + | assertTrue(aGame.getCurrentPlayer().getId() != id_player); | ||
| + | assertEquals(nb_tokens_before + 1, nb_tokens_after); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Test de DisappearEffect sur grille vide | ||
| + | * Vérification de l' | ||
| + | * tuile après application de l' | ||
| + | * Résultats attendus : la case doit être | ||
| + | * vide, le tour de jeu doit être passé | ||
| + | */ | ||
| + | @Test | ||
| + | public void testDisappearEffectEmptyGame() { | ||
| + | |||
| + | // Effet fixé sur une case | ||
| + | int height = aGame.getBoard().getHeight(); | ||
| + | aGame.getBoard().getTileIJ(height - 1, 0).setEffect(new DisappearEffect()); | ||
| + | |||
| + | // Récupération de l'ID du joueur courant | ||
| + | int id_player = aGame.getCurrentPlayer().getId(); | ||
| + | |||
| + | // Coup joué sur la case de l' | ||
| + | aGame.playMove(0); | ||
| + | |||
| + | // Vérifications : | ||
| + | // - la case est bien vide après | ||
| + | // - l' | ||
| + | // - le tour de jeu a bien changé | ||
| + | assertEquals(-1, | ||
| + | assertTrue(" | ||
| + | assertTrue(aGame.getCurrentPlayer().getId() != id_player); | ||
| + | |||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Test de DisappearEffect sur grille vide | ||
| + | * Vérification du nombre de jetons | ||
| + | * après jeu | ||
| + | * Résultat attendu : le nombre doit être égal à 0 | ||
| + | */ | ||
| + | @Test | ||
| + | public void testDisappearEffectEmptyGameWithTilesNumber() { | ||
| + | |||
| + | // Effet fixé sur une case | ||
| + | int height = aGame.getBoard().getHeight(); | ||
| + | aGame.getBoard().getTileIJ(height - 1, 0).setEffect(new DisappearEffect()); | ||
| + | |||
| + | // Coup joué sur cette case | ||
| + | aGame.playMove(0); | ||
| + | |||
| + | // Vérification que le nombre de jetons au total est égal à 0 | ||
| + | assertEquals(0, | ||
| + | |||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Test de DisappearEffect sur grille pré-remplie | ||
| + | * Vérification de l' | ||
| + | * la tuile après application de l' | ||
| + | * Résultat attendu : la case doit | ||
| + | * être vide, l' | ||
| + | * et le tour doit être passé | ||
| + | */ | ||
| + | @Test | ||
| + | public void testDisappearEffectFilledGame() { | ||
| + | |||
| + | // On pré-remplit le plateau pour les besoins de la simulation | ||
| + | Utils.simulateAGame(aGame); | ||
| + | |||
| + | // Effet fixé sur une case (qui n'est pas encore remplie) | ||
| + | int height = aGame.getBoard().getHeight(); | ||
| + | // height-3 correspond à la première case vide dans la colonne O, vu que l'on a déjà joué deux coups dans cette colonne | ||
| + | aGame.getBoard().getTileIJ(height - 3, 0).setEffect(new DisappearEffect()); | ||
| + | |||
| + | // Récupération de l'ID du joueur avant que le coup soit joué | ||
| + | int id_player = aGame.getCurrentPlayer().getId(); | ||
| + | |||
| + | // Coup joué sur cette case | ||
| + | aGame.playMove(0); | ||
| + | |||
| + | // Vérifications : | ||
| + | // - la case est bien vide après | ||
| + | // - l' | ||
| + | // - le tour de jeu a bien changé | ||
| + | assertEquals(-1, | ||
| + | assertTrue(" | ||
| + | assertTrue(aGame.getCurrentPlayer().getId() != id_player); | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | |||
| + | </file> | ||
| 3. Exécutez ce code de test. | 3. Exécutez ce code de test. | ||
| <WRAP center round help 60%> | <WRAP center round help 60%> | ||
| - | **Q2 :** dans votre compte-rendu, | + | **Q2 :** dans votre compte-rendu, |
| </ | </ | ||
| Ligne 136: | Ligne 311: | ||
| <WRAP center round help 60%> | <WRAP center round help 60%> | ||
| - | **Q3 :** dans votre compte-rendu, | + | **Q3 :** dans votre compte-rendu, |
| </ | </ | ||
| Ligne 149: | Ligne 324: | ||
| Vous trouverez ci-dessous une liste d' | Vous trouverez ci-dessous une liste d' | ||
| - | < | + | Liste des effets |
| - | </ | + | * Rajouter un pion de la couleur courante dans chaque colonne |
| + | * Fait disparaître un certain nombre de pions de façon aléatoire (effet à paramétrer par nombre de pions, nombre de couleurs) | ||
| + | * Changer la couleur de tout le voisinage (pion joué + les 7 pions autour, s'il y en a) | ||
| + | * Fait disparaître la colonne dans laquelle le pion est joué | ||
| + | * Fait disparaître la ligne dans laquelle le pion est joué | ||
| + | * Fait exploser le voisinage du pion joué (et gérer les effets en cascade) | ||
| + | * Fait apparaître de manière aléatoire un autre pion sur le jeu | ||
| <WRAP center round help 60%> | <WRAP center round help 60%> | ||
| - | Q5 : effectuez un commit de votre code de test et de votre code d' | + | **Q5 :** effectuez un commit de votre code de test et de votre code d' |
| pour le code) | pour le code) | ||
| </ | </ | ||
| <WRAP center round help 60%> | <WRAP center round help 60%> | ||
| - | Q6 : exécutez en une seule fois l' | + | **Q6 :** exécutez en une seule fois l' |
| </ | </ | ||
| Ligne 165: | Ligne 347: | ||
| - | Il reste beaucoup de choses à faire pour améliorer 'Magic P4' | + | Il reste beaucoup de choses à faire pour améliorer 'Magic P4'. Dans cette partie, vous pouvez choisir de traiter les questions |
| + | libres (**QL**) que vous voulez. Plus vous traitez de questions, plus vous aurez de points. | ||
| - | Q7 : lister les questions que vous traitez | + | Par ailleurs, si votre code est suffisamment bien fait, il sera intégré au projet principal et sera donc disponible pour les futurs |
| - | Dans cette partie, vous pouvez choisir de traiter | + | étudiants qui feront ce TP. **Vous deviendrez donc contributeurs officiels |
| - | libres (QL) que vous voulez. Plus vous traitez | + | |
| - | points. | + | |
| - | Par ailleurs, si votre code est suffisamment bien fait, il sera | + | <WRAP center round help 60%> |
| - | intégré au projet principal | + | **Q7 :** Dans votre rapport, écrivez Q7 et inscrivez la liste des questions que vous avez traité |
| - | étudiants qui feront ce TP. Vous deviendrez donc contributeurs | + | </ |
| - | officiels de P4Magic. | + | |
| - | QL1 : implémenter un autre effet, et écrire la classe de tests | + | **QL1 :** implémenter un autre effet, et écrire la classe de tests correspondante. Vous pouvez choisir d' |
| - | correspondante. Vous pouvez choisir d' | + | |
| - | précédente, | + | |
| - | veillez à bien expliquer le comportement attendu de votre effet. | + | |
| - | (1 point) | + | |
| - | QL2 : écrire les tests de la méthode win. La classe Game contient une | + | **QL2 :** écrire les tests de la méthode |
| - | méthode ' | + | |
| - | une suite gagnante. Dans cette question, il s'agit d' | + | |
| - | qui permettent de s' | + | |
| - | QL3 : couverture de code, couverture des tests. Ici, il s'agit de | + | **QL3 :** couverture de code, couverture des tests. Ici, il s'agit de faire une analyse du code existant et de déterminer d'une part s'il y a du code mort, et d' |
| - | faire une analyse du code existant et de déterminer d'une part s'il y | + | |
| - | a du code mort, et d' | + | |
| - | il faut faire des recommendations | + | |
| - | c' | + | |
| - | définies. Vous répondrez à cette question dans votre rapport. (2 points) | + | |
| - | QL4 : réfléchir à une ré-organisation du code qui permettrait de | + | **QL4 :** réfléchir à une ré-organisation du code qui permettrait de faire un P4Magic à plus de deux joueurs. Ici, il s'agit de réfléchir à tout ce qu'il faudrait modifier pour que l'on puisse jouer au P4Magic |
| - | faire un P4Magic à plus de deux joueurs. Ici, il s'agit de réfléchir à | + | |
| - | tout ce qu'il faudrait modifier pour que l'on puisse jouer au P4 Magic | + | |
| - | à plus de deux joueurs. Vous rapporterez le résultat de vos réflexions | + | |
| - | dans votre rapport, à moins que vous ne préfériez implémenter | + | |
| - | directement votre solution ? (2 points) | + | |
| - | QL5 : améliorer le paramétrage du jeu. Dans cette question, il s'agit | + | ** QL5 :** améliorer le paramétrage du jeu. Dans cette question, il s'agit d' |
| - | d' | + | |
| - | lancement. Les paramètres attendus sont : | + | |
| * Taille de la grille | * Taille de la grille | ||
| * Couleurs des joueurs | * Couleurs des joueurs | ||
| Ligne 212: | Ligne 373: | ||
| Vous pouvez ajouter d' | Vous pouvez ajouter d' | ||
| - | QL6 : réaliser la partie IHM pour la QL5. | + | **QL6 :** réaliser la partie IHM pour la QL5. |
| - | + | ||
| - | QL7 : durée de vie des effets. Dans la version actuelle, les effets | + | |
| - | sont actifs en permanence, ce qui peut poser problème dans certaines | + | |
| - | configuration. Votre mission : modifier l' | + | |
| - | ce que l'on puisse choisir, pour chaque effet, s'il est actif en | + | |
| - | permanence, ou bien s'il disparaît de la case après avoir été activé | + | |
| - | un certain nombre de fois. (3 points) | + | |
| - | + | ||
| - | QL8 : tester les méthodes de comptage de tuiles. | + | |
| - | + | ||
| - | QL9 : gérer les cases mortes. | + | |
| + | **QL7 :** durée de vie des effets. Dans la version actuelle, les effets sont actifs en permanence, ce qui peut poser problème dans certaines configuration. Votre mission : modifier l' | ||
| + | **QL8 :** tester les méthodes de comptage de tuiles. La classe '' | ||
| + | **QL9 :** gérer les cases mortes. Imaginez une façon de gérer des cases mortes, c' | ||
| ==== Phase 6. Rendu du TP ==== | ==== Phase 6. Rendu du TP ==== | ||
| <WRAP center round help 60%> | <WRAP center round help 60%> | ||
| - | **Q8 :** vérifiez que votre code est bien commenté, bien documenté et bien formaté, puis générez la javadoc totale. (2 points) | + | **Q8 :** vérifiez que votre code est bien commenté, bien documenté et bien formaté, puis générez la javadoc totale. Ajoutez à votre rapport un screenshot qui prouve que la javadoc a bien été générée. (2 points) |
| </ | </ | ||
| Ligne 239: | Ligne 392: | ||
| <WRAP center round help 60%> | <WRAP center round help 60%> | ||
| - | **Q10 :** Effectuez un dernier commit de votre projet. Assurez-vous de bien commiter la javadoc également. Ensuite, n' | + | **Q10 :** Effectuez un dernier commit de votre projet. Ensuite, n' |
| </ | </ | ||