C 碎片十一 扫雷源码
// C语言版本扫雷
#include <stdio.h> #include <stdlib.h> /*
1(0,0) 1(0,1) 0(0,2) 1(0,3) 1(0,4)
@(1,0) 2(1,1) 1(1,2) 2(1,3) @(1,4)
1(2,0) 2(2,1) @(2,2) 3(2,3) 2(2,4)
0(3,0) 1(3,1) 3(3,2) @(3,3) 2(3,4)
0(4,0) 0(4,1) 2(4,2) @(4,3) 2(4,4) */
void bomb(void) {
//扫雷 是一个矩形图形 可以用二维数组存储数据
//存放雷 和 周围雷的个数
int a[5][5] = {}; //记录5*5的矩阵中的坐标 有没有输入过
int b[5][5] = {}; /* 判断输入雷的个数是否正确 不正确继续输入
while (1) {
printf("请输入雷的个数:(1-24)\n");
int bombNumber;
scanf("%d",&bombNumber);
if (bombNumber>=1&&bombNumber<=24) {
break;
}
}
*/
//方法2:
//标签
InPutLabel:
printf("请输入雷的个数:(1-24)\n");
int bombNumber;
scanf("%d",&bombNumber);
if (bombNumber>=1&&bombNumber<=24) {
//输入正确
}else{
//输入的超出范围
goto InPutLabel;//goto 跳转语句
//跳转到InPutLabel标签的位置 开始执行
}
/*
@****
*****
**@**
****@
*****
*/
//摆擂 有多少个雷 那么就随机产生多少个雷(坐标不能一样)
for (int i = 0; i < bombNumber; i++) {
//随机产生坐标 坐标范围(0-4,0-4)
int x = arc4random()%5;
int y = arc4random()%5;
//数字转化为数字字符 1+'0' -->'1'
//判断随机坐标有没有摆过雷
if (a[x][y] != '@'-'0') {
//布擂 '@'-'0'表示雷
a[x][y] = '@'-'0';
//遍历雷的周围 让周围雷数+1 遍历九宫格 的八个方向
//遍历 雷周围的矩阵
for (int m = x-1; m <= x+1; m++) {
for (int n = y-1; n <= y+1; n++) {
//判断边界 和周围是不是雷
if (m<0||m>4||n<0||n>4||a[m][n]=='@'-'0') {//超出边界 或者是雷
//雷数不能+1; }else{
a[m][n]++;
} }
}
}else{
//随机的恰好已经布过雷了得坐标
i--;//重新随机
}
}
//布雷之后
//开始玩游戏
//记录输入坐标的个数
int count = 0;
int winOrLose = 1;//1表示成功 0表示失败
//循环输入 坐标
while (1) {
system("clear");
//打印矩阵 5*5
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (1 == b[i][j]) {//判断这个坐标有没有输入过
//1表示输入过 那么就打印雷数 否则打印?
//\t是一个制表符
printf("%c(%d,%d)\t",a[i][j]+'0',i,j);
}else{
printf("?(%d,%d)\t",i,j);
}
}
printf("\n");
}
printf("请输入坐标:例如 2 4\n");
int bombX;
int bombY;
scanf("%d%d",&bombX,&bombY);
//判断是否是雷
if (a[bombX][bombY] == '@'-'0') {
//雷
winOrLose = 0;//失败
break;//跳出循环
}
//不是雷 那么 执行下面
if (b[bombX][bombY] != 1) {//判断坐标有没有输入过
//1表示输入过 0 表示没有
b[bombX][bombY] = 1;//记录输入过 count++;//无重复坐标个数
}
if (count == 5*5-bombNumber) {
//表示扫雷成功
winOrLose = 1;
break;
}
}
//结束之后再打印一次矩阵 for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (1 == b[i][j]||winOrLose == 0) {
//如果坐标输入过 或者 失败了 显示出来数字或者是雷
printf("%c(%d,%d)\t",a[i][j]+'0',i,j);
}else{
printf("?(%d,%d)\t",i,j);
}
}
printf("\n");
}
if (winOrLose) {//1
printf("小样!技术不错...再接再厉\n");
}else{
printf("你得游戏是地理老师教得吧!\n");
}
return;
} int main(int argc, const char * argv[])
{
bomb();
return 0;
}
C 碎片十一 扫雷源码的更多相关文章
- 台哥原创:java 扫雷源码
扫雷,十年前大学时候开发的,界面参照的电脑自带扫雷游戏. 一直是我最喜欢的单机游戏,现在微软的新系统都不能玩了. 幸好还有自己开发的,可以过下瘾.程序员就有这点好处嘛. 这几年陆陆续续,把这个扫雷 ...
- 从壹开始微服务 [ DDD ] 之十一 ║ 基于源码分析,命令分发的过程(二)
缘起 哈喽小伙伴周三好,老张又来啦,DDD领域驱动设计的第二个D也快说完了,下一个系列我也在考虑之中,是 Id4 还是 Dockers 还没有想好,甚至昨天我还想,下一步是不是可以写一个简单的Angu ...
- 十一.jQuery源码解析之.pushStack()
pushStack()顾明思意,就是像桟中添加东西呗,现在看看他是如何添加东西的. 创建一个空的jQuery对象,然后把Dom元素集合放入这个jQuery对象中, 并保留对当前jQuery对象的引用. ...
- JAVA上百实例源码以及开源项目
简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...
- JAVA上百实例源码网站
JAVA源码包1JAVA源码包2JAVA源码包3JAVA源码包4 JAVA开源包1 JAVA开源包2 JAVA开源包3 JAVA开源包4 JAVA开源包5 JAVA开源包6 JAVA开源包7 JAVA ...
- jQuery-1.9.1源码分析系列(十一) DOM操作
DOM操作包括append.prepend.before.after.replaceWith.appendTo.prependTo.insertBefore.insertAfter.replaceAl ...
- APP源码集中打包大放送!十一个千万级别APP源码随意处置!
小伙伴们还在一个一个苦苦寻找各类APP源码吗?此贴集中打包最常用APP的源码,你想得到的APP,这里都有! 想做商城?这里有天猫! 想做同城服务?这里有大众点评! 想做外卖?这里有饿了么! 想做视频? ...
- 手机自动化测试:appium源码分析之bootstrap十一
手机自动化测试:appium源码分析之bootstrap十一 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...
- Python:游戏:扫雷(附源码)
这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...
随机推荐
- iOS开发者福利之精品源码汇总!免费下载
汇总一些看着不错的源码,有需要的朋友过来下载吧!{:4_102:} 1.用swift制作的色彩炫丽的进度条-KDCircularProgressKDCircularProgress是使用swift制作 ...
- 关于cin
今天同学调试一个简单的程序的时候发现了问题,我们两个讨论的时候弄出了好多乐子 #include <iostream> using namespace std; int main() { ; ...
- JavaScript之闭包(重新认识)
最近又重新学习了闭包,发现之前没有深刻理解作用域链,学习作用域链后对闭包才可以做到真正的理解. 闭包是指有权另一个函数作用域中变量的函数.要理解闭包首先理解作用域链. 执行环境 ...
- Windows 8 64位系统 在VS2010 32位软件上 搭建 PCL点云库 开发环境
Windows 8 64位系统 在VS2010 32位软件上 搭建 PCL点云库 开发环境 下载PCL For windows 软件包 到这个网站下载PCL-All-In-One Installer: ...
- (分享)一位资深程序员大牛给予Java初学者的学习路线建议
摘自:http://bbs.itheima.com/thread-333038-1-1.html 如果你是在校学生,务必要在学好基础(比如计算机系统.算法.编译原理等等)的前提下,再考虑去进行下面的学 ...
- jquery提供的数据提交方式2-ajax
以前介绍过ajax提交方式.但仅仅是个例子,今天将详细介绍jquery中的$.ajax,$.get,$.post方法. 一,首先介绍$.ajax方法参数(以下参数来自:http://www.cnblo ...
- 开源文字识别软件tesseract
1.下载4.0软件,下一步下一步到成功: 2.安装之后配置环境变量,Path中添加安装路径(默认:C:\Program Files (x86)\Tesseract-OCR) 3.新增语言库的环境变量, ...
- ASP.NET MVC 小牛之旅4:ASP.NET MVC的运行生命周期
ASP.NET MVC的运行生命周期大致分成三大过程:(1)网址路由对比. (2)运行Controller与Action. (3)运行View并回传结果. 4.1网址路由对比 当iis收到http请求 ...
- nginx配置同一域名下,共存2个nodejs项目
项目背景: 1.官网需要改版,使用nodejs nuxt框架进行重构 2.官网改版没有全部完成.但需要上线首页 项目需求: 1.让首页内容显示为新项目 2.让老官网的内容可以被访问到(比如www.n. ...
- Note: Improving Restore Speed for Backup Systems that Use Inline Chunk-Based Deduplication
思路/方法 Measuring restore speed 提出了speed-factor,用以衡量存储速度. Container capping 限制恢复文件时使用的container个数,为了保证 ...