Implement score panel

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@298 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Matthias Schiffer 2011-05-29 15:50:30 +02:00
parent eea456991c
commit 9cf3dc09ae
8 changed files with 270 additions and 14 deletions

View file

@ -0,0 +1,32 @@
package jrummikub.view;
import jrummikub.model.PlayerSettings;
import jrummikub.model.Score;
public class MockScorePanel implements IScorePanel {
@Override
public void setScores(Iterable<Score> scores) {
// TODO Auto-generated method stub
}
@Override
public void setAccumulatedScore(Score finalScore) {
// TODO Auto-generated method stub
}
@Override
public void setPlayers(Iterable<PlayerSettings> players) {
// TODO Auto-generated method stub
}
@Override
public void update() {
// TODO Auto-generated method stub
}
}

View file

@ -12,7 +12,9 @@ import jrummikub.util.MockEvent;
public class MockView implements IView { public class MockView implements IView {
/** */ /** */
public MockSettingsPanel settingsPanel = new MockSettingsPanel(); public MockSettingsPanel settingsPanel = new MockSettingsPanel();
/** */
public MockScorePanel scorePanel = new MockScorePanel();
/** */
public MockPlayerPanel playerPanel = new MockPlayerPanel(); public MockPlayerPanel playerPanel = new MockPlayerPanel();
/** */ /** */
public MockTablePanel tablePanel = new MockTablePanel(); public MockTablePanel tablePanel = new MockTablePanel();
@ -97,4 +99,15 @@ public class MockView implements IView {
} }
@Override
public IScorePanel getScorePanel() {
return scorePanel;
}
@Override
public void showScorePanel(boolean show) {
// TODO Auto-generated method stub
}
} }

View file

@ -36,7 +36,8 @@ public class GameControl {
this.view = view; this.view = view;
gameState = new GameState(); 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() { connections.add(view.getNewRoundEvent().add(new IListener() {
@Override @Override
@ -64,17 +65,19 @@ public class GameControl {
return; return;
} }
view.showScorePanel(false);
IRoundState roundState = new RoundState(gameSettings); 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 = new RoundControl(roundState, view);
roundControl.getEndOfRoundEvent().add(new IListener1<Score>() { roundControl.getEndOfRoundEvent().add(new IListener1<Score>() {
@Override @Override
public void handle(Score roundScore) { public void handle(Score roundScore) {
endOfRound(); endOfRound(roundScore);
} }
}); });
@ -94,9 +97,17 @@ public class GameControl {
startRound(); startRound();
} }
private void endOfRound() { private void endOfRound(Score roundScore) {
gameState.getScores().add(roundScore);
roundControl = null; roundControl = null;
view.enableWinPanel(true); 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() { private void finalScore() {

View file

@ -6,8 +6,8 @@ import java.util.List;
* Score of a single round * Score of a single round
*/ */
public class Score { public class Score {
List<Boolean> winners; private List<Boolean> winners;
List<Integer> points; private List<Integer> points;
/** /**
* Create a new round score * Create a new round score

View file

@ -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();
}

View file

@ -16,6 +16,13 @@ public interface IView {
*/ */
public ISettingsPanel getSettingsPanel(); public ISettingsPanel getSettingsPanel();
/**
* Returns the score panel
*
* @return the score panel
*/
public IScorePanel getScorePanel();
/** /**
* Returns the table * Returns the table
* *
@ -91,7 +98,16 @@ public interface IView {
/** /**
* Shows or hides the game settings panel * 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); 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);
} }

View file

@ -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);
}
}
}

View file

@ -15,6 +15,7 @@ import jrummikub.model.Stone;
import jrummikub.util.IEvent; import jrummikub.util.IEvent;
import jrummikub.view.IHandPanel; import jrummikub.view.IHandPanel;
import jrummikub.view.IPlayerPanel; import jrummikub.view.IPlayerPanel;
import jrummikub.view.IScorePanel;
import jrummikub.view.ISettingsPanel; import jrummikub.view.ISettingsPanel;
import jrummikub.view.ITablePanel; import jrummikub.view.ITablePanel;
import jrummikub.view.IView; import jrummikub.view.IView;
@ -32,6 +33,7 @@ public class View extends JFrame implements IView {
private StartTurnPanel startTurnPanel; private StartTurnPanel startTurnPanel;
private WinPanel winPanel; private WinPanel winPanel;
private SettingsPanel settingsPanel; private SettingsPanel settingsPanel;
private ScorePanel scorePanel;
private final static float PLAYER_PANEL_RATIO = 0.14f; private final static float PLAYER_PANEL_RATIO = 0.14f;
private final static int PLAYER_PANEL_BORDER_WIDTH = 1; private final static int PLAYER_PANEL_BORDER_WIDTH = 1;
@ -46,6 +48,11 @@ public class View extends JFrame implements IView {
return settingsPanel; return settingsPanel;
} }
@Override
public IScorePanel getScorePanel() {
return scorePanel;
}
@Override @Override
public ITablePanel getTablePanel() { public ITablePanel getTablePanel() {
return table; return table;
@ -100,6 +107,11 @@ public class View extends JFrame implements IView {
layeredPane.setLayer(settingsPanel, JLayeredPane.POPUP_LAYER); layeredPane.setLayer(settingsPanel, JLayeredPane.POPUP_LAYER);
layeredPane.add(settingsPanel); layeredPane.add(settingsPanel);
scorePanel = new ScorePanel();
scorePanel.setVisible(false);
layeredPane.setLayer(scorePanel, JLayeredPane.POPUP_LAYER);
layeredPane.add(scorePanel);
addComponentListener(new ComponentAdapter() { addComponentListener(new ComponentAdapter() {
@Override @Override
public void componentResized(ComponentEvent e) { public void componentResized(ComponentEvent e) {
@ -132,6 +144,7 @@ public class View extends JFrame implements IView {
startTurnPanel.setBounds(0, tableHeight, width, playerPanelHeight); startTurnPanel.setBounds(0, tableHeight, width, playerPanelHeight);
winPanel.setBounds(0, tableHeight, width, playerPanelHeight); winPanel.setBounds(0, tableHeight, width, playerPanelHeight);
settingsPanel.setBounds(width / 4, height / 4, width / 2, height / 2); settingsPanel.setBounds(width / 4, height / 4, width / 2, height / 2);
scorePanel.setBounds(width / 8, height / 4, width * 3 / 4, height / 2);
} }
@Override @Override
@ -159,6 +172,11 @@ public class View extends JFrame implements IView {
settingsPanel.setVisible(show); settingsPanel.setVisible(show);
} }
@Override
public void showScorePanel(boolean show) {
scorePanel.setVisible(show);
}
@Override @Override
public void setCurrentPlayerName(String playerName) { public void setCurrentPlayerName(String playerName) {
playerPanel.setCurrentPlayerName(playerName); playerPanel.setCurrentPlayerName(playerName);