大家好,这几天心血来潮想做一个扫雷程序,于是花费我20分钟时间做了一个,这可能是目前最简单的一个了(也是最简陋的),新手容易理解。

直接上代码

#include<cstdio>
#include<windows.h>
#include<cstdlib>
#include<ctime>
using namespace std;
char a[17][31],c[17][31];
int b[17][31];
int m,n,l,ch=5,flag,l1,l2,sl;
void kg(int x,int y){if(a[x][y]=='*')return ;if(x-1!=0&&y-1!=0)if(c[x-1][y-1]=='.'){l2++;c[x-1][y-1]=' ';if(b[x-1][y-1]==0)kg(x-1,y-1);}if(x-1!=0)if(c[x-1][y]=='.'){l2++;c[x-1][y]=' ';if(b[x-1][y]==0)kg(x-1,y);}if(x-1!=0&&y!=m)if(c[x-1][y-1]=='.'){l2++;c[x-1][y-1]=' ';if(b[x-1][y-1]==0)kg(x-1,y-1);}if(y-1!=0)if(c[x][y-1]=='.'){l2++;c[x][y-1]=' ';if(b[x][y-1]==0)kg(x,y-1);}if(y!=m)if(c[x][y+1]=='.'){l2++;c[x][y+1]=' ';if(b[x][y+1]==0)kg(x,y+1);}if(x!=n&&y-1!=0)if(c[x+1][y-1]=='.'){l2++;c[x+1][y-1]=' ';if(b[x+1][y-1]==0)kg(x+1,y-1);}if(x!=n)if(c[x+1][y]=='.'){l2++;c[x+1][y]=' ';if(b[x+1][y]==0)kg(x+1,y);}if(x!=n&&y!=m)if(c[x+1][y+1]=='.'){l2++;c[x+1][y+1]=' ';if(b[x+1][y+1]==0)kg(x+1,y+1);}
}
int num(int x,int y){if(a[x][y]=='*')return 0;int ans=0;if(x-1!=0&&y-1!=0)if(a[x-1][y-1]=='*')ans++;if(x-1!=0)if(a[x-1][y]=='*')ans++;if(x-1!=0&&y!=m)if(a[x-1][y+1]=='*')ans++;if(y-1!=0)if(a[x][y-1]=='*')ans++;if(y!=m)if(a[x][y+1]=='*')ans++;if(x!=n&&y-1!=0)if(a[x+1][y-1]=='*')ans++;if(x!=n)if(a[x+1][y]=='*')ans++;if(x!=n&&y!=m)if(a[x+1][y+1]=='*')ans++;return ans;
}
int main(){srand((unsigned)time(NULL));for(int i=1;i<=16;i++)for(int j=1;j<=30;j++)a[i][j]=' ',c[i][j]='.';while(ch!=1&&ch!=2&&ch!=3&&ch!=4){printf("1、初级(9X9,10颗雷)\n");printf("2、中级(16X16,40颗雷)\n");printf("3、高级(30X16,99颗雷)\n");printf("4、自定义\n");printf("5、图例\n");printf("请输入模式编号:");scanf("%d",&ch);if(ch==1)m=9,n=9,l=10;else if(ch==2)m=16,n=16,l=40;else if(ch==3)m=30,n=16,l=99;else if(ch==4){printf("请输入列数(9-30):");scanf("%d",&m);if(m>30)m=30;else if(m<9)m=9;printf("请输入行数(9-16):");scanf("%d",&n);if(n>16)n=16;else if(n<9)n=9;printf("请输入雷数(10-99):");scanf("%d",&l);if(l>99)l=99;else if(l<10)l=10;if(l==n*m)l--; }else if(ch==5){printf("加载中...\n\n");system("cls");printf("\".\"-->此格子未被点击过\n");printf("\"*\"-->雷\n");printf("\" \"-->空\n");printf("\"&\"-->被标记为雷\n");printf("\"?\"-->被标记为不知道\n\n\n");Sleep(3000);}else{printf("\n输入有误\n请重新输入!");Sleep(500);system("cls");}}printf("加载中...\n\n");sl=l;system("cls");printf(" %d X %d , %d 颗雷\n",m,n,l);for(int i=1;i<=l;i++){int x,y;x=rand()%n;if(x==0)x=n;y=rand()%m;if(y==0)y=m;if(a[x][y]=='*')i--;a[x][y]='*';}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)b[i][j]=num(i,j);}while(1){printf("剩余%d颗雷\n\n",sl);printf("   ");for(int i=1;i<=m;i++)printf("%d ",i/10);printf("\n   ");for(int i=1;i<=m;i++)printf("%d ",i%10);printf("\n  ┍");for(int i=1;i<=m-1;i++)printf("--");printf("\n");for(int i=1;i<=n;i++){printf("%02d|",i);for(int j=1;j<=m;j++){if(flag==1){printf("%c|",a[i][j]);continue;}if(c[i][j]=='.'||c[i][j]=='?'||c[i][j]=='&')printf("%c|",c[i][j]);else if(b[i][j]!=0)printf("%d|",b[i][j]);elseprintf("%c|",a[i][j]);}printf("\n  |");for(int i=1;i<=m;i++)printf("--");printf("\n");}if(flag==1){printf("\n\n窗口在5秒后自动关闭\r");for(int i=5;i>=0;i--){Sleep(1000);printf("窗口在%d秒后自动关闭\r",i);}Sleep(100);return 0;}printf("\n\n");int x=100,y=100;while(x>n||x<1){printf("请输入进行操作的行:");scanf("%d",&x);if(x>n||x<1)printf("请重新输入!\n");}while(y>m||y<1){printf("请输入进行操作的列:");scanf("%d",&y);if(y>m||y<1)printf("请重新输入!\n");}ch=0;while(ch!=1&&ch!=2&&ch!=3){printf("请选择进行的操作:\n1、探查\n2、排雷\n3、标记为不确定\n输入操作:");scanf("%d",&ch);if(ch!=1&&ch!=2&&ch!=3)printf("请重新输入!\n");}if(ch==1){if(c[x][y]=='&')sl++;c[x][y]=' ';system("cls");if(a[x][y]=='*'){printf("游戏结束\n恭喜您踩到雷了!\n\n");flag=1;continue;}elsel2++;if(n*m-l2==l){printf("游戏结束\n恭喜您排完了所有雷!\n\n");sl=0;flag=1;continue;}if(b[x][y]==0){kg(x,y);}}else if(ch==2){c[x][y]='&';system("cls");sl--;if(a[x][y]=='*')l1++;if(l1==l){printf("游戏结束\n恭喜您排完了所有雷!\n\n");sl=0;flag=1;continue;}}else if(ch==3){if(c[x][y]=='&')sl++;c[x][y]='?';system("cls");}}return 0;
}

