LAden und Speichern geht jetzt immer sauber

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@388 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Ida Massow 2011-06-08 17:46:44 +02:00
parent 41fe3c93b3
commit 70af06e1bf
5 changed files with 87 additions and 44 deletions

View file

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

View file

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

View file

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

View file

@ -108,8 +108,8 @@ public interface IView {
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
@ -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();
}

View file

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