/
Mihail05
/
ProjectworkLife
Обзор
Документация
Войти
/
Mihail05
/
ProjectworkLife
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
1
109 строк
4 KB
Mihail05
create 1
13 янв 2026, 21:12
13 янв 2026, 21:12
16fe0c2
Код
Авторство
О чём код?
#include <iostream> #include <chrono> // для замедленния потока #include <thread> // const int width = 10; const int height = 10; int get_x(int i, int width) { return (width + i) % width; } // используем эти функции для закольцовывания стлобца int get_y(int j, int height) { return (height + j) % height; } void print_field_with_stats(char** arr, int width, int height, int generation, int stars_count) { std::cout << "Generation: " << generation << " Alive cells: " << stars_count << "\n\n"; for (int i = 0; i < width; ++i) { // Выводим поле и показываем статистику for (int j = 0; j < height; ++j) { std::cout << arr[i][j] << ' '; } std::cout << '\n'; } std::cout << "\n"; std::this_thread::sleep_for(std::chrono::seconds(1)); //замедленяем на одну секунду } int check_neighbors(int x, int y, int width, int height, char** field) { int count = 0; for (int dx = -1; dx <= 1; ++dx) { // Проверяем соседние клетки for (int dy = -1; dy <= 1; ++dy) { if ((dx != 0 || dy != 0)) { // пропускаем саму клетку int nx = (x + dx + width) % width; int ny = (y + dy + height) % height; if (field[nx][ny] == '*') { count++; } } } } return count; } // Основная игра void game_of_life(char** arr, int width, int height) { bool changed = true; // пока истино программа работает int generation = 0; // переменная нужна для счёта генераций while (changed && generation < 100) { // ограничиваем максимальное количество поколений char** next_gen = new char* [width]; for (int i = 0; i < width; ++i) { next_gen[i] = new char[height] {'-'}; } int stars_count = 0; changed = false; for (int i = 0; i < width; ++i) { for (int j = 0; j < height; ++j) { int neighbors = check_neighbors(i, j, width, height, arr); if (arr[i][j] == '*' && (neighbors < 2 || neighbors > 3)) { next_gen[i][j] = '-'; // умирает из-за одиночества или перенаселённости меньше 2 или более 3 } else if (arr[i][j] == '-' && neighbors == 3) { next_gen[i][j] = '*'; // рождается новая звезда если 3 клетки рядом changed = true; } else { next_gen[i][j] = arr[i][j]; // остается неизменной } if (next_gen[i][j] == '*') { stars_count++; // считаем звезды, если = *, то увеличиваем переменную } } } print_field_with_stats(next_gen, width, height, ++generation, stars_count); // освобождаем старую версию поля for (int i = 0; i < width; ++i) { delete[] arr[i]; } delete[] arr; arr = next_gen; // используем новое поле } } int main() { char** arr = new char* [width]; for (int i = 0; i < width; ++i) { arr[i] = new char[height] {'-'}; } // Заполнение * arr[3][4] = '*'; arr[1][2] = '*'; arr[5][6] = '*'; // запускаем игру Жизни game_of_life(arr, width, height); // очистка памяти for (int i = 0; i < width; ++i) { delete[] arr[i]; } delete[] arr; return 0; }