这里162行和165行随机生成雷时用到了随机数

x=rand()%n;
y=rand()%m;

什么意思呢,就是随机生成一个数并且对n或m取模,因为随机数会非常大,会超过格子的行和宽。

需要用到头文件:

#include<cstdlib>

还需要先播种随机种子

srand((unsigned)time(NULL));

这个需要用到头文件:

#include<cstdlib>
#include<ctime>

在多行还用到了清屏操作

system("cls");

这个需要用到头文件:

#include<cstdlib>

在多行还用到了暂停操作

Sleep(3000);     //注意这里“S”要大写,括号里面是暂停时间,单位毫秒(ms)

这个需要用到头文件:

#include<windows.h>    //这个头文件不包含在万能头文件里“#include<bits/stdc++.h>”

剩下的内容应该都通俗易懂

对了还有一个

printf("\n\n窗口在5秒后自动关闭\r");
for(int i=4;i>=0;i--){Sleep(1000);printf("窗口在%d秒后自动关闭\r",i);
}
Sleep(100);
return 0;

这里有个自动关闭窗口的程序,时间可以自行修改(注意for里面定义的i的初始值为时间-1)

这个程序需要在外面运行才有用,因为在编译器运行会有单击继续,只有在外面才会自动关闭

最后,总体运行效果

如果你觉得这篇文章写的很好,记得关注,点赞,评论,转发

源程序   C++扫雷源程序https://download.csdn.net/download/m0_48463380/85551552

