简版扫雷代码_第1页
简版扫雷代码_第2页
简版扫雷代码_第3页
简版扫雷代码_第4页
简版扫雷代码_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#include#include#define MAX 100/最大范围为100x100struct placeint show;/显示状态(-1为不显示,0为显示,1为显示status)char status;/身份(数字为周围8位地雷数,*为地雷,#号为边界标志);/*显示函数*/void print_all(place mine_areaMAX+2)for(int i=0;i=MAX+1;i+)for(int j=0;j=MAX+1;j+)if(mine_areaij.status=8)printf(%d,mine_areaij.status+48);else if(mi

2、ne_areaij.status=#)printf(#);else if(mine_areaij.status=*)printf(*);printf(:%d ,mine_areaij.show);printf(n);void print_all(place mine_areaMAX+2,int length,int width)for(int i=0;ilength;i+)for(int j=0;jwidth;j+)if(mine_areaij.status=8)printf(%c,mine_areaij.status+48);else if(mine_areaij.status=#)prin

3、tf(#);else if(mine_areaij.status=*)printf(*);printf(:%d ,mine_areaij.show);printf(n);void print_out(place mine_areaMAX+2,int style)/显示雷区/初始条件:已有雷区,显示类型,0为游戏显示(部分显示),1为全部显示int i,j=1;printf(n);for(i=1,printf(t);mine_areaij.status!=#;i+)printf(%2d ,i);for(i=1,printf(nt);mine_areaij.status!=#;i+)printf(

4、 | );for(i=1,printf(nt);mine_areaij.status!=#;i+)printf( V );printf(n);for(i=1,j=1;it,i);for(;j=MAX+1&mine_areaij.status!=#;j+)if(mine_areaij.show!=style)if(mine_areaij.status=8)printf( %c ,mine_areaij.status+48);else if(mine_areaij.status=#)printf( # );else if(mine_areaij.status=*)printf( * );elsep

5、rintf( );printf(n);j=1;/*初始化*/void init(place mine_areaMAX+2MAX+2)/初始化函数/初始条件:已有雷区/操作结果:生成空雷区,将首行首列置为边界(status为#,show为-1),其余位置为空(status为0,show为0)int i,j;for(i=0;i=MAX+1;i+)mine_areai0.show=-1;mine_areai0.status=#;mine_area0i.show=-1;mine_area0i.status=#;for(i=1;i=MAX+1;i+)for(j=1;j=MAX+1;j+)mine_are

6、aij.show=0;mine_areaij.status=0;/*设置雷区*/void set_area(place mine_areaMAX+2,int length,int width)/设置区域大小/初始条件:已有空雷区,长度length,宽度width/操作结果:按长度宽度设定雷区int i;for(i=1;i=width+1;i+)mine_areailength+1.show=-1;mine_areailength+1.status=#;for(i=1;i=length+1;i+)mine_areawidth+1i.show=-1;mine_areawidth+1i.status

7、=#;void set_mine(place mine_areaMAX+2,int number,int length,int width)/设置地雷/初始条件:已有雷区,地雷数目,长度,宽度/操作结果:在已有雷区放置指定定数目地雷srand(unsigned)time(NULL);int i;for(i=1;i=number;i+)int l,w;l=rand()%length+1;w=rand()%width+1;if(mine_areawl.status=*)i-;continue;mine_areawl.status=*;void get_number(place mine_areaM

8、AX+2,int i,int j)/无地雷位置获得其周围地雷数/初始条件:已安放地雷的雷区,无地雷位置坐标i,j/操作结果:将周围地雷数赋给该位置的statusint k,l;int around_mine_num=0;for(k=i-1;k=i+1;k+)for(l=j-1;l=j+1;l+)if(mine_areakl.status=*)around_mine_num+;mine_areaij.status=around_mine_num;void set_number(place mine_areaMAX+2,int length,int width)int i,j;for(i=1;i=

9、width;i+)for(j=1;j=length;j+)if(mine_areaij.status=*)continue;get_number(mine_area,i,j);void get_setnumber(int *p_length,int *p_width,int *p_mine_num)/获取设置信息/初始条件:储存长、宽、地雷数的地址/操作结果:将长、宽、地雷数赋值为用户输入的值printf(请输入雷区大小:);printf(n长(10-100):);scanf(%d,p_length);printf(宽(10-100):);scanf(%d,p_width);printf(请输

10、入地雷个数(%d-%d):,10,(*p_length)*(*p_width)-1);scanf(%d,p_mine_num);void set(place mine_areaMAX+2MAX+2)int choose;int length,width,mine_num;printf(请选择游戏难度:1.简单;2.一般;3.困难;4.自定义n);scanf(%d,&choose);switch(choose)case 1:length=10;width=10;mine_num=10;break;case 2:length=20;width=20;mine_num=50;break;case 3

11、:length=30;width=30;mine_num=120;break;case 4:get_setnumber(&length,&width,&mine_num);break;set_area(mine_area,length,width);set_mine(mine_area,mine_num,length,width);set_number(mine_area,length,width);/*操作*/void get_open_seat(int *x,int *y)/获取打开位置/初始条件:用于储存位置信息的x,y/操作结果:为x,y赋值printf(n);printf(请输入要打

12、开位置地址(例如3,2):);scanf(%d,x);getchar();scanf(%d,y);int open(place mine_areaMAX+2,int x,int y)/打开x,y位置/初始条件:已有雷区,要打开位置的位置信息x,y/操作结果:将要打开位置的显示状态置为1;/若打开位置为地雷,将所有地雷位置显示置为1,并返回0(游戏结束);/若打开位置为数字, 返回1;/若打开位置为0,将该位置周围全部打开(周围有0则递归),并返回1;int i,j;mine_areaxy.show=1;switch(mine_areaxy.status)case *:for(i=1,j=1;i

13、=MAX+1&mine_areaij.status!=#;i+)for(;j=MAX+1&mine_areaij.status!=#;j+)if(mine_areaij.status=*)mine_areaij.show=1;j=1;return 0;case 0:for(i=x-1;i=x+1;i+)for(j=y-1;j=y+1;j+)if(mine_areaij.show=0)open(mine_area,i,j);/依次将周围没打开的位置打开return 1;default:return 1;void end(place mine_areaMAX+2)/游戏结束system(cls);printf(踩到地雷了!);print_out(mine_area,0);printf(n游戏结束!);void operate(place mine_areaMAX+2)doint x,y;system(cls);printf(游戏开始!);print_out(mine_area,0);get_open_seat(&x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论