简易小游戏扫雷——C语言编程实现

<span style="font-size:24px;">#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>

#define ROWS 10
#define COLS 10
#define MINE 30

void menu()
{
	printf("*********************************
");
	printf("*********** 1.play **************
");
	printf("*********** 0.exit **************
");
	printf("*********************************
");
}


void Init(char mine[ROWS+2][COLS+2],char show[ROWS+2][COLS+2],int x,int y)
{
	x = ROWS+2;
	y = COLS+2;
	memset(mine,+,x*y*sizeof(char));
	memset(show,*,x*y*sizeof(char));
}


void Desplay(char arr[ROWS+2][COLS+2],int x,int y)
{
	int i = 0;
	int j = 0;
	printf("    1 2 3 4 5 6 7 8 9 10 11 12
");
	for(i = 0;i < ROWS+2;i++)
	{
		printf("%3d ",i+1);
		for(j = 0;j < COLS+2;j++)
		{
			printf("%c ",arr[i][j]);
		}
		printf("
");
	}
}


void Mine_deg(char arr[ROWS+2][COLS+2],int x,int y)
{
	int mine_deg = 0;
	for(mine_deg = 0;mine_deg < MINE;mine_deg++)
	{
	A:	x = rand()%(ROWS)+1;
		y = rand()%(COLS)+1;
		if(arr[x][y] == +)
		{
			arr[x][y] = @;
		}
		else
		{
			goto A;
		}
	}
}


int Player(char mine[ROWS+2][COLS+2],char show[ROWS+2][COLS+2],int x,int y)
{
	int count = 0;
	while(1)
	{
		if(x > 0 && x <= ROWS+2 && y > 0 && y <= COLS+2)
		{
			if(mine[x-1][y-1] == @)
			{
				show[x-1][y-1] = @;
				return 1;
			}
			else
			{
				if(mine[x-2][y-2] == @)
					count++;
				if(mine[x-2][y-1] == @)
					count++;
				if(mine[x-2][y] == @)
					count++;
				if(mine[x-1][y-2] == @)
					count++;
				if(mine[x-1][y] == @)
					count++;
				if(mine[x][y] == @)
					count++;
				if(mine[x][y-1] == @)
					count++;
				if(mine[x][y-2] == @)
					count++;
				show[x-1][y-1] = count+0;
				return -1;
			}
		}
		else
		{
			printf("Error input!
");
			return 0;
		}
	}
}


void Game()
{
	char mine[ROWS+2][COLS+2] = {0};
	char show[ROWS+2][COLS+2] = {0};
	int x = 0;
	int y = 0;
	int row = 0;
	int col = 0;
	int play_deg = (ROWS+2)*(COLS+2)-MINE;
	int count = 0;
	srand((unsigned int)time(NULL));
	Init(mine,show,x,y);
	Mine_deg(mine,x,y);
	//Desplay(mine,x,y);
	Desplay(show,x,y);
	while(play_deg)
	{
input:	printf("Please input (x y):>>");
		scanf("%d %d",&x,&y);
		if(count == 0 )
		{
			if((Player(mine,show,x,y) == 1))
		{
		RAND:row = rand()%(ROWS)+1;
			col = rand()%(COLS)+1;
			if(mine[row][col] != @)
			{
				mine[row][col] = mine[x-1][y-1];
				mine[x-1][y-1] = +;
				Player(mine,show,x,y);
				//Desplay(mine,x,y);
			}
			else
			{
				goto RAND;
			}
		}
		}
		else
		{
			if((Player(mine,show,x,y) == 1))
		{
			printf("What a pity!It is a mine.
");	
			Desplay(mine,x,y);
			break;
		}
		else if(Player(mine,show,x,y) == 0)
		{
			goto input;
			
		}
		else if(play_deg == 1)
		{
			printf("Congratulations,you are winner!
");
			Desplay(mine,x,y);
			break;
		}
		}
		
		Desplay(show,x,y);
		play_deg--;
		count++;
	}
}
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("Please choose (0 or 1):
");
		scanf("%d",&input);
		switch(input)
		{
		case 1:
			Game();
			break;
		case 0:
			break;
		default:
			printf("error input!
");
			break;
		}
	}while(input);
	return 0;
}</span>

如有错误,欢迎指出!

经验分享 程序员 微信小程序 职场和发展