游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

项目实战C语言easyX带你实现扫雷游戏(六边形升级版)!

  每天一个编程小项目,提升你的编程能力!
  程序简介
  扫雷游戏升级版!六边形扫雷(寻宝模式)稍稍介绍一下哈
  他也是要把所有安全的地方点出来。
  他没有扫雷模式的消零算法。每一个安全的点都需要单独挖出来,一次显示一个格子。
  添加了生命值的概念,也就是说存在一定的容错。
  显示的数字有别于扫雷模式。点击宝藏点,会显示周围宝藏点数量,绿色;点击地雷,会显示周围地雷数量,黑色。注意,这个数字不包括自己,显示的范围自然就是06了。点击地雷会减生命值,生命值归零则结束。
  所以雷和宝藏都是有价值的,都是能给准确信息的。
  我能给一个参考难度:占总格子数40的地雷,占总地雷数50的生命值。
  【注:需要编译器图形库插件可以在文末领取】程序运行展示
  简单了解游戏后我们就来试试吧!(直接上源码,大家可以看注释)程序:六边形扫雷:寻宝模式includemath。hincludegraphics。hincludestringincludetime。hstaticdoublepiacos(1。0);圆周率staticHWNDhOut;画布定义一个结构体,按钮structNode1{intposx1,posy1,posx2,posy2;坐标LPTSTRtext;文字intmod;状态};定义一个结构体,六边形格子structNode2{inti,j,k;特征值intmodlife;翻开intmodmine;雷intmodflag;标记intposx,posy;坐标intnummine;周围雷数intnumpeace;周围空地块};定义一个类classGary{public:voidcarry();主进程voidinitialization();初始化voiddrawscene();绘制界面函数voiddrawbox(intnumbox);绘制格子voiddrawflag(intnumbox);绘制标记voiddrawnum(intnumbox,intnum);绘制数字voidmove();窗口主视角voidcreate();地雷生成voidcheckover();结束判定intnumbutton;按钮数量参数intexitcarry;主循函数控制参数intexitmove;开始界面控制参数intexitgame;游戏进行控制参数intnumlife;生命值intnumsize;边长intnummine;总雷数intnumbox;总地块数intnumflag;标记数COLORREFcolortext〔2〕;按钮绘制填充Node1boxm〔30〕;按钮,预制30个Node2box〔1000〕;地块};标记绘制函数voidGary::drawflag(intnumbox){setlinestyle(PSSOLID,1);setlinecolor(BLACK);line(box〔numbox〕。posx2,box〔numbox〕。posy7,box〔numbox〕。posx2,box〔numbox〕。posy7);setfillcolor(LIGHTRED);setlinecolor(LIGHTRED);fillrectangle(box〔numbox〕。posx72,box〔numbox〕。posy7,box〔numbox〕。posx2,box〔numbox〕。posy1);}数字绘制函数voidGary::drawnum(intnumbox,intnum){inti;画六边形,格子处于点击后状态setfillcolor(RGB(170,170,170));setlinecolor(RGB(85,85,85));POINTpts〔6〕;setlinestyle(PSSOLID,1);for(i0;i6;i){pts〔i〕。xlong(box〔numbox〕。posx14。0cos(60。0double(i)pi180。0));pts〔i〕。ylong(box〔numbox〕。posy14。0sin(60。0double(i)pi180。0));}fillpolygon(pts,6);数字绘制TCHARs〔15〕;settextstyle(20,0,T(Consolas));stprintfs(s,T(0。1d),num);outtextxy(box〔numbox〕。posx5,box〔numbox〕。posy10,s);}场景绘制函数voidGary::drawscene(){TCHARs〔15〕;inti,j;setlinecolor(BLACK);setfillcolor(WHITE);setlinestyle(PSSOLID,1);主界面fillrectangle(401,0,650,400);根据按钮数量绘制settextcolor(BLACK);for(i0;inumbutton;i){setfillcolor(colortext〔boxm〔i〕。mod〕);setbkcolor(colortext〔boxm〔i〕。mod〕);边框fillrectangle(boxm〔i〕。posx1,boxm〔i〕。posy1,boxm〔i〕。posx2,boxm〔i〕。posy2);文字outtextxy(boxm〔i〕。posx1(boxm〔i〕。posx2boxm〔i〕。posx1)2textwidth(boxm〔i〕。text)2,boxm〔i〕。posy14,boxm〔i〕。text);}设置参数setbkcolor(WHITE);settextcolor(BLACK);setlinecolor(BLACK);变量绘制j25;生命值i1;setbkcolor(colortext〔boxm〔i〕。mod〕);stprintfs(s,T(0。1d),numlife);outtextxy(boxm〔i〕。posx1(boxm〔i〕。posx2boxm〔i〕。posx1)2textwidth(boxm〔i〕。text)2,boxm〔i〕。posy1j,s);边长i2;setbkcolor(colortext〔boxm〔i〕。mod〕);stprintfs(s,T(0。1d),numsize);outtextxy(boxm〔i〕。posx1(boxm〔i〕。posx2boxm〔i〕。posx1)2textwidth(boxm〔i〕。text)2,boxm〔i〕。posy1j,s);总地雷数i3;setbkcolor(colortext〔boxm〔i〕。mod〕);stprintfs(s,T(0。1d),nummine);outtextxy(boxm〔i〕。posx1(boxm〔i〕。posx2boxm〔i〕。posx1)2textwidth(boxm〔i〕。text)2,boxm〔i〕。posy1j,s);格子i4;setbkcolor(colortext〔boxm〔i〕。mod〕);stprintfs(s,T(0。1d),numbox);outtextxy(boxm〔i〕。posx1(boxm〔i〕。posx2boxm〔i〕。posx1)2textwidth(boxm〔i〕。text)2,boxm〔i〕。posy1j,s);标记数i5;setbkcolor(colortext〔boxm〔i〕。mod〕);stprintfs(s,T(0。1d),numflag);outtextxy(boxm〔i〕。posx1(boxm〔i〕。posx2boxm〔i〕。posx1)2textwidth(boxm〔i〕。text)2,boxm〔i〕。posy1j,s);FlushBatchDraw();}地雷生成函数voidGary::create(){inti,j;设置雷for(i0;inummine;i){随机jrand()1000;while(box〔j〕。modmine1box〔j〕。modlife1){随机jrand()1000;}是雷box〔j〕。modmine1;}周边雷数统计遍历for(i0;i888;i){if(box〔i〕。modlife0){遍历for(j0;j999;j){排除自己if(j!ibox〔j〕。modlife0){周围六个if((box〔j〕。posxbox〔i〕。posx)(box〔j〕。posxbox〔i〕。posx)(box〔j〕。posybox〔i〕。posy)(box〔j〕。posybox〔i〕。posy)900){是雷if(box〔j〕。modmine1){周边雷数参数加一box〔i〕。nummine;}不是雷elseif(box〔j〕。modmine0){周边安全数参数加一box〔i〕。numpeace;}}}}}}}结束判断函数voidGary::checkover(){inti,k;k0;for(i0;i888;i){每有一个翻开且不是雷的点,则加一if(box〔i〕。modmine0box〔i〕。modlife1){k;}}全翻开则结束if(knumboxnummine){将所有未翻开雷做上标记for(i0;i888;i){if(box〔i〕。modmine1box〔i〕。modlife0){drawflag(i);}}胜利标志:笑脸setfillcolor(WHITE);setlinecolor(WHITE);fillrectangle(50,20,75,45);settextstyle(30,0,T(Wingdings));setbkmode(TRANSPARENT);settextcolor(BLACK);outtextxy(50,20,0x4A);setbkmode(OPAQUE);settextstyle(20,0,T(Consolas));结束变化exitgame1;boxm〔1〕。mod0;boxm〔2〕。mod0;boxm〔3〕。mod0;boxm〔6〕。mod0;boxm〔7〕。mod1;numflag0;绘制drawscene();}}格子绘制函数voidGary::drawbox(intnumbox){inti;intposx,posy;六边形绘制posxbox〔numbox〕。posx;posybox〔numbox〕。posy;POINTpts〔6〕;setlinestyle(PSSOLID,2);背景色setfillcolor(RGB(255,255,255));for(i0;i6;i){pts〔i〕。xlong(posx14。0cos(60。0double(i)pi180。0));pts〔i〕。ylong(posy14。0sin(60。0double(i)pi180。0));}solidpolygon(pts,6);灰边setlinecolor(RGB(85,85,85));line(pts〔0〕。x,pts〔0〕。y,pts〔1〕。x,pts〔1〕。y);line(pts〔5〕。x,pts〔5〕。y,pts〔0〕。x,pts〔0〕。y);line(pts〔1〕。x,pts〔1〕。y,pts〔2〕。x,pts〔2〕。y);前景色setfillcolor(RGB(170,170,170));for(i0;i6;i){pts〔i〕。xlong(posx12。0cos(60。0double(i)pi180。0));pts〔i〕。ylong(posy12。0sin(60。0double(i)pi180。0));}solidpolygon(pts,6);FlushBatchDraw();}初始化函数voidGary::initialization(){inti,j,k,t;随机初始化srand((unsigned)time(NULL));颜色初始化colortext〔0〕WHITE;colortext〔1〕RGB(170,170,170);按钮的初始化numbutton10;坐标for(i0;i10;i){boxm〔i〕。posx1410120(i2);boxm〔i〕。posy12575(i2);boxm〔i〕。posx2520120(i2);boxm〔i〕。posy27575(i2);}内容boxm〔0〕。textT(寻宝模式);boxm〔1〕。textT(生命值);boxm〔2〕。textT(地图边长);boxm〔3〕。textT(总地雷数);boxm〔4〕。textT(总地块数);boxm〔5〕。textT(已标记数);boxm〔6〕。textT(开始);boxm〔7〕。textT(重置);boxm〔8〕。textT(截图);boxm〔9〕。textT(退出);状态boxm〔0〕。mod1;boxm〔1〕。mod1;boxm〔2〕。mod1;boxm〔3〕。mod1;boxm〔4〕。mod1;boxm〔5〕。mod1;boxm〔6〕。mod1;boxm〔7〕。mod0;boxm〔8〕。mod0;boxm〔9〕。mod0;numbox3numsize(numsize1)1;numflag0;绘制参数初始化setlinecolor(BLACK);setlinestyle(PSSOLID,1);settextstyle(20,0,T(Consolas));第一次绘制drawscene();重置setfillcolor(WHITE);fillrectangle(0,0,400,400);平静脸setfillcolor(WHITE);setlinecolor(WHITE);fillrectangle(50,20,75,45);settextstyle(30,0,T(Wingdings));setbkmode(TRANSPARENT);settextcolor(BLACK);outtextxy(50,20,0x4B);setbkmode(OPAQUE);settextstyle(20,0,T(Consolas));格子初始化for(t0;t999;t){已翻开box〔t〕。modlife1;城墙box〔t〕。modmine2;坐标,点不到box〔t〕。posx200;box〔t〕。posy200;}初始化for(i0;inumsize;i){for(j0;jnumsize;j){for(k0;knumsize;k){特征值至少一个为零if(i0j0k0){编号ti100j10k;特征值box〔t〕。ii;box〔t〕。jj;box〔t〕。kk;未翻开box〔t〕。modlife0;不是雷box〔t〕。modmine0;未标记box〔t〕。modflag0;坐标box〔t〕。posx20022(jk);box〔t〕。posy20025i13(jk);周围雷数初始化box〔t〕。nummine0;box〔t〕。numpeace0;绘制地块drawbox(t);}}}}地雷生成函数create();}窗口主视角函数,获取用户操作voidGary::move(){鼠标定义ExMessagem;TCHARss〔15〕;inti,t;exitmove0;exitgame0;while(exitmove0){鼠标信息if(peekmessage(m,EMMOUSEEMKEY)){左键单击判断if(m。messageWMLBUTTONDOWN){判断是否点击了格子if(m。x0m。y0m。x400m。y400exitgame0){for(t0;t888;t){成功点击未标记的空格子if((m。xbox〔t〕。posx)(m。xbox〔t〕。posx)(m。ybox〔t〕。posy)(m。ybox〔t〕。posy)144box〔t〕。modlife0box〔t〕。modflag0){点击的格子不是雷if(box〔t〕。modmine0){绿色,安全,绘制settextcolor(LIGHTGREEN);drawnum(t,box〔t〕。numpeace);改为翻开box〔t〕。modlife1;}点击的格子雷elseif(box〔t〕。modmine1){扣除生命值numlife;黑色,危险,绘制settextcolor(BLACK);drawnum(t,box〔t〕。nummine);改为翻开box〔t〕。modlife1;生命值减为零if(numlife0){失败标志:哭脸setfillcolor(WHITE);setlinecolor(WHITE);fillrectangle(50,20,75,45);settextstyle(30,0,T(Wingdings));setbkmode(TRANSPARENT);settextcolor(BLACK);outtextxy(50,20,0x4C);setbkmode(OPAQUE);settextstyle(20,0,T(Consolas));失败exitgame1;boxm〔1〕。mod0;boxm〔2〕。mod0;boxm〔3〕。mod0;boxm〔6〕。mod0;boxm〔7〕。mod1;numflag0;}绘制drawscene();}成功结束判断checkover();break;}}}判断是否点击了可点击按钮for(i0;inumbutton;i){if(m。xboxm〔i〕。posx1m。yboxm〔i〕。posy1m。xboxm〔i〕。posx2m。yboxm〔i〕。posy2boxm〔i〕。mod0){break;}}点击矩形按钮switch(i){生命值:numlifecase1:{输入InputBox(ss,10,T(输入生命值(1999)));stscanfs(ss,T(d),i);if(i0i999){numlifei;}else{MessageBox(hOut,T(输入错误,不在范围内),T(来自小豆子的提醒),MBOK);}绘制drawscene();break;}地图边长:numsizecase2:{输入InputBox(ss,10,T(输入边长(28)));stscanfs(ss,T(d),i);if(i1i8){numsizei;numbox3numsize(numsize1)1;}else{MessageBox(hOut,T(输入错误,不在范围内),T(来自小豆子的提醒),MBOK);}绘制drawscene();break;}总地雷数:numminecase3:{InputBox(ss,10,T(输入地雷数(1总格子数)));stscanfs(ss,T(d),i);if(i0inumbox){numminei;}else{MessageBox(hOut,T(输入错误,不在范围内),T(来自小豆子的提醒),MBOK);}绘制drawscene();break;}开始case6:{numbox3numsize(numsize1)1;if(numminenumboxnumlife0){exitgame0;初始化initialization();}else{MessageBox(hOut,T(请将雷数修改为小于格子数或将生命值修改为大于零),T(来自小豆子的提醒),MBOK);}break;}重置case7:{结束游戏进程,进入准备阶段if(exitgame0){exitgame1;boxm〔1〕。mod0;boxm〔2〕。mod0;boxm〔3〕。mod0;boxm〔6〕。mod0;boxm〔7〕。mod1;numflag0;绘制drawscene();}break;}截图case8:{saveimage(T(image。png));break;}退出case9:{exitgame1;exitmove1;exitcarry1;break;}default:break;}}右键,且处于游戏进行状态elseif(m。messageWMRBUTTONDOWNexitgame0){for(t0;t888;t){成功点击空格子if((m。xbox〔t〕。posx)(m。xbox〔t〕。posx)(m。ybox〔t〕。posy)(m。ybox〔t〕。posy)144box〔t〕。modlife0){标记状态转换box〔t〕。modflag(box〔t〕。modflag0?1:0);绘制drawbox(t);画小旗子if(box〔t〕。modflag1){drawflag(t);numflag;}else{numflag;}绘制drawscene();}}}}}}主进程voidGary::carry(){窗口定义hOutinitgraph(651,401);SetWindowText(hOut,T(六边形扫雷:扫雷模式));参数初始化numsize5;nummine10;numlife3;背景绘制setbkcolor(WHITE);cleardevice();进程控制exitcarry0;while(exitcarry0){initialization();move();}closegraph();}主函数intmain(void){GaryG;G。carry();return0;}
  大家赶紧去动手试试吧!
  此外,我也给大家分享我收集的其他资源,从最零基础开始的教程到C语言C项目案例,帮助大家在学习C语言的道路上披荆斩棘!
  编程学习书籍分享:
  编程学习视频分享:
  整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!
  对于CC感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些CC的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

