diff options
Diffstat (limited to 'src/jrummikub')
-rw-r--r-- | src/jrummikub/control/GameControl.java | 29 | ||||
-rw-r--r-- | src/jrummikub/model/Score.java | 4 | ||||
-rw-r--r-- | src/jrummikub/view/IScorePanel.java | 35 | ||||
-rw-r--r-- | src/jrummikub/view/IView.java | 18 | ||||
-rw-r--r-- | src/jrummikub/view/impl/ScorePanel.java | 131 | ||||
-rw-r--r-- | src/jrummikub/view/impl/View.java | 18 |
6 files changed, 223 insertions, 12 deletions
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<Score>() { @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<Boolean> winners; - List<Integer> points; + private List<Boolean> winners; + private List<Integer> 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<Score> 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<PlayerSettings> 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 @@ -17,6 +17,13 @@ public interface IView { public ISettingsPanel getSettingsPanel(); /** + * Returns the score panel + * + * @return the score panel + */ + public IScorePanel getScorePanel(); + + /** * Returns the table * * @return 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<PlayerSettings> players; + private Iterable<Score> scores; + private Score accumulatedScore; + + public ScorePanel() { + setLayout(new GridBagLayout()); + setBorder(new LineBorder(Color.BLACK)); + } + + @Override + public void setPlayers(Iterable<PlayerSettings> players) { + this.players = players; + } + + @Override + public void setScores(Iterable<Score> 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<Score> 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<PlayerSettings> 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; @@ -47,6 +49,11 @@ public class View extends JFrame implements IView { } @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 @@ -160,6 +173,11 @@ public class View extends JFrame implements IView { } @Override + public void showScorePanel(boolean show) { + scorePanel.setVisible(show); + } + + @Override public void setCurrentPlayerName(String playerName) { playerPanel.setCurrentPlayerName(playerName); startTurnPanel.setCurrentPlayerName(playerName); |