Esempio n. 1
0
 /// <summary>
 ///		Convierte los datos básicos del movimiento
 /// </summary>
 private void ConvertMovementBase(BaseMovementModel movementPgn, MovementBaseModel movement)
 {
     // Asigna los comentarios
     foreach (string comment in movementPgn.Comments)
     {
         movement.Comments.Add(comment);
     }
     // Asigna la información
     foreach (InfoMovementModel info in movementPgn.Info)
     {
         movement.Info.Add(new MovementInfoModel(info.Content));
     }
 }
Esempio n. 2
0
        /// <summary>
        ///		Convierte un movimiento
        /// </summary>
        private MovementBaseModel ConvertMovement(BaseMovementModel movementPgn)
        {
            switch (movementPgn)
            {
            case PieceMovementModel movement:
                return(ConvertPieceMovement(movement));

            case ResultMovementModel movement:
                return(ConvertResultMovement(movement));

            default:
                throw new LibChessGame.Models.Exceptions.GameReaderException("Unknown movement type");
            }
        }
Esempio n. 3
0
        /// <summary>
        ///		Escribe los datos de un movimiento
        /// </summary>
        private void WriteMovement(int indent, BaseMovementModel movement)
        {
            // Cabecera
            Console.Write(new string('\t', indent));
            // Número de movimiento
            Console.Write($"{movement.Turn.Number} - {movement.Turn.Type.ToString()} ");
            // Datos del movimiento
            switch (movement)
            {
            case ResultMovementModel result:
                Console.Write(result.Result.ToString());
                break;

            case PieceMovementModel piece:
                Console.Write(piece.Content);
                break;
            }
            // Información
            if (movement.Info.Count > 0)
            {
                foreach (InfoMovementModel info in movement.Info)
                {
                    Console.Write($" --> Info {movement.Info.IndexOf(info).ToString()} - [{info.Content}]");
                }
            }
            // Comentarios
            if (movement.Comments.Count > 0)
            {
                foreach (string comment in movement.Comments)
                {
                    Console.Write($" --> Comment {movement.Comments.IndexOf(comment).ToString()} - [{comment}]");
                }
            }
            else
            {
                Console.Write(" No comments");
            }
            // Salto de línea
            Console.WriteLine();
        }
Esempio n. 4
0
        /// <summary>
        ///		Lee los movimientos
        /// </summary>
        private SentenceBaseModel ReadMovements(IEnumerator <SentenceBaseModel> sentenceEnumerator, SentenceBaseModel previousSentence,
                                                List <BaseMovementModel> movements)
        {
            SentenceBaseModel sentence     = previousSentence;
            BaseMovementModel lastMovement = null;
            TurnModel         lastTurn     = null;

            // Añade los movimientos
            do
            {
                // Trata la sentencia
                switch (sentence)
                {
                case SentenceTurnNumberModel sentenceTurn:
                    lastMovement = null;
                    lastTurn     = new TurnModel(sentenceTurn.Content, TurnModel.TurnType.White);
                    break;

                case SentenceTurnPlayModel sentencePlay:
                    if (lastTurn == null)
                    {
                        sentence = new SentenceErrorModel($"There is not turn to add the play {sentencePlay.Content}");
                    }
                    else
                    {
                        // Crea el movimiento
                        lastMovement = new PieceMovementModel(lastTurn, sentencePlay.Content);
                        // Añade el movimiento
                        movements.Add(lastMovement);
                    }
                    break;

                case SentenceTurnResultModel sentenceResult:
                    if (lastTurn == null)
                    {
                        sentence = new SentenceErrorModel($"There is not turn to add the result {sentenceResult.Content}");
                    }
                    else
                    {
                        // Crea el movimiento
                        lastMovement = new ResultMovementModel(lastTurn, sentence.Content);
                        // Añade el movimiento
                        movements.Add(lastMovement);
                    }
                    break;

                case SentenceTurnInformationModel sentenceInformation:
                    if (lastMovement == null)
                    {
                        sentence = new SentenceErrorModel($"There is not movement to add the information {sentenceInformation.Content}");
                    }
                    else
                    {
                        lastMovement.Info.Add(new InfoMovementModel(sentence.Content));
                    }
                    break;

                case SentenceCommentModel sentenceComment:
                    if (lastMovement == null)
                    {
                        sentence = new SentenceErrorModel($"There is not sentence to add the comment {sentenceComment.Content}");
                    }
                    else
                    {
                        lastMovement.Comments.Add(sentenceComment.Content);
                    }
                    break;

                case SentenceTurnStartVariationModel sentenceVariation:
                    if (lastMovement == null)
                    {
                        sentence = new SentenceErrorModel("There is not sentence to add a variation");
                    }
                    else
                    {
                        VariationModel variation = new VariationModel(lastMovement);

                        // Limpia esta sentencia del enumerado
                        sentence = GetNextSentence(sentenceEnumerator);
                        // Añade los comentarios y la información a la variación
                        while (sentence is SentenceTurnInformationModel || sentence is SentenceCommentModel)
                        {
                            // Añade la información de la sentencia
                            switch (sentence)
                            {
                            case SentenceTurnInformationModel sentenceInfo:
                                variation.Info.Add(new InfoMovementModel(sentenceInfo.Content));
                                break;

                            case SentenceCommentModel sentenceComment:
                                variation.Comments.Add(sentenceComment.Content);
                                break;
                            }
                            // Pasa a la siguiente sentencia
                            sentence = GetNextSentence(sentenceEnumerator);
                        }
                        // Lee los movimientos de la variación
                        sentence = ReadMovements(sentenceEnumerator, sentence, variation.Movements);
                        // Añade la variación a la colección
                        if (variation.Movements.Count > 0)
                        {
                            lastMovement.Variations.Add(variation);
                        }
                        // Pasa a la siguiente sentencia
                        if (!(sentence is SentenceTurnEndVariationModel))
                        {
                            sentence = new SentenceErrorModel("Can't find the end variation sentence");
                        }
                    }
                    break;
                }
                // Pasa a la siguiente sentencia
                if (!(sentence is SentenceErrorModel))
                {
                    sentence = GetNextSentence(sentenceEnumerator);
                }
            }while (!(sentence is SentenceEndModel) && !(sentence is SentenceErrorModel) && !(sentence is SentenceTagModel) && !(sentence is SentenceTurnEndVariationModel));
            // Devuelve la última sentencia leída
            return(sentence);
        }