C语言游戏设计——扫雷

C语言游戏设计——扫雷

C语言的第二个游戏,(历时3小时)很有成就感。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void menu();
void Clean(char Board[][10], int cow, int col);
void Show(char Board[][10], int cow, int col);
void CreatLei(char Board[][10], int cow, int col);
void User(char Board[][10], int cow, int col);
void Start(char Board[][10]);
void Help();
//菜单
void menu(){
    
    
	printf("***************************************************************\n");
	printf("********************         扫雷         *********************\n");
	printf("********************        1开始1        *********************\n");
	printf("********************        2帮助2        *********************\n");
	printf("********************        0退出0        *********************\n");
	printf("***************************************************************\n");
}
//初始化
void Clean(char Board[][10],int cow,int col){
    
    
	for (int i = 0; i < cow;++i){
    
    
		for (int j = 0; j < col;++j){
    
    
			Board[i][j] = ' ';
		}
	}
}
//生成10个地雷
void CreatLei(char Board[][10], int cow, int col){
    
    
	int x=0, y=0;
	for (int i = 1; i < 11;++i){
    
    
		x = rand() % 10;
		y = rand() % 10;
		Board[x][y] = '*';
	}
}
//显示背景
void Show(char Board[][10], int cow, int col){
    
    
	for (int i = 0; i <= cow;++i){
    
    
		for (int j = 0; j <= col;++j){
    
    
			if (j<col){
    
    
				printf("——");
			}
		}
		printf("\n");
		if (i<cow){
    
    
			for (int j = 0; j <= col; ++j){
    
    
				printf("|");
				if (j < col){
    
    
					if (Board[i][j]=='*'){
    
    
						printf("   ");
					}
					else {
    
    
						printf(" %c ",Board[i][j]);
					}
				}
			}
		}
		printf("\n");
	}
}
//玩家操作
void User(char Board[][10], int cow, int col){
    
    
	int x, y,flag,n=0;
	char arr[10][10] = {
    
    ' '};
	for (int i = 0; i < cow;++i){
    
    
		for (int j = 0; j < col;++j){
    
    
			if (Board[i][j]=='*'){
    
    
				arr[i][j] = '*';
			}
		}
	}
	while (1){
    
    
		char num = '0';
		Show(Board, 10, 10);
		printf("*************请玩家选定排雷坐标1-10*************\n");
		scanf("%d%d", &x, &y);
		printf("******是否标记该坐标点?是输1,不是输0******\n");
		scanf("%d",&flag);
		if (flag==0){
    
    
			if (arr[x - 1][y - 1] == '*'){
    
    
				printf("***************你踩到地雷了!*****************\n");
				break;
			}
			else{
    
    
				for (int i = x - 2; i <= x; ++i){
    
    
					for (int j = y - 2; j <= y; ++j){
    
    
						if (arr[i][j] == '*'){
    
    
							num++;
						}
					}
				}
					Board[x - 1][y - 1] = num;
			}
		}
		else{
    
    
			Board[x - 1][y - 1] = '?';
			if (arr[x-1][y-1]=='*'){
    
    
				n++;
			}
		}
		if (n==10){
    
    
			printf("*************恭喜你,你已经排除所有地雷!************\n");
			break;
		}
	}
}
//游戏开始
void Start(char Board[][10]){
    
    
	printf("******************游戏开始**********************");
	Clean(Board, 10, 10);
	CreatLei(Board, 10,10);
	User(Board,10,10);
}
//游戏帮助
void Help(){
    
    
	printf("********************************************************************************\n");
	printf("*先输入坐标位置,然后要标记,则输入1,否则输入0,标记后的位置为一个‘?’标识的*\n");
	printf("*图形,你的目标是排除所有雷,当你不选择标记时,会提示你以当前坐标为中心,周围八*\n");
	printf("********************位置中有几个地雷,前提是,你不能踩上!***********************\n");
	printf("********************************************************************************\n");
}
int main(){
    
    
	int input = 0;
	char Board[10][10];
	srand(time(NULL));
	menu();
	printf("你玩吗?玩输入1,查看帮助输入2,退出输入0:");
	scanf("%d", &input);
	do{
    
    
		menu();
		switch (input){
    
    
		case 1:	Start(Board); break;
		case 2: Help(); break;
		case 0:printf("******************退出到主菜单******************\n"); break;
		default:printf("*******************格式错误********************\n"); break;
		}
		printf("你还玩吗?玩输入1,查看帮助输入2,退出输入0:");
		scanf("%d", &input);
	} while (input);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45841205/article/details/109608204