예제 #1
0
        public void FieldManipulatorByAlgorithm(ModelField ModelField)
        {
            int[,] RecountedField = new int[ModelField.X, ModelField.Y];
            int Summ;

            for (int i = 0; i < ModelField.X; i++)
            {
                for (int j = 0; j < ModelField.Y; j++)
                {
                    if (i == 0 || i == ModelField.X - 1 || j == 0 || j == ModelField.Y - 1)
                    {
                        RecountedField[i, j] = 0;
                    }
                    else
                    {
                        Summ = 0;
                        for (int k = i - 1; k < i + 2; k++)
                        {
                            for (int l = j - 1; l < j + 2; l++)
                            {
                                Summ += ModelField.ReadSquareValueByCoordinate(k, l);
                            }
                        }
                        if (ModelField.ReadSquareValueByCoordinate(i, j) == 0 && Summ == 3)
                        {
                            RecountedField[i, j] = 1;
                        }
                        else if (ModelField.ReadSquareValueByCoordinate(i, j) == 1 && (Summ == 3 || Summ == 4))
                        {
                            RecountedField[i, j] = 1;
                        }
                        else if (ModelField.ReadSquareValueByCoordinate(i, j) == 1 && (Summ < 3 || Summ > 4))
                        {
                            RecountedField[i, j] = 0;
                        }
                    }
                }
            }

            for (int i = 0; i < ModelField.X; i++)
            {
                for (int j = 0; j < ModelField.Y; j++)
                {
                    ModelField.SetSquareValueOnPGByCoordinate(i, j, ModelField.ReadSquareValueByCoordinateOnLastGen(i, j));
                    ModelField.SetSquareValueOnLGByCoordinate(i, j, ModelField.ReadSquareValueByCoordinate(i, j));
                    ModelField.SetSquareValueByCoordinate(i, j, RecountedField[i, j]);
                }
            }

            ModelField.Generation++;
        }
예제 #2
0
        public void StopGame(ModelField ModelField, Form1 Form1)
        {
            // оставновка программы, если во вселенной не осталось жизни
            int SummAllField = 0;

            for (int i = 1; i < ModelField.X - 1; i++)
            {
                for (int j = 1; j < ModelField.Y - 1; j++)
                {
                    SummAllField += ModelField.ReadSquareValueByCoordinate(i, j);
                }
            }

            if (SummAllField == 0)
            {
                // останавливаем таймер
                Form1.timer1.Stop();
                // делаем таймер недоступным
                Form1.timer1.Enabled = false;
            }

            // оставновка программы, если во вселенной складываются устойчивые комбинации
            int EndOfGame1 = 0;
            int EndOfGame2 = 0;

            for (int i = 0; i < ModelField.X; i++) // сравнение массивов на 2х и 3х последних шагах
            {
                for (int j = 0; j < ModelField.Y; j++)
                {
                    if (ModelField.ReadSquareValueByCoordinateOnLastGen(i, j) == ModelField.ReadSquareValueByCoordinate(i, j))
                    {
                        EndOfGame1++;
                    }
                    if (ModelField.ReadSquareValueByCoordinate(i, j) == ModelField.ReadSquareValueByCoordinateOnPenultGen(i, j))
                    {
                        EndOfGame2++;
                    }
                }
            }

            if (EndOfGame1 == ModelField.X * ModelField.Y || EndOfGame2 == ModelField.X * ModelField.Y)
            {
                // останавливаем таймер
                Form1.timer1.Stop();
                // делаем таймер недоступным
                Form1.timer1.Enabled = false;
            }
        }