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:42] admin Cordier Amelie () [Phase 5. À votre tour d'améliorer le puissance 4] |
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%> | ||
Ligne 158: | Ligne 340: | ||
<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 202: | Ligne 384: | ||
<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 210: | 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' |
</ | </ | ||