3月安卓手机性价比榜出炉Redmi一加狂抢市场安兔兔公布2023年3月安卓手机性价比榜。Redmi、一加在4000元以下市场疯狂抢夺,01999元、19992999元、29993999元价位榜单前三名都有他们的身影。……电动车我的续航都超1000km了,为啥你们还是有里程焦虑?现在国内车市里面的纯电车型越来越多,其中不少车型有着出色的续航表现,像部分车型的续航里程达到或者超过了1000km。这是啥概念,也就是说在充满电且理想状态下差不多能从北京直接开……vivoTWS3Pro真无线HiFi耳机拆解,高通S5音频平TWS耳机市场,vivo在2022年相继推出了3款产品,包括了主打舒适佩戴的vivoTWSAir真无线耳机,以及首发搭载全链路无线真HiFi技术的vivoTWS3和vivoTW……押注电商游戏社交,大厂能否讲好出海新故事?观察各大厂在2022年的动作,营销推广等支出相比往年大幅减少,不少新业务也在收缩,而海外业务却是另外一番景象。互联网大厂角逐海外市场,成为大势所趋,重点押注的的业务在电商、游戏……丁彦雨航下家基本确定!有望得到主教练重用,顶薪合同不用愁丁彦雨航下家基本确定!有望得到主教练重用,顶薪合同不用愁目前山东男篮已经官宣了新任主教练,而现在球迷都知道,山东男篮本赛季的成绩,并没有达到预期,从上个赛季的4强球队,如……央视直播!北京首钢VS山东,翟晓川复出,雅尼斯或送徐长锁下课有惊无险地击败了北控男篮之后,北京首钢已经拿到了3连胜,同时他们也看到了冲击常规赛第五的机会。接下来他们将会面对山东男篮,翟晓川禁赛后复出,另外小外援布朗伤病情况恢复得也不错,……谷歌官方AndroidPC版来了!游戏丝滑流畅,你想知道的都谷歌发布安卓电脑版了你知道吗?最近谷歌发布了电脑版安卓,也就是GooglePlayGamesforPC,中文名字叫GooglePlay游戏的测试版本。目前由于是测试……患甲状腺结节后不要过于紧张,饮食遵循三多两少原则一、甲状腺结节多吃什么?1、芋头众所周知,芋头是我们日常生活中比较常见的一种食物,其中含有丰富的营养物质,尤其是膳食纤维含量丰富,摄入量充足的话便能加快新陈代谢,进……失眠就吃这个,不仅能补充营养还能调理失眠,很多人都在用核桃仁又被称之为胡桃仁,是胡桃科植物胡桃的成熟果实,它自身含有丰富的营养元素,是世界四大干果之一。我们中医认为核桃仁味甘、性温,能够帮助人体补肾固精、健脑益智、温肺定喘、……暗黑破坏神13究竟讲了一个什么故事03包含暗黑破坏神不朽上一期我们讲述了王子艾丹把灵魂石插入到自己的脑中,从而形成了迪亚波罗的灵魂容器,但艾丹却高估了自己,他并没有控制住迪亚波罗,反而被恶魔控制住了。在他回到了地面上的那些时刻……中国主战坦克降临国服!现版本最符合无脑打钱印钞机噢哟,怎么它来了呀各位车长老爷们大家好啊,挺有意思,本周国服特贵商城里上架了C系8级金币中坦122TM,裸车价格218。75元,3D风格不单卖,想买就得买捆绑包。恰好这次……MagicOS7。0能干什么?MagicOS7。0系统发布已经有几天的时间了,从目前的上手视频来看,荣耀想实现的智慧互联和智慧服务,已经初见雏形。荣耀想要达到的互联和华为的鸿蒙的互联以及和苹果的共享都有所不……
湖人步行者谈判破裂,特纳身价比肩巨星北京时间1月14日,NBA常规赛正在如火如荼地进行着,在之前结束的一轮常规赛中,湖人客场以116比125不敌国王,遭遇两连败的同时,暂时以21胜21负的战绩,排名东部第七,距离……2023与书为伴一月书单整理〔微风〕《苍炎》作者:羽生结弦容颜如玉,身姿如松,翩若惊鸿,婉若游龙。幸得识卿桃花面,从此阡陌多暖春,时光作渡,眉目成书,从此我们的深情不被辜负。他就像……厘米波频段成设备商6G频谱新宠太赫兹频段被抛弃了吗?现在,一些设备供应商正将其对于6G频谱的期望和宣传瞄准介于7GHz至20GHz之间的所谓厘米波频段。这与以24GHz40GHz频段之间毫米波频段为中心的早期5G炒作不同。……研究证明藏族人群是登山能手夏尔巴人的祖先夏尔巴人(Sherpa)又称雪巴人、谢尔巴人,是中国、尼泊尔、印度等国的边境民族。他们深居深山老林,过去几乎与世隔绝,后因为攀登珠穆朗玛峰的各国登山队当向导或背夫而闻名于世,以……茶树精油的用法大家好,我是葡萄籽,一起来说精油吧!!!茶树精油是一种非常有用的精油,因其广泛的用途而备受欢迎。我们的茶树精油采用澳大利亚最好的茶树叶提取而成,其具有抗菌、杀菌和抗炎的功……全民健身,健康中国驿城区峰林潭杯足球友谊赛落幕驻马店市全民健身,健康中国中西部地区县域乡村足球系列活动暨驿城区峰林潭杯足球友谊赛落幕历时15天的由中国足球发展基金会主办,河南省足球协会承办,驻马店市体育总会,驿城区卫……世界杯已落幕,足球狂欢爱自己从一颗安翰科技磁控胶囊胃镜开始四年一度的世界杯是球迷和足球爱好者的盛会。球员在绿茵场上拼搏鏖战,球迷在屏幕前同悲同喜。由于时差关系,世界杯的赛事多在凌晨(北京时间)直播,我国的球迷大多数情况熬夜观球,夜宵傍……深耕盐化工行业业绩多年稳定增长江盐集团跻身首批主板注册制新股本报记者曹琦4月10日上午,江西省盐业集团股份有限公司(股票简称江盐集团、股票代码601065)首次公开发行股票上市仪式在上海证券交易所隆重举行。江盐集团上市仪式现……奥运冰五环重达3吨似一栋三层高的单元楼在看台上,观众意识不到五环的重量。站在五环脚下,人立即显得渺小,它长20米,由LED异形屏组成,像一栋三层高的单元楼。它的体重是个重要问题。太重,威亚会被显眼地拉低,影响演出效……夜雨丨胡木非木一个人的千佛山一个人的千佛山胡木非木以前从来没有听说过千佛山查看百度地图才知道千佛山远在千里之外她一个人背着行囊在秋天抵达千佛山千佛山的秋风把天空吹得一尘……一加10Pro评测游戏体验大突破,帧率最稳的骁龙8手机?刚发布的一加10PRO,真没料到一家旗舰居然这么快就来了,我提前收到了机器,满打满算用了十多天。说句实话,这次除了非常大胆的外观创新之外,一家识破的硬件参数确实没什么惊喜,所以……以树莓派驱动的机器学习外骨骼可以让行走更快更轻松斯坦福大学的研究人员设计了一种由树莓派单板计算机驱动的外骨骼,可以帮助有行动障碍的人更容易地走动。这种可穿戴设备像靴子一样套在小腿上,由RaspberryPi4负责管理一系列的……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网