From 65d08ea450ac96ce35d1512707850524d805c790 Mon Sep 17 00:00:00 2001 From: Jannis Harder Date: Sun, 29 May 2011 20:22:47 +0200 Subject: Created dummy base AI control git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@311 72836036-5685-4462-b002-a69064685172 --- src/jrummikub/control/RoundControl.java | 12 ++-- .../control/turn/AbstractTurnControl.java | 22 ++++++- src/jrummikub/control/turn/BaseAIControl.java | 28 ++++++++ src/jrummikub/control/turn/HumanTurnControl.java | 41 +++--------- src/jrummikub/control/turn/ITurnControl.java | 23 ++++++- src/jrummikub/control/turn/TurnControlFactory.java | 2 +- test/jrummikub/control/turn/TurnControlTest.java | 77 ++++++++++++---------- 7 files changed, 123 insertions(+), 82 deletions(-) create mode 100644 src/jrummikub/control/turn/BaseAIControl.java diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java index 671086f..1dcd5e8 100644 --- a/src/jrummikub/control/RoundControl.java +++ b/src/jrummikub/control/RoundControl.java @@ -95,14 +95,11 @@ public class RoundControl { view.getPlayerPanel().setEndTurnMode(inspectOnly, mayRedeal); - ITurnControl turnControl = roundState - .getActivePlayer() - .getPlayerSettings() - .getTurnControlFactory() - .create(roundState.getActivePlayer().getHand(), clonedTable, - view, inspectOnly); + ITurnControl turnControl = roundState.getActivePlayer() + .getPlayerSettings().getTurnControlFactory().create(); + turnControl.setup(roundState.getActivePlayer().getHand(), clonedTable, + view, inspectOnly, mayRedeal); turnControl.getEndOfTurnEvent().add(new IListener() { - @Override public void handle() { endOfTurn(); @@ -115,7 +112,6 @@ public class RoundControl { redeal(); } }); - turnControl.startTurn(); } diff --git a/src/jrummikub/control/turn/AbstractTurnControl.java b/src/jrummikub/control/turn/AbstractTurnControl.java index 9e3b069..aeb6241 100644 --- a/src/jrummikub/control/turn/AbstractTurnControl.java +++ b/src/jrummikub/control/turn/AbstractTurnControl.java @@ -1,7 +1,10 @@ package jrummikub.control.turn; +import jrummikub.model.IHand; +import jrummikub.model.ITable; import jrummikub.util.Event; import jrummikub.util.IEvent; +import jrummikub.view.IView; /** * Abstract base class for TurnControls @@ -10,9 +13,12 @@ public abstract class AbstractTurnControl implements ITurnControl { protected Event endOfTurnEvent = new Event(); protected Event redealEvent = new Event(); - - @Override - public abstract void startTurn(); + protected IHand hand; + protected ITable table; + protected IView view; + protected boolean inspectOnly; + protected boolean mayRedeal; + @Override public IEvent getEndOfTurnEvent() { @@ -23,5 +29,15 @@ public abstract class AbstractTurnControl implements ITurnControl { public Event getRedealEvent() { return redealEvent; } + + @Override + public void setup(IHand hand, ITable table, IView view, + boolean inspectOnly, boolean mayRedeal) { + this.hand = hand; + this.table = table; + this.view = view; + this.inspectOnly = inspectOnly; + this.mayRedeal = mayRedeal; + } } \ No newline at end of file diff --git a/src/jrummikub/control/turn/BaseAIControl.java b/src/jrummikub/control/turn/BaseAIControl.java new file mode 100644 index 0000000..98dceb3 --- /dev/null +++ b/src/jrummikub/control/turn/BaseAIControl.java @@ -0,0 +1,28 @@ +package jrummikub.control.turn; + +import jrummikub.model.IHand; +import jrummikub.model.ITable; +import jrummikub.view.IView; + + +public class BaseAIControl extends AbstractTurnControl { + + @Override + public void startTurn() { + if (mayRedeal) { + redealEvent.emit(); + } else { + endOfTurnEvent.emit(); + } + } + + static public TurnControlFactory getFactory() { + return new TurnControlFactory() { + @Override + public ITurnControl create() { + return new BaseAIControl(); + } + }; + } + +} diff --git a/src/jrummikub/control/turn/HumanTurnControl.java b/src/jrummikub/control/turn/HumanTurnControl.java index 399f547..6dc055a 100644 --- a/src/jrummikub/control/turn/HumanTurnControl.java +++ b/src/jrummikub/control/turn/HumanTurnControl.java @@ -26,37 +26,16 @@ import jrummikub.view.IView; * Controller for a single turn made by a human player */ public class HumanTurnControl extends AbstractTurnControl { - private IHand hand; - private ITable table; private ITurnTimer timer; - private IView view; private List selectedStones = new ArrayList(); private List connections = new ArrayList(); - private boolean inspectOnly; - /** - * Create a new TurnControl using a given hand (of the active player), a - * given table and a given view for user interaction. - * - * @param hand - * active player's hand - * @param table - * current table - * @param view - * view for user interaction. - * @param inspectOnly - * the current turn doesn't allow any table manipulation + * Create a new human player's turn control */ - public HumanTurnControl(IHand hand, ITable table, IView view, - boolean inspectOnly) { - this.hand = hand; - this.table = table; - this.view = view; - this.inspectOnly = inspectOnly; - this.timer = new TurnTimer(view); + public HumanTurnControl() { } /** @@ -67,25 +46,22 @@ public class HumanTurnControl extends AbstractTurnControl { public static TurnControlFactory getFactory() { return new TurnControlFactory() { @Override - public ITurnControl create(IHand hand, ITable table, IView view, - boolean inspectOnly) { - return new HumanTurnControl(hand, table, view, inspectOnly); + public ITurnControl create() { + return new HumanTurnControl(); } }; } /** Test only constructor **/ - HumanTurnControl(IHand hand, ITable table, IView view, ITurnTimer testTimer) { - this.hand = hand; - this.table = table; - this.view = view; + HumanTurnControl(ITurnTimer testTimer) { this.timer = testTimer; - this.inspectOnly = false; } @Override public void startTurn() { - + if (this.timer == null) { + this.timer = new TurnTimer(view); + } IListener endOfTurnListener = new IListener() { @Override @@ -565,5 +541,4 @@ public class HumanTurnControl extends AbstractTurnControl { } } } - } diff --git a/src/jrummikub/control/turn/ITurnControl.java b/src/jrummikub/control/turn/ITurnControl.java index 8c80b1f..80e2b27 100644 --- a/src/jrummikub/control/turn/ITurnControl.java +++ b/src/jrummikub/control/turn/ITurnControl.java @@ -1,14 +1,28 @@ package jrummikub.control.turn; +import jrummikub.model.IHand; +import jrummikub.model.ITable; import jrummikub.util.Event; import jrummikub.util.IEvent; +import jrummikub.view.IView; public interface ITurnControl { - /** * Start the turn + * + * @param hand + * active player's hand + * @param table + * current table + * @param view + * view for user interaction. + * @param inspectOnly + * the current turn doesn't allow any table manipulation + * @param mayRedeal + * true when the current player may decide to redeal */ - public abstract void startTurn(); + public abstract void setup(IHand hand, ITable table, IView view, + boolean inspectOnly, boolean mayRedeal); /** * Get the event that is emitted when the turn is over @@ -24,4 +38,9 @@ public interface ITurnControl { */ public abstract Event getRedealEvent(); + /** + * Start the turn + */ + public abstract void startTurn(); + } \ No newline at end of file diff --git a/src/jrummikub/control/turn/TurnControlFactory.java b/src/jrummikub/control/turn/TurnControlFactory.java index 3af910b..48c028e 100644 --- a/src/jrummikub/control/turn/TurnControlFactory.java +++ b/src/jrummikub/control/turn/TurnControlFactory.java @@ -5,5 +5,5 @@ import jrummikub.model.ITable; import jrummikub.view.IView; public interface TurnControlFactory { - public ITurnControl create(IHand hand, ITable table, IView view, boolean inspectOnly); + public ITurnControl create(); } diff --git a/test/jrummikub/control/turn/TurnControlTest.java b/test/jrummikub/control/turn/TurnControlTest.java index 150f3e9..9140323 100644 --- a/test/jrummikub/control/turn/TurnControlTest.java +++ b/test/jrummikub/control/turn/TurnControlTest.java @@ -105,7 +105,8 @@ public class TurnControlTest { mockTimer = new MockTimer(); mockTable = new MockTable(); mockHand = new MockHand(); - testControl = new HumanTurnControl(mockHand, mockTable, mockView, mockTimer); + testControl = new HumanTurnControl(mockTimer); + testControl.setup(mockHand, mockTable, mockView, false, false); } /** */ @@ -122,14 +123,15 @@ public class TurnControlTest { public void showInitialHand() { mockView.displayStartTurnPanel = true; - List> stones = Arrays.asList( - new Pair(new Stone(RED), new Position(0, 0)), - new Pair(new Stone(BLACK), new Position(1, 0))); + List> stones = Arrays + .asList(new Pair(new Stone(RED), new Position( + 0, 0)), new Pair(new Stone(BLACK), + new Position(1, 0))); mockHand.iterable = stones; - testControl = new HumanTurnControl(mockHand, mockTable, mockView, mockTimer); - + testControl = new HumanTurnControl(mockTimer); + testControl.setup(mockHand, mockTable, mockView, false, false); testControl.startTurn(); int i = 0; @@ -256,8 +258,8 @@ public class TurnControlTest { mockView.handPanel.stoneClickEvent.emit(firstStone, true); mockView.handPanel.stoneClickEvent.emit(secondStone, true); - mockView.tablePanel.stoneCollectionPanel.stoneClickEvent.emit(firstStone, - false); + mockView.tablePanel.stoneCollectionPanel.stoneClickEvent.emit( + firstStone, false); assertCollection(Arrays.asList(secondStone)); } @@ -273,8 +275,8 @@ public class TurnControlTest { mockView.handPanel.stoneClickEvent.emit(firstStone, true); mockView.handPanel.stoneClickEvent.emit(secondStone, true); - mockView.tablePanel.stoneCollectionPanel.stoneClickEvent.emit(firstStone, - true); + mockView.tablePanel.stoneCollectionPanel.stoneClickEvent.emit( + firstStone, true); assertCollection(Arrays.asList(secondStone, firstStone)); } @@ -290,8 +292,8 @@ public class TurnControlTest { mockView.handPanel.stoneClickEvent.emit(firstStone, true); mockView.handPanel.stoneClickEvent.emit(secondStone, true); - mockView.tablePanel.stoneCollectionPanel.stoneClickEvent.emit(firstStone, - true); + mockView.tablePanel.stoneCollectionPanel.stoneClickEvent.emit( + firstStone, true); mockView.tablePanel.stoneCollectionPanel.setClickEvent.emit(firstStone, true); @@ -398,7 +400,8 @@ public class TurnControlTest { Stone stone2 = new Stone(2, StoneColor.RED); Stone stone3 = new Stone(3, StoneColor.RED); Stone stone4 = new Stone(4, StoneColor.RED); - StoneSet set1 = new StoneSet(Arrays.asList(stone1, stone2, stone3, stone4)); + StoneSet set1 = new StoneSet(Arrays.asList(stone1, stone2, stone3, + stone4)); mockTable.findStoneSet.put(stone1, set1); mockTable.findStoneSet.put(stone3, set1); @@ -419,7 +422,8 @@ public class TurnControlTest { Stone stone2 = new Stone(2, StoneColor.RED); Stone stone3 = new Stone(3, StoneColor.RED); Stone stone4 = new Stone(4, StoneColor.RED); - StoneSet set1 = new StoneSet(Arrays.asList(stone1, stone2, stone3, stone4)); + StoneSet set1 = new StoneSet(Arrays.asList(stone1, stone2, stone3, + stone4)); mockTable.findStoneSet.put(stone1, set1); mockTable.findStoneSet.put(stone3, set1); @@ -442,7 +446,8 @@ public class TurnControlTest { Stone stone2 = new Stone(2, StoneColor.RED); Stone stone3 = new Stone(3, StoneColor.RED); Stone stone4 = new Stone(4, StoneColor.RED); - StoneSet set1 = new StoneSet(Arrays.asList(stone1, stone2, stone3, stone4)); + StoneSet set1 = new StoneSet(Arrays.asList(stone1, stone2, stone3, + stone4)); mockTable.findStoneSet.put(stone1, set1); mockTable.findStoneSet.put(stone3, set1); @@ -621,8 +626,8 @@ public class TurnControlTest { @Test public void testAddLeft() { AccessibleTable table = new AccessibleTable(); - HumanTurnControl turnControl = new HumanTurnControl(mockHand, table, mockView, - mockTimer); + HumanTurnControl turnControl = new HumanTurnControl(mockTimer); + turnControl.setup(mockHand, table, mockView, false, false); turnControl.startTurn(); Stone blueOne = new Stone(1, BLUE); Stone redOne = new Stone(1, RED); @@ -637,10 +642,10 @@ public class TurnControlTest { Stone blackThree = new Stone(3, BLACK); Stone blackFour = new Stone(4, BLACK); Stone blackFive = new Stone(5, BLACK); - StoneSet oldSet1 = new StoneSet(Arrays.asList(blueOne, redOne, blackOne, - redTwo, redThree, redFour, blackTwo, blackThree)); - StoneSet oldSet2 = new StoneSet( - Arrays.asList(blueTwo, blackFour, blackFive)); + StoneSet oldSet1 = new StoneSet(Arrays.asList(blueOne, redOne, + blackOne, redTwo, redThree, redFour, blackTwo, blackThree)); + StoneSet oldSet2 = new StoneSet(Arrays.asList(blueTwo, blackFour, + blackFive)); table.drop(oldSet1, new Position(0, 0)); table.drop(oldSet2, new Position(0, 0)); mockHand.drop(blueThree, new Position(0, 0)); @@ -738,8 +743,8 @@ public class TurnControlTest { @Test public void testAddRight() { AccessibleTable table = new AccessibleTable(); - HumanTurnControl turnControl = new HumanTurnControl(mockHand, table, mockView, - mockTimer); + HumanTurnControl turnControl = new HumanTurnControl(mockTimer); + turnControl.setup(mockHand, table, mockView, false, false); turnControl.startTurn(); Stone blueOne = new Stone(1, BLUE); Stone redOne = new Stone(1, RED); @@ -754,10 +759,10 @@ public class TurnControlTest { Stone blackThree = new Stone(3, BLACK); Stone blackFour = new Stone(4, BLACK); Stone blackFive = new Stone(5, BLACK); - StoneSet oldSet1 = new StoneSet(Arrays.asList(blueOne, redOne, blackOne, - redTwo, redThree, redFour, blackTwo, blackThree)); - StoneSet oldSet2 = new StoneSet( - Arrays.asList(blueTwo, blackFour, blackFive)); + StoneSet oldSet1 = new StoneSet(Arrays.asList(blueOne, redOne, + blackOne, redTwo, redThree, redFour, blackTwo, blackThree)); + StoneSet oldSet2 = new StoneSet(Arrays.asList(blueTwo, blackFour, + blackFive)); table.drop(oldSet1, new Position(0, 0)); table.drop(oldSet2, new Position(0, 0)); mockHand.drop(blueThree, new Position(0, 0)); @@ -855,8 +860,8 @@ public class TurnControlTest { @Test public void testAddNewSet() { AccessibleTable table = new AccessibleTable(); - HumanTurnControl turnControl = new HumanTurnControl(mockHand, table, mockView, - mockTimer); + HumanTurnControl turnControl = new HumanTurnControl(mockTimer); + turnControl.setup(mockHand, table, mockView, false, false); turnControl.startTurn(); Stone blueOne = new Stone(1, BLUE); Stone redOne = new Stone(1, RED); @@ -871,10 +876,10 @@ public class TurnControlTest { Stone blackThree = new Stone(3, BLACK); Stone blackFour = new Stone(4, BLACK); Stone blackFive = new Stone(5, BLACK); - StoneSet oldSet1 = new StoneSet(Arrays.asList(blueOne, redOne, blackOne, - redTwo, redThree, redFour, blackTwo, blackThree)); - StoneSet oldSet2 = new StoneSet( - Arrays.asList(blueTwo, blackFour, blackFive)); + StoneSet oldSet1 = new StoneSet(Arrays.asList(blueOne, redOne, + blackOne, redTwo, redThree, redFour, blackTwo, blackThree)); + StoneSet oldSet2 = new StoneSet(Arrays.asList(blueTwo, blackFour, + blackFive)); table.drop(oldSet1, new Position(0, 0)); table.drop(oldSet2, new Position(0, 0)); mockHand.drop(blueThree, new Position(0, 0)); @@ -978,7 +983,8 @@ public class TurnControlTest { List> stones = new ArrayList>( mockHand.stones); - Collections.sort(stones, new HumanTurnControl.HandStonePositionComparator()); + Collections.sort(stones, + new HumanTurnControl.HandStonePositionComparator()); assertEquals(stones.size(), 13); @@ -1039,7 +1045,8 @@ public class TurnControlTest { List> stones = new ArrayList>( mockHand.stones); - Collections.sort(stones, new HumanTurnControl.HandStonePositionComparator()); + Collections.sort(stones, + new HumanTurnControl.HandStonePositionComparator()); assertEquals(stones.size(), 13); -- cgit v1.2.3