Пример #1
0
 /// <summary>
 ///		Muestra los movimientos de un juego
 /// </summary>
 private void WriteMovements(int indent, MovementModelCollection movements)
 {
     foreach (MovementBaseModel movement in movements)
     {
         // Escribe el movimiento
         WriteMovement(indent, movement);
         // Escribe las variaciones
         if (movement.Variations.Count > 0)
         {
             foreach (MovementVariationModel variation in movement.Variations)
             {
                 WriteVariation(indent + 1, movement.Variations.IndexOf(variation), variation);
             }
         }
     }
 }
Пример #2
0
        /// <summary>
        ///		Carga el listView con los movimientos de la variación del juego
        /// </summary>
        private void LoadListViewMovements(MovementModelCollection movements)
        {
            List <BaseMovementViewModel> movementViewModels = new List <BaseMovementViewModel>();

            // Crea los movimientos
            foreach (MovementBaseModel baseMovement in movements)
            {
                switch (baseMovement)
                {
                case MovementFigureModel movement:
                    movementViewModels.Add(new MovementFigureViewModel(MovementsList, movement));
                    break;

                case MovementGameEndModel movement:
                    movementViewModels.Add(new MovementGameEndViewModel(movement));
                    break;
                }
            }
            // Muestra los movimientos en la lista
            MovementsList.LoadMovements(movementViewModels);
        }
        /// <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);
        }