#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10
void menu()
{
printf("********************************\n");
printf("******** 1. play ******\n");
printf("********* 0.exit *******\n");
printf("********************************\n");
}
void initboard(char board[ROWS][COLS],int rows,int cols,char set)
{
int i,j;
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
board[i][j]=set;
}
}
void displayboard(char board[ROWS][COLS],int row,int col)
{
int i,j;
for(i=0;i<=col;i++)
{
printf("%d ",i);
}
printf("\n");
for(i=1;i<=row;i++)
{
printf("%d ",i);
for(j=1;j<=col;j++)
{
printf("%c ",board[i][j]);
}
printf("\n");
}
}
void setmine(char board[ROWS][COLS],int row,int col)
{
int count=EASY_COUNT;
while(count)
{
int x=rand()%row+1;
int y=rand()%col+1;
if(board[x][y]=='0')
{
board[x][y]='1';
count--;
}
}
}
int get_mine_count(char mine[ROWS][COLS],int x,int y)
{
return mine[x-1][y]+
mine[x-1][y-1]+
mine[x][y-1]+
mine[x-1][y+1]+
mine[x+1][y-1]+
mine[x][y+1]+
mine[x+1][y+11]+
mine[x+1][y]-8*'0';
}
void findmine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
int x,y;
int win=0;
while(win<row*col-EASY_COUNT)
{
printf("请输入排查雷的坐标:\n");
scanf("%d %d",&x,&y);
if(x>=1&&x<=row&&y>=1&&y<=col)
{
if(mine[x][y]=='1')
{
printf("很遗憾,你被炸死了\n");
displayboard(mine,ROW,COL);
break;
}
else
{
int count=get_mine_count(mine,x,y);//求旁边雷的个数
show[x][y]=count+'0';
displayboard(show,ROW,COL);
win++;
}
}
else
{
printf("坐标输入错误,请重新输入\n");
}
}
if(win==row*col-EASY_COUNT)
{
printf("恭喜你排雷成功\n");
displayboard(mine,ROW,COL);
}
}
void game()
{
char mine[ROWS][COLS]={0};//布置好雷的数组
char show[ROWS][COLS]={0};//排查出信息的数组
initboard(mine,ROWS,COLS,'0');//初始化数组
initboard(show,ROWS,COLS,'*');//初始化数组
displayboard(show,ROW,COL);//打印数组
setmine(mine,ROW,COL);//布置雷
findmine(mine,show,ROW,COL);//排雷
}
void test()
{
int input=0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:1or0\n");
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请选择1or0\n");
break;
}
}
while(input);
}
int main()
{
test();
return 0;
}