summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorJoffrey BION <joffrey.bion@gmail.com>2018-04-23 21:05:36 +0200
committerJoffrey BION <joffrey.bion@gmail.com>2018-04-23 21:07:15 +0200
commit8702554846fe3791d4c877fbfe8e868b37fe39af (patch)
tree181a5de598248b914b79685084e73e161b3b26e9 /backend
parentUpgrade frontend build tools version (diff)
downloadseven-wonders-8702554846fe3791d4c877fbfe8e868b37fe39af.tar.gz
seven-wonders-8702554846fe3791d4c877fbfe8e868b37fe39af.tar.bz2
seven-wonders-8702554846fe3791d4c877fbfe8e868b37fe39af.zip
Extract game engine as separate artifact
Diffstat (limited to 'backend')
-rw-r--r--backend/build.gradle2
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/Game.java232
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/Settings.java93
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/api/Action.java20
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java128
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java49
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java48
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java77
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/api/Table.java106
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/boards/Board.java175
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java28
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/boards/Military.java56
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java28
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/boards/Science.java65
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java7
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/Card.java128
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java14
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/Color.java11
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java65
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java21
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java64
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java131
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java66
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java87
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java38
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java76
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java24
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java66
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java27
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java6
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java31
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java36
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java21
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java48
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java55
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java78
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java31
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java37
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java40
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java64
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java86
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java44
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java15
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java11
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java40
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java20
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java40
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java54
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java40
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java22
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java47
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java26
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java39
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java23
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java56
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java27
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/InvalidMoveException.java8
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/Move.java50
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java39
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java39
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java40
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/resources/BestPriceCalculator.java102
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java24
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/resources/Production.java106
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java18
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java40
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java91
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java43
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java38
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java24
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java11
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java102
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java56
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java4
-rw-r--r--backend/src/main/resources/org/luxons/sevenwonders/game/data/cards.json1719
-rw-r--r--backend/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json515
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java5
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java3
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/GameTest.java116
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java49
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java214
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java64
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java44
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java101
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java15
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java109
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java112
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java15
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java143
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/cards/RequirementsTest.java149
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java16
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java19
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java96
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java128
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java189
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializerTest.java199
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java51
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java102
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java108
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java145
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java142
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java72
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java80
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java81
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java109
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java63
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java38
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java94
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/resources/BestPriceCalculatorTest.java96
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java324
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java485
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java112
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java199
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java3
-rw-r--r--backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java3
115 files changed, 8 insertions, 10123 deletions
diff --git a/backend/build.gradle b/backend/build.gradle
index 5ef36783..dd3f4ffd 100644
--- a/backend/build.gradle
+++ b/backend/build.gradle
@@ -20,9 +20,9 @@ configurations {
}
dependencies {
+ compile project(':game-engine')
compile 'org.springframework.boot:spring-boot-starter-websocket'
compile 'org.springframework.security:spring-security-core:4.2.0.RELEASE'
- compile 'com.google.code.gson:gson:2.8.0'
compile 'ch.qos.logback:logback-classic:1.1.8'
compile 'org.hildan.livedoc:livedoc-springboot:4.3.2'
compile 'org.hildan.livedoc:livedoc-ui-webjar:4.3.2'
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/Game.java b/backend/src/main/java/org/luxons/sevenwonders/game/Game.java
deleted file mode 100644
index ed11913b..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/Game.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.api.Action;
-import org.luxons.sevenwonders.game.api.HandCard;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.PlayerTurnInfo;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Decks;
-import org.luxons.sevenwonders.game.cards.Hands;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.moves.InvalidMoveException;
-import org.luxons.sevenwonders.game.moves.Move;
-import org.luxons.sevenwonders.game.scoring.ScoreBoard;
-
-public class Game {
-
- private static final int LAST_AGE = 3;
-
- private final long id;
-
- private final Settings settings;
-
- private final int nbPlayers;
-
- private final Table table;
-
- private final Decks decks;
-
- private final List<Card> discardedCards;
-
- private final Map<Integer, Move> preparedMoves;
-
- private Map<Integer, PlayerTurnInfo> currentTurnInfo;
-
- private Hands hands;
-
- public Game(long id, Settings settings, int nbPlayers, List<Board> boards, Decks decks) {
- this.id = id;
- this.settings = settings;
- this.nbPlayers = nbPlayers;
- this.table = new Table(boards);
- this.decks = decks;
- this.discardedCards = new ArrayList<>();
- this.currentTurnInfo = new HashMap<>();
- this.preparedMoves = new HashMap<>();
- startNewAge();
- }
-
- public long getId() {
- return id;
- }
-
- public Settings getSettings() {
- return settings;
- }
-
- private void startNewAge() {
- table.increaseCurrentAge();
- hands = decks.deal(table.getCurrentAge(), table.getNbPlayers());
- startNewTurn();
- }
-
- private void startNewTurn() {
- currentTurnInfo.clear();
- for (int i = 0; i < nbPlayers; i++) {
- currentTurnInfo.put(i, createPlayerTurnInfo(i));
- }
- }
-
- private PlayerTurnInfo createPlayerTurnInfo(int playerIndex) {
- PlayerTurnInfo pti = new PlayerTurnInfo(playerIndex, table);
- List<HandCard> hand = hands.createHand(table, playerIndex);
- pti.setHand(hand);
- Action action = determineAction(hand, table.getBoard(playerIndex));
- pti.setAction(action);
- pti.setMessage(action.getMessage());
- if (action == Action.PICK_NEIGHBOR_GUILD) {
- pti.setNeighbourGuildCards(table.getNeighbourGuildCards(playerIndex));
- }
- return pti;
- }
-
- public Collection<PlayerTurnInfo> getCurrentTurnInfo() {
- return currentTurnInfo.values();
- }
-
- private Action determineAction(List<HandCard> hand, Board board) {
- if (endOfGameReached() && board.hasSpecial(SpecialAbility.COPY_GUILD)) {
- return Action.PICK_NEIGHBOR_GUILD;
- } else if (hand.size() == 1 && board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) {
- return Action.PLAY_LAST;
- } else if (hand.size() == 2 && board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) {
- return Action.PLAY_2;
- } else if (hand.isEmpty()) {
- return Action.WAIT;
- } else {
- return Action.PLAY;
- }
- }
-
- public CardBack prepareMove(int playerIndex, PlayerMove playerMove) throws InvalidMoveException {
- Card card = decks.getCard(playerMove.getCardName());
- Move move = playerMove.getType().resolve(playerIndex, card, playerMove);
- validate(move);
- preparedMoves.put(playerIndex, move);
- return card.getBack();
- }
-
- private void validate(Move move) throws InvalidMoveException {
- List<Card> hand = hands.get(move.getPlayerIndex());
- move.validate(table, hand);
- }
-
- public boolean allPlayersPreparedTheirMove() {
- long nbExpectedMoves = currentTurnInfo.values().stream().filter(pti -> pti.getAction() != Action.WAIT).count();
- return preparedMoves.size() == nbExpectedMoves;
- }
-
- public Table playTurn() {
- makeMoves();
- if (endOfAgeReached()) {
- executeEndOfAgeEvents();
- if (!endOfGameReached()) {
- startNewAge();
- }
- } else {
- rotateHandsIfRelevant();
- startNewTurn();
- }
- return table;
- }
-
- private void rotateHandsIfRelevant() {
- // we don't rotate hands if some player can play his last card (with the special ability)
- if (!hands.maxOneCardRemains()) {
- hands.rotate(table.getHandRotationDirection());
- }
- }
-
- private void makeMoves() {
- List<Move> playedMoves = mapToList(preparedMoves);
-
- // all cards from this turn need to be placed before executing any effect
- // because effects depending on played cards need to take the ones from the current turn into account too
- placePreparedCards(playedMoves);
-
- // same goes for the discarded cards during the last turn, which should be available for special actions
- if (hands.maxOneCardRemains()) {
- discardLastCardsOfHands();
- }
-
- activatePlayedCards(playedMoves);
-
- table.setLastPlayedMoves(playedMoves);
- preparedMoves.clear();
- }
-
- private static List<Move> mapToList(Map<Integer, Move> movesPerPlayer) {
- List<Move> moves = new ArrayList<>(movesPerPlayer.size());
- for (int p = 0; p < movesPerPlayer.size(); p++) {
- Move move = movesPerPlayer.get(p);
- if (move == null) {
- throw new MissingPreparedMoveException(p);
- }
- moves.add(move);
- }
- return moves;
- }
-
- private void placePreparedCards(List<Move> playedMoves) {
- playedMoves.forEach(move -> {
- move.place(table, discardedCards, settings);
- removeFromHand(move.getPlayerIndex(), move.getCard());
- });
- }
-
- private void discardLastCardsOfHands() {
- for (int i = 0; i < nbPlayers; i++) {
- Board board = table.getBoard(i);
- if (!board.hasSpecial(SpecialAbility.PLAY_LAST_CARD)) {
- discardHand(i);
- }
- }
- }
-
- private void discardHand(int playerIndex) {
- List<Card> hand = hands.get(playerIndex);
- discardedCards.addAll(hand);
- hand.clear();
- }
-
- private void removeFromHand(int playerIndex, Card card) {
- hands.get(playerIndex).remove(card);
- }
-
- private void activatePlayedCards(List<Move> playedMoves) {
- playedMoves.forEach(move -> move.activate(table, discardedCards, settings));
- }
-
- private boolean endOfAgeReached() {
- return hands.isEmpty();
- }
-
- private void executeEndOfAgeEvents() {
- table.resolveMilitaryConflicts();
- }
-
- private boolean endOfGameReached() {
- return endOfAgeReached() && table.getCurrentAge() == LAST_AGE;
- }
-
- public ScoreBoard computeScore() {
- ScoreBoard scoreBoard = new ScoreBoard();
- table.getBoards().stream().map(b -> b.computePoints(table)).forEach(scoreBoard::add);
- return scoreBoard;
- }
-
- private static class MissingPreparedMoveException extends IllegalStateException {
- MissingPreparedMoveException(int playerIndex) {
- super("Player " + playerIndex + " is not ready to play");
- }
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/Settings.java b/backend/src/main/java/org/luxons/sevenwonders/game/Settings.java
deleted file mode 100644
index f05b0b01..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/Settings.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import java.util.Map;
-import java.util.Random;
-
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.data.definitions.WonderSide;
-import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod;
-
-public class Settings {
-
- private final Random random;
-
- private final int timeLimitInSeconds;
-
- private final int nbPlayers;
-
- private final int initialGold;
-
- private final int discardedCardGold;
-
- private final int defaultTradingCost;
-
- private final int pointsPer3Gold;
-
- private final WonderSidePickMethod wonderSidePickMethod;
-
- private WonderSide lastPickedSide = null;
-
- private final int lostPointsPerDefeat;
-
- private final Map<Integer, Integer> wonPointsPerVictoryPerAge;
-
- public Settings(int nbPlayers) {
- this(nbPlayers, new CustomizableSettings());
- }
-
- public Settings(int nbPlayers, CustomizableSettings customSettings) {
- long seed = customSettings.getRandomSeedForTests();
- this.random = seed > 0 ? new Random(seed) : new Random();
- this.timeLimitInSeconds = customSettings.getTimeLimitInSeconds();
- this.nbPlayers = nbPlayers;
- this.initialGold = customSettings.getInitialGold();
- this.discardedCardGold = customSettings.getDiscardedCardGold();
- this.defaultTradingCost = customSettings.getDefaultTradingCost();
- this.pointsPer3Gold = customSettings.getPointsPer3Gold();
- this.wonderSidePickMethod = customSettings.getWonderSidePickMethod();
- this.lostPointsPerDefeat = customSettings.getLostPointsPerDefeat();
- this.wonPointsPerVictoryPerAge = customSettings.getWonPointsPerVictoryPerAge();
- }
-
- public Random getRandom() {
- return random;
- }
-
- public int getTimeLimitInSeconds() {
- return timeLimitInSeconds;
- }
-
- public int getNbPlayers() {
- return nbPlayers;
- }
-
- public int getInitialGold() {
- return initialGold;
- }
-
- public int getDiscardedCardGold() {
- return discardedCardGold;
- }
-
- public int getDefaultTradingCost() {
- return defaultTradingCost;
- }
-
- public int getPointsPer3Gold() {
- return pointsPer3Gold;
- }
-
- public WonderSide pickWonderSide() {
- WonderSide newSide = wonderSidePickMethod.pickSide(getRandom(), lastPickedSide);
- lastPickedSide = newSide;
- return newSide;
- }
-
- public int getLostPointsPerDefeat() {
- return lostPointsPerDefeat;
- }
-
- public Map<Integer, Integer> getWonPointsPerVictoryPerAge() {
- return wonPointsPerVictoryPerAge;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/Action.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/Action.java
deleted file mode 100644
index 88e392f9..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/api/Action.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-public enum Action {
- PLAY("Pick the card you want to play or discard."),
- PLAY_2("Pick the first card you want to play or discard. Note that you have the ability to play these 2 last cards."
- + " You will choose how to play the last one during your next turn."),
- PLAY_LAST("You have the special ability to play your last card. Choose how you want to play it."),
- PICK_NEIGHBOR_GUILD("Choose a Guild card (purple) that you want to copy from one of your neighbours."),
- WAIT("Please wait for other players to perform extra actions.");
-
- private final String message;
-
- Action(String message) {
- this.message = message;
- }
-
- public String getMessage() {
- return message;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java
deleted file mode 100644
index 2cbf8727..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/api/CustomizableSettings.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod;
-
-public class CustomizableSettings {
-
- private long randomSeedForTests = -1;
-
- private int timeLimitInSeconds = 45;
-
- private WonderSidePickMethod wonderSidePickMethod = WonderSidePickMethod.EACH_RANDOM;
-
- private int initialGold = 3;
-
- private int discardedCardGold = 3;
-
- private int defaultTradingCost = 2;
-
- private int pointsPer3Gold = 1;
-
- private int lostPointsPerDefeat = 1;
-
- private Map<Integer, Integer> wonPointsPerVictoryPerAge = new HashMap<>();
-
- public CustomizableSettings() {
- wonPointsPerVictoryPerAge.put(1, 1);
- wonPointsPerVictoryPerAge.put(2, 3);
- wonPointsPerVictoryPerAge.put(3, 5);
- }
-
- public long getRandomSeedForTests() {
- return randomSeedForTests;
- }
-
- public void setRandomSeedForTests(long randomSeedForTests) {
- this.randomSeedForTests = randomSeedForTests;
- }
-
- public int getTimeLimitInSeconds() {
- return timeLimitInSeconds;
- }
-
- public void setTimeLimitInSeconds(int timeLimitInSeconds) {
- this.timeLimitInSeconds = timeLimitInSeconds;
- }
-
- public int getInitialGold() {
- return initialGold;
- }
-
- public void setInitialGold(int initialGold) {
- this.initialGold = initialGold;
- }
-
- public int getDiscardedCardGold() {
- return discardedCardGold;
- }
-
- public void setDiscardedCardGold(int discardedCardGold) {
- this.discardedCardGold = discardedCardGold;
- }
-
- public int getDefaultTradingCost() {
- return defaultTradingCost;
- }
-
- public void setDefaultTradingCost(int defaultTradingCost) {
- this.defaultTradingCost = defaultTradingCost;
- }
-
- public int getPointsPer3Gold() {
- return pointsPer3Gold;
- }
-
- public void setPointsPer3Gold(int pointsPer3Gold) {
- this.pointsPer3Gold = pointsPer3Gold;
- }
-
- public WonderSidePickMethod getWonderSidePickMethod() {
- return wonderSidePickMethod;
- }
-
- public void setWonderSidePickMethod(WonderSidePickMethod wonderSidePickMethod) {
- this.wonderSidePickMethod = wonderSidePickMethod;
- }
-
- public int getLostPointsPerDefeat() {
- return lostPointsPerDefeat;
- }
-
- public void setLostPointsPerDefeat(int lostPointsPerDefeat) {
- this.lostPointsPerDefeat = lostPointsPerDefeat;
- }
-
- public Map<Integer, Integer> getWonPointsPerVictoryPerAge() {
- return wonPointsPerVictoryPerAge;
- }
-
- public void setWonPointsPerVictoryPerAge(Map<Integer, Integer> wonPointsPerVictoryPerAge) {
- this.wonPointsPerVictoryPerAge = wonPointsPerVictoryPerAge;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- CustomizableSettings that = (CustomizableSettings) o;
- return randomSeedForTests == that.randomSeedForTests && timeLimitInSeconds == that.timeLimitInSeconds
- && initialGold == that.initialGold && discardedCardGold == that.discardedCardGold
- && defaultTradingCost == that.defaultTradingCost && pointsPer3Gold == that.pointsPer3Gold
- && lostPointsPerDefeat == that.lostPointsPerDefeat && wonderSidePickMethod == that.wonderSidePickMethod
- && Objects.equals(wonPointsPerVictoryPerAge, that.wonPointsPerVictoryPerAge);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(randomSeedForTests, timeLimitInSeconds, wonderSidePickMethod, initialGold,
- discardedCardGold, defaultTradingCost, pointsPer3Gold, lostPointsPerDefeat, wonPointsPerVictoryPerAge);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java
deleted file mode 100644
index a97679c2..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/api/HandCard.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-/**
- * A card with contextual information relative to the hand it is sitting in. The extra information is especially useful
- * because it frees the client from a painful business logic implementation.
- */
-public class HandCard {
-
- private final Card card;
-
- private final boolean chainable;
-
- private final boolean free;
-
- private final boolean playable;
-
- public HandCard(Card card, Table table, int playerIndex) {
- Board board = table.getBoard(playerIndex);
- this.card = card;
- this.chainable = card.isChainableOn(board);
- this.free = card.isFreeFor(board);
- this.playable = card.isPlayable(table, playerIndex);
- }
-
- public Card getCard() {
- return card;
- }
-
- public boolean isChainable() {
- return chainable;
- }
-
- public boolean isFree() {
- return free;
- }
-
- public boolean isPlayable() {
- return playable;
- }
-
- @Override
- public String toString() {
- return "HandCard{" + "card=" + card + ", chainable=" + chainable + ", free=" + free + ", playable=" + playable
- + '}';
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java
deleted file mode 100644
index 179656cb..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerMove.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.ArrayList;
-import java.util.List;
-import javax.validation.constraints.NotNull;
-
-import org.luxons.sevenwonders.game.moves.MoveType;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-
-public class PlayerMove {
-
- @NotNull
- private MoveType type;
-
- @NotNull
- private String cardName;
-
- private List<BoughtResources> boughtResources = new ArrayList<>();
-
- public MoveType getType() {
- return type;
- }
-
- public void setType(MoveType type) {
- this.type = type;
- }
-
- public String getCardName() {
- return cardName;
- }
-
- public void setCardName(String cardName) {
- this.cardName = cardName;
- }
-
- public List<BoughtResources> getBoughtResources() {
- return boughtResources;
- }
-
- public void setBoughtResources(List<BoughtResources> boughtResources) {
- this.boughtResources = boughtResources;
- }
-
- @Override
- public String toString() {
- return type + " '" + cardName + '\'';
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java
deleted file mode 100644
index 3d92d40b..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/api/PlayerTurnInfo.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class PlayerTurnInfo {
-
- private final int playerIndex;
-
- private final Table table;
-
- private final int currentAge;
-
- private Action action;
-
- private List<HandCard> hand;
-
- private List<Card> neighbourGuildCards;
-
- private String message;
-
- public PlayerTurnInfo(int playerIndex, Table table) {
- this.playerIndex = playerIndex;
- this.table = table;
- this.currentAge = table.getCurrentAge();
- }
-
- public int getPlayerIndex() {
- return playerIndex;
- }
-
- public Table getTable() {
- return table;
- }
-
- public int getCurrentAge() {
- return currentAge;
- }
-
- public List<HandCard> getHand() {
- return hand;
- }
-
- public void setHand(List<HandCard> hand) {
- this.hand = hand;
- }
-
- public List<Card> getNeighbourGuildCards() {
- return neighbourGuildCards;
- }
-
- public void setNeighbourGuildCards(List<Card> neighbourGuildCards) {
- this.neighbourGuildCards = neighbourGuildCards;
- }
-
- public Action getAction() {
- return action;
- }
-
- public void setAction(Action action) {
- this.action = action;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- @Override
- public String toString() {
- return "PlayerTurnInfo{" + "playerIndex=" + playerIndex + ", action=" + action + ", hand=" + hand + '}';
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/api/Table.java b/backend/src/main/java/org/luxons/sevenwonders/game/api/Table.java
deleted file mode 100644
index 82f9055a..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/api/Table.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.cards.HandRotationDirection;
-import org.luxons.sevenwonders.game.moves.Move;
-import org.luxons.sevenwonders.game.resources.Provider;
-
-/**
- * The table contains what is visible by all the players in the game: the boards and their played cards, and the
- * players' information.
- */
-public class Table {
-
- private final int nbPlayers;
-
- private final List<Board> boards;
-
- private int currentAge = 0;
-
- private List<Move> lastPlayedMoves;
-
- public Table(List<Board> boards) {
- this.nbPlayers = boards.size();
- this.boards = boards;
- }
-
- public int getNbPlayers() {
- return nbPlayers;
- }
-
- public List<Board> getBoards() {
- return boards;
- }
-
- public Board getBoard(int playerIndex) {
- return boards.get(playerIndex);
- }
-
- public Board getBoard(int playerIndex, RelativeBoardPosition position) {
- return boards.get(position.getIndexFrom(playerIndex, nbPlayers));
- }
-
- public List<Move> getLastPlayedMoves() {
- return lastPlayedMoves;
- }
-
- public void setLastPlayedMoves(List<Move> lastPlayedMoves) {
- this.lastPlayedMoves = lastPlayedMoves;
- }
-
- public int getCurrentAge() {
- return currentAge;
- }
-
- public void increaseCurrentAge() {
- this.currentAge++;
- }
-
- public HandRotationDirection getHandRotationDirection() {
- return HandRotationDirection.forAge(currentAge);
- }
-
- public void resolveMilitaryConflicts() {
- for (int i = 0; i < nbPlayers; i++) {
- Board board1 = getBoard(i);
- Board board2 = getBoard((i + 1) % nbPlayers);
- resolveConflict(board1, board2, currentAge);
- }
- }
-
- private static void resolveConflict(Board board1, Board board2, int age) {
- int shields1 = board1.getMilitary().getNbShields();
- int shields2 = board2.getMilitary().getNbShields();
- if (shields1 < shields2) {
- board2.getMilitary().victory(age);
- board1.getMilitary().defeat();
- } else if (shields1 > shields2) {
- board1.getMilitary().victory(age);
- board2.getMilitary().defeat();
- }
- }
-
- public List<Card> getNeighbourGuildCards(int playerIndex) {
- return getNeighbourBoards(playerIndex).stream()
- .map(Board::getPlayedCards)
- .flatMap(List::stream)
- .filter(c -> c.getColor() == Color.PURPLE)
- .collect(Collectors.toList());
- }
-
- private List<Board> getNeighbourBoards(int playerIndex) {
- Provider[] providers = Provider.values();
- List<Board> boards = new ArrayList<>(providers.length);
- for (Provider provider : providers) {
- boards.add(getBoard(playerIndex, provider.getBoardPosition()));
- }
- return boards;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Board.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/Board.java
deleted file mode 100644
index a59bbfae..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Board.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.TradingRules;
-import org.luxons.sevenwonders.game.scoring.PlayerScore;
-import org.luxons.sevenwonders.game.scoring.ScoreCategory;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-public class Board {
-
- private final Wonder wonder;
-
- private final int playerIndex;
-
- private final List<Card> playedCards = new ArrayList<>();
-
- private final Production production = new Production();
-
- private final Production publicProduction = new Production();
-
- private final Science science = new Science();
-
- private final TradingRules tradingRules;
-
- private final Military military;
-
- private final Set<SpecialAbility> specialAbilities = EnumSet.noneOf(SpecialAbility.class);
-
- private Map<Integer, Boolean> consumedFreeCards = new HashMap<>();
-
- private Card copiedGuild;
-
- private int gold;
-
- private int pointsPer3Gold;
-
- public Board(Wonder wonder, int playerIndex, Settings settings) {
- this.wonder = wonder;
- this.playerIndex = playerIndex;
- this.gold = settings.getInitialGold();
- this.tradingRules = new TradingRules(settings.getDefaultTradingCost());
- this.military = new Military(settings.getLostPointsPerDefeat(), settings.getWonPointsPerVictoryPerAge());
- this.pointsPer3Gold = settings.getPointsPer3Gold();
- this.production.addFixedResource(wonder.getInitialResource(), 1);
- this.publicProduction.addFixedResource(wonder.getInitialResource(), 1);
- }
-
- public Wonder getWonder() {
- return wonder;
- }
-
- public List<Card> getPlayedCards() {
- return playedCards;
- }
-
- public void addCard(Card card) {
- playedCards.add(card);
- }
-
- int getNbCardsOfColor(List<Color> colorFilter) {
- return (int) playedCards.stream().filter(c -> colorFilter.contains(c.getColor())).count();
- }
-
- public boolean isPlayed(String cardName) {
- return getPlayedCards().stream().map(Card::getName).filter(name -> name.equals(cardName)).count() > 0;
- }
-
- public Production getProduction() {
- return production;
- }
-
- public Production getPublicProduction() {
- return publicProduction;
- }
-
- public TradingRules getTradingRules() {
- return tradingRules;
- }
-
- public Science getScience() {
- return science;
- }
-
- public int getGold() {
- return gold;
- }
-
- public void setGold(int amount) {
- this.gold = amount;
- }
-
- public void addGold(int amount) {
- this.gold += amount;
- }
-
- public void removeGold(int amount) {
- if (gold < amount) {
- throw new InsufficientFundsException(gold, amount);
- }
- this.gold -= amount;
- }
-
- public Military getMilitary() {
- return military;
- }
-
- public void addSpecial(SpecialAbility specialAbility) {
- specialAbilities.add(specialAbility);
- }
-
- public boolean hasSpecial(SpecialAbility specialAbility) {
- return specialAbilities.contains(specialAbility);
- }
-
- public boolean canPlayFreeCard(int age) {
- return hasSpecial(SpecialAbility.ONE_FREE_PER_AGE) && !consumedFreeCards.getOrDefault(age, false);
- }
-
- public void consumeFreeCard(int age) {
- consumedFreeCards.put(age, true);
- }
-
- public void setCopiedGuild(Card copiedGuild) {
- if (copiedGuild.getColor() != Color.PURPLE) {
- throw new IllegalArgumentException("The given card '" + copiedGuild + "' is not a Guild card");
- }
- this.copiedGuild = copiedGuild;
- }
-
- public Card getCopiedGuild() {
- return copiedGuild;
- }
-
- public PlayerScore computePoints(Table table) {
- PlayerScore score = new PlayerScore(gold);
- score.put(ScoreCategory.CIVIL, computePointsForCards(table, Color.BLUE));
- score.put(ScoreCategory.MILITARY, military.getTotalPoints());
- score.put(ScoreCategory.SCIENCE, science.computePoints());
- score.put(ScoreCategory.TRADE, computePointsForCards(table, Color.YELLOW));
- score.put(ScoreCategory.GUILD, computePointsForCards(table, Color.PURPLE));
- score.put(ScoreCategory.WONDER, wonder.computePoints(table, playerIndex));
- score.put(ScoreCategory.GOLD, computeGoldPoints());
- return score;
- }
-
- private int computePointsForCards(Table table, Color color) {
- return playedCards.stream()
- .filter(c -> c.getColor() == color)
- .flatMap(c -> c.getEffects().stream())
- .mapToInt(e -> e.computePoints(table, playerIndex))
- .sum();
- }
-
- private int computeGoldPoints() {
- return gold / 3 * pointsPer3Gold;
- }
-
- static class InsufficientFundsException extends RuntimeException {
- InsufficientFundsException(int current, int required) {
- super(String.format("Current balance is %d gold, but %d are required", current, required));
- }
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java
deleted file mode 100644
index e50f4ea0..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/BoardElementType.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.cards.Color;
-
-public enum BoardElementType {
- CARD {
- @Override
- public int getElementCount(Board board, List<Color> colors) {
- return board.getNbCardsOfColor(colors);
- }
- },
- BUILT_WONDER_STAGES {
- @Override
- public int getElementCount(Board board, List<Color> colors) {
- return board.getWonder().getNbBuiltStages();
- }
- },
- DEFEAT_TOKEN {
- @Override
- public int getElementCount(Board board, List<Color> colors) {
- return board.getMilitary().getNbDefeatTokens();
- }
- };
-
- public abstract int getElementCount(Board board, List<Color> colors);
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Military.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/Military.java
deleted file mode 100644
index e5cc7033..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Military.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.Map;
-
-public class Military {
-
- private final int lostPointsPerDefeat;
-
- private final Map<Integer, Integer> wonPointsPerVictoryPerAge;
-
- private int nbShields = 0;
-
- private int totalPoints = 0;
-
- private int nbDefeatTokens = 0;
-
- Military(int lostPointsPerDefeat, Map<Integer, Integer> wonPointsPerVictoryPerAge) {
- this.lostPointsPerDefeat = lostPointsPerDefeat;
- this.wonPointsPerVictoryPerAge = wonPointsPerVictoryPerAge;
- }
-
- public int getNbShields() {
- return nbShields;
- }
-
- public void addShields(int nbShields) {
- this.nbShields += nbShields;
- }
-
- public int getTotalPoints() {
- return totalPoints;
- }
-
- public int getNbDefeatTokens() {
- return nbDefeatTokens;
- }
-
- public void victory(int age) {
- Integer wonPoints = wonPointsPerVictoryPerAge.get(age);
- if (wonPoints == null) {
- throw new UnknownAgeException(age);
- }
- totalPoints += wonPoints;
- }
-
- public void defeat() {
- totalPoints -= lostPointsPerDefeat;
- nbDefeatTokens++;
- }
-
- static final class UnknownAgeException extends IllegalArgumentException {
- UnknownAgeException(int unknownAge) {
- super(String.valueOf(unknownAge));
- }
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java
deleted file mode 100644
index 16b2f3a9..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/RelativeBoardPosition.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-public enum RelativeBoardPosition {
- LEFT {
- @Override
- public int getIndexFrom(int playerIndex, int nbPlayers) {
- return wrapIndex(playerIndex - 1, nbPlayers);
- }
- },
- SELF {
- @Override
- public int getIndexFrom(int playerIndex, int nbPlayers) {
- return playerIndex;
- }
- },
- RIGHT {
- @Override
- public int getIndexFrom(int playerIndex, int nbPlayers) {
- return wrapIndex(playerIndex + 1, nbPlayers);
- }
- };
-
- public abstract int getIndexFrom(int playerIndex, int nbPlayers);
-
- int wrapIndex(int index, int nbPlayers) {
- return Math.floorMod(index, nbPlayers);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Science.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/Science.java
deleted file mode 100644
index 34928bcc..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/Science.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.Map;
-
-public class Science {
-
- private Map<ScienceType, Integer> quantities = new EnumMap<>(ScienceType.class);
-
- private int jokers;
-
- public void add(ScienceType type, int quantity) {
- quantities.merge(type, quantity, (x, y) -> x + y);
- }
-
- public void addJoker(int quantity) {
- jokers += quantity;
- }
-
- public int getJokers() {
- return jokers;
- }
-
- public void addAll(Science science) {
- science.quantities.forEach(this::add);
- jokers += science.jokers;
- }
-
- public int getQuantity(ScienceType type) {
- return quantities.getOrDefault(type, 0);
- }
-
- public int size() {
- return quantities.values().stream().mapToInt(q -> q).sum() + jokers;
- }
-
- public int computePoints() {
- ScienceType[] types = ScienceType.values();
- Integer[] values = new Integer[types.length];
- for (int i = 0; i < types.length; i++) {
- values[i] = quantities.getOrDefault(types[i], 0);
- }
- return computePoints(values, jokers);
- }
-
- private static int computePoints(Integer[] values, int jokers) {
- if (jokers == 0) {
- return computePointsNoJoker(values);
- }
- int maxPoints = 0;
- for (int i = 0; i < values.length; i++) {
- values[i]++;
- maxPoints = Math.max(maxPoints, computePoints(values, jokers - 1));
- values[i]--;
- }
- return maxPoints;
- }
-
- private static int computePointsNoJoker(Integer[] values) {
- int independentSquaresSum = Arrays.stream(values).mapToInt(i -> i * i).sum();
- int nbGroupsOfAll = Arrays.stream(values).mapToInt(i -> i).min().orElse(0);
- return independentSquaresSum + nbGroupsOfAll * 7;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java b/backend/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java
deleted file mode 100644
index f1b14c6d..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/boards/ScienceType.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-public enum ScienceType {
- COMPASS,
- WHEEL,
- TABLET
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Card.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Card.java
deleted file mode 100644
index 084d19a5..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Card.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.List;
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-
-public class Card {
-
- private final String name;
-
- private final Color color;
-
- private final Requirements requirements;
-
- private final List<Effect> effects;
-
- private final String chainParent;
-
- private final List<String> chainChildren;
-
- private final String image;
-
- private CardBack back;
-
- public Card(String name, Color color, Requirements requirements, List<Effect> effects, String chainParent,
- List<String> chainChildren, String image) {
- this.name = name;
- this.color = color;
- this.requirements = requirements;
- this.chainParent = chainParent;
- this.effects = effects;
- this.chainChildren = chainChildren;
- this.image = image;
- }
-
- public String getName() {
- return name;
- }
-
- public Color getColor() {
- return color;
- }
-
- public String getChainParent() {
- return chainParent;
- }
-
- public Requirements getRequirements() {
- return requirements;
- }
-
- public List<Effect> getEffects() {
- return effects;
- }
-
- public List<String> getChainChildren() {
- return chainChildren;
- }
-
- public String getImage() {
- return image;
- }
-
- public CardBack getBack() {
- return back;
- }
-
- public void setBack(CardBack back) {
- this.back = back;
- }
-
- private boolean isAllowedOnBoard(Board board) {
- return !board.isPlayed(name); // cannot play twice the same card
- }
-
- public boolean isChainableOn(Board board) {
- return isAllowedOnBoard(board) && board.isPlayed(chainParent);
- }
-
- public boolean isFreeFor(Board board) {
- if (!isAllowedOnBoard(board)) {
- return false;
- }
- return isChainableOn(board) || (requirements.areMetWithoutNeighboursBy(board) && requirements.getGold() == 0);
- }
-
- public boolean isPlayable(Table table, int playerIndex) {
- Board board = table.getBoard(playerIndex);
- if (!isAllowedOnBoard(board)) {
- return false;
- }
- return isChainableOn(board) || requirements.couldBeMetBy(table, playerIndex);
- }
-
- public void applyTo(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- Board playerBoard = table.getBoard(playerIndex);
- if (!isChainableOn(playerBoard)) {
- requirements.pay(table, playerIndex, boughtResources);
- }
- effects.forEach(e -> e.apply(table, playerIndex));
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- Card card = (Card) o;
- return Objects.equals(name, card.name);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(name);
- }
-
- @Override
- public String toString() {
- return "Card{" + name + '}';
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java
deleted file mode 100644
index f925b6c4..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/CardBack.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-public class CardBack {
-
- private final String image;
-
- public CardBack(String image) {
- this.image = image;
- }
-
- public String getImage() {
- return image;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Color.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Color.java
deleted file mode 100644
index 80d06c55..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Color.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-public enum Color {
- BROWN,
- GREY,
- YELLOW,
- BLUE,
- GREEN,
- RED,
- PURPLE
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java
deleted file mode 100644
index aa2b00bf..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Decks.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-public class Decks {
-
- private Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
-
- public Decks(Map<Integer, List<Card>> cardsPerAge) {
- this.cardsPerAge = cardsPerAge;
- }
-
- public Card getCard(String cardName) throws CardNotFoundException {
- return cardsPerAge.values()
- .stream()
- .flatMap(List::stream)
- .filter(c -> c.getName().equals(cardName))
- .findAny()
- .orElseThrow(() -> new CardNotFoundException(cardName));
- }
-
- public Hands deal(int age, int nbPlayers) {
- List<Card> deck = getDeck(age);
- validateNbCards(deck, nbPlayers);
- return deal(deck, nbPlayers);
- }
-
- private List<Card> getDeck(int age) {
- List<Card> deck = cardsPerAge.get(age);
- if (deck == null) {
- throw new IllegalArgumentException("No deck found for age " + age);
- }
- return deck;
- }
-
- private void validateNbCards(List<Card> deck, int nbPlayers) {
- if (nbPlayers == 0) {
- throw new IllegalArgumentException("Cannot deal cards between 0 players");
- }
- if (deck.size() % nbPlayers != 0) {
- throw new IllegalArgumentException(
- String.format("Cannot deal %d cards evenly between %d players", deck.size(), nbPlayers));
- }
- }
-
- private Hands deal(List<Card> deck, int nbPlayers) {
- Map<Integer, List<Card>> hands = new HashMap<>(nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- hands.put(i, new ArrayList<>());
- }
- for (int i = 0; i < deck.size(); i++) {
- hands.get(i % nbPlayers).add(deck.get(i));
- }
- return new Hands(hands, nbPlayers);
- }
-
- class CardNotFoundException extends RuntimeException {
- CardNotFoundException(String message) {
- super(message);
- }
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java
deleted file mode 100644
index f3902fb5..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/HandRotationDirection.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-public enum HandRotationDirection {
- LEFT(-1),
- RIGHT(1);
-
- private final int indexOffset;
-
- HandRotationDirection(int i) {
- this.indexOffset = i;
- }
-
- public int getIndexOffset() {
- return indexOffset;
- }
-
- public static HandRotationDirection forAge(int age) {
- // clockwise (pass to the left) at age 1, and alternating
- return age % 2 == 0 ? HandRotationDirection.RIGHT : HandRotationDirection.LEFT;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java
deleted file mode 100644
index 4a8bc143..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Hands.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.api.HandCard;
-import org.luxons.sevenwonders.game.api.Table;
-
-public class Hands {
-
- private final int nbPlayers;
-
- private Map<Integer, List<Card>> hands;
-
- Hands(Map<Integer, List<Card>> hands, int nbPlayers) {
- this.hands = hands;
- this.nbPlayers = nbPlayers;
- }
-
- public List<Card> get(int playerIndex) {
- if (!hands.containsKey(playerIndex)) {
- throw new PlayerIndexOutOfBoundsException(playerIndex);
- }
- return hands.get(playerIndex);
- }
-
- public List<HandCard> createHand(Table table, int playerIndex) {
- return hands.get(playerIndex)
- .stream()
- .map(c -> new HandCard(c, table, playerIndex))
- .collect(Collectors.toList());
- }
-
- public Hands rotate(HandRotationDirection direction) {
- Map<Integer, List<Card>> newHands = new HashMap<>(hands.size());
- for (int i = 0; i < nbPlayers; i++) {
- int newIndex = Math.floorMod(i + direction.getIndexOffset(), nbPlayers);
- newHands.put(newIndex, hands.get(i));
- }
- return new Hands(newHands, nbPlayers);
- }
-
- public boolean isEmpty() {
- return hands.values().stream().allMatch(List::isEmpty);
- }
-
- public boolean maxOneCardRemains() {
- return hands.values().stream().mapToInt(List::size).max().orElse(0) <= 1;
- }
-
- public List<Card> gatherAndClear() {
- List<Card> remainingCards = hands.values().stream().flatMap(List::stream).collect(Collectors.toList());
- hands.clear();
- return remainingCards;
- }
-
- class PlayerIndexOutOfBoundsException extends ArrayIndexOutOfBoundsException {
- PlayerIndexOutOfBoundsException(int index) {
- super(index);
- }
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java
deleted file mode 100644
index 93683ff8..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.resources.BestPriceCalculator;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-public class Requirements {
-
- private int gold;
-
- private Resources resources = new Resources();
-
- public int getGold() {
- return gold;
- }
-
- public void setGold(int gold) {
- this.gold = gold;
- }
-
- public Resources getResources() {
- return resources;
- }
-
- public void setResources(Resources resources) {
- this.resources = resources;
- }
-
- /**
- * Returns whether the given board meets these requirements on its own.
- *
- * @param board
- * the board to check
- *
- * @return true if the given board meets these requirements without any transaction with its neighbours
- */
- boolean areMetWithoutNeighboursBy(Board board) {
- return hasRequiredGold(board) && producesRequiredResources(board);
- }
-
- /**
- * Returns whether the given board meets these requirements, if the specified resources are bought from neighbours.
- *
- * @param board
- * the board to check
- * @param boughtResources
- * the resources the player intends to buy
- *
- * @return true if the given board meets these requirements
- */
- public boolean areMetWithHelpBy(Board board, List<BoughtResources> boughtResources) {
- if (!hasRequiredGold(board, boughtResources)) {
- return false;
- }
- if (producesRequiredResources(board)) {
- return true;
- }
- return producesRequiredResourcesWithHelp(board, boughtResources);
- }
-
- /**
- * Returns whether the given player's board could meet these requirements, on its own or by buying resources to
- * neighbours.
- *
- * @param table
- * the current game table
- * @param playerIndex
- * the index of the player to check
- *
- * @return true if the given player's board could meet these requirements
- */
- boolean couldBeMetBy(Table table, int playerIndex) {
- Board board = table.getBoard(playerIndex);
- if (!hasRequiredGold(board)) {
- return false;
- }
- if (producesRequiredResources(board)) {
- return true;
- }
- return BestPriceCalculator.bestPrice(resources, table, playerIndex) <= board.getGold() - gold;
- }
-
- private boolean hasRequiredGold(Board board) {
- return board.getGold() >= gold;
- }
-
- private boolean hasRequiredGold(Board board, List<BoughtResources> boughtResources) {
- int resourcesPrice = board.getTradingRules().computeCost(boughtResources);
- return board.getGold() >= gold + resourcesPrice;
- }
-
- private boolean producesRequiredResources(Board board) {
- return board.getProduction().contains(resources);
- }
-
- private boolean producesRequiredResourcesWithHelp(Board board, List<BoughtResources> boughtResources) {
- Resources totalBoughtResources = getTotalResources(boughtResources);
- Resources remainingResources = this.resources.minus(totalBoughtResources);
- return board.getProduction().contains(remainingResources);
- }
-
- private static Resources getTotalResources(List<BoughtResources> boughtResources) {
- return boughtResources.stream().map(BoughtResources::getResources).reduce(new Resources(), (r1, r2) -> {
- r1.addAll(r2);
- return r1;
- });
- }
-
- void pay(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- table.getBoard(playerIndex).removeGold(gold);
- payBoughtResources(table, playerIndex, boughtResources);
- }
-
- private void payBoughtResources(Table table, int playerIndex, List<BoughtResources> boughtResourcesList) {
- boughtResourcesList.forEach(res -> payBoughtResources(table, playerIndex, res));
- }
-
- private void payBoughtResources(Table table, int playerIndex, BoughtResources boughtResources) {
- Board board = table.getBoard(playerIndex);
- int price = board.getTradingRules().computeCost(boughtResources);
- board.removeGold(price);
- RelativeBoardPosition providerPosition = boughtResources.getProvider().getBoardPosition();
- Board providerBoard = table.getBoard(playerIndex, providerPosition);
- providerBoard.addGold(price);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java
deleted file mode 100644
index 7604ca6a..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinition.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Decks;
-import org.luxons.sevenwonders.game.data.definitions.DecksDefinition;
-import org.luxons.sevenwonders.game.data.definitions.WonderDefinition;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-public class GameDefinition {
-
- /**
- * This value is heavily dependent on the JSON data. Any change must be carefully thought through.
- */
- private static final int MIN_PLAYERS = 3;
-
- /**
- * This value is heavily dependent on the JSON data. Any change must be carefully thought through.
- */
- private static final int MAX_PLAYERS = 7;
-
- private WonderDefinition[] wonders;
-
- private DecksDefinition decksDefinition;
-
- GameDefinition(WonderDefinition[] wonders, DecksDefinition decksDefinition) {
- this.wonders = wonders;
- this.decksDefinition = decksDefinition;
- }
-
- public int getMinPlayers() {
- return MIN_PLAYERS;
- }
-
- public int getMaxPlayers() {
- return MAX_PLAYERS;
- }
-
- public Game initGame(long id, CustomizableSettings customSettings, int nbPlayers) {
- Settings settings = new Settings(nbPlayers, customSettings);
- List<Board> boards = assignBoards(settings, nbPlayers);
- Decks decks = decksDefinition.create(settings);
- return new Game(id, settings, nbPlayers, boards, decks);
- }
-
- private List<Board> assignBoards(Settings settings, int nbPlayers) {
- List<WonderDefinition> randomizedWonders = Arrays.asList(wonders);
- Collections.shuffle(randomizedWonders, settings.getRandom());
-
- List<Board> boards = new ArrayList<>(nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- WonderDefinition def = randomizedWonders.get(i);
- Wonder w = def.create(settings);
- Board b = new Board(w, i, settings);
- boards.add(b);
- }
- return boards;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java
deleted file mode 100644
index f0da6d63..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/GameDefinitionLoader.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.lang.reflect.Type;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.data.definitions.DecksDefinition;
-import org.luxons.sevenwonders.game.data.definitions.WonderDefinition;
-import org.luxons.sevenwonders.game.data.serializers.NumericEffectSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ProductionIncreaseSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ProductionSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourceTypeSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourceTypesSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ResourcesSerializer;
-import org.luxons.sevenwonders.game.data.serializers.ScienceProgressSerializer;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.springframework.stereotype.Component;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-
-@Component
-public class GameDefinitionLoader {
-
- private static final String BASE_PACKAGE = GameDefinitionLoader.class.getPackage().getName();
-
- private static final String BASE_PACKAGE_PATH = '/' + BASE_PACKAGE.replace('.', '/');
-
- private static final String CARDS_FILE = "cards.json";
-
- private static final String WONDERS_FILE = "wonders.json";
-
- private final GameDefinition gameDefinition;
-
- public GameDefinitionLoader() {
- gameDefinition = load();
- }
-
- public GameDefinition getGameDefinition() {
- return gameDefinition;
- }
-
- private static GameDefinition load() {
- return new GameDefinition(loadWonders(), loadDecks());
- }
-
- private static WonderDefinition[] loadWonders() {
- return readJsonFile(WONDERS_FILE, WonderDefinition[].class);
- }
-
- private static DecksDefinition loadDecks() {
- return readJsonFile(CARDS_FILE, DecksDefinition.class);
- }
-
- private static <T> T readJsonFile(String filename, Class<T> clazz) {
- InputStream in = GameDefinitionLoader.class.getResourceAsStream(BASE_PACKAGE_PATH + '/' + filename);
- Reader reader = new BufferedReader(new InputStreamReader(in));
- Gson gson = createGson();
- return gson.fromJson(reader, clazz);
- }
-
- private static Gson createGson() {
- Type resourceTypeList = new TypeToken<List<ResourceType>>() {}.getType();
- return new GsonBuilder().disableHtmlEscaping()
- .registerTypeAdapter(Resources.class, new ResourcesSerializer())
- .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer())
- .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer())
- .registerTypeAdapter(Production.class, new ProductionSerializer())
- .registerTypeAdapter(ProductionIncrease.class, new ProductionIncreaseSerializer())
- .registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer())
- .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(ScienceProgress.class, new ScienceProgressSerializer())
- .create();
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java
deleted file mode 100644
index 621bed2c..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/CardDefinition.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.List;
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.cards.Requirements;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class CardDefinition implements Definition<Card> {
-
- private String name;
-
- private Color color;
-
- private Requirements requirements;
-
- private EffectsDefinition effect;
-
- private String chainParent;
-
- private List<String> chainChildren;
-
- private Map<Integer, Integer> countPerNbPlayer;
-
- private String image;
-
- @Override
- public Card create(Settings settings) {
- return new Card(name, color, requirements, effect.create(settings), chainParent, chainChildren, image);
- }
-
- Map<Integer, Integer> getCountPerNbPlayer() {
- return countPerNbPlayer;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java
deleted file mode 100644
index 6f97e55f..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/DecksDefinition.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Decks;
-
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson
-public class DecksDefinition implements Definition<Decks> {
-
- private List<CardDefinition> age1;
-
- private List<CardDefinition> age2;
-
- private List<CardDefinition> age3;
-
- private String age1Back;
-
- private String age2Back;
-
- private String age3Back;
-
- private List<CardDefinition> guildCards;
-
- @Override
- public Decks create(Settings settings) {
- Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
- cardsPerAge.put(1, prepareStandardDeck(age1, settings, age1Back));
- cardsPerAge.put(2, prepareStandardDeck(age2, settings, age2Back));
- cardsPerAge.put(3, prepareAge3Deck(settings));
- return new Decks(cardsPerAge);
- }
-
- private static List<Card> prepareStandardDeck(List<CardDefinition> defs, Settings settings, String backImage) {
- CardBack back = new CardBack(backImage);
- List<Card> cards = createDeck(defs, settings, back);
- Collections.shuffle(cards, settings.getRandom());
- return cards;
- }
-
- private List<Card> prepareAge3Deck(Settings settings) {
- CardBack back = new CardBack(age3Back);
- List<Card> age3deck = createDeck(age3, settings, back);
- age3deck.addAll(createGuildCards(settings, back));
- Collections.shuffle(age3deck, settings.getRandom());
- return age3deck;
- }
-
- private static List<Card> createDeck(List<CardDefinition> defs, Settings settings, CardBack back) {
- List<Card> cards = new ArrayList<>();
- for (CardDefinition def : defs) {
- for (int i = 0; i < def.getCountPerNbPlayer().get(settings.getNbPlayers()); i++) {
- Card card = def.create(settings);
- card.setBack(back);
- cards.add(card);
- }
- }
- return cards;
- }
-
- private List<Card> createGuildCards(Settings settings, CardBack back) {
- List<Card> guild = guildCards.stream()
- .map((def) -> def.create(settings))
- .peek(c -> c.setBack(back))
- .collect(Collectors.toList());
- Collections.shuffle(guild, settings.getRandom());
- return guild.subList(0, settings.getNbPlayers() + 2);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java
deleted file mode 100644
index 6c6b4b19..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/Definition.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import org.luxons.sevenwonders.game.Settings;
-
-/**
- * Represents a deserialized JSON definition of some data about the game. It is settings-agnostic. An instance of
- * in-game data can be generated from this, given specific game settings.
- *
- * @param <T>
- * the type of in-game object that can be generated from this definition
- */
-public interface Definition<T> {
-
- /**
- * Creates a T object from the given settings. This method mustn't mutate this Definition as it may be called
- * multiple times with different settings.
- *
- * @param settings
- * the game settings to use to generate a game-specific object from this definition
- *
- * @return the new game-specific object created from this definition
- */
- T create(Settings settings);
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java
deleted file mode 100644
index e35463d4..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/EffectsDefinition.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.effects.BonusPerBoardElement;
-import org.luxons.sevenwonders.game.effects.Discount;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.effects.SpecialAbilityActivation;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class EffectsDefinition implements Definition<List<Effect>> {
-
- private GoldIncrease gold;
-
- private MilitaryReinforcements military;
-
- private ScienceProgress science;
-
- private Discount discount;
-
- private BonusPerBoardElement perBoardElement;
-
- private ProductionIncrease production;
-
- private RawPointsIncrease points;
-
- private SpecialAbility action;
-
- @Override
- public List<Effect> create(Settings settings) {
- List<Effect> effects = new ArrayList<>();
- if (gold != null) {
- effects.add(gold);
- }
- if (military != null) {
- effects.add(military);
- }
- if (science != null) {
- effects.add(science);
- }
- if (discount != null) {
- effects.add(discount);
- }
- if (perBoardElement != null) {
- effects.add(perBoardElement);
- }
- if (production != null) {
- effects.add(production);
- }
- if (points != null) {
- effects.add(points);
- }
- if (action != null) {
- effects.add(new SpecialAbilityActivation(action));
- }
- return effects;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java
deleted file mode 100644
index a972a517..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Map;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection") // the fields are injected by Gson
-public class WonderDefinition implements Definition<Wonder> {
-
- private String name;
-
- private Map<WonderSide, WonderSideDefinition> sides;
-
- @Override
- public Wonder create(Settings settings) {
- Wonder wonder = new Wonder();
- wonder.setName(name);
-
- WonderSideDefinition wonderSideDef = sides.get(settings.pickWonderSide());
- wonder.setInitialResource(wonderSideDef.getInitialResource());
- wonder.setStages(wonderSideDef.createStages(settings));
- wonder.setImage(wonderSideDef.getImage());
- return wonder;
- }
-
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java
deleted file mode 100644
index 34091350..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSide.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-public enum WonderSide {
- A,
- B
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java
deleted file mode 100644
index c84bba4e..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSideDefinition.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-// the fields are injected by Gson
-@SuppressWarnings("unused,MismatchedQueryAndUpdateOfCollection")
-class WonderSideDefinition {
-
- private ResourceType initialResource;
-
- private List<WonderStageDefinition> stages;
-
- private String image;
-
- ResourceType getInitialResource() {
- return initialResource;
- }
-
- List<WonderStage> createStages(Settings settings) {
- return stages.stream().map(def -> def.create(settings)).collect(Collectors.toList());
- }
-
- String getImage() {
- return image;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java
deleted file mode 100644
index 08aaad14..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethod.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Random;
-
-public enum WonderSidePickMethod {
- ALL_A {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return WonderSide.A;
- }
- },
- ALL_B {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return WonderSide.B;
- }
- },
- EACH_RANDOM {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- return random.nextBoolean() ? WonderSide.A : WonderSide.B;
- }
- },
- SAME_RANDOM_FOR_ALL {
- @Override
- public WonderSide pickSide(Random random, WonderSide lastPickedSide) {
- if (lastPickedSide == null) {
- return random.nextBoolean() ? WonderSide.A : WonderSide.B;
- } else {
- return lastPickedSide;
- }
- }
- };
-
- public abstract WonderSide pickSide(Random random, WonderSide lastPickedSide);
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java
deleted file mode 100644
index 887b414a..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/definitions/WonderStageDefinition.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.cards.Requirements;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-@SuppressWarnings("unused") // the fields are injected by Gson
-public class WonderStageDefinition implements Definition<WonderStage> {
-
- private Requirements requirements;
-
- private EffectsDefinition effects;
-
- @Override
- public WonderStage create(Settings settings) {
- WonderStage stage = new WonderStage();
- stage.setRequirements(requirements);
- stage.setEffects(effects.create(settings));
- return stage;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
deleted file mode 100644
index c0a75d80..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class NumericEffectSerializer implements JsonSerializer<Effect>, JsonDeserializer<Effect> {
-
- @Override
- public JsonElement serialize(Effect effect, Type typeOfSrc, JsonSerializationContext context) {
- int value;
- if (MilitaryReinforcements.class.equals(typeOfSrc)) {
- value = ((MilitaryReinforcements) effect).getCount();
- } else if (GoldIncrease.class.equals(typeOfSrc)) {
- value = ((GoldIncrease) effect).getAmount();
- } else if (RawPointsIncrease.class.equals(typeOfSrc)) {
- value = ((RawPointsIncrease) effect).getPoints();
- } else {
- throw new IllegalArgumentException("Unknown numeric effect " + typeOfSrc.getTypeName());
- }
- return new JsonPrimitive(value);
- }
-
- @Override
- public Effect deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- int value = json.getAsInt();
- if (MilitaryReinforcements.class.equals(typeOfT)) {
- return new MilitaryReinforcements(value);
- } else if (GoldIncrease.class.equals(typeOfT)) {
- return new GoldIncrease(value);
- } else if (RawPointsIncrease.class.equals(typeOfT)) {
- return new RawPointsIncrease(value);
- }
- throw new IllegalArgumentException("Unknown numeric effet " + typeOfT.getTypeName());
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java
deleted file mode 100644
index c3eb1386..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializer.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.resources.Production;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ProductionIncreaseSerializer implements JsonSerializer<ProductionIncrease>,
- JsonDeserializer<ProductionIncrease> {
-
- @Override
- public JsonElement serialize(ProductionIncrease productionIncrease, Type typeOfSrc,
- JsonSerializationContext context) {
- Production production = productionIncrease.getProduction();
- JsonElement json = context.serialize(production);
- if (!json.isJsonNull() && !productionIncrease.isSellable()) {
- return new JsonPrimitive(wrapInBrackets(json.getAsString()));
- }
- return json;
- }
-
- private String wrapInBrackets(String str) {
- return '(' + str + ')';
- }
-
- @Override
- public ProductionIncrease deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- ProductionIncrease productionIncrease = new ProductionIncrease();
-
- String resourcesStr = json.getAsString();
- boolean isSellable = !resourcesStr.startsWith("(");
- if (!isSellable) {
- resourcesStr = unwrapBrackets(resourcesStr);
- json = new JsonPrimitive(resourcesStr);
- }
- productionIncrease.setSellable(isSellable);
-
- Production production = context.deserialize(json, Production.class);
- productionIncrease.setProduction(production);
- return productionIncrease;
- }
-
- private static String unwrapBrackets(String str) {
- return str.substring(1, str.length() - 1);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java
deleted file mode 100644
index 178134bb..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializer.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ProductionSerializer implements JsonSerializer<Production>, JsonDeserializer<Production> {
-
- @Override
- public JsonElement serialize(Production production, Type typeOfSrc, JsonSerializationContext context) {
- Resources fixedResources = production.getFixedResources();
- Set<Set<ResourceType>> choices = production.getAlternativeResources();
- if (fixedResources.isEmpty()) {
- return serializeAsChoice(choices, context);
- } else if (choices.isEmpty()) {
- return serializeAsResources(fixedResources, context);
- } else {
- throw new IllegalArgumentException("Cannot serialize a production with mixed fixed resources and choices");
- }
- }
-
- private static JsonElement serializeAsChoice(Set<Set<ResourceType>> choices, JsonSerializationContext context) {
- if (choices.isEmpty()) {
- return JsonNull.INSTANCE;
- }
- if (choices.size() > 1) {
- throw new IllegalArgumentException("Cannot serialize a production with more than one choice");
- }
- String str = choices.stream()
- .flatMap(Set::stream)
- .map(ResourceType::getSymbol)
- .map(Object::toString)
- .collect(Collectors.joining("/"));
- return context.serialize(str);
- }
-
- private static JsonElement serializeAsResources(Resources fixedResources, JsonSerializationContext context) {
- return context.serialize(fixedResources);
- }
-
- @Override
- public Production deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String resourcesStr = json.getAsString();
- Production production = new Production();
- if (resourcesStr.contains("/")) {
- production.addChoice(createChoice(resourcesStr));
- } else {
- Resources fixedResources = context.deserialize(json, Resources.class);
- production.addAll(fixedResources);
- }
- return production;
- }
-
- private ResourceType[] createChoice(String choiceStr) {
- String[] symbols = choiceStr.split("/");
- ResourceType[] choice = new ResourceType[symbols.length];
- for (int i = 0; i < symbols.length; i++) {
- if (symbols[i].length() != 1) {
- throw new IllegalArgumentException("Choice elements must be resource types, got " + symbols[i]);
- }
- choice[i] = ResourceType.fromSymbol(symbols[i].charAt(0));
- }
- return choice;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java
deleted file mode 100644
index d2a49180..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ResourceTypeSerializer implements JsonSerializer<ResourceType>, JsonDeserializer<ResourceType> {
-
- @Override
- public JsonElement serialize(ResourceType type, Type typeOfSrc, JsonSerializationContext context) {
- return new JsonPrimitive(type.getSymbol());
- }
-
- @Override
- public ResourceType deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String str = json.getAsString();
- if (str.isEmpty()) {
- throw new IllegalArgumentException("Empty string is not a valid resource type");
- }
- return ResourceType.fromSymbol(str.charAt(0));
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java
deleted file mode 100644
index 89d3e723..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializer.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ResourceTypesSerializer implements JsonSerializer<List<ResourceType>>,
- JsonDeserializer<List<ResourceType>> {
-
- @Override
- public JsonElement serialize(List<ResourceType> resources, Type typeOfSrc, JsonSerializationContext context) {
- String s = resources.stream().map(ResourceType::getSymbol).map(Object::toString).collect(Collectors.joining());
- return new JsonPrimitive(s);
- }
-
- @Override
- public List<ResourceType> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String s = json.getAsString();
- List<ResourceType> resources = new ArrayList<>();
- for (char c : s.toCharArray()) {
- resources.add(ResourceType.fromSymbol(c));
- }
- return resources;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java
deleted file mode 100644
index 9c27b2a1..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.stream.Collectors;
-
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ResourcesSerializer implements JsonSerializer<Resources>, JsonDeserializer<Resources> {
-
- @Override
- public JsonElement serialize(Resources resources, Type typeOfSrc, JsonSerializationContext context) {
- String s = resources.asList()
- .stream()
- .map(ResourceType::getSymbol)
- .map(Object::toString)
- .collect(Collectors.joining());
- return s.isEmpty() ? JsonNull.INSTANCE : new JsonPrimitive(s);
- }
-
- @Override
- public Resources deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String s = json.getAsString();
- Resources resources = new Resources();
- for (char c : s.toCharArray()) {
- resources.add(ResourceType.fromSymbol(c), 1);
- }
- return resources;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java b/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java
deleted file mode 100644
index cecad405..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-
-import org.luxons.sevenwonders.game.boards.Science;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonNull;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonPrimitive;
-import com.google.gson.JsonSerializationContext;
-import com.google.gson.JsonSerializer;
-
-public class ScienceProgressSerializer implements JsonSerializer<ScienceProgress>, JsonDeserializer<ScienceProgress> {
-
- @Override
- public JsonElement serialize(ScienceProgress scienceProgress, Type typeOfSrc, JsonSerializationContext context) {
- Science science = scienceProgress.getScience();
-
- if (science.size() > 1) {
- throw new UnsupportedOperationException("Cannot serialize science containing more than one element");
- }
-
- for (ScienceType type : ScienceType.values()) {
- int quantity = science.getQuantity(type);
- if (quantity == 1) {
- return context.serialize(type);
- }
- }
-
- if (science.getJokers() == 1) {
- return new JsonPrimitive("any");
- }
-
- return JsonNull.INSTANCE;
- }
-
- @Override
- public ScienceProgress deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
- throws JsonParseException {
- String s = json.getAsString();
- ScienceProgress scienceProgress = new ScienceProgress();
- Science science = new Science();
- if ("any".equals(s)) {
- science.addJoker(1);
- } else {
- science.add(deserializeScienceType(json, context), 1);
- }
- scienceProgress.setScience(science);
- return scienceProgress;
- }
-
- private ScienceType deserializeScienceType(JsonElement json, JsonDeserializationContext context) {
- ScienceType type = context.deserialize(json, ScienceType.class);
- if (type == null) {
- throw new IllegalArgumentException("Invalid science type " + json.getAsString());
- }
- return type;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java
deleted file mode 100644
index e9f9fe5f..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElement.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.BoardElementType;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.Color;
-
-public class BonusPerBoardElement implements Effect {
-
- private List<RelativeBoardPosition> boards;
-
- private int gold;
-
- private int points;
-
- private BoardElementType type;
-
- // only relevant if type=CARD
- private List<Color> colors;
-
- public List<RelativeBoardPosition> getBoards() {
- return boards;
- }
-
- public void setBoards(List<RelativeBoardPosition> boards) {
- this.boards = boards;
- }
-
- public int getGold() {
- return gold;
- }
-
- public void setGold(int gold) {
- this.gold = gold;
- }
-
- public int getPoints() {
- return points;
- }
-
- public void setPoints(int points) {
- this.points = points;
- }
-
- public BoardElementType getType() {
- return type;
- }
-
- public void setType(BoardElementType type) {
- this.type = type;
- }
-
- public List<Color> getColors() {
- return colors;
- }
-
- public void setColors(List<Color> colors) {
- this.colors = colors;
- }
-
- @Override
- public void apply(Table table, int playerIndex) {
- int goldGain = gold * computeNbOfMatchingElementsIn(table, playerIndex);
- Board board = table.getBoard(playerIndex);
- board.addGold(goldGain);
- }
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- return points * computeNbOfMatchingElementsIn(table, playerIndex);
- }
-
- private int computeNbOfMatchingElementsIn(Table table, int playerIndex) {
- return boards.stream()
- .map(pos -> table.getBoard(playerIndex, pos))
- .mapToInt(this::computeNbOfMatchingElementsIn)
- .sum();
- }
-
- private int computeNbOfMatchingElementsIn(Board board) {
- return type.getElementCount(board, colors);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java
deleted file mode 100644
index 976ebf35..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Discount.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.Provider;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.TradingRules;
-
-public class Discount extends InstantOwnBoardEffect {
-
- private final List<ResourceType> resourceTypes = new ArrayList<>();
-
- private final List<Provider> providers = new ArrayList<>();
-
- private int discountedPrice = 1;
-
- public List<ResourceType> getResourceTypes() {
- return resourceTypes;
- }
-
- public List<Provider> getProviders() {
- return providers;
- }
-
- public int getDiscountedPrice() {
- return discountedPrice;
- }
-
- public void setDiscountedPrice(int discountedPrice) {
- this.discountedPrice = discountedPrice;
- }
-
- @Override
- public void apply(Board board) {
- TradingRules rules = board.getTradingRules();
- for (ResourceType type : resourceTypes) {
- for (Provider provider : providers) {
- rules.setCost(type, provider, discountedPrice);
- }
- }
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java
deleted file mode 100644
index 692eaea0..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/Effect.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-/**
- * Represents an effect than can be applied to a player's board when playing a card or building his wonder. The effect
- * may affect (or depend on) the adjacent boards. It can have an instantaneous effect on the board, or be postponed to
- * the end of game where point calculations take place.
- */
-public interface Effect {
-
- void apply(Table table, int playerIndex);
-
- int computePoints(Table table, int playerIndex);
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java
deleted file mode 100644
index 1bae16a6..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/EndGameEffect.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-public abstract class EndGameEffect implements Effect {
-
- @Override
- public void apply(Table table, int playerIndex) {
- // EndGameEffects don't do anything when applied to the board, they simply give more points in the end
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java
deleted file mode 100644
index 4c1215d4..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-
-public class GoldIncrease extends InstantOwnBoardEffect {
-
- private final int amount;
-
- public GoldIncrease(int amount) {
- this.amount = amount;
- }
-
- public int getAmount() {
- return amount;
- }
-
- @Override
- public void apply(Board board) {
- board.addGold(amount);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- GoldIncrease that = (GoldIncrease) o;
- return amount == that.amount;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(amount);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java
deleted file mode 100644
index 8f4340cf..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/InstantOwnBoardEffect.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-
-public abstract class InstantOwnBoardEffect implements Effect {
-
- @Override
- public void apply(Table table, int playerIndex) {
- apply(table.getBoard(playerIndex));
- }
-
- protected abstract void apply(Board board);
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- // InstantEffects are only important when applied to the board, they don't give extra points in the end
- return 0;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java
deleted file mode 100644
index 7da112f5..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-
-public class MilitaryReinforcements extends InstantOwnBoardEffect {
-
- private final int count;
-
- public MilitaryReinforcements(int count) {
- this.count = count;
- }
-
- public int getCount() {
- return count;
- }
-
- @Override
- public void apply(Board board) {
- board.getMilitary().addShields(count);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- MilitaryReinforcements that = (MilitaryReinforcements) o;
- return count == that.count;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(count);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java
deleted file mode 100644
index 514c65db..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ProductionIncrease.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.Production;
-
-public class ProductionIncrease extends InstantOwnBoardEffect {
-
- private Production production = new Production();
-
- private boolean sellable = true;
-
- public Production getProduction() {
- return production;
- }
-
- public void setProduction(Production production) {
- this.production = production;
- }
-
- public boolean isSellable() {
- return sellable;
- }
-
- public void setSellable(boolean sellable) {
- this.sellable = sellable;
- }
-
- @Override
- public void apply(Board board) {
- board.getProduction().addAll(production);
- if (sellable) {
- board.getPublicProduction().addAll(production);
- }
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ProductionIncrease that = (ProductionIncrease) o;
- return Objects.equals(production, that.production);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(production);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java
deleted file mode 100644
index 9a5d66ed..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Objects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-public class RawPointsIncrease extends EndGameEffect {
-
- private final int points;
-
- public RawPointsIncrease(int points) {
- this.points = points;
- }
-
- public int getPoints() {
- return points;
- }
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- return points;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- RawPointsIncrease that = (RawPointsIncrease) o;
- return points == that.points;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(points);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java
deleted file mode 100644
index 4e6764ee..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/ScienceProgress.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.Science;
-
-public class ScienceProgress extends InstantOwnBoardEffect {
-
- private Science science;
-
- public Science getScience() {
- return science;
- }
-
- public void setScience(Science science) {
- this.science = science;
- }
-
- @Override
- public void apply(Board board) {
- board.getScience().addAll(science);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java
deleted file mode 100644
index cdf67f20..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbility.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public enum SpecialAbility {
-
- /**
- * The player can play the last card of each age instead of discarding it. This card can be played by paying its
- * cost, discarded to gain 3 coins or used in the construction of his or her Wonder.
- */
- PLAY_LAST_CARD,
-
- /**
- * Once per age, a player can construct a building from his or her hand for free.
- */
- ONE_FREE_PER_AGE,
-
- /**
- * The player can look at all cards discarded since the beginning of the game, pick one and build it for free.
- */
- PLAY_DISCARDED,
-
- /**
- * The player can, at the end of the game, "copy" a Guild of his or her choice (purple card), built by one of his or
- * her two neighboring cities.
- */
- COPY_GUILD {
- @Override
- public int computePoints(Table table, int playerIndex) {
- Card copiedGuild = table.getBoard(playerIndex).getCopiedGuild();
- if (copiedGuild == null) {
- throw new IllegalStateException("The copied Guild has not been chosen, cannot compute points");
- }
- return copiedGuild.getEffects().stream().mapToInt(e -> e.computePoints(table, playerIndex)).sum();
- }
- };
-
- protected void apply(Board board) {
- board.addSpecial(this);
- }
-
- public int computePoints(Table table, int playerIndex) {
- return 0;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java b/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java
deleted file mode 100644
index a5953c2f..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivation.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.luxons.sevenwonders.game.api.Table;
-
-public class SpecialAbilityActivation implements Effect {
-
- private final SpecialAbility specialAbility;
-
- public SpecialAbilityActivation(SpecialAbility specialAbility) {
- this.specialAbility = specialAbility;
- }
-
- public SpecialAbility getSpecialAbility() {
- return specialAbility;
- }
-
- @Override
- public void apply(Table table, int playerIndex) {
- specialAbility.apply(table.getBoard(playerIndex));
- }
-
- @Override
- public int computePoints(Table table, int playerIndex) {
- return specialAbility.computePoints(table, playerIndex);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java
deleted file mode 100644
index f1cb50b3..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/BuildWonderMove.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class BuildWonderMove extends CardFromHandMove {
-
- BuildWonderMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public void validate(Table table, List<Card> playerHand) throws InvalidMoveException {
- super.validate(table, playerHand);
- Board board = table.getBoard(getPlayerIndex());
- if (!board.getWonder().isNextStageBuildable(table, getPlayerIndex(), getBoughtResources())) {
- throw new InvalidMoveException(
- String.format("Player %d cannot upgrade his wonder with the given resources", getPlayerIndex()));
- }
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.getWonder().buildLevel(getCard().getBack());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- int playerIndex = getPlayerIndex();
- Board board = table.getBoard(playerIndex);
- board.getWonder().activateLastBuiltStage(table, playerIndex, getBoughtResources());
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java
deleted file mode 100644
index 1794966d..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CardFromHandMove.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public abstract class CardFromHandMove extends Move {
-
- CardFromHandMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public void validate(Table table, List<Card> playerHand) throws InvalidMoveException {
- if (!playerHand.contains(getCard())) {
- throw new InvalidMoveException(
- String.format("Player %d does not have the card '%s' in his hand", getPlayerIndex(),
- getCard().getName()));
- }
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java
deleted file mode 100644
index a93670c5..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/CopyGuildMove.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-
-public class CopyGuildMove extends Move {
-
- CopyGuildMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public void validate(Table table, List<Card> playerHand) throws InvalidMoveException {
- Board board = table.getBoard(getPlayerIndex());
- if (!board.hasSpecial(SpecialAbility.COPY_GUILD)) {
- throw new InvalidMoveException(
- String.format("Player %d does not have the ability to copy guild cards", getPlayerIndex()));
- }
- if (getCard().getColor() != Color.PURPLE) {
- throw new InvalidMoveException(
- String.format("Player %d cannot copy card %s because it is not a guild card", getPlayerIndex(),
- getCard().getName()));
- }
- boolean leftNeighbourHasIt = neighbourHasTheCard(table, RelativeBoardPosition.LEFT);
- boolean rightNeighbourHasIt = neighbourHasTheCard(table, RelativeBoardPosition.RIGHT);
- if (!leftNeighbourHasIt && !rightNeighbourHasIt) {
- throw new InvalidMoveException(
- String.format("Player %d cannot copy card %s because none of his neighbour has it",
- getPlayerIndex(), getCard().getName()));
- }
- }
-
- private boolean neighbourHasTheCard(Table table, RelativeBoardPosition position) {
- Board neighbourBoard = table.getBoard(getPlayerIndex(), position);
- return neighbourBoard.getPlayedCards().contains(getCard());
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- // nothing special to do here
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.setCopiedGuild(getCard());
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java
deleted file mode 100644
index 076a593c..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/DiscardMove.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class DiscardMove extends CardFromHandMove {
-
- DiscardMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- discardedCards.add(getCard());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.addGold(settings.getDiscardedCardGold());
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/InvalidMoveException.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/InvalidMoveException.java
deleted file mode 100644
index 58190274..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/InvalidMoveException.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-public class InvalidMoveException extends IllegalArgumentException {
-
- public InvalidMoveException(String message) {
- super(message);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/Move.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/Move.java
deleted file mode 100644
index 40c61eea..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/Move.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-
-public abstract class Move {
-
- private int playerIndex;
-
- private Card card;
-
- private MoveType type;
-
- private List<BoughtResources> boughtResources = new ArrayList<>();
-
- Move(int playerIndex, Card card, PlayerMove move) {
- this.playerIndex = playerIndex;
- this.card = card;
- this.type = move.getType();
- this.boughtResources = move.getBoughtResources();
- }
-
- public int getPlayerIndex() {
- return playerIndex;
- }
-
- public Card getCard() {
- return card;
- }
-
- public MoveType getType() {
- return type;
- }
-
- public List<BoughtResources> getBoughtResources() {
- return boughtResources;
- }
-
- public abstract void validate(Table table, List<Card> playerHand) throws InvalidMoveException;
-
- public abstract void place(Table table, List<Card> discardedCards, Settings settings);
-
- public abstract void activate(Table table, List<Card> discardedCards, Settings settings);
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java
deleted file mode 100644
index bf64344d..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/MoveType.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public enum MoveType {
- PLAY {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new PlayCardMove(playerIndex, card, move);
- }
- },
- PLAY_FREE {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new PlayFreeCardMove(playerIndex, card, move);
- }
- },
- UPGRADE_WONDER {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new BuildWonderMove(playerIndex, card, move);
- }
- },
- DISCARD {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new DiscardMove(playerIndex, card, move);
- }
- },
- COPY_GUILD {
- @Override
- public Move resolve(int playerIndex, Card card, PlayerMove move) {
- return new CopyGuildMove(playerIndex, card, move);
- }
- };
-
- public abstract Move resolve(int playerIndex, Card card, PlayerMove move);
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java
deleted file mode 100644
index 82052981..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayCardMove.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class PlayCardMove extends CardFromHandMove {
-
- PlayCardMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public void validate(Table table, List<Card> playerHand) throws InvalidMoveException {
- super.validate(table, playerHand);
- Board board = table.getBoard(getPlayerIndex());
- if (!getCard().isChainableOn(board) && !getCard().getRequirements()
- .areMetWithHelpBy(board, getBoughtResources())) {
- throw new InvalidMoveException(
- String.format("Player %d cannot play the card %s with the given resources", getPlayerIndex(),
- getCard().getName()));
- }
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.addCard(getCard());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- getCard().applyTo(table, getPlayerIndex(), getBoughtResources());
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java b/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java
deleted file mode 100644
index 4e8eefa5..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/moves/PlayFreeCardMove.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.moves;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.Card;
-
-public class PlayFreeCardMove extends CardFromHandMove {
-
- PlayFreeCardMove(int playerIndex, Card card, PlayerMove move) {
- super(playerIndex, card, move);
- }
-
- @Override
- public void validate(Table table, List<Card> playerHand) throws InvalidMoveException {
- super.validate(table, playerHand);
- Board board = table.getBoard(getPlayerIndex());
- if (!board.canPlayFreeCard(table.getCurrentAge())) {
- throw new InvalidMoveException(
- String.format("Player %d cannot play the card %s for free", getPlayerIndex(), getCard().getName()));
- }
- }
-
- @Override
- public void place(Table table, List<Card> discardedCards, Settings settings) {
- Board board = table.getBoard(getPlayerIndex());
- board.addCard(getCard());
- }
-
- @Override
- public void activate(Table table, List<Card> discardedCards, Settings settings) {
- // only apply effects, without paying the cost
- getCard().getEffects().forEach(e -> e.apply(table, getPlayerIndex()));
- Board board = table.getBoard(getPlayerIndex());
- board.consumeFreeCard(table.getCurrentAge());
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BestPriceCalculator.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/BestPriceCalculator.java
deleted file mode 100644
index 8fed41d1..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BestPriceCalculator.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.ArrayList;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Set;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-
-public class BestPriceCalculator {
-
- private final Resources resources;
-
- private final List<ResourcePool> pools;
-
- private BestPriceCalculator(Resources resources, Table table, int playerIndex) {
- this.resources = resources;
- this.pools = createResourcePools(table, playerIndex);
- }
-
- private static List<ResourcePool> createResourcePools(Table table, int playerIndex) {
- Provider[] providers = Provider.values();
- List<ResourcePool> pools = new ArrayList<>(providers.length + 1);
-
- Board board = table.getBoard(playerIndex);
- TradingRules rules = board.getTradingRules();
- pools.add(new ResourcePool(board.getProduction(), null, rules));
-
- for (Provider provider : providers) {
- Board providerBoard = table.getBoard(playerIndex, provider.getBoardPosition());
- ResourcePool pool = new ResourcePool(providerBoard.getPublicProduction(), provider, rules);
- pools.add(pool);
- }
- return pools;
- }
-
- public static int bestPrice(Resources resources, Table table, int playerIndex) {
- Board board = table.getBoard(playerIndex);
- Resources leftToPay = resources.minus(board.getProduction().getFixedResources());
- return new BestPriceCalculator(leftToPay, table, playerIndex).bestPrice();
- }
-
- private int bestPrice() {
- if (resources.isEmpty()) {
- return 0;
- }
- int currentMinPrice = Integer.MAX_VALUE;
- for (ResourceType type : ResourceType.values()) {
- if (resources.getQuantity(type) > 0) {
- int minPriceUsingOwnResource = bestPriceWithout(type);
- currentMinPrice = Math.min(currentMinPrice, minPriceUsingOwnResource);
- }
- }
- return currentMinPrice;
- }
-
- private int bestPriceWithout(ResourceType type) {
- resources.remove(type, 1);
- int currentMinPrice = Integer.MAX_VALUE;
- for (ResourcePool pool : pools) {
- int resCostInPool = pool.getCost(type);
- for (Set<ResourceType> choice : pool.getChoices()) {
- if (choice.contains(type)) {
- Set<ResourceType> temp = EnumSet.copyOf(choice);
- choice.clear();
- currentMinPrice = Math.min(currentMinPrice, bestPrice() + resCostInPool);
- choice.addAll(temp);
- }
- }
- }
- resources.add(type, 1);
- return currentMinPrice;
- }
-
- private static class ResourcePool {
-
- private final Set<Set<ResourceType>> choices;
-
- private final Provider provider;
-
- private final TradingRules rules;
-
- private ResourcePool(Production production, Provider provider, TradingRules rules) {
- this.choices = production.asChoices();
- this.provider = provider;
- this.rules = rules;
- }
-
- Set<Set<ResourceType>> getChoices() {
- return choices;
- }
-
- int getCost(ResourceType type) {
- if (provider == null) {
- return 0;
- }
- return rules.getCost(type, provider);
- }
- }
-}
-
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java
deleted file mode 100644
index ec261c8c..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/BoughtResources.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-public class BoughtResources {
-
- private Provider provider;
-
- private Resources resources;
-
- public Provider getProvider() {
- return provider;
- }
-
- public void setProvider(Provider provider) {
- this.provider = provider;
- }
-
- public Resources getResources() {
- return resources;
- }
-
- public void setResources(Resources resources) {
- this.resources = resources;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Production.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/Production.java
deleted file mode 100644
index 7fa83e51..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Production.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.Set;
-
-public class Production {
-
- private final Resources fixedResources = new Resources();
-
- private final Set<Set<ResourceType>> alternativeResources = new HashSet<>();
-
- public void addFixedResource(ResourceType type, int quantity) {
- fixedResources.add(type, quantity);
- }
-
- public void addChoice(ResourceType... options) {
- EnumSet<ResourceType> optionSet = EnumSet.copyOf(Arrays.asList(options));
- alternativeResources.add(optionSet);
- }
-
- public void addAll(Resources resources) {
- fixedResources.addAll(resources);
- }
-
- public void addAll(Production production) {
- fixedResources.addAll(production.getFixedResources());
- alternativeResources.addAll(production.getAlternativeResources());
- }
-
- public Resources getFixedResources() {
- return fixedResources;
- }
-
- public Set<Set<ResourceType>> getAlternativeResources() {
- return alternativeResources;
- }
-
- Set<Set<ResourceType>> asChoices() {
- Set<Set<ResourceType>> result = new HashSet<>(fixedResources.size() + alternativeResources.size());
- fixedResources.asList().stream().map(EnumSet::of).forEach(result::add);
- result.addAll(alternativeResources);
- return result;
- }
-
- public boolean contains(Resources resources) {
- if (fixedResources.contains(resources)) {
- return true;
- }
- Resources remaining = resources.minus(fixedResources);
- return containedInAlternatives(remaining);
- }
-
- private boolean containedInAlternatives(Resources resources) {
- return containedInAlternatives(resources, alternativeResources);
- }
-
- private static boolean containedInAlternatives(Resources resources, Set<Set<ResourceType>> alternatives) {
- if (resources.isEmpty()) {
- return true;
- }
- for (ResourceType type : ResourceType.values()) {
- if (resources.getQuantity(type) <= 0) {
- continue;
- }
- Set<ResourceType> candidate = findFirstAlternativeContaining(alternatives, type);
- if (candidate == null) {
- return false; // no alternative produces the resource of this entry
- }
- resources.remove(type, 1);
- alternatives.remove(candidate);
- boolean remainingAreContainedToo = containedInAlternatives(resources, alternatives);
- resources.add(type, 1);
- alternatives.add(candidate);
- if (remainingAreContainedToo) {
- return true;
- }
- }
- return false;
- }
-
- private static Set<ResourceType> findFirstAlternativeContaining(Set<Set<ResourceType>> alternatives,
- ResourceType type) {
- return alternatives.stream().filter(a -> a.contains(type)).findAny().orElse(null);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- Production that = (Production) o;
- return Objects.equals(fixedResources, that.fixedResources) && Objects.equals(alternativeResources,
- that.alternativeResources);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(fixedResources, alternativeResources);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java
deleted file mode 100644
index 9c4aa3f9..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Provider.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-
-public enum Provider {
- LEFT_PLAYER(RelativeBoardPosition.LEFT),
- RIGHT_PLAYER(RelativeBoardPosition.RIGHT);
-
- private final RelativeBoardPosition boardPosition;
-
- Provider(RelativeBoardPosition boardPosition) {
- this.boardPosition = boardPosition;
- }
-
- public RelativeBoardPosition getBoardPosition() {
- return boardPosition;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java
deleted file mode 100644
index baad8451..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/ResourceType.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public enum ResourceType {
- WOOD('W'),
- STONE('S'),
- ORE('O'),
- CLAY('C'),
- GLASS('G'),
- PAPYRUS('P'),
- LOOM('L');
-
- private static final Map<Character, ResourceType> typesPerSymbol = new HashMap<>(7);
-
- static {
- for (ResourceType type : values()) {
- typesPerSymbol.put(type.symbol, type);
- }
- }
-
- private final Character symbol;
-
- ResourceType(Character symbol) {
- this.symbol = symbol;
- }
-
- public static ResourceType fromSymbol(Character symbol) {
- ResourceType type = typesPerSymbol.get(symbol);
- if (type == null) {
- throw new IllegalArgumentException(String.format("Unknown resource type symbol '%s'", symbol));
- }
- return type;
- }
-
- public Character getSymbol() {
- return symbol;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java
deleted file mode 100644
index 04278fea..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/Resources.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.NoSuchElementException;
-import java.util.Objects;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-public class Resources {
-
- private final Map<ResourceType, Integer> quantities = new EnumMap<>(ResourceType.class);
-
- public void add(ResourceType type, int quantity) {
- quantities.merge(type, quantity, (x, y) -> x + y);
- }
-
- public void remove(ResourceType type, int quantity) {
- if (getQuantity(type) < quantity) {
- throw new NoSuchElementException(String.format("Can't remove %d resources of type %s", quantity, type));
- }
- quantities.computeIfPresent(type, (t, oldQty) -> oldQty - quantity);
- }
-
- public void addAll(Resources resources) {
- resources.quantities.forEach(this::add);
- }
-
- public int getQuantity(ResourceType type) {
- return quantities.getOrDefault(type, 0);
- }
-
- public List<ResourceType> asList() {
- return quantities.entrySet()
- .stream()
- .flatMap(e -> Stream.generate(e::getKey).limit(e.getValue()))
- .collect(Collectors.toList());
- }
-
- public boolean contains(Resources resources) {
- return resources.quantities.entrySet().stream().allMatch(this::hasAtLeast);
- }
-
- private boolean hasAtLeast(Entry<ResourceType, Integer> quantity) {
- return quantity.getValue() <= getQuantity(quantity.getKey());
- }
-
- /**
- * Creates new {@link Resources} object containing these resources minus the given resources.
- *
- * @param resources
- * the resources to subtract from these resources
- *
- * @return a new {@link Resources} object containing these resources minus the given resources.
- */
- public Resources minus(Resources resources) {
- Resources diff = new Resources();
- quantities.forEach((type, count) -> {
- int remainder = count - resources.getQuantity(type);
- diff.quantities.put(type, Math.max(0, remainder));
- });
- return diff;
- }
-
- public boolean isEmpty() {
- return size() == 0;
- }
-
- public int size() {
- return quantities.values().stream().reduce(0, Integer::sum);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- Resources resources = (Resources) o;
- return Objects.equals(quantities, resources.quantities);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(quantities);
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java b/backend/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java
deleted file mode 100644
index 8cd1d9bc..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/resources/TradingRules.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.EnumMap;
-import java.util.List;
-import java.util.Map;
-
-public class TradingRules {
-
- private final Map<ResourceType, Map<Provider, Integer>> costs = new EnumMap<>(ResourceType.class);
-
- private final int defaultCost;
-
- public TradingRules(int defaultCost) {
- this.defaultCost = defaultCost;
- }
-
- public Map<ResourceType, Map<Provider, Integer>> getCosts() {
- return costs;
- }
-
- int getCost(ResourceType type, Provider provider) {
- return costs.computeIfAbsent(type, t -> new EnumMap<>(Provider.class)).getOrDefault(provider, defaultCost);
- }
-
- public void setCost(ResourceType type, Provider provider, int cost) {
- costs.computeIfAbsent(type, t -> new EnumMap<>(Provider.class)).put(provider, cost);
- }
-
- public int computeCost(List<BoughtResources> boughtResources) {
- return boughtResources.stream().mapToInt(this::computeCost).sum();
- }
-
- public int computeCost(BoughtResources boughtResources) {
- Resources resources = boughtResources.getResources();
- Provider provider = boughtResources.getProvider();
- int total = 0;
- for (ResourceType type : ResourceType.values()) {
- int count = resources.getQuantity(type);
- total += getCost(type, provider) * count;
- }
- return total;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java b/backend/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java
deleted file mode 100644
index f4a0d832..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/PlayerScore.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.scoring;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public class PlayerScore {
-
- private final int boardGold;
-
- private final Map<ScoreCategory, Integer> scoresByCategory = new HashMap<>();
-
- private int totalPoints = 0;
-
- public PlayerScore(int boardGold) {
- this.boardGold = boardGold;
- }
-
- public Integer put(ScoreCategory category, Integer points) {
- totalPoints += points;
- return scoresByCategory.put(category, points);
- }
-
- public int getPoints(ScoreCategory category) {
- return scoresByCategory.get(category);
- }
-
- public Map<ScoreCategory, Integer> getPointsPerCategory() {
- return scoresByCategory;
- }
-
- public int getTotalPoints() {
- return totalPoints;
- }
-
- public int getBoardGold() {
- return boardGold;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java b/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java
deleted file mode 100644
index e7cdaedd..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreBoard.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.luxons.sevenwonders.game.scoring;
-
-import java.util.Comparator;
-import java.util.PriorityQueue;
-
-public class ScoreBoard {
-
- private static final Comparator<PlayerScore> comparator = Comparator.comparing(PlayerScore::getTotalPoints)
- .thenComparing(PlayerScore::getBoardGold);
-
- private PriorityQueue<PlayerScore> scores;
-
- public ScoreBoard() {
- scores = new PriorityQueue<>(comparator);
- }
-
- public void add(PlayerScore score) {
- scores.add(score);
- }
-
- public PriorityQueue<PlayerScore> getScores() {
- return scores;
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java b/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java
deleted file mode 100644
index a6a9537d..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/scoring/ScoreCategory.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.luxons.sevenwonders.game.scoring;
-
-public enum ScoreCategory {
- CIVIL,
- SCIENCE,
- MILITARY,
- TRADE,
- GUILD,
- WONDER,
- GOLD
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java b/backend/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java
deleted file mode 100644
index 73fff305..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.luxons.sevenwonders.game.wonders;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-public class Wonder {
-
- private String name;
-
- private ResourceType initialResource;
-
- private List<WonderStage> stages;
-
- private String image;
-
- public Wonder() {
- }
-
- public Wonder(String name, ResourceType initialResource, WonderStage... stages) {
- this.name = name;
- this.initialResource = initialResource;
- this.stages = Arrays.asList(stages);
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public ResourceType getInitialResource() {
- return initialResource;
- }
-
- public void setInitialResource(ResourceType initialResource) {
- this.initialResource = initialResource;
- }
-
- public List<WonderStage> getStages() {
- return stages;
- }
-
- public void setStages(List<WonderStage> stages) {
- this.stages = stages;
- }
-
- public int getNbBuiltStages() {
- return (int) stages.stream().filter(WonderStage::isBuilt).count();
- }
-
- public String getImage() {
- return image;
- }
-
- public void setImage(String image) {
- this.image = image;
- }
-
- public boolean isNextStageBuildable(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- int nextLevel = getNbBuiltStages();
- if (nextLevel == stages.size()) {
- return false;
- }
- return getNextStage().isBuildable(table, playerIndex, boughtResources);
- }
-
- public void buildLevel(CardBack cardBack) {
- getNextStage().build(cardBack);
- }
-
- private WonderStage getNextStage() {
- int nextLevel = getNbBuiltStages();
- if (nextLevel == stages.size()) {
- throw new IllegalStateException("This wonder has already reached its maximum level");
- }
- return stages.get(nextLevel);
- }
-
- public void activateLastBuiltStage(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- getLastBuiltStage().activate(table, playerIndex, boughtResources);
- }
-
- private WonderStage getLastBuiltStage() {
- int lastLevel = getNbBuiltStages() - 1;
- return stages.get(lastLevel);
- }
-
- public int computePoints(Table table, int playerIndex) {
- return stages.stream()
- .filter(WonderStage::isBuilt)
- .flatMap(c -> c.getEffects().stream())
- .mapToInt(e -> e.computePoints(table, playerIndex))
- .sum();
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java b/backend/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java
deleted file mode 100644
index 5f6765ee..00000000
--- a/backend/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.luxons.sevenwonders.game.wonders;
-
-import java.util.List;
-
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Requirements;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-
-public class WonderStage {
-
- private Requirements requirements;
-
- private List<Effect> effects;
-
- private CardBack cardBack;
-
- public Requirements getRequirements() {
- return requirements;
- }
-
- public void setRequirements(Requirements requirements) {
- this.requirements = requirements;
- }
-
- public List<Effect> getEffects() {
- return effects;
- }
-
- public void setEffects(List<Effect> effects) {
- this.effects = effects;
- }
-
- public CardBack getCardBack() {
- return cardBack;
- }
-
- public boolean isBuilt() {
- return cardBack != null;
- }
-
- public boolean isBuildable(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- Board board = table.getBoard(playerIndex);
- return requirements.areMetWithHelpBy(board, boughtResources);
- }
-
- void build(CardBack cardBack) {
- this.cardBack = cardBack;
- }
-
- void activate(Table table, int playerIndex, List<BoughtResources> boughtResources) {
- effects.forEach(e -> e.apply(table, playerIndex));
- }
-}
diff --git a/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java b/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java
index eb573479..b1b11c82 100644
--- a/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java
+++ b/backend/src/main/java/org/luxons/sevenwonders/repositories/LobbyRepository.java
@@ -20,8 +20,8 @@ public class LobbyRepository {
private long lastGameId = 0;
@Autowired
- public LobbyRepository(GameDefinitionLoader gameDefinitionLoader) {
- this.gameDefinitionLoader = gameDefinitionLoader;
+ public LobbyRepository() {
+ this.gameDefinitionLoader = new GameDefinitionLoader();
}
public Collection<Lobby> list() {
diff --git a/backend/src/main/resources/org/luxons/sevenwonders/game/data/cards.json b/backend/src/main/resources/org/luxons/sevenwonders/game/data/cards.json
deleted file mode 100644
index 83777d9e..00000000
--- a/backend/src/main/resources/org/luxons/sevenwonders/game/data/cards.json
+++ /dev/null
@@ -1,1719 +0,0 @@
-{
- "age1Back": "age1.png",
- "age2Back": "age2.png",
- "age3Back": "age3.png",
- "age1": [
- {
- "name": "Clay Pit",
- "color": "BROWN",
- "effect": {
- "production": "O/C"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "claypit.png"
- },
- {
- "name": "Clay Pool",
- "color": "BROWN",
- "effect": {
- "production": "C"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "claypool.png"
- },
- {
- "name": "Excavation",
- "color": "BROWN",
- "effect": {
- "production": "S/C"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "excavation.png"
- },
- {
- "name": "Forest Cave",
- "color": "BROWN",
- "effect": {
- "production": "W/O"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 0,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "forestcave.png"
- },
- {
- "name": "Lumber Yard",
- "color": "BROWN",
- "effect": {
- "production": "W"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "lumberyard.png"
- },
- {
- "name": "Mine",
- "color": "BROWN",
- "effect": {
- "production": "S/O"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 0,
- "5": 0,
- "6": 1,
- "7": 1
- },
- "image": "mine.png"
- },
- {
- "name": "Ore Vein",
- "color": "BROWN",
- "effect": {
- "production": "O"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "orevein.png"
- },
- {
- "name": "Stone Pit",
- "color": "BROWN",
- "effect": {
- "production": "S"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "stonepit.png"
- },
- {
- "name": "Timber Yard",
- "color": "BROWN",
- "effect": {
- "production": "W/S"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 1
- },
- "image": "timberyard.png"
- },
- {
- "name": "Tree Farm",
- "color": "BROWN",
- "effect": {
- "production": "W/C"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 0,
- "5": 0,
- "6": 1,
- "7": 1
- },
- "image": "treefarm.png"
- },
- {
- "name": "Glassworks",
- "color": "GREY",
- "effect": {
- "production": "G"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "glassworks.png"
- },
- {
- "name": "Loom",
- "color": "GREY",
- "effect": {
- "production": "L"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "loom.png"
- },
- {
- "name": "Press",
- "color": "GREY",
- "effect": {
- "production": "P"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "press.png"
- },
- {
- "name": "East Trading Post",
- "color": "YELLOW",
- "effect": {
- "discount": {
- "resourceTypes": "CSOW",
- "providers": [
- "RIGHT_PLAYER"
- ],
- "discountedPrice": 1
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Forum"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "easttradingpost.png"
- },
- {
- "name": "Marketplace",
- "color": "YELLOW",
- "effect": {
- "discount": {
- "resourceTypes": "LGP",
- "providers": [
- "LEFT_PLAYER",
- "RIGHT_PLAYER"
- ],
- "discountedPrice": 1
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Caravansery"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "marketplace.png"
- },
- {
- "name": "Tavern",
- "color": "YELLOW",
- "effect": {
- "gold": 5
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 3
- },
- "image": "tavern.png"
- },
- {
- "name": "West Trading Post",
- "color": "YELLOW",
- "effect": {
- "discount": {
- "resourceTypes": "CSOW",
- "providers": [
- "LEFT_PLAYER"
- ],
- "discountedPrice": 1
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Forum"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "westtradingpost.png"
- },
- {
- "name": "Altar",
- "color": "BLUE",
- "effect": {
- "points": 2
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Temple"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "altar.png"
- },
- {
- "name": "Baths",
- "color": "BLUE",
- "effect": {
- "points": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "S"
- },
- "chainChildren": [
- "Aquaduct"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "baths.png"
- },
- {
- "name": "Pawnshop",
- "color": "BLUE",
- "effect": {
- "points": 3
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "pawnshop.png"
- },
- {
- "name": "Theater",
- "color": "BLUE",
- "effect": {
- "points": 2
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [
- "Statue"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "theater.png"
- },
- {
- "name": "Apothecary",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "L"
- },
- "chainChildren": [
- "Stables",
- "Dispensary"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "apothecary.png"
- },
- {
- "name": "Scriptorium",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "P"
- },
- "chainChildren": [
- "Courthouse",
- "Library"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "scriptorium.png"
- },
- {
- "name": "Workshop",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "G"
- },
- "chainChildren": [
- "Archery Range",
- "Laboratory"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "workshop.png"
- },
- {
- "name": "Barracks",
- "color": "RED",
- "effect": {
- "military": 1
- },
- "requirements": {
- "gold": 0,
- "resources": "O"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "barracks.png"
- },
- {
- "name": "Guard Tower",
- "color": "RED",
- "effect": {
- "military": 1
- },
- "requirements": {
- "gold": 0,
- "resources": "C"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "guardtower.png"
- },
- {
- "name": "Stockade",
- "color": "RED",
- "effect": {
- "military": 1
- },
- "requirements": {
- "gold": 0,
- "resources": "W"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "stockade.png"
- }
- ],
- "age2": [
- {
- "name": "Brickyard",
- "color": "BROWN",
- "effect": {
- "production": "CC"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "brickyard.png"
- },
- {
- "name": "Foundry",
- "color": "BROWN",
- "effect": {
- "production": "OO"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "foundry.png"
- },
- {
- "name": "Quarry",
- "color": "BROWN",
- "effect": {
- "production": "SS"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "quarry.png"
- },
- {
- "name": "Sawmill",
- "color": "BROWN",
- "effect": {
- "production": "WW"
- },
- "requirements": {
- "gold": 1
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "sawmill.png"
- },
- {
- "name": "Glassworks",
- "color": "GREY",
- "effect": {
- "production": "G"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "glassworks.png"
- },
- {
- "name": "Loom",
- "color": "GREY",
- "effect": {
- "production": "L"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "loom.png"
- },
- {
- "name": "Press",
- "color": "GREY",
- "effect": {
- "production": "P"
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "press.png"
- },
- {
- "name": "Bazar",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF",
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 2,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "bazar.png"
- },
- {
- "name": "Caravansery",
- "color": "YELLOW",
- "effect": {
- "production": "(W/S/O/C)"
- },
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "chainParent": "Marketplace",
- "chainChildren": [
- "Lighthouse"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 3,
- "7": 3
- },
- "image": "caravansery.png"
- },
- {
- "name": "Forum",
- "color": "YELLOW",
- "effect": {
- "production": "(G/P/L)"
- },
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "chainParent": "East Trading Post",
- "chainChildren": [
- "Haven"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 3
- },
- "image": "forum.png"
- },
- {
- "name": "Vineyard",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF",
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN"
- ]
- }
- },
- "requirements": {
- "gold": 0
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "vineyard.png"
- },
- {
- "name": "Aqueduct",
- "color": "BLUE",
- "effect": {
- "points": 5
- },
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "chainParent": "Baths",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "aqueduct.png"
- },
- {
- "name": "Courthouse",
- "color": "BLUE",
- "effect": {
- "points": 4
- },
- "requirements": {
- "gold": 0,
- "resources": "CCL"
- },
- "chainParent": "Scriptorium",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "courthouse.png"
- },
- {
- "name": "Statue",
- "color": "BLUE",
- "effect": {
- "points": 4
- },
- "requirements": {
- "gold": 0,
- "resources": "WOO"
- },
- "chainParent": "Theater",
- "chainChildren": [
- "Gardens"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "statue.png"
- },
- {
- "name": "Temple",
- "color": "BLUE",
- "effect": {
- "points": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "WCG"
- },
- "chainParent": "Altar",
- "chainChildren": [
- "Pantheon"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "temple.png"
- },
- {
- "name": "Dispensary",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "OOG"
- },
- "chainParent": "Apothecary",
- "chainChildren": [
- "Arena",
- "Lodge"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "dispensary.png"
- },
- {
- "name": "Laboratory",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "CCP"
- },
- "chainParent": "Workshop",
- "chainChildren": [
- "Siege Workshop",
- "Observatory"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "laboratory.png"
- },
- {
- "name": "Library",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "SSL"
- },
- "chainParent": "Scriptorium",
- "chainChildren": [
- "Senate",
- "University"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "library.png"
- },
- {
- "name": "School",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "WP"
- },
- "chainChildren": [
- "Academy",
- "Study"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "school.png"
- },
- {
- "name": "Archery Range",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "WWO"
- },
- "chainParent": "Workshop",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "archeryrange.png"
- },
- {
- "name": "Stables",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "WOC"
- },
- "chainParent": "Apothecary",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "stables.png"
- },
- {
- "name": "Training Ground",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "WOO"
- },
- "chainChildren": [
- "Circus"
- ],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 3
- },
- "image": "trainingground.png"
- },
- {
- "name": "Walls",
- "color": "RED",
- "effect": {
- "military": 2
- },
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "chainChildren": [
- "Fortifications"
- ],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "walls.png"
- }
- ],
- "age3": [
- {
- "name": "Arena",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 3,
- "points": 1,
- "type": "WONDER_LEVEL"
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SSO"
- },
- "chainParent": "Dispensary",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 3
- },
- "image": "arena.png"
- },
- {
- "name": "Chamber of Commerce",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 2,
- "points": 2,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "CCP"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "chamberofcommerce.png"
- },
- {
- "name": "Haven",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 1,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WOL"
- },
- "chainParent": "Forum",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "haven.png"
- },
- {
- "name": "Lighthouse",
- "color": "YELLOW",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 1,
- "points": 1,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SG"
- },
- "chainParent": "Caravansery",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "lighthouse.png"
- },
- {
- "name": "Gardens",
- "color": "BLUE",
- "effect": {
- "points": 5
- },
- "requirements": {
- "gold": 0,
- "resources": "WCC"
- },
- "chainParent": "Statue",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "gardens.png"
- },
- {
- "name": "Palace",
- "color": "BLUE",
- "effect": {
- "points": 8
- },
- "requirements": {
- "gold": 0,
- "resources": "WSOCGPL"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "palace.png"
- },
- {
- "name": "Pantheon",
- "color": "BLUE",
- "effect": {
- "points": 7
- },
- "requirements": {
- "gold": 0,
- "resources": "OCCGPL"
- },
- "chainParent": "Temple",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "pantheon.png"
- },
- {
- "name": "Senate",
- "color": "BLUE",
- "effect": {
- "points": 6
- },
- "requirements": {
- "gold": 0,
- "resources": "WWSO"
- },
- "chainParent": "Library",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "senate.png"
- },
- {
- "name": "Town Hall",
- "color": "BLUE",
- "effect": {
- "points": 6
- },
- "requirements": {
- "gold": 0,
- "resources": "SSOG"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 3,
- "7": 3
- },
- "image": "townhall.png"
- },
- {
- "name": "Academy",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "SSSG"
- },
- "chainParent": "School",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "academy.png"
- },
- {
- "name": "Lodge",
- "color": "GREEN",
- "effect": {
- "science": "COMPASS"
- },
- "requirements": {
- "gold": 0,
- "resources": "CCPL"
- },
- "chainParent": "Dispensary",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 2,
- "7": 2
- },
- "image": "lodge.png"
- },
- {
- "name": "Observatory",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "OOGL"
- },
- "chainParent": "Laboratory",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "observatory.png"
- },
- {
- "name": "Study",
- "color": "GREEN",
- "effect": {
- "science": "WHEEL"
- },
- "requirements": {
- "gold": 0,
- "resources": "WPL"
- },
- "chainParent": "School",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "study.png"
- },
- {
- "name": "University",
- "color": "GREEN",
- "effect": {
- "science": "TABLET"
- },
- "requirements": {
- "gold": 0,
- "resources": "WWGP"
- },
- "chainParent": "Library",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "university.png"
- },
- {
- "name": "Arsenal",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "WWOL"
- },
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 2,
- "5": 2,
- "6": 2,
- "7": 3
- },
- "image": "arsenal.png"
- },
- {
- "name": "Circus",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "SSSO"
- },
- "chainParent": "Training Ground",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 0,
- "4": 1,
- "5": 2,
- "6": 3,
- "7": 3
- },
- "image": "circus.png"
- },
- {
- "name": "Fortifications",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "SOOO"
- },
- "chainParent": "Walls",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 1,
- "6": 1,
- "7": 2
- },
- "image": "fortifications.png"
- },
- {
- "name": "Siege Workshop",
- "color": "RED",
- "effect": {
- "military": 3
- },
- "requirements": {
- "gold": 0,
- "resources": "WCCC"
- },
- "chainParent": "Laboratory",
- "chainChildren": [],
- "countPerNbPlayer": {
- "3": 1,
- "4": 1,
- "5": 2,
- "6": 2,
- "7": 2
- },
- "image": "siegeworkshop.png"
- }
- ],
- "guildCards": [
- {
- "name": "Builders Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "SELF",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "WONDER_LEVEL"
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SSCCG"
- },
- "chainChildren": [],
- "image": "buildersguild.png"
- },
- {
- "name": "Craftsmens Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 2,
- "type": "CARD",
- "colors": [
- "GREY"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SSOO"
- },
- "chainChildren": [],
- "image": "craftsmensguild.png"
- },
- {
- "name": "Magistrates Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BLUE"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WWWSL"
- },
- "chainChildren": [],
- "image": "magistratesguild.png"
- },
- {
- "name": "Philosophers Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "GREEN"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "CCCPL"
- },
- "chainChildren": [],
- "image": "philosophersguild.png"
- },
- {
- "name": "Scientists Guild",
- "color": "PURPLE",
- "effect": {
- "science": "any"
- },
- "requirements": {
- "gold": 0,
- "resources": "WWOOP"
- },
- "chainChildren": [],
- "image": "scientistsguild.png"
- },
- {
- "name": "Shipowners Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "SELF"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN",
- "GREY",
- "PURPLE"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WWWGP"
- },
- "chainChildren": [],
- "image": "shipownersguild.png"
- },
- {
- "name": "Spies Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "RED"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "CCCG"
- },
- "chainChildren": [],
- "image": "spiesguild.png"
- },
- {
- "name": "Strategists Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "DEFEAT_TOKEN"
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "SOOL"
- },
- "chainChildren": [],
- "image": "strategistsguild.png"
- },
- {
- "name": "Traders Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "YELLOW"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "GPL"
- },
- "chainChildren": [],
- "image": "tradersguild.png"
- },
- {
- "name": "Workers Guild",
- "color": "PURPLE",
- "effect": {
- "perBoardElement": {
- "boards": [
- "LEFT",
- "RIGHT"
- ],
- "gold": 0,
- "points": 1,
- "type": "CARD",
- "colors": [
- "BROWN"
- ]
- }
- },
- "requirements": {
- "gold": 0,
- "resources": "WSOOC"
- },
- "chainChildren": [],
- "image": "workersguild.png"
- }
- ]
-} \ No newline at end of file
diff --git a/backend/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json b/backend/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json
deleted file mode 100644
index 5beceadd..00000000
--- a/backend/src/main/resources/org/luxons/sevenwonders/game/data/wonders.json
+++ /dev/null
@@ -1,515 +0,0 @@
-[
- {
- "name": "alexandria",
- "sides": {
- "A": {
- "initialResource": "G",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OO"
- },
- "effects": {
- "production": "(W/S/O/C)"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "GG"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "alexandriaA.png"
- },
- "B": {
- "initialResource": "G",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "effects": {
- "production": "(W/S/O/C)"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "production": "(G/P/L)"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "alexandriaB.png"
- }
- }
- },
- {
- "name": "babylon",
- "sides": {
- "A": {
- "initialResource": "C",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WWW"
- },
- "effects": {
- "science": "any"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCCC"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "babylonA.png"
- },
- "B": {
- "initialResource": "C",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CL"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WWG"
- },
- "effects": {
- "action": "PLAY_LAST_CARD"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCCP"
- },
- "effects": {
- "science": "any"
- }
- }
- ],
- "image": "babylonB.png"
- }
- }
- },
- {
- "name": "ephesos",
- "sides": {
- "A": {
- "initialResource": "P",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "gold": 9
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "PP"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "ephesosA.png"
- },
- "B": {
- "initialResource": "P",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "gold": 4,
- "points": 2
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "gold": 4,
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "GPL"
- },
- "effects": {
- "gold": 4,
- "points": 5
- }
- }
- ],
- "image": "ephesosB.png"
- }
- }
- },
- {
- "name": "gizah",
- "sides": {
- "A": {
- "initialResource": "S",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "WWW"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSSS"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "gizahA.png"
- },
- "B": {
- "initialResource": "S",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCC"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SSSSP"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "gizahB.png"
- }
- }
- },
- {
- "name": "halikarnassus",
- "sides": {
- "A": {
- "initialResource": "L",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "CC"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOO"
- },
- "effects": {
- "action": "PLAY_DISCARDED"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "LL"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "halikarnassusA.png"
- },
- "B": {
- "initialResource": "L",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "OO"
- },
- "effects": {
- "points": 2,
- "action": "PLAY_DISCARDED"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCC"
- },
- "effects": {
- "points": 1,
- "action": "PLAY_DISCARDED"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "GPL"
- },
- "effects": {
- "action": "PLAY_DISCARDED"
- }
- }
- ],
- "image": "halikarnassusB.png"
- }
- }
- },
- {
- "name": "olympia",
- "sides": {
- "A": {
- "initialResource": "W",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "action": "ONE_FREE"
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OO"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "olympiaA.png"
- },
- "B": {
- "initialResource": "W",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "discount": {
- "resourceTypes": "WSOC",
- "providers": [
- "LEFT_PLAYER",
- "RIGHT_PLAYER"
- ],
- "discountedPrice": 1
- }
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "SS"
- },
- "effects": {
- "points": 5
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOL"
- },
- "effects": {
- "action": "COPY_GUILD"
- }
- }
- ],
- "image": "olympiaB.png"
- }
- }
- },
- {
- "name": "rhodos",
- "sides": {
- "A": {
- "initialResource": "O",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "WW"
- },
- "effects": {
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "CCC"
- },
- "effects": {
- "military": 2
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOOO"
- },
- "effects": {
- "points": 7
- }
- }
- ],
- "image": "rhodosA.png"
- },
- "B": {
- "initialResource": "O",
- "stages": [
- {
- "requirements": {
- "gold": 0,
- "resources": "SSS"
- },
- "effects": {
- "gold": 3,
- "military": 1,
- "points": 3
- }
- },
- {
- "requirements": {
- "gold": 0,
- "resources": "OOOO"
- },
- "effects": {
- "gold": 4,
- "military": 1,
- "points": 4
- }
- }
- ],
- "image": "rhodosB.png"
- }
- }
- }
-] \ No newline at end of file
diff --git a/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java b/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java
index 6c971517..65d2aa04 100644
--- a/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java
+++ b/backend/src/test/java/org/luxons/sevenwonders/controllers/GameBrowserControllerTest.java
@@ -8,13 +8,12 @@ import org.junit.Test;
import org.luxons.sevenwonders.actions.CreateGameAction;
import org.luxons.sevenwonders.actions.JoinGameAction;
import org.luxons.sevenwonders.controllers.GameBrowserController.UserAlreadyInGameException;
-import org.luxons.sevenwonders.test.TestUtils;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
import org.luxons.sevenwonders.lobby.Lobby;
import org.luxons.sevenwonders.lobby.Player;
import org.luxons.sevenwonders.repositories.LobbyRepository;
import org.luxons.sevenwonders.repositories.PlayerRepository;
import org.luxons.sevenwonders.repositories.PlayerRepository.PlayerNotFoundException;
+import org.luxons.sevenwonders.test.TestUtils;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import static org.junit.Assert.assertEquals;
@@ -31,7 +30,7 @@ public class GameBrowserControllerTest {
@Before
public void setUp() {
playerRepository = new PlayerRepository();
- LobbyRepository lobbyRepository = new LobbyRepository(new GameDefinitionLoader());
+ LobbyRepository lobbyRepository = new LobbyRepository();
SimpMessagingTemplate template = TestUtils.createSimpMessagingTemplate();
LobbyController lobbyController = new LobbyController(playerRepository, template);
gameBrowserController = new GameBrowserController(lobbyController, lobbyRepository, playerRepository, template);
diff --git a/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java b/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java
index 6958ad8b..db165e83 100644
--- a/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java
+++ b/backend/src/test/java/org/luxons/sevenwonders/controllers/LobbyControllerTest.java
@@ -13,7 +13,6 @@ import org.luxons.sevenwonders.actions.UpdateSettingsAction;
import org.luxons.sevenwonders.controllers.LobbyController.PlayerIsNotOwnerException;
import org.luxons.sevenwonders.controllers.LobbyController.PlayerNotInLobbyException;
import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
import org.luxons.sevenwonders.game.data.definitions.WonderSidePickMethod;
import org.luxons.sevenwonders.lobby.Lobby;
import org.luxons.sevenwonders.lobby.Player;
@@ -41,7 +40,7 @@ public class LobbyControllerTest {
@Before
public void setUp() {
playerRepository = new PlayerRepository();
- lobbyRepository = new LobbyRepository(new GameDefinitionLoader());
+ lobbyRepository = new LobbyRepository();
SimpMessagingTemplate template = TestUtils.createSimpMessagingTemplate();
lobbyController = new LobbyController(playerRepository, template);
}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/GameTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/GameTest.java
deleted file mode 100644
index e504126d..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/GameTest.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.luxons.sevenwonders.game;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Test;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.api.HandCard;
-import org.luxons.sevenwonders.game.api.PlayerMove;
-import org.luxons.sevenwonders.game.api.PlayerTurnInfo;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
-import org.luxons.sevenwonders.game.moves.Move;
-import org.luxons.sevenwonders.game.moves.MoveType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-
-public class GameTest {
-
- @Test
- public void testFullGame() {
- int nbPlayers = 5;
- Game game = createGame(nbPlayers);
-
- for (int age = 1; age <= 3; age++) {
- playAge(nbPlayers, game, age);
- }
- }
-
- private void playAge(int nbPlayers, Game game, int age) {
- for (int i = 0; i < 6; i++) {
- playTurn(nbPlayers, game, age, 7 - i);
- }
- }
-
- private static Game createGame(int nbPlayers) {
- CustomizableSettings settings = TestUtils.createCustomizableSettings();
- return new GameDefinitionLoader().getGameDefinition().initGame(0, settings, nbPlayers);
- }
-
- private static void playTurn(int nbPlayers, Game game, int ageToCheck, int handSize) {
- Collection<PlayerTurnInfo> turnInfos = game.getCurrentTurnInfo();
- assertEquals(nbPlayers, turnInfos.size());
-
- Map<Integer, PlayerMove> sentMoves = new HashMap<>(turnInfos.size());
- for (PlayerTurnInfo turnInfo : turnInfos) {
- assertEquals(ageToCheck, turnInfo.getCurrentAge());
- assertEquals(handSize, turnInfo.getHand().size());
- PlayerMove move = getFirstAvailableMove(turnInfo);
- if (move != null) {
- game.prepareMove(turnInfo.getPlayerIndex(), move);
- sentMoves.put(turnInfo.getPlayerIndex(), move);
- }
- }
- assertTrue(game.allPlayersPreparedTheirMove());
- Table table = game.playTurn();
- checkLastPlayedMoves(sentMoves, table);
- }
-
- private static void checkLastPlayedMoves(Map<Integer, PlayerMove> sentMoves, Table table) {
- for (Move move : table.getLastPlayedMoves()) {
- PlayerMove sentMove = sentMoves.get(move.getPlayerIndex());
- assertNotNull(sentMove);
- assertNotNull(move.getCard());
- assertEquals(sentMove.getCardName(), move.getCard().getName());
- assertSame(sentMove.getType(), move.getType());
- }
- }
-
- private static PlayerMove getFirstAvailableMove(PlayerTurnInfo turnInfo) {
- switch (turnInfo.getAction()) {
- case PLAY:
- case PLAY_2:
- case PLAY_LAST:
- return createPlayCardMove(turnInfo);
- case PICK_NEIGHBOR_GUILD:
- return createPickGuildMove(turnInfo);
- case WAIT:
- default:
- return null;
- }
- }
-
- private static PlayerMove createPlayCardMove(PlayerTurnInfo turnInfo) {
- for (HandCard handCard : turnInfo.getHand()) {
- if (handCard.isFree()) {
- return createMove(handCard, MoveType.PLAY);
- }
- }
- return createMove(turnInfo.getHand().get(0), MoveType.DISCARD);
- }
-
- private static PlayerMove createPickGuildMove(PlayerTurnInfo turnInfo) {
- List<Card> neighbourGuilds = turnInfo.getNeighbourGuildCards();
- assertNotNull(neighbourGuilds);
- String cardName = neighbourGuilds.isEmpty() ? null : neighbourGuilds.get(0).getName();
- PlayerMove move = new PlayerMove();
- move.setCardName(cardName);
- move.setType(MoveType.COPY_GUILD);
- return move;
- }
-
- private static PlayerMove createMove(HandCard handCard, MoveType type) {
- PlayerMove move = new PlayerMove();
- move.setCardName(handCard.getCard().getName());
- move.setType(type);
- return move;
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java
deleted file mode 100644
index 71dbeb89..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/api/TableTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.luxons.sevenwonders.game.api;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class TableTest {
-
- @DataPoints
- public static int[] nbPlayers() {
- return new int[] {2, 3, 4, 5, 6, 7, 8};
- }
-
- @Theory
- public void getBoard_wrapLeft(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- Table table = TestUtils.createTable(nbPlayers);
- int last = nbPlayers - 1;
- assertEquals(table.getBoard(last), table.getBoard(0, RelativeBoardPosition.LEFT));
- assertEquals(table.getBoard(0), table.getBoard(0, RelativeBoardPosition.SELF));
- assertEquals(table.getBoard(1), table.getBoard(0, RelativeBoardPosition.RIGHT));
- }
-
- @Theory
- public void getBoard_wrapRight(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- Table table = TestUtils.createTable(nbPlayers);
- int last = nbPlayers - 1;
- assertEquals(table.getBoard(last - 1), table.getBoard(last, RelativeBoardPosition.LEFT));
- assertEquals(table.getBoard(last), table.getBoard(last, RelativeBoardPosition.SELF));
- assertEquals(table.getBoard(0), table.getBoard(last, RelativeBoardPosition.RIGHT));
- }
-
- @Theory
- public void getBoard_noWrap(int nbPlayers) {
- assumeTrue(nbPlayers >= 3);
- Table table = TestUtils.createTable(nbPlayers);
- assertEquals(table.getBoard(0), table.getBoard(1, RelativeBoardPosition.LEFT));
- assertEquals(table.getBoard(1), table.getBoard(1, RelativeBoardPosition.SELF));
- assertEquals(table.getBoard(2), table.getBoard(1, RelativeBoardPosition.RIGHT));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java
deleted file mode 100644
index c54ff0b2..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/BoardTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.FromDataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board.InsufficientFundsException;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-import org.luxons.sevenwonders.game.effects.SpecialAbility;
-import org.luxons.sevenwonders.game.effects.SpecialAbilityActivation;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.luxons.sevenwonders.game.scoring.PlayerScore;
-import org.luxons.sevenwonders.game.scoring.ScoreCategory;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static junit.framework.TestCase.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class BoardTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @DataPoints("gold")
- public static int[] goldAmounts() {
- return new int[]{-3, -1, 0, 1, 2, 3};
- }
-
- @DataPoints("nbCards")
- public static int[] nbCards() {
- return new int[]{0, 1, 2};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @DataPoints
- public static Color[] colors() {
- return Color.values();
- }
-
- @DataPoints
- public static SpecialAbility[] specialAbilities() {
- return SpecialAbility.values();
- }
-
- @Theory
- public void initialGold_respectsSettings(@FromDataPoints("gold") int goldAmountInSettings) {
- CustomizableSettings customSettings = TestUtils.createCustomizableSettings();
- customSettings.setInitialGold(goldAmountInSettings);
- Settings settings = new Settings(5, customSettings);
- Board board = new Board(TestUtils.createWonder(), 0, settings);
- assertEquals(goldAmountInSettings, board.getGold());
- }
-
- @Theory
- public void initialProduction_containsInitialResource(ResourceType type) {
- Board board = new Board(TestUtils.createWonder(type), 0, new Settings(5));
- Resources resources = TestUtils.createResources(type);
- assertTrue(board.getProduction().contains(resources));
- assertTrue(board.getPublicProduction().contains(resources));
- }
-
- @Theory
- public void removeGold_successfulWhenNotTooMuch(@FromDataPoints("gold") int initialGold,
- @FromDataPoints("gold") int goldRemoved) {
- assumeTrue(goldRemoved >= 0);
- assumeTrue(initialGold >= goldRemoved);
- Board board = new Board(TestUtils.createWonder(), 0, new Settings(5));
- board.setGold(initialGold);
- board.removeGold(goldRemoved);
- assertEquals(initialGold - goldRemoved, board.getGold());
- }
-
- @Theory
- public void removeGold_failsWhenTooMuch(@FromDataPoints("gold") int initialGold,
- @FromDataPoints("gold") int goldRemoved) {
- assumeTrue(goldRemoved >= 0);
- assumeTrue(initialGold < goldRemoved);
- thrown.expect(InsufficientFundsException.class);
- Board board = new Board(TestUtils.createWonder(), 0, new Settings(5));
- board.setGold(initialGold);
- board.removeGold(goldRemoved);
- }
-
- @Theory
- public void getNbCardsOfColor_properCount_singleColor(ResourceType type, @FromDataPoints("nbCards") int nbCards,
- @FromDataPoints("nbCards") int nbOtherCards, Color color) {
- Board board = TestUtils.createBoard(type);
- TestUtils.addCards(board, nbCards, nbOtherCards, color);
- assertEquals(nbCards, board.getNbCardsOfColor(Collections.singletonList(color)));
- }
-
- @Theory
- public void getNbCardsOfColor_properCount_multiColors(ResourceType type, @FromDataPoints("nbCards") int nbCards1,
- @FromDataPoints("nbCards") int nbCards2,
- @FromDataPoints("nbCards") int nbOtherCards, Color color1,
- Color color2) {
- Board board = TestUtils.createBoard(type);
- TestUtils.addCards(board, nbCards1, color1);
- TestUtils.addCards(board, nbCards2, color2);
- TestUtils.addCards(board, nbOtherCards, TestUtils.getDifferentColorFrom(color1, color2));
- assertEquals(nbCards1 + nbCards2, board.getNbCardsOfColor(Arrays.asList(color1, color2)));
- }
-
- @Test
- public void setCopiedGuild_succeedsOnPurpleCard() {
- Board board = TestUtils.createBoard(ResourceType.CLAY);
- Card card = TestUtils.createCard(Color.PURPLE);
-
- board.setCopiedGuild(card);
- assertSame(card, board.getCopiedGuild());
- }
-
- @Theory
- public void setCopiedGuild_failsOnNonPurpleCard(Color color) {
- assumeTrue(color != Color.PURPLE);
- Board board = TestUtils.createBoard(ResourceType.CLAY);
- Card card = TestUtils.createCard(color);
-
- thrown.expect(IllegalArgumentException.class);
- board.setCopiedGuild(card);
- }
-
- @Theory
- public void hasSpecial(SpecialAbility applied, SpecialAbility tested) {
- Board board = TestUtils.createBoard(ResourceType.CLAY);
- Table table = new Table(Collections.singletonList(board));
- SpecialAbilityActivation special = new SpecialAbilityActivation(applied);
-
- special.apply(table, 0);
-
- assertEquals(applied == tested, board.hasSpecial(tested));
- }
-
- @Test
- public void canPlayFreeCard() {
- Board board = TestUtils.createBoard(ResourceType.CLAY);
- Table table = new Table(Collections.singletonList(board));
- SpecialAbilityActivation special = new SpecialAbilityActivation(SpecialAbility.ONE_FREE_PER_AGE);
-
- special.apply(table, 0);
-
- assertTrue(board.canPlayFreeCard(0));
- assertTrue(board.canPlayFreeCard(1));
- assertTrue(board.canPlayFreeCard(2));
-
- board.consumeFreeCard(0);
-
- assertFalse(board.canPlayFreeCard(0));
- assertTrue(board.canPlayFreeCard(1));
- assertTrue(board.canPlayFreeCard(2));
-
- board.consumeFreeCard(1);
-
- assertFalse(board.canPlayFreeCard(0));
- assertFalse(board.canPlayFreeCard(1));
- assertTrue(board.canPlayFreeCard(2));
-
- board.consumeFreeCard(2);
-
- assertFalse(board.canPlayFreeCard(0));
- assertFalse(board.canPlayFreeCard(1));
- assertFalse(board.canPlayFreeCard(2));
- }
-
- @Theory
- public void computePoints_gold(@FromDataPoints("gold") int gold) {
- assumeTrue(gold >= 0);
- Board board = TestUtils.createBoard(ResourceType.WOOD);
- Table table = new Table(Collections.singletonList(board));
- board.setGold(gold);
-
- PlayerScore score = board.computePoints(table);
- assertEquals(gold / 3, (int) score.getPoints(ScoreCategory.GOLD));
- assertEquals(gold / 3, score.getTotalPoints());
- }
-
- @Theory
- public void computePoints_(@FromDataPoints("gold") int gold) {
- assumeTrue(gold >= 0);
- Board board = TestUtils.createBoard(ResourceType.WOOD);
- Table table = new Table(Collections.singletonList(board));
- board.setGold(gold);
-
- Effect effect = new RawPointsIncrease(5);
- TestUtils.playCardWithEffect(table, 0, Color.BLUE, effect);
-
- PlayerScore score = board.computePoints(table);
- assertEquals(gold / 3, (int) score.getPoints(ScoreCategory.GOLD));
- assertEquals(5, (int) score.getPoints(ScoreCategory.CIVIL));
- assertEquals(5 + gold / 3, score.getTotalPoints());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java
deleted file mode 100644
index b391c6b0..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/MilitaryTest.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.junit.Rule;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.FromDataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.boards.Military.UnknownAgeException;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class MilitaryTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @DataPoints("points")
- public static int[] points() {
- return new int[] {0, 1, 3, 5};
- }
-
- @DataPoints("ages")
- public static int[] ages() {
- return new int[] {1, 2, 3};
- }
-
- private static Military createMilitary(int age, int nbPointsPerVictory, int nbPointsPerDefeat) {
- Map<Integer, Integer> wonPointsPerAge = new HashMap<>();
- wonPointsPerAge.put(age, nbPointsPerVictory);
- return new Military(nbPointsPerDefeat, wonPointsPerAge);
- }
-
- @Theory
- public void victory_addsCorrectPoints(@FromDataPoints("ages") int age,
- @FromDataPoints("points") int nbPointsPerVictory) {
- Military military = createMilitary(age, nbPointsPerVictory, 0);
- int initialPoints = military.getTotalPoints();
-
- military.victory(age);
- assertEquals(initialPoints + nbPointsPerVictory, military.getTotalPoints());
- }
-
- @Theory
- public void victory_failsIfUnknownAge(@FromDataPoints("points") int nbPointsPerVictory) {
- Military military = createMilitary(0, nbPointsPerVictory, 0);
- thrown.expect(UnknownAgeException.class);
- military.victory(1);
- }
-
- @Theory
- public void defeat_removesCorrectPoints(@FromDataPoints("points") int nbPointsLostPerDefeat) {
- Military military = createMilitary(0, 0, nbPointsLostPerDefeat);
- int initialPoints = military.getTotalPoints();
-
- military.defeat();
- assertEquals(initialPoints - nbPointsLostPerDefeat, military.getTotalPoints());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java
deleted file mode 100644
index 9f60e572..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/RelativeBoardPositionTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class RelativeBoardPositionTest {
-
- @DataPoints
- public static int[] nbPlayers() {
- return new int[] {1, 2, 3, 5, 7, 9};
- }
-
- @Theory
- public void getIndexFrom_wrapLeft(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- int last = nbPlayers - 1;
- assertEquals(last, RelativeBoardPosition.LEFT.getIndexFrom(0, nbPlayers));
- assertEquals(0, RelativeBoardPosition.SELF.getIndexFrom(0, nbPlayers));
- assertEquals(1, RelativeBoardPosition.RIGHT.getIndexFrom(0, nbPlayers));
- }
-
- @Theory
- public void getIndexFrom_wrapRight(int nbPlayers) {
- assumeTrue(nbPlayers >= 2);
- int last = nbPlayers - 1;
- assertEquals(last - 1, RelativeBoardPosition.LEFT.getIndexFrom(last, nbPlayers));
- assertEquals(last, RelativeBoardPosition.SELF.getIndexFrom(last, nbPlayers));
- assertEquals(0, RelativeBoardPosition.RIGHT.getIndexFrom(last, nbPlayers));
- }
-
- @Theory
- public void getIndexFrom_noWrap(int nbPlayers) {
- assumeTrue(nbPlayers >= 3);
- assertEquals(0, RelativeBoardPosition.LEFT.getIndexFrom(1, nbPlayers));
- assertEquals(1, RelativeBoardPosition.SELF.getIndexFrom(1, nbPlayers));
- assertEquals(2, RelativeBoardPosition.RIGHT.getIndexFrom(1, nbPlayers));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java
deleted file mode 100644
index 24c63b31..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/boards/ScienceTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.luxons.sevenwonders.game.boards;
-
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class ScienceTest {
-
- @DataPoints
- public static int[][] quantitiesWithExpectedPoints() {
- // compasses, wheels, tablets, jokers, expected points
- return new int[][] {{0, 0, 0, 1, 1}, {0, 0, 1, 0, 1}, {0, 0, 0, 2, 4}, {0, 0, 1, 1, 4}, {0, 0, 2, 0, 4},
- {0, 0, 0, 3, 10}, {0, 0, 1, 2, 10}, {0, 1, 1, 1, 10}, {1, 1, 1, 0, 10}, {0, 0, 0, 4, 16},
- {0, 0, 1, 3, 16}, {0, 0, 2, 2, 16}, {0, 0, 3, 1, 16}, {0, 0, 4, 0, 16}};
- }
-
- @DataPoints
- public static int[] quantitiesDataPoints() {
- return new int[] {0, 1, 3, 5, 8};
- }
-
- @Test
- public void addAll_empty() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science empty = new Science();
- initial.addAll(empty);
- assertEquals(3, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(4, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(5, initial.getQuantity(ScienceType.TABLET));
- assertEquals(1, initial.getJokers());
- }
-
- @Test
- public void addAll_noJoker() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science other = TestUtils.createScience(1, 2, 3, 0);
- initial.addAll(other);
- assertEquals(4, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(6, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(8, initial.getQuantity(ScienceType.TABLET));
- assertEquals(1, initial.getJokers());
- }
-
- @Test
- public void addAll_withJokers() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science other = TestUtils.createScience(0, 0, 0, 3);
- initial.addAll(other);
- assertEquals(3, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(4, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(5, initial.getQuantity(ScienceType.TABLET));
- assertEquals(4, initial.getJokers());
- }
-
- @Test
- public void addAll_mixed() {
- Science initial = TestUtils.createScience(3, 4, 5, 1);
- Science other = TestUtils.createScience(1, 2, 3, 4);
- initial.addAll(other);
- assertEquals(4, initial.getQuantity(ScienceType.COMPASS));
- assertEquals(6, initial.getQuantity(ScienceType.WHEEL));
- assertEquals(8, initial.getQuantity(ScienceType.TABLET));
- assertEquals(5, initial.getJokers());
- }
-
- @Theory
- public void computePoints_compassesOnly_noJoker(int compasses) {
- Science science = TestUtils.createScience(compasses, 0, 0, 0);
- assertEquals(compasses * compasses, science.computePoints());
- }
-
- @Theory
- public void computePoints_wheelsOnly_noJoker(int wheels) {
- Science science = TestUtils.createScience(0, wheels, 0, 0);
- assertEquals(wheels * wheels, science.computePoints());
- }
-
- @Theory
- public void computePoints_tabletsOnly_noJoker(int tablets) {
- Science science = TestUtils.createScience(0, 0, tablets, 0);
- assertEquals(tablets * tablets, science.computePoints());
- }
-
- @Theory
- public void computePoints_allSameNoJoker(int eachSymbol) {
- Science science = TestUtils.createScience(eachSymbol, eachSymbol, eachSymbol, 0);
- assertEquals(3 * eachSymbol * eachSymbol + 7 * eachSymbol, science.computePoints());
- }
-
- @Theory
- public void computePoints_expectation(int[] expectation) {
- Science science = TestUtils.createScience(expectation[0], expectation[1], expectation[2], expectation[3]);
- assertEquals(expectation[4], science.computePoints());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java
deleted file mode 100644
index 6f637f87..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardBackTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class CardBackTest {
-
- @Test
- public void initializedWithImage() {
- String imagePath = "whateverimage.png";
- CardBack back = new CardBack(imagePath);
- assertEquals(imagePath, back.getImage());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java
deleted file mode 100644
index 437c5f21..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/CardTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertTrue;
-import static org.luxons.sevenwonders.game.test.TestUtils.createCard;
-
-public class CardTest {
-
- private Table table;
-
- private Card treeFarmCard;
-
- @Before
- public void initBoard() {
- Settings settings = new Settings(3);
-
- List<Board> boards = new ArrayList<>(3);
- boards.add(new Board(new Wonder("TestWonder", ResourceType.WOOD), 0, settings));
- boards.add(new Board(new Wonder("TestWonder", ResourceType.STONE), 1, settings));
- boards.add(new Board(new Wonder("TestWonder", ResourceType.PAPYRUS), 2, settings));
- table = new Table(boards);
-
- Requirements treeFarmRequirements = new Requirements();
- treeFarmRequirements.setGold(1);
-
- ProductionIncrease treeFarmEffect = new ProductionIncrease();
- treeFarmEffect.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY);
-
- List<Effect> effects = Collections.singletonList(treeFarmEffect);
-
- treeFarmCard = new Card("Tree Farm", Color.BROWN, treeFarmRequirements, effects, "", null, null);
- }
-
- @Test
- public void playCardCostingMoney() {
- table.getBoard(0).setGold(3);
- table.getBoard(1).setGold(3);
- table.getBoard(2).setGold(3);
- treeFarmCard.applyTo(table, 0, new ArrayList<>());
- assertEquals(2, table.getBoard(0).getGold());
- assertEquals(3, table.getBoard(1).getGold());
- assertEquals(3, table.getBoard(2).getGold());
- }
-
- @Test
- public void equals_falseWhenNull() {
- Card card = createCard("TestCard");
- //noinspection ObjectEqualsNull
- assertFalse(card.equals(null));
- }
-
- @Test
- public void equals_falseWhenDifferentClass() {
- Card card = createCard("TestCard");
- Object object = new Object();
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(card.equals(object));
- }
-
- @Test
- public void equals_trueWhenSame() {
- Card card = createCard("TestCard");
- assertEquals(card, card);
- }
-
- @Test
- public void equals_trueWhenSameContent() {
- Card card1 = createCard("TestCard");
- Card card2 = createCard("TestCard");
- assertTrue(card1.equals(card2));
- }
-
- @Test
- public void equals_falseWhenDifferentName() {
- Card card1 = createCard("TestCard1");
- Card card2 = createCard("TestCard2");
- assertFalse(card1.equals(card2));
- }
-
- @Test
- public void hashCode_sameWhenSameContent() {
- Card card1 = createCard("TestCard");
- Card card2 = createCard("TestCard");
- assertEquals(card1.hashCode(), card2.hashCode());
- }
-
- @Test
- public void hashCode_differentWhenDifferentName() {
- Card card1 = createCard("TestCard1");
- Card card2 = createCard("TestCard2");
- assertNotEquals(card1.hashCode(), card2.hashCode());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java
deleted file mode 100644
index 8adeb44d..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/DecksTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.rules.ExpectedException;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.cards.Decks.CardNotFoundException;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class DecksTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @DataPoints
- public static int[] dataPoints() {
- return new int[] {1, 2, 3, 5, 10};
- }
-
- private static Decks createDecks(int nbAges, int nbCardsPerAge) {
- Map<Integer, List<Card>> cardsPerAge = new HashMap<>();
- for (int age = 1; age <= nbAges; age++) {
- int firstCardNumber = (age - 1) * nbCardsPerAge;
- cardsPerAge.put(age, TestUtils.createSampleCards(firstCardNumber, nbCardsPerAge));
- }
- return new Decks(cardsPerAge);
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsOnNullNameWhenDeckIsEmpty() {
- Decks decks = createDecks(0, 0);
- decks.getCard(null);
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsOnEmptyNameWhenDeckIsEmpty() {
- Decks decks = createDecks(0, 0);
- decks.getCard("");
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsWhenDeckIsEmpty() {
- Decks decks = createDecks(0, 0);
- decks.getCard("Any name");
- }
-
- @Test(expected = CardNotFoundException.class)
- public void getCard_failsWhenCardIsNotFound() {
- Decks decks = createDecks(3, 20);
- decks.getCard("Unknown name");
- }
-
- @Test
- public void getCard_succeedsWhenCardIsFound() {
- Decks decks = createDecks(3, 20);
- Card card = decks.getCard("Test Card 3");
- assertEquals("Test Card 3", card.getName());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deal_failsOnZeroPlayers() {
- Decks decks = createDecks(3, 20);
- decks.deal(1, 0);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deal_failsOnMissingAge() {
- Decks decks = createDecks(2, 0);
- decks.deal(4, 10);
- }
-
- @Theory
- public void deal_failsWhenTooFewPlayers(int nbPlayers, int nbCards) {
- assumeTrue(nbCards % nbPlayers != 0);
- thrown.expect(IllegalArgumentException.class);
- Decks decks = createDecks(1, nbCards);
- decks.deal(1, nbPlayers);
- }
-
- @Theory
- public void deal_succeedsOnZeroCards(int nbPlayers) {
- Decks decks = createDecks(1, 0);
- Hands hands = decks.deal(1, nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- assertNotNull(hands.get(i));
- assertTrue(hands.get(i).isEmpty());
- }
- }
-
- @Theory
- public void deal_evenDistribution(int nbPlayers, int nbCardsPerPlayer) {
- int nbCardsPerAge = nbPlayers * nbCardsPerPlayer;
- Decks decks = createDecks(1, nbCardsPerAge);
- Hands hands = decks.deal(1, nbPlayers);
- for (int i = 0; i < nbPlayers; i++) {
- assertEquals(nbCardsPerPlayer, hands.get(i).size());
- }
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java
deleted file mode 100644
index ddd69b70..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandRotationDirectionTest.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class HandRotationDirectionTest {
-
- @Test
- public void testAgesDirections() {
- assertEquals(HandRotationDirection.LEFT, HandRotationDirection.forAge(1));
- assertEquals(HandRotationDirection.RIGHT, HandRotationDirection.forAge(2));
- assertEquals(HandRotationDirection.LEFT, HandRotationDirection.forAge(3));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java
deleted file mode 100644
index c20508e6..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/HandsTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.FromDataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.HandCard;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.cards.Hands.PlayerIndexOutOfBoundsException;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class HandsTest {
-
- @DataPoints("nbCardsPerPlayer")
- public static int[] nbCardsPerPlayer() {
- return new int[] {0, 1, 2, 3, 4, 5, 6, 7};
- }
-
- @DataPoints("nbPlayers")
- public static int[] nbPlayers() {
- return new int[] {3, 4, 5, 6, 7};
- }
-
- private static Hands createHands(int nbPlayers, int nbCardsPerPlayer) {
- Map<Integer, List<Card>> hands = new HashMap<>();
- for (int p = 0; p < nbPlayers; p++) {
- int firstCardNumber = (p - 1) * nbCardsPerPlayer;
- hands.put(p, TestUtils.createSampleCards(firstCardNumber, nbCardsPerPlayer));
- }
- return new Hands(hands, nbPlayers);
- }
-
- @Test(expected = PlayerIndexOutOfBoundsException.class)
- public void get_failsOnMissingPlayer() {
- Hands hands = createHands(4, 7);
- hands.get(5);
- }
-
- @Test
- public void get_retrievesCorrectCards() {
- List<Card> hand0 = TestUtils.createSampleCards(0, 5);
- List<Card> hand1 = TestUtils.createSampleCards(5, 10);
- Map<Integer, List<Card>> handsMap = new HashMap<>();
- handsMap.put(0, hand0);
- handsMap.put(1, hand1);
- Hands hands = new Hands(handsMap, 2);
- assertEquals(hand0, hands.get(0));
- assertEquals(hand1, hands.get(1));
- }
-
- @Theory
- public void isEmpty_falseWhenAtLeast1_allSame(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- assumeTrue(nbCardsPerPlayer >= 1);
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- assertFalse(hands.isEmpty());
- }
-
- @Theory
- public void isEmpty_trueWhenAllEmpty(@FromDataPoints("nbPlayers") int nbPlayers) {
- Hands hands = createHands(nbPlayers, 0);
- assertTrue(hands.isEmpty());
- }
-
- @Theory
- public void maxOneCardRemains_falseWhenAtLeast2_allSame(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- assumeTrue(nbCardsPerPlayer >= 2);
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- assertFalse(hands.maxOneCardRemains());
- }
-
- @Theory
- public void maxOneCardRemains_trueWhenAtMost1_allSame(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- assumeTrue(nbCardsPerPlayer <= 1);
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- assertTrue(hands.maxOneCardRemains());
- }
-
- @Theory
- public void maxOneCardRemains_trueWhenAtMost1_someZero(@FromDataPoints("nbPlayers") int nbPlayers) {
- Hands hands = createHands(nbPlayers, 1);
- hands.get(0).remove(0);
- assertTrue(hands.maxOneCardRemains());
- }
-
- @Theory
- public void gatherAndClear(@FromDataPoints("nbPlayers") int nbPlayers,
- @FromDataPoints("nbCardsPerPlayer") int nbCardsPerPlayer) {
- Hands hands = createHands(nbPlayers, nbCardsPerPlayer);
- List<Card> remainingCards = hands.gatherAndClear();
- assertEquals(nbPlayers * nbCardsPerPlayer, remainingCards.size());
- assertTrue(hands.isEmpty());
- }
-
- @Test
- public void rotate_movesOfCorrectOffset_right() {
- Hands hands = createHands(3, 7);
- Hands rotated = hands.rotate(HandRotationDirection.RIGHT);
- assertEquals(rotated.get(1), hands.get(0));
- assertEquals(rotated.get(2), hands.get(1));
- assertEquals(rotated.get(0), hands.get(2));
- }
-
- @Test
- public void rotate_movesOfCorrectOffset_left() {
- Hands hands = createHands(3, 7);
- Hands rotated = hands.rotate(HandRotationDirection.LEFT);
- assertEquals(rotated.get(2), hands.get(0));
- assertEquals(rotated.get(0), hands.get(1));
- assertEquals(rotated.get(1), hands.get(2));
- }
-
- @Test
- public void createHand_containsAllCards() {
- List<Card> hand0 = TestUtils.createSampleCards(0, 5);
- List<Card> hand1 = TestUtils.createSampleCards(5, 10);
- Map<Integer, List<Card>> handsMap = new HashMap<>();
- handsMap.put(0, hand0);
- handsMap.put(1, hand1);
- Hands hands = new Hands(handsMap, 2);
-
- Table table = TestUtils.createTable(2);
- List<HandCard> hand = hands.createHand(table, 0);
-
- for (HandCard handCard : hand) {
- assertTrue(hand0.contains(handCard.getCard()));
- }
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/cards/RequirementsTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/cards/RequirementsTest.java
deleted file mode 100644
index b01f9002..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/cards/RequirementsTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.luxons.sevenwonders.game.cards;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.Provider;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class RequirementsTest {
-
- @DataPoints
- public static int[] goldAmounts() {
- return new int[]{0, 1, 2, 5};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @Test
- public void getResources_emptyAfterInit() throws Exception {
- Requirements requirements = new Requirements();
- assertTrue(requirements.getResources().isEmpty());
- }
-
- @Test
- public void setResources_success() throws Exception {
- Requirements requirements = new Requirements();
- Resources resources = new Resources();
- requirements.setResources(resources);
- assertSame(resources, requirements.getResources());
- }
-
- @Theory
- public void goldRequirement(int boardGold, int requiredGold) {
- Requirements requirements = new Requirements();
- requirements.setGold(requiredGold);
-
- Board board = TestUtils.createBoard(ResourceType.CLAY, boardGold);
- Table table = new Table(Collections.singletonList(board));
-
- assertEquals(boardGold >= requiredGold, requirements.areMetWithoutNeighboursBy(board));
- assertEquals(boardGold >= requiredGold, requirements.areMetWithHelpBy(board, Collections.emptyList()));
- assertEquals(boardGold >= requiredGold, requirements.couldBeMetBy(table, 0));
- }
-
- @Theory
- public void resourceRequirement_initialResource(ResourceType initialResource, ResourceType requiredResource) {
- Requirements requirements = TestUtils.createRequirements(requiredResource);
-
- Board board = TestUtils.createBoard(initialResource, 0);
- Table table = new Table(Collections.singletonList(board));
-
- assertEquals(initialResource == requiredResource, requirements.areMetWithoutNeighboursBy(board));
- assertEquals(initialResource == requiredResource,
- requirements.areMetWithHelpBy(board, Collections.emptyList()));
-
- if (initialResource == requiredResource) {
- assertTrue(requirements.couldBeMetBy(table, 0));
- }
- }
-
- @Theory
- public void resourceRequirement_ownProduction(ResourceType initialResource, ResourceType producedResource,
- ResourceType requiredResource) {
- assumeTrue(initialResource != requiredResource);
-
- Requirements requirements = TestUtils.createRequirements(requiredResource);
-
- Board board = TestUtils.createBoard(initialResource, 0);
- board.getProduction().addFixedResource(producedResource, 1);
- Table table = new Table(Collections.singletonList(board));
-
- assertEquals(producedResource == requiredResource, requirements.areMetWithoutNeighboursBy(board));
- assertEquals(producedResource == requiredResource,
- requirements.areMetWithHelpBy(board, Collections.emptyList()));
-
- if (producedResource == requiredResource) {
- assertTrue(requirements.couldBeMetBy(table, 0));
- }
- }
-
- @Theory
- public void resourceRequirement_boughtResource(ResourceType initialResource, ResourceType boughtResource,
- ResourceType requiredResource) {
- assumeTrue(initialResource != requiredResource);
-
- Requirements requirements = TestUtils.createRequirements(requiredResource);
-
- Board board = TestUtils.createBoard(initialResource, 2);
- Board neighbourBoard = TestUtils.createBoard(initialResource, 0);
- neighbourBoard.getPublicProduction().addFixedResource(boughtResource, 1);
- Table table = new Table(Arrays.asList(board, neighbourBoard));
-
- BoughtResources resources = new BoughtResources();
- resources.setProvider(Provider.RIGHT_PLAYER);
- resources.setResources(TestUtils.createResources(boughtResource));
-
- assertFalse(requirements.areMetWithoutNeighboursBy(board));
- assertEquals(boughtResource == requiredResource,
- requirements.areMetWithHelpBy(board, Collections.singletonList(resources)));
-
- if (boughtResource == requiredResource) {
- assertTrue(requirements.couldBeMetBy(table, 0));
- }
- }
-
- @Theory
- public void pay_boughtResource(ResourceType initialResource, ResourceType requiredResource) {
- assumeTrue(initialResource != requiredResource);
-
- Requirements requirements = TestUtils.createRequirements(requiredResource);
-
- Board board = TestUtils.createBoard(initialResource, 2);
- Board neighbourBoard = TestUtils.createBoard(requiredResource, 0);
- Table table = new Table(Arrays.asList(board, neighbourBoard));
-
- BoughtResources boughtResources = new BoughtResources();
- boughtResources.setProvider(Provider.RIGHT_PLAYER);
- boughtResources.setResources(TestUtils.createResources(requiredResource));
-
- assertFalse(requirements.areMetWithoutNeighboursBy(board));
- assertTrue(requirements.areMetWithHelpBy(board, Collections.singletonList(boughtResources)));
- assertTrue(requirements.couldBeMetBy(table, 0));
-
- requirements.pay(table, 0, Collections.singletonList(boughtResources));
-
- assertEquals(0, board.getGold());
- assertEquals(2, neighbourBoard.getGold());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java
deleted file mode 100644
index e678e6a5..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionLoaderTest.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertNotNull;
-
-public class GameDefinitionLoaderTest {
-
- @Test
- public void successfulLoad() {
- GameDefinitionLoader loader = new GameDefinitionLoader();
- GameDefinition gameDefinition = loader.getGameDefinition();
- assertNotNull(gameDefinition);
- }
-
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java
deleted file mode 100644
index c693a2a2..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/GameDefinitionTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.luxons.sevenwonders.game.data;
-
-import org.junit.Test;
-import org.luxons.sevenwonders.game.Game;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-
-import static org.junit.Assert.assertNotNull;
-
-public class GameDefinitionTest {
-
- @Test
- public void successfulGameInit() {
- GameDefinition gameDefinition = new GameDefinitionLoader().getGameDefinition();
- assertNotNull(gameDefinition);
-
- Game game = gameDefinition.initGame(0, new CustomizableSettings(), 7);
- assertNotNull(game);
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java
deleted file mode 100644
index 0b7de3d6..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/definitions/WonderSidePickMethodTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.luxons.sevenwonders.game.data.definitions;
-
-import java.util.Random;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class WonderSidePickMethodTest {
-
- private Random random;
-
- private Random random2;
-
- @DataPoints
- public static WonderSide[] sides() {
- return WonderSide.values();
- }
-
- @Before
- public void setUp() {
- random = new Random(123); // starts with TRUE
- random2 = new Random(123456); // starts with FALSE
- }
-
- @Test
- public void pick_allA() {
- WonderSide side = null;
- for (int i = 0; i < 10; i++) {
- side = WonderSidePickMethod.ALL_A.pickSide(random, side);
- assertEquals(WonderSide.A, side);
- }
- }
-
- @Test
- public void pick_allB() {
- WonderSide side = null;
- for (int i = 0; i < 10; i++) {
- side = WonderSidePickMethod.ALL_B.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- }
- }
-
- @Test
- public void pick_eachRandom() {
- WonderSide side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, null);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random, side);
- assertEquals(WonderSide.A, side);
- }
-
- @Test
- public void pick_eachRandom2() {
- WonderSide side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, null);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.A, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.B, side);
- side = WonderSidePickMethod.EACH_RANDOM.pickSide(random2, side);
- assertEquals(WonderSide.B, side);
- }
-
- @Theory
- public void pick_allSameRandom_sameAsFirst(WonderSide firstSide) {
- WonderSide side = firstSide;
- for (int i = 0; i < 10; i++) {
- side = WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random, side);
- assertEquals(firstSide, side);
- }
- }
-
- @Test
- public void pick_allSameRandom_firstIsRandom() {
- assertEquals(WonderSide.A, WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random, null));
- assertEquals(WonderSide.B, WonderSidePickMethod.SAME_RANDOM_FOR_ALL.pickSide(random2, null));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java
deleted file mode 100644
index 861d5a09..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class NumericEffectSerializerTest {
-
- private Gson gson;
-
- @DataPoints
- public static int[] dataPoints() {
- return new int[] {-2, -1, 0, 1, 2, 5};
- }
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer())
- .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer())
- .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer())
- // ProductionIncrease is not a numeric effect, it is here for negative testing purpose
- .registerTypeAdapter(ProductionIncrease.class, new NumericEffectSerializer())
- .create();
- }
-
- @Test
- public void serialize_militaryReinforcements_null() {
- assertEquals("null", gson.toJson(null, MilitaryReinforcements.class));
- }
-
- @Test
- public void serialize_rawPointsIncrease_null() {
- assertEquals("null", gson.toJson(null, RawPointsIncrease.class));
- }
-
- @Test
- public void serialize_goldIncrease_null() {
- assertEquals("null", gson.toJson(null, GoldIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failOnUnknownType() {
- gson.toJson(new ProductionIncrease());
- }
-
- @Theory
- public void serialize_militaryReinforcements(int count) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(count);
- assertEquals(String.valueOf(count), gson.toJson(reinforcements));
- }
-
- @Theory
- public void serialize_rawPointsIncrease(int count) {
- RawPointsIncrease points = new RawPointsIncrease(count);
- assertEquals(String.valueOf(count), gson.toJson(points));
- }
-
- @Theory
- public void serialize_goldIncrease(int count) {
- GoldIncrease goldIncrease = new GoldIncrease(count);
- assertEquals(String.valueOf(count), gson.toJson(goldIncrease));
- }
-
- @Theory
- public void deserialize_militaryReinforcements(int count) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(count);
- assertEquals(reinforcements, gson.fromJson(String.valueOf(count), MilitaryReinforcements.class));
- }
-
- @Theory
- public void deserialize_rawPointsIncrease(int count) {
- RawPointsIncrease points = new RawPointsIncrease(count);
- assertEquals(points, gson.fromJson(String.valueOf(count), RawPointsIncrease.class));
- }
-
- @Theory
- public void deserialize_goldIncrease(int count) {
- GoldIncrease goldIncrease = new GoldIncrease(count);
- assertEquals(goldIncrease, gson.fromJson(String.valueOf(count), GoldIncrease.class));
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_militaryReinforcements_failOnEmptyString() {
- gson.fromJson("\"\"", MilitaryReinforcements.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_rawPointsIncrease_failOnEmptyString() {
- gson.fromJson("\"\"", RawPointsIncrease.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_goldIncrease_failOnEmptyString() {
- gson.fromJson("\"\"", GoldIncrease.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_militaryReinforcements_failOnNonNumericString() {
- gson.fromJson("\"abc\"", MilitaryReinforcements.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_rawPointsIncrease_failOnNonNumericString() {
- gson.fromJson("\"abc\"", RawPointsIncrease.class);
- }
-
- @Test(expected = NumberFormatException.class)
- public void deserialize_goldIncrease_failOnNonNumericString() {
- gson.fromJson("\"abc\"", GoldIncrease.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnUnknownType() {
- gson.fromJson("\"2\"", ProductionIncrease.class);
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java
deleted file mode 100644
index 8c5108ba..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionIncreaseSerializerTest.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.List;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.effects.ProductionIncrease;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-public class ProductionIncreaseSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- Type resourceTypeList = new TypeToken<List<ResourceType>>() {
- }.getType();
- gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer())
- .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer())
- .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer())
- .registerTypeAdapter(Production.class, new ProductionSerializer())
- .registerTypeAdapter(ProductionIncrease.class, new ProductionIncreaseSerializer())
- .create();
- }
-
- private static ProductionIncrease create(boolean sellable, int wood, int stone, int clay) {
- Production production = new Production();
- if (wood > 0) {
- production.addFixedResource(ResourceType.WOOD, wood);
- }
- if (stone > 0) {
- production.addFixedResource(ResourceType.STONE, stone);
- }
- if (clay > 0) {
- production.addFixedResource(ResourceType.CLAY, clay);
- }
- ProductionIncrease prodIncrease = new ProductionIncrease();
- prodIncrease.setProduction(production);
- prodIncrease.setSellable(sellable);
- return prodIncrease;
- }
-
- private static ProductionIncrease createChoice(boolean sellable, ResourceType... types) {
- Production production = new Production();
- production.addChoice(types);
- ProductionIncrease prodIncrease = new ProductionIncrease();
- prodIncrease.setProduction(production);
- prodIncrease.setSellable(sellable);
- return prodIncrease;
- }
-
- @Test
- public void serialize_nullAsNull() {
- assertEquals("null", gson.toJson(null, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_emptyProdIncreaseAsNull() {
- ProductionIncrease prodIncrease = new ProductionIncrease();
- assertEquals("null", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_singleType() {
- ProductionIncrease prodIncrease = create(true, 1, 0, 0);
- assertEquals("\"W\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_mixedTypes() {
- ProductionIncrease prodIncrease = create(true, 1, 1, 1);
- assertEquals("\"WSC\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_mixedTypes_notSellable() {
- ProductionIncrease prodIncrease = create(false, 1, 1, 1);
- assertEquals("\"(WSC)\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice2() {
- ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY);
- assertEquals("\"W/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice3() {
- ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY);
- assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice3_notSellable() {
- ProductionIncrease prodIncrease = createChoice(false, ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY);
- assertEquals("\"(W/O/C)\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice2_unordered() {
- ProductionIncrease prodIncrease = createChoice(true, ResourceType.CLAY, ResourceType.WOOD);
- assertEquals("\"W/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test
- public void serialize_choice3_unordered() {
- ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE);
- assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, ProductionIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failIfMultipleChoices() {
- ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY);
- prodIncrease.getProduction().addChoice(ResourceType.ORE, ResourceType.GLASS);
- gson.toJson(prodIncrease, ProductionIncrease.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failIfMixedFixedAndChoices() {
- ProductionIncrease prodIncrease = create(true, 1, 0, 0);
- prodIncrease.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY);
- gson.toJson(prodIncrease, ProductionIncrease.class);
- }
-
- @Test
- public void deserialize_nullFromNull() {
- assertNull(gson.fromJson("null", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_emptyList() {
- ProductionIncrease prodIncrease = new ProductionIncrease();
- assertEquals(prodIncrease, gson.fromJson("\"\"", ProductionIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageString() {
- gson.fromJson("\"this is garbage\"", ProductionIncrease.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageStringWithSlashes() {
- gson.fromJson("\"this/is/garbage\"", ProductionIncrease.class);
- }
-
- @Test
- public void deserialize_singleType() {
- ProductionIncrease prodIncrease = create(true, 1, 0, 0);
- assertEquals(prodIncrease, gson.fromJson("\"W\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_multipleTimesSameType_notSellable() {
- ProductionIncrease prodIncrease = create(false, 3, 0, 0);
- assertEquals(prodIncrease, gson.fromJson("\"(WWW)\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_mixedTypes() {
- ProductionIncrease prodIncrease = create(true, 1, 1, 1);
- assertEquals(prodIncrease, gson.fromJson("\"WCS\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_choice2() {
- ProductionIncrease prodIncrease = createChoice(true, ResourceType.WOOD, ResourceType.CLAY);
- assertEquals(prodIncrease, gson.fromJson("\"W/C\"", ProductionIncrease.class));
- }
-
- @Test
- public void deserialize_choice3_notSellable() {
- ProductionIncrease prodIncrease = createChoice(false, ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY);
- assertEquals(prodIncrease, gson.fromJson("\"(W/O/C)\"", ProductionIncrease.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnMultipleResourcesInChoice() {
- gson.fromJson("\"W/SS/C\"", ProductionIncrease.class);
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializerTest.java
deleted file mode 100644
index 86ee16e9..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ProductionSerializerTest.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.List;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-public class ProductionSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- Type resourceTypeList = new TypeToken<List<ResourceType>>() {
- }.getType();
- gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer())
- .registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer())
- .registerTypeAdapter(resourceTypeList, new ResourceTypesSerializer())
- .registerTypeAdapter(Production.class, new ProductionSerializer())
- .create();
- }
-
- private static Production create(int wood, int stone, int clay) {
- Production production = new Production();
- if (wood > 0) {
- production.addFixedResource(ResourceType.WOOD, wood);
- }
- if (stone > 0) {
- production.addFixedResource(ResourceType.STONE, stone);
- }
- if (clay > 0) {
- production.addFixedResource(ResourceType.CLAY, clay);
- }
- return production;
- }
-
- private static Production createChoice(ResourceType... types) {
- Production production = new Production();
- production.addChoice(types);
- return production;
- }
-
- @Test
- public void serialize_nullAsNull() {
- assertEquals("null", gson.toJson(null, Production.class));
- }
-
- @Test
- public void serialize_emptyProdIncreaseAsNull() {
- Production prodIncrease = new Production();
- assertEquals("null", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_singleType() {
- Production prodIncrease = create(1, 0, 0);
- assertEquals("\"W\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_multipleTimesSameType() {
- Production prodIncrease = create(3, 0, 0);
- assertEquals("\"WWW\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_mixedTypes() {
- Production prodIncrease = create(1, 1, 1);
- assertEquals("\"WSC\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_mixedTypesMultiple() {
- Production prodIncrease = create(2, 1, 2);
- assertEquals("\"WWSCC\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_choice2() {
- Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY);
- assertEquals("\"W/C\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_choice3() {
- Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY);
- assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_choice2_unordered() {
- Production prodIncrease = createChoice(ResourceType.CLAY, ResourceType.WOOD);
- assertEquals("\"W/C\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test
- public void serialize_choice3_unordered() {
- Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE);
- assertEquals("\"W/O/C\"", gson.toJson(prodIncrease, Production.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failIfMultipleChoices() {
- Production production = createChoice(ResourceType.WOOD, ResourceType.CLAY);
- production.addChoice(ResourceType.ORE, ResourceType.GLASS);
- gson.toJson(production, Production.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void serialize_failIfMixedFixedAndChoices() {
- Production production = create(1, 0, 0);
- production.addChoice(ResourceType.WOOD, ResourceType.CLAY);
- gson.toJson(production, Production.class);
- }
-
- @Test
- public void deserialize_nullFromNull() {
- assertNull(gson.fromJson("null", Production.class));
- }
-
- @Test
- public void deserialize_emptyList() {
- Production prodIncrease = new Production();
- assertEquals(prodIncrease, gson.fromJson("\"\"", Production.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageString() {
- gson.fromJson("\"this is garbage\"", Production.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageStringWithSlashes() {
- gson.fromJson("\"this/is/garbage\"", Production.class);
- }
-
- @Test
- public void deserialize_singleType() {
- Production prodIncrease = create(1, 0, 0);
- assertEquals(prodIncrease, gson.fromJson("\"W\"", Production.class));
- }
-
- @Test
- public void deserialize_multipleTimesSameType() {
- Production prodIncrease = create(3, 0, 0);
- assertEquals(prodIncrease, gson.fromJson("\"WWW\"", Production.class));
- }
-
- @Test
- public void deserialize_mixedTypes() {
- Production prodIncrease = create(1, 1, 1);
- assertEquals(prodIncrease, gson.fromJson("\"WCS\"", Production.class));
- }
-
- @Test
- public void deserialize_mixedTypes_unordered() {
- Production prodIncrease = create(1, 3, 2);
- assertEquals(prodIncrease, gson.fromJson("\"SCWCSS\"", Production.class));
- }
-
- @Test
- public void deserialize_choice2() {
- Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY);
- assertEquals(prodIncrease, gson.fromJson("\"W/C\"", Production.class));
- }
-
- @Test
- public void deserialize_choice3() {
- Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.ORE, ResourceType.CLAY);
- assertEquals(prodIncrease, gson.fromJson("\"W/O/C\"", Production.class));
- }
-
- @Test
- public void deserialize_choice2_unordered() {
- Production prodIncrease = createChoice(ResourceType.CLAY, ResourceType.WOOD);
- assertEquals(prodIncrease, gson.fromJson("\"W/C\"", Production.class));
- }
-
- @Test
- public void deserialize_choice3_unordered() {
- Production prodIncrease = createChoice(ResourceType.WOOD, ResourceType.CLAY, ResourceType.ORE);
- assertEquals(prodIncrease, gson.fromJson("\"W/O/C\"", Production.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnMultipleResourcesInChoice() {
- gson.fromJson("\"W/SS/C\"", Production.class);
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java
deleted file mode 100644
index 3a688f4d..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypeSerializerTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-public class ResourceTypeSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(ResourceType.class, new ResourceTypeSerializer()).create();
- }
-
- @Test
- public void serialize_useSymbolForEachType() {
- for (ResourceType type : ResourceType.values()) {
- String expectedJson = "\"" + type.getSymbol() + "\"";
- assertEquals(expectedJson, gson.toJson(type));
- }
- }
-
- @Test
- public void deserialize_useSymbolForEachType() {
- for (ResourceType type : ResourceType.values()) {
- String typeInJson = "\"" + type.getSymbol() + "\"";
- assertEquals(type, gson.fromJson(typeInJson, ResourceType.class));
- }
- }
-
- @Test
- public void deserialize_nullFromNull() {
- assertNull(gson.fromJson("null", ResourceType.class));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failsOnEmptyString() {
- gson.fromJson("\"\"", ResourceType.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failsOnGarbageString() {
- gson.fromJson("\"thisisgarbage\"", ResourceType.class);
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java
deleted file mode 100644
index b5011fa5..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourceTypesSerializerTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import java.lang.reflect.Type;
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.reflect.TypeToken;
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-public class ResourceTypesSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(createListTypeToken(), new ResourceTypesSerializer()).create();
- }
-
- private static Type createListTypeToken() {
- return new TypeToken<List<ResourceType>>() {
- }.getType();
- }
-
- @Test
- public void serialize_null() {
- assertEquals("null", gson.toJson(null, createListTypeToken()));
- }
-
- @Test
- public void serialize_emptyList() {
- List<ResourceType> types = new ArrayList<>();
- assertEquals("\"\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void serialize_singleType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- assertEquals("\"W\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void serialize_multipleTimesSameType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- assertEquals("\"WWW\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void serialize_mixedTypes() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.CLAY);
- types.add(ResourceType.STONE);
- assertEquals("\"WCS\"", gson.toJson(types, createListTypeToken()));
- }
-
- @Test
- public void deserialize_null() {
- assertNull(gson.fromJson("null", createListTypeToken()));
- }
-
- @Test
- public void deserialize_emptyList() {
- List<ResourceType> types = new ArrayList<>();
- assertEquals(types, gson.fromJson("\"\"", createListTypeToken()));
- }
-
- @Test
- public void deserialize_singleType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- assertEquals(types, gson.fromJson("\"W\"", createListTypeToken()));
- }
-
- @Test
- public void deserialize_multipleTimesSameType() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- types.add(ResourceType.WOOD);
- assertEquals(types, gson.fromJson("\"WWW\"", createListTypeToken()));
- }
-
- @Test
- public void deserialize_mixedTypes() {
- List<ResourceType> types = new ArrayList<>();
- types.add(ResourceType.WOOD);
- types.add(ResourceType.CLAY);
- types.add(ResourceType.STONE);
- assertEquals(types, gson.fromJson("\"WCS\"", createListTypeToken()));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java
deleted file mode 100644
index e1dc4e2b..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ResourcesSerializerTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-public class ResourcesSerializerTest {
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(Resources.class, new ResourcesSerializer()).create();
- }
-
- @Test
- public void serialize_null() {
- assertEquals("null", gson.toJson(null, Resources.class));
- }
-
- @Test
- public void serialize_emptyResourcesToNull() {
- Resources resources = new Resources();
- assertEquals("null", gson.toJson(resources));
- }
-
- @Test
- public void serialize_singleType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- assertEquals("\"W\"", gson.toJson(resources));
- }
-
- @Test
- public void serialize_multipleTimesSameType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- assertEquals("\"WWW\"", gson.toJson(resources));
- }
-
- @Test
- public void serialize_mixedTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 1);
- assertEquals("\"WSC\"", gson.toJson(resources));
- }
-
- @Test
- public void serialize_mixedTypes_unordered() {
- Resources resources = new Resources();
- resources.add(ResourceType.CLAY, 1);
- resources.add(ResourceType.WOOD, 2);
- resources.add(ResourceType.CLAY, 1);
- resources.add(ResourceType.STONE, 1);
- assertEquals("\"WWSCC\"", gson.toJson(resources));
- }
-
- @Test
- public void deserialize_null() {
- assertNull(gson.fromJson("null", Resources.class));
- }
-
- @Test
- public void deserialize_emptyList() {
- Resources resources = new Resources();
- assertEquals(resources, gson.fromJson("\"\"", Resources.class));
- }
-
- @Test
- public void deserialize_singleType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- assertEquals(resources, gson.fromJson("\"W\"", Resources.class));
- }
-
- @Test
- public void deserialize_multipleTimesSameType() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- assertEquals(resources, gson.fromJson("\"WWW\"", Resources.class));
- }
-
- @Test
- public void deserialize_mixedTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- resources.add(ResourceType.CLAY, 1);
- resources.add(ResourceType.STONE, 1);
- assertEquals(resources, gson.fromJson("\"WCS\"", Resources.class));
- }
-
- @Test
- public void deserialize_mixedTypes_unordered() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- resources.add(ResourceType.CLAY, 2);
- resources.add(ResourceType.STONE, 3);
- assertEquals(resources, gson.fromJson("\"SCWCSS\"", Resources.class));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java
deleted file mode 100644
index 0387e198..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/data/serializers/ScienceProgressSerializerTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.luxons.sevenwonders.game.data.serializers;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import org.junit.Before;
-import org.junit.Test;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class ScienceProgressSerializerTest {
-
- private static final String COMPASS_STR = "\"COMPASS\"";
-
- private static final String WHEEL_STR = "\"WHEEL\"";
-
- private static final String TABLET_STR = "\"TABLET\"";
-
- private static final String JOKER_STR = "\"any\"";
-
- private Gson gson;
-
- @Before
- public void setUp() {
- gson = new GsonBuilder().registerTypeAdapter(ScienceProgress.class, new ScienceProgressSerializer()).create();
- }
-
- @Test
- public void serialize_emptyToNull() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 0);
- String json = gson.toJson(progress);
- assertEquals("null", json);
- }
-
- @Test
- public void serialize_oneCompass() {
- ScienceProgress progress = TestUtils.createScienceProgress(1, 0, 0, 0);
- String json = gson.toJson(progress);
- assertEquals(COMPASS_STR, json);
- }
-
- @Test
- public void serialize_oneWheel() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 1, 0, 0);
- String json = gson.toJson(progress);
- assertEquals(WHEEL_STR, json);
- }
-
- @Test
- public void serialize_oneTablet() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 1, 0);
- String json = gson.toJson(progress);
- assertEquals(TABLET_STR, json);
- }
-
- @Test
- public void serialize_oneJoker() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 1);
- String json = gson.toJson(progress);
- assertEquals(JOKER_STR, json);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleCompasses() {
- ScienceProgress progress = TestUtils.createScienceProgress(2, 0, 0, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleWheels() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 2, 0, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleTablets() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 2, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMultipleJokers() {
- ScienceProgress progress = TestUtils.createScienceProgress(0, 0, 0, 2);
- gson.toJson(progress);
- }
-
- @Test(expected = UnsupportedOperationException.class)
- public void serialize_failOnMixedElements() {
- ScienceProgress progress = TestUtils.createScienceProgress(1, 1, 0, 0);
- gson.toJson(progress);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnEmptyString() {
- gson.fromJson("\"\"", ScienceProgress.class);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void deserialize_failOnGarbageString() {
- gson.fromJson("thisisgarbage", ScienceProgress.class);
- }
-
- @Test
- public void deserialize_compass() {
- ScienceProgress progress = gson.fromJson(COMPASS_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(1, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(0, progress.getScience().getJokers());
- }
-
- @Test
- public void deserialize_wheel() {
- ScienceProgress progress = gson.fromJson(WHEEL_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(1, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(0, progress.getScience().getJokers());
- }
-
- @Test
- public void deserialize_tablet() {
- ScienceProgress progress = gson.fromJson(TABLET_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(1, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(0, progress.getScience().getJokers());
- }
-
- @Test
- public void deserialize_joker() {
- ScienceProgress progress = gson.fromJson(JOKER_STR, ScienceProgress.class);
- assertNotNull(progress.getScience());
- assertEquals(0, progress.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(0, progress.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(1, progress.getScience().getJokers());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java
deleted file mode 100644
index bacea896..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/BonusPerBoardElementTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Arrays;
-import java.util.Collections;
-
-import org.junit.Before;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.BoardElementType;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class BonusPerBoardElementTest {
-
- private Table table;
-
- @DataPoints
- public static int[] values() {
- return new int[]{0, 1, 2, 3};
- }
-
- @DataPoints
- public static Color[] colors() {
- return Color.values();
- }
-
- @DataPoints
- public static RelativeBoardPosition[] positions() {
- return RelativeBoardPosition.values();
- }
-
- @Before
- public void setUp() {
- table = TestUtils.createTable(4);
- }
-
- private static BonusPerBoardElement createBonus(BoardElementType type, int gold, int points, Color... colors) {
- BonusPerBoardElement bonus = new BonusPerBoardElement();
- bonus.setType(type);
- bonus.setGold(gold);
- bonus.setPoints(points);
- bonus.setColors(Arrays.asList(colors));
- return bonus;
- }
-
- @Theory
- public void computePoints_countsCards(RelativeBoardPosition boardPosition, int nbCards, int nbOtherCards,
- int points, int gold, Color color) {
- Board board = table.getBoard(0, boardPosition);
- TestUtils.addCards(board, nbCards, nbOtherCards, color);
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.CARD, gold, points, color);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- assertEquals(nbCards * points, bonus.computePoints(table, 0));
- }
-
- @Theory
- public void computePoints_countsDefeatTokens(RelativeBoardPosition boardPosition, int nbDefeatTokens, int points,
- int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbDefeatTokens; i++) {
- board.getMilitary().defeat();
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.DEFEAT_TOKEN, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- assertEquals(nbDefeatTokens * points, bonus.computePoints(table, 0));
- }
-
- @Theory
- public void computePoints_countsWonderStages(RelativeBoardPosition boardPosition, int nbStages, int points,
- int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbStages; i++) {
- board.getWonder().buildLevel(new CardBack(""));
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.BUILT_WONDER_STAGES, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- assertEquals(nbStages * points, bonus.computePoints(table, 0));
- }
-
- @Theory
- public void apply_countsCards(RelativeBoardPosition boardPosition, int nbCards, int nbOtherCards, int points,
- int gold, Color color) {
- Board board = table.getBoard(0, boardPosition);
- TestUtils.addCards(board, nbCards, nbOtherCards, color);
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.CARD, gold, points, color);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- Board selfBoard = table.getBoard(0);
- int initialGold = selfBoard.getGold();
- bonus.apply(table, 0);
- assertEquals(initialGold + nbCards * gold, selfBoard.getGold());
- }
-
- @Theory
- public void apply_countsDefeatTokens(RelativeBoardPosition boardPosition, int nbDefeatTokens, int points,
- int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbDefeatTokens; i++) {
- board.getMilitary().defeat();
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.DEFEAT_TOKEN, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- Board selfBoard = table.getBoard(0);
- int initialGold = selfBoard.getGold();
- bonus.apply(table, 0);
- assertEquals(initialGold + nbDefeatTokens * gold, selfBoard.getGold());
- }
-
- @Theory
- public void apply_countsWonderStages(RelativeBoardPosition boardPosition, int nbStages, int points, int gold) {
- Board board = table.getBoard(0, boardPosition);
- for (int i = 0; i < nbStages; i++) {
- board.getWonder().buildLevel(new CardBack(""));
- }
-
- BonusPerBoardElement bonus = createBonus(BoardElementType.BUILT_WONDER_STAGES, gold, points);
- bonus.setBoards(Collections.singletonList(boardPosition));
-
- Board selfBoard = table.getBoard(0);
- int initialGold = selfBoard.getGold();
- bonus.apply(table, 0);
- assertEquals(initialGold + nbStages * gold, selfBoard.getGold());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java
deleted file mode 100644
index c6819d3a..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/DiscountTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.Assume;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.Provider;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class DiscountTest {
-
- @DataPoints
- public static int[] discountedPrices() {
- return new int[] {0, 1, 2};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @DataPoints
- public static Provider[] providers() {
- return Provider.values();
- }
-
- @Theory
- public void apply_givesDiscountedPrice(int discountedPrice, ResourceType discountedType, Provider provider) {
- Board board = TestUtils.createBoard(ResourceType.CLAY, 3);
- Discount discount = new Discount();
- discount.setDiscountedPrice(discountedPrice);
- discount.getProviders().add(provider);
- discount.getResourceTypes().add(discountedType);
- discount.apply(board);
-
- BoughtResources boughtResources = TestUtils.createBoughtResources(provider, discountedType);
- assertEquals(discountedPrice, board.getTradingRules().computeCost(boughtResources));
- }
-
- @Theory
- public void apply_doesNotAffectOtherResources(int discountedPrice, ResourceType discountedType, Provider provider,
- ResourceType otherType, Provider otherProvider) {
- Assume.assumeTrue(otherProvider != provider);
- Assume.assumeTrue(otherType != discountedType);
-
- Board board = TestUtils.createBoard(ResourceType.CLAY, 3);
- Discount discount = new Discount();
- discount.setDiscountedPrice(discountedPrice);
- discount.getProviders().add(provider);
- discount.getResourceTypes().add(discountedType);
- discount.apply(board);
-
- // this is the default in the settings used by TestUtils.createBoard()
- int normalPrice = 2;
-
- BoughtResources fromOtherType = TestUtils.createBoughtResources(provider, otherType);
- assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherType));
-
- BoughtResources fromOtherProvider = TestUtils.createBoughtResources(otherProvider, discountedType);
- assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherProvider));
-
- BoughtResources fromOtherProviderAndType = TestUtils.createBoughtResources(otherProvider, otherType);
- assertEquals(normalPrice, board.getTradingRules().computeCost(fromOtherProviderAndType));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java
deleted file mode 100644
index be124251..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/GoldIncreaseTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(Theories.class)
-public class GoldIncreaseTest {
-
- @DataPoints
- public static int[] goldAmounts() {
- return new int[] {-5, -1, 0, 1, 2, 5, 10};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @Theory
- public void apply_increaseGoldWithRightAmount(int initialAmount, int goldIncreaseAmount, ResourceType type) {
- Board board = TestUtils.createBoard(type, initialAmount);
- GoldIncrease goldIncrease = new GoldIncrease(goldIncreaseAmount);
-
- goldIncrease.apply(board);
-
- assertEquals(initialAmount + goldIncreaseAmount, board.getGold());
- }
-
- @Theory
- public void computePoints_isAlwaysZero(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- Table table = TestUtils.createTable(5);
- assertEquals(0, goldIncrease.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- //noinspection ObjectEqualsNull
- assertFalse(goldIncrease.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(gold);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(goldIncrease.equals(reinforcements));
- }
-
- @Theory
- public void equals_trueWhenSame(int gold) {
- GoldIncrease goldIncrease = new GoldIncrease(gold);
- assertEquals(goldIncrease, goldIncrease);
- }
-
- @Theory
- public void equals_trueWhenSameContent(int gold) {
- GoldIncrease goldIncrease1 = new GoldIncrease(gold);
- GoldIncrease goldIncrease2 = new GoldIncrease(gold);
- assertTrue(goldIncrease1.equals(goldIncrease2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(int gold) {
- GoldIncrease goldIncrease1 = new GoldIncrease(gold);
- GoldIncrease goldIncrease2 = new GoldIncrease(gold);
- assertEquals(goldIncrease1.hashCode(), goldIncrease2.hashCode());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java
deleted file mode 100644
index 478af746..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcementsTest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(Theories.class)
-public class MilitaryReinforcementsTest {
-
- @DataPoints
- public static int[] shieldCounts() {
- return new int[] {0, 1, 2, 3, 5};
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @Theory
- public void apply_increaseGoldWithRightAmount(int initialShields, int additionalShields, ResourceType type) {
- Board board = TestUtils.createBoard(type);
- board.getMilitary().addShields(initialShields);
-
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(additionalShields);
- reinforcements.apply(board);
-
- assertEquals(initialShields + additionalShields, board.getMilitary().getNbShields());
- }
-
- @Theory
- public void computePoints_isAlwaysZero(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- Table table = TestUtils.createTable(5);
- assertEquals(0, reinforcements.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- //noinspection ObjectEqualsNull
- assertFalse(reinforcements.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- GoldIncrease goldIncrease = new GoldIncrease(shields);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(reinforcements.equals(goldIncrease));
- }
-
- @Theory
- public void equals_trueWhenSame(int shields) {
- MilitaryReinforcements reinforcements = new MilitaryReinforcements(shields);
- assertEquals(reinforcements, reinforcements);
- }
-
- @Theory
- public void equals_trueWhenSameContent(int shields) {
- MilitaryReinforcements reinforcements1 = new MilitaryReinforcements(shields);
- MilitaryReinforcements reinforcements2 = new MilitaryReinforcements(shields);
- assertTrue(reinforcements1.equals(reinforcements2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(int shields) {
- MilitaryReinforcements reinforcements1 = new MilitaryReinforcements(shields);
- MilitaryReinforcements reinforcements2 = new MilitaryReinforcements(shields);
- assertEquals(reinforcements1.hashCode(), reinforcements2.hashCode());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java
deleted file mode 100644
index b6a47292..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ProductionIncreaseTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(Theories.class)
-public class ProductionIncreaseTest {
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- private static ProductionIncrease createProductionIncrease(ResourceType... types) {
- ProductionIncrease effect = new ProductionIncrease();
- effect.getProduction().addAll(TestUtils.createFixedProduction(types));
- return effect;
- }
-
- @Theory
- public void apply_boardContainsAddedResourceType(ResourceType initialType, ResourceType addedType,
- ResourceType extraType) {
- Board board = TestUtils.createBoard(initialType);
- ProductionIncrease effect = createProductionIncrease(addedType);
- effect.setSellable(false);
-
- effect.apply(board);
-
- Resources resources = TestUtils.createResources(initialType, addedType);
- assertTrue(board.getProduction().contains(resources));
- assertFalse(board.getPublicProduction().contains(resources));
-
- Resources moreResources = TestUtils.createResources(initialType, addedType, extraType);
- assertFalse(board.getProduction().contains(moreResources));
- assertFalse(board.getPublicProduction().contains(moreResources));
- }
-
- @Theory
- public void apply_boardContainsAddedResourceType_sellable(ResourceType initialType, ResourceType addedType,
- ResourceType extraType) {
- Board board = TestUtils.createBoard(initialType);
- ProductionIncrease effect = createProductionIncrease(addedType);
- effect.setSellable(true);
-
- effect.apply(board);
-
- Resources resources = TestUtils.createResources(initialType, addedType);
- assertTrue(board.getProduction().contains(resources));
- assertTrue(board.getPublicProduction().contains(resources));
-
- Resources moreResources = TestUtils.createResources(initialType, addedType, extraType);
- assertFalse(board.getProduction().contains(moreResources));
- assertFalse(board.getPublicProduction().contains(moreResources));
- }
-
- @Theory
- public void computePoints_isAlwaysZero(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- Table table = TestUtils.createTable(5);
- assertEquals(0, effect.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- //noinspection ObjectEqualsNull
- assertFalse(effect.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- Production production = TestUtils.createFixedProduction(addedType);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(effect.equals(production));
- }
-
- @Theory
- public void equals_trueWhenSame(ResourceType addedType) {
- ProductionIncrease effect = createProductionIncrease(addedType);
- assertEquals(effect, effect);
- }
-
- @Theory
- public void equals_trueWhenSameContent(ResourceType addedType) {
- ProductionIncrease effect1 = createProductionIncrease(addedType);
- ProductionIncrease effect2 = createProductionIncrease(addedType);
- assertTrue(effect1.equals(effect2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(ResourceType addedType) {
- ProductionIncrease effect1 = createProductionIncrease(addedType);
- ProductionIncrease effect2 = createProductionIncrease(addedType);
- assertEquals(effect1.hashCode(), effect2.hashCode());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java
deleted file mode 100644
index 020eda73..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/RawPointsIncreaseTest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(Theories.class)
-public class RawPointsIncreaseTest {
-
- @DataPoints
- public static int[] points() {
- return new int[] {0, 1, 2, 3, 5};
- }
-
- @Theory
- public void computePoints_equalsNbOfPoints(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- Table table = TestUtils.createTable(5);
- assertEquals(points, rawPointsIncrease.computePoints(table, 0));
- }
-
- @Theory
- public void equals_falseWhenNull(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- //noinspection ObjectEqualsNull
- assertFalse(rawPointsIncrease.equals(null));
- }
-
- @Theory
- public void equals_falseWhenDifferentClass(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- GoldIncrease goldIncrease = new GoldIncrease(points);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(rawPointsIncrease.equals(goldIncrease));
- }
-
- @Theory
- public void equals_trueWhenSame(int points) {
- RawPointsIncrease rawPointsIncrease = new RawPointsIncrease(points);
- assertEquals(rawPointsIncrease, rawPointsIncrease);
- }
-
- @Theory
- public void equals_trueWhenSameContent(int points) {
- RawPointsIncrease rawPointsIncrease1 = new RawPointsIncrease(points);
- RawPointsIncrease rawPointsIncrease2 = new RawPointsIncrease(points);
- assertTrue(rawPointsIncrease1.equals(rawPointsIncrease2));
- }
-
- @Theory
- public void hashCode_sameWhenSameContent(int points) {
- RawPointsIncrease rawPointsIncrease1 = new RawPointsIncrease(points);
- RawPointsIncrease rawPointsIncrease2 = new RawPointsIncrease(points);
- assertEquals(rawPointsIncrease1.hashCode(), rawPointsIncrease2.hashCode());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java
deleted file mode 100644
index b5402a7e..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/ScienceProgressTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.Science;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-
-@RunWith(Theories.class)
-public class ScienceProgressTest {
-
- @DataPoints
- public static int[] elementsCount() {
- return new int[] {0, 1, 2};
- }
-
- @Theory
- public void apply_initContainsAddedScience(int initCompasses, int initWheels, int initTablets, int initJokers,
- int compasses, int wheels, int tablets, int jokers) {
- Board board = TestUtils.createBoard(ResourceType.ORE);
- Science initialScience = TestUtils.createScience(initCompasses, initWheels, initTablets, initJokers);
- board.getScience().addAll(initialScience);
-
- ScienceProgress effect = TestUtils.createScienceProgress(compasses, wheels, tablets, jokers);
- effect.apply(board);
-
- assertEquals(initCompasses + compasses, board.getScience().getQuantity(ScienceType.COMPASS));
- assertEquals(initWheels + wheels, board.getScience().getQuantity(ScienceType.WHEEL));
- assertEquals(initTablets + tablets, board.getScience().getQuantity(ScienceType.TABLET));
- assertEquals(initJokers + jokers, board.getScience().getJokers());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java
deleted file mode 100644
index 0f30a3a5..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/effects/SpecialAbilityActivationTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.luxons.sevenwonders.game.effects;
-
-import java.util.Arrays;
-
-import org.junit.Assume;
-import org.junit.Test;
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.BoardElementType;
-import org.luxons.sevenwonders.game.boards.RelativeBoardPosition;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(Theories.class)
-public class SpecialAbilityActivationTest {
-
- @DataPoints
- public static SpecialAbility[] abilities() {
- return SpecialAbility.values();
- }
-
- @DataPoints
- public static RelativeBoardPosition[] neighbours() {
- return new RelativeBoardPosition[] {RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT};
- }
-
- @DataPoints
- public static Card[] guilds() {
- BonusPerBoardElement bonus = new BonusPerBoardElement();
- bonus.setType(BoardElementType.CARD);
- bonus.setColors(Arrays.asList(Color.GREY, Color.BROWN));
- bonus.setBoards(Arrays.asList(RelativeBoardPosition.LEFT, RelativeBoardPosition.RIGHT));
- bonus.setPoints(1);
-
- BonusPerBoardElement bonus2 = new BonusPerBoardElement();
- bonus2.setType(BoardElementType.BUILT_WONDER_STAGES);
- bonus2.setBoards(
- Arrays.asList(RelativeBoardPosition.LEFT, RelativeBoardPosition.SELF, RelativeBoardPosition.RIGHT));
- bonus2.setPoints(1);
-
- return new Card[] {TestUtils.createGuildCard(1, bonus), TestUtils.createGuildCard(2, bonus2)};
- }
-
- @Theory
- public void apply_addsAbility(SpecialAbility ability) {
- SpecialAbilityActivation effect = new SpecialAbilityActivation(ability);
- Table table = TestUtils.createTable(5);
-
- effect.apply(table, 0);
-
- Board board = table.getBoard(0);
- assertTrue(board.hasSpecial(ability));
- }
-
- @Theory
- public void computePoints_zeroExceptForCopyGuild(SpecialAbility ability) {
- Assume.assumeTrue(ability != SpecialAbility.COPY_GUILD);
-
- SpecialAbilityActivation effect = new SpecialAbilityActivation(ability);
- Table table = TestUtils.createTable(5);
-
- assertEquals(0, effect.computePoints(table, 0));
- }
-
- @Theory
- public void computePoints_copiedGuild(Card guildCard, RelativeBoardPosition neighbour) {
- SpecialAbilityActivation effect = new SpecialAbilityActivation(SpecialAbility.COPY_GUILD);
- Table table = TestUtils.createTable(5);
-
- Board neighbourBoard = table.getBoard(0, neighbour);
- neighbourBoard.addCard(guildCard);
-
- Board board = table.getBoard(0);
- board.setCopiedGuild(guildCard);
-
- int directPointsFromGuildCard = guildCard.getEffects().stream().mapToInt(e -> e.computePoints(table, 0)).sum();
- assertEquals(directPointsFromGuildCard, effect.computePoints(table, 0));
- }
-
- @Test(expected = IllegalStateException.class)
- public void computePoints_copyGuild_failWhenNoChosenGuild() {
- SpecialAbilityActivation effect = new SpecialAbilityActivation(SpecialAbility.COPY_GUILD);
- Table table = TestUtils.createTable(5);
- effect.computePoints(table, 0);
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/BestPriceCalculatorTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/BestPriceCalculatorTest.java
deleted file mode 100644
index e6438789..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/BestPriceCalculatorTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.Arrays;
-
-import org.junit.Test;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-
-public class BestPriceCalculatorTest {
-
- @Test
- public void bestPrice_0forEmptyResources() {
- Table table = TestUtils.createTable(3);
- Resources resources = new Resources();
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 0));
- }
-
- @Test
- public void bestPrice_fixedResources_defaultCost() {
- Board left = TestUtils.createBoard(ResourceType.STONE);
- Board main = TestUtils.createBoard(ResourceType.STONE);
- Board right = TestUtils.createBoard(ResourceType.WOOD);
- Table table = new Table(Arrays.asList(main, right, left));
-
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 0));
- assertEquals(2, BestPriceCalculator.bestPrice(resources, table, 1));
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 2));
- }
-
- @Test
- public void bestPrice_fixedResources_overridenCost() {
- Board main = TestUtils.createBoard(ResourceType.STONE);
- main.getTradingRules().setCost(ResourceType.WOOD, Provider.RIGHT_PLAYER, 1);
-
- Board left = TestUtils.createBoard(ResourceType.WOOD);
- Board right = TestUtils.createBoard(ResourceType.WOOD);
- Board opposite = TestUtils.createBoard(ResourceType.GLASS);
- Table table = new Table(Arrays.asList(main, right, opposite, left));
-
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- assertEquals(1, BestPriceCalculator.bestPrice(resources, table, 0));
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 1));
- assertEquals(2, BestPriceCalculator.bestPrice(resources, table, 2));
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 3));
- }
-
- @Test
- public void bestPrice_mixedResources_overridenCost() {
- Board left = TestUtils.createBoard(ResourceType.WOOD);
-
- Board main = TestUtils.createBoard(ResourceType.STONE);
- main.getTradingRules().setCost(ResourceType.WOOD, Provider.RIGHT_PLAYER, 1);
-
- Board right = TestUtils.createBoard(ResourceType.ORE);
- right.getProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY);
- right.getPublicProduction().addChoice(ResourceType.WOOD, ResourceType.CLAY);
-
- Table table = new Table(Arrays.asList(main, right, left));
-
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 1);
- assertEquals(1, BestPriceCalculator.bestPrice(resources, table, 0));
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 1));
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 2));
- }
-
- @Test
- public void bestPrice_chooseCheapest() {
- Board left = TestUtils.createBoard(ResourceType.WOOD);
-
- Board main = TestUtils.createBoard(ResourceType.WOOD);
- main.getProduction().addChoice(ResourceType.ORE, ResourceType.CLAY);
- main.getTradingRules().setCost(ResourceType.CLAY, Provider.RIGHT_PLAYER, 1);
-
- Board right = TestUtils.createBoard(ResourceType.WOOD);
- right.getProduction().addFixedResource(ResourceType.ORE, 1);
- right.getProduction().addFixedResource(ResourceType.CLAY, 1);
- right.getPublicProduction().addFixedResource(ResourceType.ORE, 1);
- right.getPublicProduction().addFixedResource(ResourceType.CLAY, 1);
-
- Table table = new Table(Arrays.asList(main, right, left));
-
- Resources resources = new Resources();
- resources.add(ResourceType.ORE, 1);
- resources.add(ResourceType.CLAY, 1);
- assertEquals(1, BestPriceCalculator.bestPrice(resources, table, 0));
- assertEquals(0, BestPriceCalculator.bestPrice(resources, table, 1));
- assertEquals(4, BestPriceCalculator.bestPrice(resources, table, 2));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java
deleted file mode 100644
index 2247147c..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ProductionTest.java
+++ /dev/null
@@ -1,324 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ProductionTest {
-
- private Resources emptyResources;
-
- private Resources resources1Wood;
-
- private Resources resources1Stone;
-
- private Resources resources1Stone1Wood;
-
- private Resources resources2Stones;
-
- private Resources resources2Stones3Clay;
-
- @Before
- public void init() {
- emptyResources = new Resources();
-
- resources1Wood = new Resources();
- resources1Wood.add(ResourceType.WOOD, 1);
-
- resources1Stone = new Resources();
- resources1Stone.add(ResourceType.STONE, 1);
-
- resources1Stone1Wood = new Resources();
- resources1Stone1Wood.add(ResourceType.STONE, 1);
- resources1Stone1Wood.add(ResourceType.WOOD, 1);
-
- resources2Stones = new Resources();
- resources2Stones.add(ResourceType.STONE, 2);
-
- resources2Stones3Clay = new Resources();
- resources2Stones3Clay.add(ResourceType.STONE, 2);
- resources2Stones3Clay.add(ResourceType.CLAY, 3);
- }
-
- @Test
- public void contains_newProductionContainsEmpty() {
- Production production = new Production();
- assertTrue(production.contains(emptyResources));
- }
-
- @Test
- public void contains_singleFixedResource_noneAtAll() {
- Production production = new Production();
- assertFalse(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_notEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 1);
- assertFalse(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_justEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 2);
- assertTrue(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_moreThanEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- assertTrue(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_singleFixedResource_moreThanEnough_amongOthers() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- production.addFixedResource(ResourceType.CLAY, 2);
- assertTrue(production.contains(resources2Stones));
- }
-
- @Test
- public void contains_multipleFixedResources_notEnoughOfOne() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- production.addFixedResource(ResourceType.CLAY, 1);
- assertFalse(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_multipleFixedResources_notEnoughOfBoth() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 1);
- production.addFixedResource(ResourceType.CLAY, 1);
- assertFalse(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_multipleFixedResources_moreThanEnough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.STONE, 3);
- production.addFixedResource(ResourceType.CLAY, 5);
- assertTrue(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_singleChoice_containsEmpty() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- assertTrue(production.contains(emptyResources));
- }
-
- @Test
- public void contains_singleChoice_enough() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Wood));
- assertTrue(production.contains(resources1Stone));
- }
-
- @Test
- public void contains_multipleChoices_notBoth() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- production.addChoice(ResourceType.STONE, ResourceType.CLAY);
- assertFalse(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void contains_multipleChoices_enough() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void contains_multipleChoices_enoughReverseOrder() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void contains_multipleChoices_moreThanEnough() {
- Production production = new Production();
- production.addChoice(ResourceType.LOOM, ResourceType.GLASS, ResourceType.PAPYRUS);
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void contains_mixedFixedAndChoice_enough() {
- Production production = new Production();
- production.addFixedResource(ResourceType.WOOD, 1);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void addAll_empty() {
- Production production = new Production();
- production.addAll(emptyResources);
- assertTrue(production.contains(emptyResources));
- }
-
- @Test
- public void addAll_singleResource() {
- Production production = new Production();
- production.addAll(resources1Stone);
- assertTrue(production.contains(resources1Stone));
- }
-
- @Test
- public void addAll_multipleResources() {
- Production production = new Production();
- production.addAll(resources2Stones3Clay);
- assertTrue(production.contains(resources2Stones3Clay));
- }
-
- @Test
- public void addAll_production_multipleFixedResources() {
- Production production = new Production();
- production.addAll(resources2Stones3Clay);
-
- Production production2 = new Production();
- production2.addAll(production);
-
- assertTrue(production2.contains(resources2Stones3Clay));
- }
-
- @Test
- public void addAll_production_multipleChoices() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
-
- Production production2 = new Production();
- production2.addAll(production);
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void addAll_production_mixedFixedResourcesAndChoices() {
- Production production = new Production();
- production.addFixedResource(ResourceType.WOOD, 1);
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
-
- Production production2 = new Production();
- production2.addAll(production);
-
- assertTrue(production.contains(resources1Stone1Wood));
- }
-
- @Test
- public void asChoices_empty() {
- Production production = new Production();
- assertTrue(production.asChoices().isEmpty());
- }
-
- @Test
- public void asChoices_onlyChoices() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.WOOD);
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- production.addChoice(ResourceType.CLAY, ResourceType.LOOM, ResourceType.GLASS);
- assertEquals(production.getAlternativeResources(), production.asChoices());
- }
-
- @Test
- public void asChoices_onlyFixed() {
- Production production = new Production();
- production.addFixedResource(ResourceType.WOOD, 1);
- production.addFixedResource(ResourceType.CLAY, 2);
-
- Set<Set<ResourceType>> expected = new HashSet<>();
- expected.add(EnumSet.of(ResourceType.WOOD));
- expected.add(EnumSet.of(ResourceType.CLAY));
- expected.add(EnumSet.of(ResourceType.CLAY));
-
- assertEquals(expected, production.asChoices());
- }
-
- @Test
- public void asChoices_mixed() {
- Production production = new Production();
- production.addChoice(ResourceType.STONE, ResourceType.ORE);
- production.addChoice(ResourceType.CLAY, ResourceType.LOOM, ResourceType.GLASS);
- production.addFixedResource(ResourceType.WOOD, 1);
- production.addFixedResource(ResourceType.CLAY, 2);
-
- Set<Set<ResourceType>> expected = new HashSet<>();
- expected.add(EnumSet.of(ResourceType.STONE, ResourceType.ORE));
- expected.add(EnumSet.of(ResourceType.CLAY, ResourceType.LOOM, ResourceType.GLASS));
- expected.add(EnumSet.of(ResourceType.WOOD));
- expected.add(EnumSet.of(ResourceType.CLAY));
- expected.add(EnumSet.of(ResourceType.CLAY));
-
- assertEquals(expected, production.asChoices());
- }
-
- @Test
- public void equals_falseWhenNull() {
- Production production = new Production();
- production.addFixedResource(ResourceType.GLASS, 1);
- production.addChoice(ResourceType.ORE, ResourceType.WOOD);
- //noinspection ObjectEqualsNull
- assertFalse(production.equals(null));
- }
-
- @Test
- public void equals_falseWhenDifferentClass() {
- Production production = new Production();
- production.addFixedResource(ResourceType.GLASS, 1);
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 1);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(production.equals(resources));
- }
-
- @Test
- public void equals_trueWhenSame() {
- Production production = new Production();
- assertEquals(production, production);
- }
-
- @Test
- public void equals_trueWhenSameContent() {
- Production production1 = new Production();
- Production production2 = new Production();
- assertTrue(production1.equals(production2));
- production1.addFixedResource(ResourceType.GLASS, 1);
- production2.addFixedResource(ResourceType.GLASS, 1);
- assertTrue(production1.equals(production2));
- production1.addChoice(ResourceType.ORE, ResourceType.WOOD);
- production2.addChoice(ResourceType.ORE, ResourceType.WOOD);
- assertTrue(production1.equals(production2));
- }
-
- @Test
- public void hashCode_sameWhenSameContent() {
- Production production1 = new Production();
- Production production2 = new Production();
- assertEquals(production1.hashCode(), production2.hashCode());
- production1.addFixedResource(ResourceType.GLASS, 1);
- production2.addFixedResource(ResourceType.GLASS, 1);
- assertEquals(production1.hashCode(), production2.hashCode());
- production1.addChoice(ResourceType.ORE, ResourceType.WOOD);
- production2.addChoice(ResourceType.ORE, ResourceType.WOOD);
- assertEquals(production1.hashCode(), production2.hashCode());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java
deleted file mode 100644
index 1f260a11..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/ResourcesTest.java
+++ /dev/null
@@ -1,485 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.NoSuchElementException;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.rules.ExpectedException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-public class ResourcesTest {
-
- @Rule
- public ExpectedException thrown = ExpectedException.none();
-
- @Test
- public void init_shouldBeEmpty() {
- Resources resources = new Resources();
- for (ResourceType resourceType : ResourceType.values()) {
- assertEquals(0, resources.getQuantity(resourceType));
- }
- assertEquals(0, resources.size());
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void add_zero() {
- Resources resources = new Resources();
- resources.add(ResourceType.CLAY, 0);
- assertEquals(0, resources.getQuantity(ResourceType.CLAY));
- assertEquals(0, resources.size());
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void add_simple() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- assertEquals(3, resources.getQuantity(ResourceType.WOOD));
- assertEquals(3, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void add_multipleCallsStacked() {
- Resources resources = new Resources();
- resources.add(ResourceType.ORE, 3);
- resources.add(ResourceType.ORE, 2);
- assertEquals(5, resources.getQuantity(ResourceType.ORE));
- assertEquals(5, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void add_interlaced() {
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 3);
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.WOOD, 4);
- resources.add(ResourceType.GLASS, 2);
- assertEquals(5, resources.getQuantity(ResourceType.GLASS));
- assertEquals(10, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void remove_some() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- resources.remove(ResourceType.WOOD, 2);
- assertEquals(1, resources.getQuantity(ResourceType.WOOD));
- assertEquals(1, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void remove_all() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 3);
- resources.remove(ResourceType.WOOD, 3);
- assertEquals(0, resources.getQuantity(ResourceType.WOOD));
- assertEquals(0, resources.size());
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void remove_tooMany() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 2);
-
- thrown.expect(NoSuchElementException.class);
- resources.remove(ResourceType.WOOD, 3);
- }
-
- @Test
- public void addAll_empty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
-
- resources.addAll(emptyResources);
- assertEquals(1, resources.getQuantity(ResourceType.STONE));
- assertEquals(3, resources.getQuantity(ResourceType.CLAY));
- assertEquals(0, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- assertEquals(4, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void addAll_zeros() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
- emptyResources.add(ResourceType.STONE, 0);
- emptyResources.add(ResourceType.CLAY, 0);
-
- resources.addAll(emptyResources);
- assertEquals(1, resources.getQuantity(ResourceType.STONE));
- assertEquals(3, resources.getQuantity(ResourceType.CLAY));
- assertEquals(0, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- assertEquals(4, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void addAll_same() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 6);
-
- resources.addAll(resources2);
- assertEquals(3, resources.getQuantity(ResourceType.STONE));
- assertEquals(9, resources.getQuantity(ResourceType.CLAY));
- assertEquals(0, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- assertEquals(12, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void addAll_overlap() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources.add(ResourceType.CLAY, 6);
- resources.add(ResourceType.ORE, 4);
-
- resources.addAll(resources2);
- assertEquals(1, resources.getQuantity(ResourceType.STONE));
- assertEquals(9, resources.getQuantity(ResourceType.CLAY));
- assertEquals(4, resources.getQuantity(ResourceType.ORE));
- assertEquals(0, resources.getQuantity(ResourceType.GLASS));
- assertEquals(0, resources.getQuantity(ResourceType.LOOM));
- assertEquals(14, resources.size());
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void contains_emptyContainsEmpty() {
- Resources emptyResources = new Resources();
- Resources emptyResources2 = new Resources();
- assertTrue(emptyResources.contains(emptyResources2));
- }
-
- @Test
- public void contains_singleTypeContainsEmpty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
-
- Resources emptyResources = new Resources();
-
- assertTrue(resources.contains(emptyResources));
- }
-
- @Test
- public void contains_multipleTypesContainsEmpty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
-
- assertTrue(resources.contains(emptyResources));
- }
-
- @Test
- public void contains_self() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources));
- }
-
- @Test
- public void contains_allOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void contains_someOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void contains_someOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 3);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void contains_allOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 4);
-
- assertTrue(resources.contains(resources2));
- }
-
- @Test
- public void minus_empty() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources emptyResources = new Resources();
-
- Resources diff = resources.minus(emptyResources);
- assertEquals(1, diff.getQuantity(ResourceType.STONE));
- assertEquals(3, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_self() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources);
- assertEquals(0, diff.getQuantity(ResourceType.STONE));
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_allOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 1);
- resources.add(ResourceType.CLAY, 3);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.STONE));
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_someOfEachType() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.STONE, 1);
- resources2.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources2);
- assertEquals(1, diff.getQuantity(ResourceType.STONE));
- assertEquals(1, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_someOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 3);
-
- Resources diff = resources.minus(resources2);
- assertEquals(2, diff.getQuantity(ResourceType.STONE));
- assertEquals(1, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_allOfSomeTypes() {
- Resources resources = new Resources();
- resources.add(ResourceType.STONE, 2);
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 4);
-
- Resources diff = resources.minus(resources2);
- assertEquals(2, diff.getQuantity(ResourceType.STONE));
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- assertEquals(0, diff.getQuantity(ResourceType.ORE));
- assertEquals(0, diff.getQuantity(ResourceType.GLASS));
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_tooMuchOfExistingType() {
- Resources resources = new Resources();
- resources.add(ResourceType.CLAY, 4);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.CLAY, 5);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.CLAY));
- }
-
- @Test
- public void minus_someOfAnAbsentType() {
- Resources resources = new Resources();
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.LOOM, 5);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void minus_someOfATypeWithZero() {
- Resources resources = new Resources();
- resources.add(ResourceType.LOOM, 0);
-
- Resources resources2 = new Resources();
- resources2.add(ResourceType.LOOM, 5);
-
- Resources diff = resources.minus(resources2);
- assertEquals(0, diff.getQuantity(ResourceType.LOOM));
- }
-
- @Test
- public void isEmpty_noElement() {
- Resources resources = new Resources();
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_singleZeroElement() {
- Resources resources = new Resources();
- resources.add(ResourceType.LOOM, 0);
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_multipleZeroElements() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 0);
- resources.add(ResourceType.ORE, 0);
- resources.add(ResourceType.LOOM, 0);
- assertTrue(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_singleElementMoreThanZero() {
- Resources resources = new Resources();
- resources.add(ResourceType.LOOM, 3);
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_mixedZeroAndNonZeroElements() {
- Resources resources = new Resources();
- resources.add(ResourceType.WOOD, 0);
- resources.add(ResourceType.LOOM, 3);
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void isEmpty_mixedZeroAndNonZeroElements_reverseOrder() {
- Resources resources = new Resources();
- resources.add(ResourceType.ORE, 3);
- resources.add(ResourceType.PAPYRUS, 0);
- assertFalse(resources.isEmpty());
- }
-
- @Test
- public void equals_falseWhenNull() {
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 1);
- //noinspection ObjectEqualsNull
- assertFalse(resources.equals(null));
- }
-
- @Test
- public void equals_falseWhenDifferentClass() {
- Resources resources = new Resources();
- resources.add(ResourceType.GLASS, 1);
- Production production = new Production();
- production.addFixedResource(ResourceType.GLASS, 1);
- //noinspection EqualsBetweenInconvertibleTypes
- assertFalse(resources.equals(production));
- }
-
- @Test
- public void equals_trueWhenSame() {
- Resources resources = new Resources();
- assertEquals(resources, resources);
- }
-
- @Test
- public void equals_trueWhenSameContent() {
- Resources resources1 = new Resources();
- Resources resources2 = new Resources();
- assertTrue(resources1.equals(resources2));
- resources1.add(ResourceType.GLASS, 1);
- resources2.add(ResourceType.GLASS, 1);
- assertTrue(resources1.equals(resources2));
- }
-
- @Test
- public void hashCode_sameWhenSameContent() {
- Resources resources1 = new Resources();
- Resources resources2 = new Resources();
- assertEquals(resources1.hashCode(), resources2.hashCode());
- resources1.add(ResourceType.GLASS, 1);
- resources2.add(ResourceType.GLASS, 1);
- assertEquals(resources1.hashCode(), resources2.hashCode());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java b/backend/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java
deleted file mode 100644
index 0fd1b52b..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/resources/TradingRulesTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.luxons.sevenwonders.game.resources;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.junit.experimental.theories.DataPoints;
-import org.junit.experimental.theories.Theories;
-import org.junit.experimental.theories.Theory;
-import org.junit.runner.RunWith;
-import org.luxons.sevenwonders.game.test.TestUtils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assume.assumeTrue;
-
-@RunWith(Theories.class)
-public class TradingRulesTest {
-
- @DataPoints
- public static int[] costs() {
- return new int[]{0, 1, 2};
- }
-
- @DataPoints
- public static Provider[] providers() {
- return Provider.values();
- }
-
- @DataPoints
- public static ResourceType[] resourceTypes() {
- return ResourceType.values();
- }
-
- @Theory
- public void setCost_overridesCost(int defaultCost, int overriddenCost, Provider overriddenProvider,
- Provider provider, ResourceType type) {
- assumeTrue(defaultCost != overriddenCost);
- assumeTrue(overriddenProvider != provider);
-
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(type, overriddenProvider, overriddenCost);
-
- assertEquals(overriddenCost, rules.getCost(type, overriddenProvider));
- assertEquals(defaultCost, rules.getCost(type, provider));
- }
-
- @Theory
- public void computeCost_zeroForNoResources(int defaultCost) {
- TradingRules rules = new TradingRules(defaultCost);
- assertEquals(0, rules.computeCost(new ArrayList<>()));
- }
-
- @Theory
- public void computeCost_defaultCostWhenNoOverride(int defaultCost, Provider provider, ResourceType type) {
- TradingRules rules = new TradingRules(defaultCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type);
- assertEquals(defaultCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_twiceDefaultFor2Resources(int defaultCost, Provider provider, ResourceType type) {
- TradingRules rules = new TradingRules(defaultCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type, type);
- assertEquals(2 * defaultCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_overriddenCost(int defaultCost, int overriddenCost, Provider provider, ResourceType type) {
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(type, provider, overriddenCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type);
- assertEquals(overriddenCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_defaultCostWhenOverrideOnOtherProviderOrType(int defaultCost, int overriddenCost,
- Provider overriddenProvider,
- ResourceType overriddenType, Provider provider,
- ResourceType type) {
- assumeTrue(overriddenProvider != provider || overriddenType != type);
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(overriddenType, overriddenProvider, overriddenCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, type);
- assertEquals(defaultCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_oneDefaultAndOneOverriddenType(int defaultCost, int overriddenCost,
- ResourceType overriddenType, Provider provider,
- ResourceType type) {
- assumeTrue(overriddenType != type);
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(overriddenType, provider, overriddenCost);
- BoughtResources resources = TestUtils.createBoughtResources(provider, overriddenType, type);
- assertEquals(defaultCost + overriddenCost, rules.computeCost(Collections.singletonList(resources)));
- }
-
- @Theory
- public void computeCost_oneDefaultAndOneOverriddenProvider(int defaultCost, int overriddenCost,
- Provider overriddenProvider, Provider provider,
- ResourceType type) {
- assumeTrue(overriddenProvider != provider);
- TradingRules rules = new TradingRules(defaultCost);
- rules.setCost(type, overriddenProvider, overriddenCost);
-
- List<BoughtResources> boughtResources = new ArrayList<>(2);
- boughtResources.add(TestUtils.createBoughtResources(provider, type));
- boughtResources.add(TestUtils.createBoughtResources(overriddenProvider, type));
-
- assertEquals(defaultCost + overriddenCost, rules.computeCost(boughtResources));
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java b/backend/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java
deleted file mode 100644
index 4b727944..00000000
--- a/backend/src/test/java/org/luxons/sevenwonders/game/test/TestUtils.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.luxons.sevenwonders.game.test;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import org.luxons.sevenwonders.game.Settings;
-import org.luxons.sevenwonders.game.api.CustomizableSettings;
-import org.luxons.sevenwonders.game.api.Table;
-import org.luxons.sevenwonders.game.boards.Board;
-import org.luxons.sevenwonders.game.boards.Science;
-import org.luxons.sevenwonders.game.boards.ScienceType;
-import org.luxons.sevenwonders.game.cards.Card;
-import org.luxons.sevenwonders.game.cards.Color;
-import org.luxons.sevenwonders.game.cards.Requirements;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.ScienceProgress;
-import org.luxons.sevenwonders.game.resources.BoughtResources;
-import org.luxons.sevenwonders.game.resources.Production;
-import org.luxons.sevenwonders.game.resources.Provider;
-import org.luxons.sevenwonders.game.resources.ResourceType;
-import org.luxons.sevenwonders.game.resources.Resources;
-import org.luxons.sevenwonders.game.wonders.Wonder;
-import org.luxons.sevenwonders.game.wonders.WonderStage;
-
-public class TestUtils {
-
- private static final long SEED = 42;
-
- public static CustomizableSettings createCustomizableSettings() {
- CustomizableSettings customizableSettings = new CustomizableSettings();
- customizableSettings.setRandomSeedForTests(SEED);
- return customizableSettings;
- }
-
- private static Settings createSettings(int nbPlayers) {
- return new Settings(nbPlayers, createCustomizableSettings());
- }
-
- public static Table createTable(int nbPlayers) {
- return new Table(createBoards(nbPlayers));
- }
-
- private static List<Board> createBoards(int count) {
- Settings settings = createSettings(count);
- List<Board> boards = new ArrayList<>(count);
- for (int i = 0; i < count; i++) {
- boards.add(createBoard(settings, ResourceType.WOOD));
- }
- return boards;
- }
-
- private static Board createBoard(Settings settings, ResourceType initialResource) {
- Wonder wonder = createWonder(initialResource);
- return new Board(wonder, 0, settings);
- }
-
- public static Board createBoard(ResourceType initialResource) {
- return createBoard(createSettings(5), initialResource);
- }
-
- private static Board createBoard(ResourceType initialResource, ResourceType... production) {
- Board board = createBoard(initialResource);
- board.getProduction().addAll(createFixedProduction(production));
- return board;
- }
-
- public static Board createBoard(ResourceType initialResource, int gold, ResourceType... production) {
- Board board = createBoard(initialResource, production);
- board.setGold(gold);
- return board;
- }
-
- public static Wonder createWonder() {
- return createWonder(ResourceType.WOOD);
- }
-
- public static Wonder createWonder(ResourceType initialResource) {
- WonderStage stage1 = new WonderStage();
- stage1.setRequirements(new Requirements());
- WonderStage stage2 = new WonderStage();
- stage1.setRequirements(new Requirements());
- WonderStage stage3 = new WonderStage();
- stage1.setRequirements(new Requirements());
- return new Wonder("Test Wonder " + initialResource.getSymbol(), initialResource, stage1, stage2, stage3);
- }
-
- public static Production createFixedProduction(ResourceType... producedTypes) {
- Production production = new Production();
- Resources fixedProducedResources = production.getFixedResources();
- fixedProducedResources.addAll(createResources(producedTypes));
- return production;
- }
-
- public static Resources createResources(ResourceType... types) {
- Resources resources = new Resources();
- for (ResourceType producedType : types) {
- resources.add(producedType, 1);
- }
- return resources;
- }
-
- public static BoughtResources createBoughtResources(Provider provider, ResourceType... resources) {
- BoughtResources boughtResources = new BoughtResources();
- boughtResources.setProvider(provider);
- boughtResources.setResources(TestUtils.createResources(resources));
- return boughtResources;
- }
-
- public static Requirements createRequirements(ResourceType... types) {
- Resources resources = createResources(types);
- Requirements requirements = new Requirements();
- requirements.setResources(resources);
- return requirements;
- }
-
- public static List<Card> createSampleCards(int fromIndex, int nbCards) {
- List<Card> sampleCards = new ArrayList<>();
- for (int i = fromIndex; i < fromIndex + nbCards; i++) {
- sampleCards.add(createCard(i, Color.BLUE));
- }
- return sampleCards;
- }
-
- public static Card createCard(String name) {
- return new Card(name, Color.BLUE, new Requirements(), null, null, null, null);
- }
-
- public static Card createCard(Color color) {
- return new Card("Test Card", color, new Requirements(), null, null, null, null);
- }
-
- public static Card createCard(Color color, Effect effect) {
- List<Effect> effects = Collections.singletonList(effect);
- return new Card("Test Card", color, new Requirements(), effects, null, null, null);
- }
-
- private static Card createCard(int num, Color color) {
- return new Card("Test Card " + num, color, new Requirements(), null, null, null, null);
- }
-
- public static Card createGuildCard(int num, Effect effect) {
- List<Effect> effects = Collections.singletonList(effect);
- return new Card("Test Guild " + num, Color.PURPLE, new Requirements(), effects, null, null, null);
- }
-
- public static void addCards(Board board, int nbCardsOfColor, int nbOtherCards, Color color) {
- addCards(board, nbCardsOfColor, color);
- Color otherColor = getDifferentColorFrom(color);
- addCards(board, nbOtherCards, otherColor);
- }
-
- public static void addCards(Board board, int nbCards, Color color) {
- for (int i = 0; i < nbCards; i++) {
- board.addCard(createCard(i, color));
- }
- }
-
- public static Color getDifferentColorFrom(Color... colors) {
- List<Color> forbiddenColors = Arrays.asList(colors);
- for (Color color : Color.values()) {
- if (!forbiddenColors.contains(color)) {
- return color;
- }
- }
- throw new IllegalArgumentException("All colors are forbidden!");
- }
-
- public static ScienceProgress createScienceProgress(int compasses, int wheels, int tablets, int jokers) {
- ScienceProgress progress = new ScienceProgress();
- progress.setScience(TestUtils.createScience(compasses, wheels, tablets, jokers));
- return progress;
- }
-
- public static Science createScience(int compasses, int wheels, int tablets, int jokers) {
- Science science = new Science();
- if (compasses > 0) {
- science.add(ScienceType.COMPASS, compasses);
- }
- if (wheels > 0) {
- science.add(ScienceType.WHEEL, wheels);
- }
- if (tablets > 0) {
- science.add(ScienceType.TABLET, tablets);
- }
- if (jokers > 0) {
- science.addJoker(jokers);
- }
- return science;
- }
-
- public static void playCardWithEffect(Table table, int playerIndex, Color color, Effect effect) {
- Card card = createCard(color, effect);
- Board board = table.getBoard(playerIndex);
- board.addCard(card);
- card.applyTo(table, playerIndex, Collections.emptyList());
- }
-}
diff --git a/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java b/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java
index 4ba7d6e3..444e7aaa 100644
--- a/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java
+++ b/backend/src/test/java/org/luxons/sevenwonders/repositories/LobbyRepositoryTest.java
@@ -2,7 +2,6 @@ package org.luxons.sevenwonders.repositories;
import org.junit.Before;
import org.junit.Test;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
import org.luxons.sevenwonders.lobby.Lobby;
import org.luxons.sevenwonders.lobby.Player;
import org.luxons.sevenwonders.repositories.LobbyRepository.LobbyNotFoundException;
@@ -18,7 +17,7 @@ public class LobbyRepositoryTest {
@Before
public void setUp() {
- repository = new LobbyRepository(new GameDefinitionLoader());
+ repository = new LobbyRepository();
}
@Test
diff --git a/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java b/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java
index bdf6c8c9..604b927d 100644
--- a/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java
+++ b/backend/src/test/java/org/luxons/sevenwonders/validation/DestinationAccessValidatorTest.java
@@ -2,7 +2,6 @@ package org.luxons.sevenwonders.validation;
import org.junit.Before;
import org.junit.Test;
-import org.luxons.sevenwonders.game.data.GameDefinitionLoader;
import org.luxons.sevenwonders.lobby.Lobby;
import org.luxons.sevenwonders.lobby.Player;
import org.luxons.sevenwonders.repositories.LobbyRepository;
@@ -19,7 +18,7 @@ public class DestinationAccessValidatorTest {
@Before
public void setup() {
- lobbyRepository = new LobbyRepository(new GameDefinitionLoader());
+ lobbyRepository = new LobbyRepository();
destinationAccessValidator = new DestinationAccessValidator(lobbyRepository);
}
bgstack15