import CurrentPosition; import Square; import OXO; import java.awt.*; import java.io.*; import java.awt.event.*; public class Board extends CurrentPosition implements ActionListener { public static Player noughtP; public static Player crossP; private static OXO game; private Square [][] squares = new Square [3][3]; private Player toMove; private Label messageLabel; private Button restartButton; private Panel boardPanel; public Square findSquare(int x, int y) { //KISS: just ask each square whether (x,y) is in it! for (int i = 0; i<3; i++) { for (int j = 0; j<3; j++) { if (squares[i][j].isIn(x,y)) { System.out.println("Got square "+ i + " " + j); return squares[i][j]; } } } // no square claimed the point return null; } public void paint(Graphics g) { for (int i = 0; i<3; i++) { for (int j = 0; j<3; j++) { squares[i][j].paint(g); } } } public void update(Graphics g) { paint (g); } public void message(String s) { messageLabel.setText(s); } //should be making proper use of a layout manager? public void init() { noughtP = new Player("0"); crossP = new Player("X"); toMove = crossP; messageLabel = new Label ("Noughts And Crosses"); restartButton = new Button ("Start again"); game = new OXO(this); addMouseListener(new MyAdapter()); add(messageLabel); add(restartButton); restartButton.addActionListener(this); initBoard(); repaint(); } private void initBoard () { for (int i=0; i<3; i++) { for (int j=0; j<3; j++) { squares[i][j] = new Square(i * 80,j * 80 + 100,80,80); } } repaint(); } public void actionPerformed(ActionEvent e) { initBoard(); } public Player owner (int i, int j) { return squares[i][j].owner(); } //fairly generic... class MyAdapter extends MouseAdapter { public void mousePressed(MouseEvent e) { // we've got a click. What does it mean? int x = e.getX(); int y = e.getY(); Square square = findSquare(x,y); if (square == null) { message ("Please click in a square"); } else { move = new OXOMove(toMove,square); Player next,winner; if ((next = game.validate(move)) != null) { ((OXOMove)move).confirm(); if ((winner = (game.winner())) != null) { message("Player " + winner.glyph + " won!!"); } else { toMove = next; message("Ready for next move from " + toMove.glyph); } } else { message("Illegal move. Try again."); } repaint(); } } } }