summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/control
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub/control')
-rw-r--r--src/jrummikub/control/GameControl.java3
-rw-r--r--src/jrummikub/control/RoundControl.java22
2 files changed, 22 insertions, 3 deletions
diff --git a/src/jrummikub/control/GameControl.java b/src/jrummikub/control/GameControl.java
index b5d763a..1d93c63 100644
--- a/src/jrummikub/control/GameControl.java
+++ b/src/jrummikub/control/GameControl.java
@@ -1,6 +1,7 @@
package jrummikub.control;
import jrummikub.model.GameSettings;
+import jrummikub.model.IRoundState;
import jrummikub.model.RoundState;
import jrummikub.util.IListener;
import jrummikub.view.IView;
@@ -51,7 +52,7 @@ public class GameControl {
return;
}
- RoundState roundState = new RoundState(gameSettings);
+ IRoundState roundState = new RoundState(gameSettings);
roundControl = new RoundControl(roundState, view);
roundControl.getEndRoundEvent().add(new IListener() {
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java
index 072aa7f..2080cf4 100644
--- a/src/jrummikub/control/RoundControl.java
+++ b/src/jrummikub/control/RoundControl.java
@@ -28,6 +28,7 @@ public class RoundControl {
private ITable clonedTable;
private Event endRoundEvent = new Event();
private List<Connection> connections = new ArrayList<Connection>();
+ private boolean roundFinished;
/**
* Create a new RoundControl using the given gameState and view
@@ -123,8 +124,24 @@ public class RoundControl {
private void endOfTurn() {
checkTurn();
- roundState.nextPlayer();
- prepareTurn();
+
+ if (roundState.getLastPlayer() == null) {
+ if (roundState.getGameHeap().getSize() == 0) {
+ roundState.setLastPlayer(roundState.getNthNextPlayer(-1));
+ } else {
+ roundState.nextPlayer();
+ }
+ } else {
+ if (roundState.getActivePlayer() == roundState.getLastPlayer()) {
+ // TODO check who has won
+ win();
+ } else {
+ roundState.nextPlayer();
+ }
+ }
+ if (!roundFinished) {
+ prepareTurn();
+ }
}
private void checkTurn() {
@@ -224,5 +241,6 @@ public class RoundControl {
}
endRoundEvent.emit();
view.enableWinPanel(true);
+ roundFinished = true;
}
}