扫雷小游戏C语言代码实现

主页面:

扫雷小游戏C语言代码实现_第1张图片

游戏页面:

扫雷小游戏C语言代码实现_第2张图片
虽然页面比较low,但我已经尽力了

具体代码实现:

#include
#include
#include
#include
#include
int n;//记录已经探索的区域数
int x,y;//光标的横纵坐标
int T;//判断游戏是否失败,T=1为失败
int b[9][9];//区分每个位置的状态,0为未探索,1为已探索,2为插旗状态
int a[9][9];//随机生成的扫雷地图,-1为雷
void setColor(unsigned short ForeColor=7,unsigned short BackGroundColor=0) {//控制局部区域的字体颜色和背景颜色
	HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(handle,ForeColor+BackGroundColor*0x10);
}
void gotoxy(int x, int y) {
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle, pos);
}
void add(int p,int q) {//雷的一周数值+1
	for(int i=-1; i<2; i++)
		for(int j=-1; j<2; j++)
			if(p+i>=0&&p+i<9&&q+j>=0&&q+j<9&&a[p+i][q+j]>=0)
				a[p+i][q+j]++;
}
void start() {//初始化函数
	srand(time(0));
	for(int i=0; i<9; i++)
		for(int j=0; j<9; j++) {
			a[i][j]=0;
			b[i][j]=0;
		}
	x=0;
	y=0;
	T=0;
	n=10;
	while(n) {//由p和q随机数产生10个坐标,生成10个雷
		int p,q;
		p=rand()%9;
		q=rand()%9;
		if(!a[p][q]) {
			n--;
			a[p][q]=-1;
			add(p,q);
		}
	}
}
void show() {//显示图
	gotoxy(0,0);
	for(int i=0; i<9; i++) {
		if(i==0)
			printf("┌───┬───┬───┬───┬───┬───┬───┬───┬───┐\n");
		else
			printf("├───┼───┼───┼───┼───┼───┼───┼───┼───┤\n");
		printf("│");
		for(int j=0; j<9; j++) {
			printf(" ");
			if(!b[i][j]) {
				setColor(0,7);
				if(i==x&&j==y)
					setColor(0,12);
				printf("  ");
			} else {
				if(i==x&&j==y)
					setColor(7,4);
				if(b[i][j]==-1)
					printf("│>");
				else if(a[i][j]>=0) {

					if(a[i][j])
						printf("%2d",a[i][j]);
					else
						printf("  ");
				} else
					printf("**");
			}
			setColor(7,0);
			printf("│");
		}
		printf("\n");
		if(i==8)
			printf("└───┴───┴───┴───┴───┴───┴───┴───┴───┘\n");
	}
	printf("1.探索 2.插旗\n");
}
void ss(int x1,int y1) {//探索函数
	if(b[x1][y1])
		return ;
	b[x1][y1]=1;
	n++;
	if(a[x1][y1]>0)
		return;
	if(a[x1][y1]<0) {
		T=1;
		return;
	}
	for(int i=-1; i<2; i++)
		for(int j=-1; j<2; j++)
			if(x1+i>=0&&x1+i<9&&y1+j>=0&&y1+j<9)
				ss(x1+i,y1+j);
}
void doing() {//游戏进行流程函数
	start();
	while(n<71) {
		show();
		int t;
		t=_getch();
		switch(t) {
			case 72: {
				if(x)
					x--;
				break;
			}
			case 75: {
				if(y)
					y--;
				break;
			}
			case 77: {
				if(y<8)
					y++;
				break;
			}
			case 80: {
				if(x<8)
					x++;
				break;
			}
			case '1': {
				if(!b[x][y])
					ss(x,y);
				break;
			}
			case '2': {
				if(!b[x][y])
					b[x][y]=-1;
				else if(b[x][y]==-1)
					b[x][y]=0;
				break;
			}
		}
		if(T) {
			for(int i=0; i<9; i++)
				for(int j=0; j<9; j++)
					b[i][j]=1;
			break;
		}
	}
	show();
	if(T)
		printf("游戏失败!\n");
	if(!T)
		printf("挑战成功!\n");
	printf("请按'0'键返回主页!\n");
	int o=1;
	while(o!='0'){
		o=_getch();
	} 
}
int main() {
	int m=1;
	while(m) {
		system("cls");
		printf("┌───────────┐\n");
		printf("│    扫雷   │\n");
		printf("├───────────┤\n");
		printf("│ 1.开始游戏│\n");
		printf("├───────────┤\n");
		printf("│ 2.退出游戏│\n");
		printf("└───────────┘\n");
		int t;
		t=_getch();
		if(t=='1')
			doing();
		if(t=='2')
			break;
	}
	return 0;
}

你可能感兴趣的:(C语言)