I24点游戏程序设计 I2).docVIP

  1. 1、本文档共14页,可阅读全部内容。
  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文档。上传文档
查看更多
杭州电子科技大学 2012年6月短学期 姓名: 谷蒙蒙 学号: 班级: 专业: 计算机科学与技术(2+2) 学院: 计算机学院 课题: 24点游戏实现 指导老师: 张彦斌 完成时间: 2012.06.19 一、程序功能及规则设定 本题目将设计一个24点游戏。程序主要负责实现随机发牌、设置牌面、表达式验算、计算机给出解答、结果统计等功能。系统可随机给出4个数,也可由用户自行输入四张牌的值。用户输入表达式,先判断表达式是否正确,如果正确,计算是否24,不正确的话,给出可能的正确表达式。用户可放弃输入,由系统直接给出可能的答案 24点游戏是一种常见的纸牌游戏,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式,玩法十分简单,是一个消遣的好方法。本程序对传统24点作了一定的改变,用户不必自己手动输入表达式,程序提供相应的按钮,通过点击按钮键入表达式,方便用户操作。 二、程序实现思路 通过一定的功能分析,将程序基本化为:随机发牌,设置牌面,退出游戏,表达式键入,表达式验证,系统给出答案,判断是否无解这7个功能模块。 随机发牌: 产生4个随机数rand(),将4个数保存下来,对相应的按钮及图片做出对应的处理,即显示相对应的扑克牌、修改数字按钮上显示的数字、设置按钮的可用性等。这些处理写在主窗口的私有成员函数中,名为startupCard(), 其中调用较多的API函数,如载入图片loadImage()、设置按钮内容SetDlgItemText()等。 设置牌面: 用户自己设置扑克牌牌面(此时跳出一个设置窗口),获取用户输入的数字,其余操作与随机发牌操作相同,调用startupCard()完成。 退出游戏: 弹出关闭提示窗口,询问用户事故否确认退出。点击确定,则退出;点击取消,则返回,继续游戏。 表达式键入: 设置4个数组、加、减、乘、除、左括号、右括号、清除、完成等按钮,并且一定时期某些按钮可用,某些按钮不可用。其规则如下:1)程序开始时,只有数字及左括号可用;2)当按下数字按钮时,加减乘除按钮可用,若前面输入过左括号,则右括号可用;3)当按下左括号时,只有未使用的数字可用;4)当按下加减乘除时,未使用的数字及左括号可用;5)当按下右括号时,未使用的数字、加减乘除、右括号可用;6)当按下数字或右括号按钮,且数字都已经使用,左右括号匹配,此时完成按钮可用;7)清除按钮用于清除已键入的表达式。关于按钮可用性设置利用EnableWindow()函数来实现。 表达式验证: 即计算用户输入的表达式,首先获取表达式GetDlgItemText(),根据加减乘除运算法则,使用C++ STL库所提供的栈,进行表达式计算,验证用户输入的是否等于24。 算法思路:(1) 运算符的优先级处理。为根据运算符的优先级对表达式进行运算,引入优先级最低的运算符“;”,该运算符不参加实际的运算,只出现在表达式的开始和最后,仅起到保证表达式的其他运算符运算完为止的作用。由此,规定运算符从低到高的优先级依次为:0级:‘;’,1级:‘)’,2级:‘+’和‘-’, 3级:‘*’和‘/’, 4级:‘(’。 (2) 运算过程中的运算符和运算数的操作处理。在从左到右依次读入表达式字符串中字符的过程中,若遇到连续若干个数码字符就转换为数值,并将其入运算数栈;若遇到运算符,当该运算符的优先级高于运算符栈顶的运算符时,将该运算符入运算符栈,否则弹出运算数栈顶的两个元素依次作为右边和左边的运算数,弹出运算符栈顶的元素作为运算符进行运算,将结果入栈到运算数栈。但要注意以下情况: ① 读入的运算符‘)’不入运算符栈; ② 当运算符栈顶是运算符‘(’时,读入的运算符除‘)’外均入栈; ③ 当读入的运算符是‘)’而运算符栈顶是‘(’时,运算符栈退栈; ④ 当读入的是运算数或是运算符而入栈了或是运算符‘)’而运算符栈顶是‘(’时,继续读入下一字符,否则不能读入下一字符。 (3) 比较运算符的优先级算法。根据存于一维数组中的运算符极其优先级,对运算符栈顶的运算符与读入的运算符比较其优先级,返回响应的信息。 (4) 核心算法:完成表达式的求值并输出响应的操作及运算符栈和运算数栈的变化状态。对依次从表达式字符串读入的字符,若是数码字符,则将连续的若干个数码字符转换成数值后,入栈到运算数栈;否则,若是运算符且不是‘)’:则当该运算符的优先级比运算符栈顶的运算符优先级高或运算符栈顶的运算符是‘(’时,该运算符入运算符栈,继续读入后续字符;否则,若是运

文档评论(0)

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

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

1亿VIP精品文档

相关文档