#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define ROW 9
#define COL 9
#define MINE_COUNT 10//雷的数量
char mine_map[ROW + 2][COL + 2] = { ' ' };//雷区的地图
char show_map[ROW + 2][COL + 2] = { ' ' };//显示的地图
int menu(){printf("=====================\n");printf("=====1.开始游戏======\n");printf("=====0.退出游戏======\n");printf("=====================\n");printf("请输入您的选择:");int choice = 0;scanf("%d", &choice);return choice;}
void Init(char mine_map[ROW + 2][COL + 2], char show_map[ROW + 2][COL + 2]){for (int row = 0; row < ROW + 2; row++){for (int col = 0; col < COL + 2; col++){show_map[row][col] = '*';}}for (int row = 0; row < ROW + 2; row++){for (int col = 0; col < COL + 2; col++){mine_map[row][col] = '0';}}int count = 0;while (count < MINE_COUNT){int row = rand() % 9 + 1;int col = rand() % 9 + 1;if (mine_map[row][col] != '0'){continue;}mine_map[row][col] = '1';count++;}
}
//打印函数,两个图都适合
void display(char map[ROW + 2][COL + 2]){//打印第一行printf("    ");for (int i = 1; i <= ROW; i++){printf("%d ", i);}printf("\n");//打印其他的行for (int row = 1; row <= ROW; row++){printf("  %d|", row);for (int col = 1; col <= COL; col++){printf("%c ", map[row][col]);}printf("\n");}
}
int check_mine(char mine_map[ROW + 2][COL + 2], int row, int col){//4,判定是不是扫到了雷,如果是扫到了就直接退出游戏并且打印棋盘if (mine_map[row][col] == '1'){display(mine_map);return 1;}//5,如果不是扫到了雷就统计周围雷的数量并且打印出现在的棋盘return 0;
}
//打印出现在不是雷的时候周围雷的数量int print_not_mine(char mine_map[ROW + 2][COL + 2], char show_map[ROW + 2][COL + 2], int row, int col){if (show_map[row][col] == '*'){int num = 0;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (mine_map[row - 1 + i][col - 1 + j] == '1'){num++;}}}show_map[row][col] = num + '0';if (show_map[row][col] == '0'&&row >= 1 && row <= ROW&& col >= 1 && col <= COL){return (print_not_mine(mine_map, show_map, row - 1, col) +print_not_mine(mine_map, show_map, row - 1, col - 1) +print_not_mine(mine_map, show_map, row - 1, col + 1) +print_not_mine(mine_map, show_map, row, col - 1) +print_not_mine(mine_map, show_map, row, col + 1) +print_not_mine(mine_map, show_map, row + 1, col - 1) +print_not_mine(mine_map, show_map, row + 1, col) +print_not_mine(mine_map, show_map, row + 1, col + 1)) + 1;}else{if (row >= 1 && row <= ROW&& col >= 1 && col <= COL){return 1;}return 0;}}else{return 0;}
}
//退出条件是 字符不是0并且长度满足要求是退出递归
int main(){srand((unsigned int)time(0));if (menu()){//1,进行对棋盘的初始化long long  starttime = time(0);//7,从文件中获取最快的时间FILE * fp = fopen("rank.txt", "r");int currentmaxtime;fscanf(fp, "%d", &currentmaxtime);fclose(fp);printf("目前最快的时间是:%d\n", currentmaxtime);int num = 0;Init(mine_map, show_map);while (1){//2,对棋盘进行显示display(show_map);//3,输入扫雷的位置int row = 0, col = 0;printf("请输入您的选择的位置:[1-9][1-9]:");scanf("%d %d", &row, &col);//4,判定是不是扫到了雷,如果是扫到了就直接退出游戏并且打印棋盘if (check_mine(mine_map, row, col)){printf("您踩到雷了,请重新开始\n");break;}else{//打印出不是雷的数字,用递归进行num += print_not_mine(mine_map, show_map, row, col);}//6,如果周围都是没有雷的话就用 递归进行打印出周围所有没有雷的格子。遍历是*的格子的数量如果==雷的数量就胜利了。if (num == ROW*COL - MINE_COUNT){display(mine_map);printf("恭喜您,您获得了胜利\n");long long endtime = time(0);long long time = endtime - starttime;if (time < currentmaxtime){printf("恭喜您,您打破了最高纪录,您所用时间是%d\n", time);fp = fopen("rank.txt", "w");fprintf(fp, "%d", time);fclose(fp);break;}printf("您所用时间是%d,未能打破最快纪录\n", time);break;}}}else{printf("退出游戏\n");}system("pause");return 0;
}

C语言实现------扫雷游戏相关推荐

  1. 用c语言编写最大最小值_C语言学习教程,用C语言编写扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...

  2. c++扫雷游戏代码_C语言学习教程,用C语言编写扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...

  3. 超详细分解c 语言——实现扫雷游戏(详解)

    之前利用三子棋程序,介绍探讨了 c语言简单游戏编写主要模块及使用方法. 今天,我们就利用这个经典扫雷游戏,来加强对于程序思路的编写及思路. 目录 前引 游戏规则介绍 一.基本游戏思路(游戏实现方法) ...

  4. c语言扫雷游戏计时功能_C语言实现扫雷游戏(可以自动展开)

    前言 本篇博客主要介绍如何使用C语言实现扫雷游戏. 一.游戏规则 在一张ROW行COL列的地图上存在MINE_COUNT个地雷.玩家输入坐标翻开格子,若没有踩雷,则计算此格子周围8个格子的地雷总数,并 ...

  5. c语言—实现扫雷游戏

    文章目录 什么是扫雷游戏 一.实现思路 二.头文件 三.主函数文件 1.菜单函数 2.主函数 四.游戏文件 1.地图初始化 2.展示地图 3.埋雷函数 4.判断该位置附近雷的个数 5.主游戏函数 五. ...

  6. 用C语言实现扫雷游戏

    用C语言实现扫雷游戏 -扫雷游戏的基本思路 1.打印游戏的菜单 2.为了便于后面排查周围雷的个数,初始化两个二维数组,一个作为向玩家显示的面板,一个作为布雷的面板.两个数组嵌套在一起.如下图所示: 3 ...

  7. C语言编写扫雷游戏,超简单

    C语言编写扫雷游戏,超简单 1.扫雷游戏的流程 2.代码编写 3.总结 通过学习C语言的基础知识,基本上是理解了大部分内容,现在就通过所学的知识,写个简单的扫雷游戏,加深对基础知识的理解,正所谓实践是 ...

  8. C语言实现扫雷游戏(超详细讲解+全部源码)

    电子信息 工科男 一点一点努力! 文章目录 前言 一.游戏介绍 二.游戏设计思路 二.具体步骤 1.创建test.c和game.c源文件以及 game.h头文件 2.创建菜单 3.创建雷盘 4.初始化 ...

  9. c语言程序设计扫雷游戏实验报告,C语言程序设计扫雷游戏实验报告.doc

    C语言程序设计扫雷游戏实验报告 中南大学 程序设计基础实践报告 题 目 设计一个和window系统类似的小游戏[挖地雷] 学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 ...

  10. c语言扫雷程序设计流程图,c语言程序设计扫雷游戏实验报告

    c语言程序设计扫雷游戏实验报告 中南大学 程序设计基础实践报告 题 目 设计一个和window系统类似的小游戏[挖地雷]学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完 ...

最新文章

  1. [csu/coj 1078]多个序列的最长公共子序列
  2. JLOI2015 战争调度
  3. [C++]constexpr函数
  4. Swoole 源码分析——内存模块之内存池
  5. SAP Spartacus里unit list tree节点collapse all按钮的实现逻辑
  6. unicode编码 php,PHP 的 UNICODE 编码和解码
  7. CentOS 7 搭建swagger Api文档管理系统
  8. 2015,工作几年的心得
  9. php编写一个投票程序,实例学习PHP之投票程序篇(一)
  10. python类型提示模块包_Python checktypes包_程序模块 - PyPI - Python中文网
  11. 数量场的等值面与矢量场的矢量线的一些基本的东西(写得不好)
  12. 如何在 CentOS 中添加、启用和禁用一个仓库
  13. 交互设计实用指南系列(9)— 一次点击
  14. Dell EMC Isilon命令行方式添加一个接口到pool
  15. ctf GetFlag
  16. Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗
  17. Unity3D人物模型精选——迷你卡通风格篇
  18. P2135 方块消除
  19. 骑士amp;魔法 java_程序员穿越异世界,骑士与魔法!
  20. 篮球比赛计时计分系统java_非常实用的java自动答题计时计分器

热门文章

  1. 基于Matlab模拟常见信号时频分析与模糊函数图
  2. 基础电路--电容阻抗公式
  3. Windows 在资源管理器中预览 SVG 图标
  4. 思维导图之六顶思考帽
  5. PBFT实用拜占庭容错算法详解
  6. DNG预设怎么导入Lightroom ?dng文件怎么导入lr?
  7. 机器人按照给定的指令c语言,【高训工控】专业课堂第二十四期——工业机器人调试基础:程序的构造与组成...
  8. 【Python机器学习】之 SVM 支持向量机算法(二)
  9. 多维数据驱动的粮食安全分析与智能决策系统研究与实践
  10. java 线程的说法_以下关于Java线程的说法,正确的是