private void buttonSimulate_Click(object sender, EventArgs e)
        {
            int               height            = (int)numericUpDownHeight.Value;
            int               width             = (int)numericUpDownWidth.Value;
            int               numberOfRounds    = (int)numericUpDownRounds.Value;
            bool              modelInTime       = radioButtonTemporal.Checked;
            GameSymmetric     game              = radioButtonPrisonersDilemma.Checked ? new TrpsGame(10, 7, 0, 0) : new TrpsGame(10, 7, 0, 3);
            NeighbourhoodType neighbourhoodType = radioButtonMoore.Checked ? NeighbourhoodType.Moore : NeighbourhoodType.VonNeumann;
            Reselector        reselector;

            if (radioButtonMax.Checked)
            {
                reselector = Reselector.Max;
            }
            else if (radioButtonReplicator.Checked)
            {
                if (neighbourhoodType == NeighbourhoodType.Moore)
                {
                    reselector = Reselector.Replicator8;
                }
                else
                {
                    reselector = Reselector.Replicator4;
                }
            }
            else
            {
                reselector = Reselector.Custom;
            }

            Lattice lattice = new Lattice(height, width, neighbourhoodType, game, reselector);

            using (Graphics graphics = picture.CreateGraphics())
            {
                this.clear(graphics);

                if (modelInTime)
                {
                    drawLattice(lattice, graphics);

                    for (int n = 0; n < numberOfRounds; n++)
                    {
                        Thread.Sleep(500);

                        lattice.NextRound();

                        drawLattice(lattice, graphics);
                    }
                }
                else
                {
                    lattice.PlayRounds(numberOfRounds);

                    drawLattice(lattice, graphics);
                }
            }
        }
        protected void simulateMultiple()
        {
            experimentNumber = (int)numericUpDownSimulations.Value;
            roundNumber      = (int)numericUpDownRounds.Value;
            int               height            = (int)numericUpDownHeight.Value;
            int               width             = (int)numericUpDownWidth.Value;
            GameSymmetric     game              = radioButtonPrisonersDilemma.Checked ? new TrpsGame(10, 7, 0, 0) : new TrpsGame(10, 7, 0, 3);
            NeighbourhoodType neighbourhoodType = radioButtonMoore.Checked ? NeighbourhoodType.Moore : NeighbourhoodType.VonNeumann;
            Reselector        reselector;

            if (radioButtonMax.Checked)
            {
                reselector = Reselector.Max;
            }
            else if (radioButtonReplicator.Checked)
            {
                if (neighbourhoodType == NeighbourhoodType.Moore)
                {
                    reselector = Reselector.Replicator8;
                }
                else
                {
                    reselector = Reselector.Replicator4;
                }
            }
            else
            {
                reselector = Reselector.Custom;
            }

            fraction = new List <double> [roundNumber + 1];

            for (int round = 0; round < roundNumber + 1; round++)
            {
                fraction[round] = new List <double>();
            }

            for (int experiment = 0; experiment < experimentNumber; experiment++)
            {
                Lattice lattice = new Lattice(height, width, neighbourhoodType, game, reselector);

                fraction[0].Add(lattice.RatioActionOne);

                for (int round = 1; round < roundNumber + 1; round++)
                {
                    lattice.NextRound();
                    fraction[round].Add(lattice.RatioActionOne);
                }
            }
        }