From 3c0a3b8413ee58a3e5678075c862e95f7c8395c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=95=D0=B3=D0=BE=D1=80=20=D0=9B=D1=8C=D0=B2=D0=BE=D0=B2?= Date: Mon, 27 Mar 2023 11:25:27 +0300 Subject: =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- life.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 life.py (limited to 'life.py') diff --git a/life.py b/life.py new file mode 100644 index 0000000..02627ea --- /dev/null +++ b/life.py @@ -0,0 +1,73 @@ +import pygame +import numpy as np +import time + +# Инициализация Pygame +pygame.init() + +# Определение размеров окна +WINDOW_SIZE = (500, 500) + +# Создание окна +screen = pygame.display.set_mode(WINDOW_SIZE) + +# Определение цветов +BLACK = (0, 0, 0) +WHITE = (255, 255, 255) + +# Определение размера клетки +CELL_SIZE = 10 + +# Определение размера сетки +GRID_SIZE = (WINDOW_SIZE[0] // CELL_SIZE, WINDOW_SIZE[1] // CELL_SIZE) + +# Создание массива клеток +cells = np.zeros((GRID_SIZE[0], GRID_SIZE[1])) + +# Определение начального состояния клеток +cells[2, 1] = 1 +cells[2, 2] = 1 +cells[2, 3] = 1 +cells[1, 3] = 1 +cells[0, 2] = 1 + +# Функция для отрисовки клетки +def draw_cell(x, y): + pygame.draw.rect(screen, WHITE, (x * CELL_SIZE, y * CELL_SIZE, CELL_SIZE, CELL_SIZE)) + +# Функция для отрисовки всех клеток +def draw_cells(): + for x in range(GRID_SIZE[0]): + for y in range(GRID_SIZE[1]): + if cells[x, y] == 1: + draw_cell(x, y) + +# Функция для обновления состояния клеток +def update_cells(): + global cells + new_cells = np.zeros((GRID_SIZE[0], GRID_SIZE[1])) + for x in range(GRID_SIZE[0]): + for y in range(GRID_SIZE[1]): + # Подсчет количества живых соседей + num_neighbors = ( + cells[(x - 1) % GRID_SIZE[0], (y - 1) % GRID_SIZE[1]] + + cells[x % GRID_SIZE[0], (y - 1) % GRID_SIZE[1]] + + cells[(x + 1) % GRID_SIZE[0], (y - 1) % GRID_SIZE[1]] + + cells[(x - 1) % GRID_SIZE[0], y % GRID_SIZE[1]] + + cells[(x + 1) % GRID_SIZE[0], y % GRID_SIZE[1]] + + cells[(x - 1) % GRID_SIZE[0], (y + 1) % GRID_SIZE[1]] + + cells[x % GRID_SIZE[0], (y + 1) % GRID_SIZE[1]] + + cells[(x + 1) % GRID_SIZE[0], (y + 1) % GRID_SIZE[1]] + ) + # Обновление состояния клетки + if cells[x, y] == 1 and num_neighbors in [2, 3]: + new_cells[x, y] = 1 + elif cells[x, y] == 0 and num_neighbors == 3: + new_cells[x, y] = 1 + cells = new_cells + +# Цикл игры +while True: + # Очистка экрана + screen.fill + time.sleep(2) -- cgit v1.2.3