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

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
软件课程设计中期报告 具体设计任务 1)基本要求 “计算24 点”小游戏:出四张扑克牌,每张牌的点数从1~13 点(A~K),对这四个数进行加、减、乘、除运算(允许使用括号)得到计算结果为24,每张牌只能计算一次。通过软件程序来模拟这个实际日常生活中的小游戏实现过程。 游戏者点击开始,计算机随机显示四张牌相当于出题,游戏者在一定时间内思考答案并输入电脑,计算机验证答案是否正确,正确和错误电脑分别给予不同的反应。若游戏者无法解答,电脑可以自己计算出答案,游戏者也可以出题给电脑解答。 运用C++Builder 软件开发平台,尽量使游戏图形界面美观,操作简便。 2)拓展功能 实现网络通讯,通过网络,两个人分别出两张牌,组成一道题,双方同时开始答题,谁先算出谁得胜,电脑给予奖励。 基本思路及应用程序功能的详细说明 游戏要吸引人首先要给游戏者一个美观的界面和公平的规则,电脑要模拟游戏的全过程,一方面要考虑操作简便、规则明确,另一方面要考虑游戏者可能会找游戏的漏洞。单机版24点游戏程序具体功能如下: 随机产生四张牌,并以图片的形式显示给游戏者,模拟出题。 提供游戏者输入界面,游戏者通过点击图片和按钮输入想到的表达式,做到方便快捷。游戏者按键的同时在窗口显示现在的算式,删除按钮允许游戏者在提交最终答案之前修改式子。 有效判断用户是否违反游戏规则,具体有如下形式违规 重复使用某张牌或未使用某张牌; 运算符在最前面或最后面; 两个运算符或两个数字相连; 除数为零; 括号不匹配。 程序读取用户输入的式子,并算出字符串形式的算式的结果,判断是否为24。若结果为24,答对了显示烟花,表示庆贺;否则答错了,鼓励再接再厉,给三次机会,连错三次,游戏失败,禁止游戏者继续操作,点确认重新发牌开始。 定时动能,在界面上显示一个300秒的定时器,当游戏者使用时间超过300,游戏失败,禁止游戏者继续操作,点确认重新开始。 当游戏者实在无法解答时可以选择让电脑给出答案,电脑调用内部程序提供一种计算24点的方法。游戏者也可以自己输入四个数,让电脑计算这四个数计算二十四点的算法。 方案设计 方案的框架图如下: 具体算法分析: 验证计算结果算法 由于输入的算式电脑以字符串形式存储,不能直接结算结果,需要进行一定转换。先考虑没有括号的算式,判断最先出现的运算符号和其他运算符出现的位置,根据运算优先级循环计算高优先级的运算,再计算低优先级的运算,直到所有运算符用完,得出计算结果。对于有括号的算式,要先把括号里面的算式按照上述规则运算得出一个数值,形成一个新的表达式,再运算得最后结果。算法具体实现参阅了冯妍、黄铝文和马煜编《C++builder案例开发集锦》。 电脑解题算法:“穷举法” 设四张牌为a、b、c、d,运算符为①、②、③,表达式为a ① b ② c ③ 。其中没有考虑括号的问题,事实上括号在算式中本质上就是起改变运算优先级的作用,为了消除括号在穷举法中带来的分类上的困难,在程序中可强制规定①、②、③的优先顺序。而这3个运算符的运算顺序有3!=6种,分别是: 1.①②③ 2.①③② 3.②①③ 4.②③① 5.③①② 6.③②① 等价的表达式分别是: ((a①b②)c③) 2.(a①b)②(c③d) 3.(a①(b②c))③d 4.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*142+2*14+9)。这样,如果两个排列完全相同,则得到的十进制数是相等的。这样,通过对这些十进制的比较,就可以比较这些排列的相同情况。一旦遇到相同的排列,就标记上。最后生成一组没有重复的排列。 对这组排列进行以上方法的运算,就可以得到所有的结果了。注意在运算过程中除法的特殊性——除数不能为零。因为可能会用到除法,所以要考虑精度问题,这里通过结果减去24取绝对值与一个接近0的小数比较,即可判定结果是24。考虑简便性,在程序中我只显示最先得出的一组解。 还要考虑多余括号问题。由于乘除法的运算优先级默认就高于加减法,同一优先级的运算符满足结合律,所以有时候括号是多余的,应该在算式输出前与默认的运算优先级进行比较,去掉多余的括号。 进度及当前代码清单 当前我的基本框架已经建立,发牌、计时、验算结果和规则控制等功能,对C++ Builder的基本原理已经掌握,由于时间仓促,电脑自行作答的

文档评论(0)

JPEYPGTeaa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档