专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

C语言开发一篇文章带你还原童年,扫雷游戏完整源码分析

  想必屏幕前的你,肯定玩过windows系统自带的那个游戏,扫雷
  回想当年,我根本没看懂这个游戏是怎么玩的
  比起扫雷,三维弹球对我更有吸引力
  跑题了
  本篇博客就让我们一起来试试,如何通过C语言代码,制作出一个扫雷游戏se1。游戏程序主函数
  在编写这类游戏代码时,我们要用到的主函数基本是一致的
  扫雷游戏的主函数和猜数字游戏的主函数相差很小voidmenu()简易目录{printf();printf(1。play0。exit);printf();}intmain(){intinput0;do{menu();printf(请选择:);scanf(d,input);switch(input){case1:game();实现游戏的函数break;case0:printf(退出游戏);break;default:printf(输入错误);break;}}while(input);return0;}2。游戏实现原理
  想写好一串代码,首先我们要知道扫雷游戏需要通过什么方式来实现
  我们需要一个9x9的棋盘,用于生成我们的雷以及玩家的游玩
  在c语言中当然无法直接产生这样的画面
  但我们可以同符号或者来代替网格,用1和0来表示有无雷
  如果我们只生成一个棋盘,那1和0会直接显示出来,达不到隐藏的效果
  所以我们需要用二维数组生成两个棋盘,一个用于存放雷,一个用于玩家的游玩charmine〔ROWS〕〔COLS〕;雷区布置charshow〔ROWS〕〔COLS〕;玩家看到的界面
  扫雷游戏我们使用头文件源文件的形式撰写代码
  这样写代码的优点在于后续我们可以直接通过更改。h文件中的数组,从而更改我们的格子大小
  如:改成12x12的游玩界面,改变雷区布雷个数等等
  所以我们需要在game。h中定义这些符号includestdio。hincludestdlib。hincludetime。hdefineROW9defineCOL9defineROWSROW2defineCOLSCOL2
  同时我们要在主函数的最上面引用这个自己写的头文件
  只要把库函数头文件放入game。h文件,在其他源文件中只需引用game。h
  不需要再次引用stdio。h、stdlib。h之类includegame。h棋盘大小为什么需要11x11?
  你可能注意到了,在生成数组的时候,我使用了ROWS,其值为ROW2
  我们最终展示的只是9x9的游戏界面,但生成的棋盘其实是11x11的
  这是因为我们需要在mine数组中实现扫描雷区的操作
  玩过扫雷游戏的你肯定知道:在你点击一个格子的时候,如果这个格子不是雷
  它会显示一个数字,告诉你它周围的8个格子中有几颗雷
  如图所示:
  在C语言中,我们可以用函数统计周围8个格子中雷’1’的个数
  但是如果你来到边缘,那就出现问题了
  如果我们想统计边缘的格子周边有几颗雷,就会遇到这种溢出数组的情况
  此时代码会报错
  为了避免这个问题,我们可以在原来9x9的基础上在周围加一圈空白的格子
  也就是代码所示的ROW(行)COL(列)都要2的情况defineROW9defineCOL9defineROWSROW2defineCOLSCOL2游戏过程
  这里简单梳理一下我们的游戏过程
  (1)玩家选择开始游戏
  (2)生成两个棋盘,一个放置雷扫描雷,一个向玩家展示游戏界面
  (3)玩家输入坐标,选择排雷位置
  (4)有雷玩家被炸死,游戏结束;无雷显示周边有几颗雷,游戏继续
  (5)所有雷被排出,游戏胜利
  3。游戏代码实现
  接下来就进入我们的游戏代码部分31。初始化和打印初始化扫雷InitBoard(mine,ROWS,COLS,0);InitBoard(show,ROWS,COLS,);打印扫雷DisplayBoard(mine,ROW,COL);DisplayBoard(show,ROW,COL);
  我们需要初始化两个棋盘,其中雷区初始化为0(0代表无雷),展示区初始化为’’,用代替界面
  同时我们打印这两个棋盘,查看初始化效果
  因为这是我们的自定义函数,所以需要在。h文件中定义函数,在另外一个。c文件中包含函数的实现
  初始化棋盘voidInitBoard(charboard〔ROWS〕〔COLS〕,introws,intcols,charset);打印voidDisplayBoard(charboard〔ROWS〕〔COLS〕,introw,intcol);
  初始化函数和打印函数比较简单,使用for语句达成我们的需求voidInitBoard(charboard〔ROWS〕〔COLS〕,introws,intcols,charset){inti0;intj0;for(i0;irows;i){for(j0;jcols;j){board〔i〕〔j〕set;}}}voidDisplayBoard(charboard〔ROWS〕〔COLS〕,introw,intcol){inti0;intj0;printf(扫雷游戏);打印列号for(i0;icol;i){printf(d,i);}printf();for(i1;irow;i)只打印中心的99方格{printf(d,i);打印行号for(j1;jcol;j)只打印中心的99方格{printf(c,board〔i〕〔j〕);}printf();}printf();}
  需要注意的是我们的最后打印棋盘的时候是从i1开始的,这样就能避开添加的空白边缘区域,只打印中心的99方格
  同时我们添加了列号和行号,这样能让玩家清除的知道自己应该输入什么坐标
  32。布置雷区布置雷SetMine(mine,ROW,COL);
  同样的,我们需要在game。h中定义这个函数布置地雷voidSetMine(charmine〔ROWS〕〔COLS〕,introw,intcol);
  在game。c中写入自定义函数的实现放置雷voidSetMine(charmine〔ROWS〕〔COLS〕,introw,intcol){intcountEASYCOUNT;while(count){intxrand()row1;intyrand()col1;if(mine〔x〕〔y〕0){mine〔x〕〔y〕1;count;}}}
  这里面出现了一个前面没有提到的变量,EASYCOUNT
  本来这个位置只是个10
  但如果我们想更改布雷个数,那每次都需要更改这里的10,后面的代码中也需要更改,非常麻烦
  所以我们改为使用一个自定义变量,在game。h中定义这个变量的值defineEASYCOUNT10
  这个值就代表我们布置雷的个数了33。玩家排查雷在主函数中引用这个函数FindMine(mine,show,ROW,COL);需要把mine数组中排查的雷放入show在game。h中定义这个函数voidFindMine(charmine〔ROWS〕〔COLS〕,charshow〔ROWS〕〔COLS〕,introw,intcol);
  因为我们需要把mine数组中排查出的雷的个数放入show数组中打印出来
  所以这里我们需要把两个数组都传送过去
  1。输入排查的坐标
  2。检查坐标处是不是雷
  是雷boom!炸死游戏结束
  不是雷统计坐标周围有几个雷存储排雷的信息到show数组,游戏继续voidFindMine(charmine〔ROWS〕〔COLS〕,charshow〔ROWS〕〔COLS〕,introw,intcol){intx0;inty0;while(1){printf(请输入排雷坐标:);scanf(dd,x,y);判断坐标是否正确if(x1xrowy1ycol){if(mine〔x〕〔y〕1){printf(很遗憾,你被炸死了);DisplayBoard(mine,ROW,COL);break;}else{不是雷的情况下,统计坐标周围有几个雷intcountgetminecount(mine,x,y);show〔x〕〔y〕count0;}}else{printf(坐标错误,请重新输入);}}}
  注意,这里面我们需要添加一个代码来判断坐标合法性
  我们的棋盘是9x9,玩家要是输入一个(99,99)的坐标,那肯定不在数组中的,是无效的
  我们需要提醒玩家他输错了‘0’的作用show〔x〕〔y〕count0;
  你可能会对这行代码感到疑惑
  为什么要在count后面上一个‘0’?
  这里就和我们ascii码表有关了
  因为我们初始化数组和布置雷的时候,我们给数组传入的都是1和0这两个符号,并不是数字!
  但是在show数组中我们需要给玩家显示一个数字的字符
  这里面我们提供的是1的字符,并不是1它本身
  而我们在计算周边雷的个数的时候,传回来的是一个具体的数字
  观察表格,你会发现数字和对应的字符中间,都差了48
  而48恰好是字符’0’对应的ASCII码值
  所以我们需要用count加上字符’0’,以此在界面中向玩家展示周边8格有几颗雷34。系统扫描雷
  如何把玩家选择的格子周边的雷扫描出来呢?
  设玩家的选择的坐标为x和y
  我们只需要把这些坐标全部在二维数组中键入,就能逐个扫描出雷的个数统计雷的个数staticintgetminecount(charmine〔ROWS〕〔COLS〕,intx,inty){returnmine〔x1〕〔y1〕mine〔x1〕〔y〕mine〔x1〕〔y1〕mine〔x〕〔y1〕mine〔x〕〔y1〕mine〔x1〕〔y1〕mine〔x1〕〔y〕mine〔x1〕〔y1〕80;}
  这里因为我们扫描出来的也是‘1’的字符,系统中是字符1的ascii码值49
  所以我们需要减去8个字符‘0’,这样就能得到雷的个数的数字
  (然后在之前的那个函数中接受,count‘0’,在show数组中显示)
  这个函数是在玩家排查雷的函数之前的
  因为在主函数中我们不需要使用这个自定义函数,所以不需要在game。h中定义
  我们想让它只在game。c中生效,所以用static修饰它
  static的作用
  1。修饰局部变量
  2。修饰全局变量
  3。修饰函数
  上面的代码其实还少了一个东西
  我们需要判断玩家什么时候胜利雷区的0(无雷方块)全部被玩家找出,玩家就胜利了intwin0;while(winrowcolEASYCOUNT)
  这里我们需要更改的是whlie函数
  其中rowcolEASYCOUNT指方格总数减去雷的个数,得到的是无雷方块的个数
  玩家每成功排除一个无雷方块,win就会加一个数字else{不是雷的情况下,统计坐标周围有几个雷intcountgetminecount(mine,x,y);show〔x〕〔y〕count0;显示排查出来的信息DisplayBoard(show,ROW,COL);win;}
  当win达到无雷方块个数的时候,whlie循环就会停止
  随后我们判断玩家是否胜利,如果胜利,就打印棋盘,让玩家知道雷的位置if(winrowcolEASYCOUNT){printf(恭喜你,游戏胜利!);DisplayBoard(mine,ROW,COL);}
  这里必须要判断,因为你失败了也是会跳出循环的!
  到此,我们的扫雷代码就是完成了4。查看结果
  这里我作弊,将雷的个数设置为80并打印出布置雷之后的棋盘
  输入最后一个雷的位置,系统提示我们游戏胜利
  输入雷的坐标后,也会提示你被炸死了
  到这里我们可以确认代码是编写成功了!
  对啦对啦!另外的话为了帮助大家,轻松,高效学习C语言C,我给大家分享我收集的资源,从最零基础开始的教程到C语言项目案例,帮助大家在学习C语言的道路上披荆斩棘!可以来我粉丝群领取哦
  编程学习书籍分享:
  编程学习视频分享:
  整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!
  对于CC感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些CC的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

