Metric fixes
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@358 72836036-5685-4462-b002-a69064685172
This commit is contained in:
parent
6319ec8ab6
commit
640a1e0fb6
13 changed files with 153 additions and 99 deletions
|
@ -1,5 +1,6 @@
|
|||
package jrummikub.view;
|
||||
|
||||
import jrummikub.control.turn.TurnMode;
|
||||
import jrummikub.util.IEvent;
|
||||
import jrummikub.util.MockEvent;
|
||||
|
||||
|
@ -16,9 +17,7 @@ public class MockPlayerPanel implements IPlayerPanel {
|
|||
/** */
|
||||
public MockEvent sortByRunsEvent = new MockEvent();
|
||||
/** */
|
||||
public boolean inspectOnly;
|
||||
/** */
|
||||
public boolean mayRedeal;
|
||||
public TurnMode turnMode;
|
||||
|
||||
@Override
|
||||
public void setTimeLeft(int time) {
|
||||
|
@ -46,9 +45,9 @@ public class MockPlayerPanel implements IPlayerPanel {
|
|||
return redealEvent;
|
||||
}
|
||||
|
||||
public void setEndTurnMode(boolean inspectOnly, boolean mayRedeal) {
|
||||
this.inspectOnly = inspectOnly;
|
||||
this.mayRedeal = mayRedeal;
|
||||
@Override
|
||||
public void setEndTurnMode(TurnMode turnMode) {
|
||||
this.turnMode = turnMode;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.Set;
|
|||
|
||||
import jrummikub.control.turn.ITurnControl;
|
||||
import jrummikub.control.turn.TurnControlFactory;
|
||||
import jrummikub.control.turn.TurnMode;
|
||||
import jrummikub.model.Hand;
|
||||
import jrummikub.model.IHand;
|
||||
import jrummikub.model.IPlayer;
|
||||
|
@ -103,19 +104,24 @@ public class RoundControl {
|
|||
return;
|
||||
boolean isHuman = roundState.getActivePlayer().getPlayerSettings()
|
||||
.getTurnControlType() == HUMAN;
|
||||
boolean inspectOnly = roundState.getTurnNumber() < 1;
|
||||
boolean mayRedeal = inspectOnly
|
||||
&& roundState.getActivePlayer().getHand().getIdenticalStoneCount() >= 3;
|
||||
|
||||
TurnMode turnMode = TurnMode.NORMAL_TURN;
|
||||
|
||||
if (roundState.getTurnNumber() < 1) {
|
||||
turnMode = TurnMode.INSPECT_ONLY;
|
||||
if (roundState.getActivePlayer().getHand().getIdenticalStoneCount() >= 3) {
|
||||
turnMode = TurnMode.MAY_REDEAL;
|
||||
}
|
||||
}
|
||||
|
||||
if (isHuman) {
|
||||
view.getPlayerPanel().setEndTurnMode(inspectOnly, mayRedeal);
|
||||
view.getPlayerPanel().setEndTurnMode(turnMode);
|
||||
}
|
||||
turnControl = TurnControlFactory.getFactory(
|
||||
roundState.getActivePlayer().getPlayerSettings().getTurnControlType())
|
||||
.create();
|
||||
turnControl
|
||||
.setup(roundState.getGameSettings(), roundState.getActivePlayer(),
|
||||
clonedTable, view, inspectOnly, mayRedeal);
|
||||
turnControl.setup(roundState.getGameSettings(),
|
||||
roundState.getActivePlayer(), clonedTable, view, turnMode);
|
||||
turnControl.getEndOfTurnEvent().add(new IListener() {
|
||||
@Override
|
||||
public void handle() {
|
||||
|
|
|
@ -20,8 +20,7 @@ public abstract class AbstractTurnControl implements ITurnControl {
|
|||
protected IHand hand;
|
||||
protected ITable table;
|
||||
protected IView view;
|
||||
protected boolean inspectOnly;
|
||||
protected boolean mayRedeal;
|
||||
protected TurnMode turnMode;
|
||||
|
||||
@Override
|
||||
public IEvent getEndOfTurnEvent() {
|
||||
|
@ -35,14 +34,13 @@ public abstract class AbstractTurnControl implements ITurnControl {
|
|||
|
||||
@Override
|
||||
public void setup(GameSettings settings, IPlayer player, ITable table,
|
||||
IView view, boolean inspectOnly, boolean mayRedeal) {
|
||||
IView view, TurnMode turnMode) {
|
||||
this.settings = settings;
|
||||
this.player = player;
|
||||
this.hand = player.getHand();
|
||||
this.table = table;
|
||||
this.view = view;
|
||||
this.inspectOnly = inspectOnly;
|
||||
this.mayRedeal = mayRedeal;
|
||||
this.turnMode = turnMode;
|
||||
}
|
||||
|
||||
}
|
|
@ -63,14 +63,16 @@ public class BaseAIControl extends AbstractTurnControl {
|
|||
}
|
||||
|
||||
private void compute() {
|
||||
if (inspectOnly) {
|
||||
if (mayRedeal) {
|
||||
switch (turnMode) {
|
||||
case MAY_REDEAL:
|
||||
emitRedeal();
|
||||
} else {
|
||||
break;
|
||||
case INSPECT_ONLY:
|
||||
emitEndOfTurn();
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
case NORMAL_TURN:
|
||||
turn();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -124,7 +126,8 @@ public class BaseAIControl extends AbstractTurnControl {
|
|||
for (Stone stone : set) {
|
||||
handStones.add(pickUpMatchingStone(stone));
|
||||
}
|
||||
table.drop(new StoneSet(handStones), new Position((float)Math.random() * 30 - 15, (float)Math.random() * 6 - 3));
|
||||
table.drop(new StoneSet(handStones), new Position(
|
||||
(float) Math.random() * 30 - 15, (float) Math.random() * 6 - 3));
|
||||
}
|
||||
|
||||
emitEndOfTurn();
|
||||
|
@ -144,8 +147,8 @@ public class BaseAIControl extends AbstractTurnControl {
|
|||
|
||||
private void emitEndOfTurn() {
|
||||
long timeElapsed = System.currentTimeMillis() - startTime;
|
||||
long timeNeeded = Math.min(
|
||||
(long) (1000 + Math.random() * hand.getSize() * 100), 50000);
|
||||
long timeNeeded = Math.min((long) (1000 + Math.random() * hand.getSize()
|
||||
* 100), 50000);
|
||||
long waitTime = timeNeeded - timeElapsed;
|
||||
|
||||
if (waitTime > 0) {
|
||||
|
|
|
@ -60,31 +60,22 @@ public class HumanTurnControl extends AbstractTurnControl {
|
|||
if (this.timer == null) {
|
||||
this.timer = new TurnTimer(view);
|
||||
}
|
||||
IListener endOfTurnListener = new IListener() {
|
||||
|
||||
connections.add(timer.getTimeRunOutEvent().add(new IListener() {
|
||||
|
||||
@Override
|
||||
public void handle() {
|
||||
endOfTurn(false);
|
||||
}
|
||||
};
|
||||
connections.add(timer.getTimeRunOutEvent().add(endOfTurnListener));
|
||||
connections.add(view.getPlayerPanel().getEndTurnEvent()
|
||||
.add(endOfTurnListener));
|
||||
|
||||
connections.add(view.getPlayerPanel().getRedealEvent()
|
||||
.add(new IListener() {
|
||||
@Override
|
||||
public void handle() {
|
||||
endOfTurn(true);
|
||||
}
|
||||
}));
|
||||
addButtonHandlers();
|
||||
|
||||
addHandPanelHandlers();
|
||||
addStoneCollectionHandlers();
|
||||
if (!inspectOnly)
|
||||
addTablePanelHandlers();
|
||||
|
||||
addListeners();
|
||||
if (turnMode == TurnMode.NORMAL_TURN) {
|
||||
addTablePanelHandlers();
|
||||
}
|
||||
|
||||
view.getHandPanel().setStones(hand.clone());
|
||||
view.getHandPanel().resetCurrentRow();
|
||||
|
@ -93,7 +84,7 @@ public class HumanTurnControl extends AbstractTurnControl {
|
|||
timer.startTimer();
|
||||
}
|
||||
|
||||
private void addListeners() {
|
||||
private void addButtonHandlers() {
|
||||
connections.add(view.getPlayerPanel().getSortByGroupsEvent()
|
||||
.add(new IListener() {
|
||||
@Override
|
||||
|
@ -109,6 +100,22 @@ public class HumanTurnControl extends AbstractTurnControl {
|
|||
sortByRuns();
|
||||
}
|
||||
}));
|
||||
|
||||
connections.add(view.getPlayerPanel().getEndTurnEvent()
|
||||
.add(new IListener() {
|
||||
|
||||
@Override
|
||||
public void handle() {
|
||||
endOfTurn(false);
|
||||
}
|
||||
}));
|
||||
|
||||
connections.add(view.getPlayerPanel().getRedealEvent().add(new IListener() {
|
||||
@Override
|
||||
public void handle() {
|
||||
endOfTurn(true);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private void addHandPanelHandlers() {
|
||||
|
@ -425,12 +432,15 @@ public class HumanTurnControl extends AbstractTurnControl {
|
|||
table.drop(joinedSet, newPos);
|
||||
} else {
|
||||
StoneSet joinedSet = new StoneSet(selectedStones).join(newSet);
|
||||
table.drop(joinedSet, new Position(newPos.getX()
|
||||
- selectedStones.size(), newPos.getY()));
|
||||
table.drop(joinedSet,
|
||||
new Position(newPos.getX() - selectedStones.size(), newPos.getY()));
|
||||
}
|
||||
} else {
|
||||
table.drop(new StoneSet(selectedStones), new Position(pos.getX()
|
||||
+ (set.size() - selectedStones.size()) * 0.5f, pos.getY()));
|
||||
table.drop(
|
||||
new StoneSet(selectedStones),
|
||||
new Position(
|
||||
pos.getX() + (set.size() - selectedStones.size()) * 0.5f, pos
|
||||
.getY()));
|
||||
}
|
||||
|
||||
selectedStones.clear();
|
||||
|
@ -525,8 +535,7 @@ public class HumanTurnControl extends AbstractTurnControl {
|
|||
static class HandStonePositionComparator implements
|
||||
Comparator<Pair<Stone, Position>> {
|
||||
@Override
|
||||
public int compare(Pair<Stone, Position> pair1,
|
||||
Pair<Stone, Position> pair2) {
|
||||
public int compare(Pair<Stone, Position> pair1, Pair<Stone, Position> pair2) {
|
||||
Position pos1 = pair1.getSecond(), pos2 = pair2.getSecond();
|
||||
if (pos1.getY() < pos2.getY()) {
|
||||
return -1;
|
||||
|
|
|
@ -11,7 +11,6 @@ import jrummikub.view.IView;
|
|||
* Interface containing shared methods of human and computer turn control
|
||||
*
|
||||
*/
|
||||
// TODO zu viele parameter
|
||||
public interface ITurnControl {
|
||||
/**
|
||||
* Start the turn
|
||||
|
@ -24,13 +23,11 @@ public interface ITurnControl {
|
|||
* current table
|
||||
* @param view
|
||||
* view for user interaction.
|
||||
* @param inspectOnly
|
||||
* the current turn doesn't allow any table manipulation
|
||||
* @param mayRedeal
|
||||
* true when the current player may decide to redeal
|
||||
* @param turnMode
|
||||
* whether it is turn zero and if one may redeal
|
||||
*/
|
||||
public void setup(GameSettings settings, IPlayer player, ITable table,
|
||||
IView view, boolean inspectOnly, boolean mayRedeal);
|
||||
IView view, TurnMode turnMode);
|
||||
|
||||
/**
|
||||
* Get the event that is emitted when the turn is over
|
||||
|
|
|
@ -16,7 +16,11 @@ public abstract class TurnControlFactory {
|
|||
COMPUTER
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new turn control instance
|
||||
*
|
||||
* @return the turn control
|
||||
*/
|
||||
public abstract ITurnControl create();
|
||||
|
||||
/**
|
||||
|
|
13
src/jrummikub/control/turn/TurnMode.java
Normal file
13
src/jrummikub/control/turn/TurnMode.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package jrummikub.control.turn;
|
||||
|
||||
/**
|
||||
* Different kinds of turns
|
||||
*/
|
||||
public enum TurnMode {
|
||||
/** Turn zero with possibility to redeal */
|
||||
MAY_REDEAL,
|
||||
/** Turn zero without possibility to redeal */
|
||||
INSPECT_ONLY,
|
||||
/** A normal turn */
|
||||
NORMAL_TURN
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package jrummikub.view;
|
||||
|
||||
import jrummikub.control.turn.TurnMode;
|
||||
import jrummikub.util.IEvent;
|
||||
|
||||
/**
|
||||
|
@ -23,8 +24,8 @@ public interface IPlayerPanel {
|
|||
public IEvent getSortByGroupsEvent();
|
||||
|
||||
/**
|
||||
* The sort by runs event is emitted when the player wants to sort his
|
||||
* stones by runs
|
||||
* The sort by runs event is emitted when the player wants to sort his stones
|
||||
* by runs
|
||||
*
|
||||
* @return the event
|
||||
*/
|
||||
|
@ -47,11 +48,8 @@ public interface IPlayerPanel {
|
|||
/**
|
||||
* Sets the buttons available to end the turn
|
||||
*
|
||||
* @param inspectOnly
|
||||
* true for each player's first turn
|
||||
* @param mayRedeal
|
||||
* true if the player is allowed to trigger a redealing of all
|
||||
* stones
|
||||
* @param turnMode
|
||||
* the {@link TurnMode}
|
||||
*/
|
||||
public abstract void setEndTurnMode(boolean inspectOnly, boolean mayRedeal);
|
||||
public abstract void setEndTurnMode(TurnMode turnMode);
|
||||
}
|
||||
|
|
|
@ -121,9 +121,27 @@ public interface IView {
|
|||
*/
|
||||
public IEvent getNewGameEvent();
|
||||
|
||||
/**
|
||||
* Sets the bottom panels type
|
||||
*
|
||||
* @param type
|
||||
* the type of the bottom panel
|
||||
*/
|
||||
public void setBottomPanel(BottomPanelType type);
|
||||
|
||||
/**
|
||||
* Different types of bottom panels
|
||||
*/
|
||||
public enum BottomPanelType {
|
||||
START_GAME_PANEL, START_TURN_PANEL, HUMAN_HAND_PANEL, COMPUTER_HAND_PANEL, WIN_PANEL
|
||||
/** */
|
||||
START_GAME_PANEL,
|
||||
/** */
|
||||
START_TURN_PANEL,
|
||||
/** */
|
||||
HUMAN_HAND_PANEL,
|
||||
/** */
|
||||
COMPUTER_HAND_PANEL,
|
||||
/** */
|
||||
WIN_PANEL
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ import javax.swing.JProgressBar;
|
|||
import javax.swing.UIManager;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
|
||||
import jrummikub.control.turn.TurnMode;
|
||||
import jrummikub.model.Position;
|
||||
import jrummikub.model.Stone;
|
||||
import jrummikub.util.Event;
|
||||
|
@ -268,8 +269,6 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
|
|||
|
||||
addComponentListener(rescaleListener);
|
||||
hand.addComponentListener(rescaleListener);
|
||||
|
||||
setEndTurnMode(true, true);
|
||||
}
|
||||
|
||||
private class LeftPanelResizeListener extends ComponentAdapter {
|
||||
|
@ -363,16 +362,27 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setEndTurnMode(boolean inspectOnly, boolean mayRedeal) {
|
||||
if (!inspectOnly) {
|
||||
endTurnButton.setText("Zug beenden");
|
||||
} else if (!mayRedeal) {
|
||||
public void setEndTurnMode(TurnMode turnMode) {
|
||||
|
||||
switch (turnMode) {
|
||||
case MAY_REDEAL:
|
||||
endTurnButton.setVisible(false);
|
||||
keepStonesButton.setVisible(true);
|
||||
redealButton.setVisible(true);
|
||||
break;
|
||||
case INSPECT_ONLY:
|
||||
endTurnButton.setText("N\u00e4chster Spieler");
|
||||
endTurnButton.setVisible(true);
|
||||
keepStonesButton.setVisible(false);
|
||||
redealButton.setVisible(false);
|
||||
break;
|
||||
case NORMAL_TURN:
|
||||
endTurnButton.setText("Zug beenden");
|
||||
endTurnButton.setVisible(true);
|
||||
keepStonesButton.setVisible(false);
|
||||
redealButton.setVisible(false);
|
||||
break;
|
||||
}
|
||||
boolean smallButtons = mayRedeal && inspectOnly;
|
||||
endTurnButton.setVisible(!smallButtons);
|
||||
keepStonesButton.setVisible(smallButtons);
|
||||
redealButton.setVisible(smallButtons);
|
||||
}
|
||||
|
||||
void showButtons(boolean show) {
|
||||
|
@ -397,7 +407,7 @@ class PlayerPanel extends JPanel implements IPlayerPanel {
|
|||
sortByGroupsButton.setEnabled(enable);
|
||||
sortByRunsButton.setEnabled(enable);
|
||||
if (!enable) {
|
||||
setEndTurnMode(false, false);
|
||||
setEndTurnMode(TurnMode.NORMAL_TURN);
|
||||
endTurnButton.setText("<html><center>Computer denkt nach");
|
||||
hand.setStones(Collections.<Pair<Stone, Position>> emptyList());
|
||||
handRowDownButton.setForeground(Color.GRAY);
|
||||
|
|
|
@ -10,6 +10,7 @@ import java.util.Iterator;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import jrummikub.control.turn.TurnMode;
|
||||
import jrummikub.model.GameSettings;
|
||||
import jrummikub.model.Hand;
|
||||
import jrummikub.model.IHand;
|
||||
|
@ -934,13 +935,12 @@ public class RoundControlTest {
|
|||
hand.drop(new Stone(1, BLUE), new Position(0, 0));
|
||||
testRoundState.players.get(0).hand = hand;
|
||||
view.startTurnEvent.emit();
|
||||
assertTrue(view.playerPanel.inspectOnly);
|
||||
assertFalse(view.playerPanel.mayRedeal);
|
||||
assertEquals(view.playerPanel.turnMode, TurnMode.INSPECT_ONLY);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
view.playerPanel.endTurnEvent.emit();
|
||||
view.startTurnEvent.emit();
|
||||
}
|
||||
assertFalse(view.playerPanel.inspectOnly);
|
||||
assertEquals(view.playerPanel.turnMode, TurnMode.NORMAL_TURN);
|
||||
}
|
||||
|
||||
/** */
|
||||
|
@ -953,12 +953,11 @@ public class RoundControlTest {
|
|||
}
|
||||
testRoundState.players.get(0).hand = hand;
|
||||
view.startTurnEvent.emit();
|
||||
assertTrue(view.playerPanel.inspectOnly);
|
||||
assertTrue(view.playerPanel.mayRedeal);
|
||||
assertEquals(view.playerPanel.turnMode, TurnMode.MAY_REDEAL);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
view.playerPanel.endTurnEvent.emit();
|
||||
view.startTurnEvent.emit();
|
||||
}
|
||||
assertFalse(view.playerPanel.inspectOnly);
|
||||
assertEquals(view.playerPanel.turnMode, TurnMode.NORMAL_TURN);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ public class TurnControlTest {
|
|||
mockPlayer.hand = mockHand;
|
||||
testControl = new HumanTurnControl(mockTimer);
|
||||
testControl.setup(new GameSettings(), mockPlayer, mockTable, mockView,
|
||||
false, false);
|
||||
TurnMode.NORMAL_TURN);
|
||||
}
|
||||
|
||||
/** */
|
||||
|
@ -136,7 +136,7 @@ public class TurnControlTest {
|
|||
|
||||
testControl = new HumanTurnControl(mockTimer);
|
||||
testControl.setup(new GameSettings(), mockPlayer, mockTable, mockView,
|
||||
false, false);
|
||||
TurnMode.NORMAL_TURN);
|
||||
testControl.startTurn();
|
||||
|
||||
int i = 0;
|
||||
|
@ -629,8 +629,8 @@ public class TurnControlTest {
|
|||
public void testAddLeft() {
|
||||
AccessibleTable table = new AccessibleTable();
|
||||
HumanTurnControl turnControl = new HumanTurnControl(mockTimer);
|
||||
turnControl.setup(new GameSettings(), mockPlayer, table, mockView, false,
|
||||
false);
|
||||
turnControl.setup(new GameSettings(), mockPlayer, table, mockView,
|
||||
TurnMode.NORMAL_TURN);
|
||||
turnControl.startTurn();
|
||||
Stone blueOne = new Stone(1, BLUE);
|
||||
Stone redOne = new Stone(1, RED);
|
||||
|
@ -747,8 +747,8 @@ public class TurnControlTest {
|
|||
public void testAddRight() {
|
||||
AccessibleTable table = new AccessibleTable();
|
||||
HumanTurnControl turnControl = new HumanTurnControl(mockTimer);
|
||||
turnControl.setup(new GameSettings(), mockPlayer, table, mockView, false,
|
||||
false);
|
||||
turnControl.setup(new GameSettings(), mockPlayer, table, mockView,
|
||||
TurnMode.NORMAL_TURN);
|
||||
turnControl.startTurn();
|
||||
Stone blueOne = new Stone(1, BLUE);
|
||||
Stone redOne = new Stone(1, RED);
|
||||
|
@ -865,8 +865,8 @@ public class TurnControlTest {
|
|||
public void testAddNewSet() {
|
||||
AccessibleTable table = new AccessibleTable();
|
||||
HumanTurnControl turnControl = new HumanTurnControl(mockTimer);
|
||||
turnControl.setup(new GameSettings(), mockPlayer, table, mockView, false,
|
||||
false);
|
||||
turnControl.setup(new GameSettings(), mockPlayer, table, mockView,
|
||||
TurnMode.NORMAL_TURN);
|
||||
turnControl.startTurn();
|
||||
Stone blueOne = new Stone(1, BLUE);
|
||||
Stone redOne = new Stone(1, RED);
|
||||
|
|
Reference in a new issue