布雷程序的实现

布雷程序的实现

ID:32382360

大小:70.72 KB

页数:15页

时间:2019-02-04

布雷程序的实现_第1页
布雷程序的实现_第2页
布雷程序的实现_第3页
布雷程序的实现_第4页
布雷程序的实现_第5页
资源描述:

《布雷程序的实现》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、布雷程序的实现一:游戏说明。(1)允许用户输入地图的大小,现在用条件所给的9*9。(2)地图中的地雷个数允许用户输入,在地图上的分布是随机的。(3)初始时显示地图,确保每个位置都没有标记。(4)开始玩游戏时,用户每次操作时从键盘上输入3个数据:x,y和op。(x,y)表示操作的位置,字符op表示要执行的操作。点开用“.”表示;标记地雷用“!”表示;取消标记地雷用“c”表示;退出游戏用“q”表示。(5)游戏开始时,踩到地雷则结束游戏,当标记出来的每个地雷位置与实际的位置一样,并且标记出来的地雷个数跟实际地雷个数一样则游戏成功完成。(6

2、)没执行一次操作后,显示操作后的地图。二:地图的表示和输出。地图我们可以用一组二维数组来表示,如下。……..…………(1)如果点开的位置的8个相邻位置上都没有地雷,则自动点开一片连续的没有地雷的区域。当有个位置有地雷时,则其周边一定有相应的数字表示周围有多少地雷。即构不成零位置,不能再点开。但该数字被点开。(2)在程序中,我们用二维数组map来表示这个地图,为了与生活中的习惯一致,我们不用二维数组map中的第0行和第0列元素。而且在计算每个位置周围8个相邻位置上的地雷个数时,不需要再判断该位置是否为第0行或第0列。所以从第1行,第1

3、列开始计算的话,地图中的每个位置的8个相邻位置都是在二维数组范围内,可以统一处理。而不用专门去处理左边界和上边界的位置。同样的道理,在处理右边界和下边界也是一样,我们只需再增加第N+1行和第N+1列就可以了。因此如果最大的地图为9*9,则二维数组map需定义成11*11。(3)Map数组中各元素map[x][y]的取值及其含义为:-1:(x,y)位置为地雷;0~8:(x,y)位置上没有地雷,该数字为8个相邻位置上地雷的个数。(4)那么我们如何表示一个位置的8个相邻位置呢?如图:在(x,y)位置上的左上角位置,其行坐标为x-1,列坐标

4、为y-1,行,列坐标的增量均为-1.右边位置相对于(x,y)位置,行,列坐标的增量分别为0和1。因此在程序中可以定义一个8*2的二维数组dir,表示8个相邻位置的行,列坐标相对于(x,y)位置行,列坐标的增量。注意dir数组所表示的8个位置的顺序是按顺时针从左上角位置开始的。有了这个二维数组,统计(x,y)位置的8个相邻位置上地雷的个数就变得方便多了,我们可以用下面的代码:intk,mines=0;for(k=0;k<8;k++){If(map[x+dir[k][0]][y+dir[k][1]]==-1)mines++;}(5)那么

5、怎样才能把地图输出来呢?在字符界面我们可以用“

6、”和“_”来构造框架,形象的把地图表示出来。对于N*N的地图,共输出N+1行。如下图:具体代码如下:voidout_map(){inti,j;line[0]='40';for(i=1;i<=4*N-1;i++)line[i]='_';line[i]='';puts(line);for(i=1;i<=N;i++){line[0]='

7、';for(j=1;j<=N;j++){line[4*j-3]='_';if(map[i][j]==-1)line[4*j-2]='*';elseli

8、ne[4*j-2]=48+map[i][j];line[4*j-1]='_';line[4*j]='

9、';}line[4*N+1]='';puts(line);}}注意:第1行除了第一个字符是空格字符外,还有4×N-1个下划线“_”,最后结束标志是\0;因为输出的是对应的数字字符,所以需要在数字字符“0”的ASCII编码值48的基础上加上map[i][j]的值,最后显示出来的才是希望的结果。三:地雷的随机生成   如果地雷是手动设置,那这个游戏就没有可重复性,就没有玩的可能了,所以地雷的位置必须是随机的,这儿引人一个随机函数ra

10、nd(),它包含在头文件中。该函数用于长生0到RAND_MAX之间的伪随机数。为了保证每次运行程序时产生的随机数不同,所以在rand()函数前,需要调用srand()函数设置随机数种子。该函数的原型为:Voidsrand(unsignedintseed);所以在调用该函数形式为:Srand((unsigned)time(0));即用当前系统时间作为随机种子,其中time函数是头文件中定义的函数,用于获取当前系统时间。解决了随机数的生成的问题,现在来考虑随机地图的生成。要随机地生成地图,需要随机地生

11、成minenum个地雷的位置(num1,num2),这个位置的行坐标num1和列坐标num2都是1~N的随机数。而且minenum个位置不能重复,而为了随机产生一对1~N之间的随机数,需做些改动:num1=1+int(1.0*N*ra

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

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

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