From 4a98975b0da4baa4158140ba85f39ffa669ba7a8 Mon Sep 17 00:00:00 2001 From: Jannis Harder Date: Tue, 24 May 2011 01:51:56 +0200 Subject: Calculate points on hand git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@264 72836036-5685-4462-b002-a69064685172 --- mock/jrummikub/model/MockHand.java | 6 ++++++ mock/jrummikub/model/MockPlayer.java | 4 ++-- mock/jrummikub/model/MockRoundState.java | 14 +++++++++----- src/jrummikub/model/GameSettings.java | 23 ++++++++++++++++++++++- src/jrummikub/model/Hand.java | 20 ++++++++++++++++++++ src/jrummikub/model/IHand.java | 9 ++++++++- src/jrummikub/model/Player.java | 4 ++-- src/jrummikub/model/RoundState.java | 4 ++-- test/jrummikub/control/RoundControlTest.java | 2 +- test/jrummikub/model/HandTest.java | 17 ++++++++++++++++- 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(); - 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 players = new ArrayList(); 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 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 implements IHand { } } } + + public int getStonePoints() { + int points = 0; + + for (Pair 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 { * 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(); 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()); + } } -- cgit v1.2.3