扫雷

当我们学习到了数组的时候,我们可以尝试写出三子棋(见前文)和扫雷这两个小游戏,今天我就带来如何用c语言写出一份扫雷来
(不得不说,作为一个C语言差点挂科的人,写完扫雷成就感十足好吧!)
那么就开始吧!
首先,通过写完这两个小游戏,我发现其实写个程序的第一步就是构建好框架,分成不同的函数,然后逐个攻坚,最后,你就发现,you get it!
和三子棋一样,将整个工程分为game.c,game.h和mine sweeping.c三个文件。如下图

另外,对于扫雷这个程序,还有几点需要提前注意
1 为了能计算不为雷的地方周围八个空有几个雷,我们要保证在边界的字符周围也有八个字符,我们需要采用在一个大数组里面输出一个小数组,像下图,输出绿色框里的数组

所以,我们需要定义几个数,如下图

#define ROW 9
#define COL 9
#define ROWS 11
#define COLS 11

2 在实现程序时,要考虑玩家,比如打印函数中要加上打印序列的功能,玩家认为的位置与其实际数组位置不同等
第一步
让我们先来看一下mine sweeping.c文件

#define  _CRT_SECURE_NO_WARNINGS
#include"game.h"
int main()
{srand((unsigned int)time(NULL));int input = 0;do{menu();//打印菜单函数scanf("%d",&input);switch (input){case 1:game();//游戏主函数 break;case 0:printf("Exit game\n");default:printf("Input error,please input again\n ");}} while (input);
}

这是一段很简单的代码,然后呢,大概框架写好后,我们就可以开始逐步实现game()函数了
第二步
先来简单看一下game中有些什么小函数及其作用。

void game()
{char arr1[ROWS][COLS];//数组一负责真实记录雷的地方char arr2[ROWS][COLS];//数组二负责混淆玩家init(arr1, ROWS, COLS, '0');//因为数组一是用来记录雷的,所以我们简单采用字符'0'和'1'来记录,所以现将数组一初始化为'0'init(arr2, ROWS, COLS, '*');//因为数组二是用来记录雷的,所以我们将数组二初始化为'*'   int minenum = 0;//这是玩家想要雷的数量setmine(arr1,arr2,ROW,COL,minenum);//这是负责放雷的函数//printboard(arr1, ROW, COL);这是打印函数,在写代码的时候可以用来测量代码块是否正确//printboard(arr2, ROW, COL);findmine(arr1,arr2, ROW, COL,minenum);//这是玩家找雷的函数。return ;
}

第三步
让我们来逐个看一下小函数的代码
1 菜单函数

void menu()
{printf("************************\n");printf("******   1.play   ******\n");printf("******   0.exit   ******\n");printf("************************\n");printf("PLease input 1/0 :  ");
}

2 初始化函数

void init(char arr[ROWS][COLS],int rows,int cols,char ch)
{int i = 0;for (; i < rows; i++){for (int j = 0; j < cols; j++){arr[i][j] = ch;}}
}//很简单就是遍历初始化

3 打印函数

void printboard(char arr[ROWS][COLS], int row, int col)
{int i = 1;for(i = 0; i <= col; i++){printf("%d ", i);//打印第一排序列}printf("\n");for (i=1; i <=row; i++){printf("%d ",i);//打印第一列序列int j = 1;      for (j=1; j <=col; j++){printf("%c ", arr[i][j]);}printf("\n");}
}

4 放置雷的函数

void setmine(char arr1[ROWS][COLS],char arr2[ROWS][COLS],int row, int col,int minenum)
{int x, y,i;printf("How many mines you want to choose,please input (mine number is form 1 to 80): ");//1到80是因为我打印的是9*9的图scanf("%d",&minenum);for (i = 0; i < minenum; i++){x = rand() % row + 1;//随机数实现地雷随机y = rand() % col + 1;arr1[x][y] = '1';//将地雷设为字符'1'}printboard(arr2, ROW, COL);//打印数组二迷惑玩家
}

5 找雷的函数

void findmine(char arr1[ROWS][COLS],char arr2[ROWS][COLS],int row, int col,int minenum)
{int x, y;int i = 0;while (i<ROW*COL-minenum)//玩家可操作次数是可以计算的{printf("Please input you coordinate : ");scanf("%d%d",&x,&y);if (arr1[x][y] == '0'){int i = 0; int j = 0;char ch = '0';for (i = x - 1; i < x + 2; i++){for (j = y - 1; j < y + 2; j++){if (arr1[i][j] == '1'){ch+=1;}}}//计算某个不为地雷的字符周围八个空有几个地雷arr2[x][y] = ch;//并将此值赋给数组二的该位置的值printboard(arr2,ROW,COL);//打印数组二}else{printf("You die\n");printboard(arr1, ROW, COL);return ;//return 的作用是结束代码}i++;           }printf("You win\n");//若循环完毕仍没有失败,那么就赢了
}

最后
最后到这,代码就完毕了,希望对看文章的你有所帮助,一起加油吧!(最后附上几张代码图和运行图以供参考)





好了,拜拜啦!

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

  1. c语言字符游动程序,C语言实现扫雷小游戏详解

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位 ...

  2. 只用c语言不用图片的游戏,使用C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 游戏规则 在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利, 如果踩到雷,游戏结束 设计思路 1.创建 ...

  3. 【C语言】扫雷小游戏详解

    [C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...

  4. C语言实现扫雷小游戏 纯小白 非黑窗口

    C语言实现一个普通的扫雷小游戏 纯小白所编(含代码非黑窗口!) 扫雷 主要功能 1.创建一个图形界面 2.了解扫雷游戏的原理 3.随机生成雷的位置 4.为整个数组加密,并在雷周围的位置加一 5.导入图 ...

  5. 用c语言实现扫雷小游戏。

    相信小伙伴在学习c语言的时候想做一些小趣事,下面就是用c语言来实现一个扫雷小游戏,不过是简单的实现扫雷(只是通过数组的方式来实现),适合新手学习. 我用的是vs敲的这个代码,大家可以用vs运行(可能有 ...

  6. C语言实现扫雷小游戏(排雷时可展开)

    游戏介绍 扫雷想必大家都听说过吧?我们今天写的小游戏就是扫雷,只不过我们只使用C语言写.我们能够做到的就是实现扫雷的基本逻辑,没有图形化界面. 源代码 这次游戏程序的写法和上一次的三子棋的模式很像,也 ...

  7. 用C语言实现扫雷小游戏(附上思路+项目展示+源代码)

    文章目录 前言 一.扫雷小游戏整体思路讲解. 二.game.c各游戏功能函数的讲解 1.InitBoard 初始化数组函数讲解 2.DisplayBoard 打印格子函数讲解 3.Setmine 电脑 ...

  8. C语言编写扫雷小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992377 扫 ...

  9. C语言实现扫雷小游戏(下)(用递归实现了展开)

      穷且益坚,不坠青云之志.   上篇博客实现了鸡肋的扫雷小游戏,不能实现雷盘(场)的展开,体验不是很好,这篇博客对其进行优化了,实现了展开功能. 文章目录 一.新的头文件 二.游戏框架 三.功能函数 ...

  10. C语言实现扫雷小游戏(具体步骤+具体说明)

    C语言实现扫雷目录 一.游戏介绍 三.具体步骤 1.菜单页面 2.初始化雷盘 3.打印雷盘 4.布置雷 5.排查雷 7.统计所选位置周围八个位置中雷的个数 四.完整代码 1.test.c-扫雷游戏的测 ...

最新文章

  1. GitHub遭攻击滥用以代管网钓套件
  2. windows 7系统搭建本地SVN服务器的过程
  3. java 读取控制台_Java从控制台读入数据的几种方法总结
  4. 虚拟网站禁用php,虚拟主机php程序fsockopen函数被禁用
  5. zabbix监控添加主机,报警、监控的设置
  6. Enable mod_rewrite in apache2.2
  7. 使用 C# 编写简易 ASP.NET Web 服务器 ---- 模拟IIS的处理过程
  8. 配置LACP模式链路聚合
  9. jxls模板hashmap_使用Java + jxls基于模板导出excel
  10. 以《数据安全法》为背景的全息数据安全解决方案
  11. 六类网线钳能压五类水晶头吗_六类网线可以用五类水晶头不?
  12. 芯片Timing sign-off Corner理解
  13. 技术分享 | 如何实现小程序与 App 的跳转
  14. MAC 清除 DNS 缓存
  15. RxSwift极简入门
  16. 1000句英语经典口语(3)
  17. 【复变函数与积分变换】第1章 复数——1.1 复数的定义及其四则运算
  18. IIS 端口netstat -ano命令
  19. JAVA判断当前日期是否是工作日,还是节假日
  20. 建议收藏!最全自然语言处理时事简报

热门文章

  1. U3D游戏开发效率和UE4相比哪个高?
  2. python 三维栅状图_基于OpenGL的二维矢量地图可视化技术研究
  3. sis最新地址获取方法_拳头最新FPS游戏VALORANT资格免费获取方法
  4. 深入理解设计模式-设计模式七大原则
  5. 网站做SEO优化的5个理由
  6. Linux 服务器上传文件到阿里网盘
  7. MoviePy问题解决汇总
  8. 关于医学影像中的轴位面(横断面)、冠状面、矢状面
  9. 学c语言学生智商要搞么,作为一个学渣,哥来告诉你如果你智商不够该怎么办...
  10. IIS本地FTP服务器搭建