#include<stdio.h>
//使用二维数组实现 扫雷
int main()
{
char ui[8][8]={
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+'
};
int map[8][8]={
0,0,0,0,0,0,0,0,
0,0,1,0,0,1,0,0,
0,0,0,0,1,0,0,0,
0,0,0,0,0,1,0,0,
0,0,1,0,0,0,0,0,
0,0,1,0,0,0,0,0,
0,1,0,1,1,0,0,0,
1,0,0,0,0,0,0,0
};
int p[8][2]={{-1,-1} ,{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int i=0,j=0;
int h=0,l=0;
int h1=0,l1=0;
int n=0;//用来保存 雷的数量 计数
int win=0;
while(1)
{
printf(" 扫雷游戏\n");
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
printf("%c ",ui[i][j]);
}
printf("\n");
}
printf("请输入你要打开的位置 行 列:");
scanf("%d%d",&h,&l);
if(map[h-1][l-1]==1)
{
printf("踩到雷 游戏结束\n");
break;
}
h=h-1;
l=l-1;
//没有踩到雷的情况 判断周围有几个雷 并把数字显示在 界面上
//-1 -1 -1, 0 -1,+1 0 ,-1 0 ,+1 +1 ,-1 +1,0 +1 ,+1
//n=map[h-1][l-1]+map[h-1][l]+map[h-1][l+1]+map[h][l-1]+map[h][l+1]+map[h+1][l-1]+map[h+1][l+1]+map[h+1][l];
i=0;
while(i<8)
{
n=0;
h1=h;
l1=l;
h1= h1+p[i][0];
l1=l1+p[i][1];
if(h1>=0&&h1<8&&l1>=0&&l1<8)
{
if(map[h1][l1]==1)
{
n++;
}
}
i++;
}
//把得到的数字显示到 界面上 ui[h][l];
//把int数字转换成 字符
switch(n)
{
case 0:
ui[h][l]='0';
break;
case 1:
ui[h][l]='1';
break;
case 2:
ui[h][l]='2';
break;
case 3:
ui[h][l]='3';
break;
case 4:
ui[h][l]='4';
break;
case 5:
ui[h][l]='5';
break;
case 6:
ui[h][l]='6';
break;
case 7:
ui[h][l]='7';
break;
case 8:
ui[h][l]='8';
break;
}
win++;
if(win==54)
{
printf("获胜 游戏结束\n");
break;
}
}
return 0;
}