游戏作文之24点游戏毕业设计.docx
- 文档编号:28387933
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:12
- 大小:22.66KB
游戏作文之24点游戏毕业设计.docx
《游戏作文之24点游戏毕业设计.docx》由会员分享,可在线阅读,更多相关《游戏作文之24点游戏毕业设计.docx(12页珍藏版)》请在冰豆网上搜索。
游戏作文之24点游戏毕业设计
24点游戏毕业设计
【篇一:
24点游戏程序设计】
杭州电子科技大学2012年6月短学期姓名:
学号:
班级:
专业:
学院:
课题:
指导老师:
完成时间:
一、程序功能及规则设定
本题目将设计一个24点游戏。
程序主要负责实现随机发牌、设置牌面、表达式验算、计算机给出解答、结果统计等功能。
系统可随机给出4个数,也可由用户自行输入四张牌的值。
用户输入表达式,先判断表达式是否正确,如果正确,计算是否24,不正确的话,给出可能的正确表达式。
用户可放弃输入,由系统直接给出可能的答案
24点游戏是一种常见的纸牌游戏,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式,玩法十分简单,是一个消遣的好方法。
本程序对传统24点作了一定的改变,用户不必自己手动输入表达式,程序提供相应的按钮,通过点击按钮键入表达式,方便用户操作。
二、程序实现思路
通过一定的功能分析,将程序基本化为:
随机发牌,设置牌面,退出游戏,表达式键入,表达式验证,系统给出答案,判断是否无解这7个功能模块。
2.1随机发牌:
产生4个随机数rand(),将4个数保存下来,对相应的按钮及图片做出对
应的处理,即显示相对应的扑克牌、修改数字按钮上显示的数字、设置按钮的可用性等。
这些处理写在主窗口的私有成员函数中,名为startupcard(),其中调用较多的api函数,如载入图片loadimage()、设置按钮内容setdlgitemtext()等。
2.2设置牌面:
用户自己设置扑克牌牌面(此时跳出一个设置窗口),获取用户输入的数字,
其余操作与随机发牌操作相同,调用startupcard()完成。
2.3退出游戏:
弹出关闭提示窗口,询问用户事故否确认退出。
点击确定,则退出;点击
取消,则返回,继续游戏。
2.4表达式键入:
设置4个数组、加、减、乘、除、左括号、右括号、清除、完成等按钮,
并且一定时期某些按钮可用,某些按钮不可用。
其规则如下:
1)程序开始时,只有数字及左括号可用;2)当按下数字按钮时,加减乘除按钮可用,若前面输入过左括号,则右括号可用;3)当按下左括号时,只有未使用的数字可用;4)当按下加减乘除时,未使用的数字及左括号可用;5)当按下右括号时,未使用的数字、加减乘除、右括号可用;6)当按下数字或右括号按钮,且数字都已经使用,左右括号匹配,此时完成按钮可用;7)清除按钮用于清除已键入的表达式。
关于按钮可用性设置利用enablewindow()函数来实现。
2.5表达式验证:
即计算用户输入的表达式,首先获取表达式getdlgitemtext(),根据加
减乘除运算法则,使用c++stl库所提供的栈,进行表达式计算,验证用户输入的是否等于24。
算法思路:
(1)运算符的优先级处理。
为根据运算符的优先级对表达式进行运算,引入优先级最低的运算符“;”,该运算符不参加实际的运算,只出现在表达式的开始和最后,仅起到保证表达式的其他运算符运算完为止的作用。
由此,规定运算符从低到高的优先级依次为:
0级:
‘;’,1级:
‘)’,2级:
‘+’和‘-’,3级:
‘*’和‘/’,4级:
‘(’。
(2)运算过程中的运算符和运算数的操作处理。
在从左到右依次读入表达式字符串中字符的过程中,若遇到连续若干个数码字符就转换为数值,并将其入运算数栈;若遇到运算符,当该运算符的优先级高于运算符栈顶的运算符时,将该运算符入运算符栈,否则弹出运算数栈顶的两个元素依次作为右边和左边的运算数,弹出运算符栈顶的元素作为运算符进行运算,将结果入栈到运算数栈。
但要注意以下情况:
①读入的运算符‘)’不入运算符栈;
②当运算符栈顶是运算符‘(’时,读入的运算符除‘)’外均入栈;
③当读入的运算符是‘)’而运算符栈顶是‘(’时,运算符栈退栈;
④当读入的是运算数或是运算符而入栈了或是运算符‘)’而运算符栈顶是‘(’时,继续读入下一字符,否则不能读入下一字符。
(3)比较运算符的优先级算法。
根据存于一维数组中的运算符极其优先级,对运算符栈顶的运算符与读入的运算符比较其优先级,返回响应的信息。
(4)核心算法:
完成表达式的求值并输出响应的操作及运算符栈和运算数栈的变化状态。
对依次从表达式字符串读入的字符,若是数码字符,则将连续的若干个数码字符转换成数值后,入栈到运算数栈;否则,若是运算符且不是‘)’:
则当该运算符的优先级比运算符栈顶的运算符优先级高或运算符栈顶的运算符是‘(’时,该运算符入运算符栈,继续读入后续字符;否则,若是运算符且是‘)’,而运算符栈顶是‘(’时,运算符栈退栈,继续读入后续字符;否则,弹出运算数栈顶的两个元素依次作为右边和左边的运算数,弹出运算符栈顶的元素作为运算符进行运算,将结果入栈到运算数栈,此时,如果当前运算符的优先级高于运算符栈顶元素的优先级,则当前运算符入运算符栈,继续读入后续字符,如果表达式已读完而且运算符栈已空,则继续读入后续字符。
以上各种情况处理完后,均输出响应的操作及运算符栈和运算数栈的变化状态。
最后返回表达式的运算结果——运算数栈中唯一的一个数据。
2.6系统给出答案:
使用递归的方式,达到穷举的效果求24点的解
算法思路:
首先,从宏观上说,这种问题都是遍历穷举。
再看看运算符,其中+,*都是没有顺序的。
即(a*b=b*a),但是-、/是有顺序的。
那么假设都有顺序的。
那么就可以统一处理了(最多效率低点,先解决问题。
再考虑优化)。
那么遍历所有a,b,c,d以
及三次运算。
即a(4,4)*4*4*4就是该算法的复杂度。
微观上,由于中间有除法,那么不能用int类型来储存数据了。
需要用double或者float.每次运算都只有两个数运算。
2.7
判断是否无解:
同样系统计算答案,判断有没有解
三、程序流程图
四、程序调试
4.1图片显示:
图片导入难以实现,不断修改、查阅信息、修改完成。
4.2表达式求值算法:
计算结构有误。
原因为运算符优先级设置不正确,如加号和减号
的优先级相同,乘号和除号的优先级相同。
4.3按钮可用性设定:
不可连续输入括号,如:
((6+6)+6)+6,是正确的解,但是无
法输入,修改了按钮可用性设定的规则:
当按下左括号时,左括号仍可用,并且,四个数字都使用了以后,系统自动完成括号匹配的工作。
4.4有待改进的地方:
程序经常出现闪屏现象,可以增加定时、难度级别设置的功能。
五、部分截图
5.1主界面:
5.2设置牌面:
5.3退出游戏:
【篇二:
24点游戏课程设计报告】
目录
123
基本功能描述.............................................................................................................................2设计思路....................................................................................................................................2软件设计....................................................................................................................................43.1设计步骤...........................................................................................................................43.2界面设计...........................................................................................................................53.3关键功能实现....................................................................................................................6
3.3.1发牌功能的实现......................................................................................................63.3.2计时功能的实现......................................................................................................73.3.3计算功能的实现......................................................................................................73.3.4验算功能的实现......................................................................................................9
4567
结论与心得体会.........................................................................................................................9参考文献...................................................................................................................................11思考题......................................................................................................................................11附录..........................................................................................................................................127.1调试报告..........................................................................................................................12
7.1.1变量未定义造成的错误...........................................................................................127.1.2管件类未添加...........................................................................................................137.1.3进度条错误...............................................................................................................137.2测试结果..........................................................................................................................14
7.2.1在规定时间内完成点击“验算”按钮操作.................................................................147.2.2在规定时间内未完成点击按钮操作............................................................................167.3关键源代码.......................................................................................................................17
24点游戏课程设计报告
1
基本功能描述
24点游戏是一种使用扑克牌来进行的益智的游戏,游戏内容为:
从一副扑克牌四个花色的1到k等52张牌中,任意抽取4张牌,运用加、减、乘、除和括号等运算符把牌面上的数进行运算得到24。
游戏有不同的版本,其实是对j、q、和k的处理有所不同。
有的版本版本是把j、q、和k去除,只用1到10来进行游戏;有的版本是把j、q、和k当成10;还有的版本是用j表示11,q表示12,k表示13。
此次课程设计采用的是把j表示11,q表示12,k表示13,使游戏的四张牌在1~k这13张牌中随机取牌。
具体功能如下:
1)对游戏设计三个难易级别,分别为一级、二级和三级。
每次开始游戏前可以根据玩家的需要进行难度设置,如若不设置,系统默认难度级别为一级,设置完难度级别之后就可以开始游戏了,单击“开始”按钮,桌面上出现四张翻开的扑克牌,与此同时,游戏开始计时,进度条开始前进。
2)在规定的时间内,玩家可以在“输入结果”的编辑框中输入自己想好的算式,然后点击“验算”按钮:
如果输入的算式经运算后所的答案正确,则会弹出“congregations,答对了!
”的窗口;如果输入的数字与给出的牌的数字不符或者符号不合法,则会弹出“sorry,请输入正确的算式!
”的窗口;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,则会弹出“youransweriswrong!
”的窗口;如果未输入任何的数字和算符,则会弹出“输入不能为空!
”的窗口。
3)如果在规定的时间内,玩家没有点击验算按钮,则会弹出“timeover!
”的窗口。
4)在结束本轮游戏后,如果玩家想继续游戏,则可点击“开始”按钮即可重新发牌,开始下一轮的游戏;如果玩家想结束游戏,则可点击“结束”按钮即可结束游戏
2设计思路
24点游戏的具体流程图如下图“图1”所示。
下面是对流程图的详细说明。
在游戏开始前有有难度级别设置选项,玩家可以根据自己的实际水平来进行设置。
难度级别有三个级别,分别为一级、二级和三级。
此三个级别是通过给玩家的思考的时间的长短来区别的,级别越高,可用时间越少。
这个难易程度设置不是必选项。
如果玩家不设置难易程度,那么系统就默认为难度级别一。
图124点游戏程序流程图
按下“发牌”按钮游戏开始,通过调用srand()和rand()函数,桌面上会随机显示出4张
纸牌,这四张牌从1~k这10张牌中随机的调出。
与此同时,标识耗时时标的进度条开始前进。
计时同步开始(spendtime++)。
通过每隔不同的时间来发送信息来控制三个级别的时间不同。
设置了时间限制,如果(m_progress.getpos()=100)代表游戏结束,用户没有时间进行思考了,本轮游戏结束,在函数ontimer()的作用下,会弹出对话“超时!
”。
3软件设计
3.1设计步骤
具体的设计步骤如下:
1)在vc++6.0中,用自己的名字gaoqingzhi建立一个mfcappwizard(exe)工程,在应用程序类型中选择“基本对话框”,其余的都采用默认选项,即可完成对话框的创建。
2)在对话框中添加4个图像(分别用于四张扑克牌),9个按钮(分别是(、+、—、*、/、)、开始、运算、结束),1个编辑框(输入算式),一个进度条和三个单选按钮(用于选择难度级别)接着根据属性对以上所添加的控件进行属性修改,主要进行重命名,以便编辑源代码的时候区分,另外对图像的处理除了对其进行重命名外还要对其添加位图。
之后通过打开c:
\windows\system32打开cards.dll加载bitmap图片,并选中对其进行重命名。
3)接着对以上添加的控件建立类向导。
主要有addfunction、addvariable和editcode这三项的添加。
4)根据流程图在类的原文件中逐一添加实现各个模块其功能所需要的各种函数,并添加相应的源代码,同时在头文件中添加对各种函数及变量的声明。
5)对编译好的程序进行保存,开始进行调试,边调试边根据报错对原程序进行修改,
直到程序不再进行报错为止。
图224点游戏运行图
3.2界面设计
24点游戏所用控件说明图如下:
表1控件类型、id及相关说明
【篇三:
24点游戏设计】
24点游戏程序设计报告
1基本功能描述
1.124点游戏介绍
24点游戏是一款与计算有关的益智游戏,其游戏规则如下:
从一副扑克牌中抽去大小王剩下52张,任意抽取4张牌,把牌面上的数运用加、减、乘、除和括号等进行运算得出24便可获胜。
值得注意的是每张牌都必须使用一次,但不能重复使用,其中,j代表数值11,q代表数值12,k代表数值13。
1.2游戏功能介绍
⑴“游戏难度可选”功能设计。
将游戏难度分别为初级、中等和高级。
每次发牌前可进行难度设置,若不设置,系统默认为难度级别数为初级。
难度级别设置完后,点击“开始游戏”按钮,便可以开始游戏,并开始计时。
⑵“游戏规则可查看”功能设计。
此功能是在dialog类创建id为idd_dialog_new对话框,并在对话中添加静态文本,其中文本内容即为1.1中陈述的游戏规则。
⑶“游戏时间限制即进度条”功能设计。
在规定的时间内,用户可以在输入算式编辑框中输入想好的算式,并按下“结果”按钮。
如果不输入任何数字和算符,会弹出“输入有误!
”;如果输入的数字与给出的不符或者符号不合法,会弹出“输入有误!
”;如果输入的数字与四张牌相符、字符亦合法但是答案不正确,就会出现“回答不正确!
”;如果输入算式经运算后所得答案正确,则会弹出“你做对了!
”。
如果在规定的时间内,没有点击验算按钮,则会弹出一个对话框,上面显示“timeover!
”。
⑷“菜单栏”功能设计。
在设计界面时,添加了菜单栏功能,菜单栏的主要选项有:
游戏选项,游戏难度,帮助。
以上就是此次24点游戏主要的基本功能,其具体游戏功能,以及功能实现将在下文详述。
2设计思路
2.1游戏过程简述
在游戏开始前有难度设置选项,用户可根据自己的实际水平进行设置。
难度级别有三个级别,分别为初级、中等和高级。
三个级别是通过时间来区别的,级别越高,可用时间越少。
三个级别的对应时间分别是60秒、40秒和20秒。
该设置不是必选项。
如果用户不设置,系统默认为初级。
下面详细介绍各个功能模块的实现过程。
⑴运行程序lipinglin_24后,当单击按钮“游戏规则”时,编译器会调用函数onoperstring()来弹出对话框idd_dialog_new;从而实现“游戏规则可查看”功能。
⑵运行程序lipinglin_24后,当点击单选按钮“初级”“中等”“困难”(选择游戏难度)时,编译器会设置游戏难度。
intiradio=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;}//高级,允许时间为20秒——高级
⑶运行程序lipinglin_24后,当单击按钮“开始游戏”时,编译器会调用函数onstart()来实现编辑框清零,耗时初始化为零,读取游戏难度即允许时间,随机产生4张扑克牌并加载到扑克牌的位置。
voidclipinglin_24dlg:
:
onstart(){示出
srand((int)time(0));//以(int)time(0)做为srand()函数的种子seed
for(inti=0;i4;i++)//应用for语句来为四张牌赋值s=1;
m_edit1=_t();//对编辑框清空
updatedata(false);//用负给控件变量的值来刷新控件,让控件把操作后的变量显
number[i]=rand()%13;//产生一个0-12的随机数
((cstatic*)getdlgitem(idc_picture0))-setbitmap(hbitmap(bitmap[number[0]]));((cstatic*)getdlgitem(idc_picture1))-setbitmap(hbitmap(bitmap[number[1]]));((cstatic*)getdlgitem(idc_picture2))-setbitmap(hbitmap(bitmap[number[2]]));
((cstatic*)getdlgitem(idc_picture3))-setbitmap(hbitmap(bitmap[number[3]]));
…}
⑷单击按钮“开始游戏”后,当编辑框输入完毕单击按钮“结果验证”时,编译器会函数onyansuan()来停止计时,刷新数据,验证数据是否满足24。
系统通过对subcompute()和totalcompute()两函数的调用进行相应运算,紧接着系统调用onyansuan()函数对编辑框中运算出的结果进行验算,根据验算情况给出相应的结果。
出现的结果有以下四中情况:
如果用户没在输入算式中输入算式,直接按“结果验证”按钮,会弹出“表达式不能为空白!
”的提示对话框。
如果输入的数字与给出的不符或者符号不合法,会弹出“输入有误!
”的提示对话框。
如果输入的数字与四张牌相符、字符亦合法但是答案不正确,会弹出“回答不正确!
”。
如果输入算式经运算后所得答案正确,则会弹出“你做对了!
”
voidclipinglin_24dlg:
:
onyansuan(){?
}
⑸运行程序lipinglin_24后,当单击按钮“游戏结束”时,编译器会调用函数onok()来实现退出。
voidclipinglin_24dlg:
:
onok(){}
本轮游戏结束后,用户可以选择重新开始,否则,可以点击“结束游戏”按钮退出游戏。
//todo:
addyourcontrolnotificationhandlercodehereonok();
2.2游戏设计流程图
综合2.1游戏过程简述,分析游戏功
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 作文 24 毕业设计