diff options
Diffstat (limited to 'src/jrummikub/control')
-rw-r--r-- | src/jrummikub/control/network/AbstractGameBeginControl.java | 67 | ||||
-rw-r--r-- | src/jrummikub/control/network/ConnectionControl.java | 33 | ||||
-rw-r--r-- | src/jrummikub/control/turn/AIControl.java | 71 |
3 files changed, 108 insertions, 63 deletions
diff --git a/src/jrummikub/control/network/AbstractGameBeginControl.java b/src/jrummikub/control/network/AbstractGameBeginControl.java index 598126a..fd3b546 100644 --- a/src/jrummikub/control/network/AbstractGameBeginControl.java +++ b/src/jrummikub/control/network/AbstractGameBeginControl.java @@ -18,6 +18,10 @@ import jrummikub.view.ISettingsPanel; import jrummikub.view.ISettingsPanel.SettingsMode; import jrummikub.view.IView; +/** + * Abstract class for network game controls inbetween choosing and starting a + * game + */ public abstract class AbstractGameBeginControl { protected List<Connection> connections = new ArrayList<Connection>(); protected GameData gameData; @@ -25,6 +29,18 @@ public abstract class AbstractGameBeginControl { protected IView view; protected Event backEvent = new Event(); + /** + * Create a new game begin control + * + * @param connection + * connection control for mesages and events + * @param view + * the view + * @param gameData + * game data of chosen game + * @param settingsMode + * mode of settings panel + */ public AbstractGameBeginControl(IConnectionControl connection, IView view, final GameData gameData, SettingsMode settingsMode) { this.connectionControl = connection; @@ -35,8 +51,29 @@ public abstract class AbstractGameBeginControl { view.getSettingsPanel().enableAddPlayerButton(false); updateSettingsPanel(); - connections.add(view.getSettingsPanel().getBackEvent() - .add(new IListener() { + addViewListeners(view, gameData); + + connections.add(connectionControl.getChangeColorEvent().add( + new IListener2<String, Color>() { + @Override + public void handle(String sender, Color color) { + List<PlayerSettings> players = gameData + .getGameSettings().getPlayerList(); + for (PlayerSettings s : players) { + if (s.getName().equals(sender) + && s.getType() == Type.NETWORK) { + s.setColor(color); + break; + } + } + updateSettingsPanel(); + } + })); + } + + private void addViewListeners(IView view, final GameData gameData) { + connections.add(view.getSettingsPanel().getBackEvent().add( + new IListener() { @Override public void handle() { goBack(); @@ -62,26 +99,16 @@ public abstract class AbstractGameBeginControl { updateSettingsPanel(); } })); - connections.add(connectionControl.getChangeColorEvent().add( - new IListener2<String, Color>() { - @Override - public void handle(String sender, Color color) { - List<PlayerSettings> players = gameData - .getGameSettings().getPlayerList(); - for (PlayerSettings s : players) { - if (s.getName().equals(sender) - && s.getType() == Type.NETWORK) { - s.setColor(color); - break; - } - } - updateSettingsPanel(); - } - })); } protected abstract void goBack(); + /** + * The back event is emitted when the player wants to go back to the + * previous control and panel + * + * @return the event + */ public Event getBackEvent() { return backEvent; } @@ -96,8 +123,8 @@ public abstract class AbstractGameBeginControl { protected void updateSettingsPanel() { view.getSettingsPanel().setGameSettings(gameData.getGameSettings()); - Set<Color> colors = new HashSet<Color>( - Arrays.asList(ISettingsPanel.PLAYER_COLORS)); + Set<Color> colors = new HashSet<Color>(Arrays + .asList(ISettingsPanel.PLAYER_COLORS)); for (PlayerSettings player : gameData.getGameSettings().getPlayerList()) { colors.remove(player.getColor()); diff --git a/src/jrummikub/control/network/ConnectionControl.java b/src/jrummikub/control/network/ConnectionControl.java index 28684b2..e435309 100644 --- a/src/jrummikub/control/network/ConnectionControl.java +++ b/src/jrummikub/control/network/ConnectionControl.java @@ -323,20 +323,25 @@ class ConnectionControl implements IConnectionControl { if (!currentGame.getGameID().equals(uuid)) { return; } - if (messageType.equals("game_join")) { - gameJoinEvent.emit(sender); - } else if (messageType.equals("game_leave")) { - gameLeaveEvent.emit(sender); - } else if (messageType.equals("game_join_ack")) { - gameJoinAckEvent - .emit(Boolean.valueOf(extension.getValue("ack"))); - } else if (messageType.equals("change_color")) { - changeColorEvent.emit(sender, (Color) Base64 - .decodeToObject(extension.getValue("color"))); - } else { - System.err.println("Received unrecognized message of type '" - + messageType + "'"); - } + messagesDuringGame(extension, sender, messageType); + } + } + + private void messagesDuringGame(DefaultPacketExtension extension, + String sender, String messageType) { + if (messageType.equals("game_join")) { + gameJoinEvent.emit(sender); + } else if (messageType.equals("game_leave")) { + gameLeaveEvent.emit(sender); + } else if (messageType.equals("game_join_ack")) { + gameJoinAckEvent + .emit(Boolean.valueOf(extension.getValue("ack"))); + } else if (messageType.equals("change_color")) { + changeColorEvent.emit(sender, (Color) Base64 + .decodeToObject(extension.getValue("color"))); + } else { + System.err.println("Received unrecognized message of type '" + + messageType + "'"); } } diff --git a/src/jrummikub/control/turn/AIControl.java b/src/jrummikub/control/turn/AIControl.java index 324c8d7..7784d7f 100644 --- a/src/jrummikub/control/turn/AIControl.java +++ b/src/jrummikub/control/turn/AIControl.java @@ -85,17 +85,9 @@ public class AIControl extends AbstractTurnControl { List<Stone> tableStones = new ArrayList<Stone>(); List<Stone> handStones = new ArrayList<Stone>(); - for (Pair<Stone, Position> entry : turnInfo.getHand()) { - handStones.add(entry.getFirst()); - } + addHandStones(handStones); - if (turnInfo.getLaidOut()) { - for (Pair<StoneSet, Position> entry : turnInfo.getTable()) { - for (Stone stone : entry.getFirst()) { - tableStones.add(stone); - } - } - } + addTableStones(tableStones); logic = new TurnLogic(settings, tableStones, handStones); @@ -133,6 +125,22 @@ public class AIControl extends AbstractTurnControl { } + private void addHandStones(List<Stone> handStones) { + for (Pair<Stone, Position> entry : turnInfo.getHand()) { + handStones.add(entry.getFirst()); + } + } + + private void addTableStones(List<Stone> tableStones) { + if (turnInfo.getLaidOut()) { + for (Pair<StoneSet, Position> entry : turnInfo.getTable()) { + for (Stone stone : entry.getFirst()) { + tableStones.add(stone); + } + } + } + } + private void executeTurn() { if (turnDone) { return; @@ -143,25 +151,7 @@ public class AIControl extends AbstractTurnControl { if (result != null) { if (turnInfo.getLaidOut()) { - outerLoop: for (Iterator<Pair<StoneSet, Position>> it = turnInfo - .getTable().iterator(); it.hasNext();) { - Pair<StoneSet, Position> pair = it.next(); - setSearch: for (Iterator<StoneSet> it2 = result.iterator(); it2 - .hasNext();) { - StoneSet set = it2.next(); - if (set.getSize() != pair.getFirst().getSize()) { - continue; - } - for (int i = 0; i < set.getSize(); i++) { - if (set.get(i) != pair.getFirst().get(i)) { - continue setSearch; - } - } - it2.remove(); - continue outerLoop; - } - it.remove(); - } + doNotMoveExistingSets(result); } for (StoneSet set : result) { @@ -178,6 +168,29 @@ public class AIControl extends AbstractTurnControl { emitEndOfTurn(); } + private void doNotMoveExistingSets(List<StoneSet> result) { + + outerLoop: for (Iterator<Pair<StoneSet, Position>> it = turnInfo + .getTable().iterator(); it.hasNext();) { + Pair<StoneSet, Position> pair = it.next(); + setSearch: for (Iterator<StoneSet> it2 = result.iterator(); it2 + .hasNext();) { + StoneSet set = it2.next(); + if (set.getSize() != pair.getFirst().getSize()) { + continue; + } + for (int i = 0; i < set.getSize(); i++) { + if (set.get(i) != pair.getFirst().get(i)) { + continue setSearch; + } + } + it2.remove(); + continue outerLoop; + } + it.remove(); + } + } + /** * Get the factory for the base AI control * |