private void clear_Click(object sender, RoutedEventArgs e)
        {
            if (slider.Value >= 1)
            {
                string sValue = Convert.ToString(slider.Value);
                sizeText.Text = sValue + " x " + sValue;

                int width  = Convert.ToInt32(slider.Value);
                int height = Convert.ToInt32(slider.Value);

                foreach (Button button in ButtonList.buttons)
                {
                    playArea.Children.Remove(button);
                }
                foreach (ColumnDefinition column in ButtonList.columns)
                {
                    playArea.ColumnDefinitions.Remove(column);
                }
                foreach (RowDefinition row in ButtonList.rows)
                {
                    playArea.RowDefinitions.Remove(row);
                }

                AliveDead.CreateDictionary(width, height);
                CreateButtonsAndGrid(width, height);

                livesText.Text = "Alive: 0";
            }
        }
        private void slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e)
        {
            if (slider.Value >= 1)
            {
                string sValue = Convert.ToString(slider.Value);
                sizeText.Text = sValue + " x " + sValue;

                int width  = Convert.ToInt32(slider.Value);
                int height = Convert.ToInt32(slider.Value);

                foreach (Button button in ButtonList.buttons)
                {
                    playArea.Children.Remove(button);
                }
                foreach (ColumnDefinition column in ButtonList.columns)
                {
                    playArea.ColumnDefinitions.Remove(column);
                }
                foreach (RowDefinition row in ButtonList.rows)
                {
                    playArea.RowDefinitions.Remove(row);
                }

                AliveDead.CreateDictionary(width, height);
                CreateButtonsAndGrid(width, height);
                //AliveDead.ApplyStatus();
            }
        }
        public MainWindow()
        {
            InitializeComponent();
            // this is where i would take the input

            AliveDead.CreateDictionary(5, 5);

            _backgroundWorker = new BackgroundWorker
            {
                WorkerSupportsCancellation = true
            };
            _backgroundWorker.DoWork             += backgroundWorker_DoWork;
            _backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted;


            nextButton.Focus();
            CreateButtonsAndGrid(5, 5);
            underPop.Text = "<" + Convert.ToString(AliveDead.underPopulated);
            overPop.Text  = ">" + Convert.ToString(AliveDead.overPopulated);
            growthS.Text  = ">=" + Convert.ToString(AliveDead.growthStart);
            growthE.Text  = "<=" + Convert.ToString(AliveDead.growthEnd);

            slider.Value = 50;
        }
        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            var backgroundWorker = (BackgroundWorker)sender;

            while (!e.Cancel)
            {
                if (backgroundWorker.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
                else
                {
                    this.Dispatcher.Invoke(() =>
                    {
                        AliveDead.ButtonValues();
                        livesText.Text = "Alive: " + Convert.ToString(AliveDead.Next());
                        // could add an if statement to check if all boxes are false
                        // if true, call StopLoop();
                    });
                    Thread.Sleep(speed);
                }
            }
        }
        private void button_Click(object sender, RoutedEventArgs e)
        {
            var button = (Button)sender;

            if (((SolidColorBrush)button.Background).Color == Colors.White)
            {
                //ButtonList.buttons[0].Background = Brushes.ForestGreen;

                button.Background = Brushes.ForestGreen;
                if (shape.Count != 0)
                {
                    int counter = 0;
                    // since Dictionaries don't have traditional indecies i need to iterate through them to get the correct index.
                    foreach (KeyValuePair <Point, bool> keyValuePair in AliveDead.squares)
                    {
                        if (counter == ButtonList.buttons.IndexOf(button))
                        {
                            // this needs to be replaced with a list of points
                            List <Point> allToClick = new List <Point>();
                            foreach (Point point in shape)
                            {
                                allToClick.Add(new Point(keyValuePair.Key.x + point.x, keyValuePair.Key.y + point.y));
                            }

                            foreach (Point buttonPoint in allToClick)
                            {
                                if (AliveDead.squares.ContainsKey(buttonPoint))
                                {
                                    int counter2 = 0;
                                    foreach (KeyValuePair <Point, bool> keyValuePair1 in AliveDead.squares)
                                    {
                                        if (keyValuePair1.Key.x == buttonPoint.x && keyValuePair1.Key.y == buttonPoint.y && counter2 < ButtonList.buttons.Count)
                                        {
                                            if (ButtonList.buttons[counter2].Background != Brushes.ForestGreen)
                                            {
                                                ButtonList.buttons[counter2].Background = Brushes.ForestGreen;
                                                //AliveDead.alive += 1;
                                            }
                                        }
                                        counter2 += 1;
                                    }
                                }
                            }

                            break;
                        }
                        counter += 1;
                    }
                }
            }
            else if (((SolidColorBrush)button.Background).Color == Colors.ForestGreen)
            {
                AliveDead.alive  -= 1;
                button.Background = Brushes.White;
                if (shape.Count != 0)
                {
                    int counter = 0;
                    // since Dictionaries don't have traditional indecies i need to iterate through them to get the correct index.
                    foreach (KeyValuePair <Point, bool> keyValuePair in AliveDead.squares)
                    {
                        if (counter == ButtonList.buttons.IndexOf(button))
                        {
                            // this needs to be replaced with a list of points
                            List <Point> allToClick = new List <Point>();
                            foreach (Point point in shape)
                            {
                                allToClick.Add(new Point(keyValuePair.Key.x + point.x, keyValuePair.Key.y + point.y));
                            }

                            foreach (Point buttonPoint in allToClick)
                            {
                                if (AliveDead.squares.ContainsKey(buttonPoint))
                                {
                                    int counter2 = 0;
                                    foreach (KeyValuePair <Point, bool> keyValuePair1 in AliveDead.squares)
                                    {
                                        if (keyValuePair1.Key.x == buttonPoint.x && keyValuePair1.Key.y == buttonPoint.y && counter2 < ButtonList.buttons.Count)
                                        {
                                            if (ButtonList.buttons[counter2].Background != Brushes.White)
                                            {
                                                ButtonList.buttons[counter2].Background = Brushes.White;
                                                //AliveDead.alive += 1;
                                            }
                                        }
                                        counter2 += 1;
                                    }
                                }
                            }

                            break;
                        }
                        counter += 1;
                    }
                }
            }
            nextButton.Focus();



            AliveDead.ButtonValues();

            int countingAlive = 0;

            foreach (KeyValuePair <Point, bool> checking in AliveDead.squares)
            {
                if (checking.Value == true)
                {
                    countingAlive += 1;
                }
            }

            livesText.Text = "Alive: " + countingAlive;

            //MessageBox.Show(AliveDead.squares[ButtonList.buttons.IndexOf(button)].ToString());
            //MessageBox.Show(ButtonList.buttons.IndexOf(button).ToString());
        }
 private void NextButton_Click(object sender, RoutedEventArgs e)
 {
     AliveDead.ButtonValues();
     livesText.Text = "Alive: " + Convert.ToString(AliveDead.Next());
 }