我们有起点和终点,并且知道,我们只需要查看水平线、垂直线或对角线。
首先,计算一个方向向量。这是一个 2D 点,其值类似于
Point north = new Point(0,1);
Point northEast = new Point(1,1);
Point east = new Point(1,1);
// ...
Point northWest = new Point(-1,1);
这很简单:
Point start = getStart();
Point dest = getDest();
Point direction = new Point(Math.signum(dest.x-start.x),
Math.signum(dest.y-start.y));
(例如:开始 = (2,2), 目的地 = (7,7) -> (signum(7-2), signum(7-2)) = (1,1))
现在只需将棋盘位置增加方向点,直到您到达目的地并检查每个 2D 点,如果该位置包含一块。
这是一个快速草稿(如果无法编译,则将其视为伪代码;))
Point start = getStart();
Point dest = getDest();
if (start.equals(dest)) return false; // nothing in between by definition
Point direction = new Point(Math.signum(dest.x-start.x),
Math.signum(dest.y-start.y));
Point current = new Point(start.x+direction.x, start.y+direction.y);
while(!current.equals(dest)) {
if (isOccupied(board[current.x][current.y])) // test to be implemented
return true; // something in between
current.x = current.x + direction.x;
current.y = current.y + direction.y;
}
return false; // nothing in between