summaryrefslogtreecommitdiffstats
path: root/src/jrummikub
diff options
context:
space:
mode:
Diffstat (limited to 'src/jrummikub')
-rw-r--r--src/jrummikub/control/ApplicationControl.java9
-rw-r--r--src/jrummikub/control/GameControl.java16
-rw-r--r--src/jrummikub/control/RoundControl.java18
-rw-r--r--src/jrummikub/view/IView.java28
-rw-r--r--src/jrummikub/view/impl/View.java60
5 files changed, 87 insertions, 44 deletions
diff --git a/src/jrummikub/control/ApplicationControl.java b/src/jrummikub/control/ApplicationControl.java
index 068b898..e4ddb55 100644
--- a/src/jrummikub/control/ApplicationControl.java
+++ b/src/jrummikub/control/ApplicationControl.java
@@ -16,6 +16,7 @@ import jrummikub.view.IView.BottomPanelType;
public class ApplicationControl {
private SaveControl saveControl;
private IView view;
+ private GameControl gameControl;
/**
* Creates a new application control
@@ -53,8 +54,10 @@ public class ApplicationControl {
public void handle(GameSettings settings,
GameState gameState, IRoundState roundState) {
settingsControl.abort();
- // TODO alles ordentlich beenden (controls)
- GameControl gameControl = new GameControl(settings,
+ if (gameControl != null){
+ gameControl.abortGame();
+ }
+ gameControl = new GameControl(settings,
saveControl, view);
addGameControlListeners(gameControl);
gameControl.continueGame(gameState, roundState);
@@ -67,7 +70,7 @@ public class ApplicationControl {
public void handle(GameSettings settings) {
saveControl.setGameSettings(settings);
- GameControl gameControl = new GameControl(settings,
+ gameControl = new GameControl(settings,
saveControl, view);
addGameControlListeners(gameControl);
diff --git a/src/jrummikub/control/GameControl.java b/src/jrummikub/control/GameControl.java
index 985781a..194d0de 100644
--- a/src/jrummikub/control/GameControl.java
+++ b/src/jrummikub/control/GameControl.java
@@ -83,10 +83,14 @@ public class GameControl {
}
private void endGame() {
+ removeListeners();
+ endOfGameEvent.emit();
+ }
+
+ private void removeListeners() {
for (Connection c : connections) {
c.remove();
}
- endOfGameEvent.emit();
}
/**
@@ -106,6 +110,16 @@ public class GameControl {
}
}
+ public void abortGame() {
+ removeListeners();
+ if (roundControl != null) {
+ roundControl.abortRound();
+ roundControl = null;
+ }
+
+ view.clearView();
+ }
+
private void startRound() {
if (roundControl != null) {
return;
diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java
index 4fadc15..e1009af 100644
--- a/src/jrummikub/control/RoundControl.java
+++ b/src/jrummikub/control/RoundControl.java
@@ -84,6 +84,14 @@ public class RoundControl {
prepareTurn();
}
+ public void abortRound() {
+ removeListeners();
+ if (turnControl != null) {
+ turnControl.abortTurn();
+ turnControl = null;
+ }
+ }
+
private void prepareTurn() {
boolean isHuman = roundState.getActivePlayer().getPlayerSettings()
.getTurnControlType() == HUMAN;
@@ -294,14 +302,18 @@ public class RoundControl {
}
void endOfRound() {
- for (Connection c : connections) {
- c.remove();
- }
+ removeListeners();
Score roundScore = score();
endOfRoundEvent.emit(roundScore);
roundFinished = true;
}
+ private void removeListeners() {
+ for (Connection c : connections) {
+ c.remove();
+ }
+ }
+
private Score score() {
List<Boolean> winners = new ArrayList<Boolean>();
List<Integer> points = new ArrayList<Integer>();
diff --git a/src/jrummikub/view/IView.java b/src/jrummikub/view/IView.java
index 8280a1b..797c704 100644
--- a/src/jrummikub/view/IView.java
+++ b/src/jrummikub/view/IView.java
@@ -49,7 +49,7 @@ public interface IView {
* Sets the current player's name
*
* @param playerName
- * the player name
+ * the player name
*/
public void setCurrentPlayerName(String playerName);
@@ -57,7 +57,7 @@ public interface IView {
* Sets the stones that are to be painted selected
*
* @param stones
- * the stones to be painted selected
+ * the stones to be painted selected
*/
public void setSelectedStones(Collection<Stone> stones);
@@ -86,7 +86,7 @@ public interface IView {
* Shows or hides the game settings panel
*
* @param show
- * specifies if the panel shall be shown or hidden
+ * specifies if the panel shall be shown or hidden
*/
public void showSettingsPanel(boolean show);
@@ -94,7 +94,7 @@ public interface IView {
* Shows or hides the score panel
*
* @param show
- * specifies if the panel shall be shown or hidden
+ * specifies if the panel shall be shown or hidden
*/
public void showScorePanel(boolean show);
@@ -103,16 +103,16 @@ public interface IView {
* along with the name
*
* @param color
- * the current player's color
+ * the current player's color
*/
public void setCurrentPlayerColor(Color color);
/**
- * Is used for the PlayerPanel to display if a player has laid out along with
- * the name
+ * Is used for the PlayerPanel to display if a player has laid out along
+ * with the name
*
* @param hasLaidOut
- * specifies if the current player has laid out or not
+ * specifies if the current player has laid out or not
*/
public void setCurrentPlayerHasLaidOut(boolean hasLaidOut);
@@ -127,7 +127,7 @@ public interface IView {
* Sets the bottom panels type
*
* @param type
- * the type of the bottom panel
+ * the type of the bottom panel
*/
public void setBottomPanel(BottomPanelType type);
@@ -148,8 +148,8 @@ public interface IView {
}
/**
- * The menu new game event is emitted when the user selects the new game menu
- * entry
+ * The menu new game event is emitted when the user selects the new game
+ * menu entry
*
* @return the event
*/
@@ -168,7 +168,7 @@ public interface IView {
*
* @return the event
*/
- IEvent1<File> getLoadEvent();
+ public IEvent1<File> getLoadEvent();
/**
* The save event is emitted when the user wants to save the current game
@@ -176,5 +176,7 @@ public interface IView {
*
* @return the event
*/
- IEvent1<File> getSaveEvent();
+ public IEvent1<File> getSaveEvent();
+
+ public void clearView();
}
diff --git a/src/jrummikub/view/impl/View.java b/src/jrummikub/view/impl/View.java
index a3bded6..a6e5efe 100644
--- a/src/jrummikub/view/impl/View.java
+++ b/src/jrummikub/view/impl/View.java
@@ -114,6 +114,17 @@ public class View extends JFrame implements IView {
return saveEvent;
}
+ @Override
+ public void clearView() {
+ showScorePanel(false);
+ showSettingsPanel(false);
+ getHandPanel().setStones(
+ Collections.<Pair<Stone, Position>> emptyList());
+ getTablePanel().setStoneSets(
+ Collections.<Pair<StoneSet, Position>> emptyList());
+ setSelectedStones(Collections.<Stone> emptyList());
+ }
+
private void createFileChooser() {
chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
@@ -208,8 +219,8 @@ public class View extends JFrame implements IView {
mainLayer.add(table);
playerPanel = new PlayerPanel();
- playerPanel.setBorder(new MatteBorder(PLAYER_PANEL_BORDER_WIDTH, 0, 0, 0,
- Color.BLACK));
+ playerPanel.setBorder(new MatteBorder(PLAYER_PANEL_BORDER_WIDTH, 0, 0,
+ 0, Color.BLACK));
mainLayer.add(playerPanel);
startTurnPanel = new StartTurnPanel();
@@ -318,24 +329,24 @@ public class View extends JFrame implements IView {
@SuppressWarnings("unchecked")
private List<Pair<Stone, Position>> createDecorationStones() {
- Pair<Stone, Position> stoneJ = new Pair<Stone, Position>(new Stone(-'J',
- StoneColor.BLACK), new Position(2.5f, 0));
- Pair<Stone, Position> stoneR = new Pair<Stone, Position>(new Stone(-'R',
- StoneColor.ORANGE), new Position(3.5f, 0));
- Pair<Stone, Position> stoneu1 = new Pair<Stone, Position>(new Stone(-'u',
- StoneColor.BLUE), new Position(4.5f, 0));
- Pair<Stone, Position> stonem1 = new Pair<Stone, Position>(new Stone(-'m',
- StoneColor.RED), new Position(5.5f, 0));
- Pair<Stone, Position> stonem2 = new Pair<Stone, Position>(new Stone(-'m',
- StoneColor.GREEN), new Position(6.5f, 0));
- Pair<Stone, Position> stonei = new Pair<Stone, Position>(new Stone(-'i',
- StoneColor.VIOLET), new Position(7.5f, 0));
- Pair<Stone, Position> stonek = new Pair<Stone, Position>(new Stone(-'k',
- StoneColor.AQUA), new Position(8.5f, 0));
- Pair<Stone, Position> stoneu2 = new Pair<Stone, Position>(new Stone(-'u',
- StoneColor.GRAY), new Position(9.5f, 0));
- Pair<Stone, Position> stoneb = new Pair<Stone, Position>(new Stone(-'b',
- StoneColor.BLACK), new Position(10.5f, 0));
+ Pair<Stone, Position> stoneJ = new Pair<Stone, Position>(new Stone(
+ -'J', StoneColor.BLACK), new Position(2.5f, 0));
+ Pair<Stone, Position> stoneR = new Pair<Stone, Position>(new Stone(
+ -'R', StoneColor.ORANGE), new Position(3.5f, 0));
+ Pair<Stone, Position> stoneu1 = new Pair<Stone, Position>(new Stone(
+ -'u', StoneColor.BLUE), new Position(4.5f, 0));
+ Pair<Stone, Position> stonem1 = new Pair<Stone, Position>(new Stone(
+ -'m', StoneColor.RED), new Position(5.5f, 0));
+ Pair<Stone, Position> stonem2 = new Pair<Stone, Position>(new Stone(
+ -'m', StoneColor.GREEN), new Position(6.5f, 0));
+ Pair<Stone, Position> stonei = new Pair<Stone, Position>(new Stone(
+ -'i', StoneColor.VIOLET), new Position(7.5f, 0));
+ Pair<Stone, Position> stonek = new Pair<Stone, Position>(new Stone(
+ -'k', StoneColor.AQUA), new Position(8.5f, 0));
+ Pair<Stone, Position> stoneu2 = new Pair<Stone, Position>(new Stone(
+ -'u', StoneColor.GRAY), new Position(9.5f, 0));
+ Pair<Stone, Position> stoneb = new Pair<Stone, Position>(new Stone(
+ -'b', StoneColor.BLACK), new Position(10.5f, 0));
Pair<Stone, Position> stone1 = new Pair<Stone, Position>(new Stone(
StoneColor.RED), new Position(2, 1));
@@ -350,9 +361,9 @@ public class View extends JFrame implements IView {
Pair<Stone, Position> stone6 = new Pair<Stone, Position>(new Stone(
StoneColor.BLACK), new Position(11, 1));
- return Arrays
- .asList(stoneJ, stoneR, stoneu1, stonem1, stonem2, stonei, stonek,
- stoneu2, stoneb, stone1, stone2, stone3, stone4, stone5, stone6);
+ return Arrays.asList(stoneJ, stoneR, stoneu1, stonem1, stonem2, stonei,
+ stonek, stoneu2, stoneb, stone1, stone2, stone3, stone4,
+ stone5, stone6);
}
@Override
@@ -363,7 +374,8 @@ public class View extends JFrame implements IView {
&& type != BottomPanelType.WIN_PANEL);
if (type == BottomPanelType.START_GAME_PANEL) {
- table.setStoneSets(Collections.<Pair<StoneSet, Position>> emptyList());
+ table.setStoneSets(Collections
+ .<Pair<StoneSet, Position>> emptyList());
playerPanel.getHandPanel().setStones(createDecorationStones());
}