From 1a4c6d865b4e356dea0c12c02fdd7d002b35cb84 Mon Sep 17 00:00:00 2001 From: Marshall Date: Sat, 28 Apr 2012 16:24:45 -0400 Subject: [PATCH] - Finished HighScoreDialog.java. Now the player can play the game repeatedly. --- src/model/Referee.java | 56 ++++++++++++-------- src/view/HighScoreDialog.java | 61 +++++++++++++++++++++- src/view/MainFrame.java | 97 ++++++++++++++++++++--------------- 3 files changed, 150 insertions(+), 64 deletions(-) diff --git a/src/model/Referee.java b/src/model/Referee.java index d917317..06172a6 100644 --- a/src/model/Referee.java +++ b/src/model/Referee.java @@ -1,6 +1,7 @@ package model; import model.Board.TileColor; +import model.playerModel.PlayerModel; import org.apache.log4j.Logger; @@ -8,7 +9,8 @@ import player.AlphaBetaComPlayer; import player.HumanPlayer; import player.Player; import view.BoardPanel; -import view.MessagePanel; +import view.HighScoreDialog; +import view.MainFrame; import view.ScorePanel; public class Referee implements Runnable { @@ -20,17 +22,17 @@ public class Referee implements Runnable { public static final String PLAYER_TURN = "Waiting for the player's move."; - private final Board board; + private Board board; private BoardPanel boardPanel; - private final Player computerPlayer; + private Player computerPlayer; private final HumanPlayer humanPlayer = new HumanPlayer(); - private MessagePanel messagePanel; - private ScorePanel scorePanel; - public Referee() { - board = new Board(); - computerPlayer = new AlphaBetaComPlayer(); + private final MainFrame mf; + + public Referee(MainFrame mnFrm) { + mf = mnFrm; + initGame(); } public Player getComputerPlayer() { @@ -69,9 +71,31 @@ public class Referee implements Runnable { @Override public void run() { + while (true) { + initGame(); + mf.updateBoard(); + play(); + new HighScoreDialog(mf, new PlayerModel()); + } + } + + public void setBoardPanel(BoardPanel boardPanel) { + this.boardPanel = boardPanel; + } + + private ScorePanel getScorePanel() { + return mf.getScorePanel(); + } + + private void initGame() { + board = new Board(); + computerPlayer = new AlphaBetaComPlayer(); + } + + private void play() { int plies = 0; while (!isOver()) { - scorePanel.updateScore(getPlayerScore()); + getScorePanel().updateScore(getPlayerScore()); if (board.isPlayerTurn()) { boolean wasInterrupted = false; while (!humanPlayer.isReady()) { @@ -97,7 +121,7 @@ public class Referee implements Runnable { playToken(mv); } - messagePanel.updateMessage(getMessage()); + mf.updateMessage(getMessage()); boardPanel.updateIcons(); LOGGER.info("plies: " + plies++); try { @@ -108,16 +132,4 @@ public class Referee implements Runnable { } } } - - public void setBoardPanel(BoardPanel boardPanel) { - this.boardPanel = boardPanel; - } - - public void setMessagePanel(MessagePanel messagePanel) { - this.messagePanel = messagePanel; - } - - public void setScorePanel(ScorePanel scorePanel) { - this.scorePanel = scorePanel; - } } \ No newline at end of file diff --git a/src/view/HighScoreDialog.java b/src/view/HighScoreDialog.java index 0f1dffb..d0d2cc9 100644 --- a/src/view/HighScoreDialog.java +++ b/src/view/HighScoreDialog.java @@ -1,6 +1,12 @@ package view; -import javax.swing.BorderFactory; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; @@ -39,6 +45,8 @@ public class HighScoreDialog extends JDialog { public HighScoreDialog(JFrame owner, PlayerModel pm) { super(owner, "Game over!", true); + GridBagLayout gbl = new GridBagLayout(); + String text = ""; text += "Game Over!"; text += "

"; @@ -59,11 +67,60 @@ public class HighScoreDialog extends JDialog { text += ""; JLabel label = new JLabel(text); - label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); + JButton newGame = new JButton("New Game"); + newGame.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + HighScoreDialog.this.setVisible(false); + } + }); + + JButton exitButton = new JButton("Exit"); + exitButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + System.exit(0); + } + }); + + GridBagConstraints con = new GridBagConstraints(); + con.gridheight = 1; + con.gridwidth = 6; + con.gridx = 0; + con.gridy = 0; + con.insets = new Insets(20, 20, 5, 20); + gbl.setConstraints(label, con); + + con = new GridBagConstraints(); + con.fill = GridBagConstraints.BOTH; + con.gridheight = 1; + con.gridwidth = 2; + con.gridx = 1; + con.gridy = 1; + con.insets = new Insets(5, 20, 20, 5); + gbl.setConstraints(newGame, con); + + con = new GridBagConstraints(); + con.fill = GridBagConstraints.BOTH; + con.gridheight = 1; + con.gridwidth = 2; + con.gridx = 3; + con.gridy = 1; + con.insets = new Insets(5, 5, 20, 20); + gbl.setConstraints(exitButton, con); + + this.setLayout(gbl); this.add(label); + this.add(newGame); + this.add(exitButton); + this.pack(); this.setResizable(false); + this.setLocationRelativeTo(owner); + this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); this.setVisible(true); } } diff --git a/src/view/MainFrame.java b/src/view/MainFrame.java index ef5fa19..d905a2b 100644 --- a/src/view/MainFrame.java +++ b/src/view/MainFrame.java @@ -13,85 +13,102 @@ public class MainFrame extends JFrame { private static final long serialVersionUID = 1L; - private final Referee referee; - public static void main(String[] args) { MainFrame mainFrame = new MainFrame(); mainFrame.playGame(); } - + private BoardPanel bp; + private MessagePanel mp; + private final Referee referee; + private TileSelectionPanel tp; + ScorePanel sp; + public MainFrame() { super("CS8803 Project 4"); - referee = new Referee(); + referee = new Referee(this); init(); setDefaultCloseOperation(MainFrame.EXIT_ON_CLOSE); - - setVisible(true); pack(); + setLocationRelativeTo(null); + setVisible(true); + + } + + public ScorePanel getScorePanel() { + return sp; + } + + public void updateBoard() { + bp.updateIcons(); + } + + public void updateMessage(String message) { + mp.updateMessage(message); } private void init() { - ScorePanel sp = new ScorePanel(referee); - referee.setScorePanel(sp); - - TileSelectionPanel tp = new TileSelectionPanel(referee.getHumanPlayer()); - BoardPanel bp = new BoardPanel(referee,tp); + sp = new ScorePanel(referee); + + tp = new TileSelectionPanel(referee.getHumanPlayer()); + bp = new BoardPanel(referee, tp); referee.setBoardPanel(bp); - - MessagePanel mp = new MessagePanel(referee); - referee.setMessagePanel(mp); - - //The outer wrapper allows the game board to be resized vertically. + + mp = new MessagePanel(referee); + + // The outer wrapper allows the game board to be resized vertically. JPanel vWrapper = new JPanel(); - vWrapper.setLayout(new BoxLayout(vWrapper,BoxLayout.Y_AXIS)); - - //The inner wrappers allow each sub-panel to be independently resized horizontally. + vWrapper.setLayout(new BoxLayout(vWrapper, BoxLayout.Y_AXIS)); + + // The inner wrappers allow each sub-panel to be independently resized + // horizontally. JPanel hWrapperTop = new JPanel(); - hWrapperTop.setLayout(new BoxLayout(hWrapperTop,BoxLayout.X_AXIS)); + hWrapperTop.setLayout(new BoxLayout(hWrapperTop, BoxLayout.X_AXIS)); JPanel hWrapperMid = new JPanel(); - hWrapperMid.setLayout(new BoxLayout(hWrapperMid,BoxLayout.X_AXIS)); + hWrapperMid.setLayout(new BoxLayout(hWrapperMid, BoxLayout.X_AXIS)); JPanel hWrapperBottom = new JPanel(); hWrapperBottom.setLayout(new BorderLayout()); - - //Top horizontal-box wrapper contains message panel, score panel + + // Top horizontal-box wrapper contains message panel, score panel hWrapperTop.add(Box.createHorizontalGlue()); hWrapperTop.add(mp); hWrapperTop.add(sp); hWrapperTop.add(Box.createHorizontalGlue()); - - //Mid horizontal box wrapper contains board panel + + // Mid horizontal box wrapper contains board panel hWrapperMid.add(Box.createHorizontalGlue()); - + JPanel bpContainer = new JPanel(); bpContainer.add(bp); hWrapperMid.add(bpContainer); hWrapperMid.add(Box.createHorizontalGlue()); - - //Bottom horizontal box wrapper contains tile panel - hWrapperBottom.add(tp,BorderLayout.NORTH); - - //the outter wrapper contains the 3 inner wrappers: top, mid, bottom + + // Bottom horizontal box wrapper contains tile panel + hWrapperBottom.add(tp, BorderLayout.NORTH); + + // the outter wrapper contains the 3 inner wrappers: top, mid, bottom vWrapper.add(hWrapperTop); vWrapper.add(hWrapperMid); vWrapper.add(hWrapperBottom); - - //The main JFrame contains a the outer (vertical) wrapper, in the center of a BorderLayout. + + // The main JFrame contains a the outer (vertical) wrapper, in the + // center of a BorderLayout. setLayout(new BorderLayout()); - add(vWrapper,BorderLayout.CENTER); - - //To ensure correct size, pre-populate the score and message panels with text. + add(vWrapper, BorderLayout.CENTER); + + // To ensure correct size, pre-populate the score and message panels + // with text. sp.updateScore(0); mp.updateMessage("Loading new game..."); - + pack(); - - //Finally, update the border to show the initially selected tile color. + + // Finally, update the border to show the initially selected tile color. tp.updateBorders(); } - + private void playGame() { new Thread(referee).start(); }