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 для браузера), или с другими правилами — скажите! Это весело экспериментировать с математикой Конвея.
Свидетельство о публикации №125101804978