示例#1
0
        /// <summary>
        ///     The constructor.
        /// </summary>
        public UniverseDisplayCell(int paneWidth, int paneHeight, Label label)
        {
            int width = paneWidth
                        / Settings.Default.Zoom;
            int height = paneHeight
                         / Settings.Default.Zoom;

            _label = label;

            var universe = new UniverseHolder(height, width, 3);
            var physics  = new MergePhysics(universe);

            universe.Randomize(_rnd);
            physics.Randomize();

            _universeRunner = new UniverseRunner(universe, physics);
            _visualizer     = new UniverseVisualizer(universe,
                                                     Settings.Default.Zoom);

            _bitmap = new WriteableBitmap(
                paneWidth,
                paneHeight,
                96,
                96,
                PixelFormats.Bgr32,
                null);
        }
示例#2
0
 /// <summary>
 /// The copy popup menu was clicked.
 /// </summary>
 /// <param name="sender">The sending object.</param>
 /// <param name="e">The event.</param>
 private void MenuCopyPane_Click(object sender, RoutedEventArgs e)
 {
     _copySource           = _selectedCell.UniverseRunner;
     _crossoverParent1     = null;
     _crossoverParent2     = null;
     BtnDeselect.IsEnabled = true;
 }
示例#3
0
        /// <summary>
        /// The mutate single popup menu was clicked.
        /// </summary>
        /// <param name="sender">The sending object.</param>
        /// <param name="e">The event.</param>
        private void MenuMutateSingle_Click(object sender, RoutedEventArgs e)
        {
            UniverseRunner target = _selectedCell.UniverseRunner;

            target.Mutate(_rnd, target.PhysicsRules, 0.5, 0.2);
            target.Randomize(_rnd);
        }
示例#4
0
        /// <summary>
        /// Display a single CA.
        /// </summary>
        /// <param name="universeRunner">The runner to use physics from.</param>
        public DisplaySingle(UniverseRunner universeRunner)
        {
            InitializeComponent();
            int len = universeRunner.PhysicsRules.Data.Length;

            _physics = new double[len];
            Array.Copy(universeRunner.PhysicsRules.Data, _physics, len);
        }
示例#5
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);
                }
            }
        }
示例#6
0
 /// <summary>
 /// The deselect button was clicked.
 /// </summary>
 /// <param name="sender">The sending object.</param>
 /// <param name="e">The event.</param>
 private void BtnDeselect_Click(object sender, RoutedEventArgs e)
 {
     _copySource           = null;
     _crossoverParent1     = _crossoverParent2 = null;
     BtnDeselect.IsEnabled = false;
 }