1. // C语言版本扫雷
  2. #include <stdio.h>
  3.  
  4. #include <stdlib.h>
  5.  
  6. /*
  7. 1(0,0) 1(0,1) 0(0,2) 1(0,3) 1(0,4)
  8. @(1,0) 2(1,1) 1(1,2) 2(1,3) @(1,4)
  9. 1(2,0) 2(2,1) @(2,2) 3(2,3) 2(2,4)
  10. 0(3,0) 1(3,1) 3(3,2) @(3,3) 2(3,4)
  11. 0(4,0) 0(4,1) 2(4,2) @(4,3) 2(4,4)
  12.  
  13. */
  14. void bomb(void) {
  15. //扫雷 是一个矩形图形 可以用二维数组存储数据
  16. //存放雷 和 周围雷的个数
  17. int a[5][5] = {};
  18.  
  19. //记录5*5的矩阵中的坐标 有没有输入过
  20. int b[5][5] = {};
  21.  
  22. /* 判断输入雷的个数是否正确 不正确继续输入
  23. while (1) {
  24. printf("请输入雷的个数:(1-24)\n");
  25. int bombNumber;
  26. scanf("%d",&bombNumber);
  27. if (bombNumber>=1&&bombNumber<=24) {
  28. break;
  29. }
  30. }
  31. */
  32. //方法2:
  33. //标签
  34. InPutLabel:
  35. printf("请输入雷的个数:(1-24)\n");
  36. int bombNumber;
  37. scanf("%d",&bombNumber);
  38. if (bombNumber>=1&&bombNumber<=24) {
  39. //输入正确
  40. }else{
  41. //输入的超出范围
  42. goto InPutLabel;//goto 跳转语句
  43. //跳转到InPutLabel标签的位置 开始执行
  44. }
  45. /*
  46. @****
  47. *****
  48. **@**
  49. ****@
  50. *****
  51. */
  52. //摆擂 有多少个雷 那么就随机产生多少个雷(坐标不能一样)
  53. for (int i = 0; i < bombNumber; i++) {
  54. //随机产生坐标 坐标范围(0-4,0-4)
  55. int x = arc4random()%5;
  56. int y = arc4random()%5;
  57. //数字转化为数字字符 1+'0' -->'1'
  58. //判断随机坐标有没有摆过雷
  59. if (a[x][y] != '@'-'0') {
  60. //布擂 '@'-'0'表示雷
  61. a[x][y] = '@'-'0';
  62. //遍历雷的周围 让周围雷数+1 遍历九宫格 的八个方向
  63. //遍历 雷周围的矩阵
  64. for (int m = x-1; m <= x+1; m++) {
  65. for (int n = y-1; n <= y+1; n++) {
  66. //判断边界 和周围是不是雷
  67. if (m<0||m>4||n<0||n>4||a[m][n]=='@'-'0') {//超出边界 或者是雷
  68. //雷数不能+1;
  69.  
  70. }else{
  71. a[m][n]++;
  72. }
  73.  
  74. }
  75. }
  76. }else{
  77. //随机的恰好已经布过雷了得坐标
  78. i--;//重新随机
  79. }
  80. }
  81. //布雷之后
  82. //开始玩游戏
  83. //记录输入坐标的个数
  84. int count = 0;
  85. int winOrLose = 1;//1表示成功 0表示失败
  86. //循环输入 坐标
  87. while (1) {
  88. system("clear");
  89. //打印矩阵 5*5
  90. for (int i = 0; i < 5; i++) {
  91. for (int j = 0; j < 5; j++) {
  92. if (1 == b[i][j]) {//判断这个坐标有没有输入过
  93. //1表示输入过 那么就打印雷数 否则打印?
  94. //\t是一个制表符
  95. printf("%c(%d,%d)\t",a[i][j]+'0',i,j);
  96. }else{
  97. printf("?(%d,%d)\t",i,j);
  98. }
  99. }
  100. printf("\n");
  101. }
  102. printf("请输入坐标:例如 2 4\n");
  103. int bombX;
  104. int bombY;
  105. scanf("%d%d",&bombX,&bombY);
  106. //判断是否是雷
  107. if (a[bombX][bombY] == '@'-'0') {
  108. //雷
  109. winOrLose = 0;//失败
  110. break;//跳出循环
  111. }
  112. //不是雷 那么 执行下面
  113. if (b[bombX][bombY] != 1) {//判断坐标有没有输入过
  114. //1表示输入过 0 表示没有
  115. b[bombX][bombY] = 1;//记录输入过
  116.  
  117. count++;//无重复坐标个数
  118. }
  119. if (count == 5*5-bombNumber) {
  120. //表示扫雷成功
  121. winOrLose = 1;
  122. break;
  123. }
  124. }
  125. //结束之后再打印一次矩阵
  126.  
  127. for (int i = 0; i < 5; i++) {
  128. for (int j = 0; j < 5; j++) {
  129. if (1 == b[i][j]||winOrLose == 0) {
  130. //如果坐标输入过 或者 失败了 显示出来数字或者是雷
  131. printf("%c(%d,%d)\t",a[i][j]+'0',i,j);
  132. }else{
  133. printf("?(%d,%d)\t",i,j);
  134. }
  135. }
  136. printf("\n");
  137. }
  138. if (winOrLose) {//1
  139. printf("小样!技术不错...再接再厉\n");
  140. }else{
  141. printf("你得游戏是地理老师教得吧!\n");
  142. }
  143. return;
  144. }
  145.  
  146. int main(int argc, const char * argv[])
  147. {
  148. bomb();
  149. return 0;
  150. }

