扫雷

#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;
}


上一篇:opencv 缩放、平移、旋转、仿射变换和透视变换-08


下一篇:c语言实现扫雷(递归实现自动展开)