中信建投重点关注贵金属投资机会中信建投12月19日研报表示,当地时间12月14日,美联储宣布加息50bp,加息步伐如期放缓,加息二阶导正式转负,名义利率拐点初现。经济预期概要(SEP)报告将美国2023年实际G长安160周年叩开世界之门作者赵文华长安,一个国人心中神圣的名字,它是家国情怀的缩影,是中华文明的延绵,更是中华民族工业的精神脊梁。历史的车轮滚滚向前。1862年11月的某一天,随着松江城外龙门寺传出的阵阵省钱又安全,压缩空气储能会成为主流吗?图片来源视觉中国文昆仲资本,作者闾琤,编辑狮刀作为动力电池的核心原材料,被誉为白色石油的锂价格已经高不可攀了。先是从今年年初以来,国内电池级碳酸锂和氢氧化锂价格均已实现翻倍,其中氢远洋出售成都太古里的三点启示张雅楠文如果让中国的年轻人挑选最潮流的城市商业地标,成都太古里一定名列前茅,这里不仅常年出没着时尚前卫的明星和网红,而且,因为超强的国际化品牌级次和出色的开放式街区运营,成为了外国土地真的卖不动了,楼市销售跌幅扩大,还远远没有见底最近,全国今年最后一轮土地拍卖的结果出来了,总体而言,不容乐观。前两天,广州第四轮集中供地,最终,上架的6宗地块以5宗成交1宗流拍。这和之前重庆成都的拍卖情况差不多,几乎都是底价成2022年是完美风暴,但2023年亚洲可能会处于顺风亚洲经济和市场在2022年遭遇了一场几乎完美的风暴。众所周知,美联储大举加息和美元升值给经济和市场表现带来了阻力,与此同时,欧洲的能源危机推高了生活成本。疫情对全球供应链持续产生影263款产品,覆盖29个省级行政区,爆发下的惠民保仍面临三大挑战263款产品,覆盖29个省级行政区。这是近日发布的2022城市定制型商业医疗保险(惠民保)知识图谱(下称知识图谱)中列出的截止2022年12月1日我国惠民保产品的发展数据。自201江苏仪征税收助力数聚仪征大数据产业作为信息产业的核心之一,是新时代经济高质量发展的强劲动力。为助力江苏省仪征市打造华东地区大数据产业新高地,该市税务部门依托税收数据云平台,精准筛选符合条件的大数据企业,结关键时刻他们预判对了未来文慧净投资路上往往难言一帆风顺,游戏规则注定了一赢二平七亏。2022年,经济无论是内部的,还是外部的,都面临着疫情的反复冲击。下游需求低迷,造成全产业链层层砍单。地产砍完,消费电子上财500强企业竞争力排名国药居首,阿里京东被挤出前十12月19日,上海财经大学500强企业研究中心公开2022上财中国500强企业竞争力指数。相比去年,今年前十榜单有新变动。今年中国医药集团有限公司登上了上财500强企业竞争力榜首,十年中央公园,房价退潮中的逆流砥柱2022年依然接近尾声,这一年里的重庆二手房市场称得上风雨飘摇,在各方因素的作用下,二手房的价格整体呈现夸张的下跌趋势,这让许多二手房卖家在这一年中叫苦不迭。图源网络而环顾整个山城
两异姓兄弟,从丁点本钱做小生意,直到巨富,会做生意更会做人有人想做生意,可惜苦于没有本钱,无法下手。不仅现代人如此,古人们也是如此,但有些人,的确是经营好手,用很小的本钱和从不起眼的小生意做起,后来做到很大的买卖。下面就一个例子,或许对做黄晓明母亲控制欲太强,儿子婚变后她伤透了心,婆媳关系难以和谐黄晓明母亲控制欲太强,儿子婚变后她伤透了心,婆媳关系难以和谐黄晓明母亲控制欲太强,Angelababy婆媳关系难和谐!2015年10月8日,一场名为啊的世纪婚礼震惊了整个娱乐圈,吴每日GIF动图糟糕,对笑起来的姑娘还真的没有抵抗力糟糕,对笑起来的姑娘还真的没有抵抗力这是什么东西,属实给我吓到了这个设计可以呀,又省力又省空间,给我来十个!又名黄蛇,喜水现在已经好久没有见到过萤火虫了,何况这种萤火虫可以直接触摸安倍是替罪羊?枪杀安倍后,山上的母亲终于说话了日本前首相安倍晋三几日前被枪杀在奈良街头的消息,估计全世界都知道了。在被枪杀后,人们纷纷探寻凶手枪杀安倍的真实动机。后来,被在现场逮捕的凶手山上彻也称,他恨自己的母亲参加了世界和平一个母亲的忏悔2022年7月8日,随着两声枪响,日本一个重量级的男人倒下去,另一个如蝼蚁般卑微的男人出现在公众视野。演讲中的安倍晋三嫌疑人山上彻也山上彻也,奈良市人,80后,未婚,无子女,目前是赵振兴664分,赵振中674分,赵振华654分,三胞胎母亲身份不简单前言叮咚,叮咚2022年7月10日下午,家住湖南省衡阳市的谭妈妈,从邮递员手中接过两封来自中国科学院大学(简称国科大)的录取通知书,不禁喜极而泣。她的大儿子赵振兴以664的高分,被胡琳娜被称为最惨星二代,刚满月母亲就离去,35岁还孤身一人近日,演员胡琳娜时隔许久后难得晒出了与母亲丁嘉丽的合照。只见照片里,今年已经63岁的丁嘉丽虽然比前段时间热播的电视剧欢迎光临里的模样又苍老了一些,脸上的皱纹也多了不少。但是,与女儿幸运的是魔女看上了我,不幸的是我不能陪她很久今天微凉来跟大家聊一聊加藤老师在推特上更新的另一个小短篇漫画,她打发时间逐渐堕落的一天又一天,也是很久都没有更新了。大家看到这张图有没有觉得很熟悉或者曾经在哪里看过的样子。这一幕还谁说近视眼呆滞无光?这5位高度近视的女明星,眼里全是星星如今,很多演员就被大家吐槽眼神无戏眼里无光,我们从他们的眼神里看不到任何情绪上的变化,就算长得再漂亮,也就只是一个木头美人。好多人都说,眼睛没有光芒和近视有关,确实,近视会让人的眼罚罪警察局里的奸细不是张大和宋光明,更不是肖振邦,另有其人看电视剧罚罪,不但每一集都让人紧张万分,还感觉自己脑子不够用,进度太快,线索太多,傻傻分不清到底谁是好人谁是坏人?但,这也正是这部剧的魅力所在!剧情更新到十二集,常征的爆炸案依然毫腰斩禁播,9。6分国产神作挡了谁的路?有这么一部国产动画。画风清奇,人物吊诡,被称作童年阴影。一个又一个奇形怪状的妖怪,恐怖又阴森。主编点开,都得起一身鸡皮疙瘩。有这么一部国产动画。打戏牛逼,一招一式刚柔并济,尽显中国
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网