C 碎片十一 扫雷源码的更多相关文章

  1. 台哥原创:java 扫雷源码

    扫雷,十年前大学时候开发的,界面参照的电脑自带扫雷游戏. 一直是我最喜欢的单机游戏,现在微软的新系统都不能玩了. 幸好还有自己开发的,可以过下瘾.程序员就有这点好处嘛. ​ 这几年陆陆续续,把这个扫雷 ...

  2. 从壹开始微服务 [ DDD ] 之十一 ║ 基于源码分析,命令分发的过程(二)

    缘起 哈喽小伙伴周三好,老张又来啦,DDD领域驱动设计的第二个D也快说完了,下一个系列我也在考虑之中,是 Id4 还是 Dockers 还没有想好,甚至昨天我还想,下一步是不是可以写一个简单的Angu ...

  3. 十一.jQuery源码解析之.pushStack()

    pushStack()顾明思意,就是像桟中添加东西呗,现在看看他是如何添加东西的. 创建一个空的jQuery对象,然后把Dom元素集合放入这个jQuery对象中, 并保留对当前jQuery对象的引用. ...

  4. JAVA上百实例源码以及开源项目

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...

  5. JAVA上百实例源码网站

    JAVA源码包1JAVA源码包2JAVA源码包3JAVA源码包4 JAVA开源包1 JAVA开源包2 JAVA开源包3 JAVA开源包4 JAVA开源包5 JAVA开源包6 JAVA开源包7 JAVA ...

  6. jQuery-1.9.1源码分析系列(十一) DOM操作

    DOM操作包括append.prepend.before.after.replaceWith.appendTo.prependTo.insertBefore.insertAfter.replaceAl ...

  7. APP源码集中打包大放送!十一个千万级别APP源码随意处置!

    小伙伴们还在一个一个苦苦寻找各类APP源码吗?此贴集中打包最常用APP的源码,你想得到的APP,这里都有! 想做商城?这里有天猫! 想做同城服务?这里有大众点评! 想做外卖?这里有饿了么! 想做视频? ...

  8. 手机自动化测试:appium源码分析之bootstrap十一

    手机自动化测试:appium源码分析之bootstrap十一   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣 ...

  9. Python:游戏:扫雷(附源码)

    这次我们基于 pygame 来做一个扫雷,上次有园友问我代码的 python 版本,我说明一下,我所有的代码都是基于 python 3.6 的. 先看截图,仿照 XP 上的扫雷做的,感觉 XP 上的样 ...

随机推荐

  1. mysql auto reset

    参数说明: •相关参数说明: •dataSource: 要连接的 datasource (通常我们不会定义在 server.xml) defaultAutoCommit: 对于事务是否 autoCom ...

  2. 主线程与UI线程简介

    ---------------siwuxie095                             Java 程序的主线程     当 Java 程序启动时,一个线程立刻运行,该线程通常叫做程 ...

  3. C++中指向对象的常指针和指向常对象的指针

    指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变. Time t1(10,12,15),t2; Time * const ptr1=&am ...

  4. Spring IOC 巨多 非常 有用

    关联文章: 关于Spring IOC (DI-依赖注入)你需要知道的一切 关于 Spring AOP (AspectJ) 你该知晓的一切 <Spring入门经典>这本书无论对于初学者或者有 ...

  5. 点云视窗类CloudViewer

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=149 点云视窗类CloudViewer是简单显示点云的可视化工具类,可以让用 ...

  6. R中的统计模型

    R中的统计模型 这一部分假定读者已经对统计方法,特别是回归分析和方差分析有一定的了解.后面我们还会假定读者对广义线性模型和非线性模型也有所了解.R已经很好地定义了统计模型拟合中的一些前提条件,因此我们 ...

  7. keras安装windows版

    按照官网成功了.下面没有成功,貌似是 Anacode的问题 http://blog.csdn.net/hweiyi/article/details/70018317 http://blog.csdn. ...

  8. jquery抽奖插件+概率计算

    写了一个抽奖的jquery插件和计算概率的方法, 结合起来就是一个简单的概率抽奖, 不过实际项目中基本不会把抽奖概率的计算放在前端处理~. demo lottery.jquery.js $.fn.ex ...

  9. Raising Modulo Numbers(ZOJ 2150)

    这题其实就是快速求一个高次幂的模. 这是题目的答案 #include<iostream> #include<cmath> using namespace std; ]; ]; ...

  10. js或jQuery中 邮箱跳转的问题,跳转到指定邮箱(通过layui的ifram实现)

    对刚做的东西记个笔记 如果遇到同样问题解决起来又问题的欢迎留言 var emailtext = $("#TextBoxEmail").val();//获得要截取的值 var arr ...