计算机与信息工程系《数独游戏的设计与实现》课程设计
} return 1; }
static void set_data_zero(){ //数独初始化 for(int i=0;i<=9;i++){ for(int j=0;j<=9;j++){
data[i][j]=0; //0表示数字未给出 } } }
static void setnum(){ //设置数字 setzero(); //未给出的数字,需玩家填入 set_data_zero(); //初始化数独 for(int i=1;i<=9;i++){ //填充次数
int n =(int)(Math.random()*100)+1; //随机添加任意整数 int j=i*3-((i+2)/3*8-6); data[i][j]=n%9+1; //产生数字
int k=data[i][j]; //设置间隔 row[i][k]=1; col[j][k]=1;
sql[(i+2)/3][(j+2)/3][k]=1; } DFS(); }
static void setzero(){ //数独空格初始化 for(int i=0;i<=9;i++){
第 16 页 共 31 页
计算机与信息工程系《数独游戏的设计与实现》课程设计
for(int k=0;k<=9;k++){ row[i][k]=0; col[i][k]=0; }
for(int j=0;j<=9;j++){ for(int k=0;k<=9;k++){ sql[(i+2)/3][(j+2)/3][k]=0; } } } }
static void settext(){ //设置数独游戏中的数字 for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ //int hard=2; //hard代表难度
int n =(int)(Math.random()*100)+1; //随机数 if(n%hard==0){ //根据选择的难易程度设置数独 text[i][j]=new JTextField(Integer.toString(data[i][j])); text[i][j].setEditable(false); //不可编辑,只能显示 } else{
text[i][j]=new JTextField(); //其他难度,新建文本行 }
text[i][j].setHorizontalAlignment(JTextField.CENTER); //水平居中 atext[i][j]=text[i][j].getText(); //设置组件 } }
第 17 页 共 31 页
计算机与信息工程系《数独游戏的设计与实现》课程设计
}
static int gettext(){ //玩家填入数字 for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ try{ //异常处理
int k=Integer.parseInt(text[i][j].getText()); //第一个文本行输入操作 ansdata[i][j]=k; }
catch(NumberFormatException nfe){ //捕获PerseInt( )方法声明的异常对象
JOptionPane.showMessageDialog(null,\数据中包括非数字,请重新输入!\); //提示出错信息 return 0; } } } return 1; }
static int ans(){ //设置答案窗口的面板格局 setzero(); //空格初始化 for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ int k=ansdata[i][j]; if( k>9 || k<1 ){ return 0; }
if( row[i][k]==1 || col[j][k]==1 || sql[(i+2)/3][(j+2)/3][k]==1 ){ return 0;
第 18 页 共 31 页
计算机与信息工程系《数独游戏的设计与实现》课程设计
}
row[i][k]=1; col[j][k]=1;
sql[(i+2)/3][(j+2)/3][k]=1; } } return 1; }
public ShuDu1(){ //数独游戏布局 super(\); //窗口标题 this.setSize(470,500); //设置窗口尺寸 this.setLocation(260,130); //窗口位置 this.setVisible(true); //显示窗口
this.setDefaultCloseOperation(EXIT_ON_CLOSE); //单击窗口按钮时,结束程序运行
this.setResizable(false); //窗口大小不可变 JPanel panel_but=new JPanel(new FlowLayout());
JPanel panel_txt=new JPanel(new GridLayout(3,3,2,2)); //将面板设置为3行3列网格布局,并设置大小
JPanel panel[]=new JPanel[10];
for(int i=1;i<=9;i++){ //设置9个面板
panel[i]=new JPanel(new GridLayout(3,3)); //将面板设置为3行3列网格布局
panel_txt.add(panel[i]); //添加组件
int m=(i+2)/3*3-2; //生成九个3*3的网格,并添加数字 int n=((i-1)%3+1)*3-2; for(int j=m;j<=m+2;j++){
第 19 页 共 31 页
计算机与信息工程系《数独游戏的设计与实现》课程设计
for(int k=n;k<=n+2;k++){ panel[i].add(text[j][k]); } } }
this.add(panel_but,\); //为当前类添加框架 this.add(panel_txt); //添加文本
menubar.add(menu_file); //添加主菜单
menu_file.add(item_next); //添加下拉菜单选项 menu_file.add(item_ans); menu_file.add(menu_edit); menu_file.add(item_exit);
menu_edit.add(item_sol); menu_edit.add(item_rem);
item_exit.addActionListener(this); //注册单击事件监听器,委托当前对象处理事件
item_next.addActionListener(this); item_ans.addActionListener(this); item_sol.addActionListener(this); item_rem.addActionListener(this);
this.setMenuBar(menubar); //设置难易程度等级菜单 Object pro[]={\,\,\};
box=new JComboBox(pro); //单击事件处理方法,实现ActionListener接口 if(hard==datahard[0]){ box.setSelectedIndex(0);
第 20 页 共 31 页