连连看代码.docx
《连连看代码.docx》由会员分享,可在线阅读,更多相关《连连看代码.docx(25页珍藏版)》请在冰点文库上搜索。
连连看代码
#include
#include"resource.h"
#defineROW16
#defineCOL12
#defineCorner2
#defineWidth640
#defineLength720
#defineImagL45
#defineImagW44
#pragmacomment(linker,"/subsystem:
"windows"/entry:
"mainCRTStartup"")
usingnamespacestd;
staticintcorner=0,Num;
staticintDirArr[100];
staticintstate=12;
staticintXPnum;//每关洗牌次数
staticintTime=300;
clock_tstart;
staticboolFlag;
staticboolKeyFlag;
staticboolRestart;
vectorDir,temp;
vectorPostion(0,0);
intarray[COL][ROW];
structSELECT
{
intx;
inty;
};
voidisCorner()
corner=0;
for(vector:
:
iteratorit=Dir.begin();Num>=2&&it!
=Dir.end()-1&&Dir.size()>=2;it++)
if(*it!
=*(it+1))
corner++;
}
boollinkProcess(intx1,inty1,intx2,inty2,intx,inty)
//首先把当前位置为已访问
temp.push_back(array[x1][y1]);
array[x1][y1]=-1;
if(x1==x2&&abs(y1-y2)==1||y1==y2&&abs(x1-x2)==1)
//找到目的方块
Num++;
if(x1 { Dir.push_back(0); isCorner(); if(corner<=Corner) { array[x2][y2]=-1; returntrue; } Dir.pop_back(); } if(x1>x2)//left { Dir.push_back(2); isCorner(); if(corner<=Corner) { array[x2][y2]=-1; returntrue; } Dir.pop_back(); } if(y1>y2)//up { Dir.push_back(3); isCorner(); if(corner<=Corner) { array[x2][y2]=-1; returntrue; } Dir.pop_back(); } if(y1 { Dir.push_back(1); isCorner(); if(corner<=Corner) { array[x2][y2]=-1; returntrue; } Dir.pop_back(); } Num--; vector::iteratorit=temp.end(); array[x1][y1]=*(it-1); temp.pop_back(); returnfalse; } else{ Num++; //否则移动到相邻的方块上继续寻找 switch(x) { case0: if(y<0) { //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y>0) { //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } break; default: if(x>0) { if(y<0) { //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y==0) { //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y>0) { //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } } else { if(y<0) { //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y==0) { //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y
Dir.push_back(0);
isCorner();
if(corner<=Corner)
array[x2][y2]=-1;
returntrue;
Dir.pop_back();
if(x1>x2)//left
Dir.push_back
(2);
if(y1>y2)//up
Dir.push_back(3);
if(y1 { Dir.push_back(1); isCorner(); if(corner<=Corner) { array[x2][y2]=-1; returntrue; } Dir.pop_back(); } Num--; vector::iteratorit=temp.end(); array[x1][y1]=*(it-1); temp.pop_back(); returnfalse; } else{ Num++; //否则移动到相邻的方块上继续寻找 switch(x) { case0: if(y<0) { //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y>0) { //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } break; default: if(x>0) { if(y<0) { //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y==0) { //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y>0) { //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } } else { if(y<0) { //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner)) { Dir.push_back(1); if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找上边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner)) { Dir.push_back(3); if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找左边的 if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner)) { Dir.push_back(2); if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); } if(y==0) { //寻找右边的 if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner)) { Dir.push_back(0); if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2)) { isCorner(); returntrue; } Dir.pop_back(); } isCorner(); //寻找下边的 if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y
(1);
Num--;
vector:
iteratorit=temp.end();
array[x1][y1]=*(it-1);
temp.pop_back();
returnfalse;
else{
//否则移动到相邻的方块上继续寻找
switch(x)
case0:
if(y<0)
//寻找下边的
if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y1+1]==0&&(corner<=Corner))
if(linkProcess(x1,y1+1,x2,y2,x1-x2,y1+1-y2))
//寻找右边的
if((y1+1<=ROW)&&(x1+1<=COL-1)&&(x1>=0)&&(y1>=0)&&array[x1+1][y1]==0&&(corner<=Corner))
if(linkProcess(x1+1,y1,x2,y2,x1+1-x2,y1-y2))
//寻找左边的
if((y1+1<=ROW)&&(x1+1<=COL)&&(x1-1>=0)&&(y1>=0)&&array[x1-1][y1]==0&&(corner<=Corner))
if(linkProcess(x1-1,y1,x2,y2,x1-1-x2,y1-y2))
//寻找上边的
if((y1+1<=ROW)&&(x1+1<=COL)&&(x1>=0)&&(y1-1>=0)&&array[x1][y1-1]==0&&(corner<=Corner))
if(linkProcess(x1,y1-1,x2,y2,x1-x2,y1-1-y2))
if(y>0)
break;
default:
if(x>0)
if(y==0)
else
if((y1+1<=ROW-1)&&(x1+1<=COL)&&(x1>=0)&&(y1>=0)&&array[x1][y
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2