コード例 #1
0
        /// <summary>
        ///		Crea las acciones asociadas a un movimiento
        /// </summary>
        internal void CreateActions(GameBoardModel board, MovementFigureModel movement,
                                    CellModel target, CellModel origin, PieceBaseModel.PieceType?targetPiece)
        {
            PieceBaseModel piece = board.SearchMoveTo(movement, target, origin);

            // Comprueba que se haya localizado la pieza que hizo el movimiento
            if (piece == null)
            {
                throw new Exceptions.GameReaderException($"No se encuentra ninguna pieza que pueda realizar el movimiento {movement.Text}");
            }
            // Crea el movimiento
            CreateMoveAction(piece.Type, piece.Color, piece.Cell, target);
            // Crea la captura
            if (movement.Type == MovementFigureModel.MovementType.Capture || movement.Type == MovementFigureModel.MovementType.CaptureEnPassant)
            {
                CreateCaptureAction(board, targetPiece, GetNextColor(movement.Color), target);
            }
            // Crea la promoción
            if (movement.PromotedPiece != null)
            {
                // Crea un movimiento para eliminar el peón que se ha promocionado
                //? No llama a CreateCaptureAction porque si ha habido una captura en este mismo movimiento
                //? la pieza aún no se habrá eliminado del destino y por tanto nos creará una captura
                //? sobre la pieza que se ha eliminado ya
                Add(new ActionCaptureModel(piece.Type, movement.Color, target));
                // Crea una promoción
                CreatePromoteAction(movement.PromotedPiece, movement.Color, target);
            }
        }
コード例 #2
0
        /// <summary>
        ///		Crea las acciones de enroque
        /// </summary>
        internal void CreateCastleKingActions(GameBoardModel board, MovementFigureModel movement)
        {
            int row = movement.Color == PieceBaseModel.PieceColor.White ? 7 : 0;

            if (movement.Type == MovementFigureModel.MovementType.CastleKingSide)                     // enroque corto
            {
                CreateMoveAction(PieceBaseModel.PieceType.Rook, movement.Color, new CellModel(row, 7), new CellModel(row, 5));
                CreateMoveAction(PieceBaseModel.PieceType.King, movement.Color, new CellModel(row, 4), new CellModel(row, 6));
            }
            else                     // enroque largo
            {
                CreateMoveAction(PieceBaseModel.PieceType.Rook, movement.Color, new CellModel(row, 0), new CellModel(row, 3));
                CreateMoveAction(PieceBaseModel.PieceType.King, movement.Color, new CellModel(row, 4), new CellModel(row, 2));
            }
        }