完整word版-24点游戏设计.doc

上传人:hs****ma 文档编号:543480445 上传时间:2023-07-24 格式:DOC 页数:29 大小:324.51KB
返回 下载 相关 举报
完整word版-24点游戏设计.doc_第1页
第1页 / 共29页
完整word版-24点游戏设计.doc_第2页
第2页 / 共29页
完整word版-24点游戏设计.doc_第3页
第3页 / 共29页
完整word版-24点游戏设计.doc_第4页
第4页 / 共29页
完整word版-24点游戏设计.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《完整word版-24点游戏设计.doc》由会员分享,可在线阅读,更多相关《完整word版-24点游戏设计.doc(29页珍藏版)》请在金锄头文库上搜索。

1、武汉理工大学面向对象程序设计课程设计说明书24点游戏程序设计报告1 基本功能描述1.1 24点游戏介绍24点游戏是一款与计算有关的益智游戏,其游戏规则如下:从一副扑克牌中抽去大小王剩下52张,任意抽取4张牌,把牌面上的数运用加、减、乘、除和括号等进行运算得出24便可获胜。值得注意的是每张牌都必须使用一次,但不能重复使用,其中,J代表数值11,Q代表数值12,K代表数值13。1.2 游戏功能介绍“游戏难度可选”功能设计。将游戏难度分别为初级、中等和高级。每次发牌前可进行难度设置,若不设置,系统默认为难度级别数为初级。难度级别设置完后,点击“开始游戏”按钮,便可以开始游戏,并开始计时。 “游戏规则

2、可查看”功能设计。此功能是在Dialog类创建ID为IDD_DIALOG_NEW对话框,并在对话中添加静态文本,其中文本内容即为1.1中陈述的游戏规则。“游戏时间限制即进度条”功能设计。在规定的时间内,用户可以在输入算式编辑框中输入想好的算式,并按下“结果”按钮。如果不输入任何数字和算符,会弹出“输入有误!”;如果输入的数字与给出的不符或者符号不合法,会弹出“输入有误!”;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,就会出现“ 回答不正确! ”;如果输入算式经运算后所得答案正确,则会弹出“你做对了!”。如果在规定的时间内,没有点击验算按钮,则会弹出一个对话框,上面显示“Time Ov

3、er!”。“菜单栏”功能设计。在设计界面时,添加了菜单栏功能,菜单栏的主要选项有:游戏选项,游戏难度,帮助。以上就是此次24点游戏主要的基本功能,其具体游戏功能,以及功能实现将在下文详述。2 设计思路2.1 游戏过程简述在游戏开始前有难度设置选项,用户可根据自己的实际水平进行设置。难度级别有三个级别,分别为初级、中等和高级。三个级别是通过时间来区别的,级别越高,可用时间越少。三个级别的对应时间分别是60秒、40秒和20秒。该设置不是必选项。如果用户不设置,系统默认为初级。下面详细介绍各个功能模块的实现过程。运行程序LiPingLin_24后,当单击按钮“游戏规则”时,编译器会调用函数OnOpe

4、rString()来弹出对话框IDD_DIALOG_NEW;从而实现“游戏规则可查看”功能。 运行程序LiPingLin_24后,当点击单选按钮“初级”“中等”“困难”(选择游戏难度)时,编译器会设置游戏难度。int iRADIO=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);if(iRADIO=IDC_RADIO1) m_Hardlevel=60;/初级,允许时间为60秒初级 if(iRADIO=IDC_RADIO2)m_Hardlevel=40;/中等,允许时间为40秒中等if(iRADIO=IDC_RADIO3) m_Hardlevel=20;

