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:
parent
bc835d499f
commit
ac3c13c50b
6 changed files with 339 additions and 416 deletions
|
@ -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());
|
||||
|
|
|
@ -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 + "'");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
*
|
||||
|
|
Reference in a new issue