java课程设计九宫格数独.doc
《java课程设计九宫格数独.doc》由会员分享,可在线阅读,更多相关《java课程设计九宫格数独.doc(23页珍藏版)》请在沃文网上搜索。
1、中南民族大学管理学院学生课程设计报告课题名称: java课程设计 选题名称: 九宫格数独 年 级: 2009 专 业: 信息管理与信息系统 学 号: 姓 名: 指导教师: 完成地点: 管理学院综合实验室 完成日期: 2011年9月25日 2011学年至2012学年度第一学期23目 录一、 题目描述 3二、 问题分析 3三、 问题分解 4四、 系统设计 6五、 系统实现 11六、 系统设计和软件发布 24七、 难点及关键技术分析 31八、 心得体会 32一、题目(问题)描述在99格的大九宫格中有9个33格的小九宫格,并提供一定数量的数字。根据这些数字,利用逻辑和推理,在其它的空格上填入1到9的数
2、字。每个数字在每个小九宫格内只能出现一次,每个数字在每行、每列也只能出现一次。 这种游戏只需要逻辑思维能力,与数字运算无关。虽然玩法简单,但数字排列方式却千变万化,所以不少教育者认为数独是锻炼脑筋的好方法。二、问题分析1、基本解法:利用1 9 的数字在每一行、每一列、每一宫都只能出现一次的规则进行解题的方法。 实际寻找解的过程为: 使用单元排除法的目的就是要在某一单元(即行,列或区块)中找到能填入某一数字的唯一位置,换句话说,就是把单元中其他的空白位置都排除掉。 那么要如何排除其余的空格呢?当然还是不能忘了游戏规则,由于1-9的数字在每一行、每一列、每一个九宫格都要出现且只能出现一次,所以:
3、如果某行中已经有了某一数字,则该行中的其他位置不可能再出现这一数字 如果某列中已经有了某一数字,则该列中的其他位置不可能再出现这一数字 如果某区块中已经有了某一数字,则该区块中的其他位置不可能再出现这一数字。单元格:数独中最小的单元,标准数独中共有81个;行:横向9个单元格的集合;列:纵向9个单元格的集合;宫:粗黑线划分的区域,标准数独中为33的9个单元格的集合;已知数:数独初始盘面给出的数字;候选数:每个空单元格中可以填入的数字。2、软件系统的功能可弹出游戏界面,方便用户操作,界面易于用户理解。可以选择游戏开始或重新开局。可以判断正误,能给出正确答案,当输入的内容不符合要求时,弹出对话框,提
4、示输入错误。当结果不正确时,弹出对话框,提示答案错误。答案正确时。弹出对话框,显示答案正确。在九宫格数独游戏界面和弹出的消息提示界面有相关的最小化、最大化、关闭等按钮可以操作。3、 对性能的要求(1) 具有较强的实用性(2) 易于理解和应用(3) 对程序的配置要求不高,能广泛应用三、问题分解1、 分析找出问题域中的对象,并将对象归类,注意筛选掉不必要的对象或类。对象:属于ShuDu1主类的对象: MenuBar、Menu、MenuItem、JComboBox属于ShuDuAns类的对象:JTextField 属于String类的对象:atextij 属于JtextField类的对象:texti
5、j、属于JPanel类的对象:apanel 、panel 类:包括上述所有类及父类Jframe。2、确定类的属性。ShuDu1: public String: publicJtextField:private JPanel:privateJframe:public3、确定对象之间的关系,包括依赖、泛化、关联、实现等等。Jframe与主类ShuDu1之间:泛化texts (JtextField)与atext (String)之间:依赖String与ShuDu1之间:依赖Resizable、Editable、Visible与texts 之间:实现i、j与textij、atextij之间:关联类设计
6、类名角色变量(属性)行为ShuDu1表示一个数独MenuaBar:添加菜单项,setSize():设置尺寸等add():添加文本及组件setMenuBar():设置难易等级菜单ShuDuAns设置答案窗口setSize():设置尺寸等JPanel( ):设置面板布局Public void actionPerformed(ActionEvent e)单击事件处理方法单击实践JOptionPaneshowMessageDialog():弹出提示信息框接口名属性ActionListeneradd ActionListener():注册单击事件监听器ItemListener四、系统设计(类设计、数据设
7、计、方法设计、算法设计等)类的设计(对象的设计)(类图、对象图)游戏界面name正确答案数据操作难易程度菜单选项菜单选项nameStartAnswerResultExit难易程度EasyCommomDifficultynamename正确答案程序流程图根据不同层次创建数字选择格子data(i,j),填入数值数独只有一个正确答案吗YES开始生成九宫格NO数独游戏已设置好解决难题的方法,解出正确答案的数字data(i,j)=0,其余的为空值,新的数独产生了NO答案不唯一,数独不成立答案唯一吗YES玩家填入数字j+=m+2弹出对话框,要求重新输入所有表格已填完YESNO是否有非法字符可选择提交,判断
8、正误NOYES是否符合正确答案弹出对话框,提示答案正确弹出对话框,提示答案错误。再接再厉java 程序中数独的算法设计static int DFS() for(int i=1;i=9;i+) for(int j=1;j=9;j+) if(dataij=0) for(int k=1;k=9;k+) if( rowik=0 & coljk=0 & sql(i+2)/3(j+2)/3k=0 ) dataij=k; rowik=1; coljk=1; sql(i+2)/3(j+2)/3k=1; if( DFS()=1 ) return 1; else dataij=0; rowik=0; coljk=
9、0; sql(i+2)/3(j+2)/3k=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+) dataij=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); dataij=
10、n%9+1; /产生数字 int k=dataij; rowik=1; coljk=1; sql(i+2)/3(j+2)/3k=1; DFS(); 算法核心:第一次次是从所有数字中随机,第二次时从前八个数字中随机,依次类推,这样既保证随机,也不会再重复取已经不符合要求的数字,提高程序的效率 程序的相关分析import java.awt.*; /这个一般在程序开始时用,即置入包。import javax.awt.event.*;/置入处理由awt组件产生的事件,有别于String事件import javax.swing.*;/置入最常用包,最常用的pachage,包含了各种swing组件的类pu
11、blic class:在 java 中用 public class 可以定义一个java 程序的入口类,在 asp 用 class ClassName 可以定义一个类private:在Java中是一个关键字,表示私有成员,private 是类中的一个属性 用它定义的feild和method只能在类中被调用.如果定义了private,就不能被外部类所访问了this:java中this有两种用法1、代表当前类;2、在构造函数中的使用如:this.setSize(300,300);/ 设置窗体的长宽各为:440, 140/它们的计量单位是像素this.setVisible(true);/显示窗口th
12、is.setResizable(false);/窗口大小不能改变this.setDefaultCloseOperation(EXIT_ON_CLOSE);/单击窗口按钮时,结束程序运行; new JPanel(new FlowLayout();/流式布局;GridLayout()/网格布局textsi.setEditable(false);/只能显示,不允许编辑;static :声明静态成员变量五、系统实现(编码)编码如下:import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; im
13、port java.util.*; public class ShuDu1 extends JFrame implements ActionListener,ItemListener /框架窗口响应单击事件 private MenuBar menubar=new MenuBar(); /私有成员变量 private Menu menu_file=new Menu(File); /定义File菜单按钮 private Menu menu_edit=new Menu(Result); private MenuItem item_ans=new MenuItem(Answer); /定义菜单项 pr
14、ivate MenuItem item_sol=new MenuItem(Submit); private MenuItem item_rem=new MenuItem(Restar); private MenuItem item_next=new MenuItem(Star); private MenuItem item_exit=new MenuItem(Exit); private JComboBox box=new JComboBox(); static int data=new int1010; /新建10*10的二维数组 static int ansdata=new int1010
15、; /存放正确答案的二维数组 static int row=new int1010; static int col=new int1010; static int sql=new int4410; static JTextField text=new JTextField1010; static String atext=new String1010; static int hard=2; static int datahard=2,3,5; / 不同的难度 class ShuDuAns extends JFrame /类声明;设置答案窗口 private JTextField atext=n
16、ew JTextField1010; public ShuDuAns() /构造类 super(Answer); /设置框架窗口标题 this.setSize(300,300); /设置框架尺寸 this.setLocation(200,200); /设置框架显示在屏幕的位置 this.setVisible(true); /组件设为可见 this.setResizable(false); /窗口大小不能改变 JPanel apanel_but=new JPanel(new FlowLayout(); /将面板设为流布局 JPanel apanel_txt=new JPanel(new Grid
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 课程设计 九宫 格数独
