Game of Life игра математика Джона Конвея

это математика нейросетей

Я понимаю - вы хотите программу для "Игры Жизни" (Game of Life) Джона Конвея — это классический клеточный автомат, где клетки "живут" или "умирают" по простым правилам. Вы упомянули два цвета точек, так что я сделаю версию, где клетки могут быть двух типов: например, синие и красные.
Каждая популяция следует стандартным правилам Жизни, но они взаимодействуют (например, синие и красные могут "съедать" друг друга или что-то подобное для динамики). Если это не то, что вы имели в виду, уточните!


Я напишу программу на Python с использованием библиотеки Pygame для визуализации (она простая и бесплатная; установите её через pip install pygame, если нужно). Код будет консольной версией с визуализацией в окне. Стандартные правила:

Живая клетка выживает, если у неё 2–3 соседа.
Мёртвая клетка рождается, если у неё ровно 3 соседа.
Для двух цветов: синие и красные клетки следуют тем же правилам, но если клетка одного цвета имеет соседа другого цвета, она может "захватывать" его (простая модификация для интереса).
Вот полный код программы. Скопируйте его в файл (например, game_of_life.py) и запустите с Python 3.


import pygame
import random

# Настройки
WIDTH, HEIGHT = 800, 600  # Размер окна
CELL_SIZE = 10  # Размер клетки
GRID_WIDTH = WIDTH // CELL_SIZE
GRID_HEIGHT = HEIGHT // CELL_SIZE
FPS = 10  # Скорость симуляции

# Цвета
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)  # Синий для одного типа клеток
RED = (255, 0, 0)   # Красный для другого типа клеток

# Инициализация Pygame
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Game of Life с двумя цветами")
clock = pygame.time.Clock()

# Сетка: 0 - пусто, 1 - синий, 2 - красный
grid = [[0 for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]

# Случайная инициализация (например, 30% клеток живых)
for i in range(GRID_HEIGHT):
    for j in range(GRID_WIDTH):
        if random.random() < 0.3:
            grid[i][j] = random.choice([1, 2])  # 1 - синий, 2 - красный

def count_neighbors(x, y):
    """Подсчитывает соседей каждого цвета."""
    blue_neighbors = 0
    red_neighbors = 0
    for dx in [-1, 0, 1]:
        for dy in [-1, 0, 1]:
            if dx == 0 and dy == 0:
                continue
            nx, ny = x + dx, y + dy
            if 0 <= nx < GRID_HEIGHT and 0 <= ny < GRID_WIDTH:
                if grid[nx][ny] == 1:
                blue_neighbors += 1
                elif grid[nx][ny] == 2:
                red_neighbors += 1
    return blue_neighbors, red_neighbors

def update_grid():
    """Обновляет сетку по правилам."""
    new_grid = [[0 for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]
    for i in range(GRID_HEIGHT):
        for j in range(GRID_WIDTH):
            blue_n, red_n = count_neighbors(i, j)
            total_n = blue_n + red_n
            current = grid[i][j]
            
            # Правила для синих клеток
            if current == 1:
                if 2 <= total_n <= 3:
                new_grid[i][j] = 1  # Выживает
                # Модификация: если много красных соседей, может погибнуть или изменить цвет
                elif red_n > blue_n:
                new_grid[i][j] = 2  # Захватывается красными
            
            # Правила для красных клеток (симметрично)
            elif current == 2:
                if 2 <= total_n <= 3:
                new_grid[i][j] = 2  # Выживает
                elif blue_n > red_n:
                new_grid[i][j] = 1  # Захватывается синими
            
            # Рождение новой клетки
            elif current == 0:
                if total_n == 3:
                # Новая клетка принимает цвет большинства соседей
                if blue_n > red_n:
                new_grid[i][j] = 1
                elif red_n > blue_n:
                new_grid[i][j] = 2
                else:
                new_grid[i][j] = random.choice([1, 2])  # Рандом, если равенство
    return new_grid

# Основной цикл
running = True
while running:
    screen.fill(BLACK)
   
    # Обработка событий
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
   
    # Обновление сетки
    grid = update_grid()
   
    # Отрисовка
    for i in range(GRID_HEIGHT):
        for j in range(GRID_WIDTH):
            if grid[i][j] == 1:
                color = BLUE
            elif grid[i][j] == 2:
                color = RED
            else:
                continue
            pygame.draw.rect(screen, color, (j * CELL_SIZE, i * CELL_SIZE, CELL_SIZE, CELL_SIZE))
   
    pygame.display.flip()
    clock.tick(FPS)

pygame.quit()



Как это работает:
Запуск: Запустите скрипт, и откроется окно с сеткой клеток. Синие и красные точки эволюционируют по правилам Конвея, но с добавленным взаимодействием (например, цвет может "захватывать" другой, если соседей много).
Модификация: Я добавил простую механику, где клетки одного цвета могут менять цвет, если у них много соседей другого цвета. Это делает игру интереснее с двумя цветами!
Настройки: Вы можете изменить CELL_SIZE, FPS или правила в функции update_grid() для экспериментов.
Установка: Если Pygame не установлен, введите в терминале: pip install pygame.
Если вам нужна версия без графики (только консольная печать) или на другом языке (например, JavaScript для браузера), или с другими правилами — скажите! Это весело экспериментировать с математикой Конвея.


Рецензии