У нас есть начальная и конечная точки, и мы знаем, что нам нужно смотреть только на горизонтальные, вертикальные или диагональные линии.
Сначала вычислите вектор направления . Это 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) -> (знак (7-2), знак (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