diff --git a/rabit2.py b/rabit2.py index 7781050..3629d06 100755 --- a/rabit2.py +++ b/rabit2.py @@ -8,105 +8,116 @@ FPS = 30 screen = pygame.display.set_mode((400, 400)) clock = pygame.time.Clock() -# COLORS через список -COLORS = [ - (255, 255, 255), # 0 WHITE - (0, 0, 0), # 1 BLACK - (255, 150, 150), # 2 NOSE - (150, 100, 100), # 3 MOUTH - (255, 200, 200), # 4 BLUSH - (100, 100, 100), # 5 WHISKERS - (200, 200, 200) # 6 BODY -] +# === 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) +} -WHITE, BLACK, NOSE, MOUTH, BLUSH, WHISKERS, BODY = COLORS +# === 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_hare(surface, x, y, width, height, color): - # === ОСНОВНЫЕ ЧИСЛА === - body_w = width // 2 - body_h = height // 2 - head_size = height // 4 - ear_h = height // 3 +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) - # === ТЕЛО === - ellipse(surface, color, (x - body_w // 2, y + body_h // 2 - body_h // 2, body_w, body_h)) +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 - circle(surface, color, (x, head_y), head_size // 2) - - # === УШИ === - ear_y = y - height // 2 + ear_h // 2 - ellipse(surface, color, (x - head_size // 4 - width // 16, ear_y - ear_h // 2, width // 8, ear_h)) - ellipse(surface, color, (x + head_size // 4 - width // 16, ear_y - ear_h // 2, width // 8, ear_h)) - - # === ЛАПЫ (задние) === - leg_h = height // 16 - leg_y = y + height // 2 - leg_h // 2 - ellipse(surface, color, (x - width // 4 - width // 8, leg_y - leg_h // 2, width // 4, leg_h)) - ellipse(surface, color, (x + width // 4 - width // 8, leg_y - leg_h // 2, width // 4, leg_h)) - - # === ГЛАЗА === - eye_y = head_y - head_size // 8 - eye_r = head_size // 8 - - circle(surface, WHITE, (x - head_size // 6, eye_y), eye_r) - circle(surface, WHITE, (x + head_size // 6, eye_y), eye_r) - - circle(surface, BLACK, (x - head_size // 6, eye_y), eye_r // 2) - circle(surface, BLACK, (x + head_size // 6, eye_y), eye_r // 2) - - circle(surface, WHITE, (x - head_size // 6 - 2, eye_y - 2), eye_r // 6) - circle(surface, WHITE, (x + head_size // 6 - 2, eye_y - 2), eye_r // 6) - - # === НОС === nose_y = head_y + head_size // 8 - polygon(surface, NOSE, [ + + 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) - # === РОТ === - line(surface, 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 = head_size // 10 - circle(surface, BLUSH, (x - head_size // 4, nose_y + head_size // 24), blush_r) - circle(surface, BLUSH, (x + head_size // 4, nose_y + head_size // 24), blush_r) + 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, WHISKERS, + 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, WHISKERS, + 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) - # === ПЕРЕДНИЕ ЛАПЫ === - fw = width // 12 - fh = height // 8 +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, BLACK, (x - width // 6 - fw // 2, fy - fh // 2, fw, fh), 1) + 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, BLACK, (x + width // 6 - fw // 2, fy - fh // 2, fw, fh), 1) + 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 +} -# РИСУЕМ -screen.fill(WHITE) -draw_hare(screen, 200, 200, 200, 400, BODY) +# === 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