文章目录

  • 什么是扫雷游戏
  • 一、实现思路
  • 二、头文件
  • 三、主函数文件
    • 1.菜单函数
    • 2.主函数
  • 四、游戏文件
    • 1.地图初始化
    • 2.展示地图
    • 3.埋雷函数
    • 4.判断该位置附近雷的个数
    • 5.主游戏函数
  • 五、代码运行展示
    • 1.开始界面
    • 2.游戏开始
    • 3.游戏结束
  • 六、游戏原码

什么是扫雷游戏

基于百度百科的解释为:

《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。

一、实现思路

扫雷的地图大小不定,埋的雷个数也不一定。地图越大,雷的个数越多越难。
为了能够较好的调整和改变扫雷的参数,故采用宏定义的方式定义游戏参数。用多文件能够较好地实现游戏程序,也更加清晰。
因为需要在地图上埋雷和判断雷的个数,所以如果只采用一张地图难以实现,这里采用两张一模一样的地图。其中一张用来埋雷,另外一张用来显示地图和选择位置雷的个数。
但是由于判断周围雷的个数时,由于中间和最边上的区域判断雷个数的方法不一样,所以在实现代码的过程中,将地图在显示的基础上增加两行。减去上下两行和最左右两行,剩下的区域用于游戏。
关于雷计算方法的解释:

判断一个位置附近雷的个数时,需要判断八个位置的情况,由于靠近边缘的位置缺少了几个位置,所以为了统一计算方法,简单代码过程,牺牲一些内存空间。上下左右都增加一行或一列的无雷区域后,用于游戏的区域无论哪个区域其计算方法都一致,从而就只需要一种计算方式。

二、头文件

提示:
通过改变宏定义数字的大小即可改变扫雷的行列数以及炸弹数哦!
还可以改变棋盘图标的样式哈

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>#define ROW 10      //行数
#define COL 10       //列数
#define START '*'    //位置的样式
#define MINE 35     //雷的个数extern void game();

#include<stdlib.h>
#include<time.h>

这两个头文件是为了采用时间作为随机数所需要的库函数

三、主函数文件

1.菜单函数

void Menu()//游戏菜单
{printf("+--------------------+\n");printf("|      扫雷游戏      |\n");printf("|  1.PLAY    2.EXIT  |\n");printf("+--------------------+\n");printf("请输入您的选择# ");
}

2.主函数

