Ejemplo n.º 1
0
 /// <summary>
 ///		Comprueba si la pieza se puede mover a una fila / columna
 /// </summary>
 public override bool CanMoveTo(GameBoardModel board, CellModel target, Movements.MovementFigureModel.MovementType type)
 {
     // Comprueba si puede mover
     if (IsDiagonalMovement(target, false))
     {
         return(board.IsEmpty(Cell, target) && IsLegal(board, target, type));
     }
     // Devuelve el valor que indica si puede mover
     return(false);
 }
Ejemplo n.º 2
0
 /// <summary>
 ///		Comprueba si la pieza se puede mover a una fila / columna
 /// </summary>
 public override bool CanMoveTo(GameBoardModel board, CellModel target, Movements.MovementFigureModel.MovementType type)
 {
     // Comprueba si es un movimiento horizontal / diagonal de un solo recuadro
     if (IsVerticalHorizontalMovement(target, true) || IsDiagonalMovement(target, true))
     {
         return(IsLegal(board, target, type));
     }
     // Si ha llegado hasta aquí es porque el movimiento no era legal
     return(false);
 }
Ejemplo n.º 3
0
        /// <summary>
        ///		Comprueba si la pieza se puede mover a una fila / columna
        /// </summary>
        public override bool CanMoveTo(GameBoardModel board, CellModel target, Movements.MovementFigureModel.MovementType type)
        {
            int  rowDiference    = Cell.Row - target.Row;
            int  columnDiference = Cell.Column - target.Column;
            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.IsEmpty(Cell, target);                            // ... si están vacías las celdas entre una y otra
                        }
                    }
                    else if (Math.Abs(rowDiference) == 1)
                    {
                        if (columnDiference == 0)
                        {
                            can = board.Pieces.IsEmpty(target);
                        }
                        else
                        {
                            can = type == Movements.MovementFigureModel.MovementType.Capture && board.CanCapture(this, target);
                        }
                    }
                }
            }
            // Devuelve el valor que indica si se puede mover
            return(can);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///		Comprueba si es legal un movimiento a una posición: si está vacío o si puede capturar
        /// </summary>
        internal bool IsLegal(GameBoardModel board, CellModel target, Movements.MovementFigureModel.MovementType type)
        {
            PieceBaseModel piece = board.Pieces.GetPiece(target);

            return(piece == null || (type == Movements.MovementFigureModel.MovementType.Capture && piece != null && piece.Color != Color));
        }
Ejemplo n.º 5
0
 /// <summary>
 ///		Comprueba si la pieza se puede mover a una fila / columna
 /// </summary>
 public abstract bool CanMoveTo(GameBoardModel board, CellModel target, Movements.MovementFigureModel.MovementType type);
Ejemplo n.º 6
0
        /// <summary>
        ///		Comprueba si la pieza se puede mover a una fila / columna
        /// </summary>
        public override bool CanMoveTo(Board.GameBoardModel board, Board.CellModel target, Movements.MovementFigureModel.MovementType type)
        {
            int rowDifference    = Math.Abs(Cell.Row - target.Row);
            int columnDifference = Math.Abs(Cell.Column - target.Column);

            // Puede moverse si se desplaza dos celdas en una dirección y una en otra
            if ((rowDifference == 2 && columnDifference == 1) ||
                (rowDifference == 1 && columnDifference == 2))
            {
                return(IsLegal(board, target, type));
            }
            // Devuelve el valor que indica que no se puede
            return(false);
        }