C++课程设计报告24点游戏软件的开发专业计算机科学与技术学生姓名班级学号指导教师完成日期C++课程设计报告(2014)目录1概述................................................................11.1课程设计目的.........................................................11.2课程设计内容.........................................................12系统需求分析...........................................................12.1系统目标.............................................................12.2主体功能.............................................................12.3开发环境.............................................................23系统概要设计...........................................................23.1系统功能模块划分.....................................................23.2系统流程图...........................................................34系统详细设计............................................................44.1设计步骤.............................................................44.2界面设计.............................................................44.3关键功能的实现.......................................................55测试...................................................................65.1测试方案.............................................................65.2测试结果.............................................................6附录.................................................................11附录1源程序清单........................................................11C++课程设计报告(2014)124点游戏软件的开发1概述1.1课程设计目的a、巩固并加深学生对C++语言程序设计知识的理解;b、培养学生面向对象的程序设计思想,使学生认识面向过程和面向对象两种设计方法的区别;c、进一步掌握和应用VC++6.0集成开发环境;d、提高运用C++语言解决实际问题的能力;e、初步掌握开发小型实用软件的基本方法,能独立设计、实现基本的MIS系统;f、掌握书写程序设计开发文档的能力(书写课程设计实验报告)。1.2课程设计内容课题名称:24点游戏软件的开发说明:24点游戏是一种常见的纸牌游戏说明要求:a)实现随机发牌;b)能进行结果验算;c)计分;d)难度设置。2系统需求分析2.1系统目标24点游戏是个流行的数学运算游戏。本次课程设计通过24点游戏来加深我们对对话框编程的认识和理解,并介绍VisualC++在数学计算方面的应用,以及在按钮上设置位图和设置计时器的方法。24点扑克游戏的规则是:由系统发出4张扑克牌,要求用户利用扑克牌上显示的数字(JQKA算10),通过加减乘除运算得出24。2.2主体功能a.对游戏设计三个难易级别,分别为低级、中级和高级。每次开始游戏前可以根据玩家的需要进行难度设置,如若不设置,系统默认难度级别为中级,设置完难度级别之后就可以开始游戏了,单击“发牌”按钮,桌面上出现四张翻开的扑克牌,与此同时,游戏开始计时,进度条开始前进。b.在规定的时间内,玩家可以在“输入算式”的编辑框中输入自己想好的算式,然后点击“验算”按钮:如果输入的算式经运算后所的答案正确,则会在编辑框中24点游戏软件的开发2显示“正确!”;如果输入的数字与给出的牌的数字不符或者符号不合法,则会弹出“内部错误!”的窗口;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,则会在编辑框中显示“错误”;如果未输入任何的数字和算符,则会弹出“内部错误!”的窗口。c.如果在规定的时间内,玩家没有点击验算按钮,则会弹出“内部错误”的窗口。d.在结束本轮游戏后,如果玩家想继续游戏,则可点击“发牌”按钮即可重新发牌,开始下一轮的游戏;如果玩家想结束游戏,则可点击“结束”按钮即可结束游戏。2.3开发环境MicrosoftVisualC++6.03系统概要设计3.1系统功能模块划分a.建立一个随机产生扑克牌的模块。由程序随机产生4张扑克牌,每张牌对应一个整数。b.计时的模块。定义一个计时器,以便对使用时间进行计数。c.计算表达式的模块。主要是通过函数来确定运算式各符号优先级和最终计算出输入算式的结果。d.验算表达式正误的模块。在规定的时间内输入算式进行验算,根据不同的情况会出现不同的对话框。C++课程设计报告(2014)33.2系统流程图图3-1系统流程图说明:按下“发牌”按钮游戏开始,通过调用函数,桌面上随机显示4张纸牌。这4张纸牌从1-K中随机调出。与此同时,标识耗时时标的进度条开始前进。计时同步开始。设置了时间限制,如果玩家没有在规定时间内输入表达式,本轮游戏结YNNYNYYN是否设置难度?1.低级2.中级3.高级系统默认难度级别为中级初始化发牌计时开始输入算式,进行计算比较函数值与参数值得大小显示“错误!”验算函数判断计算结果是否为24?超时,输入空白显示:“错误!”输入字符错误:显示:“错误!”运算结果正确:“正确!”运算结果错误:显示:“错误!”继续否?结束开始24点游戏软件的开发4束,在函数OnTimer()的作用下,会弹出对话“内部错误”。若用户在规定时间内点击了“验算”按钮,系统进行相应运算,紧接着系统调用验算函数对编辑框中运算出的结果进行验算,根据验算情况给出相应的结果。出现的结果有以下四中情况:(1)如果用户没在输入算式中输入算式,直接按“验算”按钮,会弹出“错误!”的提示。(2)如果输入的数字与给出的不符或者符号不合法,会弹出“错误!”的提示。(3)如果输入的数字与四张牌相符、字符亦合法但是答案不正确,会弹出“错误!”。(4)如果输入算式经运算后所得答案正确,则会弹出“正确!”,点击弹出框中的“发牌”按钮,系统会自动给出本局的得分和耗时。本轮游戏结束后,用户可以选择重新开始,否则,可以点击“结束游戏”按钮退出游戏。4系统详细设计4.1设计步骤(a)在VC++6.0中,建立一个MFCAppWizard(exe)工程,在应用程序类型中选择“基本对话框”,其余的都采用默认选项,即可完成对话框的创建。(b)在对话框中添加4个图像(分别用于四张扑克牌),4个按钮(分别是发牌、输入算式、验算、结束游戏),1个编辑框(输入算式),一个进度条和一个下拉式按钮(用于选择难度级别),接着根据属性对以上所添加的控件进行属性修改,主要进行重命名,以便编辑源代码的时候区分,另外对图像的处理除了对其进行重命名外还要对其添加位图。通过插入-资源-Bitmap加载图片,图片通过拷贝和复制等操作加载完成。加载完成的图片在对应的工作区可以找到,选中对其名字进行修改。(c)接着对以上添加的控件建立类向导。主要有AddFunction、AddVariable和EditCode这三项的添加。(d)根据流程图在类的原文件中逐一添加实现各个模块其功能所需要的各种函数,并添加相应的源代码,同时在头文件中添加对各种函数及变量的声明。(e)对编译好的程序进行保存,开始进行调试,边调试边根据报错对原程序进行修改,直至程序不再报错,并且可以实现预计的各种功能。4.2界面设计界面设计主要是创建控件,在ResoureView选项卡中打开Dialog资源组,双击IDD_ZHOUTONG_DIALOG,在右边的窗口中显示出待编辑的对话框。开始摆放控件,包括编辑框和按钮的创建。按钮的创建以“1”为例进行介绍,其他按钮的创建可参照此进行操作。(a)在Controls的“编辑框”按钮上单击鼠标左键,在对话框编辑窗口上合适的位置按下鼠标左键并拖动鼠标画出一个大小合适的编辑框。在编辑框上单击鼠标右键,在弹出的快捷菜单中选择属性选项,此时弹出Edit属性对话框,在该对话C++课程设计报告(2014)5框中输入ID属性。按照上面的操作过程编辑其他按钮和编辑框等对象的属性。表4-1各按钮和编辑框等对象的属性4.3关键功能的实现a.发牌功能的实现,首先,通过BOOLCDingluDlg::OnInitDialog()中,根据纸牌对应的ID号加载纸牌,。利用函数加载了标号1~10的十张纸牌和两张背景纸牌。然后运行代码,即可在图像框中得到四张铺开的纸牌。b.计时功能的实现,在CPoint24Dlg::OnTimer中通过m_progress.StepIt()设置是否超时。如果(m_progress.GetPos()=100)代表游戏结束,用户没有时间进行思考了,本轮游戏结束,在函数OnTimer()的作用下,会弹出对话“超时!”c.计算功能的实现,对于输入结果的验算,主要是通过函数来确定运算式各符号优先级和最终计算出输入算式的结果。对于编辑框中输入的表达式进行计算,借助于Str=Left+Middle+Right;将有优先级差别同时表达式传送到SubCompute()函数中,最终计算出输入到编辑框中的表达式结果Result,并将其返回。d.验算功能的实现,在规定的时间内输入算式进行验算,根据不同的情况会出现不同的对话框。有以下四种情况:如果用户没在输入算式中输入算式,直接按“验算”按钮,如果输入的数字与给出的不符或者符号不合法,会弹出“内部错误!”的提示对话框;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,会弹出“错误!”;如果输入算式经运算后所得答案正确,则会弹出“正确!”。e.计分功能的实现,当用户在每局游戏结束后,如果没有计算出正确结果,则会在历史记录中显示1题错误;如果计算出了正确结果,则会在记录中显示1题正确并显示一个0~100之间的整数值。用户最终得分的确定是由其选择的游戏级别和游戏所花费时间长短来确定的。控件对象IDCaption显示纸牌的静态控件1IDC_STATIC1/显示纸牌的静态控件2IDC_STATIC2/显示纸牌的静态控件3IDC_STATIC3/显示纸牌的静态控件4IDC_STATIC4/耗时标识提示静态控件IDC_STATIC耗时标识:难度级别提示静态控件IDC_STATIC5难度级别:当前得分提示静态控件IDC_STATIC6当前得分:显示当前得分静态控件IDC_STATIC7/历史记录提示静态控件IDC_STATIC8历史记录发牌按钮IDC_BUTTON1发牌输入算式按钮IDC_BUTTON2输入算式验算按钮IDC_BUTTON3验算结束游戏按钮IDC_BUTTON4结束游戏进度条IDC_PROGRESS1/输入算式编辑框IDC_EDIT1/显示历史记录列表控件IDC_COMB