-The rest of the game engine. I screwed up the commit last time.
This commit is contained in:
120
src/view/BoardPanel.java
Normal file
120
src/view/BoardPanel.java
Normal file
@@ -0,0 +1,120 @@
|
||||
package view;
|
||||
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.security.auth.Refreshable;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import model.Board;
|
||||
import model.Referee;
|
||||
|
||||
public class BoardPanel extends JPanel implements Refreshable {
|
||||
private class BoardPanelMouseListener implements MouseListener {
|
||||
|
||||
private final int col;
|
||||
private final int row;
|
||||
|
||||
public BoardPanelMouseListener(int r, int c) {
|
||||
row = r;
|
||||
col = c;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent e) {
|
||||
referee.getPlayer().setCell(row, col);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent arg0) {
|
||||
// Nothing.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent arg0) {
|
||||
// Nothing.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent arg0) {
|
||||
// Nothing.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent arg0) {
|
||||
// Nothing.
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static final URL BLUE_ICON = ClassLoader
|
||||
.getSystemResource("img/blue.png");
|
||||
|
||||
public static final URL GREEN_ICON = ClassLoader
|
||||
.getSystemResource("img/green.png");
|
||||
public static final URL NONE_ICON = ClassLoader
|
||||
.getSystemResource("img/none.png");
|
||||
public static final URL RED_ICON = ClassLoader
|
||||
.getSystemResource("img/red.png");
|
||||
public static final URL YELLOW_ICON = ClassLoader
|
||||
.getSystemResource("img/yellow.png");
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final JLabel[][] board = new JLabel[Board.NUM_ROWS][Board.NUM_COLS];
|
||||
private final Referee referee;
|
||||
|
||||
// private final ImageIcon[][] icons = new
|
||||
// ImageIcon[Board.NUM_ROWS][Board.NUM_COLS];
|
||||
|
||||
public BoardPanel(Referee ref) {
|
||||
referee = ref;
|
||||
setLayout(new GridLayout(Board.NUM_ROWS, Board.NUM_COLS));
|
||||
|
||||
for (int r = 0; r < Board.NUM_ROWS; r++) {
|
||||
for (int c = 0; c < Board.NUM_COLS; c++) {
|
||||
board[r][c] = new JLabel(new ImageIcon(NONE_ICON));
|
||||
board[r][c].addMouseListener(new BoardPanelMouseListener(r, c));
|
||||
add(board[r][c]);
|
||||
}
|
||||
}
|
||||
|
||||
refresh();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCurrent() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
for (int r = 0; r < Board.NUM_ROWS; r++) {
|
||||
for (int c = 0; c < Board.NUM_COLS; c++) {
|
||||
switch (referee.getTile(r, c)) {
|
||||
case BLUE:
|
||||
board[r][c].setIcon(new ImageIcon(BLUE_ICON));
|
||||
break;
|
||||
case GREEN:
|
||||
board[r][c].setIcon(new ImageIcon(GREEN_ICON));
|
||||
break;
|
||||
case RED:
|
||||
board[r][c].setIcon(new ImageIcon(RED_ICON));
|
||||
break;
|
||||
case YELLOW:
|
||||
board[r][c].setIcon(new ImageIcon(YELLOW_ICON));
|
||||
break;
|
||||
default:
|
||||
board[r][c].setIcon(new ImageIcon(NONE_ICON));
|
||||
}
|
||||
}
|
||||
}
|
||||
repaint();
|
||||
}
|
||||
}
|
||||
134
src/view/MainFrame.java
Normal file
134
src/view/MainFrame.java
Normal file
@@ -0,0 +1,134 @@
|
||||
package view;
|
||||
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Insets;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.security.auth.RefreshFailedException;
|
||||
import javax.security.auth.Refreshable;
|
||||
import javax.swing.JFrame;
|
||||
|
||||
import model.Referee;
|
||||
|
||||
public class MainFrame extends JFrame {
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public static void main(String[] args) {
|
||||
new MainFrame();
|
||||
}
|
||||
|
||||
private final ArrayList<Refreshable> elements = new ArrayList<Refreshable>();
|
||||
|
||||
private final Referee game;
|
||||
|
||||
public MainFrame() {
|
||||
game = new Referee();
|
||||
|
||||
init();
|
||||
|
||||
// Set up window.
|
||||
setDefaultCloseOperation(MainFrame.EXIT_ON_CLOSE);
|
||||
setResizable(false);
|
||||
|
||||
pack();
|
||||
setLocationRelativeTo(null);
|
||||
setVisible(true);
|
||||
|
||||
run();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
// Create objects.
|
||||
ScorePanel sp = new ScorePanel(game);
|
||||
BoardPanel bp = new BoardPanel(game);
|
||||
MessagePanel mp = new MessagePanel(game);
|
||||
TileSelectionPanel tp = new TileSelectionPanel(game);
|
||||
|
||||
// Add refreshables.
|
||||
elements.add(sp);
|
||||
elements.add(bp);
|
||||
elements.add(mp);
|
||||
elements.add(tp);
|
||||
|
||||
// Add stuff to panel.
|
||||
GridBagLayout layout = new GridBagLayout();
|
||||
GridBagConstraints con;
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.anchor = GridBagConstraints.WEST;
|
||||
con.fill = GridBagConstraints.BOTH;
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 0;
|
||||
con.gridy = 0;
|
||||
con.weightx = 1;
|
||||
layout.setConstraints(sp, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.anchor = GridBagConstraints.EAST;
|
||||
con.fill = GridBagConstraints.BOTH;
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 1;
|
||||
con.gridy = 0;
|
||||
con.weightx = 1;
|
||||
layout.setConstraints(mp, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.anchor = GridBagConstraints.NORTH;
|
||||
con.fill = GridBagConstraints.BOTH;
|
||||
con.gridwidth = 2;
|
||||
con.gridx = 0;
|
||||
con.gridy = 1;
|
||||
layout.setConstraints(bp, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.anchor = GridBagConstraints.NORTH;
|
||||
con.fill = GridBagConstraints.BOTH;
|
||||
con.gridwidth = 2;
|
||||
con.gridx = 0;
|
||||
con.gridy = 2;
|
||||
con.insets = new Insets(10, 0, 10, 0);
|
||||
layout.setConstraints(tp, con);
|
||||
|
||||
setLayout(layout);
|
||||
add(sp);
|
||||
add(mp);
|
||||
add(bp);
|
||||
add(tp);
|
||||
}
|
||||
|
||||
private void refresh() {
|
||||
boolean change = false;
|
||||
|
||||
for (Refreshable r : elements) {
|
||||
|
||||
if (!game.isCurrent() || !r.isCurrent()) {
|
||||
try {
|
||||
r.refresh();
|
||||
change = true;
|
||||
} catch (RefreshFailedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (change) {
|
||||
game.refresh();
|
||||
repaint();
|
||||
pack();
|
||||
}
|
||||
}
|
||||
|
||||
private void run() {
|
||||
while (!game.isOver()) {
|
||||
game.doSomething();
|
||||
|
||||
refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
33
src/view/MessagePanel.java
Normal file
33
src/view/MessagePanel.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package view;
|
||||
|
||||
import javax.security.auth.Refreshable;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import model.Referee;
|
||||
|
||||
public class MessagePanel extends JPanel implements Refreshable {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final JLabel message = new JLabel();
|
||||
private final Referee referee;
|
||||
|
||||
public MessagePanel(Referee ref) {
|
||||
referee = ref;
|
||||
add(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCurrent() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
message.setText(referee.getMessage());
|
||||
}
|
||||
}
|
||||
33
src/view/ScorePanel.java
Normal file
33
src/view/ScorePanel.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package view;
|
||||
|
||||
import javax.security.auth.Refreshable;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import model.Referee;
|
||||
|
||||
public class ScorePanel extends JPanel implements Refreshable {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final JLabel message = new JLabel();
|
||||
private final Referee referee;
|
||||
|
||||
public ScorePanel(Referee ref) {
|
||||
referee = ref;
|
||||
add(message);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCurrent() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() {
|
||||
message.setText("Score: " + referee.getScore());
|
||||
}
|
||||
}
|
||||
236
src/view/TileSelectionPanel.java
Normal file
236
src/view/TileSelectionPanel.java
Normal file
@@ -0,0 +1,236 @@
|
||||
package view;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.GridBagConstraints;
|
||||
import java.awt.GridBagLayout;
|
||||
import java.awt.Insets;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
|
||||
import javax.security.auth.RefreshFailedException;
|
||||
import javax.security.auth.Refreshable;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import model.Board.TileColor;
|
||||
import model.Referee;
|
||||
|
||||
public class TileSelectionPanel extends JPanel implements Refreshable {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final JLabel blue = new JLabel(new ImageIcon(BoardPanel.BLUE_ICON));
|
||||
private final JLabel green = new JLabel(
|
||||
new ImageIcon(BoardPanel.GREEN_ICON));
|
||||
private boolean isCurrent = true;
|
||||
private final JLabel red = new JLabel(new ImageIcon(BoardPanel.RED_ICON));
|
||||
private final Referee referee;
|
||||
private final JLabel yellow = new JLabel(new ImageIcon(
|
||||
BoardPanel.YELLOW_ICON));
|
||||
|
||||
public TileSelectionPanel(Referee ref) {
|
||||
referee = ref;
|
||||
|
||||
initLayout();
|
||||
initActions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCurrent() {
|
||||
return isCurrent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void refresh() throws RefreshFailedException {
|
||||
TileColor tile = referee.getPlayer().getColor();
|
||||
|
||||
blue.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||
green.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||
red.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||
yellow.setBorder(BorderFactory.createEmptyBorder(3, 3, 3, 3));
|
||||
|
||||
switch (tile) {
|
||||
case GREEN:
|
||||
green.setBorder(BorderFactory.createLineBorder(Color.RED, 3));
|
||||
break;
|
||||
case RED:
|
||||
red.setBorder(BorderFactory.createLineBorder(Color.RED, 3));
|
||||
break;
|
||||
case YELLOW:
|
||||
yellow.setBorder(BorderFactory.createLineBorder(Color.RED, 3));
|
||||
break;
|
||||
default:
|
||||
blue.setBorder(BorderFactory.createLineBorder(Color.RED, 3));
|
||||
break;
|
||||
}
|
||||
|
||||
isCurrent = true;
|
||||
}
|
||||
|
||||
private void initActions() {
|
||||
blue.addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent arg0) {
|
||||
referee.getPlayer().setColor(TileColor.BLUE);
|
||||
isCurrent = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent arg0) {
|
||||
}
|
||||
});
|
||||
green.addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent arg0) {
|
||||
referee.getPlayer().setColor(TileColor.GREEN);
|
||||
isCurrent = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent arg0) {
|
||||
}
|
||||
});
|
||||
red.addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent arg0) {
|
||||
referee.getPlayer().setColor(TileColor.RED);
|
||||
isCurrent = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent arg0) {
|
||||
}
|
||||
});
|
||||
yellow.addMouseListener(new MouseListener() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent arg0) {
|
||||
referee.getPlayer().setColor(TileColor.YELLOW);
|
||||
isCurrent = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed(MouseEvent arg0) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent arg0) {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void initLayout() {
|
||||
GridBagLayout layout = new GridBagLayout();
|
||||
GridBagConstraints con;
|
||||
JLabel spacer1 = new JLabel();
|
||||
JLabel spacer2 = new JLabel();
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 0;
|
||||
con.gridy = 0;
|
||||
con.weightx = 1;
|
||||
layout.setConstraints(spacer1, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 1;
|
||||
con.gridy = 0;
|
||||
con.insets = new Insets(5, 5, 5, 5);
|
||||
con.weightx = 0;
|
||||
layout.setConstraints(blue, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 2;
|
||||
con.gridy = 0;
|
||||
con.insets = new Insets(5, 5, 5, 5);
|
||||
con.weightx = 0;
|
||||
layout.setConstraints(green, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 3;
|
||||
con.gridy = 0;
|
||||
con.insets = new Insets(5, 5, 5, 5);
|
||||
con.weightx = 0;
|
||||
layout.setConstraints(red, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 4;
|
||||
con.gridy = 0;
|
||||
con.insets = new Insets(5, 5, 5, 5);
|
||||
con.weightx = 0;
|
||||
layout.setConstraints(yellow, con);
|
||||
|
||||
con = new GridBagConstraints();
|
||||
con.gridheight = 1;
|
||||
con.gridwidth = 1;
|
||||
con.gridx = 5;
|
||||
con.gridy = 0;
|
||||
con.weightx = 1;
|
||||
layout.setConstraints(spacer2, con);
|
||||
|
||||
setLayout(layout);
|
||||
add(spacer1);
|
||||
add(blue);
|
||||
add(green);
|
||||
add(red);
|
||||
add(yellow);
|
||||
add(spacer2);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user