软件课程设计24点-中期报告1

软件课程设计24点-中期报告1

ID:42878217

大小:258.03 KB

页数:10页

时间:2019-09-22

软件课程设计24点-中期报告1_第1页
软件课程设计24点-中期报告1_第2页
软件课程设计24点-中期报告1_第3页
软件课程设计24点-中期报告1_第4页
软件课程设计24点-中期报告1_第5页
资源描述:

《软件课程设计24点-中期报告1》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、软件课程设计中期报告一、具体设计任务1)基本要求“计算24点”小游戏:出四张扑克牌,每张牌的点数从1〜13点(A~K),对这四个数进行加、减、乘、除运算(允许使用括号)得到计算结果为24,每张牌只能计算一次。通过软件程序来模拟这个实际日常生活中的小游戏实现过程。游戏者点击开始,计算机随机显示四张牌相当于出题,游戏者在一定时间内思考答案并输入电脑,计算机验证答案是否正确,正确和错误电脑分别给予不同的反应。若游戏者无法解答,电脑可以自己计算出答案,游戏者也可以出题给电脑解答。运用C++Builder软件开发平台,尽量使游戏

2、图形界面美观,操作简便。2)拓展功能实现网络通讯,通过网络,两个人分别出两张牌,组成一道题,双方同时开始答题,谁先算出谁得胜,电脑给予奖励。二、基本思路及应用程序功能的详细说明游戏要吸引人首先要给游戏者一个美观的界面和公平的规则,电脑要模拟游戏的全过程,一方面要考虑操作简便、规则明确,另一方面要考虑游戏者可能会找游戏的漏洞。单机版24点游戏程序具体功能如下:1.随机产生四张牌,并以图片的形式显示给游戏者,模拟出题。2.提供游戏者输入界面,游戏者通过点击图片和按钮输入想到的表达式,做到方便快捷。游戏者按键的同时在窗口显示

3、现在的算式,删除按钮允许游戏者在提交最终答案之前修改式子。1.有效判断用户是否违反游戏规则,具体有如下形式违规a)重复使用某张牌或未使用某张牌;b)运算符在最前面或最后面;c)两个运算符或两个数字相连;d)除数为零;e)括号不匹配。2.程序读取用户输入的式子,并算出字符审形式的算式的结果,判断是否为24。若结果为24,答对了显示烟花,表示庆贺;否则答错了,鼓励再接再厉,给三次机会,连错三次,游戏失败,禁止游戏者继续操作,点确认重新发牌开始。3.定时动能,在界面上显示一个300秒的定时器,当游戏者使用时间超过300,游戏

4、失败,禁止游戏者继续操作,点确认重新开始。4.当游戏者实在无法解答时可以选择让电脑给出答案,电脑调用内部程序提供一种计算24点的方法。游戏者也可以自己输入四个数,让电脑计算这四个数计算二十四点的算法。三、方案设计1.方案的框架图如下:2.具体算法分析:验证计算结果算法由于输入的算式电脑以字符串形式存储,不能直接结算结果,需要进行一定转换。先考虑没有括号的算式,判断最先出现的运算符号和其他运算符出现的位置,根据运算优先级循环计算高优先级的运算,再计算低优先级的运算,直到所有运算符用完,得出计算结果。对于有括号的算式,要先

5、把括号里而的算式按照上述规则运算得出一个数值,形成一个新的表达式,再运算得最后结果。算法具体实现参阅了冯妍、黄铝文和马煜编《C++Builder案例开发集锦》。■■11.电脑解题算法:“穷举法”设四张牌为3、b、c、d,运算符为①、②、③,表达式为a①b②c③。其中没有考虑括号的问题,事实上括号在算式屮本质上就是起改变运算优先级的作用,为了消除括号在穷举法中带来的分类上的困难,在程序中可强制规定①、②、③的优先顺序。而这3个运算符的运算顺序有3!二6种,分别是:1•①②③2.①③②3•②①③4•②③①5•③①②6.③②

6、①等价的表达式分别是:1.((a①b②)c③)2.(a①b)②(c③d)3.(a①(b②c))③d4.a①((b②c)③d)5.(a①b)②(c③d)6.a①(b②(c③d))显然,2和5是相同的,因此只考虑5种情况。这样,括号的问题就解决了。接下来,就是生成a、b、c、d的全排列,注意去掉其中的相同排列。去除的方法很多,比如字典排序等,我用的是另一种方法。用循环的嵌套生成a、b、c、d的24种全排列,记录在数组屮。把每-组数当作一个四位的14进制数,把这24个数全部转化为十进制(如(6529)14二6*143+5*1

7、42+2*14+9)。这样,如果两个排列完全相同,则得到的十进制数是相等的。这样,通过对这些十进制的比较,就可以比较这些排列的相同情况。一旦遇到相同的排列,就标记上。最后生成一组没有重复的排列。对这组排列进行以上方法的运算,就可以得到所有的结果了。注意在运算过程中除法的特殊性一一除数不能为零。因为可能会用到除法,所以要考虑精度问题,这里通过结果减去24取绝对值与一个接近0的小数比较,即可判定结果是24。考虑简便性,在程序中我只显示最先得出的一组解。还要考虑多余括号问题。由于乘除法的运算优先级默认就高于加减法,同一优先级

8、的运算符满足结合律,所以有时候括号是多余的,应该在算式输出前与默认的运算优先级进行比较,去掉多余的括号。四、进度及当前代码清单当前我的基本框架已经建立,发牌、计时、骑算结果和规则控制等功能,对C++Builder的基本原理已经掌握,由于时间仓促,电脑自行作答的功能还没有实现,规则还有很多漏洞,图形化界面还有待进一步完善,而且我还想

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。