Easyx如何实现扫雷游戏
今天给大家介绍一下Easyx如何实现扫雷游戏。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。
代码:
#include#include#include#include#include#pragmacomment(lib,"winmm.lib")#defineROW10//定义行列的常量#defineCOL10#defineMineNum10//雷的数量#defineImgSize40//图片的尺寸//定义图片资源IMAGEimgs[12];voidloadResource(){for(inti=0;i<12;i++){charimgPath[50]={0};sprintf_s(imgPath,"./images/%d.jpg",i);loadimage(&imgs[i],imgPath,ImgSize,ImgSize);}}boolisfirst=true;//是不是第一次进来//函数声明voidshow(intmap[][COL]);voidinit(intmap[][COL]);voiddraw(intmap[][COL]);voidmouseMsg(ExMessage*msg,intmap[][COL]);voidboomBlank(intmap[][COL],introw,intcol);intjudge(intmap[][COL],introw,intcol);intmain(){//创建窗口initgraph(400,400/*,EW_SHOWCONSOLE*/);//播放开始音乐mciSendString("open./images/start.mp3aliasbgm",NULL,0,NULL);mciSendString("playbgm",NULL,0,NULL);//扫雷地图intmap[ROW][COL]={0};init(map);//游戏主循环while(true){//处理消息ExMessagemsg;while(peekmessage(&msg,EM_MOUSE)){switch(msg.message){caseWM_LBUTTONDOWN://鼠标左键和右键点击caseWM_RBUTTONDOWN:mouseMsg(&msg,map);intret=judge(map,msg.y/ImgSize,msg.x/ImgSize);//点击之后判断if(ret==-1){draw(map);intselect=MessageBox(GetHWnd(),"你这么牛,怎么输了呢?敢再来一把吗?","lowB!",MB_OKCANCEL);if(select==IDOK)//再来一把{//重新初始化init(map);}else//退出{exit(0);}}elseif(ret==1){}system("cls");printf("judege:%d\n",ret);show(map);break;}}draw(map);}//show(map);getchar();return0;}voidshow(intmap[][COL]){for(inti=0;i=0&&r=0&&c=0&&map[i][k]<=8)//[0,8]{intindex=map[i][k];//012345678putimage(k*ImgSize,i*ImgSize,&imgs[index]);//}elseif(map[i][k]==-1){putimage(k*ImgSize,i*ImgSize,&imgs[9]);}elseif(map[i][k]>=19&&map[i][k]<=28){putimage(k*ImgSize,i*ImgSize,&imgs[10]);}elseif(map[i][k]>=39)//-1+20+20{putimage(k*ImgSize,i*ImgSize,&imgs[11]);}}}}//鼠标操作数据voidmouseMsg(ExMessage*msg,intmap[][COL]){//先根据鼠标点击的坐标求出对应的数组的下标intr=msg->y/ImgSize;intc=msg->x/ImgSize;//左键打开格子if(msg->message==WM_LBUTTONDOWN){//什么时候能够打开,没有打开的时候就打开if(map[r][c]>=19&&map[r][c]<=28){//这个函数只能播放wav格式PlaySound("./images/click.wav",NULL,SND_ASYNC|SND_FILENAME);map[r][c]-=20;boomBlank(map,r,c);//检测一下是不是空白格子,是,炸开isfirst=true;}}//右键标记格子elseif(msg->message==WM_RBUTTONDOWN){PlaySound("./images/rightClick.wav",NULL,SND_ASYNC|SND_FILENAME);//是否能够标记:如果没有打开就能标记if(map[r][c]>=19&&map[r][c]<=28){map[r][c]+=20;}elseif(map[r][c]>=39){map[r][c]-=20;}}}//点击空白格子,连环爆开周围的所有空白格子还有数字rowcol是当前点击的格子voidboomBlank(intmap[][COL],introw,intcol){//判断rowcol位置是不是空白格子if(map[row][col]==0){for(intr=row-1;r<=row+1;r++){for(intc=col-1;c<=col+1;c++){if((r>=0&&r=0&&c=19&&map[r][c]<=28)//没有打开{//每一次调用都会播放一下if(isfirst){PlaySound("./images/search.wav",NULL,SND_ASYNC|SND_FILENAME);isfirst=false;}map[r][c]-=20;boomBlank(map,r,c);}}}}return;}//游戏结束条件输了返回-1没结束返回0赢了返回1intjudge(intmap[][COL],introw,intcol){//点到了雷,结束输了if(map[row][col]==-1||map[row][col]==19){return-1;}//点完了格子,结束赢了点开了100-10=90个格子intcnt=0;for(inti=0;i=0&&map[i][k]<=8){++cnt;}}}if(ROW*COL-MineNum==cnt){return1;}return0;}
以上就是Easyx如何实现扫雷游戏的全部内容了,更多与Easyx如何实现扫雷游戏相关的内容可以搜索恰卡编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下恰卡编程网!