c语言课程设计——扫雷 .

上传人:Si****n 文档编号:144498455 上传时间:2020-09-09 格式:DOC 页数:26 大小:120.50KB
返回 下载 相关 举报
c语言课程设计——扫雷 ._第1页
第1页 / 共26页
c语言课程设计——扫雷 ._第2页
第2页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c语言课程设计——扫雷 .》由会员分享,可在线阅读,更多相关《c语言课程设计——扫雷 .(26页珍藏版)》请在金锄头文库上搜索。

1、安徽工业大学C语言程序设计报告题目:扫雷游戏班级:网101组长:成员:,日期:2011.9-2011.11 目录一基本情况 P.3二游戏规则 p.4三设计思路 p.5四函数说明1. 游戏控制部分 p.72. 图形处理部分 p.103. 鼠标处理部分 p.11五调试与测试 p.12六附录 p.15一基本情况开发平台: win-tc(windows-xp)开发进度: 9.109.20 小组进行图形处理及鼠标相关资料收集,掌握相关图形处理及鼠标相关技术 9.2110.10 小组成员讨论程序实现算法及任务分配 10.10 11.3 代码实现,调试任务划分: 陈超 负责程序总体设计,游戏控制部分实现,后

2、期调试 张艳 负责程序图形处理及鼠标处理部分实现,总结文档编写 二游戏规则 玩家进入游戏界面后,只能通过鼠标进行操作,一旦有键盘输入,则退出游戏程序。游戏框图左上方显示的数字为此局游戏中包含的地雷数目。中间黄色笑脸为重新开始按钮,一旦鼠标左键单击此位置,则退出正在进行的扫雷游戏,游戏重新开始。游戏中包含10*10个空格,可以通过鼠标左键单击或者右键单击来进行扫雷游戏。鼠标单击表示打开此空格位置,若此位置为地雷,则输出所有的地雷分布,玩家输,游戏结束,等待玩家的选择退出或者继续开始下一次游戏。若此位置已经被左单击过,则再次进行鼠标左键单击时,游戏不做任何响应。单击过后若此位置无雷则显示空格或者数

3、字。空格表示此处无雷,数字表示此处无雷且周围八个格子中的地雷数目为空格中的数字数目,若某个空格周围亦没有地雷分布则继续以每个方格为中心继续判断无雷就展开,显示数字或者空格,直至遇到地雷或者是边界。鼠标右键单击表示游戏玩家标识此位置为地雷,若游戏玩家在某位置右键单击过之后,再次右键单击此位置,则表示取消此处标注的地雷标志,若在此处鼠标左键单击,不做任何响应。游戏玩家依次对每一个空格,当游戏玩家把所有的非雷区域全部处理完毕,则游戏结束,玩家胜利,输出“YOU WIN”,等待玩家进一步选择。三设计思路 扫雷程序主要用了一个10行10列的二维数组,数组的每个元素都是结构体类型,结构体中的num代表格内

4、当前处于什么状态,值1表示有雷,值0表示已经变成空白格或者显示过数字,roundnum统计每个格子周围有多少地雷,flag是鼠标右键的标志,如果鼠标左键单击此方格,则对应的二维数组结构体里的flag为1表示格子显示红旗,这样鼠标左键点击在这个格子上无效。 首先通过生成随机数的方式布置地雷,如果在该点生成的随机数为1,则该点存在地雷,将NUM(结构体)标为1,随机数为其它值NUM(结构体)标为0,每生成一个地雷,则全局变量minenum自增一。在程序一开始统计好每个格子周围有多少地雷,将统计的结果存放在对应的结构体变量roundnum,然后当鼠标左键点击在没有地雷的格子上时进行两种判断,如果格子

5、周围没有地雷,就在原来的格子位置显示空白格,然后用递归的方法同样判断周围的8个格子;如果格子周围有地雷,就在该空格显示具体的雷数。 在递归判断8个格子时,如果格子上有雷或者格子已经显示过雷数或者空白,以及格子上有红旗标志的话,就不再对格子进行任何判断。否则,当此处无雷,即展开此处,并且以此位置为中心继续进行递归,直至遇到边界或者地雷,跳出递归。当游戏玩家每处理一个非雷区域的格子,则对应的统计非雷方格数目的变量自减一,当该变量的值自减为0时,则表示游戏结束,该玩家胜利。具体函数流程图如下:四函数说明游戏控制部分Amain()主函数 定义使用到的常数,全局变量,函数原型说明。然后初始化图形系统,调

6、用游戏控制函数,按任意键结束游戏,关闭图形系统,游戏结束。Bvoid SpreadMine(int t)布雷函数通过函数srand(int)time(0);生成随机数,随后在二重循环里,生成随机数,若生成的随机数为1,则将num(结构体)标为1,表示改点有雷,并在该函数内统计该次游戏中地雷总数,通过outtextxy(210,70,randminenum);在(210,70)点输出雷的总数,用一百减去总雷数表示该次无雷空格的总数(在输赢判断中,若所有无雷区域都已经得到了处理,即玩家胜利)。C. void GameOver()游戏结束 如果单击了地雷,则地雷爆炸,游戏结束,显示地雷分布,两重循环

