Загрузка данных


import pygame
import random
import math

pygame.init()

# ---------------- НАСТРОЙКИ ----------------
WIDTH, HEIGHT = 1200, 750
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Relax Game")

clock = pygame.time.Clock()
font = pygame.font.SysFont("arial", 40)
small_font = pygame.font.SysFont("arial", 24)

# ---------------- ЦВЕТА ----------------
BG = (10, 10, 20)
WHITE = (255, 255, 255)

# ---------------- РЕЖИМЫ ----------------
mode = "menu"

particles = []

# ---------------- КЛАСС ЧАСТИЦ ----------------
class Particle:
    def __init__(self, x, y, mode_type):
        self.x = x
        self.y = y
        self.mode_type = mode_type

        self.life = random.randint(40, 120)

        if mode_type == "wave":
            self.size = random.randint(2, 5)
            self.speed = random.uniform(2, 5)
            self.color = (100, 180, 255)

        elif mode_type == "sand":
            self.size = random.randint(3, 6)
            self.speed = random.uniform(1, 2)
            self.color = (220, 200, 120)

        elif mode_type == "smoke":
            self.size = random.randint(10, 25)
            self.speed = random.uniform(0.3, 1.2)
            self.color = (180, 180, 180)

        self.angle = random.uniform(0, math.pi * 2)

    def update(self):
        if self.mode_type == "wave":
            self.x += math.cos(self.angle) * self.speed
            self.y += math.sin(self.angle) * self.speed

        elif self.mode_type == "sand":
            self.y += self.speed
            self.x += math.sin(pygame.time.get_ticks() * 0.002 + self.y * 0.02)

        elif self.mode_type == "smoke":
            self.x += math.cos(self.angle) * self.speed
            self.y -= self.speed

        self.life -= 1

    def draw(self):
        alpha = max(0, min(255, self.life * 2))

        surf = pygame.Surface((60, 60), pygame.SRCALPHA)

        pygame.draw.circle(
            surf,
            (*self.color, alpha),
            (30, 30),
            self.size
        )

        screen.blit(surf, (self.x - 30, self.y - 30))

# ---------------- ТЕКСТ ----------------
def draw_text(text, y, size_font=font, color=WHITE):
    render = size_font.render(text, True, color)
    rect = render.get_rect(center=(WIDTH // 2, y))
    screen.blit(render, rect)

# ---------------- ГЛАВНЫЙ ЦИКЛ ----------------
running = True

while running:
    screen.fill(BG)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.KEYDOWN:

            # Меню
            if mode == "menu":
                if event.key == pygame.K_1:
                    mode = "wave"

                elif event.key == pygame.K_2:
                    mode = "sand"

                elif event.key == pygame.K_3:
                    mode = "smoke"

            # Назад в меню
            if event.key == pygame.K_ESCAPE:
                mode = "menu"
                particles.clear()

    mx, my = pygame.mouse.get_pos()

    # ---------------- МЕНЮ ----------------
    if mode == "menu":

        draw_text("RELAX GAME", 180)

        draw_text("1 - Волна", 320, small_font)
        draw_text("2 - Песок", 380, small_font)
        draw_text("3 - Дым", 440, small_font)

        draw_text("ESC - Назад в меню", 560, small_font)

    # ---------------- ВОЛНА ----------------
    elif mode == "wave":

        for _ in range(5):
            particles.append(Particle(mx, my, "wave"))

    # ---------------- ПЕСОК ----------------
    elif mode == "sand":

        for _ in range(3):
            particles.append(Particle(mx, my, "sand"))

    # ---------------- ДЫМ ----------------
    elif mode == "smoke":

        for _ in range(2):
            particles.append(Particle(mx, my, "smoke"))

    # ---------------- ОБНОВЛЕНИЕ ЧАСТИЦ ----------------
    for p in particles[:]:
        p.update()
        p.draw()

        if p.life <= 0:
            particles.remove(p)

    # Курсор
    if mode != "menu":
        pygame.draw.circle(screen, WHITE, (mx, my), 4)

    pygame.display.flip()
    clock.tick(60)

pygame.quit()