86 lines
2.5 KiB
Java
86 lines
2.5 KiB
Java
//: gui/TicTacToe.java
|
|
// ©2015 MindView LLC: see Copyright.txt
|
|
// Dialog boxes and creating your own components.
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import static net.mindview.util.SwingConsole.*;
|
|
|
|
public class TicTacToe extends JFrame {
|
|
private JTextField
|
|
rows = new JTextField("3"),
|
|
cols = new JTextField("3");
|
|
private enum State { BLANK, XX, OO }
|
|
static class ToeDialog extends JDialog {
|
|
private State turn = State.XX; // Start with x's turn
|
|
ToeDialog(int cellsWide, int cellsHigh) {
|
|
setTitle("The game itself");
|
|
setLayout(new GridLayout(cellsWide, cellsHigh));
|
|
for(int i = 0; i < cellsWide * cellsHigh; i++)
|
|
add(new ToeButton());
|
|
setSize(cellsWide * 50, cellsHigh * 50);
|
|
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
|
|
}
|
|
class ToeButton extends JPanel {
|
|
private State state = State.BLANK;
|
|
public ToeButton() { addMouseListener(new ML()); }
|
|
@Override
|
|
public void paintComponent(Graphics g) {
|
|
super.paintComponent(g);
|
|
int
|
|
x1 = 0, y1 = 0,
|
|
x2 = getSize().width - 1,
|
|
y2 = getSize().height - 1;
|
|
g.drawRect(x1, y1, x2, y2);
|
|
x1 = x2/4;
|
|
y1 = y2/4;
|
|
int wide = x2/2, high = y2/2;
|
|
if(state == State.XX) {
|
|
g.drawLine(x1, y1, x1 + wide, y1 + high);
|
|
g.drawLine(x1, y1 + high, x1 + wide, y1);
|
|
}
|
|
if(state == State.OO)
|
|
g.drawOval(x1, y1, x1 + wide/2, y1 + high/2);
|
|
}
|
|
class ML extends MouseAdapter {
|
|
@Override
|
|
public void mousePressed(MouseEvent e) {
|
|
if(state == State.BLANK) {
|
|
state = turn;
|
|
turn =
|
|
(turn == State.XX ? State.OO : State.XX);
|
|
}
|
|
else
|
|
state =
|
|
(state == State.XX ? State.OO : State.XX);
|
|
repaint();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
class BL implements ActionListener {
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
JDialog d = new ToeDialog(
|
|
new Integer(rows.getText()),
|
|
new Integer(cols.getText()));
|
|
d.setVisible(true);
|
|
}
|
|
}
|
|
public TicTacToe() {
|
|
JPanel p = new JPanel();
|
|
p.setLayout(new GridLayout(2,2));
|
|
p.add(new JLabel("Rows", JLabel.CENTER));
|
|
p.add(rows);
|
|
p.add(new JLabel("Columns", JLabel.CENTER));
|
|
p.add(cols);
|
|
add(p, BorderLayout.NORTH);
|
|
JButton b = new JButton("go");
|
|
b.addActionListener(new BL());
|
|
add(b, BorderLayout.SOUTH);
|
|
}
|
|
public static void main(String[] args) {
|
|
run(new TicTacToe(), 200, 200);
|
|
}
|
|
} ///:~
|