简单实现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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。