界面绘制好后,雷数也布置了,接下来就是游戏的运行过程了,今天先不说具体过程,再来看看需要用到的辅助函数

先是简单的画红旗,鼠标右键的功能是画红旗,至此我们都是在使用函数自己绘图,效率是低,但有助于理解

void DrawRedFlag(int i, int j)
{setfillstyle(BS_SOLID);setfillcolor(RED);bar(8 + j * 20, 35 + i * 20, 8 + j * 20 + 5, 35 + i * 20 + 5);setcolor(BLACK);line(8 + j * 20, 35 + i * 20, 8 + j * 20, 35 + i * 20 + 10);
}

里面的坐标算好偏移,可以根据自己游戏的位置自行计算偏移坐标

接下来是重要的雷数统计,统计的是一个格子周围的八个格子的雷数

int MineStatistics(int i, int j)/*统计每个格子周围的雷数*/
{int nNUM = 0;if (i == 0 && j == 0)/*左上角格子的统计*/{if (Mine[0][1].num == 1)nNUM++;if (Mine[1][0].num == 1)nNUM++;if (Mine[1][1].num == 1)nNUM++;}elseif (i == 0 && j == 9)/*右上角格子的统计*/{if (Mine[0][8].num == 1)nNUM++;if (Mine[1][9].num == 1)nNUM++;if (Mine[1][8].num == 1)nNUM++;}elseif (i == 9 && j == 0)/*左下角格子的统计*/{if (Mine[8][0].num == 1)nNUM++;if (Mine[9][1].num == 1)nNUM++;if (Mine[8][1].num == 1)nNUM++;}elseif (i == 9 && j == 9)/*右下角格子的统计*/{if (Mine[9][8].num == 1)nNUM++;if (Mine[8][9].num == 1)nNUM++;if (Mine[8][8].num == 1)nNUM++;}else if (j == 0)/*左边第一列格子的统计*/{if (Mine[i][j + 1].num == 1)nNUM++;if (Mine[i + 1][j].num == 1)nNUM++;if (Mine[i - 1][j].num == 1)nNUM++;if (Mine[i - 1][j + 1].num == 1)nNUM++;if (Mine[i + 1][j + 1].num == 1)nNUM++;}else if (j == 9)/*右边第一列格子的统计*/{if (Mine[i][j - 1].num == 1)nNUM++;if (Mine[i + 1][j].num == 1)nNUM++;if (Mine[i - 1][j].num == 1)nNUM++;if (Mine[i - 1][j - 1].num == 1)nNUM++;if (Mine[i + 1][j - 1].num == 1)nNUM++;}else if (i == 0)/*第一行格子的统计*/{if (Mine[i + 1][j].num == 1)nNUM++;if (Mine[i][j - 1].num == 1)nNUM++;if (Mine[i][j + 1].num == 1)nNUM++;if (Mine[i + 1][j - 1].num == 1)nNUM++;if (Mine[i + 1][j + 1].num == 1)nNUM++;}else if (i == 9)/*最后一行格子的统计*/{if (Mine[i - 1][j].num == 1)nNUM++;if (Mine[i][j - 1].num == 1)nNUM++;if (Mine[i][j + 1].num == 1)nNUM++;if (Mine[i - 1][j - 1].num == 1)nNUM++;if (Mine[i - 1][j + 1].num == 1)nNUM++;}else/*普通格子的统计*/{if (Mine[i - 1][j].num == 1)nNUM++;if (Mine[i - 1][j + 1].num == 1)nNUM++;if (Mine[i][j + 1].num == 1)nNUM++;if (Mine[i + 1][j + 1].num == 1)nNUM++;if (Mine[i + 1][j].num == 1)nNUM++;if (Mine[i + 1][j - 1].num == 1)nNUM++;if (Mine[i][j - 1].num == 1)nNUM++;if (Mine[i - 1][j - 1].num == 1)nNUM++;}return nNUM;/*把格子周围一共有多少雷数的统计结果返回*/
}

这个功能的返回值就是这个各自周围的雷数,也就是扫雷点开后显示的数字

不是每个格子都有雷,还有连续的区域是没有雷的,所以要现实空白的格子

void ShowWhite(int i, int j)/*显示无雷区的空白部分*/
{if (Mine[i][j].flag == 1 || Mine[i][j].num == 0)/*如果有红旗或该格处理过就不对该格进行任何判断*/return;mineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/if (Mine[i][j].roundnum == 0 && Mine[i][j].num != 1)/*显示空格*/{DrawEmpty(i, j, 1, WHITE);Mine[i][j].num = 0;}elseif (Mine[i][j].roundnum != 0)/*输出雷数*/{DrawEmpty(i, j, 1, WHITE);_stprintf_s(randmineNUM, _T("%d"), Mine[i][j].roundnum);setcolor(RED);outtextxy(6 + j * 20, 32 + i * 20, randmineNUM);Mine[i][j].num = 0;/*已经输出雷数的格子用0表示已经用过这个格子*/return;}/*8个方向递归显示所有的空白格子*/if (i != 0 && Mine[i - 1][j].num != 1)ShowWhite(i - 1, j);if (i != 0 && j != 9 && Mine[i - 1][j + 1].num != 1)ShowWhite(i - 1, j + 1);if (j != 9 && Mine[i][j + 1].num != 1)ShowWhite(i, j + 1);if (j != 9 && i != 9 && Mine[i + 1][j + 1].num != 1)ShowWhite(i + 1, j + 1);if (i != 9 && Mine[i + 1][j].num != 1)ShowWhite(i + 1, j);if (i != 9 && j != 0 && Mine[i + 1][j - 1].num != 1)ShowWhite(i + 1, j - 1);if (j != 0 && Mine[i][j - 1].num != 1)ShowWhite(i, j - 1);if (i != 0 && j != 0 && Mine[i - 1][j - 1].num != 1)ShowWhite(i - 1, j - 1);
}

