Симуляция частиц
# Импортируем библиотеки
import pygame
import numpy as np
# Инициализируем Pygame
pygame.init()
# Размеры окна
WIDTH, HEIGHT = 600, 400
# Создаем окно
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Симулятор Песка")
# Таймер для управления FPS
clock = pygame.time.Clock()
# Создаем 2D-массив для хранения состояния каждой ячейки
# 0 = пусто, 1 = песок
particles = np.zeros((HEIGHT, WIDTH), dtype=int)
# Главный игровой цикл
running = True
while running:
# Заливаем фон черным цветом
screen.fill((0, 0, 0))
# Проверяем, нажата ли левая кнопка мыши
mouse_pressed = pygame.mouse.get_pressed()
if mouse_pressed[0]: # ЛКМ нажата
# Получаем координаты курсора
mx, my = pygame.mouse.get_pos()
# Добавляем частицы песка вокруг курсора (в пределах 5x5 пикселей)
if 2 < mx < WIDTH-2 and 2 < my < HEIGHT-2:
particles[my-2:my+3, mx-2:mx+3] = 1
# Логика движения песка: частицы падают вниз, если там пусто
for y in range(HEIGHT-2, -1, -1): # Проходим снизу вверх
for x in range(1, WIDTH-1): # И не задеваем края экрана
if particles[y, x] == 1 and particles[y+1, x] == 0:
# Меняем местами текущую песчинку и пустую ячейку под ней
particles[y, x], particles[y+1, x] = 0, 1
# Отрисовка всех частиц
for y in range(HEIGHT):
for x in range(WIDTH):
if particles[y, x] == 1:
# Рисуем песчинку светло-коричневым цветом
screen.set_at((x, y), (194, 178, 128))
# Обновляем экран
pygame.display.flip()
# Обработка событий (например, закрытие окна)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Ограничиваем скорость игры до 60 кадров в секунду
clock.tick(60)
# Завершаем работу Pygame
pygame.quit()