summaryrefslogtreecommitdiff
path: root/game-engine/src
diff options
context:
space:
mode:
Diffstat (limited to 'game-engine/src')
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java102
-rw-r--r--game-engine/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java54
-rw-r--r--game-engine/src/main/kotlin/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.kt9
-rw-r--r--game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt45
-rw-r--r--game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/WonderStage.kt30
-rw-r--r--game-engine/src/test/java/org/luxons/sevenwonders/game/wonders/WonderTest.java37
-rw-r--r--game-engine/src/test/kotlin/org/luxons/sevenwonders/game/cards/CardTest.kt7
-rw-r--r--game-engine/src/test/kotlin/org/luxons/sevenwonders/game/test/TestUtils.kt2
-rw-r--r--game-engine/src/test/kotlin/org/luxons/sevenwonders/game/wonders/WonderTest.kt37
9 files changed, 118 insertions, 205 deletions
diff --git a/game-engine/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/wonders/Wonder.java
deleted file mode 100644
index dd0170da..00000000
--- a/game-engine/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.ResourceTransactions;
-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, ResourceTransactions 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, ResourceTransactions 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/game-engine/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java b/game-engine/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java
deleted file mode 100644
index f4ec1140..00000000
--- a/game-engine/src/main/java/org/luxons/sevenwonders/game/wonders/WonderStage.java
+++ /dev/null
@@ -1,54 +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.ResourceTransactions;
-
-public class WonderStage {
-
- private final Requirements requirements;
-
- private final List<Effect> effects;
-
- private CardBack cardBack;
-
- public WonderStage(Requirements requirements, List<Effect> effects) {
- this.requirements = requirements;
- this.effects = effects;
- }
-
- public Requirements getRequirements() {
- return requirements;
- }
-
- public List<Effect> getEffects() {
- return effects;
- }
-
- public CardBack getCardBack() {
- return cardBack;
- }
-
- public boolean isBuilt() {
- return cardBack != null;
- }
-
- public boolean isBuildable(Table table, int playerIndex, ResourceTransactions boughtResources) {
- Board board = table.getBoard(playerIndex);
- return requirements.areMetWithHelpBy(board, boughtResources);
- }
-
- void build(CardBack cardBack) {
- this.cardBack = cardBack;
- }
-
- void activate(Table table, int playerIndex, ResourceTransactions boughtResources) {
- effects.forEach(e -> e.apply(table, playerIndex));
- requirements.pay(table, playerIndex, boughtResources);
- }
-}
diff --git a/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.kt b/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.kt
index 558f16e8..013a3d9c 100644
--- a/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.kt
+++ b/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/data/definitions/WonderDefinition.kt
@@ -9,13 +9,8 @@ internal data class WonderDefinition(
private val sides: Map<WonderSide, WonderSideDefinition>
) {
fun create(settings: Settings): Wonder {
- val wonder = Wonder()
- wonder.name = name
-
val wonderSideDef = sides[settings.pickWonderSide()]!!
- wonder.initialResource = wonderSideDef.initialResource
- wonder.stages = wonderSideDef.createStages()
- wonder.image = wonderSideDef.image
- return wonder
+ val stages = wonderSideDef.createStages()
+ return Wonder(name, wonderSideDef.initialResource, stages, wonderSideDef.image)
}
}
diff --git a/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt b/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt
new file mode 100644
index 00000000..beb87580
--- /dev/null
+++ b/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/Wonder.kt
@@ -0,0 +1,45 @@
+package org.luxons.sevenwonders.game.wonders
+
+import org.luxons.sevenwonders.game.api.Table
+import org.luxons.sevenwonders.game.cards.CardBack
+import org.luxons.sevenwonders.game.resources.ResourceTransactions
+import org.luxons.sevenwonders.game.resources.ResourceType
+
+class Wonder(
+ val name: String,
+ val initialResource: ResourceType,
+ val stages: List<WonderStage>,
+ val image: String
+) {
+ val nbBuiltStages: Int
+ get() = stages.filter { it.isBuilt }.count()
+
+ private val nextStage: WonderStage
+ get() {
+ val nextLevel = nbBuiltStages
+ if (nextLevel == stages.size) {
+ throw IllegalStateException("This wonder has already reached its maximum level")
+ }
+ return stages[nextLevel]
+ }
+
+ private val lastBuiltStage: WonderStage
+ get() {
+ val lastLevel = nbBuiltStages - 1
+ return stages[lastLevel]
+ }
+
+ fun isNextStageBuildable(table: Table, playerIndex: Int, boughtResources: ResourceTransactions): Boolean =
+ nbBuiltStages < stages.size && nextStage.isBuildable(table, playerIndex, boughtResources)
+
+ fun buildLevel(cardBack: CardBack) = nextStage.build(cardBack)
+
+ fun activateLastBuiltStage(table: Table, playerIndex: Int, boughtResources: ResourceTransactions) =
+ lastBuiltStage.activate(table, playerIndex, boughtResources)
+
+ fun computePoints(table: Table, playerIndex: Int): Int = stages
+ .filter { it.isBuilt }
+ .flatMap { c -> c.effects }
+ .map { e -> e.computePoints(table, playerIndex) }
+ .sum()
+}
diff --git a/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/WonderStage.kt b/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/WonderStage.kt
new file mode 100644
index 00000000..6aad135d
--- /dev/null
+++ b/game-engine/src/main/kotlin/org/luxons/sevenwonders/game/wonders/WonderStage.kt
@@ -0,0 +1,30 @@
+package org.luxons.sevenwonders.game.wonders
+
+import org.luxons.sevenwonders.game.api.Table
+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.ResourceTransactions
+
+class WonderStage(val requirements: Requirements, val effects: List<Effect>) {
+
+ var cardBack: CardBack? = null
+ private set
+
+ val isBuilt: Boolean
+ get() = cardBack != null
+
+ fun isBuildable(table: Table, playerIndex: Int, boughtResources: ResourceTransactions): Boolean {
+ val board = table.getBoard(playerIndex)
+ return requirements.areMetWithHelpBy(board, boughtResources)
+ }
+
+ internal fun build(cardBack: CardBack) {
+ this.cardBack = cardBack
+ }
+
+ internal fun activate(table: Table, playerIndex: Int, boughtResources: ResourceTransactions) {
+ effects.forEach { e -> e.apply(table, playerIndex) }
+ requirements.pay(table, playerIndex, boughtResources)
+ }
+}
diff --git a/game-engine/src/test/java/org/luxons/sevenwonders/game/wonders/WonderTest.java b/game-engine/src/test/java/org/luxons/sevenwonders/game/wonders/WonderTest.java
deleted file mode 100644
index a7988f8a..00000000
--- a/game-engine/src/test/java/org/luxons/sevenwonders/game/wonders/WonderTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.luxons.sevenwonders.game.wonders;
-
-import org.junit.Test;
-import org.luxons.sevenwonders.game.cards.CardBack;
-import org.luxons.sevenwonders.game.test.TestUtilsKt;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-public class WonderTest {
-
- @Test
- public void buildLevel_increasesNbBuiltStages() {
- Wonder wonder = TestUtilsKt.testWonder();
- assertEquals(0, wonder.getNbBuiltStages());
- wonder.buildLevel(new CardBack("img"));
- assertEquals(1, wonder.getNbBuiltStages());
- wonder.buildLevel(new CardBack("img"));
- assertEquals(2, wonder.getNbBuiltStages());
- wonder.buildLevel(new CardBack("img"));
- assertEquals(3, wonder.getNbBuiltStages());
- }
-
- @Test
- public void buildLevel_failsIfFull() {
- Wonder wonder = TestUtilsKt.testWonder();
- wonder.buildLevel(new CardBack("img"));
- wonder.buildLevel(new CardBack("img"));
- wonder.buildLevel(new CardBack("img"));
- try {
- wonder.buildLevel(new CardBack("img"));
- fail();
- } catch (IllegalStateException e) {
- // expected exception because there is no 4th level in this wonder
- }
- }
-}
diff --git a/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/cards/CardTest.kt b/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/cards/CardTest.kt
index 3253136c..783e4c38 100644
--- a/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/cards/CardTest.kt
+++ b/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/cards/CardTest.kt
@@ -10,7 +10,6 @@ import org.luxons.sevenwonders.game.effects.ProductionIncrease
import org.luxons.sevenwonders.game.resources.Production
import org.luxons.sevenwonders.game.resources.ResourceTransactions
import org.luxons.sevenwonders.game.resources.ResourceType
-import org.luxons.sevenwonders.game.resources.Resources
import org.luxons.sevenwonders.game.test.testCard
import org.luxons.sevenwonders.game.wonders.Wonder
@@ -25,9 +24,9 @@ class CardTest {
val settings = Settings(3)
val boards = listOf(
- Board(Wonder("TestWonder", ResourceType.WOOD), 0, settings),
- Board(Wonder("TestWonder", ResourceType.STONE), 1, settings),
- Board(Wonder("TestWonder", ResourceType.PAPYRUS), 2, settings)
+ Board(Wonder("TestWonder", ResourceType.WOOD, emptyList(), ""), 0, settings),
+ Board(Wonder("TestWonder", ResourceType.STONE, emptyList(), ""), 1, settings),
+ Board(Wonder("TestWonder", ResourceType.PAPYRUS, emptyList(), ""), 2, settings)
)
table = Table(boards)
diff --git a/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/test/TestUtils.kt b/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/test/TestUtils.kt
index 28ab714d..feda9423 100644
--- a/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/test/TestUtils.kt
+++ b/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/test/TestUtils.kt
@@ -78,7 +78,7 @@ fun testWonder(initialResource: ResourceType = ResourceType.WOOD): Wonder {
val stage1 = createWonderStage()
val stage2 = createWonderStage()
val stage3 = createWonderStage()
- return Wonder("Test Wonder " + initialResource.symbol!!, initialResource, stage1, stage2, stage3)
+ return Wonder("Test Wonder " + initialResource.symbol!!, initialResource, listOf(stage1, stage2, stage3), "")
}
private fun createWonderStage(vararg effects: Effect): WonderStage {
diff --git a/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/wonders/WonderTest.kt b/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/wonders/WonderTest.kt
new file mode 100644
index 00000000..9270bcca
--- /dev/null
+++ b/game-engine/src/test/kotlin/org/luxons/sevenwonders/game/wonders/WonderTest.kt
@@ -0,0 +1,37 @@
+package org.luxons.sevenwonders.game.wonders
+
+import org.junit.Test
+import org.luxons.sevenwonders.game.cards.CardBack
+import org.luxons.sevenwonders.game.test.*
+
+import org.junit.Assert.assertEquals
+import org.junit.Assert.fail
+
+class WonderTest {
+
+ @Test
+ fun buildLevel_increasesNbBuiltStages() {
+ val wonder = testWonder()
+ assertEquals(0, wonder.nbBuiltStages.toLong())
+ wonder.buildLevel(CardBack("img"))
+ assertEquals(1, wonder.nbBuiltStages.toLong())
+ wonder.buildLevel(CardBack("img"))
+ assertEquals(2, wonder.nbBuiltStages.toLong())
+ wonder.buildLevel(CardBack("img"))
+ assertEquals(3, wonder.nbBuiltStages.toLong())
+ }
+
+ @Test
+ fun buildLevel_failsIfFull() {
+ val wonder = testWonder()
+ wonder.buildLevel(CardBack("img"))
+ wonder.buildLevel(CardBack("img"))
+ wonder.buildLevel(CardBack("img"))
+ try {
+ wonder.buildLevel(CardBack("img"))
+ fail()
+ } catch (e: IllegalStateException) {
+ // expected exception because there is no 4th level in this wonder
+ }
+ }
+}
bgstack15