summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mock/jrummikub/model/MockHand.java6
-rw-r--r--mock/jrummikub/model/MockPlayer.java4
-rw-r--r--mock/jrummikub/model/MockRoundState.java14
-rw-r--r--src/jrummikub/model/GameSettings.java23
-rw-r--r--src/jrummikub/model/Hand.java20
-rw-r--r--src/jrummikub/model/IHand.java9
-rw-r--r--src/jrummikub/model/Player.java4
-rw-r--r--src/jrummikub/model/RoundState.java4
-rw-r--r--test/jrummikub/control/RoundControlTest.java2
-rw-r--r--test/jrummikub/model/HandTest.java17
10 files changed, 88 insertions, 15 deletions
diff --git a/mock/jrummikub/model/MockHand.java b/mock/jrummikub/model/MockHand.java
index 30bda51..c69ae7b 100644
--- a/mock/jrummikub/model/MockHand.java
+++ b/mock/jrummikub/model/MockHand.java
@@ -76,4 +76,10 @@ public class MockHand implements IHand {
// TODO Auto-generated method stub
return 0;
}
+
+ @Override
+ public int getStonePoints() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
}
diff --git a/mock/jrummikub/model/MockPlayer.java b/mock/jrummikub/model/MockPlayer.java
index a7b57b4..19c7014 100644
--- a/mock/jrummikub/model/MockPlayer.java
+++ b/mock/jrummikub/model/MockPlayer.java
@@ -15,8 +15,8 @@ public class MockPlayer implements IPlayer {
* @param playerSettings
* the player settings
*/
- public MockPlayer(PlayerSettings playerSettings) {
- hand = new Hand();
+ public MockPlayer(PlayerSettings playerSettings, GameSettings gameSettings) {
+ hand = new Hand(gameSettings);
this.playerSettings = playerSettings;
laidOut = false;
}
diff --git a/mock/jrummikub/model/MockRoundState.java b/mock/jrummikub/model/MockRoundState.java
index 0341f27..ee483c6 100644
--- a/mock/jrummikub/model/MockRoundState.java
+++ b/mock/jrummikub/model/MockRoundState.java
@@ -22,15 +22,19 @@ public class MockRoundState implements IRoundState {
public GameSettings gameSettings;
/** */
public IPlayer lastPlayer;
-
+
/** */
public MockRoundState() {
table = new MockTable();
players = new ArrayList<MockPlayer>();
- players.add(new MockPlayer(new PlayerSettings("Player 1", Color.RED)));
- players.add(new MockPlayer(new PlayerSettings("Player 2", Color.YELLOW)));
- players.add(new MockPlayer(new PlayerSettings("Player 3", Color.GREEN)));
- players.add(new MockPlayer(new PlayerSettings("Player 4", Color.BLACK)));
+ players.add(new MockPlayer(new PlayerSettings("Player 1", Color.RED),
+ gameSettings));
+ players.add(new MockPlayer(
+ new PlayerSettings("Player 2", Color.YELLOW), gameSettings));
+ players.add(new MockPlayer(new PlayerSettings("Player 3", Color.GREEN),
+ gameSettings));
+ players.add(new MockPlayer(new PlayerSettings("Player 4", Color.BLACK),
+ gameSettings));
activePlayer = 0;
gameHeap = new StoneHeap();
gameSettings = new GameSettings();
diff --git a/src/jrummikub/model/GameSettings.java b/src/jrummikub/model/GameSettings.java
index b5079d4..7d525c6 100644
--- a/src/jrummikub/model/GameSettings.java
+++ b/src/jrummikub/model/GameSettings.java
@@ -10,12 +10,14 @@ public class GameSettings {
private List<PlayerSettings> players = new ArrayList<PlayerSettings>();
private int initialMeldThreshold;
+ private int jokerPoints;
/**
* Creates new GameSettings with default values
*/
public GameSettings() {
initialMeldThreshold = 30;
+ jokerPoints = 50;
}
/**
@@ -31,7 +33,7 @@ public class GameSettings {
* Sets the initial meld threshold
*
* @param value
- * the value to set
+ * the value to set
*/
public void setInitialMeldThreshold(int value) {
initialMeldThreshold = value;
@@ -45,4 +47,23 @@ public class GameSettings {
public int getInitialMeldThreshold() {
return initialMeldThreshold;
}
+
+ /**
+ * Sets the points counted for a joker
+ *
+ * @param value
+ * the value to set
+ */
+ public void setJokerPoints(int value) {
+ jokerPoints = value;
+ }
+
+ /**
+ * Returns the points counted for a joker
+ *
+ * @return the points
+ */
+ public int getJokerPoints() {
+ return jokerPoints;
+ }
}
diff --git a/src/jrummikub/model/Hand.java b/src/jrummikub/model/Hand.java
index ab5eb19..35ea49f 100644
--- a/src/jrummikub/model/Hand.java
+++ b/src/jrummikub/model/Hand.java
@@ -10,6 +10,12 @@ public class Hand extends StoneTray<Stone> implements IHand {
* The width of the hand
*/
public final static int WIDTH = 14;
+
+ private GameSettings settings;
+
+ public Hand(GameSettings settings) {
+ this.settings = settings;
+ }
@Override
public int getFreeRowSpace(int row) {
@@ -54,4 +60,18 @@ public class Hand extends StoneTray<Stone> implements IHand {
}
}
}
+
+ public int getStonePoints() {
+ int points = 0;
+
+ for (Pair<Stone, Position> entry : this) {
+ if (entry.getFirst().isJoker()) {
+ points += settings.getJokerPoints();
+ } else {
+ points += entry.getFirst().getValue();
+ }
+ }
+
+ return points;
+ }
}
diff --git a/src/jrummikub/model/IHand.java b/src/jrummikub/model/IHand.java
index dafa9c7..ec49489 100644
--- a/src/jrummikub/model/IHand.java
+++ b/src/jrummikub/model/IHand.java
@@ -16,8 +16,15 @@ public interface IHand extends IStoneTray<Stone> {
* Gets the amount of free space in a hand row
*
* @param row
- * the row number
+ * the row number
* @return the number of stones that can fit into the row
*/
int getFreeRowSpace(int row);
+
+ /**
+ * Get the accumulated number of points of stones in the hand
+ *
+ * @return points
+ */
+ int getStonePoints();
}
diff --git a/src/jrummikub/model/Player.java b/src/jrummikub/model/Player.java
index d10992e..6d3e6d6 100644
--- a/src/jrummikub/model/Player.java
+++ b/src/jrummikub/model/Player.java
@@ -12,10 +12,10 @@ public class Player implements IPlayer {
* @param settings
* the player settings
*/
- public Player(PlayerSettings settings) {
+ public Player(PlayerSettings settings, GameSettings gameSettings) {
this.settings = settings;
- hand = new Hand();
+ hand = new Hand(gameSettings);
laidOut = false;
}
diff --git a/src/jrummikub/model/RoundState.java b/src/jrummikub/model/RoundState.java
index 076fd00..c32c3c0 100644
--- a/src/jrummikub/model/RoundState.java
+++ b/src/jrummikub/model/RoundState.java
@@ -26,7 +26,7 @@ public class RoundState implements IRoundState {
players = new ArrayList<Player>();
for (PlayerSettings playerSettings : gameSettings.getPlayerList()) {
- players.add(new Player(playerSettings));
+ players.add(new Player(playerSettings, gameSettings));
}
activePlayer = 0;
@@ -52,7 +52,7 @@ public class RoundState implements IRoundState {
public void nextPlayer() {
activePlayer = (activePlayer + 1) % players.size();
}
-
+
@Override
public void setActivePlayerNumber(int i) {
int j = i % players.size();
diff --git a/test/jrummikub/control/RoundControlTest.java b/test/jrummikub/control/RoundControlTest.java
index 20d87f3..9894e35 100644
--- a/test/jrummikub/control/RoundControlTest.java
+++ b/test/jrummikub/control/RoundControlTest.java
@@ -591,7 +591,7 @@ public class RoundControlTest {
view.tablePanel.clickEvent.emit(new Position(0, 0));
- testRoundState.players.get(0).hand = new Hand();
+ testRoundState.players.get(0).hand = new Hand(gameSettings);
resetTurnStart();
view.playerPanel.endTurnEvent.emit();
diff --git a/test/jrummikub/model/HandTest.java b/test/jrummikub/model/HandTest.java
index fbe694b..5be48d6 100644
--- a/test/jrummikub/model/HandTest.java
+++ b/test/jrummikub/model/HandTest.java
@@ -19,7 +19,7 @@ public class HandTest {
/** */
@Before
public void setUp() {
- hand = new Hand();
+ hand = new Hand(new GameSettings());
}
/** */
@@ -111,4 +111,19 @@ public class HandTest {
assertEquals(new Position(13, 1), hand.getPosition(newStone));
assertEquals(new Position(0, 2), hand.getPosition(rowStones.get(13)));
}
+
+ /** */
+ @Test
+ public void testCountPoints() {
+
+ Stone stone1 = new Stone(2, BLUE);
+ Stone stone2 = new Stone(4, BLUE);
+ Stone stone3 = new Stone(RED);
+
+ hand.drop(stone1, new Position(0, 0));
+ hand.drop(stone2, new Position(0, 0));
+ hand.drop(stone3, new Position(0, 0));
+
+ assertEquals(56, hand.getStonePoints());
+ }
}