Beispiel #1
0
        /// <summary>
        /// The mouse was pressed.
        /// </summary>
        /// <param name="sender">The sending object.</param>
        /// <param name="e">The event.</param>
        private void CanvasOutput_MouseDown(object sender, MouseButtonEventArgs e)
        {
            // update selected cell
            Point pt = Mouse.GetPosition(CanvasOutput);

            int univWidth  = Settings.Default.PaneWidth;
            int univHeight = Settings.Default.PaneHeight;

            _selectedRow = (int)(pt.Y / univWidth);
            _selectedCol = (int)(pt.X / univHeight);

            _selectedCell = _multiverse[_selectedRow][_selectedCol];

            // if left-click then perform correct operation (if any)
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                if (_copySource != null)
                {
                    UniverseRunner target = _selectedCell
                                            .UniverseRunner;
                    target.PhysicsRules.CopyData(
                        _copySource.PhysicsRules.Data);
                    target.Randomize(_rnd);
                }
                else if (_crossoverParent1 != null &&
                         _crossoverParent2 == null)
                {
                    _crossoverParent2 = _selectedCell.UniverseRunner;
                }
                else
                {
                    UniverseRunner target = _selectedCell.UniverseRunner;
                    target.Crossover(_rnd, _crossoverParent1, _crossoverParent2);
                    target.Randomize(_rnd);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Setup after the window loads.
        /// </summary>
        /// <param name="sender">The sending object.</param>
        /// <param name="e">The event.</param>
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            double univWidth  = Settings.Default.PaneWidth;
            double univHeight = Settings.Default.PaneHeight;

            CheckAutoKill.IsChecked = true;

            _multiverse = new UniverseDisplayCell[Settings.Default.UniversePaneRows][];
            for (int row = 0; row < Settings.Default.UniversePaneRows; row++)
            {
                _multiverse[row] = new UniverseDisplayCell[Settings.Default.UniversePaneColumns];
                for (int col = 0; col < Settings.Default.UniversePaneColumns; col++)
                {
                    double x = col * univWidth;
                    double y = row * univHeight;

                    // Label
                    var lab = new Label
                    {
                        Foreground = Brushes.Black,
                        Background = Brushes.LightGray,
                        FontSize   = 10,
                        Content    = "..."
                    };
                    lab.SetValue(Canvas.LeftProperty, x);
                    lab.SetValue(Canvas.TopProperty, y);

                    // Universe image.
                    int paneWidth  = Settings.Default.PaneWidth;
                    int paneHeight = Settings.Default.PaneHeight;
                    _multiverse[row][col] = new UniverseDisplayCell(paneWidth, paneHeight, lab);
                    _multiverse[row][col].UniverseRunner.Randomize(new MersenneTwisterGenerateRandom());
                    _multiverse[row][col].Visualize();
                    _multiverse[row][col].UniverseRunner.AutoKill = true;
                    _cells.Add(_multiverse[row][col]);
                    var img = new Image {
                        Source = _multiverse[row][col].Image
                    };
                    img.SetValue(Canvas.LeftProperty, x);
                    img.SetValue(Canvas.TopProperty, y);
                    CanvasOutput.Children.Add(img);

                    // Universe grid.
                    var rect = new Rectangle
                    {
                        //Fill = _currentGrid[row][col] ? Brushes.Black : Brushes.White,
                        Width  = univWidth,
                        Height = univHeight,
                        Stroke = Brushes.Black
                    };
                    rect.SetValue(Canvas.LeftProperty, x);
                    rect.SetValue(Canvas.TopProperty, y);
                    CanvasOutput.Children.Add(rect);

                    // Add label
                    CanvasOutput.Children.Add(lab);
                }
            }

            CanvasOutput.SetValue(WidthProperty, Settings.Default.UniversePaneColumns * univWidth);
            CanvasOutput.SetValue(HeightProperty, Settings.Default.UniversePaneRows * univHeight);
            BtnDeselect.IsEnabled = false;
        }