扫雷函数
//扫雷函数 int sweep_mine(int n, int m) { if (real_mine[n][m] == '1')//踩到雷 { return 0; } else { int count = count_mine(n, m);//没踩到,统计周围雷的个数 if (count) { show_mine[n - 1][m - 1] = count + 0x30;//该坐标处应展示的值 (普通整数要转换为字符,需要加上‘0’的ASCII码值,即0x30) } else { open_mine(n, m); } return 1; } }
判断是否赢得游戏
//判断是否赢得游戏 int is_win() { int i = 0, j = 0; int count = 0; for (i = 0; i < ROW - 2; i++) { for (j = 0; j < COL - 2; j++) { if (show_mine[i][j] == '*') { count++; } } } if (count == MINE) { return 0; } else { return 1; } }
game.h文件
//函数的声明 #include<stdio.h> #include<time.h> #include<stdlib.h> #define COL 12 #define ROW 12 #define MINE 10 char show_mine[ROW-2][COL-2];//展示给玩家的棋盘的数组 char real_mine[ROW][COL]; void init_mine();//初始化布置雷的棋盘和展示给玩家的棋盘 void set_mine();//放置雷 void print_mine(); //打印放置雷的棋盘 void print_show();//打印展示给玩家的棋盘 int count_mine();//统计周围雷的个数 int has_queried(int n, int m);//判断输入的坐标是否已经被查询过 int sweep_mine();//扫雷函数 int is_win();//判断是否赢得游戏
game.c文件
#define _CRT_SECURE_NO_WARNINGS #include"saolei.h" //测试游戏逻辑 void game() { int n = 0, m = 0; init_mine();//初始化布置雷的棋盘和展示给玩家的棋盘 set_mine();//放置雷 while (1) { print_mine(); //打印放置雷的棋盘(方便观察是否有错误,实现整个游戏后进行隐藏) printf("\n"); print_show();//打印展示给玩家的棋盘 printf("请输入您想排查雷的坐标:>"); scanf("%d %d", &n, &m); if (n<1 || n>10 || m<1 || m>10) { printf("您输入的坐标无效,请重新输入\n"); continue; } int ret1 = has_queried(n, m);//判断输入的坐标是否已经被查询过 if (!ret1) { printf("该位置已经被查询,请重新输入\n"); continue; } int ret2 = sweep_mine(n, m);//扫雷函数 if (!ret2) { printf("您已被炸死!\n"); break; } int ret3 = is_win();//判断是否赢得游戏 if (!ret3) { printf("游戏胜利!\n"); break; } } } void menu() { printf("*****************************\n"); printf("******** 1. Play ********\n"); printf("******** 0. Exit ********\n"); printf("*****************************\n"); } int main() { srand((unsigned int)time(NULL));//设置随机数的起始值 int input = 0; do { menu();//主菜单 printf("请输入您的操作:>"); scanf("%d", &input); switch (input) { case 1: game();//进入游戏 break; case 0: printf("退出游戏\n"); break; default: printf("输入错误请重新输入:>"); break; } } while (input); return 0; }
运行截图:
由运行截图可以看出部分游戏的功能,为了方便大家的学习和交流,文中以及将所有代码都展示出来了,大家可以自行测试。
总结
以上就是今天要讲的内容,本文简单的介绍了用C语言实现扫雷小游戏的思路,还进一步展示了代码的运行结果验证了作者的思路。用学习到的知识来实现一个小游戏确实是一个成就感满满的事情,正在学习C语言的你也跟着一起来实现这个小游戏吧。
本文的作者也只是一个正在学习C语言等编程知识的萌新,若这篇文章中有哪些不正确的内容,请在评论区向作者指出(也可以私信作者),欢迎大佬们指点,也欢迎其他正在学习C语言的萌新和作者进行交流。
最后,如果本篇文章对你有所启发的话,也希望可以支持支持作者,后续作者也会定期更新学习记录。谢谢大家!