public async Task <Dictionary <string, string> > Load(string s) { if (s == "") { return(null); } Dictionary <string, string> sections = StaticHelpers.GetSections(s); if (_game.Deserialize(sections, _view.Deck) == false) { return(null); } Dictionary <string, string> game = StaticHelpers.DeserializeDictionary(sections["State"]); if (sections == null) { return(null); } if (game["Version"] != SERIALIZATION_VERSION) { return(null); } _gameState = (GameState)Enum.Parse(typeof(GameState), game["GameState"]); _dealer = (PlayerType)Enum.Parse(typeof(PlayerType), game["Dealer"]); _totalCardsDropped = Convert.ToInt32(game["TotalCardsDropped"]); _nPlayerCountingPoint = Convert.ToInt32(game["PlayerCountingPoints"]); _nPlayerPointsThisTurn = Convert.ToInt32(game["PlayerPointsThisTurn"]); _nComputerCountingPoint = Convert.ToInt32(game["ComputerCountingPoints"]); _nComputerPointsThisTurn = Convert.ToInt32(game["ComputerPointsThisTurn"]); _nCribPointsThisTurn = Convert.ToInt32(game["CribPointsThisTurn"]); int playerScore = Convert.ToInt32(game["PlayerScore"]); int computerScore = Convert.ToInt32(game["ComputerScore"]); _hfs = _game.GetHfs(); _view.Hfs = _hfs; Dictionary <string, string> grids = StaticHelpers.DeserializeDictionary(sections["Grids"]); List <CardView> PlayerCards = StaticHelpers.DeserializeToList(grids["Player"], _view.Deck); List <CardView> ComputerCards = StaticHelpers.DeserializeToList(grids["Computer"], _view.Deck); List <CardView> cribCards = StaticHelpers.DeserializeToList(grids["Crib"], _view.Deck); CardView SharedCard = StaticHelpers.CardFromString(grids["SharedCard"], _view.Deck); List <CardView> playedCards = StaticHelpers.DeserializeToList(grids["Played"], _view.Deck); List <Task <object> > taskList = new List <Task <object> >(); _view.MoveCards(taskList, playedCards, _view.GridPlayedCards); _view.MoveCards(taskList, cribCards, _view.GridCrib); _view.MoveCards(taskList, PlayerCards, _view.GridPlayer); _view.MoveCards(taskList, ComputerCards, _view.GridComputer); if (_gameState == GameState.PlayerGiveToCrib) { _crib.AddRange(playedCards); } await Task.WhenAll(taskList); SharedCard.BoostZindex(ZIndexBoost.SmallBoost); _game.UpdateScoreDirect(PlayerType.Player, ScoreType.Saved, playerScore); // give the points to the player _game.UpdateScoreDirect(PlayerType.Computer, ScoreType.Saved, computerScore); // give the points to the player await UiState.AddScore(PlayerType.Player, playerScore); await UiState.AddScore(PlayerType.Computer, computerScore); _view.CountControl.Count = _game.CurrentCount; await FixUpUiState(); string scoreHistory = ""; if (sections.TryGetValue("Score History", out scoreHistory)) { await _view.Load(scoreHistory); } if (_gameState == GameState.PlayerScoreHand) { // // if we saved in the state where the player is supposed to score the hard, we need to drive the state machine // through the completion of the GameState.ScoreHand states if (_dealer == PlayerType.Player) { await SetState(GameState.PlayerScoreHand); await SetState(GameState.ShowCrib); await SetState(GameState.PlayerScoreCrib); _gameState = GameState.EndOfHand; } else { _gameState = GameState.ScoreHands; } } else if (_gameState == GameState.PlayerScoreCrib) { await SetState(GameState.PlayerScoreCrib); _gameState = GameState.EndOfHand; } SetStateAsync(_gameState); return(sections); }