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