/// <summary> /// Carga el tablero de juego /// </summary> private void LoadGameBoard(Board.VariationModel variation, Game game) { if (game.BoardSetup != null) { // Asigna las propiedades variation.Setup.CanBlackCastleKingSide = game.BoardSetup.CanBlackCastleKingSide; variation.Setup.CanBlackCastleQueenSide = game.BoardSetup.CanBlackCastleQueenSide; variation.Setup.CanWhiteCastleKingSide = game.BoardSetup.CanWhiteCastleKingSide; variation.Setup.CanWhiteCastleQueenSide = game.BoardSetup.CanWhiteCastleQueenSide; if (game.BoardSetup.EnPassantSquare == null) { variation.Setup.EnPassantCell = null; } else { variation.Setup.EnPassantCell = new CellConversor().ConvertCell(game.BoardSetup.EnPassantSquare.Rank, game.BoardSetup.EnPassantSquare.File); } variation.Setup.FullMoveCount = game.BoardSetup.FullMoveCount; variation.Setup.HalfMoveClock = game.BoardSetup.HalfMoveClock; variation.Setup.IsWhiteMove = game.BoardSetup.IsWhiteMove; // Interpreta la cadena FEN con las piezas iniciales if (game.Tags.TryGetValue("FEN", out string boardPieces)) { variation.Setup.Pieces.AddRange(ParseBoardPieces(boardPieces)); } } }
/// <summary> /// Interpreta una variación /// </summary> internal Board.VariationModel Parse(Game game) { Board.VariationModel variation = new Board.VariationModel(); // Carga el setup del tablero LoadGameBoard(variation, game); // Carga los movimientos try { variation.Movements.AddRange(new GameMovementsParser().Parse(variation, game)); } catch (Exception exception) { variation.ParseError = $"Error en la interpretación del juego: {exception.Message}"; } // Devuelve la variación return(variation); }