C++面向对象实习报告数独游戏的设计与实现

上传人:博****1 文档编号:432889105 上传时间:2023-02-18 格式:DOC 页数:59 大小:664KB
返回 下载 相关 举报
C++面向对象实习报告数独游戏的设计与实现_第1页
第1页 / 共59页
C++面向对象实习报告数独游戏的设计与实现_第2页
第2页 / 共59页
C++面向对象实习报告数独游戏的设计与实现_第3页
第3页 / 共59页
C++面向对象实习报告数独游戏的设计与实现_第4页
第4页 / 共59页
C++面向对象实习报告数独游戏的设计与实现_第5页
第5页 / 共59页
点击查看更多>>
资源描述

《C++面向对象实习报告数独游戏的设计与实现》由会员分享,可在线阅读,更多相关《C++面向对象实习报告数独游戏的设计与实现(59页珍藏版)》请在金锄头文库上搜索。

1、西北农林科技大学C+课程实习 西北农林科技大学信息工程学院C+面向对象实习报告题 目:数独游戏的设计与实现 学 号姓 名专业班级计算机科学与技术103班指导教师实践日期2012年2月20日3月2日1目 录目 录一、综合训练目的与要求4(1)综合训练目的:4(2)综合训练要求:4二、综合训练任务4(1)采用面向对象的思想设计设计一个CSudoku类用于求解数独,进而完成数独游戏的设计与实现;4(2)编译并调试程序,不断的发现问题,并且解决问题,使数独的各种功能都能够完全实现,最后使程序尽量少一些缺陷。4三、总体设计4四、详细设计说明5(1)主对话框中的各个功能的详细介绍:5进入游戏5游戏说明5版

2、本信息5作者简介5退出系统6(2)游戏对话框的各个功能的详细介绍:6游戏区6函数实现:7主要算法讲解:7(3)界面美化的具体实现过程:12各个对话框的背景12主对话框和作者简介中的照片13五、调试与测试14(1)游戏的功能及界面展示:14(2)游戏测试:18(3)遇到的问题及解决方法:19、问题:19、问题21六、实习日志23(1)2月20日2月21日:23(2)2月22日2月24日:23(3)2月27日:23(4)2月28日2月29日:23(5)2月31日2月32日:23七、实习总结24八、附录:核心代码清单25(1)主对话框的建立以及各个子对话框的建立代码实现过程:25(2)新游戏功能的代

3、码实现过程:30(3)自动求解的代码实现过程:34(4)确认完成的代码实现过程:36(5)显示与回显的代码实现过程:393五、调试与测试一、综合训练目的与要求(1)综合训练目的: 能够熟练运用Microsoft Visual C+ 6.0编译和调试程序;通过此次实习,在对上一学期C+知识巩固提高的同时,也要对以前为学好或是未学到的C+知识加以学习并且熟练运用; 在以前MFC编程的基础上,进一步的学习和了解MFC的知识,尤其是对界面的设计,以及各类消息函数的了解,从而为程序的界面设计和功能实现铺好道路,降低难度。(2)综合训练要求: 在实习期间,每天要按时到达实习地点,尽量不迟到或是早退,并且到

4、了之后应该尽快进入状态,抓紧时间;在两周的实习之中,自己应该做好安排和计划,知道在每个时间段应该做些什么,最重要的是一定要在每个时间段内,提前或是按时完成自己规定的任务,以便为以后的任务留下充足时间;在设计界面与编程阶段要有耐心,细心,认真完成每一模块的制作,并且细心的发现问题,解决问题,最后完成设计,做出令自己满意的成果。二、综合训练任务(1)采用面向对象的思想设计设计一个CSudoku类用于求解数独,进而完成数独游戏的设计与实现; (2)编译并调试程序,不断的发现问题,并且解决问题,使数独的各种功能都能够完全实现,最后使程序尽量少一些缺陷。三、总体设计(1)数独游戏采用了一种小型系统的设计

5、方法,所有的程序都依附在了两个对话框中,一个是用户界面对话框,即主对话框,另一个是游戏界面对话框;(2)在主对话框中,有进入游戏、游戏说明,版本信息,作者简介,以及退出系统等五个按钮,每个按钮中都各自有相对应的消息响应函数和功能;(3)在游戏界面中,分为游戏区和功能区,游戏区即是一个大的九宫格,功能区主要集中了数独游戏最精华的部分,有难易选择、新游戏、自动求解、确认完成,退出游戏等主要功能。59四、详细设计说明(1)主对话框中的各个功能的详细介绍:进入游戏含义:即是主对话框与游戏对话框相互转换的接口;函数实现:void CLianxiDlg:OnEntrance() / TODO: Add y

6、our control notification handler code hereGameDialog dgs;dgs.DoModal();游戏说明含义:主要是介绍数独游戏的起源、游戏规则以及游戏技巧,以方初学用户快速的掌握和了解游戏,体验到数独的精妙之处;函数实现:void CLianxiDlg:OnGamerule() / TODO: Add your control notification handler code hereGameInstruction gps;gps.DoModal();版本信息含义:初略的说明游戏的名称,完成时间,以及制作的版次函数实现:void CLianxi

