• 技术文章 >后端开发 >C#.Net教程

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

    angryTomangryTom2020-03-02 10:46:42原创2302
    这篇文章主要为大家详细介绍了C语言实现简单扫雷小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    php入门到就业线上直播课:进入学习

    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;
    }

    效果图:

    2.png

    数字代表周围雷的个数

    更多C语言教程,推荐观看C语言视频教程

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    快捷开发Web应用及小程序:点击使用

    支持亿级表,高并发,自动生成可视化后台。

    专题推荐:C语言 小游戏 扫雷
    上一篇:c语言中合法的字符常量如何定义? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中“或”怎么表示?• c语言中形参的默认存储类型是什么?• c语言允许函数的递归调用吗• c语言中合法的字符常量如何定义?
    1/1

    PHP中文网