5、/高级,允许时间为20秒高级运行程序LiPingLin_24后,当单击按钮“开始游戏”时,编译器会调用函数OnStart()来实现编辑框清零,耗时初始化为零,读取游戏难度即允许时间,随机产生4张扑克牌并加载到扑克牌的位置。void CLiPingLin_24Dlg:OnStart() S=1;m_Edit1= _T();/对编辑框清空UpdateData(FALSE);/用负给控件变量的值来刷新控件,让控件把操作后的变量显示出 srand(int)time(0);/以(int)time(0)做为srand()函数的种子seedfor(int i=0;iSetBitmap(HBITMAP(Bit

6、mapNumber0); (CStatic*)GetDlgItem(IDC_Picture1)-SetBitmap(HBITMAP(BitmapNumber1); (CStatic*)GetDlgItem(IDC_Picture2)-SetBitmap(HBITMAP(BitmapNumber2);(CStatic*)GetDlgItem(IDC_Picture3)-SetBitmap(HBITMAP(BitmapNumber3); 单击按钮“开始游戏”后,当编辑框输入完毕单击按钮“结果验证”时,编译器会函数OnYanSuan()来停止计时,刷新数据,验证数据是否满足24。系统通过对SubCo

7、mpute()和TotalCompute()两函数的调用进行相应运算,紧接着系统调用OnYanSuan()函数对编辑框中运算出的结果进行验算,根据验算情况给出相应的结果。出现的结果有以下四中情况:如果用户没在输入算式中输入算式,直接按“结果验证”按钮,会弹出“表达式不能为空白!”的提示对话框。如果输入的数字与给出的不符或者符号不合法,会弹出“输入有误!”的提示对话框。如果输入的数字与四张牌相符、字符亦合法但是答案不正确,会弹出“回答不正确 !”。如果输入算式经运算后所得答案正确,则会弹出“你做对了!”void CLiPingLin_24Dlg:OnYanSuan() 运行程序LiPingLin

8、_24后,当单击按钮“游戏结束”时,编译器会调用函数OnOk()来实现退出。void CLiPingLin_24Dlg:OnOk() / TODO: Add your control notification handler code hereOnOK();本轮游戏结束后,用户可以选择重新开始,否则,可以点击“结束游戏”按钮退出游戏。2.2 游戏设计流程图综合2.1游戏过程简述,分析游戏功能,其24点游戏程序设计流程图见图1。YNNYNYYN是否设置难度?初级:m_Hardlevel=60中等:m_Hardlevel=40高级:m_Hardlevel=20系统默认难度级别为初级 m_Hardl

9、evel=60初始化:OnInitDialog()发牌:srand();rand()计时开始:OnTimer()输入算式,进行计算SubCompute();TotalCompute()m_Progress1-GetPos()=m_Hardlevel显示“Time Over!”AfxMessageBox()OnYanSuan()函数判断计算结果是否为24?算式为空白:显示:“表达式不能为空白!”输入字符错误:显示:“输入有误!”运算结果正确:“你做对了!”运算结果错误:显示:“回答不正确!”继续否?结束开始图1 24点游戏程序设计流程图3 软件设计3.1 设计步骤下面详细介绍24点游戏的具体设计

10、步骤。创建MFC AppWizard(exe)工程,键入对应的工程名(dinglu),在应用程序类型中选择基本对话框,其余的都采用默认选项,完成对话框的创建。通过插入资源Bitmap加载图片,图片通过拷贝和复制等操作加载完成。加载完成的图片在对应的工作区可以找到,选中对其名字进行修改。在对话框中添加4个图像、9个按钮、3个编辑框、1个进度条和3个单选按钮。然后,根据属性对以上所添加的控件进行属性修改,主要是对其进行重命名。图像内的属性修改除改名外,还要添加位图。下一步是对以上控件建立类向导,主要包括Add Function、Add Variable和Edit Code这三项的添加。在类的原文件

11、中添加实现功能所需要的各种函数,并添加相应的代码,同时在头文件中添加对各种函数及变量的声明。对完成的程序进行保存,然后开始调试,根据错误进行修改,直至程序不在报错,并且可以实现预计的各种功能。3.2 关键功能的实现3.2.1 随机发牌功能的实现首先,通过BOOL CDingluDlg:OnInitDialog()中,根据纸牌对应的ID号加载纸牌,例如:Bitmap7.LoadBitmap(IDB_BITMAP7)这条语句加载标有7的纸牌。利用该函数加载了标号110的十张纸牌和两张背景纸牌。然后运行中的以下一段代码,即可在图像框中得到四张铺开的纸牌。srand(seed)用来设置rand()产生

12、随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand ()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是sr

13、and()。3.2.2 计时功能的实现首先,在void CDingluDlg:OnStart()中,通过m_Progress-SetStep(1)和m_Progress-SetPos(0)设置进度条的步长为1,进度条的初始位置居左。然后调用void CDingluDlg:OnTimer(UINT nIDEvent)来完成计时功能。利用函数if(m_Progress1-GetPos()=m_Hardlevel)来判断即使结束了没有,如果括号中的条件满足,则计时结束,跳出“Time Over!”的提示框。如果括号中的条件不满足,则执行以下代码:CProgressCtrl* m_Progress1=

14、(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);m_Progress1-SetRange(0,m_Hardlevel);m_Progress1-SetPos(m_Progress1-GetPos()+1); /进度条前进一步上述代码表示,如果时间没到,时间每流逝1秒,进度条就前进一步。当游戏时间即将结束的时候,进度条亦前进到最后一步。3.2.3 计算功能的实现对于输入结果的验算,主要是通过int LastPos(CString Str),int FirstPos(CString Str),char FirstF(CString Str),int SubCom

15、pute(CString Str),int TotalCompute(CString Str)等函数来来确定运算式各符号优先级和最终计算出输入算式的结果。Pluspos表示+号出现的位置,如果没有+号出现,对pluspos负一个不可能的值;如果+号存在,将pluspos与pos比较大小。如果pluspos小于pos,将pluspos的值负给pos。pluspos再与tempos比较,如果在减号之前出现,显示的结果是+号。代码1:int CLinPingLin_24Dlg:TotalCompute(CString Str)int First=Str.ReverseFind()+1;while(First

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

当前位置:首页 > 商业/管理/HR > 商业计划书

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