#!/usr/bin/env python3 import pygame from pygame.draw import * pygame.init() FPS = 30 screen = pygame.display.set_mode((400, 400)) clock = pygame.time.Clock() # === 1. Словарь цветов === COLORS = { "WHITE": (255, 255, 255), "BLACK": (0, 0, 0), "NOSE": (255, 150, 150), "MOUTH": (150, 100, 100), "BLUSH": (255, 200, 200), "WHISKERS": (100, 100, 100), "BODY": (200, 200, 200) } # === 2. Словарь размеров и пропорций === SIZES = { "body_ratio": 0.5, "head_ratio": 0.25, "ear_ratio": 1/3, "leg_ratio": 1/16, "eye_ratio": 1/8, "blush_ratio": 1/10, "front_leg_w_ratio": 1/12, "front_leg_h_ratio": 1/8 } # === 3. Подфункции для частей тела === def draw_body(surface, x, y, width, height, color=None): ellipse(surface, color, (x - width // 4, y, width // 2, height // 2)) def draw_head(surface, x, y, width, height, color=None): head_size = int(height * SIZES["head_ratio"]) circle(surface, color, (x, y - head_size // 2), head_size // 2) def draw_ears(surface, x, y, width, height, color=None): head_size = int(height * SIZES["head_ratio"]) ear_h = int(height * SIZES["ear_ratio"]) ellipse(surface, color, (x - head_size // 4 - width // 16, y - height // 2, width // 8, ear_h)) ellipse(surface, color, (x + head_size // 4 - width // 16, y - height // 2, width // 8, ear_h)) def draw_eyes(surface, x, y, width, height, color=None): # color необязательный head_size = int(height * SIZES["head_ratio"]) eye_r = int(head_size * SIZES["eye_ratio"]) eye_y = y - head_size // 2 - head_size // 8 circle(surface, COLORS["WHITE"], (x - head_size // 6, eye_y), eye_r) circle(surface, COLORS["WHITE"], (x + head_size // 6, eye_y), eye_r) circle(surface, COLORS["BLACK"], (x - head_size // 6, eye_y), eye_r // 2) circle(surface, COLORS["BLACK"], (x + head_size // 6, eye_y), eye_r // 2) circle(surface, COLORS["WHITE"], (x - head_size // 6 - 2, eye_y - 2), eye_r // 6) circle(surface, COLORS["WHITE"], (x + head_size // 6 - 2, eye_y - 2), eye_r // 6) def draw_nose_mouth(surface, x, y, width, height, color=None): head_size = int(height * SIZES["head_ratio"]) head_y = y - head_size // 2 nose_y = head_y + head_size // 8 polygon(surface, COLORS["NOSE"], [ (x, nose_y), (x - head_size // 8, nose_y + head_size // 12), (x + head_size // 8, nose_y + head_size // 12) ]) line(surface, COLORS["MOUTH"], (x, nose_y + head_size // 16), (x, nose_y + head_size // 8), 2) def draw_blush_whiskers(surface, x, y, width, height, color=None): head_size = int(height * SIZES["head_ratio"]) head_y = y - head_size // 2 nose_y = head_y + head_size // 8 blush_r = int(head_size * SIZES["blush_ratio"]) circle(surface, COLORS["BLUSH"], (x - head_size // 4, nose_y + head_size // 24), blush_r) circle(surface, COLORS["BLUSH"], (x + head_size // 4, nose_y + head_size // 24), blush_r) whisker_y = nose_y + head_size // 24 whisker_len = head_size // 4 for i in range(3): line(surface, COLORS["WHISKERS"], (x - head_size // 10, whisker_y + i * 2), (x - whisker_len - head_size // 10, whisker_y - head_size // 10 + i * 2), 1) line(surface, COLORS["WHISKERS"], (x + head_size // 10, whisker_y + i * 2), (x + whisker_len + head_size // 10, whisker_y - head_size // 10 + i * 2), 1) def draw_front_legs(surface, x, y, width, height, color=None): fw = int(width * SIZES["front_leg_w_ratio"]) fh = int(height * SIZES["front_leg_h_ratio"]) fy = y + height // 6 ellipse(surface, color, (x - width // 6 - fw // 2, fy - fh // 2, fw, fh)) ellipse(surface, COLORS["BLACK"], (x - width // 6 - fw // 2, fy - fh // 2, fw, fh), 1) ellipse(surface, color, (x + width // 6 - fw // 2, fy - fh // 2, fw, fh)) ellipse(surface, COLORS["BLACK"], (x + width // 6 - fw // 2, fy - fh // 2, fw, fh), 1) # === 4. Словарь функций частей тела === PARTS = { "body": draw_body, "head": draw_head, "ears": draw_ears, "eyes": draw_eyes, "nose_mouth": draw_nose_mouth, "blush_whiskers": draw_blush_whiskers, "front_legs": draw_front_legs } # === 5. Главная функция, объединяющая все части === def draw_hare(surface, x, y, width, height, color): for part in ["body", "head", "ears", "eyes", "nose_mouth", "blush_whiskers", "front_legs"]: PARTS[part](surface, x, y, width, height, color) # === РИСУЕМ === screen.fill(COLORS["WHITE"]) draw_hare(screen, 200, 200, 200, 400, COLORS["BODY"]) pygame.display.update() finished = False while not finished: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: finished = True pygame.quit()