java 数独游戏_Java 数独游戏代码

import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; import java.util.*; public class ShuDu extends JFrame implements ActionListener,ItemListener { private MenuBar menubar=new MenuBar(); private Menu menu_file=new Menu("文件"); private Menu menu_edit=new Menu("结果"); private Menu menu_help=new Menu("帮助"); private MenuItem item_ans=new MenuItem("答案"); private MenuItem item_sol=new MenuItem("提交"); private MenuItem item_rem=new MenuItem("重来"); private MenuItem item_next=new MenuItem("开局"); private MenuItem item_auther=new MenuItem("作者"); private MenuItem item_exit=new MenuItem("退出"); private JButton button_sol=new JButton("提交"); private JButton button_ans=new JButton("答案"); private JButton button_rem=new JButton("重来"); private JButton button_ext=new JButton("退出"); private JButton button_aur=new JButton("作者"); private JButton button_next=new JButton("开局"); private JComboBox box=new JComboBox(); static int data[][]=new int[10][10]; static int ansdata[][]=new int[10][10]; static int row[][]=new int[10][10]; static int col[][]=new int[10][10]; static int sql[][][]=new int[4][4][10]; static JTextField text[][]=new JTextField[10][10]; static String atext[][]=new String[10][10]; static int hard=2; static int datahard[]={2,3,5}; // 不同的难度 class ShuDuAns extends JFrame { private JTextField atext[][]=new JTextField[10][10]; public ShuDuAns() { super("答案"); this.setSize(300,300); this.setLocation(200,200); this.setVisible(true); this.setResizable(false); JPanel apanel_but=new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel apanel_txt=new JPanel(new GridLayout(3,3,2,2)); JPanel apanel[]=new JPanel[10]; for(int i=1;i<=9;i++) { apanel[i]=new JPanel(new GridLayout(3,3)); apanel_txt.add(apanel[i]); int m=(i+2)/3*3-2; int n=((i-1)%3+1)*3-2; for(int j=m;j<=m+2;j++) { for(int k=n;k<=n+2;k++) { atext[j][k]=new JTextField(Integer.toString(data[j][k])); atext[j][k].setHorizontalAlignment(JTextField.CENTER); atext[j][k].setEditable(false); apanel[i].add(atext[j][k]); //text[j][k].setText(Integer.toString(j)+Integer.toString(k)); } } } this.add(apanel_txt); } } static int DFS() { for(int i=1;i<=9;i++) { for(int j=1;j<=9;j++) { if(data[i][j]==0) { for(int k=1;k<=9;k++) { if( row[i][k]==0 && col[j][k]==0 && sql[(i+2)/3][(j+2)/3][k]==0 ) { data[i][j]=k; row[i][k]=1; col[j][k]=1; sql[(i+2)/3][(j+2)/3][k]=1; if( DFS()==1 ) return 1; else { data[i][j]=0; row[i][k]=0; col[j][k]=0; sql[(i+2)/3][(j+2)/3][k]=0; } } if(k==9) return 0; } } } } 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; } } } 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++) { 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(); } } } 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) { 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; } row[i][k]=1; col[j][k]=1; sql[(i+2)/3][(j+2)/3][k]=1; } } return 1; } public ShuDu() { 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(FlowLayout.LEFT)); JPanel panel_txt=new JPanel(new GridLayout(3,3,2,2)); JPanel panel[]=new JPanel[10]; for(int i=1;i<=9;i++) { panel[i]=new JPanel(new GridLayout(3,3)); panel_txt.add(panel[i]); int m=(i+2)/3*3-2; int n=((i-1)%3+1)*3-2; for(int j=m;j<=m+2;j++) { for(int k=n;k<=n+2;k++) { panel[i].add(text[j][k]); //text[j][k].setText(Integer.toString(j)+Integer.toString(k)); } } } this.add(panel_but,"South"); this.add(panel_txt); menubar.add(menu_file); menubar.add(menu_edit); menubar.add(menu_help); menu_file.add(item_next); menu_file.add(item_ans); menu_file.add(item_exit); menu_edit.add(item_sol); menu_edit.add(item_rem); menu_help.add(item_auther); item_exit.addActionListener(this); item_next.addActionListener(this); item_ans.addActionListener(this); item_sol.addActionListener(this); item_auther.addActionListener(this); item_rem.addActionListener(this); this.setMenuBar(menubar); Object pro[]={" 简单 "," 一般 "," 困难 "}; box=new JComboBox(pro); if(hard==datahard[0]) { box.setSelectedIndex(0); } if(hard==datahard[1]) { box.setSelectedIndex(1); } if(hard==datahard[2]) { box.setSelectedIndex(2); } panel_but.add(box); box.addItemListener(this); panel_but.add(button_next); button_next.addActionListener(this); panel_but.add(button_ans); button_ans.addActionListener(this); panel_but.add(button_sol); button_sol.addActionListener(this); panel_but.add(button_rem); button_rem.addActionListener(this); panel_but.add(button_ext); button_ext.addActionListener(this); panel_but.add(button_aur); button_aur.addActionListener(this); } public void actionPerformed(ActionEvent e) { if( e.getSource()==item_auther || e.getSource()==button_aur ) //作者 { JOptionPane.showMessageDialog(null,"作者:XY~Z/nQQ:175914048"); } if( e.getSource()==item_exit || e.getSource()==button_ext ) //退出 { System.exit(0); } if( e.getSource()==item_sol || e.getSource()==button_sol ) //提交 { if(gettext()==1) { if(ans()==1) { JOptionPane.showMessageDialog(null,"答案正确,恭喜!"); } else { JOptionPane.showMessageDialog(null,"答案错误,请再接再厉!"); } } } if( e.getSource()==item_rem || e.getSource()==button_rem ) //重来 { for(int i=1;i<=9;i++) { for(int j=1;j<=9;j++) { text[i][j].setText(atext[i][j]); } } } if( e.getSource()==item_ans || e.getSource()==button_ans ) //答案 { new ShuDuAns(); } if( e.getSource()==item_next || e.getSource()==button_next ) //开局 { setnum(); settext(); this.setVisible(false); new ShuDu(); } } public void itemStateChanged(ItemEvent e) { if(box.getSelectedIndex()==0) // easy { hard=datahard[0]; } if(box.getSelectedIndex()==1) // normal { hard=datahard[1]; } if(box.getSelectedIndex()==2) // hard { hard=datahard[2]; } } public static void main(String args[]) { setnum(); settext(); new ShuDu(); } }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值