您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > JAVA数独(九宫格)游戏软件设计报告
1佛山科学技术学院《可视化编程技术》课程设计报告数独(九宫格)游戏软件设计学生姓名:卫泶媚学号:2012914201年级专业:12级教育技术学2班指导老师:容汝佳学院:教育科学学院广东★佛山提交日期:2014年6月2目录1.前言______________________________22.概要设计____________________________32.1数独游戏分析_________________________32.2数独游戏界面设计_______________________52.3数独游戏程序功能_______________________53.详细设计___________________________73.1类设计___________________________73.2数独算法设计_________________________94.程序代码____________________________105.参考资料____________________________196.心得体会____________________________203摘要:本程序是个简单的数独游戏界面,在9×9的大九宫格中有9个3×3的小九宫格,游戏根据玩家选择的难易程度提供不同数量的数字。根据已给出的数字,利用逻辑和推理,在其余空格上填入1至9的数字。每个数字在每个小九宫格内每行、每列只能出现一次。虽然玩法简单,但数字排列方式却千变万化,是锻炼逻辑推理能力的好方法。另外,设有“答案”和“玩法说明”窗口为玩家提供参考和帮助。玩家完成所有数字的填写后,可进行提交,游戏系统会根据所填写的结果弹出相应的对话框。关键字:java游戏软件,数独(九宫格),界面布局1前言经济在发展,科学在发展,人也在发展。在学习JAVA语言后,我决定使用Java语言编写一个简单的数独游戏,来锻炼人们的逻辑推理能力和思维活跃度,同时,也能满足人们日常空余时间的娱乐需要。数独热潮已经在全球蔓延已久,随着数独游戏不断地发展完善,数独也越来越受到家长和孩子的青睐,认为数独不仅仅只是游戏,而是开发智力的一种方法。在孩子游戏娱乐的同时还能得到逻辑思维的锻炼,又何乐而不为呢?JAVA语言是一种纯面向对象的编程语言,自1995年诞生至今,已经得到飞速的发展,涉及计算机应用的方方面面,如浏览器应用、桌面应用、个人数字代理等等,Java语言面向对象、跨平台、安全性、多线程等特性,奠定了其作为网络应用开发首选工具的基础。另外,本数独游戏程序框架结构清晰明朗,便于读者理解以及为以后增添新功能打下良好的基础;同时,虽然这是一个较为普通的数独游戏程序,但是具有较强的实用性,而且对程序的配置要求不高,能够广泛应用。42概要设计2.1数独游戏分析数独游戏组成元素:单元格:数独中最小的单元,标准数独中共有81个;行:横向9个单元格的集合;列:纵向9个单元格的集合;宫:粗黑线划分的区域,标准数独中为3×3的9个单元格的集合;已知数:数独初始盘面给出的数字;候选数:每个空单元格中可以填入的数字。基本解法:利用1~9的数字在每一行、每一列、每一宫都只能出现一次的规则进行解题的方法。使用单元排除法的目的就是要在某一单元(即行,列或区块)中找到能填入某一数字的唯一位置,换句话说,就是把单元中其他的空白位置都排除掉。游戏布局:①JPanelpanel_txt=newJPanel(newGridLayout(3,3,2,2));//将面板设置为3行3列网格布局,并设置大小②for(inti=1;i=9;i++){//设置9个面板panel[i]=newJPanel(newGridLayout(3,3));//将面板设置为3行3列网格布局:panel_txt.add(panel[i]);//添加组件intm=(i+2)/3*3-2;//生成九个3*3的网格,并添加数字intn=((i-1)%3+1)*3-2;for(intj=m;j=m+2;j++){for(intk=n;k=n+2;k++){panel[i].add(text[j][k]);}}}52.2数独游戏界面设计2.3数独游戏程序功能功能1:弹出游戏界面,可直接开始进行数独游戏,也可以在游戏过程中选择菜单栏中“文件”——“新局”,进行新一局的游戏,或者是“文件”——“重来”,重新开始当前局。功能2:判断答案的正误。游戏当前局完成后,可选择菜单栏中“文件”——“提交”,系统会根据玩家在当前局所填写的结果,弹出相应的对话框。当输入的内容不符合要求时,弹出对话框:6当结果不正确时,弹出对话框:当答案正确时,弹出对话框:功能3:选择菜单栏中“文件”——“答案”,会弹出当前局数独游戏的正确答案的新窗口,给玩家提供参考。功能4:选择菜单栏中“帮助”——“说明”,会弹出次数独游戏玩法的相关说明的新窗口,给玩家提供帮助。另外,选择菜单栏中“帮助”——“作者”,会弹出对话框,显示此程序作者的相关信息。功能5:选择菜单栏中“文件”——“退出”,会自动关闭当前的数独游戏界面,退出系统。功能6:玩家可根据自身的情况或兴趣,在数独游戏界面上方的下拉列表中选择适合自己的难度(难度共分为3级,分别是“简单”,“一般”和“困难”),然后选择重新开局,游戏的难度会进行相应的变化。功能7:在九宫格数独游戏界面和弹出的消息提示界面以及答案显示窗口和玩法说明窗口有相关的最小化、最大化、关闭等按钮可以操作,玩家可根据需要自行选择相关操作。73详细设计3.1类设计类名角色变量(属性)行为ShuDu1一个数独MenuaBar:添加菜单项setSize()设尺寸add()添加文本及组件setMenuBar()设置难易等级菜单ShuDuAns答案窗口setSize()设置尺寸JPanel()设置面板布局Another说明窗口PublicvoidactionPerformed(ActionEvente)单击事件处理方法单击实践JOptionPaneshowMessageDialog():弹出提示信息框接口名属性ActionListeneraddActionListener():注册单击事件监听器ItemListener类的对象:属于ShuDu1主类的对象成员:MenuBar、Menu、MenuItem、JComboBox属于ShuDuAns类的对象:JTextField属于String类的对象:atext[i][j]属于JtextField类的对象:text[i][j]、属于JPanel类的对象:apanel[]、panel[]类:包括上述所有类及父类Jframe。类的属性:ShuDu1:publicString:publicJtextField:privateJPanel:privateJframe:public程序流程图:893.2数独算法设计staticintDFS(){for(inti=1;i=9;i++){for(intj=1;j=9;j++){if(data[i][j]==0){for(intk=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)return1;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)return0;}}}}return1;}staticvoidset_data_zero(){//数独的初始化for(inti=0;i=9;i++){for(intj=0;j=9;j++){data[i][j]=0;}}}staticvoidsetnum(){//数独数字的设置setzero();set_data_zero();for(inti=1;i=9;i++){//尝试填充的次数intn=(int)(Math.random()*100)+1;//添加任意整数intj=i*3-((i+2)/3*8-6);10data[i][j]=n%9+1;//产生数字intk=data[i][j];row[i][k]=1;col[j][k]=1;sql[(i+2)/3][(j+2)/3][k]=1;}DFS();}算法核心:数独游戏中的数字第一次是从所有数字中随机,第二次时从前八个数字中随机,依此类推,这样的数独算法既保证了随机性,也不会重复取已经不符合要求的数字,大大地提高程序的效率。4程序代码importjava.awt.*;//置入包importjava.awt.event.*;//置入处理由awt组件产生的事件importjava.io.*;importjavax.swing.*;importjava.util.*;publicclassShuDu1extendsJFrameimplementsActionListener,ItemListener{//框架窗口响应单击事件privateMenuBarmenubar=newMenuBar();//私有成员变量privateMenumenu_file=newMenu(文件);//定义“文件”菜单按钮privateMenumenu_help=newMenu(帮助);//定义“帮助”菜单按钮privateMenuItemitem_ans=newMenuItem(答案);//定义菜单项privateMenuItemitem_sol=newMenuItem(提交);privateMenuItemitem_rem=newMenuItem(重来);privateMenuItemitem_next=newMenuItem(新局);privateMenuItemitem_exit=newMenuItem(退出);privateMenuItemitem_auther=newMenuItem(作者);privateMenuItemitem_explain=newMenuItem(说明);privateJComboBoxbox=newJComboBox();//创建具有默认数据模型的复选框组件boxstaticintdata[][]=newint[10][10];//新建10*10的二维数组11staticintansdata[][]=newint[10][10];//新建存放正确答案的二维数组staticintrow[][]=newint[10][10];staticintcol[][]=newint[10][10];staticintsql[][][]=newint[4][4][10];staticJTextFieldtext[][]=newJTextField[10][10];//创建二维数组文本框组件textstaticStringatext[][]=newString[10][10];staticinthard=2;//默认初始难度为2staticintdatahard[]={2,3,5};//不同的难度classShuDuAnsextendsJFrame{//类声明;设置答案窗口privateJTextFieldatext[][]=newJTextField[10][10];publicShuDuAns(){//构造类super(答案);//设置框架窗口标题this.setSize(300,300);//设置窗体框架尺寸this.setLocation(200,200);//设置框架显示在屏幕的位置this.setVisible(true);//组件设为可见this.setResizable(false);//窗口大小不能改变JPanelapanel_but=newJPanel(newFlowLayout());//将面板设为流布局JPanelap
本文标题:JAVA数独(九宫格)游戏软件设计报告
链接地址:https://www.777doc.com/doc-7045224 .html