diff options
author | Егор Львов <workregor@mail.ru> | 2023-03-27 11:25:27 +0300 |
---|---|---|
committer | Егор Львов <workregor@mail.ru> | 2023-03-27 11:25:27 +0300 |
commit | 3c0a3b8413ee58a3e5678075c862e95f7c8395c6 (patch) | |
tree | 8ca9eba9378f921636788fee7664c2bd63bc40ff /life.py |
Начальный коммит
Diffstat (limited to 'life.py')
-rw-r--r-- | life.py | 73 |
1 files changed, 73 insertions, 0 deletions
@@ -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) |