简单实现java数独游戏
本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下
打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用...
数独代码是在之前寒假受命写的,学了一个月java的成果,现在看来有些不足但毕竟是第一个程序,就直接放上来,数独终盘的实现直接用了暴力,时间复杂度有点高,懒得改了直接放代码
终盘实现:
importjava.util.Random; publicclassSudokuPuzzleGenerator{ privateRandomrandom=newRandom(); privatestaticfinalintMAX_CALL_RANDOM_ARRAY_TIMES=220; privateintcurrentTimes=0; publicint[][]generatePuzzleMatrix(){ int[][]randomMatrix=newint[9][9]; for(introw=0;row<9;row++){ if(row==0){ currentTimes=0; randomMatrix[row]=buildRandomArray(); }else{ int[]tempRandomArray=buildRandomArray(); for(intcol=0;col<9;col++){ if(currentTimes界面及判断:
用swing写的
importjavax.swing.*; importjava.awt.*; importjava.awt.event.*; importjava.util.Random; publicclassShuDextendsJFrame{ privatestaticfinallongserialVersionUID=5952689219411916553L;//序列化字段 privatestaticJTextFielda[][]=newJTextField[9][9];//存储文本框中的数字 staticintans[][]=newint[9][9];//存储输入后的两位数组 SudokuPuzzleGeneratorexample=newSudokuPuzzleGenerator(); publicintright[][]=example.generatePuzzleMatrix(); publicintrightans[][]; privateint[][]Wk(inta[][]){//挖空 Randomr=newRandom(); inta1,a2; a1=r.nextInt(9); a2=r.nextInt(9); for(inti=0;i<100;i++) { a[a1][a2]=0; a1=r.nextInt(9); a2=r.nextInt(9); } returna; } publicShuD(){ Containerc=getContentPane(); c.setLayout(newBorderLayout(2,1));//边框布局 JMenuItemjmiOk=newJMenuItem("提交");//定义菜单 JMenuItemjmiExplain=newJMenuItem("详情"); JMenuItemjmiMessage=newJMenuItem("信息"); JPanelpanel=newJPanel();//定义一个容器 panel.add(jmiOk);//将菜单在容器内显示 panel.add(jmiExplain); panel.add(jmiMessage); JPanelp1=newJPanel(newGridLayout(9,9,5,5));//定义9行9列的网格布局 add(panel,BorderLayout.NORTH);//将菜单放置在北面 add(p1,BorderLayout.CENTER);//将数字放置在正中间 rightans=Wk(right); for(intk=0;k<9;k++) { for(intn=0;n<9;n++) { if(rightans[k][n]!=0) { a[k][n]=newJTextField(""+rightans[k][n]); a[k][n].setHorizontalAlignment(JTextField.CENTER);//将数字水平居中 a[k][n].setEditable(false);//只可显示不可修改 p1.add(a[k][n]);//添加文本框 } else { a[k][n]=newJTextField(); a[k][n].setHorizontalAlignment(JTextField.CENTER); p1.add(a[k][n]); } } } add(p1);//将数字面板显示在容器里 jmiOk.addActionListener(newActionListener(){//匿名创建事件监听器 publicvoidactionPerformed(ActionEvente) { if(gettext()==1) { if(judge()==true) { JOptionPane.showMessageDialog(null,"Youranswerisright!","Result",JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null,"Youransweriswrong!","Result",JOptionPane.INFORMATION_MESSAGE); } } } }); explainListenerClasslistener2=newexplainListenerClass(); jmiExplain.addActionListener(listener2); messageListenerClasslistener3=newmessageListenerClass(); jmiMessage.addActionListener(listener3); } staticintgettext()//获取文本框的文字 { inti,j; for(i=0;i<9;i++) { for(j=0;j<9;j++) { ans[i][j]=0; } } for(intk=0;k<9;k++) { for(intn=0;n<9;n++) { try//异常处理 { ans[k][n]=Integer.parseInt(a[k][n].getText()); //将答案类型转换之后传给ans } catch(NumberFormatExceptionnfe) { JOptionPane.showMessageDialog(null,"数据中包括非数字,请重新输入"); return0; } } } return1; } publicstaticbooleanjudge()//判断输入的答案是否正确 { inti,j,k; int[][]answer=ans; for(i=0;i<9;i++) { if(judge9(answer[i])==false)//判断每列是否有重复数字 returnfalse; } for(j=0;j<9;j++)//判断每行是否有重复数字 { int[]newAnswerColumn=newint[9]; for(i=0;i<9;i++) { newAnswerColumn[i]=answer[i][j]; } if(judge9(newAnswerColumn)==false) returnfalse; } for(i=0;i<3;i++)//判断每个小九宫格内是否有重复数字 { for(j=0;j<3;j++) { k=0; int[]newAnswer=newint[9]; for(intm=i*3;m以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。