对于C语言学习者来说,在完成C语言初级学习之后,扫雷游戏是一个很好的知识的总结和练习。

扫雷即在一个棋盘中,随机放入一定数量的雷,玩家通过输入坐标,得到坐标上的信息(以此点为中心四周8个格子内地雷数量的总和),来判断此格子是否有地雷,从而依照此法排查出整个棋盘上所有的地雷。

本项目采用9*9的棋盘,放入地雷的数量可以依照个人设置。

首先声明总的头文件

#ifndef _UTILI_H_
#define _UTILI_H_#include<stdio.h>
#include<time.h>   //后面需要地雷的随机放置,需要时间函数#endif /* _UTILI_H_ */

接下来我们需要对整个项目所有需要用的函数进行声明,放置在一个头文件中:

#ifndef _GAME_H_  //条件编译
#define _GAME_H_#include"utili.h"#define QUIT 0    //0退出 1 进入游戏
#define GAME 1#define ROW 9    //定义9*9的扫雷界面
#define COL 9
#define ROWS ROW+2  //左右两边加1行1列,为了统计周围雷个数
#define COLS COL+2#define GAME_LEVEL 20void InitBoard(char board[ROWS][COLS], char set);    //设置界面
void DisplayBoard(char board[ROWS][COLS], int row, int col);   //展示界面void SetMine(char mine[ROWS][COLS], int row, int col);   //设置雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);  //找雷void StartGame();#endif /* _GAME_H_ */

整个游戏各个部分功能进行编写代码,分别实现不同的功能:

#include"Game.h"void InitBoard(char board[ROWS][COLS], char set)   //初始化棋盘,在后台执行扫雷任务时
{for(int i=0; i<ROWS; ++i)                  //实际上是在11 * 11 的棋盘 上进行的          {for(int j=0; j<COLS; ++j){board[i][j] = set;}}
}void DisplayBoard(char board[ROWS][COLS], int row, int col)
{for(int i=0; i<=row; ++i)    //在界面显示时,我们的棋盘实际展示的时9 * 9的界面{printf("%d ", i);}printf("\n");for(int i=1; i<=row; ++i){printf("%d ", i);for(int j=1; j<=col; ++j){printf("%c ", board[i][j]);}printf("\n");}
}void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = GAME_LEVEL;srand(time(0));             //通过随机数获得棋盘上随机的地雷放置while(count){int x = rand() % row + 1; //1 ~ ROW     //取余,保证放置在棋盘内int y = rand() % col + 1; //1 ~ COLif(mine[x][y] == '0'){mine[x][y] = '1';             //有地雷的格子内0被赋值为1,但注意这个1为字符count--;}}
}int GetMineCount(char mine[ROWS][COLS], int x, int y)   //获得以格子为中心周围8个格子地雷数
{return mine[x-1][y-1] + mine[x-1][y] + mine[x-1][y+1] + mine[x][y-1] + mine[x][y+1] + mine[x+1][y-1] + mine[x+1][y] + mine[x+1][y+1]- (8*'0');    //将字符转换为数字
}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int win = 0;int x, y;while(win < row*col-GAME_LEVEL)   //判断赢的条件{printf("请输入要排雷的位置:>");scanf("%d %d", &x, &y);if(x<1||x>row || y<1 || y>col){printf("输入的排雷位置非法,请重新输入.....\n");continue;}if(mine[x][y] == '1'){printf("很遗憾,你被Over.\n");DisplayBoard(mine, ROW, COL);break;}//统计雷的个数int count = GetMineCount(mine, x, y);show[x][y] = count + '0';system("cls");DisplayBoard(show, ROW, COL);win++;}if(win >=  row*col-GAME_LEVEL){printf("恭喜你,排雷成功.\n");}
}void StartGame()
{//定义棋盘char mine[ROWS][COLS];char show[ROWS][COLS];//初始化棋盘InitBoard(mine, '0');InitBoard(show, '*');//埋雷SetMine(mine, ROW, COL);//显示棋盘DisplayBoard(show, ROW, COL);//扫雷FindMine(mine, show, ROW, COL);
}

编写主函数:

