public void Update(GameRecord gameRecord)
        {
            GameState gs = new GameState(gameRecord, null);

            foreach (PlayerState ps in gs.Players)
            {
                if (ps.Hand == null)
                {
                    continue;
                }
                string[] handS = ps.Hand.Split(_cardSeparators, StringSplitOptions.RemoveEmptyEntries);
                if (handS.Length >= 2 && handS[0] != "?" && handS[1] != "?")
                {
                    HeHsDeviation dev;
                    if (!_playerData.TryGetValue(ps.Name, out dev))
                    {
                        dev = new HeHsDeviation();
                        _playerData.Add(ps.Name, dev);
                    }
                    int[] hand = StdDeck.Descriptor.GetIndexes(ps.Hand);
                    dev.ProcessHand(hand);
                    if (ps.Name == _heroName)
                    {
                        _heroResult += ps.Result;
                        if (_printHeroChartData)
                        {
                            ChartData cd = new ChartData();
                            cd.Result       = _heroResult;
                            cd.AccDeviation = dev.AccDeviation.ShallowCopy();
                            _heroChartData.Add(cd);
                        }
                    }
                }
            }
        }
 public void Print(TextWriter tw)
 {
     foreach (KeyValuePair <string, HeHsDeviation> kvp in _playerData)
     {
         tw.WriteLine("Player: {0}", kvp.Key);
         for (int r = 0; r < 4; ++r)
         {
             HeHsDeviation dev = kvp.Value;
             tw.WriteLine("Round {0}: hand count {1,10:#,#}, acc HS dev: {2,10:0.0000}, av HS dev: {3,12:0.0000000}", r,
                          dev.HandCount[r], dev.AccDeviation[r], dev.AvDeviation[r]);
         }
         tw.WriteLine();
     }
     if (_printHeroChartData)
     {
         Console.WriteLine("Chart data for hero: '{0}'", _heroName);
         Console.WriteLine("Result AccDev0 AccDev1 AccDev2 AccDev3");
         foreach (ChartData cd in _heroChartData)
         {
             Console.WriteLine("{0} {1} {2} {3} {4}", cd.Result, cd.AccDeviation[0], cd.AccDeviation[1], cd.AccDeviation[2], cd.AccDeviation[3]);
         }
     }
 }