From b19a46b7b259f3a6e189ba594446be3ad54801f5 Mon Sep 17 00:00:00 2001 From: Jannis Harder Date: Mon, 30 May 2011 01:31:36 +0200 Subject: [PATCH] Implemented view code for AI turns git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@319 72836036-5685-4462-b002-a69064685172 --- mock/jrummikub/view/MockView.java | 6 ++++ src/jrummikub/control/RoundControl.java | 28 ++++++++++++++--- src/jrummikub/control/turn/BaseAIControl.java | 3 +- src/jrummikub/resource/dark_wood.png | Bin 0 -> 19252 bytes src/jrummikub/view/IView.java | 2 ++ src/jrummikub/view/impl/HandPanel.java | 29 +++++++++++++----- src/jrummikub/view/impl/PlayerPanel.java | 20 ++++++++++++ src/jrummikub/view/impl/View.java | 9 ++++-- 8 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 src/jrummikub/resource/dark_wood.png diff --git a/mock/jrummikub/view/MockView.java b/mock/jrummikub/view/MockView.java index 6bc41a9..ccc446f 100644 --- a/mock/jrummikub/view/MockView.java +++ b/mock/jrummikub/view/MockView.java @@ -137,4 +137,10 @@ public class MockView implements IView { } + @Override + public void enableThinkPanel(boolean b) { + // TODO Auto-generated method stub + + } + } diff --git a/src/jrummikub/control/RoundControl.java b/src/jrummikub/control/RoundControl.java index 5f46fd5..e1d2e97 100644 --- a/src/jrummikub/control/RoundControl.java +++ b/src/jrummikub/control/RoundControl.java @@ -7,6 +7,7 @@ import java.util.Set; import jrummikub.control.turn.ITurnControl; import jrummikub.control.turn.TurnControlFactory; +import static jrummikub.control.turn.TurnControlFactory.Type.*; import jrummikub.model.Hand; import jrummikub.model.IHand; import jrummikub.model.IPlayer; @@ -35,6 +36,7 @@ public class RoundControl { private Event restartRoundEvent = new Event(); private Event1 endOfRoundEvent = new Event1(); private List connections = new ArrayList(); + private ITurnControl turnControl; private boolean roundFinished; /** @@ -76,26 +78,39 @@ public class RoundControl { } private void prepareTurn() { + boolean isHuman = roundState.getActivePlayer().getPlayerSettings().getTurnControlType() == HUMAN; clonedTable = (ITable) roundState.getTable().clone(); - view.enableStartTurnPanel(true); + + if (isHuman) { + view.enableStartTurnPanel(true); + } else { + view.enableThinkPanel(true); + } + view.getTablePanel().setStoneSets(clonedTable); view.setCurrentPlayerName(roundState.getActivePlayer() .getPlayerSettings().getName()); view.setCurrentPlayerColor(roundState.getActivePlayer() .getPlayerSettings().getColor()); view.setHasLaidOut(roundState.getActivePlayer().getLaidOut()); - + + if (!isHuman) + startTurn(); } private void startTurn() { + if (turnControl != null) + return; + boolean isHuman = roundState.getActivePlayer().getPlayerSettings().getTurnControlType() == HUMAN; boolean inspectOnly = roundState.getTurnNumber() < 1; boolean mayRedeal = inspectOnly && roundState.getActivePlayer().getHand() .getIdenticalStoneCount() >= 3; - view.getPlayerPanel().setEndTurnMode(inspectOnly, mayRedeal); - - ITurnControl turnControl = TurnControlFactory.getFactory(roundState.getActivePlayer() + if (isHuman) { + view.getPlayerPanel().setEndTurnMode(inspectOnly, mayRedeal); + } + turnControl = TurnControlFactory.getFactory(roundState.getActivePlayer() .getPlayerSettings().getTurnControlType()).create(); turnControl.setup(roundState.getActivePlayer(), clonedTable, view, inspectOnly, mayRedeal); @@ -142,6 +157,8 @@ public class RoundControl { } private void endOfTurn() { + view.enableThinkPanel(false); + turnControl = null; if (roundState.getTurnNumber() >= 1) { checkTurn(); } @@ -335,6 +352,7 @@ public class RoundControl { } private void redeal() { + turnControl = null; for (Connection c : new ArrayList(connections)) { c.remove(); } diff --git a/src/jrummikub/control/turn/BaseAIControl.java b/src/jrummikub/control/turn/BaseAIControl.java index 2ed4c6e..d143dc1 100644 --- a/src/jrummikub/control/turn/BaseAIControl.java +++ b/src/jrummikub/control/turn/BaseAIControl.java @@ -51,7 +51,8 @@ public class BaseAIControl extends AbstractTurnControl { private void emitEndOfTurn() { long timeElapsed = System.currentTimeMillis() - startTime; - long waitTime = 2000 - timeElapsed; + long timeNeeded = Math.min((long)(1000 + Math.random() * hand.getSize() * 100), 50000); + long waitTime = timeNeeded - timeElapsed; if (waitTime > 0) { try { diff --git a/src/jrummikub/resource/dark_wood.png b/src/jrummikub/resource/dark_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dc7fb03344fb92f4947bab6b76144f2efc073d GIT binary patch literal 19252 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 selectedStones = Collections.emptyList(); - /** * Creates a new Board instance */ @@ -65,14 +71,14 @@ class HandPanel extends AbstractStonePanel implements IHandPanel { }); } - private BufferedImage getScaledBackground(int size) { + private BufferedImage getScaledBackground(int size, BufferedImage background) { BufferedImage scaled = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB); Graphics2D g = scaled.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC); - g.drawImage(BACKGROUND, 0, 0, size, size, null); + g.drawImage(background, 0, 0, size, size, null); return scaled; } @@ -86,13 +92,22 @@ class HandPanel extends AbstractStonePanel implements IHandPanel { int size = height / HEIGHT; + + BufferedImage background = isEnabled() ? scaledBackground : scaledDarkBackground ; + if (repaintAll) { - if (scaledBackground.getHeight() != size) - scaledBackground = getScaledBackground(size); - + if (background.getHeight() != size) { + if (!isEnabled()) { + scaledDarkBackground = getScaledBackground(size, DARK_BACKGROUND); + } else { + scaledBackground = getScaledBackground(size, BACKGROUND); + } + background = isEnabled() ? scaledBackground : scaledDarkBackground; + } + for (int i = 0; i < HEIGHT; ++i) { for (int xpos = -size * i / 3; xpos < width; xpos += size) { - g.drawImage(scaledBackground, xpos, size * i, null); + g.drawImage(background, xpos, size * i, null); } } } diff --git a/src/jrummikub/view/impl/PlayerPanel.java b/src/jrummikub/view/impl/PlayerPanel.java index 5eba07a..ba0deb4 100644 --- a/src/jrummikub/view/impl/PlayerPanel.java +++ b/src/jrummikub/view/impl/PlayerPanel.java @@ -8,6 +8,7 @@ import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.text.DecimalFormat; +import java.util.Collections; import javax.swing.JButton; import javax.swing.JLabel; @@ -16,8 +17,11 @@ import javax.swing.JProgressBar; import javax.swing.UIManager; import javax.swing.border.EmptyBorder; +import jrummikub.model.Position; +import jrummikub.model.Stone; import jrummikub.util.Event; import jrummikub.util.IEvent; +import jrummikub.util.Pair; import jrummikub.view.IPlayerPanel; /** @@ -382,4 +386,20 @@ class PlayerPanel extends JPanel implements IPlayerPanel { keepStonesButton.setVisible(false); } } + + void enableButtons(boolean enable) { + sortByGroupsButton.setEnabled(enable); + sortByRunsButton.setEnabled(enable); + if (!enable) { + setEndTurnMode(false, false); + endTurnButton.setText("
Computer denkt nach"); + hand.setStones(Collections.>emptyList()); + handRowDownButton.setEnabled(false); + handRowDownButton.setEnabled(false); + } + endTurnButton.setEnabled(enable); + redealButton.setEnabled(enable); + keepStonesButton.setEnabled(enable); + hand.setEnabled(enable); + } } diff --git a/src/jrummikub/view/impl/View.java b/src/jrummikub/view/impl/View.java index e374f8c..fceaeeb 100644 --- a/src/jrummikub/view/impl/View.java +++ b/src/jrummikub/view/impl/View.java @@ -97,8 +97,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(); @@ -250,4 +250,9 @@ public class View extends JFrame implements IView { playerPanel.showButtons(false); } } + + @Override + public void enableThinkPanel(boolean enable) { + playerPanel.enableButtons(!enable); + } }