Ca. 150 Zeilen überflüssigen Code entfernt

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@463 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Ida Massow 2011-06-18 16:19:20 +02:00
parent bc835d499f
commit ac3c13c50b
6 changed files with 339 additions and 416 deletions

View file

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

View file

@ -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 + "'");
}
}

View file

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