#include"Game.h"int main(int argc, char *argv[])
{int select = 1;while(select){printf("*************************************\n");printf("*          简 易 扫 雷 游 戏        *\n");printf("*************************************\n");printf("*             [1] Play              *\n");printf("*             [0] Quit              *\n");printf("*************************************\n");printf("请选择:>");scanf("%d", &select);if(select == QUIT)break;if(select != GAME){printf("输入的操作有误,请重新输入......\n");continue;}//开始游戏StartGame();}printf("游戏结束,拜拜.\n");return 0;
}

代码在VS2015上正常执行,整个游戏过程没出现问题。

游戏还可以有许多改进的地方,如增加计时功能,点到附件无雷的格子时展示所有相邻的无雷格子等,后续还可以丰富完善。

C语言 扫雷游戏(代码+注释)相关推荐

  1. c语言扫雷游戏代码_C语言游戏详解---扫雷游戏

    扫雷游戏大家应该都不陌生,一个扫雷游戏要满足的基本要求是: 1. 第一次扫的位置不能是雷 2. 每展开一个位置要显示该位置周围雷的个数 3. 若该位置周围没雷,要把周围展开 该游戏的界面是10X10的 ...

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

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

  3. c语言小游戏代码矿井逃生_如何选择编程语言和逃生教程炼狱

    c语言小游戏代码矿井逃生 A few weeks ago, I posted about my experience attempting to learn JavaScript, C#, Pytho ...

  4. 【180720】微软Windows扫雷游戏代码

    源码简介   本源码是一个微软Windows扫雷游戏代码,可选择难度级别:初级.中级.高级. 注意事项: 1.开发环境为Visual Studio 2010,使用.net 2.0开发. 源码下载地址: ...

  5. c语言扫雷源代码简单版,C语言扫雷游戏源代码

    C语言扫雷游戏源代码 /* 模拟扫雷游戏 */ #include #include #include #include #include #include #include union REGS re ...

  6. C语言自动生成代码注释:koroFileHeader插件

    C语言自动生成代码注释 2.配置插件 3.使用快捷键 以前写代码,只会用 //this is a add function void add(int a,int b) {return a+b; } 因 ...

  7. qt扫雷鼠标c语言中文网,基于C语言实现的扫雷游戏代码

    /* 模拟扫雷游戏 */ #include #include #include #include #include #include #include union REGS regs; int siz ...

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

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

  9. c语言扫雷游戏构成原理,扫雷游戏的C语言实现

    在学习C语言初期,我们可以找一些平常玩的游戏进行简单的C语言实现.今天就和大家分享一下关于windows中扫雷游戏的实现. 在正式写代码前,简单说一下对这个游戏的分析: 1.先提示的应该是一个简单的m ...

  10. c语言小游戏代码(c语言小游戏代码简单)

    c语言编写小游戏请提供俄罗斯方块,坦克大战之类的小游戏的程序的c 应该是做出方块函数 然后以 这个方块 为单位 绘制 俄罗斯方块的 积木图形 ,在制作游戏界面的时候 也以方块长度为单位长度绘制 二维数 ...

最新文章

  1. SQL Server 2008(三) T-SQL(常用全局变量)
  2. 一个程序来比较cuda/c在GPU/CPU的运行效率
  3. 18个设计精美的旅游及酒店网站案例
  4. HDU3068 回文串 Manacher算法
  5. 移动超级sim卡 无法下载卡_共迎未来无限可能!5G超级SIM卡亮相2019中国移动全球合作伙伴大会...
  6. oracle存储过程(带参数的存储过程)
  7. redis 的线程模型
  8. 医疗管理核心制度之 十八、信息安全管理制度
  9. Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看
  10. Excel怎么转换成PDF?这两招轻松解决
  11. 软件测试常见的开发模型
  12. 《数据结构》邓俊辉 网课习题详细解析(第五章:二叉树)
  13. FX5U程序框架模板(10轴) 程序采用梯形图+ST语言写的 RS485通信
  14. 义乌购平台API,item_search_img - 按图搜索义乌购商品(拍立淘)
  15. Invalid initial heap size: -Xms128m-Xmx512
  16. 《操作系统》工作集详解
  17. e5cz温控表中文说明书_欧姆龙温控器e5cz说明书 OMRON温控表E5EC说明书
  18. 给edittext每行加下划线
  19. 这应该是最全的软件测试工程师必读书籍
  20. 专业学习与职业发展之我见(二)

热门文章

  1. linux 运行 ccs,ccs_linux
  2. JAVA语言程序设计
  3. VB 6.0 可以使用MQTT
  4. 最详细Python批量字典暴力破解zip密码
  5. Mapx 具体使用方法
  6. 华大智造与Illumina测序平台比较:全基因组测序性能具有高度一致性
  7. java json序列化日期类型
  8. 数字信号处理实验一 系统响应及系统稳定性
  9. switchhosts 文件下载
  10. 钢结构节点板计算小程序_节点应用程序目录结构