c语言实现扫雷程序模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本人写的扫雷程序,由于时间紧迫,写的比较粗糙,但经过c编译可运行,下面是源代码:

/*name:kaituozhe001saolei1125.cpp*/

#include

#include

#include

#define N 9

int mine[N][N],game[N][N];

int row=0,col=0,a,b;

void main()

{ void putmine(int n1);

int expand(int row,int col);

int Remain();

void myprintf1();

void myprintf2();

int aroundmine(int row,int col);

/* 提示说明 */

printf("

-------------------------------------------------------------------\n* 您接下来要玩一个%d*%d的扫雷游戏。

*\n* 请按提示操作(否则会出意外的),

*\n* 在这个游戏中“*”代表地雷,“#”代表未打开的盒子。 *\n* 当您将全部非雷盒子打开后,您就赢了! *\n* 谢谢参与游

戏!》》开拓者制作bo《《 *\n

-------------------------------------------------------------------",N,N);

int n1,i=0,j=0;

/*初始化雷区*/

for(i=0;i

{ for(j=0;j

mine[i][j]=46, game[i][j]='#';

}

printf("\n\n此游戏为%d*%d雷阵,请输入需布雷的数量(%d 以内)>> ",N,N,N*N);

scanf("%d",&n1);

printf("\n下面是所布雷阵>> \n");

putmine(n1);

myprintf1();

for(i=0;i

for(j=0;j

{ if(mine[i][j]!='*')

mine[i][j]=aroundmine(i,j)+48;

}

printf("\n计数雷阵>> \n");

myprintf1();

while(Remain()!=n1)

{ printf("\n请输入扫雷坐标,以“,”分开>> "); scanf("%d,%d",&row,&col);

for(i=0;i

for(j=0;j

{ if(i==row-1&&j==col-1)

a=i,b=j;

}

if(mine[a][b]==42) goto end;

else expand(a,b);

myprintf2();

}

printf("\n小样,你赢了!有本事再来一次! \n");

end: if(Remain()!=n1) printf("\n杯具,你踩到雷了,所以你lose了!\n");

}

/*布雷*/

void putmine(int n1)

{ int minenumber(); int i=0,j=0;

srand(time(NULL));

for(i=0; minenumber()

row=rand()%N , col=rand()%N;

mine[row][col]=42; }

}

/*打开相关不是地雷的数组元素*/

int expand(int row,int col)

{ int aroundmine(int row,int col);

int inminearea(int row,int col);

int i=0,j=0;

if( mine[row][col]=='*') return 0;

if( aroundmine(row,col)!=0 )

{ game[row][col]=aroundmine(row,col)+48;return 0;

}

game[row][col]='0';

for(i=row-1;i<=row+1;i++)

for(j=col-1;j<=col+1;j++)

{

if( !inminearea(i,j) ) continue;

if(game[i][j]!='#') continue;

game[i][j]=aroundmine(i,j)+48;

if (aroundmine(i,j)==0) expand(i,j);

}

}

/*获得周围地雷个数*/

int aroundmine(int row,int col)

{ int inminearea(int row,int col);

int around=0;

int i=0,j=0;

for(i=row-1;i<=row+1;i++)

for(j=col-1;j<=col+1;j++)

{ if(!inminearea(i,j)) continue;

if(mine[i][j]==42) around++; } return around;

}

/*是否在雷区*/

int inminearea(int row,int col)

{ if(row>=0&&row=0&&col

return 0;

}

/* 计雷区的地雷个数*/

int minenumber()

{ int minenum=0;

int i=0,j=0;

for(i=0;i

for(j=0;j

{ if(mine[i][j]==42) minenum++; }

return minenum;

相关文档
最新文档