最近好像很多人看郁金香的视频,看到连连看外挂编写时,遇到了连连看算法的问题,有几个朋友拿着郁金香的代码问我,
看别人的代码永远比自己写要麻烦的多啊,所以我也写了个连连看算法,不算最优,不过思路清楚。
//确定棋子在三折线内可连接
bool LinkPair(int x1,int y1,int x2,int y2,int *xxx)
{
POINT p1,p2;
bool line1=true,line2=true,line3=true;
bool results=true;
if(y1==y2)//处理在同一纵线上的两个相同的按钮是否可消
{
for(int v1=min(x1,x2)+1;v1<max(x1,x2);v1++)
{
if(buffer[y1][v1]!=0)
{
results=false;
break;
}
}
if(results)
{
*xxx=-1;
return true;
}
}
results=true;
if(x1==x2)//处理在同一横线上的两个相同的按钮是否可消
{
for(int h1=min(y1,y2)+1;h1<max(y1,y2);h1++)
{
if(buffer[h1][x1]!=0)
{
results=false;
break;
}
}
if(results)
{
*xxx=-1;
return true;
}
}
/*水平方向的三折线连通测试如
|---- ----------|
| |
| |
|------ ------|
*/
for(int i=0;i<19;i++)
{
for(int v1=min(i,x1);v1<=max(i,x1);v1++)//测试上横线
{
if(buffer[y1][v1]!=0 && v1!=x1)
{
line1=false;
break;
}
else line1=true;
}
if(line1)
{
for(int h=min(y1,y2)+1;h<max(y1,y2);h++)//测试纵线
{
if(buffer[h][i]!=0)
{
line2=false;
break;
}
else line2=true;
}
if(line2)
{
for(int v2=min(i,x2);v2<=max(x2,i);v2++)//测试下横线
{
if(buffer[y2][v2]!=0 && v2!=x2)
{
line3=false;
break;
}
else line3=true;
}
}
}
if(line1 && line2 && line3)
{
*xxx=i;
return true;
}
}
line1=true,line2=true,line3=true;
/*纵向的三折线连通测试如
|------|
| |
| |
|
|
| |
| |
|-------|
*/
for(int yy=0;yy<11;yy++)
{
for(int h1=min(yy,y1);h1<=max(yy,y1);h1++)
{
if(buffer[h1][x1]!=0 && h1!=y1)
{
line1=false;
break;
}
else line1=true;
}
if(line1)
{
for(int vv=min(x1,x2)+1;vv<max(x1,x2);vv++)
{
if(buffer[yy][vv]!=0)
{
line2=false;
break;
}
else line2=true;
}
if(line2)
{
for(int h2=min(yy,y2);h2<=max(yy,y2);h2++)
{
if(buffer[h2][x2]!=0 && h2!=y2)
{
line3=false;
break;
}
else line3=true;
}
}
}
if(line1&&line2&&line3)
{
*xxx=yy;
return true;
}
}
return false;
}
玩技术,要学会忍受寂寞--