c语言扫雷简化版小游戏

   日期:2020-11-04     浏览:109    评论:0    
核心提示:文章目录1扫雷游戏说明:2、编程逻辑3整体的代码实现1扫雷游戏说明:9*9方格中有10个地雷,用户翻看一个方格,如果是地雷,游戏结束,翻看不是地雷,则显示周围地雷的个数。知道10个地雷全部被找到。2、编程逻辑1、创建地图并且初始化、我们需要创建两个地图,一个地图展示用户输入,另一个地图电脑内置有地雷的地图,void init(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL]){ //对showmap进行初始化

文章目录

    • 1扫雷游戏说明:
    • 2、编程逻辑
    • 3整体的代码实现

1扫雷游戏说明:

9*9方格中有10个地雷,用户翻看一个方格,如果是地雷,游戏结束,翻看不是地雷,则显示周围地雷的个数。知道10个地雷全部被找到。

2、编程逻辑

1、创建地图并且初始化、

我们需要创建两个地图,一个地图展示用户输入,另一个地图电脑内置有地雷的地图,

void init(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL]){ 
	//对showmap进行初始化 界面用*表示地图
	for (int row = 0; row < MAX_ROW; row++){ 
		 for (int col= 0; col < MAX_COL; col++){ 
			 showmap[row][col] = '*';
		}
	}
	//对mine进行初始化 界面用‘0’表示地图 用‘1’表示地雷
	for (int row = 0; row < MAX_ROW; row++){ 
		for (int col = 0; col < MAX_COL; col++){ 
			minemap[row][col] = '0';
		}
	}
	//电脑随机生成地雷 生成是个地雷
	int n = DEFAULT_MINE_COUNT;
	while (n>0){ 
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (minemap[row][col] == '1'){ 
			continue;
		}
		minemap[row][col] = '1';
		n--;
	}
}

2、打印地图

void printmap(char themap[MAX_ROW][MAX_COL]){ 
	//打印showmaop 
	printf(" |");
	for (int col = 0; col < MAX_COL; col++){ 
		printf(" %d", col);
	}
	
	printf("\n");
	printf("-+------------------\n");
	for (int row = 0; row < MAX_ROW; row++){ 
		printf("%d| ", row);
		for (int col = 0; col < MAX_COL; col++){ 
			printf("%c ", themap[row][col]);
		}
		printf("\n");
	}
	printf("\n");
}

3、用户输入坐标

用户输入坐标我们还得进行校验,用户输入的位置坐标必须在地图坐标内,也不能在用户输入过的位置再次输入。

int row;
		int col;
		printf("请输入翻开的*(row,col)\n");
		scanf("%d %d", &row, &col);
		printmap(showmap);
		if (showmap[row][col] != '*'){ 
			printf("您已经翻开此位置了,请重新输入\n");
			continue;
		}
		if (row >= MAX_ROW || row < 0 || col >= MAX_COL || col < 0){ 
			printf("您输入的位置有误,请重新输入\n");
			continue;
		}

4、判断用户输入的位置是否是地雷

判断用户输入的位置是否是地雷 ,是地雷直接‘gameover’shoumap[row][col] == ‘1’ 踩雷了

if (minemap[row][col] == '1'){ 
			printf("gameover!!!!!\n");
			printmap(minemap);
			break;
		}

5、不是地雷的话,显示用户周围所点开地雷的个数

不是地雷的情况下我们需要对用户所点开的位置周围判断雷的个数,
可以形象的理解周围就是一个3*3的方格,用户输入的坐标是(row,col)左上角的格子坐标是(row -1,col -1),右下角格子坐标为(row+1,col+1)来表示,

void updateshowmap(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL], int row, int col){ 
	int count = 0;
	for (int i = row - 1; i <= row + 1; i++){ 
		for (int m = col - 1; m <= col + 1; m++){ 
			if (i < 0 || i >= MAX_ROW || m < 0 || m >= MAX_COL) { 
				continue;
			}
			if (minemap[i][m] == '1'){ 
				count++;
			}
		}
	}
	showmap[row][col] = count + '0';
}

6、判断游戏是否胜利

(用户翻开的* = 方格子总数-地雷数)两者相等,则游戏胜利,否则游戏失败

if (playmove == MAX_ROW*MAX_COL - DEFAULT_MINE_COUNT){ 
			printf("恭喜你游戏胜利了\n");
			printmap(minemap);
			break;
		}

