用C语言编写扫雷

版权声明: https://blog.csdn.net/spaceman_c/article/details/79870037
#define   row  10
#define   col  10
#define   M 20
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int menu()
{
	printf("--------1、玩游戏--------\n");
	printf("--------2、exit--------- \n");
	printf("请选择>");
	int i = 0;
	scanf_s("%d", &i);
	return i;
}
void init_board(char arr[row][col], char mind[row][col], int rows, int cols)//初始化数组
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows+1 ; i++)
	{
		for (j = 0; j < cols+1; j++)
		{
			arr[i][j] = '*';
			mind[i][j] = '0';

		}
	}
}
void display_board(char arr[row][col], int rows, int cols)
{
	int i = 0;
	int j = 0;
	printf("     ");
	for (i = 1; i <cols+1; i++)

	{
		printf("%d ", i);
	}
	printf("\n");
	printf("   ----------------------\n");
	for (i = 1; i <row +1; i++)
	{
		printf("%2d | ", i);
		for (j = 1; j <col+1; j++)
		{
			printf("%c ", arr[i][j]);
		}
		printf("\n");
	}
}
void set_mind(char mine[row][col], int rows, int cols)//设置雷的个数
{
	int x = 0;
	int y = 0;
	int i = 0;
	int ret = M;
	while (ret)
	{
		x = rand() % 10;
		y = rand() % 10;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			ret--;
		}
	}
}
int get_mine(char mine[row][col], int x, int y)//计算雷的个数
{
	int count = 0;
	if (mine[x - 1][y - 1] == '1')
	{
		count++;

	}

	if (mine[x - 1][y] == '1')

	{
		count++;

	}

	if (mine[x - 1][y + 1] == '1')
	{

		count++;
	}

	if (mine[x][y + 1] == '1')
	{

		count++;
	}

	if (mine[x + 1][y + 1] == '1')
	{
		count++;

	}

	if (mine[x + 1][y] == '1')
	{
		count++;

	}

	if (mine[x + 1][y - 1] == '1')

	{
		count++;

	}

	if (mine[x][y - 1] == '1')

	{
		count++;

	}
	return count;

}

void play_game(char arr[row][col], char mine[row][col])//排雷
{
	int x = 0;
	int y = 0;
	int count = 0;
	while (1)
	{
		printf("请输入坐标:");
		scanf_s("%d %d", &x, &y);
		if (((0 < x) && (y <= 10)) && ((y > 0) && (x <= 10)))
		{
			if (mine[x][y] == '1')
			{
				printf("你被炸死了\n");
				display_board(mine, row, col);
				break;

			}
			else
			{
				int ret = get_mine(mine, x, y);
				arr[x][y] = ret + '0';
				if (ret == 0)

				{

					arr[x][y] = arr[x - 1][y - 1] = arr[x - 1][y] =

						arr[x - 1][y + 1] = arr[x][y - 1] = arr[x][y + 1] =

						arr[x + 1][y - 1] = arr[x + 1][y] = arr[x + 1][y + 1] = ' ';

				}
				count++;
                display_board(arr, row, col);
				if(count==M)

				{

					printf("恭喜你,赢了\n");

					display_board(mine, row, col);

					break;

				}
			}
		}
		else
			printf("输入错误,重新输入");


	}

}
void game()
{
	char arr[row][col];
	char mine[row][col];
	int ret = 0;
	srand((unsigned)time(NULL));
	init_board(arr, mine, row, col);  //init_board(char arr[row][col], char mind[row][col], int rows, int cols)
	set_mind(mine, row, col);
	display_board(arr, row, col);
	play_game(arr, mine);



}
int main()
{
	printf("扫雷游戏\n");
	do {
		int choose = menu();
		switch (choose)
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
		}
	} while (1);
	system("pause");
	return 0;
}


猜你喜欢

转载自blog.csdn.net/spaceman_c/article/details/79870037