Пример #1
0
 /// <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);
 }
Пример #2
0
 /// <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);
 }
Пример #3
0
        /// <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);
        }