C++实现扫雷(最简单版)相关推荐

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

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

  2. java简单版扫雷实现

    java简单版扫雷实现 实现原理 直接贴代码 成果展示 实现原理 扫雷实现第一步就是生成棋盘,第二步就要生成每个棋子,定义棋子属性是否是地雷,第三部就是给不是地雷的棋子赋值(附近多少地雷). 直接贴代 ...

  3. 游戏编程学Python(8)— 扫雷(文字版)

    通过游戏编程学Python(7)- 井字棋(下) 通过游戏编程学Python(7)- 井字棋(上) 通过游戏编程学Python(番外篇)- 单词小测验 前言 前一段时间扫雷游戏挺火的,可惜问哥没有赶上 ...

  4. win10怎么玩经典扫雷?繁星软件园推荐大家试试Windows7Games吧,亲测好用的扫雷Win10电脑版下载!!!

    扫雷Win10电脑版(Windows7Games)是专门为微软最新版本的Windows 10/11操作系统打造的一款非常不错的消除类PC休闲小游戏安装包, Windows7Games游戏安装包为中文版 ...

  5. LeetCode 11. Container With Most Water--Java 解法--困雨水简单版

    LeetCode 11. Container With Most Water–Java 解法 此文首发于我的个人博客:LeetCode 11. Container With Most Water–Ja ...

  6. luogu P3808 【模板】AC自动机(简单版)

    二次联通门 : luogu P3808 [模板]AC自动机(简单版) /*luogu P3808 [模板]AC自动机(简单版)手速越来越快了10分钟一个AC自动机一遍过编译 + 一边AC感觉不错我也就 ...

  7. 008 数据结构逆向—数组(简单版)

    文章目录 前言 逆向背包数组 一维背包数组 二维背包数组 数组结构分析 总结 前言 对于游戏逆向来说,核心需求其实就只有两个 追踪游戏数据 定位游戏功能call 对于追踪游戏数据来说,单纯从一个寄存器 ...

  8. 【模板】AC自动机(简单版)

    题目背景 通过套取数据而直接"打表"过题者,是作弊行为,发现即棕名. 这是一道简单的AC自动机模板题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据 ...

  9. P3808,P3796-[模板]AC自动机(简单版/加强版)

    简单版 题目链接: https://www.luogu.org/problem/P3808 题目大意 nnn个模式串,一个文本串,求有多少个模式串出现在文本串里. 解题思路 普通ACACAC自动机不解 ...

  10. C++学习之路 | PTA乙级—— 1089 狼人杀-简单版(精简)

    1089 狼人杀-简单版 (20 分)以下文字摘自<灵机一动·好玩的数学>:"狼人杀"游戏分为狼人.好人两大阵营.在一局"狼人杀"游戏中,1 号玩家 ...

最新文章

  1. sql serve存储过程
  2. 对于tnsping的连接超时的功能补充
  3. python游戏服务器引擎_KBEngine游戏服务器引擎环境配置
  4. python制作excel表格-手把手教你用Python处理Excel表格
  5. Web三个域对象的区别
  6. 那些用Go实现的分布式事务框架之DTM
  7. mysql 密码文件改成密文_数据库密码弄成密文
  8. java编程executor框架_Java并发编程 - Executor框架(一)Executor,
  9. 一台电脑两种jdk_jdk和jre有什么区别?
  10. linux c正则
  11. NV12转化为BMP函数
  12. 细数门店客流量统计的那些技术
  13. 面试题系列(三)-socket
  14. python 查询oracle数据库返回具体字段名
  15. 销售人员必看~~三个经典电话销售案例
  16. 2022清明节放假安排来了,制定假日计划可用云便签软件
  17. java 错误代码1603_java更新时出现错误代码1603的解决方法
  18. in-pet流浪动物远程救助领养平台
  19. 将 C++ 对象暴露给 QML
  20. 【5G核心网】 PDU Session Modification PDU会话修改

热门文章

  1. 【UVM基础】TLM1.0 通信机制(port/export/imp/analysis_xxx)快速上手指南
  2. ubuntu 编译安装opencv官网教程
  3. dell中小企业商用台式机Vostro4667 win10家庭中文版重装成win7版
  4. 计算机视觉——一种现代方法(第二版)学习笔记
  5. JAVA对图片进行等比/非等比压缩处理
  6. 百变精灵、灵萌仙宠,《神都降魔》带您遨游仙界!
  7. Java 方式实现词云显示
  8. 临淄区青少年科技馆物联云创客项目
  9. 蓝牙BLE芯片PHY6222之I2C主从通信
  10. 阿里云域名申请注册与绑定