大家好,今天小编来为大家解答在线编程网站源码分享大全这个问题,在线编程网站源码分享大全最新很多人还不知道,现在让我们一起来看看吧!
这篇文章主要为大家详细介绍了C语言实现——《连连看》小游戏,示例代码介绍的非常详细,具有想当的参考价值,感兴趣的小伙伴们可以参考一下!
游戏介绍:
连连看小游戏速度节奏快,画面清晰可爱,适合细心的玩家。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。本期举例的项目类似宠物连连看,小动物造型的连连看游戏(这个主要看你准备好的图片素材)
游戏玩法
加载游戏后,点击画面中间的图像即进入游戏状态。使用鼠标左键即可,点击相同的两张图卡,用三根内线连在一起就可以消除。只要我们在有限的时间里,用我们智慧消除相连卡片,就可以获得最终的胜利。那么我们了解了规则之后,就动手来试试吧!
编译器:VS2013/2019最佳;
插件:图形库插件easyX,涉及图片素材可以自行百度找也可以关注文末领取;
效果图展示:
源代码示例:
include<conio.h>\ninclude<stdio.h>\npragmacomment(lib,&34;)\n\n//15015012721易\n//6010016932中\n//10012014828难\ndefinetopedge150//游戏区距上边框距离\ndefineROW7//游戏区行数\ndefineGridW\t42//游戏图片的长\ndefineN555\t\t//开屏大小(宽)\n34;playgame_begin.mp3repeat&34;res\\\\bg.bmp&34;IMAGE&34;grids&34;IMAGE&34;bg”);\n\tSetWorkingImage(&background);\n\tgetimage(&image2,3*42,2*48,42,48);\n\tSetWorkingImage();\n\tputimage(0,0,&background);\n}\n\nvoidShowGrid()\n{\n\tintidx,idy;\n\tfor(inti=0;i<ROW;i++)\n\t\tfor(intj=0;j<COL;j++)\n\t\t{\n\t\t\tidy=i*48+topedge,idx=j*42+leftedge;\n\t\t\tputimage(idx,idy,&image[GridID[i+1][j+1]][0]);\t\t\t\n}\t\t}\n\n/////////////////////////////////鼠标操作////////////////////////////////////////\nvoidMousemove(intleftx,intlefty)\t\t\t\t\t//鼠标移动时的变化\n{\n\tstaticintprex,prey,preidx,preidy,curidx,curidy;\n\tif(Judg_val(leftx,lefty))\n\t{\t\n\t\tTranstoDracoor(leftx,lefty,&curidx,&curidy);//转化为图纸坐标\n\t\tif(GridID[curidy][curidx]!=0)\n\t\t{\t\n\t\t\tGridPhy_coor(leftx,lefty);\n\t\t\tif(pre.idx==preidx&&pre.idy==preidy)\n\t\t\t\tputimage(prex,prey,&image[GridID[preidy][preidx]][1]);\n\t\t\telse\n\t\t\t\tputimage(prex,prey,&image[GridID[preidy][preidx]][0]);\n\t\t\tprex=leftx,\t\tprey=lefty;\n\t\t\tpreidx=curidx,preidy=curidy;\nDraw_frame(leftx,lefty);\t\t\t\t\t//绘制边框\t\n}\t}}\t\n\nvoidLeftbottondown(MOUSEMSGmouse)\t\t\t\t\t//左击时的变化\n{\n\tstaticintclick=0,idx,idy;\n\tclick++;\n\tSeleReact(mouse.x,mouse.y);\t\t\t\t\t\t//显示选中效果\n\tif(click==1)\t\tRecordInfor(mouse.x,mouse.y,pre);\n\tif(click==2)\n\t{\t\n\t\tTranstoDracoor(mouse.x,mouse.y,&idx,&idy);\n\t\tif(idx!=pre.idx||idy!=pre.idy)\n\t\t{\n\t\t\tRecordInfor(mouse.x,mouse.y,cur);\n\t\t\tif(pre.GridID==cur.GridID&&\tDesGrid(pre,cur))\n\t\t\t{\n\t\t\t\tGridID[pre.idy][pre.idx]=GridID[cur.idy][cur.idx]=0;\n\t\t\t\tLink();pn=0;\n\t\t\t\tputimage(pre.leftx,pre.lefty,&image2);\n\t\t\t\tputimage(cur.leftx,cur.lefty,&image2);\n\t\t\t\tInit_Grid(pre);Init_Grid(cur);click=0;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tExchaVal(dur,pre);\tExchaVal(pre,cur);\n\t\t\t\tInit_Grid(cur);\t\t\tclick=1;\n\t\t\t\tputimage(dur.leftx,dur.lefty,&image[GridID[dur.idy][dur.idx]][0]);\n\t\t}\t}\n\t\telseclick=1;\t\n}\t\t}\n\nvoidSeleReact(intleftx,intlefty)\t\t\t\t\t\t\t//选中时效果\n{\t\n\tif(Judg_val(leftx,lefty))\n\t{\n\t\tintidx,idy;\n\t\tTranstoDracoor(leftx,lefty,&idx,&idy);\n\t\tGridPhy_coor(leftx,lefty);\n\t\tputimage(leftx,lefty,&image[GridID[idy][idx]][1]);\n}\t}\n\nboolJudg_val(intleftx,intlefty)\t\t\t\t\t//判断鼠标是否在游戏区\n{\t\n\treturnleftx>leftedge&&leftx<leftedge+GridW*COL&&\n\tlefty>topedge&&lefty<topedge+GridH*ROW;\n}\n\nvoidTranstoDracoor(intmousex,intmousey,int*idx,int*idy)//鼠标坐标转化为图纸坐标\n{\n\tif(Judg_val(mousex,mousey))\n\t{\t\n\t\t*idx=(mousex-leftedge)/42+1;\n\t\t*idy=(mousey-topedge)/48+1;\n}\t}\n\nvoidRecordInfor(intleftx,intlefty,GridInfor&grid)\t\t\t//记录选中的信息\n{\n\tTranstoDracoor(leftx,lefty,&grid.idx,&grid.idy);\n\tgrid.leftx=(grid.idx-1)*42+leftedge;\n\tgrid.lefty=(grid.idy-1)*48+topedge;\n\tgrid.GridID=GridID[grid.idy][grid.idx];\n}\n\nboolSingle_click_judge(intmousex,intmousey)\t\t\t//判断单击是否有效\n{\n\tintidx,idy;\n\tTranstoDracoor(mousex,mousey,&idx,&idy);\t\t\t//转化为图纸坐标\n\tif(Judg_val(mouse.x,mouse.y)&&GridID[idy][idx]!=0)\n\t\treturntrue;\n\treturnfalse;\n}\n\nvoidDraw_frame(intleftx,intlefty)\t\t\t\t//绘制方框\n{\n\tsetcolor(RGB(126,91,68));\n\tsetlinestyle(PS_SOLID,NULL,1);\n\trectangle(leftx,lefty,leftx+41,lefty+47);\n\trectangle(leftx+2,lefty+2,leftx+39,lefty+45);\n\tsetcolor(RGB(250,230,169));\n\trectangle(leftx+1,lefty+1,leftx+40,lefty+46);\t\n}\n\n////////////////////////////////判断消除操作/////////////////////////////////////\nboolDesGrid(GridInforpre,GridInforcur)\t\t\t\t\t\t//判断两者是否能相消\n{\n\tboolmatch=false;POINTppre,pcur;\n\tppre.x=pre.idx;ppre.y=pre.idy;\n\tpcur.x=cur.idx;pcur.y=cur.idy;\n\tif(Match_direct(ppre,pcur))match=true;\n\telseif(Match_one_corner(ppre,pcur))match=true;\n\telseif(Match_two_corner(ppre,pcur))match=true;\n\treturnmatch;\n}\n\nboolMatch_direct(POINTppre,POINTpcur)\t\t\t\t\t\t//判断两者是否能够直接相消\n{\n\tintk,t;\n\tif(ppre.x==pcur.x)\n\t{\t\n\t\tk=ppre.y>pcur.y?ppre.y:pcur.y;\n\t\tt=ppre.y<pcur.y?ppre.y:pcur.y;\n\t\tif(t+1==k)gotoFIND;\n\t\tfor(inti=t+1;i<k;i++)\n\t\t\tif(GridID[i][ppre.x]!=0)returnfalse;\n\t\tif(i==k)gotoFIND;\n\t}\n\telse\n\t\tif(ppre.y==pcur.y)\n\t\t{\t\n\t\t\tk=ppre.x>pcur.x?ppre.x:pcur.x;\n\t\t\tt=ppre.x<pcur.x?ppre.x:pcur.x;\n\t\t\tif(t+1==k)gotoFIND;\n\t\t\tfor(inti=t+1;i<k;i++)\n\t\t\t\tif(GridID[ppre.y][i]!=0)returnfalse;\n\t\t\tif(i==k)gotoFIND;\n\t\t}\n\t\treturnfalse;\nFIND:\tpoint[pn].x=pcur.x,point[pn].y=pcur.y;pn++;\n\t\tpoint[pn].x=ppre.x,point[pn].y=ppre.y;\tpn++;\n\t\treturntrue;\n}\n\nboolMatch_one_corner(POINTppre,POINTpcur)\t\t\t\t\t//判断两者是否能一折相消\n{\n\tintleft,right,top,bottel,x=ppre.x,y=ppre.y;\n\tExplot(ppre,&left,&right,&top,&bottel);\n\tppre.y=top-1;\nRESEARCHX:\tif(ppre.y<bottel)\t\tppre.y++;\n\t\t\telsegotoBACK;\n\t\t\tif(Match_direct(ppre,pcur))gotoFIND;\n\t\t\telsegotoRESEARCHX;\nBACK:\t\tppre.y=y;ppre.x=left-1;\nRESEARCHY:if(ppre.x<right)ppre.x++;\n\t\t\telsegotoREBACK;\n\t\t\tif(Match_direct(ppre,pcur))gotoFIND;\n\t\t\telsegotoRESEARCHY;\nREBACK:pn=0;returnfalse;\nFIND:point[pn].x=x,point[pn].y=y,pn++;\n\t\t\treturntrue;\n}\n\nboolMatch_two_corner(POINTppre,POINTpcur)\t\t\t\t\t//判断两者是否能两折相消\n{\n\tintleft,right,top,bottel,x=ppre.x,y=ppre.y;\n\tExplot(ppre,&left,&right,&top,&bottel);\n\tppre.y=top-1;\nRESEARCHX:\tif(ppre.y<bottel)\t\tppre.y++;\n\t\t\telsegotoBACK;\n\t\t\tif(Match_one_corner(ppre,pcur))gotoFIND;\n\t\t\telsegotoRESEARCHX;\nBACK:\t\tppre.y=y;ppre.x=left-1;\nRESEARCHY:if(ppre.x<right)ppre.x++;\n\t\t\telsegotoREBACK;\n\t\t\tif(Match_one_corner(ppre,pcur))gotoFIND;\n\t\t\telsegotoRESEARCHY;\nREBACK:pn=0;returnfalse;\nFIND:\t\tpoint[pn].x=x,point[pn].y=y,pn++;\n\t\t\treturntrue;\n}\n\nvoidExplot(POINTpoint,int*left,int*right,int*top,int*bottel)\n{\n\tintx=point.x,y=point.y;\tx++;\n\twhile(x<=COL+1&&GridID[y][x]==0)x++;\t*right=x-1;x=point.x;x–;\n\twhile(x>=0\t&&GridID[y][x]==0)x–;*left\t=x+1;x=point.x;y++;\n\twhile(y<=ROW+1&&GridID[y][x]==0)y++;*bottel=y-1;y=point.y;y–;\n\twhile(y>=0\t&&GridID[y][x]==0)y–;*top=y+1;\n}\n\n/////////////////////////////////消除操作////////////////////////////////////////\nvoidLink()\n{\n\tswitch(pn)\n\t{\n\tcase2:\n\t\tDes_direct();\tbreak;\n\tcase3:\n\t\tDes_one_corner();\tbreak;\n\tcase4:\n\t\tDes_two_corner();break;\n\tdefault:break;\n}\t}\n\nvoidDes_direct()\n{\n\tTranstoPhycoor(&point[0].x,&point[0].y);\n\tTranstoPhycoor(&point[1].x,&point[1].y);\n\tDrawLine(point[0].x,point[0].y,point[1].x,point[1].y);\n\tSleep(250);\n\tiPaint(point[0].x,point[0].y,point[1].x,point[1].y);\n}\n\nvoidDes_one_corner()\n{\n\tTranstoPhycoor(&point[0].x,&point[0].y);\n\tTranstoPhycoor(&point[1].x,&point[1].y);\n\tTranstoPhycoor(&point[2].x,&point[2].y);\n\tDrawLine(point[0].x,point[0].y,point[1].x,point[1].y);\n\tDrawLine(point[1].x,point[1].y,point[2].x,point[2].y);\n\tSleep(250);\n\tiPaint(point[0].x,point[0].y,point[1].x,point[1].y);\n\tiPaint(point[1].x,point[1].y,point[2].x,point[2].y);\n}\n\nvoidDes_two_corner()\n{\n\tTranstoPhycoor(&point[0].x,&point[0].y);\n\tTranstoPhycoor(&point[1].x,&point[1].y);\n\tTranstoPhycoor(&point[2].x,&point[2].y);\n\tTranstoPhycoor(&point[3].x,&point[3].y);\n\tDrawLine(point[0].x,point[0].y,point[1].x,point[1].y);\n\tDrawLine(point[1].x,point[1].y,point[2].x,point[2].y);\n\tDrawLine(point[2].x,point[2].y,point[3].x,point[3].y);\n\tSleep(250);\n\tiPaint(point[0].x,point[0].y,point[1].x,point[1].y);\n\tiPaint(point[1].x,point[1].y,point[2].x,point[2].y);\n\tiPaint(point[2].x,point[2].y,point[3].x,point[3].y);\n}\n\t\nvoidDrawLine(intx1,inty1,intx2,inty2)\n{\n\tsetlinestyle(PS_SOLID,NULL,3);\n\tsetcolor(RGB(90,43,9));\n\tline(x1+21,y1+24,x2+21,y2+24);\n}\n\nvoidiPaint(longx1,longy1,longx2,longy2)\n{\n\tintminx,miny,maxx,maxy;\n\tif(x1==x2)\n\t{\n\t\tmaxy=y1>y2?y1:y2;\n\t\tminy=y1<y2?y1:y2;\n\t\tfor(inti=miny;i<=maxy;i+=48)\n\t\t\tputimage(x1,i,&image2);\n\t}\t\t\n\telseif(y1==y2)\n\t{\n\t\tmaxx=x1>x2?x1:x2;\n\t\tminx=x1<x2?x1:x2;\n\t\tfor(intj=minx;j<=maxx;j+=42)\n\t\t\tputimage(j,y1,&image2);\n}\t}\n\n/////////////////////////////////////////////////////////////////////////////////\n\nvoidGridPhy_coor(int&leftx,int&lefty)\t\t\t//转化为标准物理坐标\n{\n\tleftx=((leftx-leftedge)/42)*42+leftedge;\n\tlefty=((lefty-topedge)/48)*48+topedge;\n}\n\nvoidExchaVal(GridInfor&pre,GridInfor&cur)\t\t//交换格子信息\n{\n\tpre.GridID=cur.GridID;\n\tpre.idx=cur.idx;pre.idy=cur.idy;\n\tpre.leftx=cur.leftx;pre.lefty=cur.lefty;\n}\n\nvoidInit_Grid(GridInfor&grid)//初始化格子\n{\n\tgrid.GridID=0;\n\tgrid.idx\t=0;grid.idy=0;\n\tgrid.leftx=0;grid.lefty=0;\n}\n\nvoidTranstoPhycoor(int*idx,int*idy)\t\t//图纸坐标转变为屏幕坐标\n{\n\tintx,y;x=*idx,y=*idy;\n\t*idy=(y-1)*48+leftedge;\n\t*idx=(x-1)*42+topedge;\n}
未完成的部分功能代码,大家也可以自己先去想想试试,每一次的思考就是你进步的过程!
如果学习的过程中有什么问题,以及本项目有什么不懂的地方,都可以来找我交流,我来帮你!
那么今天的分享就到这里了,后续会更新更多精彩项目或者知识内容的,大家要好好学C语言C++哟~
写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
OK,关于在线编程网站源码分享大全和在线编程网站源码分享大全最新的内容到此结束了,希望对大家有所帮助。
