/// <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); }
/// <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); }
/// <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); }
/// <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)); }
/// <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);
/// <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); }