From a60e88b24ed2257f7c19a93ab4c3282cc161018f Mon Sep 17 00:00:00 2001 From: Corentin Guillevic Date: Fri, 4 Dec 2020 18:32:18 +0100 Subject: [PATCH] Small refactoring --- .../alma/server/game/PowerApplicator.java | 179 +++++++----------- .../item/power/recurrent/PowerRecurrent.java | 12 +- .../{ => game}/PowerApplicatorTest.java | 129 ++++++++++++- 3 files changed, 200 insertions(+), 120 deletions(-) rename not-alone-server/src/test/java/fr/univnantes/alma/server/{ => game}/PowerApplicatorTest.java (97%) diff --git a/not-alone-server/src/main/java/fr/univnantes/alma/server/game/PowerApplicator.java b/not-alone-server/src/main/java/fr/univnantes/alma/server/game/PowerApplicator.java index 25f7510..94e6eac 100644 --- a/not-alone-server/src/main/java/fr/univnantes/alma/server/game/PowerApplicator.java +++ b/not-alone-server/src/main/java/fr/univnantes/alma/server/game/PowerApplicator.java @@ -21,12 +21,9 @@ import fr.univnantes.alma.server.game.item.power.modifier.PowerModifierType; import fr.univnantes.alma.server.game.item.power.recurrent.PowerRecurrent; import fr.univnantes.alma.server.game.utilitary.Pair; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; +import java.util.*; import java.util.function.BiConsumer; -import java.util.function.BiFunction; +import java.util.function.BiPredicate; import java.util.stream.Collectors; import static fr.univnantes.alma.server.game.item.card.CardName.*; @@ -80,7 +77,7 @@ public class PowerApplicator { Traque traque = (Traque) game.getPlayer(idPlayer); traque.addSurvivalCard(game.getPlanet().takeSurvivalCardOnPlace(placeCard)); } - applyPlaceCardPower(idPlayer, game, placeCard.getCardName()); + applyPlaceCardPower(idPlayer, placeCard.getCardName(), game); } } @@ -173,10 +170,10 @@ public class PowerApplicator { /** * A traque apply the power of one place * @param idPlayer The id of the traque - * @param game The game * @param cardName The card name + * @param game The game */ - public static void applyPlaceCardPower(int idPlayer, Game game, CardName cardName) { + public static void applyPlaceCardPower(int idPlayer, CardName cardName, Game game) { switch (cardName) { case ANTRE: applyPlaceAntre(idPlayer, game); @@ -246,10 +243,10 @@ public class PowerApplicator { public static void applyTrackingCardPower(int idPlayer, Game game, CardName cardName) { switch (cardName) { case ACHARNEMENT: - applyTrackingAcharnement(idPlayer, game); + applyTrackingAcharnement(game); break; case ANGOISSE: - applyTrackingAngoisse(idPlayer, game); + applyTrackingAngoisse(game); break; case ANTICIPATION: applyTrackingAnticipation(idPlayer, game); @@ -258,15 +255,16 @@ public class PowerApplicator { applyTrackingCataclysme(idPlayer, game); break; case CHAMP_DE_FORCE: - applyTrackingChampDeForce(idPlayer, game); + applyTrackingChampDeForce(game); break; case CLONE: - applyTrackingClone(idPlayer, game); + applyTrackingClone(game); break; case DEPLOIEMENT: applyTrackingDeploiement(idPlayer, game); + break; case DESESPOIR: - applyTrackingDesespoir(idPlayer, game); + applyTrackingDesespoir(game); break; case DETOUR: applyTrackingDetour(idPlayer, game); @@ -308,7 +306,7 @@ public class PowerApplicator { applyTrackingIntuition(idPlayer, game); break; case MAGNETISME: - applyTrackingMagnetisme(idPlayer, game); + applyTrackingMagnetisme(game); break; case MIRAGE: applyTrackingMirage(game); @@ -366,10 +364,10 @@ public class PowerApplicator { applySurvivalAlerte(idPlayer, game); break; case AMPLIFICATEUR: - applySurvivalAmplificateur(idPlayer, game); + applySurvivalAmplificateur(game); break; case BROUILLAGE: - applySurvivalBrouillage(idPlayer, game); + applySurvivalBrouillage(game); break; case CAVALE: applySurvivalCavale(idPlayer, game); @@ -381,7 +379,7 @@ public class PowerApplicator { applySurvivalDrone(idPlayer, game); break; case ENTRAVE: - applySurvivalEntrave(idPlayer, game); + applySurvivalEntrave(game); break; case EQUIPEMENT: applySurvivalEquipement(idPlayer, game); @@ -402,7 +400,7 @@ public class PowerApplicator { applySurvivalMimetisme(idPlayer, game); break; case NAVETTE: - applySurvivalNavette(idPlayer, game); + applySurvivalNavette(game); break; case PLANQUES: applySurvivalPlanques(idPlayer, game); @@ -411,7 +409,7 @@ public class PowerApplicator { applySurvivalPortail(idPlayer, game); break; case RALLIEMENT: - applySurvivalRalliement(idPlayer, game); + applySurvivalRalliement(game); break; case REFUGE: applySurvivalRefuge(idPlayer, game); @@ -426,7 +424,7 @@ public class PowerApplicator { applySurvivalRetraite(idPlayer, game); break; case RIPOSTE: - applySurvivalRiposte(idPlayer, game); + applySurvivalRiposte(game); break; case SACRIFICE: applySurvivalSacrifice(idPlayer, game); @@ -438,13 +436,13 @@ public class PowerApplicator { applySurvivalSixiemeSens(idPlayer, game); break; case SYSTEME_D: - applySurvivalSystemeD(idPlayer, game); + applySurvivalSystemeD(game); break; case TENACITE: applySurvivalTenacite(idPlayer, game); break; case VACCIN: - applySurvivalVaccin(idPlayer, game); + applySurvivalVaccin(game); break; case VOLTE_FACE: applySurvivalVolteFace(idPlayer, game); @@ -457,29 +455,6 @@ public class PowerApplicator { } } - /** - * Apply the power of jeton placed on the place card on the traque - * @param idPlayer The id of the traque - * @param game The game - * @param placeCard The place card - */ - public static void applyJeton(int idPlayer, Game game, PlaceCard placeCard) { - List jetons = game.getPlanet().findJetonsOnCard(placeCard); - for(Jeton jeton : jetons) { - switch (jeton.getType()) { - case CIBLE: - applyJetonCible(idPlayer, game); - break; - case ARTEMIA: - applyJetonArtemia(idPlayer, game); - break; - case CREATURE: - applyJetonCreature(idPlayer, game, placeCard); - break; - } - } - } - /** * Apply the power of Jeton Artemia on the player * @param idPlayer The id of the player @@ -1011,11 +986,11 @@ public class PowerApplicator { * Apply tracking card ***********************************/ - private static void applyTrackingAcharnement(int idPlayer, Game game) { + private static void applyTrackingAcharnement(Game game) { game.addNumberWillingnessByJetonCreature(); } - private static void applyTrackingAngoisse(int idPlayer, Game game) { + private static void applyTrackingAngoisse(Game game) { game.setTraqueCanResist(false); } @@ -1030,12 +1005,12 @@ public class PowerApplicator { } - private static void applyTrackingChampDeForce(int idPlayer, Game game) { + private static void applyTrackingChampDeForce(Game game) { game.getGameRoundVariables().setJetonCibleBlockPlace(true); game.getGameRoundVariables().setJetonCibleCanBeOnTwoAdjacentPlaces(true); } - private static void applyTrackingClone(int idPlayer, Game game) { + private static void applyTrackingClone(Game game) { BiConsumer action = (Integer id, Game g) -> { Traque traque = (Traque) g.getPlayer(id); List placeCards = traque.getPlaceCardsPlayed(); @@ -1063,7 +1038,7 @@ public class PowerApplicator { moveJetonOnAdjacentPlace(idPlayer, game, JetonSymbol.CREATURE); } - private static void applyTrackingDesespoir(int idPlayer, Game game) { + private static void applyTrackingDesespoir(Game game) { game.setTraqueCanPickSurvivalCards(false); } @@ -1073,11 +1048,9 @@ public class PowerApplicator { private static void applyTrackingDomination(int idPlayer, Game game) { int targetPlayer = game.targetPlayer(idPlayer); - BiConsumer action = (Integer id, Game g) -> { - throwAwayPlaceCards(id, g, 1); - }; + BiConsumer action = (Integer id, Game g) -> throwAwayPlaceCards(id, g, 1); - BiFunction condition = (Integer id, Game g) -> { + BiPredicate condition = (Integer id, Game g) -> { GameRoundVariables variables = game.getGameRoundVariables(); return ! variables.getPlayerWhoHaveLostAllWillingness().contains(id); }; @@ -1090,7 +1063,7 @@ public class PowerApplicator { GameRoundVariables variables = game.getGameRoundVariables(); List haveResistPlayers = variables.getPlayersWhoHaveResist(); if(! haveResistPlayers.isEmpty()){ - int targetPlayer = -1; + int targetPlayer; do{ targetPlayer = game.targetPlayer(idPlayer); } @@ -1187,7 +1160,7 @@ public class PowerApplicator { creature.playTrackingCard(trackingCard); } - private static void applyTrackingMagnetisme(int idPlayer, Game game) { + private static void applyTrackingMagnetisme(Game game) { game.getGameRoundVariables().setJetonCibleAdjacentPlaceMoveTraque(true); } @@ -1241,9 +1214,7 @@ public class PowerApplicator { Traque traque = (Traque) g.getPlayer(id); traque.addWillingness(1); }; - BiConsumer actionAdjacent = (Integer id, Game g) -> { - subWillingness(id, g, 1); - }; + BiConsumer actionAdjacent = (Integer id, Game g) -> subWillingness(id, g, 1); game.getGameRoundVariables().setActionJetonCible(action); game.getGameRoundVariables().setActionAdjacentPlaceJetonCible(actionAdjacent); } @@ -1258,10 +1229,10 @@ public class PowerApplicator { Traque traque = (Traque) game.getPlayer(targetPlayer); if(traque.placeCardHandSize() > 1) { List hand = traque.getPlaceCards(); - int indice = (int) Math.floor(Math.random()*(hand.size()-1)); - PlaceCard random = hand.get(indice); - traque.throwAwayPlaceCard(random); - if(random.equals(placeCard)) { + int indice = new Random().nextInt(hand.size()); + PlaceCard randomCard = hand.get(indice); + traque.throwAwayPlaceCard(randomCard); + if(randomCard.equals(placeCard)) { game.getBoard().moveForwardCreature(); } } @@ -1272,9 +1243,7 @@ public class PowerApplicator { } private static void applyTrackingToxine(Game game) { - BiConsumer action = (Integer id, Game g) -> { - throwAwaySurvivalCards(id, g, 1); - }; + BiConsumer action = (Integer id, Game g) -> throwAwaySurvivalCards(id, g, 1); GameRoundVariables variables = game.getGameRoundVariables(); variables.setActionJetonCible(action); variables.setJetonCibleBlockPlace(true); @@ -1311,7 +1280,7 @@ public class PowerApplicator { game.getGameRoundVariables().setTargetByAlerte(place); } - private static void applySurvivalAmplificateur(int idPlayer, Game game) { + private static void applySurvivalAmplificateur(Game game) { Planet planet = game.getPlanet(); if(planet.getPlanetPawnType().equals(PawnType.BEACON)) { if(! planet.planetPawnIsActive()) { @@ -1327,7 +1296,7 @@ public class PowerApplicator { } } - private static void applySurvivalBrouillage(int idPlayer, Game game) { + private static void applySurvivalBrouillage(Game game) { game.getGameRoundVariables().setDefaussePlaceCardsAreHidden(true); } @@ -1347,7 +1316,7 @@ public class PowerApplicator { game.getGameRoundVariables().addPlayersWhoHavePlayDrone(idPlayer); } - private static void applySurvivalEntrave(int idPlayer, Game game) { + private static void applySurvivalEntrave(Game game) { game.getGameRoundVariables().setCanPlaceJetonCreatureOnPlaces6To10(false); } @@ -1393,7 +1362,7 @@ public class PowerApplicator { game.getGameRoundVariables().addPlayersWhoHavePlayMimetisme(idPlayer); } - private static void applySurvivalNavette(int idPlayer, Game game) { + private static void applySurvivalNavette(Game game) { int scoreTraque = game.getBoard().getScore().getScoreTraque(); if(scoreTraque == 1) { game.getBoard().moveForwardTraque(); @@ -1412,7 +1381,7 @@ public class PowerApplicator { game.getGameRoundVariables().addPlayersWhoHavePlayPortail(idPlayer); } - private static void applySurvivalRalliement(int idPlayer, Game game) { + private static void applySurvivalRalliement(Game game) { game.getGameRoundVariables().setRalliementIsActive(true); } @@ -1436,7 +1405,7 @@ public class PowerApplicator { moveTraqueOnAdjacentPlaceAndAddHimToRetraiteList(idPlayer, game); } - private static void applySurvivalRiposte(int idPlayer, Game game) { + private static void applySurvivalRiposte(Game game) { List trackingCards = game.getCreature().getTrackingCardHand(); int maxToThrowAway = Math.min(2, trackingCards.size()); List trashCards = new ArrayList<>(); @@ -1470,7 +1439,7 @@ public class PowerApplicator { takeBackCardsFromDefausse(idPlayer, game, 2); } - private static void applySurvivalSystemeD(int idPlayer, Game game) { + private static void applySurvivalSystemeD(Game game) { Planet planet = game.getPlanet(); if(!planet.planetPawnIsActive()) { planet.forceMovePlanetPawn(); @@ -1482,7 +1451,7 @@ public class PowerApplicator { traque.getRights().setNumberOfAdditionalCardsTakeBackPerPawnWillingnessLostWithResist(1); } - private static void applySurvivalVaccin(int idPlayer, Game game) { + private static void applySurvivalVaccin(Game game) { game.getBoard().moveBackCreature(); } @@ -1494,9 +1463,6 @@ public class PowerApplicator { Player player = game.getPlayer(idPlayer); checkPlayerIsNotCreature(player); Traque traque = (Traque) player; - if(traque.getDefausse().isEmpty()){ - return; - } PlaceCard placeCard = game.choosePlaceCardsAction(idPlayer, 1, traque.getDefausse()).get(0); traque.takeBackPlayedPlaceCards(); traque.takeBackPlaceCard(placeCard); @@ -1548,14 +1514,14 @@ public class PowerApplicator { return; } List hiddenPlaces = planet.getHiddenPlaces(); - Place revealedPlace = null; + Place revealedPlace; do{ revealedPlace = game.choosePlace(idPlayer, 1, "Choississez un lieu à révéler").get(0); } - while (revealedPlace == null && ! hiddenPlaces.contains(revealedPlace)); + while (revealedPlace == null || ! hiddenPlaces.contains(revealedPlace)); planet.revealPlace(revealedPlace); PlaceCard placeCard = planet.placeToPlaceCard(revealedPlace); - applyPlaceCardPower(idPlayer, game, placeCard.getCardName()); + applyPlaceCardPower(idPlayer, placeCard.getCardName(), game); } /** @@ -1612,16 +1578,14 @@ public class PowerApplicator { checkPlayerIsNotCreature(player); Traque traque = (Traque) player; List placeCards = traque.getDefausse(); - if(placeCards.isEmpty()) { - return; - } - else if(placeCards.size() <= numberCards) { - traque.takeBackAllPlaceCardFromDefausse(); - } - else { - int maxCardsToTakeBack = Math.min(numberCards,placeCards.size()); - List cardsTakeBack = game.choosePlaceCardsAction(idPlayer, maxCardsToTakeBack, placeCards); - traque.takeBackPlaceCard(cardsTakeBack); + if(! placeCards.isEmpty()) { + if(placeCards.size() <= numberCards) { + traque.takeBackAllPlaceCardFromDefausse(); + } + else { + List cardsTakeBack = game.choosePlaceCardsAction(idPlayer, numberCards, placeCards); + traque.takeBackPlaceCard(cardsTakeBack); + } } } @@ -1685,7 +1649,7 @@ public class PowerApplicator { } PlaceCard card = placeCards.get(0); if(card.getCardName() != ARTEFACT) { - applyPlaceCardPower(idPlayer, game, card.getCardName()); + applyPlaceCardPower(idPlayer, card.getCardName(), game); } } @@ -1700,7 +1664,7 @@ public class PowerApplicator { Traque traque = (Traque) player; List placeCards = traque.getDefausse(); PlaceCard placeCard = game.choosePlaceCardsAction(idPlayer, 1, placeCards).get(0); - applyPlaceCardPower(idPlayer, game, placeCard.getCardName()); + applyPlaceCardPower(idPlayer, placeCard.getCardName(), game); } /** @@ -1711,9 +1675,9 @@ public class PowerApplicator { * @param b The end of interval */ public static void copyPowerOfOneCardInInterval(int idPlayer, Game game, int a, int b) { - List choosableCards = game.getPlanet().getPlaceCardsInInterval(2, 5); + List choosableCards = game.getPlanet().getPlaceCardsInInterval(a, b); PlaceCard placeCard = game.choosePlaceCardsAction(idPlayer, 1, choosableCards).get(0); - applyPlaceCardPower(idPlayer, game, placeCard.getCardName()); + applyPlaceCardPower(idPlayer, placeCard.getCardName(), game); } /** @@ -1731,7 +1695,7 @@ public class PowerApplicator { } } PlaceCard copiedCard = game.choosePlaceCardsAction(idPlayer, 1, choosableCards).get(0); - applyPlaceCardPower(idPlayer, game, copiedCard.getCardName()); + applyPlaceCardPower(idPlayer, copiedCard.getCardName(), game); } /** @@ -1871,7 +1835,7 @@ public class PowerApplicator { boolean isAdjacentPlace = false; Planet planet = game.getPlanet(); List places = planet.findPlacesWhereJetonIs(symbol); - Place adjacent = null; + Place adjacent; do{ adjacent = game.choosePlace(idPlayer, 1, "Choose place adjacent to JetonCreature").get(0); for(Place place : places) { @@ -1889,14 +1853,13 @@ public class PowerApplicator { * @param game The game */ public static Pair chooseTwoAdjacentPlace(int idPlayer, Game game) { - boolean isAdjacentPlace = false; - Planet planet = game.getPlanet(); + boolean isAdjacentPlace; List places; Pair pair; do{ places = game.choosePlace(idPlayer, 2, "Choose two adjacent places"); pair = new Pair<>(places.get(0), places.get(1)); - isAdjacentPlace = planet.isAdjacentPlaces(pair.getKey(), pair.getValue()); + isAdjacentPlace = Planet.isAdjacentPlaces(pair.getKey(), pair.getValue()); } while (! isAdjacentPlace); return pair; @@ -1964,14 +1927,16 @@ public class PowerApplicator { GameRoundVariables variables = game.getGameRoundVariables(); Planet planet = game.getPlanet(); if(variables.inertieTrackingCardIsPlayed()) { - List placesWhereJetonIs = planet.findPlacesWhereJetonIs(JetonSymbol.CIBLE); boolean isTraqueOnThePlaces = false; - for(Traque traque : game.getTraques()) { - for(PlaceCard playerCard : traque.getPlaceCardsPlayed()) { - for(Place jetonPlace : placesWhereJetonIs){ - if(planet.isAdjacentPlaces(playerCard, jetonPlace)){ - isTraqueOnThePlaces = true; - } + List cardsTargetByJetonCible = planet.findPlaceCardsWhereJetonIs(JetonSymbol.CIBLE); + Iterator iteratorTraque = game.getTraques().iterator(); + while(!isTraqueOnThePlaces && iteratorTraque.hasNext()) { + Traque traque = iteratorTraque.next(); + List placeCardsPlayed = traque.getPlaceCardsPlayed(); + Iterator iteratorPlayed = placeCardsPlayed.iterator(); + while(!isTraqueOnThePlaces && iteratorPlayed.hasNext()) { + if(cardsTargetByJetonCible.contains(iteratorPlayed.next())) { + isTraqueOnThePlaces = true; } } } @@ -1993,7 +1958,6 @@ public class PowerApplicator { } public static boolean checkIfAdjacentToJetonCible(Game game, PlaceCard placeCard) { - GameRoundVariables variables = game.getGameRoundVariables(); Planet planet = game.getPlanet(); List placesWhereJetonIs = planet.findPlacesWhereJetonIs(JetonSymbol.CIBLE); boolean isAdjacent = false; @@ -2006,7 +1970,6 @@ public class PowerApplicator { } public static PlaceCard findPlaceCardWhereTheJetonCibleIsAndAdjacent(Game game, PlaceCard placeCard) { - GameRoundVariables variables = game.getGameRoundVariables(); Planet planet = game.getPlanet(); List placesWhereJetonIs = planet.findPlacesWhereJetonIs(JetonSymbol.CIBLE); PlaceCard jetonCiblePlaceCard = null; diff --git a/not-alone-server/src/main/java/fr/univnantes/alma/server/game/item/power/recurrent/PowerRecurrent.java b/not-alone-server/src/main/java/fr/univnantes/alma/server/game/item/power/recurrent/PowerRecurrent.java index 63648cb..59a527a 100644 --- a/not-alone-server/src/main/java/fr/univnantes/alma/server/game/item/power/recurrent/PowerRecurrent.java +++ b/not-alone-server/src/main/java/fr/univnantes/alma/server/game/item/power/recurrent/PowerRecurrent.java @@ -1,20 +1,18 @@ package fr.univnantes.alma.server.game.item.power.recurrent; import fr.univnantes.alma.server.game.Game; -import fr.univnantes.alma.server.game.item.Phase; import fr.univnantes.alma.server.game.item.power.Power; import fr.univnantes.alma.server.game.item.power.PowerType; import java.util.function.BiConsumer; -import java.util.function.BiFunction; +import java.util.function.BiPredicate; public class PowerRecurrent extends Power { - private BiConsumer action; - private BiFunction condition; - private Phase phase; + private final BiConsumer action; + private final BiPredicate condition; - public PowerRecurrent(int inGameIdPlayer, BiConsumer action, BiFunction condition) { + public PowerRecurrent(int inGameIdPlayer, BiConsumer action, BiPredicate condition) { super(inGameIdPlayer); this.action = action; this.condition = condition; @@ -25,7 +23,7 @@ public class PowerRecurrent extends Power { } public boolean conditionIsTrue(Game game) { - return condition.apply(inGameIdPlayer, game); + return condition.test(inGameIdPlayer, game); } @Override diff --git a/not-alone-server/src/test/java/fr/univnantes/alma/server/PowerApplicatorTest.java b/not-alone-server/src/test/java/fr/univnantes/alma/server/game/PowerApplicatorTest.java similarity index 97% rename from not-alone-server/src/test/java/fr/univnantes/alma/server/PowerApplicatorTest.java rename to not-alone-server/src/test/java/fr/univnantes/alma/server/game/PowerApplicatorTest.java index c4e2075..bd14c9e 100644 --- a/not-alone-server/src/test/java/fr/univnantes/alma/server/PowerApplicatorTest.java +++ b/not-alone-server/src/test/java/fr/univnantes/alma/server/game/PowerApplicatorTest.java @@ -1,4 +1,4 @@ -package fr.univnantes.alma.server; +package fr.univnantes.alma.server.game; import fr.univnantes.alma.common.NotAloneDatabase; import fr.univnantes.alma.data.DatabaseFactory; @@ -1404,6 +1404,33 @@ class PowerApplicatorTest { assertEquals(Collections.singletonList(nexus), traque.getPlaceCards()); } + @Test + void testResolvePlace_archipelCantPickSurvivalCard() throws TException { + Game game = new Game(2, 1, planetExtension, board, room, gameClientHandler); + + game.setTraqueCanPickSurvivalCards(false); + + TAction chooseADefausseCard = new TAction(CHOOSE_CARD.toString(), + Collections.singletonList(new TPair(TPairType.CARD.toString(), NEXUS.toString()))); + + when(gameClientHandler.askAction(any(TAskAction.class))) + .thenReturn(chooseSecondPower) + .thenReturn(chooseADefausseCard); + + Traque traque = (Traque) game.getPlayer(2); + + List throwAwayCards = Arrays.asList(nexus, oasis, fjord, dome, labyrinthe); + traque.throwAwayPlaceCard(throwAwayCards); + + traque.addPlaceCard(archipel); + traque.playPlaceCard(archipel); + PowerApplicator.resolvePlace(traque.getInGameId(), archipel, game); + + //Verify that traque has only Nexus + assertEquals(Collections.singletonList(nexus), traque.getPlaceCards()); + } + + @Test void testResolvePlace_poleFirstPower() throws TException, NotFoundException { Game game = new Game(2, 1, planetExtension, board, room, gameClientHandler); @@ -1533,6 +1560,64 @@ class PowerApplicatorTest { assertEquals(Collections.singletonList(nexus), traque.getPlaceCards()); } + @Test + void testResolvePlace_fungiFistPowerCantPickSurvival() throws TException { + Game game = new Game(2, 1, planetExtension, board, room, gameClientHandler); + game.setTraqueCanPickSurvivalCards(false); + when(gameClientHandler.askAction(any(TAskAction.class))) + .thenReturn(chooseFirstPower); + + Traque traque = (Traque) game.getPlayer(2); + traque.subWillingness(2); + + List throwAwayCards = Arrays.asList(nexus, oasis, fjord, dome, labyrinthe); + traque.throwAwayPlaceCard(throwAwayCards); + + traque.addPlaceCard(fungi); + traque.playPlaceCard(fungi); + + PowerApplicator.resolvePlace(traque.getInGameId(), fungi, game); + + assertTrue(game.getGameRoundVariables().isPawnWillingnessOnBoard()); + + game.nextRound(); + + assertEquals(2, traque.getNumberWillingness()); + assertTrue(game.getGameRoundVariables().isPawnWillingnessOnBoard()); + + game.nextRound(); + + assertEquals(3, traque.getNumberWillingness()); + assertFalse(game.getGameRoundVariables().isPawnWillingnessOnBoard()); + } + + @Test + void testResolvePlace_fungiSecondPowerCantPickSurvival() throws TException { + Game game = new Game(2, 1, planetExtension, board, room, gameClientHandler); + + game.setTraqueCanPickSurvivalCards(false); + + TAction chooseADefausseCard = new TAction(CHOOSE_CARD.toString(), + Collections.singletonList(new TPair(TPairType.CARD.toString(), NEXUS.toString()))); + + when(gameClientHandler.askAction(any(TAskAction.class))) + .thenReturn(chooseSecondPower) + .thenReturn(chooseADefausseCard); + + Traque traque = (Traque) game.getPlayer(2); + + List throwAwayCards = Arrays.asList(nexus, oasis, fjord, dome, labyrinthe); + traque.throwAwayPlaceCard(throwAwayCards); + + traque.addPlaceCard(fungi); + traque.playPlaceCard(fungi); + PowerApplicator.resolvePlace(traque.getInGameId(), fungi, game); + + //Verify that traque has only Nexus + assertEquals(Collections.singletonList(nexus), traque.getPlaceCards()); + } + + @Test void testResolvePlace_PortailFirstPower() throws TException { Game game = new Game(2, 1, planetExtension, board, room, gameClientHandler); @@ -2163,6 +2248,23 @@ class PowerApplicatorTest { assertTrue(planet.isBlockedPlace(antre)); } + @Test + void testApplyPlayerCard_flashbackTrackingTrashEmpty() throws TException { + Game game = new Game(2, 1, planet, board, room, gameClientHandler); + + TrackingCard desespoir = database.findTrackingCard(DESESPOIR.toString()); + TrackingCard flashback = database.findTrackingCard(FLASHBACK.toString()); + TrackingCard cataclysme = database.findTrackingCard(CATACLYSME.toString()); + + + + Creature creature= game.getCreature(); + creature.getTrackingCardHand().clear(); + creature.addTrackingCard(flashback); + + assertTrue(game.playerPlayCard(creature.getInGameId(), flashback).state); + } + @Test void testApplyPlayerCard_gargantua() { Game game = new Game(3, 1, planet, board, room, gameClientHandler); @@ -3010,16 +3112,18 @@ class PowerApplicatorTest { @Test void testApplyPlayerCard_amplificateurWithExtension() { - Game game = new Game(4, 1, planetExtension, board, room, gameClientHandler); + Game game = new Game(2, 1, planetExtension, board, room, gameClientHandler); Traque traque = (Traque) game.getPlayer(2); - planet.forceMovePlanetPawn(); - planet.forceMovePlanetPawn(); + planetExtension.forceMovePlanetPawn(); + planetExtension.forceMovePlanetPawn(); PowerApplicator.applySurvivalCardPower(traque.getInGameId(), game, AMPLIFICATEUR); - assertTrue(planet.planetPawnIsActive()); + Score score = new Score(2); + score.moveBackCreature(1); + assertEquals(score, game.getBoard().getScore()); } @Test @@ -3184,6 +3288,21 @@ class PowerApplicatorTest { assertTrue(traque.getSurvivalCardsHand().contains(survivalCard)); } + @Test + void testApplyPlayerCard_equipementCantPickSurvivalCard() throws TException { + Game game = new Game(2, 1, planet, board, room, gameClientHandler); + + game.getGameRoundVariables().setTraqueCanPickSurvivalCards(false); + + SurvivalCard survivalCard = game.getSurvivalCardPioche().getCards().get(0); + + Traque traque = (Traque) game.getPlayer(2); + + PowerApplicator.applySurvivalCardPower(traque.getInGameId(), game, EQUIPEMENT); + + assertFalse(traque.getSurvivalCardsHand().contains(survivalCard)); + } + @Test void testApplyPlayerCard_equipementFirstPower() throws TException { Game game = new Game(2, 1, planet, board, room, gameClientHandler); -- GitLab