C语言实现------扫雷游戏
#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", ¤tmaxtime);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语言实现------扫雷游戏相关推荐
- 用c语言编写最大最小值_C语言学习教程,用C语言编写扫雷游戏
本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...
- c++扫雷游戏代码_C语言学习教程,用C语言编写扫雷游戏
本文实例为大家分享了C语言实现扫雷游戏及其优化的具体代码,供大家参考,具体内容如下 关于扫雷优化 1.核心思想:使用两个二维数组进行设计,一个用于显示,一个用于后台雷的布置. 2.使用宏常量,后期可以 ...
- 超详细分解c 语言——实现扫雷游戏(详解)
之前利用三子棋程序,介绍探讨了 c语言简单游戏编写主要模块及使用方法. 今天,我们就利用这个经典扫雷游戏,来加强对于程序思路的编写及思路. 目录 前引 游戏规则介绍 一.基本游戏思路(游戏实现方法) ...
- c语言扫雷游戏计时功能_C语言实现扫雷游戏(可以自动展开)
前言 本篇博客主要介绍如何使用C语言实现扫雷游戏. 一.游戏规则 在一张ROW行COL列的地图上存在MINE_COUNT个地雷.玩家输入坐标翻开格子,若没有踩雷,则计算此格子周围8个格子的地雷总数,并 ...
- c语言—实现扫雷游戏
文章目录 什么是扫雷游戏 一.实现思路 二.头文件 三.主函数文件 1.菜单函数 2.主函数 四.游戏文件 1.地图初始化 2.展示地图 3.埋雷函数 4.判断该位置附近雷的个数 5.主游戏函数 五. ...
- 用C语言实现扫雷游戏
用C语言实现扫雷游戏 -扫雷游戏的基本思路 1.打印游戏的菜单 2.为了便于后面排查周围雷的个数,初始化两个二维数组,一个作为向玩家显示的面板,一个作为布雷的面板.两个数组嵌套在一起.如下图所示: 3 ...
- C语言编写扫雷游戏,超简单
C语言编写扫雷游戏,超简单 1.扫雷游戏的流程 2.代码编写 3.总结 通过学习C语言的基础知识,基本上是理解了大部分内容,现在就通过所学的知识,写个简单的扫雷游戏,加深对基础知识的理解,正所谓实践是 ...
- C语言实现扫雷游戏(超详细讲解+全部源码)
电子信息 工科男 一点一点努力! 文章目录 前言 一.游戏介绍 二.游戏设计思路 二.具体步骤 1.创建test.c和game.c源文件以及 game.h头文件 2.创建菜单 3.创建雷盘 4.初始化 ...
- c语言程序设计扫雷游戏实验报告,C语言程序设计扫雷游戏实验报告.doc
C语言程序设计扫雷游戏实验报告 中南大学 程序设计基础实践报告 题 目 设计一个和window系统类似的小游戏[挖地雷] 学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 ...
- c语言扫雷程序设计流程图,c语言程序设计扫雷游戏实验报告
c语言程序设计扫雷游戏实验报告 中南大学 程序设计基础实践报告 题 目 设计一个和window系统类似的小游戏[挖地雷]学生姓名 张兰兰 学 院 信息科学与工程学院 专业班级 物联网工程1301班 完 ...
最新文章
- [csu/coj 1078]多个序列的最长公共子序列
- JLOI2015 战争调度
- [C++]constexpr函数
- Swoole 源码分析——内存模块之内存池
- SAP Spartacus里unit list tree节点collapse all按钮的实现逻辑
- unicode编码 php,PHP 的 UNICODE 编码和解码
- CentOS 7 搭建swagger Api文档管理系统
- 2015,工作几年的心得
- php编写一个投票程序,实例学习PHP之投票程序篇(一)
- python类型提示模块包_Python checktypes包_程序模块 - PyPI - Python中文网
- 数量场的等值面与矢量场的矢量线的一些基本的东西(写得不好)
- 如何在 CentOS 中添加、启用和禁用一个仓库
- 交互设计实用指南系列(9)— 一次点击
- Dell EMC Isilon命令行方式添加一个接口到pool
- ctf GetFlag
- Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗
- Unity3D人物模型精选——迷你卡通风格篇
- P2135 方块消除
- 骑士amp;魔法 java_程序员穿越异世界,骑士与魔法!
- 篮球比赛计时计分系统java_非常实用的java自动答题计时计分器