import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class DrawCircle extends JFrame{ /**
 * 
 */
private static final long serialVersionUID = 1L;

class Checkerboard extends JPanel
{ /**
 * 
 */
private static final long serialVersionUID = 1L;

private int[][] wall = null; //记录已选中的点
private int[][] map = null; //地图

private int size = 0; //棋盘大小
private int pointNumbers = 0; //地图中点的个数
private int selectedNumbers = 0; //已选择的点的个数
private int trueNumbers = 0; //选对的点的个数

//构造 Checkerboard 类
public Checkerboard()
{
size = 10;
wall = new int[size][size];
//自定义地图
pointNumbers = 22;
map = new int[][]{
{0,1,1,1,0,0,0,0,0,0},
{1,0,0,0,1,0,0,0,0,0},
{1,0,0,0,0,1,0,0,0,0},
{0,1,0,0,0,0,1,0,0,0},
{0,0,1,0,0,0,0,1,0,0},
{0,0,1,0,0,0,0,1,0,0},
{0,1,0,0,0,0,1,0,0,0},
{1,0,0,0,0,1,0,0,0,0},
{1,0,0,0,1,0,0,0,0,0},
{0,1,1,1,0,0,0,0,0,0}
};

this.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
int x = e.getX() / 18;
int y = e.getY() / 18;
if (x < size && y < size){
if (wall[x][y] == 0) {
wall[x][y] = 1;
selectedNumbers ++;
}
else {
wall[x][y] = 0;
selectedNumbers --;
}
repaint();
if (checkWin(x,y))
JOptionPane.showMessageDialog(null, "你赢了");
}
}
});
}

public void paintComponent(Graphics g) {

super.paintComponent(g);
//画棋盘以及已选中的点
for (int i = 0; i < size; i++) {
for (int j = 0; j < size ; j++) {
g.drawRect(i * 18, j * 18, 18, 18);
if (wall[i][j] == 1)
g.fillArc(i * 18 + 2, j * 18 + 2, 14, 14, 0, 360);
}
}
//画横向数字
Graphics2D g2 = (Graphics2D)g;
for (int i = 0; i < size; i++){
g2.drawString(getNumbers(i,true), (size + 1) * 18, (i + 1) * 18);
}
//画纵向数字
for (int i = 0; i < size; i++) {
String numbers = getNumbers(i, false);
if (numbers.equals(""))
continue;
for (int j = 0; j < numbers.length(); j++) {
g2.drawString("" + numbers.charAt(j), i * 18, (size + 1 + j) * 18);
}
}
}
//检查游戏是否胜利
public boolean checkWin(int x, int y)
{
if (map[x][y] == 1)
trueNumbers ++;
if (selectedNumbers == pointNumbers && trueNumbers == pointNumbers)
return true;
else
return false;
}
//获取很想及纵向的数字
public String getNumbers(int line, boolean mode)
{
String numbers = "";
int count = 0;
if (mode)
{
for (int i = 0; i < size; i++) {
if (map[i][line] != 0)
count ++;
else if (count != 0) {
numbers += (count + " ");
count = 0;
}
}
if (count != 0)
numbers += (count + " ");
}
else
{
for (int i = 0; i < size; i++) {
if (map[line][i] != 0)
count ++;
else if (count != 0) {
numbers += (count);
count = 0;
}
}
if (count != 0)
numbers += (count);
}
return numbers;
}
} public DrawCircle()
{
super("Game");
Checkerboard cb = new Checkerboard();
this.add(cb);
}

public static void main(String[] args) {
DrawCircle frame = new DrawCircle();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}