C语言对对碰游戏源码分享
本文实例为大家分享了C语言对对碰游戏的具体代码,供大家参考,具体内容如下
//////////////////////////////////////// //画素材的x和y都是反的,因为x表示行,但是画出来x表示列,y同 //////////////////////////////////////// #include#include #include #include #include #include #pragmacomment(lib,"Winmm.lib") usingnamespacestd; /***************定义枚举类型*****************/ enumcolor{blank,red,yellow,blue,green,white,orange,purple,shizijia,zhadan,qicai,alarm}; /***************定义全局变量***************/ constintMaxT=12;//时间上限 constintT=10*MaxT;//时间速度 constintV=300;//停留时间 clock_tstart,now;//控制时间 colorgem[9][8];//地图 //IMAGE对象 IMAGEimg[12],music_img[2],exit_img,jindutiao; intScore,Time;//成绩时间 boolFlag,Music=true;//是否加载音乐 /*******************函数声明******************/ voidload(void);//加载IMAGE对象 voidBlank(void);//清空 boolsoso(void);//搜索空格 boolbaidu(void);//搜索解法 voidNew(void);//更新 voidprint(void);//输出 booljudge(void);//判断是否可以消除 voidfall(void);//下落 voiddraw(void);//消除 boolquit(void);//是否重新开始 voidplay(void);//游戏过程 /********************定义函数****************/ voidload(void) { charc[20]; inti; //加载IMAGE对象 for(i=0;i<12;i++) { ostrstreamstrout(c,50); strout<<"图片\\"<>Flag>>Music; if(Flag) { HWNDwnd=GetHWnd(); SetWindowText(wnd,"对对碰"); if(MessageBox(wnd,"是否继续上次游戏?","游戏开始",MB_YESNO|MB_ICONQUESTION)==IDYES) { fin>>Score>>Time; for(i=0;i<9;i++) for(intj=0;j<8;j++) { intt; fin>>t; gem[i][j]=color(t); } } else Flag=false; } fin.close(); } voidBlank(void) { for(inti=1;i<9;i++) for(intj=0;j<8;j++) gem[i][j]=blank; print(); fall(); } boolsoso(void) { for(inti=1;i<9;i++) for(intj=0;j<8;j++) if(gem[i][j]==blank) returntrue; returnfalse; } boolbaidu(void) { inti,j; colort; boolflag=false; //如果有一个道具则返回真 for(i=1;i<9;i++) for(j=0;j<8;j++) if(gem[i][j]>=shizijia) returntrue; //搜索解法 for(i=1;i<9;i++) for(j=0;j<7;j++) { t=gem[i][j]; gem[i][j]=gem[i][j+1]; gem[i][j+1]=t; if(judge()) flag=true; t=gem[i][j]; gem[i][j]=gem[i][j+1]; gem[i][j+1]=t; if(flag) returntrue; } for(i=1;i<7;i++) for(j=0;j<8;j++) { t=gem[i][j]; gem[i][j]=gem[i+1][j]; gem[i+1][j]=t; if(judge()) flag=true; t=gem[i][j]; gem[i][j]=gem[i+1][j]; gem[i+1][j]=t; if(flag) returntrue; } returnfalse; } voidNew(void) { staticintold_score=-1,old_time=T; boolflag=false; if(Score!=old_score)//更新分数 { if(Score>999999999) { if(MessageBox(GetHWnd(),"恭喜你达到了最高分!\n是否重新开始?","游戏结束",MB_YESNO|MB_ICONQUESTION)==IDYES) Score=0; else exit(0); } chars[15]; ostrstreamstrout(s,15); strout<<'$'< old_time) putimage(540,140,&jindutiao); setcolor(BLACK); for(inti=0;i =1;i--) if(gem[i][j]==blank) { a[j]=i; sign=true; break; } if(sign==false) return; IMAGEim[8]; for(j=0;j<8;j++) if(a[j]>1) getimage(&im[j],60*j,0,60,60*(a[j]-1)); for(i=0;i<60;i+=2) for(j=0;j<8;j++) if(a[j]>0) { if(a[j]>1) putimage(60*j,i+2,&im[j]); putimage(60*j,i+2-60,&img[int(gem[0][j])]); Sleep(1); } for(j=0;j<8;j++) if(a[j]>0) { for(i=a[j];i>0;i--) gem[i][j]=gem[i-1][j]; if(rand()%50==0) gem[0][j]=color(rand()%4+8); else gem[0][j]=color(rand()%7+1); } }//加对大括号使递归时撤销内存空间 if(soso()) fall(); if(judge()) draw(); } voiddraw(void) { { inti,j; boola[9][8]={false}; for(i=1;i<9;i++) for(j=0;j<6;j++) if(gem[i][j]==gem[i][j+1]&&gem[i][j]==gem[i][j+2]) a[i][j]=a[i][j+1]=a[i][j+2]=true; for(i=1;i<7;i++) for(j=0;j<8;j++) if(gem[i][j]==gem[i+1][j]&&gem[i][j]==gem[i+2][j]) a[i][j]=a[i+1][j]=a[i+2][j]=true; for(i=1;i<9;i++) for(j=0;j<8;j++) if(a[i][j]) { gem[i][j]=blank; Score+=10; } Sleep(V); Time+=T/MaxT; if(Time>T) Time=T; print(); }//加对大括号使递归时撤销内存空间 fall(); } boolquit(void) { charstr[50]; ostrstreamstrout(str,50); strout<<"得分:"< T) Time=T; print(); Sleep(V); fall(); if(!baidu()) Blank(); break; casezhadan: if(x>1) { gem[x-1][y]=blank; Score+=10; if(y>0) { gem[x-1][y-1]=blank; Score+=10; } } if(y>0) { gem[x][y-1]=blank; if(x<8) { gem[x+1][y-1]=blank; Score+=10; } } if(x<8) { gem[x+1][y]=blank; if(y<7) { gem[x+1][y+1]=blank; Score+=10; } } if(y<7) { gem[x][y+1]=blank; if(x>1) { gem[x-1][y+1]=blank; Score+=10; } } gem[x][y]=blank; Time+=T/MaxT; if(Time>T) Time=T; print(); Sleep(V); fall(); if(!baidu()) Blank(); break; caseqicai: t=color(rand()%7+1); putimage(60*y,60*(x-1),&img[int(t)]); Sleep(V); for(i=1;i<9;i++) for(j=0;j<8;j++) if(gem[i][j]==t) { gem[i][j]=blank; putimage(60*j,60*(i-1),&img[0]); Score+=10; } gem[x][y]=blank; Time+=T/MaxT; if(Time>T) Time=T; print(); fall(); if(!baidu()) Blank(); break; casealarm: Time=T; gem[x][y]=blank; print(); fall(); if(!baidu()) Blank(); break; } break; } elseif(x1>480&&x1<560&&y1>400&&y1<480) { if(Music) mciSendString("stopmymusic",NULL,0,NULL); else mciSendString("playmymusicfrom0repeat",NULL,0,NULL); Music=!Music; putimage(480,400,&music_img[int(Music)]); } elseif(x1>560&&x1<640&&y1>400&&y1<480) exit(0); } } now=clock(); if(now-start>=CLOCKS_PER_SEC*MaxT/T) { start=now; Time--; New(); if(Time<=0) return; } } while(m.mkLButton&&m.y<480) { m=GetMouseMsg(); x=m.x; y=m.y; if(x-x1>30||x1-x>30||y-y1>30||y1-y>30) { sign=false; break; } now=clock(); if(now-start>=CLOCKS_PER_SEC*MaxT/T) { start=now; Time--; New(); if(Time<=0) return; } } if(sign) { putimage(x1-x1%60,y1-y1%60,&img[int(gem[y1/60+1][x1/60])],SRCPAINT); continue; } if(y1-y>30&&y1/60>0) fx='u'; if(y-y1>30&&y1/60<7) fx='d'; if(x1-x>30&&x1/60>0) fx='l'; if(x-x1>30&&x1/60<7) fx='r'; x=y1/60+1; y=x1/60; x1=y1=0; switch(fx) { case'u':x1=-1;break; case'd':x1=1;break; case'l':y1=-1;break; case'r':y1=1;break; case'\0':continue; } for(i=0;i<60;) { putimage(60*y,60*(x-1),&img[0]); putimage(60*y,60*(x-1),&img[0]); i+=1; putimage(60*(y+y1)-i*y1,60*(x-1+x1)-i*x1,&img[int(gem[x+x1][y+y1])]); putimage(60*y+i*y1,60*(x-1)+i*x1,&img[int(gem[x][y])]); Sleep(2); } t=gem[x][y]; gem[x][y]=gem[x+x1][y+y1]; gem[x+x1][y+y1]=t; if(judge()) { draw(); if(!baidu()) Blank(); } else { for(i=0;i<60;) { putimage(60*y,60*(x-1),&img[0]); putimage(60*y,60*(x-1),&img[0]); i+=1; putimage(60*(y+y1)-i*y1,60*(x-1+x1)-i*x1,&img[int(gem[x+x1][y+y1])]); putimage(60*y+i*y1,60*(x-1)+i*x1,&img[int(gem[x][y])]); Sleep(2); } t=gem[x][y]; gem[x][y]=gem[x+x1][y+y1]; gem[x+x1][y+y1]=t; } now=clock(); if(now-start>=CLOCKS_PER_SEC*MaxT/T) { start=now; Time--; New(); if(Time<=0) return; } }while(true); } /****************主函数******************/ intAPIENTRYWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow) { try { //加载素材 load(); } catch(int) { ofstreamfout("存档.dat"); fout< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。