3整体的代码实现

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<time.h>
#define MAX_ROW 9
#define MAX_COL 9
#define DEFAULT_MINE_COUNT 10

int menu(){ 
	printf("==========================\n");
	printf("======== 0;开始游戏=======\n");
	printf("======== 1;退出游戏=======\n");
	printf("==========================\n");
	int choice;
	printf("请输入您的选择:\n");
	scanf("%d", &choice);
	return choice;
}
//1、创建地图并且初始化、
void init(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL]){ 
	//对showmap进行初始化 界面用*表示地图
	for (int row = 0; row < MAX_ROW; row++){ 
		 for (int col= 0; col < MAX_COL; col++){ 
			 showmap[row][col] = '*';
		}
	}
	//对mine进行初始化 界面用‘0’表示地图 用‘1’表示地雷
	for (int row = 0; row < MAX_ROW; row++){ 
		for (int col = 0; col < MAX_COL; col++){ 
			minemap[row][col] = '0';
		}
	}
	//电脑随机生成地雷 生成是个地雷
	int n = DEFAULT_MINE_COUNT;
	while (n>0){ 
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (minemap[row][col] == '1'){ 
			continue;
		}
		minemap[row][col] = '1';
		n--;
	}
}
//2、打印地图
void printmap(char themap[MAX_ROW][MAX_COL]){ 
	//打印showmaop 
	printf(" |");
	for (int col = 0; col < MAX_COL; col++){ 
		printf(" %d", col);
	}
	
	printf("\n");
	printf("-+------------------\n");
	for (int row = 0; row < MAX_ROW; row++){ 
		printf("%d| ", row);
		for (int col = 0; col < MAX_COL; col++){ 
			printf("%c ", themap[row][col]);
		}
		printf("\n");
	}
	printf("\n");
}
//不是地雷增加,显示周围地雷的个数
void updateshowmap(char showmap[MAX_ROW][MAX_COL], char minemap[MAX_ROW][MAX_COL], int row, int col){ 
	int count = 0;
	for (int i = row - 1; i <= row + 1; i++){ 
		for (int m = col - 1; m <= col + 1; m++){ 
			if (i < 0 || i >= MAX_ROW || m < 0 || m >= MAX_COL) { 
				continue;
			}
			if (minemap[i][m] == '1'){ 
				count++;
			}
		}
	}
	showmap[row][col] = count + '0';
}
void game(){ 
	//1、创建地图并且初始化、
	char showmap[MAX_ROW][MAX_COL] = {  0 };
	char minemap[MAX_ROW][MAX_COL] = {  0 };
	init(showmap, minemap);
	int playmove = 0;
	while (1){ 
		//2、打印地图、
		printmap(showmap);
		printmap(minemap);
	
		//3、用户输入坐标,对应点开某个位置。进行校验。
		//要不要写个函数呢呀?还是直接在这用户输入*.*
		int row;
		int col;
		printf("请输入翻开的*(row,col)\n");
		scanf("%d %d", &row, &col);
		printmap(showmap);
		if (showmap[row][col] != '*'){ 
			printf("您已经翻开此位置了,请重新输入\n");
			continue;
		}
		if (row >= MAX_ROW || row < 0 || col >= MAX_COL || col < 0){ 
			printf("您输入的位置有误,请重新输入\n");
			continue;
		}
		//4、判断用户输入的位置是否是地雷 ,是地雷直接‘gameover’shoumap[row][col] == '1' 踩雷了
		if (minemap[row][col] == '1'){ 
			printf("gameover!!!!!\n");
			printmap(minemap);
			break;
		}

		//5、不是地雷的话,显示用户周围所点开地雷的个数,
		updateshowmap(showmap, minemap, row, col);
		

		//6、判断游戏是否胜利(用户翻开的* = 方格子总数-地雷数)两者相等,则游戏胜利,否则游戏失败
		playmove ++;	
		if (playmove == MAX_ROW*MAX_COL - DEFAULT_MINE_COUNT){ 
			printf("恭喜你游戏胜利了\n");
			printmap(minemap);
			break;
		}
	}
	
}
int main()
{ 
	srand((unsigned)time(0));
	
	while (1){ 
		int choice = menu();
		if (choice == 0){ 
			game();
			
		}
		else if (choice == 1){ 
			printf("bye~~bye~~\n");
			break;
		}
		else{ 
			printf("您输入有误,请您重新输入;\n");
		}
		
	}
	system("pause");
	return 0;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服