/*
用 C 语言写一个简单的扫雷游戏
*/
// 1.写一个游戏菜单 Menu()
// 2.开始游戏
// 1.初始化二维数组 Init_Interface()
// 2.打印游戏界面 Print_Interface()
// 3.玩家掀起指定位置 Play() --> 指定输入坐标(判断合法性)
// 1.判断该位置是否是雷
// 2.判断是否掀掉所有空地
// 3.如果掀开的是空地,则判断该空地周围是否有雷
// 1.如果周围有雷,则统计周围雷的个数
// 2.如果周围没有雷,则掀开周围除了雷的所有空地,并且统计所掀开空地周围雷的个数
// 4.更新地图
// 5.继续 3 的循环
//定义全局变量:
//定义扫雷地图的长和宽
//定义默认的雷数
//定义两个二维数组,分别存放初始地图和雷阵
char show_map[MAX_ROW + 2][MAX_COL + 2];
char mine_map[MAX_ROW + 2][MAX_COL + 2];
//写一个游戏菜单
int Menu() {
printf("=========\n");
printf("1.开始游戏\n");
printf("0.结束游戏\n");
printf("=========\n");
printf("请选择游戏菜单选项:");
int choice = 0;
while (1) {
scanf("%d", &choice);
if (choice != 0 && choice != 1) {
printf("您的输入有误, 请重新输入\n");
continue;
}
break;
}
return choice;
}
//开始游戏
//初始化数组
void Init_Interface() {
for (int row = 0; row < MAX_ROW + 2; row++) {
for (int col = 0; col < MAX_COL + 2; col++) {
show_map[row][col] = '*';
}
}
for (int row = 0; row < MAX_ROW + 2; row++) {
for (int col = 0; col < MAX_COL + 2; col++) {
mine_map[row][col] = '0';
}
}
int mine_count = DEFAULT_MINE;
while (mine_count > 0) {
int row = rand() % MAX_ROW + 1;
int col = rand() % MAX_COL + 1;
if (mine_map[row][col] == '1') { //将雷设置为 1
//此处已经有雷
continue;
}
mine_count--;
mine_map[row][col] = '1';
}
}
//打印初始界面
void Print_Interface(char map[MAX_ROW + 2][MAX_COL + 2]) {
printf(" ");
for (int col = 1; col <= MAX_COL; col++) {
printf("%d ", col);
}
printf("\n ");
for (int col = 1; col <= MAX_COL; col++) {
printf("--");
}
printf("\n");
for (int row = 1; row <= MAX_ROW ; row++) {
printf("%02d |", row);
for (int col = 1; col <= MAX_COL; col++) {
printf("%c ", map[row][col]);
}
printf("\n");
}
}
//写一个统计周围雷数个数的函数
int Around_Mine_count(int row, int col) {
return (mine_map[row - 1][col - 1] - '0'
+ mine_map[row - 1][col] - '0'
+ mine_map[row - 1][col + 1] - '0'
+ mine_map[row][col - 1] - '0'
+ mine_map[row][col + 1] - '0'
+ mine_map[row + 1][col - 1] - '0'
+ mine_map[row + 1][col] - '0'
+ mine_map[row + 1][col + 1] - '0');
}
//写一个判断该位置周围是否有雷的函数
int No_Mine(int row, int col) {
if (Around_Mine_count(row, col) == 0) {
return 1;
}
return 0;
}
//写一个掀开该位置周围空地的函数
void Open_Blank(int row, int col) {
show_map[row - 1][col - 1] = '0' + Around_Mine_count(row - 1, col - 1);
show_map[row - 1][col] = '0' + Around_Mine_count(row - 1, col);
show_map[row - 1][col + 1] = '0' + Around_Mine_count(row - 1, col + 1);
show_map[row][col - 1] = '0' + Around_Mine_count(row, col - 1);
show_map[row][col + 1] = '0' + Around_Mine_count(row, col + 1);
show_map[row + 1][col - 1] = '0' + Around_Mine_count(row + 1, col - 1);
show_map[row + 1][col] = '0' + Around_Mine_count(row + 1, col);
show_map[row + 1][col + 1] = '0' + Around_Mine_count(row + 1, col + 1);
}
//写一个判断游戏结束的函数
int Success_Sweep(char show_map[MAX_ROW + 2][MAX_COL + 2]) {
int count = 0;
for (int row = 1; row <= MAX_ROW; row++) {
for (int col = 1; col <= MAX_COL; col++) {
if (show_map[row][col] == '*') {
count++;
}
}
}
if (count == DEFAULT_MINE) {
return 1;
}
return 0;
}
//开始游戏
void StartGame() {
while (1) {
printf("请输入您要掀开的坐标:");
int row = 0;
int col = 0;
while (1) {
scanf("%d %d", &row, &col);
if (row < 1 || row > MAX_ROW || col < 1 || col > MAX_COL) {
printf("您的输入有误,请重新输入!\n");
continue;
}
if (show_map[row][col] != '*') {
printf("该位置已被掀开,请重新选择\n");
continue;
}
break;
}
//判断该地方是否有雷
if (mine_map[row][col] == '1') {
Print_Interface(mine_map);
printf("该地方有雷,游戏结束!!!\n");
break;
}
if (No_Mine(row, col)) {
show_map[row][col] = '0';
Open_Blank(row, col);
}
show_map[row][col] = '0' + Around_Mine_count(row, col);
//判断是否掀开所有空地
if (Success_Sweep(show_map) == 1) {
Print_Interface(mine_map);
printf("您已成功扫雷!!!\n");
break;
}
system("cls");
//更新地图
Print_Interface(show_map);
}
}
int main() {
if (Menu() == 0) {
exit(0);
}
srand((unsigned int)time(NULL));
Init_Interface();
Print_Interface(show_map);
StartGame();
system("pause");
return 0;
}
C语言实现简单扫雷
原创
©著作权归作者所有:来自51CTO博客作者mb62b13eddbe258的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
c语言实现简单版扫雷
扫雷简单的实现
#define #include 初始化 i++ 数组 -
C语言实现扫雷游戏
C语言实现扫雷游戏
#define i++ #include -
C语言实现简易扫雷
C语言实现简易扫雷
C语言实现简易扫雷 -
【C语言】控制台扫雷(C语言实现)
控制台实现扫雷
#define i++ #include -
用C语言实现控制台扫雷游戏
目录1.扫雷游戏的多文件管理和逻辑内在2.扫雷游戏的循环细节3.扫雷游戏的函数声明;4.扫雷游戏的实现; &
头文件 文件管理 数组 函数 扫雷 -
ios开发 OCR识别汉字
相信使用过ABBYY FineReader 14的朋友们一下子就能对比出该版本较之前版本的强大新增功能以及新特性,作为市场领先的OCR文字识别软件ABBYY FineReader 14可快速方便地将扫描纸质文档、PDF文件和数码相机的图像转换成可编辑、可搜索信息。究竟14版本值不值得使用,来,我们看看ABBYY FineReader 14新增功能,看完之后,可能就会有自己的选择了!提高了 OCR
ios开发 OCR识别汉字 ABBYY FineReader 14新 新特性 OCR文字识别软件 文字识别