- Integrated the ANN with the game. The network now predicts a user move, completely ignores it, and trains itself on the players actual move. This integration also included implementing two new functions. The first translates a board state to a boolean array to correspond with input nodes. The second translates a move to a boolean array to correspond with output nodes.
116 lines
2.8 KiB
Java
116 lines
2.8 KiB
Java
package view;
|
|
|
|
import java.awt.BorderLayout;
|
|
|
|
import javax.swing.Box;
|
|
import javax.swing.BoxLayout;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JPanel;
|
|
|
|
import model.Referee;
|
|
|
|
public class MainFrame extends JFrame {
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
public static void main(String[] args) {
|
|
new UserChooserFrame();
|
|
}
|
|
|
|
private BoardPanel bp;
|
|
private MessagePanel mp;
|
|
private final Referee referee;
|
|
private TileSelectionPanel tp;
|
|
ScorePanel sp;
|
|
|
|
public MainFrame(String name) {
|
|
super("CS8803 Project 4");
|
|
|
|
referee = new Referee(this, name);
|
|
|
|
init();
|
|
|
|
setDefaultCloseOperation(MainFrame.EXIT_ON_CLOSE);
|
|
pack();
|
|
setLocationRelativeTo(null);
|
|
setVisible(true);
|
|
|
|
playGame();
|
|
}
|
|
|
|
public ScorePanel getScorePanel() {
|
|
return sp;
|
|
}
|
|
|
|
public void updateBoard() {
|
|
bp.updateIcons();
|
|
}
|
|
|
|
public void updateMessage(String message) {
|
|
mp.updateMessage(message);
|
|
}
|
|
|
|
private void init() {
|
|
sp = new ScorePanel(referee);
|
|
|
|
tp = new TileSelectionPanel(referee.getHumanPlayer());
|
|
bp = new BoardPanel(referee, tp);
|
|
referee.setBoardPanel(bp);
|
|
|
|
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.
|
|
JPanel hWrapperTop = new JPanel();
|
|
hWrapperTop.setLayout(new BoxLayout(hWrapperTop, BoxLayout.X_AXIS));
|
|
JPanel hWrapperMid = new JPanel();
|
|
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
|
|
hWrapperTop.add(Box.createHorizontalGlue());
|
|
hWrapperTop.add(mp);
|
|
hWrapperTop.add(sp);
|
|
hWrapperTop.add(Box.createHorizontalGlue());
|
|
|
|
// 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
|
|
vWrapper.add(hWrapperTop);
|
|
vWrapper.add(hWrapperMid);
|
|
vWrapper.add(hWrapperBottom);
|
|
|
|
// 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.
|
|
sp.updateScore(0);
|
|
mp.updateMessage("Loading new game...");
|
|
|
|
pack();
|
|
|
|
// Finally, update the border to show the initially selected tile color.
|
|
tp.updateBorders();
|
|
}
|
|
|
|
private void playGame() {
|
|
new Thread(referee).start();
|
|
}
|
|
} |