/// <summary>
        ///		Interpreta los movimientos
        /// </summary>
        private MovementModelCollection ParseMovements(VariationModel variation, MoveTextEntryList moveEntryList)
        {
            MovementModelCollection movements = new MovementModelCollection();

            PieceBaseModel.PieceColor actualColor    = PieceBaseModel.PieceColor.White;
            PieceBaseModelCollection  previousPieces = new PieceBaseModelCollection();

            // Inicializa el tablero
            variation.GameBoard.Reset();
            // Cambia el color inicial
            if (variation.Setup.HasSetup && !variation.Setup.IsWhiteMove)
            {
                actualColor = PieceBaseModel.PieceColor.Black;
            }
            // Interpreta la lista de movimientos
            try
            {
                foreach (MoveTextEntry moveEntry in moveEntryList)
                {
                    switch (moveEntry)
                    {
                    case RAVEntry rav:
                        MovementFigureModel lastMovement = movements.SearchLastPieceMovement();

                        if (lastMovement != null)
                        {
                            lastMovement.Variation = CreateVariation(actualColor, previousPieces, rav);
                        }
                        break;

                    case NAGEntry nag:
                        System.Diagnostics.Debug.WriteLine(moveEntry.GetType().ToString());
                        break;

                    case CommentEntry comment:
                        movements.Add(new MovementRemarksModel(comment.Comment));
                        break;

                    case MovePairEntry movement:
                        // Añade el movimiento de blancas
                        movements.Add(ParseMovement(variation.GameBoard, actualColor, (moveEntry as MovePairEntry).White));
                        actualColor = GetNextColor(actualColor);
                        // Clona la lista de piezas hasta el movimiento anterior
                        previousPieces = variation.GameBoard.Pieces.Clone();
                        // Añade el movimiento de negras
                        movements.Add(ParseMovement(variation.GameBoard, actualColor, (moveEntry as MovePairEntry).Black));
                        actualColor = GetNextColor(actualColor);
                        break;

                    case HalfMoveEntry movement:
                        // Clona la lista de piezas hasta el movimiento anterior
                        previousPieces = variation.GameBoard.Pieces.Clone();
                        // Añade el movimiento actual
                        movements.Add(ParseMovement(variation.GameBoard, actualColor, (moveEntry as HalfMoveEntry).Move));
                        actualColor = GetNextColor(actualColor);
                        break;

                    case GameEndEntry movement:
                        movements.Add(new MovementGameEndModel(ConvertResult(movement.Result)));
                        break;

                    default:
                        System.Diagnostics.Debug.WriteLine(moveEntry.GetType().ToString());
                        break;
                    }
                }
            }
            catch (Exception exception)
            {
                variation.ParseError = exception.Message;
            }
            // Devuelve la colección de movimientos
            return(movements);
        }