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