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++; }
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; } }