Загрузка данных
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()