/// <summary>
        /// Initialize Grid with fields and start game
        /// </summary>
        public void InitGame()
        {
            Random randNum = new Random();
            int    Min     = 0;
            int    Max     = this.dimensions;

            this.clickedFields   = 0;
            this.info.Visibility = Visibility.Hidden;
            this.time.Visibility = Visibility.Hidden;
            this.startTime       = DateTime.Now.ToString("h:mm:ss tt");

            randomBombs = Point.GenerateRandomPoints(Min, Max, Convert.ToInt32(this.dimensions * this.mode));


            for (int x = 0; x < this.dimensions; x++)
            {
                this.mainGrid.ColumnDefinitions.Add(new ColumnDefinition());
                this.mainGrid.RowDefinitions.Add(new RowDefinition());


                for (int y = 0; y < this.dimensions; y++)
                {
                    Field field = Field.AddButton(x, y, this.mainGrid, fields.Count());

                    field.Button.Click     += OnFieldClick;
                    field.Button.MouseDown += OnFieldRightClick;


                    fields.Add(field);
                }
            }

            foreach (Field field in fields)
            {
                Point  buttonPoint = field.Point;
                Button button      = field.Button;

                //@todo optimize
                foreach (Point randomBomb in randomBombs)
                {
                    bool found = randomBomb.X == buttonPoint.X && randomBomb.Y == buttonPoint.Y;

                    if (found)
                    {
                        field.State = new State(0, 0, true);
                    }
                }

                if (field.State == null)
                {
                    field.State = new State(0, 0, false);
                }
            }

            foreach (Field field in fields)
            {
                Point buttonPoint = field.Point;

                int bombsAround = Point.GetBombsAround(buttonPoint, randomBombs);

                if (bombsAround > 0)
                {
                    field.State.Number = bombsAround;
                }
                else
                {
                    field.State.Number = null;
                }

                field.Button.Foreground = Brushes.Black;
            }


            this.bombFlags = this.randomBombs.Count();
            ShowCurrentFlags();
        }