From 9cf3dc09ae319b6e627a4c52923bbc325137ef34 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 29 May 2011 15:50:30 +0200 Subject: Implement score panel git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@298 72836036-5685-4462-b002-a69064685172 --- src/jrummikub/control/GameControl.java | 29 ++++--- src/jrummikub/model/Score.java | 4 +- src/jrummikub/view/IScorePanel.java | 35 +++++++++ src/jrummikub/view/IView.java | 18 ++++- src/jrummikub/view/impl/ScorePanel.java | 131 ++++++++++++++++++++++++++++++++ src/jrummikub/view/impl/View.java | 18 +++++ 6 files changed, 223 insertions(+), 12 deletions(-) create mode 100644 src/jrummikub/view/IScorePanel.java create mode 100644 src/jrummikub/view/impl/ScorePanel.java (limited to 'src/jrummikub') diff --git a/src/jrummikub/control/GameControl.java b/src/jrummikub/control/GameControl.java index 0ae05a6..887b80d 100644 --- a/src/jrummikub/control/GameControl.java +++ b/src/jrummikub/control/GameControl.java @@ -34,9 +34,10 @@ public class GameControl { public GameControl(GameSettings gameSettings, IView view) { this.gameSettings = gameSettings; this.view = view; - + gameState = new GameState(); - gameState.setFirstRoundFirstPlayer((int)(Math.random() * gameSettings.getPlayerList().size())); + gameState.setFirstRoundFirstPlayer((int) (Math.random() * gameSettings + .getPlayerList().size())); connections.add(view.getNewRoundEvent().add(new IListener() { @Override @@ -64,20 +65,22 @@ public class GameControl { return; } + view.showScorePanel(false); + IRoundState roundState = new RoundState(gameSettings); - // TODO: add number of already played rounds - roundState.setActivePlayerNumber(gameState.getFirstRoundFirstPlayer()); - + roundState.setActivePlayerNumber(gameState.getFirstRoundFirstPlayer() + + gameState.getScores().size()); + roundControl = new RoundControl(roundState, view); roundControl.getEndOfRoundEvent().add(new IListener1() { @Override public void handle(Score roundScore) { - endOfRound(); + endOfRound(roundScore); } }); - + roundControl.getRestartRoundEvent().add(new IListener() { @Override @@ -88,15 +91,23 @@ public class GameControl { roundControl.startRound(); } - + private void restartRound() { roundControl = null; startRound(); } - private void endOfRound() { + private void endOfRound(Score roundScore) { + gameState.getScores().add(roundScore); + roundControl = null; view.enableWinPanel(true); + + view.getScorePanel().setPlayers(gameSettings.getPlayerList()); + view.getScorePanel().setScores(gameState.getScores()); + view.getScorePanel().setAccumulatedScore(gameState.getAccumulatedScore()); + view.getScorePanel().update(); + view.showScorePanel(true); } private void finalScore() { diff --git a/src/jrummikub/model/Score.java b/src/jrummikub/model/Score.java index adc78a7..7020edc 100644 --- a/src/jrummikub/model/Score.java +++ b/src/jrummikub/model/Score.java @@ -6,8 +6,8 @@ import java.util.List; * Score of a single round */ public class Score { - List winners; - List points; + private List winners; + private List points; /** * Create a new round score diff --git a/src/jrummikub/view/IScorePanel.java b/src/jrummikub/view/IScorePanel.java new file mode 100644 index 0000000..be0b912 --- /dev/null +++ b/src/jrummikub/view/IScorePanel.java @@ -0,0 +1,35 @@ +package jrummikub.view; + +import jrummikub.model.PlayerSettings; +import jrummikub.model.Score; + +/** + * The panel the scores are displayed in + */ +public interface IScorePanel { + /** + * Sets the scores of the played rounds + * + * @param scores the round scores + */ + public void setScores(Iterable scores); + + /** + * Sets the accumulated scores to display + * + * @param accumulatedScore the accumulated score + */ + public void setAccumulatedScore(Score accumulatedScore); + + /** + * Sets the player list to display + * + * @param players the player list + */ + void setPlayers(Iterable players); + + /** + * Updates the score display + */ + void update(); +} diff --git a/src/jrummikub/view/IView.java b/src/jrummikub/view/IView.java index 6a96213..3e33e44 100644 --- a/src/jrummikub/view/IView.java +++ b/src/jrummikub/view/IView.java @@ -16,6 +16,13 @@ public interface IView { */ public ISettingsPanel getSettingsPanel(); + /** + * Returns the score panel + * + * @return the score panel + */ + public IScorePanel getScorePanel(); + /** * Returns the table * @@ -91,7 +98,16 @@ public interface IView { /** * Shows or hides the game settings panel * - * @param show specifies if the panel shall be shown or hidden + * @param show + * specifies if the panel shall be shown or hidden */ void showSettingsPanel(boolean show); + + /** + * Shows or hides the score panel + * + * @param show + * specifies if the panel shall be shown or hidden + */ + void showScorePanel(boolean show); } diff --git a/src/jrummikub/view/impl/ScorePanel.java b/src/jrummikub/view/impl/ScorePanel.java new file mode 100644 index 0000000..e926294 --- /dev/null +++ b/src/jrummikub/view/impl/ScorePanel.java @@ -0,0 +1,131 @@ +package jrummikub.view.impl; + +import java.awt.Color; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.util.Iterator; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.border.LineBorder; + +import jrummikub.model.PlayerSettings; +import jrummikub.model.Score; +import jrummikub.view.IScorePanel; + +@SuppressWarnings("serial") +class ScorePanel extends JPanel implements IScorePanel { + private Iterable players; + private Iterable scores; + private Score accumulatedScore; + + public ScorePanel() { + setLayout(new GridBagLayout()); + setBorder(new LineBorder(Color.BLACK)); + } + + @Override + public void setPlayers(Iterable players) { + this.players = players; + } + + @Override + public void setScores(Iterable scores) { + this.scores = scores; + } + + @Override + public void setAccumulatedScore(Score accumulatedScore) { + this.accumulatedScore = accumulatedScore; + } + + @Override + public void update() { + this.removeAll(); + + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.BOTH; + c.weightx = 1.0; + c.gridwidth = GridBagConstraints.REMAINDER; + + addPlayerNames(); + + add(new JSeparator(), c); + + int n = 0; + for (Iterator it = scores.iterator(); it.hasNext();) { + addScoreRow(it.next(), ++n); + } + + add(new JSeparator(), c); + + addAccumulatedScore(); + } + + private void addPlayerNames() { + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.BOTH; + c.weightx = 1.0; + + JLabel roundHead = new JLabel("Runde"); + roundHead.setHorizontalAlignment(JLabel.CENTER); + add(roundHead, c); + + for (Iterator it = players.iterator(); it.hasNext();) { + PlayerSettings player = it.next(); + + if (!it.hasNext()) { + c.gridwidth = GridBagConstraints.REMAINDER; + } + + JLabel playerNameLabel = new JLabel(player.getName()); + playerNameLabel.setIcon(ImageUtil.createColorIcon(player.getColor(), 12, + 1)); + playerNameLabel.setHorizontalAlignment(JLabel.CENTER); + + add(playerNameLabel, c); + } + } + + private void addScoreRow(Score score, int n) { + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.BOTH; + c.weightx = 1.0; + c.gridwidth = 1; + + JLabel roundLabel = new JLabel(Integer.toString(n)); + roundLabel.setHorizontalAlignment(JLabel.CENTER); + add(roundLabel, c); + + for (int i = 0; i < score.getPoints().size(); ++i) { + if (i == score.getPoints().size()-1) { + c.gridwidth = GridBagConstraints.REMAINDER; + } + + JLabel scoreLabel = new JLabel(Integer.toString(score.getPoints().get(i))); + scoreLabel.setHorizontalAlignment(JLabel.CENTER); + add(scoreLabel, c); + } + } + + private void addAccumulatedScore() { + GridBagConstraints c = new GridBagConstraints(); + c.fill = GridBagConstraints.BOTH; + c.weightx = 1.0; + + JLabel accumLabel = new JLabel("Gesamt"); + accumLabel.setHorizontalAlignment(JLabel.CENTER); + add(accumLabel, c); + + for (int i = 0; i < accumulatedScore.getPoints().size(); ++i) { + if (i == accumulatedScore.getPoints().size()-1) { + c.gridwidth = GridBagConstraints.REMAINDER; + } + + JLabel scoreLabel = new JLabel(Integer.toString(accumulatedScore.getPoints().get(i))); + scoreLabel.setHorizontalAlignment(JLabel.CENTER); + add(scoreLabel, c); + } + } +} diff --git a/src/jrummikub/view/impl/View.java b/src/jrummikub/view/impl/View.java index 0bc2e23..7381175 100644 --- a/src/jrummikub/view/impl/View.java +++ b/src/jrummikub/view/impl/View.java @@ -15,6 +15,7 @@ import jrummikub.model.Stone; import jrummikub.util.IEvent; import jrummikub.view.IHandPanel; import jrummikub.view.IPlayerPanel; +import jrummikub.view.IScorePanel; import jrummikub.view.ISettingsPanel; import jrummikub.view.ITablePanel; import jrummikub.view.IView; @@ -32,6 +33,7 @@ public class View extends JFrame implements IView { private StartTurnPanel startTurnPanel; private WinPanel winPanel; private SettingsPanel settingsPanel; + private ScorePanel scorePanel; private final static float PLAYER_PANEL_RATIO = 0.14f; private final static int PLAYER_PANEL_BORDER_WIDTH = 1; @@ -46,6 +48,11 @@ public class View extends JFrame implements IView { return settingsPanel; } + @Override + public IScorePanel getScorePanel() { + return scorePanel; + } + @Override public ITablePanel getTablePanel() { return table; @@ -100,6 +107,11 @@ public class View extends JFrame implements IView { layeredPane.setLayer(settingsPanel, JLayeredPane.POPUP_LAYER); layeredPane.add(settingsPanel); + scorePanel = new ScorePanel(); + scorePanel.setVisible(false); + layeredPane.setLayer(scorePanel, JLayeredPane.POPUP_LAYER); + layeredPane.add(scorePanel); + addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { @@ -132,6 +144,7 @@ public class View extends JFrame implements IView { startTurnPanel.setBounds(0, tableHeight, width, playerPanelHeight); winPanel.setBounds(0, tableHeight, width, playerPanelHeight); settingsPanel.setBounds(width / 4, height / 4, width / 2, height / 2); + scorePanel.setBounds(width / 8, height / 4, width * 3 / 4, height / 2); } @Override @@ -159,6 +172,11 @@ public class View extends JFrame implements IView { settingsPanel.setVisible(show); } + @Override + public void showScorePanel(boolean show) { + scorePanel.setVisible(show); + } + @Override public void setCurrentPlayerName(String playerName) { playerPanel.setCurrentPlayerName(playerName); -- cgit v1.2.3