c语言简单小游戏-扫雷游戏

互联网 20-3-2
这篇文章主要为大家详细介绍了C语言实现简单扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

c语言简单小游戏-扫雷

本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /*  用 C 语言写一个简单的扫雷游戏 */ // 1.写一个游戏菜单 Menu() // 2.开始游戏  // 1.初始化二维数组 Init_Interface()  // 2.打印游戏界面 Print_Interface()  // 3.玩家掀起指定位置 Play() --> 指定输入坐标(判断合法性)  // 1.判断该位置是否是雷  // 2.判断是否掀掉所有空地  // 3.如果掀开的是空地,则判断该空地周围是否有雷   // 1.如果周围有雷,则统计周围雷的个数   // 2.如果周围没有雷,则掀开周围除了雷的所有空地,并且统计所掀开空地周围雷的个数  // 4.更新地图  // 5.继续 3 的循环   //定义全局变量: //定义扫雷地图的长和宽 #define MAX_ROW 9 #define MAX_COL 9 //定义默认的雷数 #define DEFAULT_MINE 9 //定义两个二维数组,分别存放初始地图和雷阵 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语言教程,推荐观看C语言视频教程!

以上就是c语言简单小游戏-扫雷游戏的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 扫雷
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:c语言中合法的字符常量如何定义?

相关资讯