黑夜的狼

沮丧吗,那就是一种无病呻吟!留恋它就是一种高度近视!目光应该放得更远一点! 别不想飞,只是要一步跨过太平洋!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近好像很多人看郁金香的视频,看到连连看外挂编写时,遇到了连连看算法的问题,有几个朋友拿着郁金香的代码问我,

看别人的代码永远比自己写要麻烦的多啊,所以我也写了个连连看算法,不算最优,不过思路清楚。

 

//确定棋子在三折线内可连接
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;
}

 

 

 

posted on 2010-09-08 15:18  anncesky  阅读(455)  评论(0)    收藏  举报