7、判断每个格子的状态,如果状态值为1,则为地雷,设置红色背景,实体填充模式,画圆表示地雷。D. void GameWin()玩家胜利 如果所有的非雷区域的格子都处理过,就表示游戏玩家胜利,输出you win信息。E.void GameBegain()游戏开始 这个函数完成初始界面的设计以及调用函数void SpreadMine(int t)生成地雷。初始界面的主要工作是确定图的位置和方格显示的位置。外边框的左上角为(190,60),右上角坐标为(390,290),显示笑脸和地雷数的区域为(190,60)(390,90),每个方格的宽度和高度均为16.Fvoid ShowWhite(int i,i

8、nt j)显示空白区域 当单击某个格子,该格子周围的地雷数为0时,应该继续判断它周围8个方向的格子的周围的雷数是否为0,将这些格子都用空白显示。具体实现如下: a如果当前格子有红旗或者已经显示过数字或空白格子,则返回。 b空白格子数减一(统计处理过多少格子)。 c如果周围的地雷数为0,且它不是地雷,则将它显示为空白,同时将它的状态值num置0,表示处理过;如果周围地雷数不为0,显示周围地雷数,同时将它的状态值num置0,表示处理过,返回。Gvoid Control() 调用函数GameBegain()显示游戏初始化界面,调用GamePlay()函数具体实现游戏操作,该函数的返回值有可能有两种:

9、一是正在玩中,提前结束游戏;一是玩完,要么失败,要么胜利。如果是前者,则重新开始游戏。如果是后者,则判断是否单击了笑脸,是则重新开始,否则结束程序。Hvoid GamePlay()游戏控制游戏过程主要是对鼠标按键的处理,集体算法实现如下:a.如果单击了鼠标左键则判断如果单击了笑脸,则游戏重新开始 如果单击了方格,判断该格子有红旗,则按键无效。如果单击的格子没有显示过数字或空白,则判断:如果是地雷,游戏结束,显示地雷分布;如果不是地雷,则统计周围(8个方向)的地雷数,如果周围地雷数为0,条用递归函数ShowWhite()处理周围格子的情况,显示周围的格子数或者空白。如果单击的格子周围地雷数不为0

10、,则显示周围地雷数,将处理过的格子做标记。如果处理完所有的格子吗,则游戏胜利,显示胜利信息。b.如果单击鼠标右键,该格子没有红旗则显示红旗。如果有红旗,再击右键,则红旗消失。 c重复步骤b直到按键结束游戏Iint MineStatistics(int i,int j) 统计每个格子周围的地雷数,分别考虑各自处于四个角,四条边以及中间某个位置的情况。周围是上,下,左,右,左上,左下,右上,右下。在统计四个角格子周围的地雷数目时,统计其周围的三个方格内是否有地雷,如统计左上角位置周围的地雷数目时,其周围的三个方格的二维坐标依次为(i,j+1),(i+1,j),(i+1,j+1)(设该位置坐标为(i

11、,j)。而统计四条边上某一空格周围的地雷数目时,则统计其周围的五个方格是否有地雷,如统计左边的边上某位置的地雷数目时,其周围的五个方格的二维坐标依次为(i-1,j),(i-1,j+1),(i,j+1),(i+1,j),(i+1,j+1) (设该位置坐标为(i,j)。而统计普通位置时要统计其周围的九个方格内是否有地雷,则该点周围的九个坐标依次为(i-1,j-1),(i-1,j),(i-1,j+1),(i,j-1),(i,j+1),(i+1,j-1),(i+1,j-1),(i+1,j),(i+1,j+1).统计完成后,将统计结果存入对应的结构体的roundnum变量中去。2.图形处理部分A voi

12、d Init() 对计算机进行图形模式初始化,加载图形驱动包Bvoid DrawSmile() 画一个笑脸Cvoid DrawRedFlag(int i,int j) 画一个红旗Dvoid DrawEmpty(int i,int j,int mode,int color) 画两种空格E void Close() 关闭图形模式3.鼠标处理部分Avoid MouseOn() 鼠标显示Bvoid MouseOff() 鼠标隐藏Cvoid MouseSetXY(int x,int y) 设置鼠标当前位置Dint LeftPress() 鼠标左键按下Eint RightPress() 鼠标右键按下Fvo

13、id MouseGetXY() 得到鼠标当前位置五调试与测试1.书写标识符时,忽略了大小写字母的区别编译程序把i和I认为是两个不同的变量名,而显示出错信息。C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。2.在程序嵌套比较多时,容易出错在程序嵌套比较多时,很容易多卸“”,或者少写“”,造成编译错误,为减少类似错误出现,在写程序时应该采取缩进式写法,让处于同一层次的函数处于同一条线上,这样就能够减少上述错误的出线3. win7 不支持C语言图形全屏模式,图形处理须加载图形驱动在进行图形部分处理时win7不支持c语言图形的全屏模式,在XP系统下,也没法正确运行。原因是C语言在进行图形处理必须正确设置图形驱动器和模式,通过函数detectgraphics能自动进行计算机硬件检测,后再进行初始华即可。4.布雷随机数生成的错误以及优化在进行布雷函数编写时,首先用随机数生成

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 天线/微波/雷达

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号