// Wir sammeln die Stein-Controls des Spielbretts ein,
 // um einfacher per Zeile/Spalte auf sie zugreifen zu können.
 void CollectStones()
 {
     _stones = new FlipControl[8, 8];
     foreach (var ch in GameGrid.Children)
     {
         Border field = ch as Border;
         if (field != null)
         {
             int         r     = Grid.GetRow(field) - 1;
             int         c     = Grid.GetColumn(field) - 1;
             FlipControl stone = field.Child as FlipControl;
             _stones[r, c] = stone;
             if ((r == 3 && c == 4) || (r == 4 && c == 3))
             {
                 stone.Flip(false);
             }
         }
     }
 }
        void DisplayMatch(bool animate = true)
        {
            for (int row = 0; row < 8; ++row)
            {
                for (int column = 0; column < 8; ++column)
                {
                    int         stone   = _match.Game.StoneAt(row, column);
                    FlipControl control = _stones[row, column];
                    switch (stone)
                    {
                    case -1:
                        control.Visibility = Visibility.Hidden;
                        break;

                    case 0:
                        if (control.Visibility == Visibility.Visible)
                        {
                            if (!control.IsFlipped)
                            {
                                control.Flip(animate);
                            }
                        }
                        else
                        {
                            if (!control.IsFlipped)
                            {
                                control.Flip(false);
                            }
                            control.Visibility = Visibility.Visible;
                        }
                        break;

                    case 1:
                        if (control.Visibility == Visibility.Visible)
                        {
                            if (control.IsFlipped)
                            {
                                control.Flip(animate);
                            }
                        }
                        else
                        {
                            if (control.IsFlipped)
                            {
                                control.Flip(false);
                            }
                            control.Visibility = Visibility.Visible;
                        }
                        break;
                    }
                }
            }
            tbLog.Text = _match.GetLog();
            tbLog.ScrollToEnd();
            tbScore.Text = string.Format("Schwarz: {0}\r\nWeiß: {1}", _match.Game.CountStonesFor(0), _match.Game.CountStonesFor(1));
            var player   = _match.NextPlayer;
            int playerId = _match.GetPlayerId(player);
            var panel    = playerId == 0 ? statusPlayer1 : statusPlayer2;

            if (player.IsInteractive)
            {
                panel.Text = "";
            }
            else
            {
                string stat = player.GetStatistics();
                if (!string.IsNullOrEmpty(stat))
                {
                    panel.Text = string.Format("{0}: {1}", playerId == 0 ? "Schwarz" : "Weiß", stat);
                }
                else
                {
                    panel.Text = "";
                }
            }
        }