int main(void)
{Menu();int x = 1;while (x){scanf("%d", &x);switch (x){case 1:game();//开始游戏Menu();break;case 2:x = 0;//结束循环break;default:printf("您的输入有误,请重新输入# ");break;}}printf("bye~bye~\n");system("pause");return 0;
}

四、游戏文件

1.地图初始化

        memset(show_board, START, sizeof(show_board));//用START来初始化具有sizeof()个数元素的数组memset(mine_board, '0', sizeof(mine_board));

或者用两个循环嵌套给二维数组每个元素进行赋值

void Init_Board(char arr[][COL],char x)
{int row = 0;int col = 0;for (;row < ROW;row++){for (;col < COL; col++){arr[row][col] = x;}}
}

2.展示地图

显示地图的函数

static void Show_Board(char arr[][COL+2])//显示扫雷图函数
{system("cls");//清屏printf("  ");for (int i = 1;i < COL+1;i++){printf("  %2d", i);}Line();for (int i = 1;i < ROW+1;i++){printf("%-2d |", i );//靠左的整型格式控制for (int j = 1;j < COL+1;j++){printf(" %c |", arr[i][j]);}Line();}
}

输出间隔线的子函数,用于减少重复代码

static void Line()//行之间的间隔线
{printf("\n    ");for (int i = 0;i < COL;i++){printf("----");}printf("\n");
}

3.埋雷函数

因为采用的随机数对地图进行埋雷,难免会有重复值,在对随机坐标进行赋值时,需要先判断此处是否已经有雷。没有雷才埋雷,埋雷个数才能减一。

static void Set_Board(char arr[][COL+2])//埋雷函数,用'1’表示雷,'0'表示没有雷
{int row = 0;int col = 0;int x = MINE;while (x) {row = rand() % ROW + 1;col = rand() % COL + 1;if (arr[row][col] != '1')//判断此处没有雷才能减少循环次数{arr[row][col] = '1';x--;}}
}

4.判断该位置附近雷的个数

因为采用的是字符数组,在进行个数计算时,可以巧妙的运用ascii码表进行计算和最后显示个数。

static char Judge_Board(char arr[][COL+2], int row, int col)//判断此处雷的个数
{return arr[row - 1][col - 1] + arr[row - 1][col] + arr[row - 1][col + 1] + \arr[row][col + 1] + arr[row + 1][col + 1] + arr[row + 1][col] + \arr[row + 1][col - 1] + arr[row][col - 1] - 7*'0';//因为类型是字符,要用ascii码转换
}

八个位置上的数减去‘0’的ascii码值后,只剩下一个‘0’的ascii码值。并且每有一个地雷其ascii码值就会加一,其对应的字符相应的加一。

5.主游戏函数

进行游戏进程判断时,需要讨论四个方面

  1. 玩家的输入是否合法
  2. 判断是否踩雷
  3. 没有踩雷后,判断周围雷的个数
  4. 判断是否胜利
void game()
{srand((unsigned long)time(NULL));//种随机数种子char show_board[ROW+2][COL+2];//用来展示的二维数组char mine_board[ROW+2][COL+2];//用来埋雷的二维数组memset(show_board, START, sizeof(show_board));//用START来初始化具有sizeof()个数元素的数组memset(mine_board, '0', sizeof(mine_board));Set_Board(mine_board);//埋地雷Show_Board(show_board);//展示地图int x = ROW*COL-MINE;//计算除了地雷剩余的位置int row = 0;int col = 0;while (x){printf("请输入选择的位置<x,y># ");scanf("%d %d", &row, &col);if (row <= 0 || row > ROW || col <= 0 || col > COL)//验证是否是有效的位置坐标{printf("输入错误,");continue;//跳过循环剩下所有的代码}if (show_board[row][col] != START)//判断是否重复输入{printf("重复输入,");continue;}if (mine_board[row][col] == '1')//判断是否踩中雷{Show_Board(mine_board);//踩中雷后,把雷图展示出来printf("You lose!\n");break;}show_board[row][col] = Judge_Board(mine_board, row, col);//记录该位置周围雷的个数Show_Board(show_board);//显示该位置周围雷的个数x--;//有效游戏次数,剩余位置减一}if (x == 0){printf("恭喜你,挑战成功!\n");}
}

五、代码运行展示

1.开始界面

2.游戏开始

3.游戏结束

全部程序展示完毕,欢迎您的宝贵建议

六、游戏原码

需要原码的童鞋点击此处c语言实现扫雷游戏原码

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 原生Android也能做Web开发了
  2. netty里集成spring注入mysq连接池(二)
  3. BZOJ 1683.City skyline 城市地平线
  4. 互联网企业安全之端口监控
  5. 深入理解磁盘文件系统之inode
  6. 关于node的聊天室错误
  7. ajax的url怎么将后缀补上_球形门锁怎么拆装?球形门锁安装的方法都包括哪些?
  8. 什么是一致性Hash算法? 1
  9. EOS合约开发 - 钱包篇
  10. mac 爱普生打印机驱动_爱普生l301打印机驱动Mac版-爱普生L301驱动Mac版下载 V9.31-PC6苹果网...
  11. 科普 | 一片晶圆可以生产多少芯片?
  12. linux幸运字符,删好友后幸运字符怎么找回来
  13. (翻译)缩略图(Thumbnail)
  14. 安全问题层出不穷 加密手机悄然兴起
  15. 小福利,带你快速入门sumifs多条件求和函数、设置下拉菜单结合vlookup函数双条件查找数据、excel的切片器(表关联)、数据透视表、数据透视图
  16. 【java】JavaFX从零开始实现拼图小游戏
  17. [ARC120E]1D Party
  18. Android调用系统自带的文件管理器,打开指定路径
  19. pip设置代理 豆瓣源
  20. 程序员专属表情包,正在疯传中!

热门文章

  1. ubuntu 卸载pytorch_科学网—Pytorch installation on Ubuntu18.04 - 高琳琳的博文
  2. 2021级高级语言期末考复盘
  3. 第一性原理·非线性成长·人生模式
  4. mysql查询数学成绩信息_【MySQL】:利用DQL查询表中的数据
  5. 我来一下对比阿里云服务器和腾讯云服务器的优劣和区别
  6. 立法禁食猫狗肉属本末倒置
  7. 真相,为什么大厂一边裁员,一边招人?
  8. 全球及中国包装产业需求规模与投资发展策略研究报告2022版
  9. 浮动的简介——CSS
  10. linux中的信号处理与SROP