




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c语言程序设计报告主题:扫雷游戏班级:网络101组长:成员:日期: 2011.9-2011.11目录基本案例P.3双游戏规则p.4三设计构想p.5四函数的说明1 .游戏控制部p.72 .图形处理部分p.103 .鼠标处理部p.115调试和测试p.126附录p.15基本情况开发平台: win-tc(windows-xp )开发进展:9.109.20组进行图形处理和鼠标相关资料收集,掌握相关图形处理和鼠标相关技术9.2110.10组成员考虑程序实现算法和任务分配10.10到11.3代码的实现、调试任务分类:陈超负责程序整体设计,游戏控制部分实现,负责后期调试张艳负责程序图形处理和鼠标处理的部分实现,总结了文档编写第二游戏规则玩家一进入游戏界面就只能用鼠标操作,有键盘输入就结束游戏程序。 游戏块左上角显示的数字是该游戏中包含的地雷的数量。 中间的黄色笑容是重新开始按钮,在这个位置点击左键,结束进行中的排雷游戏,重新开始游戏。 游戏包含10*10的空间,您可以用滑鼠左键或滑鼠右键进行排雷游戏。 鼠标打开该空间的位置,如果该位置是地雷,则输出所有地雷分布,玩家输出,游戏结束,等待玩家选择结束,或者重新开始下一个游戏。 如果此位置已经左键单击,则再次左键单击鼠标时游戏将不响应。 单击后,如果此位置没有闪电,将显示空格或数字。 空间表示这里没有雷,数字表示这里没有雷,周围8个格子的地雷数量是空间中的数字,空间周围没有地雷分布,则继续以各格子为中心判断没有雷并展开,直到遇到地雷和边界为止显示数字和空间。 用鼠标右键点击,游戏玩家就会看到这个位置是地雷,用右键点击游戏玩家所在的位置后,再次用右键点击这个位置,这里标记的地雷标记就会被取消,在这里用左键点击的话什么都没有游戏玩家按照每个空间的顺序,在游戏玩家处理完所有非雷区域后,游戏结束,玩家胜利输出“YOU WIN”,等待玩家进一步选择。3设计理念排雷程序主要使用10行10列的二维阵列,阵列的各要素为结构类型,结构中的num表示格内的当前状态,值1表示有雷,值0表示成为空格或显示有数字,roundnum计算各格子周围有多少地雷, flag是鼠标右键的标记。用鼠标左键点击该格子时,对应的二维排列结构中的flag表示1或格子显示红旗,用鼠标左键点击在该格子上无效。首先,通过生成随机数来配置地雷,如果在该点生成的随机数为1,则在该点存在地雷,将NUM (结构)设为1,将随机数设为其他NUM (结构)设为0,每生成1个地雷时,全局变量minenum递增1。程序首先统计各格子周围有多少地雷,将统计结果存储在对应的结构变量roundnum中,然后用鼠标左键点击无地雷的格子上,进行两种判断,如果格子周围没有地雷,则在原来的格子位置显示空格子,用递归的方法同步周围的8个格子递归判定8个格子时,如果格子上显示雷或格子上显示雷的数量或空白,格子上显示红旗标记,则不进行格子的判定。 否则,如果这里没有雷电的话,就展开这里,以这个位置为中心继续回归,直到遇到边界和地雷为止,都会跳出回归。每当玩家处理非雷区域的格子时,相应的统计非雷方眼数的变量从1中减去,该变量的值从0中减去,表示游戏结束,该玩家获胜。具体函数的流程图如下:四函数的说明1游戏控制部A.main ()主函数定义要使用的常量、全局变量和函数的原型说明。 然后,初始化图形系统,调用游戏控制函数,按任意键结束游戏,关闭图形系统并结束游戏。B.void SpreadMine(int t )布雷函数函数srand(int)time(0) ) 生成随机数,在双循环中生成随机数,如果生成的随机数为1,则将num (结构)设为1,表示变点存在雷击,在该函数内累计该游戏中的地雷总数,计算outtextxy (210,70,randminenum ); 在(210,70 )点输出的雷电总数,其下一个无雷电空间的总数从百中减去总雷电数来表示(如果输掉的判断,所有无雷电区域都已经处理完毕,玩家就胜利了)。C. void GameOver ()游戏结束点击地雷,地雷爆炸,游戏结束,显示地雷分布,各格子的状态在双循环判定,状态值为1时,为地雷设定红色背景,设定实体填充模式,用圆表示地雷。D. void GameWin ()玩家的胜利如果所有的非雷区域的格子都被处理了,游戏者就会胜利并输出you win消息。E.void GameBegain ()游戏开始该函数调用初始接口的设计以及函数void SpreadMine(int t )来生成地雷。 初始接口的主要工作是确定图形位置和网格状显示的位置。 外框的左上角为(190,60 ),右上角的坐标为(390,290 ),表示笑脸和地雷数量的区域为(190,60 )(390,90 ),各方格的宽度和高度为16。F.void ShowWhite(int i,int j )显示空白区域点击某个格子,当该格子周围的地雷数为0时,继续判断其周围8个方向的格子周围的雷数是否为0,将这些格子显示为空白。 具体实施包括:a如果当前格子上有红旗,或者数字或空格已经出现,则返回。b减少一个空格数(经统计处理的格数)。c周围的地雷数为0,如果不是地雷,则将其显示为空白,并且,如果表示将该状态值num设为0进行了处理的周围的地雷数不是0,则显示周围的地雷数,并且,将该状态值num设为0,表示进行了处理并返回。g.void控制()调用函数GameBegain ()显示游戏初始化画面,调用GamePlay ()函数具体实现游戏操作。 这个函数的返回值有两种可能:在游戏中,提前结束游戏。一种是游戏结束,还是失败,还是胜利。 如果是前者,重新开始游戏。 如果是后者,则判断是否点击了笑容,如果是,则重新开始,否则结束程序。H.void GamePlay ()游戏控制游戏过程主要是鼠标按键处理,集体算法如下实现a .确定单击鼠标左键点击笑容,游戏重新开始如果单击“检查”确定该检查包含红旗,则按钮将被禁用。 如果点击的格子上没有显示数字或空白,则结束游戏,如果不是判断为显示地雷分布的地雷,则统计周围(8个方向)的地雷数,如果周围的地雷数为0,则通过递归函数ShowWhite ()处理周围的格子,显示周围的格子数或空白。 如果点击的格子周围的地雷数不为0,则显示周围的地雷数,标记处理后的格子。 处理完所有格子后,游戏获胜并显示获胜信息。b .点击右键,那个格子上没有红旗的话红旗就会显示出来。 有红旗的话,右击红旗就会消失。重复步骤b,直到c按钮结束游戏I.int MineStatistics(int i,int j )统计各格子周围的地雷数,考虑分别在4个角、4条边和中间位置。 周围是上、下、左、右、左上、左下、右上、右下。 统计四角格子周围的地雷数量时,统计其周围三个格子内是否有地雷。 例如,在合计左上角位置周围的地雷数时,其周围的三个格子的二维坐标为(I,j 1)、(i 1,j )、(i 1,j 1) (将该位置坐标设为(I,j ) )。 另一方面,在统计四边空间周围的地雷数的情况下,统计其周围的五边格子中是否存在地雷,在统计左侧边的位置的地雷数的情况下,其周围的五边格子的二维坐标为(i-1,j )、(i-1,j 1)、(I,j 1)、(i 1,j )、(i 1,j 1) (将该位置坐标设为(I,j ) 。 另外,在合计正常位置的情况下,为了合计该点周围的9个单元内是否存在地雷,该点周围的9个坐标以(i-1,j-1 )、(i-1,j-1 )、(I,j 1,j-1 )、(i 1,j-1 )、(i 1,j-1 )、(i 1,j )、(i 1,j )、(i 1,j-1 )的顺序排列2 .图形处理部A. void Init ()以图形模式初始化计算机并加载图形驱动程序软件包B.void DrawSmile ()画笑容C.void DrawRedFlag(int i,int j )画红旗D.void DrawEmpty(int i,int j,int mode,int color )绘制两个空间E. void Close ()关闭图形模式3 .鼠标处理部A.void MouseOn ()鼠标显示B.void MouseOff ()鼠标隐藏c .设置C.void MouseSetXY(int x,int y )鼠标的当前位置d .按D.int LeftPress ()鼠标左键e .在E.int RightPress ()上按一下滑鼠右键F.void MouseGetXY ()获取鼠标的当前位置5调试和测试1 .写识别符时忽略了大小写的区别编译器将I和I视为两个不同的变量名,显示错误消息。 c语言认为大小写是两个不同的字母。 习惯上,记号固定名用大写字母表示,变量名用小写字母表示以提高可读性。2 .程序嵌套多时,容易发生错误如果嵌套的程序很多,则可能会删除“”或者写“”,导致编译错误。因此,如果在编写程序时使用缩进标记,并且同一级别的函数位于同一条线上,则可以减少上述错误的线条3. win7不支持c语言图形全屏模式,图形处理需要加载图形驱动程序进行图形部分处理时,win7不支持c语言图形的全画面模式,在XP系统上也不能正常动作。 这是因为c语言在进行图形处理时必须正确设定图形驱动程序和模式,通过函数detectgraphics自动地进行计算机硬件的检查,之后进行初期升华就可以了。4 .生成布莱尔随机数的错误和优化在创建布莱尔函数时,我可以重复一次,使用随机数生成函数将随机数生成范围设置在(0-1)之间,以便地雷主要分布在顶部并且底部几乎没有地雷,使得地雷区域平均化,使得每行最多只分布两个地雷,并且生成两个随机数。 雷区虽然相对平均,但是为了避免地雷分布在那行上,比较麻烦并且了解这个布莱尔规则的人,游戏更简单,最后加大了随机数的生成范围,使随机数在(0,t )之间,t可以调节雷区的均匀性,同时调节t的值另一方面,当生成随机数时,种子的生成位置影响随机数的生成。 这是因为当在计算机上生成随机数时,在计算机上不再生成随机数,所生成的随机数将相同。5调用递归函数和递归函数描述时出错在调用递归函数之前应该调用MineStatistics函数,统计该网格周围是否存在雷,仅当该网格没有雷且周围没有雷时(有时该网格没有雷),可以调用递归函数,该递归函数的出口撞击已处理的网格如果格子已经被标记或者格子中存在闪电,并且不注意当边界值被递归地展开到八个周围方向时设置,则处理数据将超出数组定义的边界,从而导致不必要的错误6. MineStatistics函数制作时的条件设定很困难在函数MineStatistics的制作时进行不同状况的统计时,条件设定容易出错,与鞍点搜索时的错误类似,某一种类的点周围的雷数的统计发生错误,最后在纸上画模型,制作某一种类的点周围的雷数的统计时,根据纸的模型法则制作7 .胜负的判断是否通过检索非雷格子完成了处理游戏的胜负判断有两种思路:雷格是否全部被处理(即红旗),以及非雷格是否全部被处理。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 麻醉科进修生小讲课操作规范与临床思维培养
- 施工费用预算管理制度
- 垃圾发电厂除臭管理制度
- 公司投资款支付管理制度
- 互联网公司政务管理制度
- 山东病毒性肺炎管理制度
- 无人车实训室管理制度
- 事业编管理分级管理制度
- 新生儿温箱使用规范
- 互联网公司客服管理制度
- 2024年高考政治选择性必修1《当代国际政治经济》(思维导图+核心考点+易混易错)
- 《积极心理学(第3版)》 课件 第3章 积极情绪的价值
- 语言学导论智慧树知到答案2024年广东外语外贸大学
- DL∕T 1909-2018 -48V电力通信直流电源系统技术规范
- 博士高校面试答辩模板
- JT-T-1211.1-2018公路工程水泥混凝土用快速修补材料第1部分:水泥基修补材料
- 上海市嘉定区2023-2024学年三年级下学期期末数学试卷
- DL-T5181-2017水电水利工程锚喷支护施工规范
- 在线网课知道知慧《战舰与海战》单元测试答案
- 走近核科学技术智慧树知到期末考试答案2024年
- 钢结构36米桁架吊装安全监理实施细则1
评论
0/150
提交评论