package Chap1;import javax.swing.*;
import java.awt.*;
import javax.swing.border.LineBorder;
import java.awt.Event.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;public class GoBang { static private char WhoseTurning = 'X';
static JLabel label = new JLabel("This is x turning");
static JPanel P1 = new JPanel();
static Cell[][] cells = new Cell[100][100]; public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jframe = new JFrame(" GoBang");
GoBang goBang=new GoBang();
jframe.pack();
P1.setLayout(new GridLayout(100, 100, 0, 0)); for (int i = 0; i < 100; i++)
for (int j = 0; j < 100; j++) {
P1.add( goBang.new Cell());
}
P1.setBorder(new LineBorder(Color.blue, 2));
jframe.setLayout(new BorderLayout());
jframe.add(P1, BorderLayout.CENTER);
label.setBorder(new LineBorder(Color.yellow, 2));
jframe.add(label, BorderLayout.SOUTH);
} boolean isFull() {
for (int i = 0; i <= 100; i++)
for (int j = 0; j <= 100; j++)
if (cells[i][j].getToken() == ' ')
return false;
return true;
} boolean WhoWin(char Token) {
for (int i = 0; i < 100; i++) {
int x = 0;
do { if ((cells[i][x].getToken() == Token)
&& (cells[i][x + 1].getToken() == Token)
&& (cells[i][x + 2].getToken() == Token)
&& (cells[i][x + 3].getToken() == Token)
&& (cells[i][x + 4].getToken() == Token))
return true;
x++;
} while (0 <= x && x <= 95); }
for (int j = 0; j < 100; j++) {
int x = 0;
do { if ((cells[x][j].getToken() == Token)
&& (cells[x + 1][j].getToken() == Token)
&& (cells[x + 2][j].getToken() == Token)
&& (cells[x + 3][j].getToken() == Token)
&& (cells[x + 4][j].getToken() == Token))
return true;
x++;
} while (0 <= x && x <= 95); }
for (int i = 95; i >= 0; i--) {
for (int j = 0; j <= i; i++)
if ((cells[i + 4 - j][j].getToken() == Token)
&& (cells[i + 3 - j][j + 1].getToken() == Token)
&& (cells[i + 2 - j][j + 2].getToken() == Token)
&& (cells[i + 1 - j][j + 3].getToken() == Token)
&& (cells[i - j][j + 4].getToken() == Token))
return true;
return false;
}
for (int i = 1; i <= 95; i++) {
for (int j = i; j <= 95; j++)
if ((cells[i + 99 - j][j].getToken() == Token)
&& (cells[i + 99 - j][j + 1].getToken() == Token)
&& (cells[i + 99 - j][j + 2].getToken() == Token)
&& (cells[i + 99 - j][j + 3].getToken() == Token)
&& (cells[i + 99 - j][j + 4].getToken() == Token))
return true;
return false;
}
for (int i = 95; i >= 0; i--) {
for (int j = 0; j <= i; j++)
if ((cells[j + 95 - i][j].getToken() == Token)
&& (cells[j + 96 - i][j + 1].getToken() == Token)
&& (cells[j + 97 - i][j + 2].getToken() == Token)
&& (cells[j + 98 - i][j + 3].getToken() == Token)
&& (cells[j + 99 - i][j + 4].getToken() == Token))
return true;
return false;
}
for (int i = 1; i <= 95; i++) {
for (int j = i; j <= 95; j++)
if ((cells[j - 1][j].getToken() == Token)
&& (cells[j][j].getToken() == Token)
&& (cells[j + 1][j].getToken() == Token)
&& (cells[j + 2][j].getToken() == Token)
&& (cells[j + 3][j].getToken() == Token))
return true;
return false;
}
return false;
} public class Cell extends JPanel {
private char Token = ' '; public Cell() {
setBorder(new LineBorder(Color.black, 1));
addMouseListener(new MouseListener());
} char getToken() {
return Token;
} void setToken(char a) {
Token = a;
repaint();
} protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (Token == 'x') {
g.drawLine(15, 15, getWidth() - 15, getHeight() - 15);
g.drawLine(getWidth() - 15, 15, 10, getHeight() - 10);
} else if (Token == 'o') {
g.drawOval(15, 15, getWidth() - 15, getHeight() - 15); }
} private class MouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
if (Token == ' ' && WhoseTurning != ' ') {
setToken(WhoseTurning);
}
if (WhoWin(WhoseTurning)) {
label.setText(WhoseTurning + "won! The game is over");
WhoseTurning = ' ';
} else if (isFull()) {
label.setText("Draw!The game is over");
} else {
WhoseTurning = (WhoseTurning == 'X') ? 'o' : 'X';
label.setText(WhoseTurning + "'s turn");
}
}
}
}
}
谢谢各位了!