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语言实现简单扫雷小游戏

数字代表周围雷的个数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解C语言实现简单扫雷小游戏分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483284.html

Like (0)
Previous 2020年11月9日
Next 2020年11月9日

精彩推荐