7、Dlg:OnCopyright() / TODO: Add your control notification handler code hereCAboutDlg cps;cps.DoModal();作者简介内容:介绍了作者的相关信息,并附上了一幅自制的照片,已满足一下自己小小的虚荣心吧!函数实现:void CLianxiDlg:OnAuthor() / TODO: Add your control notification handler code here AuthorDlg lps; lps.DoModal(); /MessageBox( 要提示的内容 , 消息标题 ,MB_ICONI

8、NFORMATION|MB_YESNO); /MessageBox profile退出系统特色:与普通的退出功能不一样的是在点击了此按钮后会自动弹出一个询问对话框,这样可以有效的防止用户误操作而退出了系统函数实现:void CLianxiDlg:OnCancel() / TODO: Add extra cleanup here if( MessageBox( 您确定要退出系统吗 ? , 温馨提示,MB_ICONQUESTION|MB_YESNO) = IDYES) CDialog : OnCancel(); /*if (AfxMessageBox(您确定要退出系统吗?,MB_YESNO|MB_

9、ICONQUESTION) = IDYES) CDialog:OnCancel( ); */This is the second way to do information/CDialog:OnCancel();(2)游戏对话框的各个功能的详细介绍:游戏区含义及内容:游戏区是用户与计算机交互的最直接,也是最频繁的地方,设计时采用了9*9个可编辑文本框按ID顺序依次的排列成了一个正方形。并且游戏的难易程度设定了四个级别:简单、中等、困难、用户自定义,以方便不同水平的用户都能够找到能够挑战一下的游戏。在程序内部是采用了一个a99的二位数组与81个可编辑文本相对应而进行操作。当用户点击新游戏时,系统

10、会用已设定好的算法从8个文件中随机的选择一个读取到a99这个数组中,然后通过显示函数将a99中的每一个数付给81个文本框中,并且显示给用户。如果数组付给文本框的数是0的话,那么所对应的文本框就不进行显示,并且将文本框设为可编辑状态;反之这将文本框设为不可编辑状态;这样就可以方便用户填写数的同时也能够避免用户由于误操作而将系统自动生成的非零数修改,造成程序运行出错。当用户填写数独完成,点击确认完成之后,首先,在确认完成的消息响应函数中,系统会调用回显函数,将用户在文本框中所填写的数据按照对应顺序付给数组aij,从而方便系统接收到用户填写的数据。之后系统会调用已经编写好的判断函数,对大九宫格(即a

11、99)中的每一行、每一列,每一个小九宫格进行判断。从而向用户输出相应的信息,提示用户解答的是否正确。在数独设计时的一个新的特色就是,新增加了一项“自动求解”的功能。有了这项功能以后,一方面当用户在某一局游戏苦思良久也未能解出时,可以随时的提供正确答案未用户答疑解惑,另一方面也能够体现计算机厉害之处,体现出科技助人的力量。在退出游戏时也采用了与主窗口类似的做法,对用户的操作进行确认,避免用户的误操作。函数实现:详见核心代码清单;主要算法讲解:1、算法名称:判断用户所填写的数是否符合数独游戏的规则;算法函数:int GameDialog:Judge(int value1,int row,int c

12、ol)应用算法的按钮:确认完成算法思路:当用户填写完所有的空格时后,点击确认完成后我们就需要对用户填写的所有数进行判断;判断时不是所有数一起判断的,而是一个一个的进行判断;例如:用户填了7(5.,3)这个数,首先我们要对第五行进行检测,将第五行的出7本身外的所有数都与7做比较,如果有相等的,则返回false;同理对第三列的所有数也用此法进行判断,返回相应值;之后将7(5,3)的横众坐标都与3求余,之后我们会发现在大的九宫格中,前三行的横坐标都为0,中间三行的横坐标都为1,最后三行的横坐标都为2;前三列的纵坐标都为0,中间三行的纵坐标都为1,最后三列的纵坐标都为2;所以我们就可以通过这种方法确定

13、出7(5,3)所在的小九宫格的位置了,之后在小九宫格中用小九宫格中除7本身外的所有数与7做比较,如果有相等的就返回false,没有相等的就返回true;最后我们就可以通过函数的返回值判定用户所填写的数字7是否符合数独游戏的规则了;同理我们就可里利用这种方法对用户填写的所有数字进行逐一的判断了。由于每次生成游戏时的空格数是不固定的,所以没次用Judge()函数进行判断后返回的true或false的个数也是不固定的,所以我们可以对整个大的九宫格整体做判断,这样虽然有的判断是不必要的,但是如果用户填对所有的空,判断后就会有81个true返回,这样我们就可以通过看是否有81个true 来判断用户是否完全填对了;这就是我所设计的数独算法了,下面介绍一下算法的主要实现代码,方便理解算法;算法实现:int GameDialog:Judge(int value1,int row,int col)int down_row,down_col,up_row,up_col;for(down_row=0;down_rowrow;up_row-) /判断方格向下的格子if(value1=aup_rowcol) return 0;for(down_col=0;down_colcol;down_col+) /判断方格向左的格子if(value1=arowdown_col) return 0;for(up_col

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号