这些是辅助函数,基本就这些!

转载于:https://www.cnblogs.com/acgpiano/p/3980178.html

C语言新手写扫雷攻略3相关推荐

  1. C语言新手写扫雷攻略1

    工欲善其事,必先利其器,首先要准备好开发环境,既然是C语言,那就不是WinAPI的扫雷,就是纯的C语言开发,但是以前的C都是TC开发的,现在用肯定是过时很久了,但是也是有解决办法的,某些大神开发出Ea ...

  2. c语言探险游戏攻略,宝可梦探险寻宝新手必看攻略 助你早日脱坑

    宝可梦探险寻宝新手必看攻略,在方块风格的世界中,玩家可以收集同样方块风的宝可梦,收集材料让它们变强,然后探索更多的地图.游戏还是很有意思的,掌握正确的玩法可以事半功倍,萌新们速速来参考一下吧. 一.烹 ...

  3. C语言assert函数完全攻略

    断言assert函数,C语言assert函数完全攻略 对于断言,相信大家都不陌生,大多数编程语言也都有断言这一特性.简单地讲,断言就是对某种假设条件进行检查.在 C 语言中,断言被定义为宏的形式(as ...

  4. 微信攻城三国怎么找服务器,《攻城三国》怎么玩 新手必看攻略

    攻城三国怎么玩?作为一款卡牌策略游戏,希望这篇新手必看攻略,能够帮到广大刚刚入手这款游戏的玩家们. 主界面 主界面左上角展示玩家名称.等级.经验条及VIP等级,点击头像会弹出系统设置界面,可在此处修改 ...

  5. 龙之气息服务器维护,龙之气息攻略大全 龙之气息新手少走弯路攻略

    龙之气息进入游戏后首先选择宠物,一定要选那个血最多的,游戏前期能抗才能打,不然其他都是扯淡,剩下的装备以及发展路线,来和小编接着往下看. 1...龙之气息新手抱大腿攻略 新手进游戏选人物武器选手枪,做 ...

  6. java江湖壹_江湖壹怎么玩 江湖壹新手功力提升攻略

    江湖壹v1.0.2 类型:角色扮演大小:109.0M语言:中文 评分:5.0 标签: 立即下载 江湖壹新手可能不会太注重路线发展,总的来说变强就可以为所欲为,那么如何快速提升攻略,下面就是江湖壹新手功 ...

  7. fifa足球世界 服务器维护,FIFA足球世界:新手入门全攻略,指尖传控操作让你成为大神!...

    [游戏没有圈儿,吐槽与攻略]今天抽空体验了下<FIFA足球世界>这款手游,目前来讲还是比较满意的.很多玩家关心操作会不会蹩脚,现在来告诉你它的操作与PSV版的操作方式很相似,简化到没接触过 ...

  8. 游戏测试新手必看攻略

    游戏测试新人在刚接触测试,或者在游戏公司实习的童鞋们可以看看这篇攻略幺-看完这篇攻略我不敢说你就得到了测试的精髓,至少你会在实习时不会茫然无措. 1.在编写测试用例需要准确细致的了解模块的策划文档,策 ...

  9. 憎恨之心最强套装攻略_憎恨之心新手刷BOSS攻略 最强武器介绍[多图]

    憎恨之心(Animus)以恢弘的战斗背景打造最强劲的中世纪PK之战,每一个线路的BOSS战可以说非常的激烈了,那么小编就给大家带来最详细的BOSS战攻略吧. 适合蓝色支线地图,因为小怪少,最好打bos ...

最新文章

  1. 【CV秋季划】人脸识别经典难题介绍,抗遮挡,跨年龄,异质源,少样本等
  2. 点击回应、关闭确认以及另一种获取设备环境句柄的方法
  3. STL源码剖析 配接器
  4. 干货 | 机器学习算法在饿了么供需平衡系统中的应用
  5. 微型计算机中 辅助存储器通常包括,第7章 微型计算机存储器习题参考答案
  6. 清明赏春攻略——来一场技术踏青!
  7. iOS开发NSDecimalNumber的基本使用,加、减、乘、除、指数、比较
  8. 个人财务管理系统mysql_开发个人财务管理系统(一)建数据库
  9. qpsk调制matlab仿真,QPSK调制解调仿真
  10. 用ps换证件照照片底色
  11. short java_java基本数据类型short的使用(23)
  12. 计划bom表 java_ERP总结系列(BOM浅谈)
  13. 三亚适合几月份去玩 三亚必去的地方是哪里
  14. 强化学习 原理与Python实现(四)
  15. 我的webgl学习之路(一)
  16. java函数修饰符_Java 函数 面向对象,修饰符,类,构造方法,this
  17. CentOS下Qt安装
  18. 关于工程导论的读书计划表
  19. 组合数学——特征方程与线性递推方程
  20. web前端开发 学成在线首页案例+源码

热门文章

  1. HDU 4951 Multiplication table(2014 Multi-University Training Contest 8)
  2. iOS之Storyboard导航大揭秘(1)
  3. IIS配置跨服务器迁移
  4. 人的一生有三件事不能等
  5. CV05-ResNet笔记
  6. 区块链技术入门,都涉及哪些编程语言?
  7. 区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明
  8. SunlightChain 区块链宣言
  9. 一个Solidity源文件的布局
  10. python添加数组元素_Python列表附录–如何向数组添加元素,并附带示例说明