Calculate points on hand

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@264 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Jannis Harder 2011-05-24 01:51:56 +02:00
parent 92d1109954
commit 4a98975b0d
10 changed files with 88 additions and 15 deletions

View file

@ -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;
}
}

View file

@ -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;
}

View file

@ -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();

View file

@ -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;
}
}

View file

@ -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;
}
}

View file

@ -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();
}

View file

@ -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;
}

View file

@ -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();

View file

@ -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();

View file

@ -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());
}
}