/// <summary> /// Comprueba si la pieza se puede mover a una fila / columna /// </summary> internal override bool CanMoveTo(SquareModel board, int fromRow, int fromColumn, int toRow, int toColumn) { // Comprueba si puede mover if (IsDiagonalMovement(fromRow, fromColumn, toRow, toColumn, false)) { return(board.IsPathEmpty(fromRow, fromColumn, toRow, toColumn) && board.IsLegalMoveTo(this, toRow, toColumn)); } // Devuelve el valor que indica si puede mover return(false); }
/// <summary> /// Comprueba si la pieza se puede mover a una fila / columna /// </summary> internal override bool CanMoveTo(SquareModel board, int fromRow, int fromColumn, int toRow, int toColumn) { // Comprueba si es un movimiento horizontal / diagonal if (IsVerticalHorizontalMovement(fromRow, fromColumn, toRow, toColumn, false) || IsDiagonalMovement(fromRow, fromColumn, toRow, toColumn, false)) { return(board.IsPathEmpty(fromRow, fromColumn, toRow, toColumn) && board.IsLegalMoveTo(this, toRow, toColumn)); } // Si ha llegado hasta aquí es porque el movimiento no era legal return(false); }
/// <summary> /// Comprueba si la pieza se puede mover a una fila / columna /// </summary> internal override bool CanMoveTo(SquareModel board, int fromRow, int fromColumn, int toRow, int toColumn) { int rowDiference = fromRow - toRow; int columnDiference = fromColumn - toColumn; bool can = false; // Comprueba si se puede mover if (Math.Abs(columnDiference) <= 1) // sólo se puede mover como máximo una columna a la izquierda { // Las blancas sólo se pueden mover hacia arriba y las negras sólo se pueden mover hacia abajo if ((Math.Sign(rowDiference) == 1 && Color == PieceColor.White) || (Math.Sign(rowDiference) == -1 && Color == PieceColor.Black)) { // Se puede mover dos filas: si no se ha movido y sólo ha ido en la misma columna o es una captura in Passant if (Math.Abs(rowDiference) == 2 && !IsMoved) { if (columnDiference == 0) // ... movimiento normal { can = board.IsPathEmpty(fromRow, fromColumn, toRow, toColumn); // ... si están vacías las celdas entre una y otra } } else if (Math.Abs(rowDiference) == 1) { if (columnDiference == 0) { can = board.IsEmpty(toRow, toColumn); } else { can = board.CanCapture(this, toRow, toColumn); } } } } // Devuelve el valor que indica si se puede mover return(can); }