package ru.job4j.chess.figures;

import ru.job4j.chess.Cell;
import ru.job4j.chess.exceptions.ImpossibleMoveException;

/**
 * Класс для описания шахматной фигуры слон.
 */
public class Bishop extends Figure {

    /**
     * Конструктор класса.
     * @param position ячейка шахматной доски, на которой располагается фигура.
     */
    public Bishop(Cell position) {
        super(position);
    }

    /**
     * Метод для определия пути фигуры до ячейки назначения.
     * @param dist ячейка, в которую фигура должна прийти.
     * @return массив ячеек, которые фигура должна пройти, чтобы оказаться в ячейке назначения.
     * @throws ImpossibleMoveException исключение невозможности движения фигуры в указанную ячейку.
     */
    public Cell[] way(Cell dist) throws ImpossibleMoveException {
        Cell[] cellWay;
        if (((this.getPosition().getX() - this.getPosition().getY()) != (dist.getX() - dist.getY()))
                && ((this.getPosition().getX() + this.getPosition().getY()) != (dist.getX() + dist.getY()))) {
            throw new ImpossibleMoveException();
        }
        cellWay = new Cell[Math.abs(this.getPosition().getX() - dist.getX())];
        if (dist.getX() > this.getPosition().getX()) {
            if (dist.getY() > this.getPosition().getY()) {
                for (int i = 1; i <= cellWay.length; i++) {
                    cellWay[i - 1] = new Cell(this.getPosition().getX() + i, this.getPosition().getY() + i);
                }
            } else {
                for (int i = 1; i <= cellWay.length; i++) {
                    cellWay[i - 1] = new Cell(this.getPosition().getX() + i, this.getPosition().getY() - i);
                }
            }
        } else {
            if (dist.getY() > this.getPosition().getY()) {
                for (int i = 1; i <= cellWay.length; i++) {
                    cellWay[i - 1] = new Cell(this.getPosition().getX() - i, this.getPosition().getY() + i);
                }
            } else {
                for (int i = 1; i <= cellWay.length; i++) {
                    cellWay[i - 1] = new Cell(this.getPosition().getX() - i, this.getPosition().getY() - i);
                }
            }
        }
        return cellWay;
    }

    /**
     * Метод для клонирования фигуры в ячейку назначения.
     * @param dist новоя ячейка, в которой будет располагаться фигура.
     * @return фигурв в новой ячейке.
     */
    public Figure clone(Cell dist) {
        return new Bishop(dist);
    }
}


@@ -804,65 +804,88 @@
     
-Cell%5B%5D cellWay;%0A        if (((this.getPosition().getX() -
+int distanceX = this.getPosition().getX() - dist.getX();%0A        int distanceY =
  thi
@@ -906,33 +906,16 @@
 ).getY()
-) != (dist.getX()
  - dist.
@@ -920,18 +920,17 @@
 t.getY()
-))
+;
 %0A       
@@ -934,106 +934,77 @@
     
-        && ((this.getPosition().getX() + this.getPosition().getY()) != (dist.getX() + dist.getY())
+Cell%5B%5D cellWay;%0A        if (Math.abs(distanceX) != Math.abs(distanceY
 )) %7B
@@ -1103,658 +1103,127 @@
 abs(
-this.getPosition().getX() - dist.getX())%5D;%0A        if (dist.getX() %3E this.getPosition().getX()) %7B%0A            if (dist.getY() %3E this.getPosition().getY()) %7B%0A                for (int i = 1; i %3C= cellWay.length; i++) %7B%0A                    cellWay%5Bi - 1%5D = new Cell(this.getPosition().getX() + i, this.getPosition().getY() + i);%0A                %7D%0A            %7D else %7B%0A                for (int i = 1; i %3C= cellWay.length; i++) %7B%0A                    cellWay%5Bi - 1%5D = new Cell(this.getPosition().getX() + i, this.getPosition().getY() - i);%0A                %7D%0A            %7D%0A        %7D else %7B%0A            if (dist.getY() %3E this.getPosition().getY()) %7B%0A        
+distanceX)%5D;%0A        int signX = distanceX / Math.abs(distanceX);%0A        int signY = distanceY / Math.abs(distanceY);%0A
     
@@ -1278,32 +1278,24 @@
             
-        
 cellWay%5Bi - 
@@ -1338,190 +1338,21 @@
 X() 
-- i, this.getPosition().getY() + i);%0A                %7D%0A            %7D else %7B%0A                for (int i = 1; i %3C= cellWay.length; i++) %7B%0A                    cellWay%5Bi - 1%5D = new Cell(
++ signX * i, 
 this
@@ -1373,64 +1373,34 @@
 .get
-X() - i, this.getPosition().getY() - i);%0A       
+Y() + signY * i);%0A
         
  %7D%0A 
@@ -1399,34 +1399,10 @@
     
- 
 %7D%0A
-            %7D%0A        %7D
 %0A   

fix task - Тестовое задание. [#792]