import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JRadioButton;
import java.awt.GridLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Iterator;
import java.util.Stack;
import java.util.Vector;
import java.util.zip.ZipEntry;
public class GameFrame extends JFrame implements ActionListener{
private JPanel contentPane;
private Vector<JButton> buttonsVector; //存放81个按钮
private Vector<JButton> numberButtonVector; //存放9个数字键
private Vector<JRadioButton> radioButtonsvVector; //存放3个单选框
private JButton choosedButton; //当前被选中的按钮,表示将要被修改
private GameCore core; //游戏内核,含有游戏算法
private int holeNumber = 25; //默认为简单,挖25空
private int[][] backup; //用来备份游戏,用于清除后重新导入
private JButton btnNewButton; //重新开始按钮
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
GameFrame frame = new GameFrame();
frame.setVisible(true);
frame.setResizable(false);
frame.setTitle("数独游戏");
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public GameFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 460, 545);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
JMenu mnNewMenu = new JMenu("\u83DC\u5355");
menuBar.add(mnNewMenu);
JMenuItem menuItem = new JMenuItem("\u6E38\u620F\u89C4\u5219");
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null, "数独(すうどく,Sudoku)是一种运用纸、\n" +
"笔进行演算的逻辑游戏。玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足\n" +
"每一行、每一列、每一个粗线宫内的数字均含1-9,不重复");
}
});
mnNewMenu.add(menuItem);
JMenuItem mntmNewMenuItem = new JMenuItem("\u7248\u672C\u4FE1\u606F");
mntmNewMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null, "版本:数独1.0\n" +
"开发者:李繁\n" +
"开发时间:2014年7月16日");
}
});
mnNewMenu.add(mntmNewMenuItem);
JMenuItem mntmNewMenuItem_1 = new JMenuItem("\u4F7F\u7528\u624B\u518C");
mntmNewMenuItem_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null, "该游戏有”简单“、”一般“、”困难“三个难度级别\n" +
"“开始新游戏”开始新的一局游戏,”清除已填“则清除当前已填数字");
}
});
mnNewMenu.add(mntmNewMenuItem_1);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout(0, 0));
JPanel panel = new JPanel();
contentPane.add(panel, BorderLayout.SOUTH);
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
JButton button = new JButton("1");
button.setFont(new Font("Batang", Font.PLAIN, 10));
panel.add(button);
JButton button_1 = new JButton("2");
button_1.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_1);
JButton button_2 = new JButton("3");
button_2.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_2);
JButton button_3 = new JButton("4");
button_3.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_3);
JButton button_4 = new JButton("5");
button_4.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_4);
JButton button_5 = new JButton("6");
button_5.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_5);
JButton button_6 = new JButton("7");
button_6.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_6);
JButton button_7 = new JButton("8");
button_7.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_7);
JButton button_8 = new JButton("9");
button_8.setFont(new Font("宋体", Font.PLAIN, 10));
panel.add(button_8);
JPanel panel_1 = new JPanel();
contentPane.add(panel_1, BorderLayout.NORTH);
panel_1.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
btnNewButton = new JButton("\u5F00\u59CB\u65B0\u6E38\u620F");
btnNewButton.addActionListener(this);
panel_1.add(btnNewButton);
JButton btnNewButton_1 = new JButton("\u6E05\u9664\u5DF2\u586B");
btnNewButton_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {//清除所有按钮监听器
for (int i = 0; i < 9; i ++) {
for (int j = 0; j < 9; j ++) {
core.test[i][j] = backup[i][j];
}
}
initGame();
}
});
panel_1.add(btnNewButton_1);
//默认为单选按钮 “简单”被选中
JRadioButton rdbtnNewRadioButton = new JRadioButton("\u7B80\u5355", true);
panel_1.add(rdbtnNewRadioButton);
JRadioButton radioButton = new JRadioButton("\u4E00\u822C");
panel_1.add(radioButton);
JRadioButton radioButton_1 = new JRadioButton("\u96BE");
panel_1.add(radioButton_1);
//单选按钮组,让三个按钮互斥
ButtonGroup group = new ButtonGroup();
group.add(rdbtnNewRadioButton);
group.add(radioButton);
group.add(radioButton_1);
JPanel panel_2 = new JPanel();
contentPane.add(panel_2, BorderLayout.CENTER);
panel_2.setLayout(new GridLayout(9, 9, 0, 0));
JButton btnNewButton_2 = new JButton("");
btnNewButton_2.setForeground(Color.BLACK);
btnNewButton_2.setBackground(Color.PINK);
panel_2.add(btnNewButton_2);
JButton btnNewButton_3 = new JButton("");
btnNewButton_3.setBackground(Color.PINK);
panel_2.add(btnNewButton_3);
JButton btnNewButton_4 = new JButton("");
btnNewButton_4.setBackground(Color.PINK);
panel_2.add(btnNewButton_4);
JButton btnNewButton_5 = new JButton("");
btnNewButton_5.setBackground(Color.CYAN);
panel_2.add(btnNewButton_5);
JButton btnNewButton_6 = new JButton("");
btnNewButton_6.setBackground(Color.CYAN);
btnNewButton_6.addActionListener(this);
panel_2.add(btnNewButton_6);
JButton btnNewButton_7 = new JButton("");
btnNewButton_7.setBackground(Color.CYAN);
panel_2.add(btnNewButton_7);
JButton btnNewButton_8 = new JButton("");
btnNewButton_8.setBackground(Color.PINK);
panel_2.add(btnNewButton_8);
JButton btnNewButton_9 = new JButton("");
btnNewButton_9.setBackground(Color.PINK);
panel_2.add(btnNewButton_9);
JButton btnNewButton_10 = new JButton("");
btnNewButton_10.setBackground(Color.PINK);
panel_2.add(btnNewButton_10);
JButton btnNewButton_11 = new JButton("");
btnNewButton_11.setBackground(Color.PINK);
panel_2.add(btnNewButton_11);
JButton btnNewButton_12 = new JButton("");
btnNewButton_12.setBackground(Color.PINK);
panel_2.add(btnNewButton_12);
JButton btnNewButton_13 = new JButton("");
btnNewButton_13.setBackground(Color.PINK);
panel_2.add(btnNewButton_13);
JButton btnNewButton_14 = new JButton("");
btnNewButton_14.setBackground(Color.CYAN);
panel_2.add(btnNewButton_14);
JButton btnNewButton_15 = new JButton("");
btnNewButton_15.setBackground(Color.CYAN);
panel_2.add(btnNewButton_15);
JButton btnNewButton_16 = new JButton("");
btnNewButton_16.setBackground(Color.CYAN);
panel_2.add(btnNewButton_16);
JButton btnNewButton_17 = new JButton("");
btnNewButton_17.setBackground(Color.PINK);
panel_2.add(btnNewButton_17);
JButton btnNewButton_18 = new JButton("");
btnNewB