利用C语言实现“扫雷”游戏

实现“扫雷游戏”:设置一个12*12的格子,由计算机布下随机位置的雷,用户排雷,当用户找出所有雷的位置即为获胜。

一:设置游戏入口,用户选择是否玩游戏;

二:由计算机随机产生规定个数的“雷”的位置;

三:由用户手动输入坐标进行游戏;

四:显示用户排雷的过程。

1:用户选择’1‘:进入游戏,选择’0‘退出游戏。作为进入游戏的条件。

void ShowUI(){
	printf("********************************\n");
	printf("******1.play       0.exit ******\n");
	printf("********************************\n");
}


int main(){
	int elect = 0;
	int quit = 0;
	while (!quit){
		ShowUI();
		scanf("%d", &elect);
		switch (elect){
		case 1:Game();
			break;
		case 0:printf("Exit Game!\n");
			quit = 1;
			break;
		default:printf("Pelese input right number\n");
			break;
		}
	}
	system("pause");
	return 0;
}

2:由计算机产生20个雷的随机位置,进行布雷:规定“1”代表雷,“0”代表安全

void Set_Mine(char mine_board[ROW][COL], int row, int col) {
	int i = 0;
	srand((unsigned long)time(NULL)); 
	for (i = 0; i < MINES; i++){
		int x = (rand() % (row - 2)) + 1;
		int y = (rand() % (col - 2)) + 1;
		if (mine_board[x][y] == '0'){
			mine_board[x][y] = '1';
		}
	}

}

3:由用户从键盘输入坐标进行排雷:若第一次即遇到雷,还可继续游戏,每次排雷成功后改坐标位置会显示出周围9个格子总共雷的个数帮助用户判断,若将20的雷的位置均确定,即为游戏成功。

void Play_Game(char mine_board[ROW][COL], char show_board[ROW][COL], int row, int col){
	int i_index = 0;
	int j_index = 0;
	int sum = 0;
	int count = 0;
	int tmp = 0;
	while (1){
		Show(show_board, row, col);
		printf("plese enter pose<x,y>:");
		scanf("%d,%d", &i_index, &j_index);
		if (i_index > 0 && i_index <= row&&j_index > 0 && j_index <= col){
			if (mine_board[i_index][j_index] == '0'){
				sum = mine_board[i_index - 1][j_index - 1] + mine_board[i_index - 1][j_index] + \
					mine_board[i_index - 1][j_index + 1] + mine_board[i_index][j_index + 1] + \
					mine_board[i_index + 1][j_index] + mine_board[i_index + 1][j_index - 1] + \
					mine_board[i_index + 1][j_index - 1] + mine_board[i_index][j_index - 1] - 8 * '0';
				count++;
				if (sum == 0){
					View(show_board, i_index, j_index);
				}
				show_board[i_index][j_index] = sum + '0';
			}
			else{
				tmp++;
				Show(show_board, row, col);
				if (tmp == 1){
					printf("Give you a chance:(\n");
					continue;
				}
				printf("You Lose:(\n");
				break;
			}
		}
		else{
			printf("Enter Error,Try Again!\n");
			continue;
		}
		if (count >= (row - 2)*(col - 2) - MINES){
			printf("congratulation:)\n");
			break;
		}

		}
	}

4:显示用户游戏的的过程:

void Show(char show_board[ROW][COL], int row, int col){
	int i = 0;
	int j = 0;
	printf("    1   2   3   4   5   6   7   8   9   10\n");
	printf("-------------------------------------------------\n");
	for (i = 1; i <=row; i++){
		printf("%2d |", i );
		for (j = 1; j <= col; j++){
			printf(" %c |", show_board[i][j]);
		}
		printf("\n-------------------------------------------\n");
	}

}

在完成上面四个功能块后可在Game()函数中调用这些函数完成游戏进程。

void Game(){
	char show_board[ROW][COL];
	char mine_board[ROW][COL];
	memset(show_board, '#', sizeof(show_board));
	memset(mine_board, '0', sizeof(mine_board));
	Set_Mine(mine_board,ROW-2,COL-2);
	Play_Game(mine_board, show_board, ROW - 2, COL - 2);
}

运行程序界面:

在以上程序中需要两完全相同的矩阵,一个用于布雷,一个用于显示,且为了排除边框的影响设置为12*12的矩阵但实际所用矩阵为10*10。

猜你喜欢

转载自blog.csdn.net/qq_44370562/article/details/89154935