示例#1
0
        private void btnDone_Click(object sender, System.EventArgs e)
        {
            this.StartStop.Enabled = true;
            this.btnDone.Enabled   = false;
            this.btnSave.Enabled   = true;
            this.btnLoad.Enabled   = true;

            panel1.Paint -= new PaintEventHandler(panel1_PaintCenter);
            panel1.Invalidate();

            ArrayList neighborhood = new ArrayList();

            foreach (Cell cell in cells)
            {
                if ((cell.Color == Color.Crimson) &&
                    !((cell.X == cells[cellsWide / 2, cellsHigh / 2].X) &&
                      (cell.Y == cells[cellsWide / 2, cellsHigh / 2].Y))
                    )
                {
                    neighborhood.Add(new Position(
                                         (cell.X / cellSize) -
                                         (cells[cellsWide / 2, cellsHigh / 2].X / cellSize),
                                         (cell.Y / cellSize) -
                                         (cells[cellsWide / 2, cellsHigh / 2].Y / cellSize)
                                         ));
                }
            }

            this.IgnoreClicks = true;

            crntStatesOutput = new StatesOutput(neighborhood.Count);
            crntStatesOutput.ShowDialog();

            if (crntStatesOutput.ActivationValues != null)
            {
                modeling.RequestAutomaton(
                    neighborhood, crntStatesOutput.ActivationValues,
                    crntStatesOutput.NeighborWeight,
                    crntStatesOutput.CenterWeight
                    );
            }

            this.IgnoreClicks           = false;
            this.StartStop.Enabled      = true;
            this.btnDone.Enabled        = false;
            this.btnCurrentAuto.Enabled = true;
            this.automaton.Enabled      = true;
            this.Focus();
        }
示例#2
0
        private void ProgrammaticInit()
        {
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.DoubleBuffer, true);

            crntStatesOutput = new StatesOutput();

            cells = new Cell[cellsWide, cellsHigh];

            for (int i = 0; i < cellsWide; ++i)
            {
                for (int j = 0; j < cellsHigh; ++j)
                {
                    cells[i, j] = new Cell();
                }
            }

            //Create thread that maintains the model of the game.
            modeling = new Modeling(cellsWide, cellsHigh);

            //event hookup
            modeling.Update += new EventHandler(modeling_Updated);
        }
示例#3
0
        private void btnCurrentAuto_Click(object sender, System.EventArgs e)
        {
            this.StartStop.Enabled = false;
            this.StartStop.Text    = "Start";

            modeling.RequestPause();
            panel1.Paint += new PaintEventHandler(panel1_PaintCenter);
            panel1.Invalidate();

            foreach (Cell cell in cells)
            {
                modeling.RequestUpdate(
                    new Position(cell.X / cellSize, cell.Y / cellSize), false);
            }

            modeling.RequestActivateNeighbors(
                new Position(
                    cells[cellsWide / 2, cellsHigh / 2].X / cellSize,
                    cells[cellsWide / 2, cellsHigh / 2].Y / cellSize
                    )
                );

            ArrayList neighborhood = new ArrayList();

            foreach (Cell cell in cells)
            {
                if ((cell.Color == Color.Crimson) &&
                    !((cell.X == cells[cellsWide / 2, cellsHigh / 2].X) &&
                      (cell.Y == cells[cellsWide / 2, cellsHigh / 2].Y))
                    )
                {
                    neighborhood.Add(new Position(
                                         (cell.X / cellSize)
                                         - (cells[cellsWide / 2, cellsHigh / 2].X / cellSize),
                                         (cell.Y / cellSize)
                                         - (cells[cellsWide / 2, cellsHigh / 2].Y / cellSize)
                                         ));
                }
            }

            this.IgnoreClicks = true;

            Node node = modeling.GetNode(0);

            double nodeCenterWeight = 0D;
            double nodeNWeight      = 0D;

            foreach (Link link in node.links)
            {
                if (link.Destin.Equals(node))
                {
                    nodeCenterWeight = link.Weight;
                }
                else
                {
                    nodeNWeight = link.Weight;
                }
            }

            crntStatesOutput = new StatesOutput(
                neighborhood.Count, nodeNWeight, nodeCenterWeight,
                modeling.ActivationValues);

            crntStatesOutput.ShowDialog();

            if (crntStatesOutput.ActivationValues != null)
            {
                modeling.RequestAutomaton(
                    neighborhood, crntStatesOutput.ActivationValues,
                    crntStatesOutput.NeighborWeight,
                    crntStatesOutput.CenterWeight
                    );
            }

            this.IgnoreClicks = false;

            panel1.Paint -= new PaintEventHandler(panel1_PaintCenter);
            panel1.Invalidate();

            this.StartStop.Enabled = true;
            this.btnDone.Enabled   = false;

            this.Focus();
        }