Java代码
private boolean horizon(Point a, Point b)
{
if(a.x == b.x && a.y == b.y)//如果点击的是同一个图案,直接返回false
return false;
int x_start = a.y <= b.y ? a.y : b.y; //x_start=min{a.y,b.y}
int x_end = a.y <= b.y ? b.y : a.y; //x_end=max{a.y,b.y}
for(int x = x_start + 1; x < x_end; x++)//只要一个不是-1,直接返回false
if(map[a.x][x] != -1){
return false;
}
return true;
}
Java代码
private boolean vertical(Point a, Point b)
{
if(a.x == b.x && a.y == b.y)
return false;
int y_start = a.x <= b.x ? a.x : b.x;
int y_end = a.x <= b.x ? b.x : a.x;
for(int y = y_start + 1; y < y_end; y++)
if(map[y][a.y] != -1)
return false;
return true;
}
private boolean vertical(Point a, Point b)
{
if(a.x == b.x && a.y == b.y)
return false;
int y_start = a.x <= b.x ? a.x : b.x;
int y_end = a.x <= b.x ? b.x : a.x;
for(int y = y_start + 1; y < y_end; y++)
if(map[y][a.y] != -1)
return false;
return true;
} 一个拐角的检测:
如果一个拐角能连通的话,则必须存在C、D两点。其中C点的横坐标和A相同,纵坐标与B相同,D的横坐标与B相同,纵坐标与A相同。
Java代码
private boolean oneCorner(Point a, Point b)
{
Point c = new Point(a.x, b.y);
Point d = new Point(b.x, a.y);
if(map[c.x][c.y] == -1)
{
boolean method1 = horizon(a, c) && vertical(b, c);
return method1;
}
if(map[d.x][d.y] == -1)
{
boolean method2 = vertical(a, d) && horizon(b, d);
return method2;
} else
{