Симуляция частиц

Симуляция частиц


# Импортируем библиотеки

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()

Report Page