Files
YP_2026_oskin/ol.py
2026-03-18 11:26:33 +03:00

92 lines
2.3 KiB
Python
Executable File

#!/usr/bin/env python3
import pygame
from pygame.draw import *
import math
pygame.init()
FPS = 30
screen = pygame.display.set_mode((900, 900))
pygame.display.set_caption("BIG STRAIGHT HARE")
clock = pygame.time.Clock()
# Colors
WHITE = (255, 255, 255)
GRAY = (230, 230, 230)
DARK_GRAY = (180, 180, 180)
PINK = (255, 210, 210)
NOSE = (255, 120, 120)
BLACK = (0, 0, 0)
screen.fill(WHITE)
cx, cy = 450, 420 # центр
# SHADOW
ellipse(screen, (200, 200, 200), (cx - 200, cy + 220, 400, 60))
# BODY (строго по центру)
ellipse(screen, GRAY, (cx - 150, cy, 300, 220))
ellipse(screen, DARK_GRAY, (cx - 80, cy + 80, 160, 100))
# HEAD (ровно над телом)
circle(screen, GRAY, (cx, cy - 120), 120)
# EARS (идеально симметричные)
ellipse(screen, GRAY, (cx - 90, cy - 420, 70, 260))
ellipse(screen, GRAY, (cx + 20, cy - 420, 70, 260))
ellipse(screen, PINK, (cx - 70, cy - 400, 30, 200))
ellipse(screen, PINK, (cx + 40, cy - 400, 30, 200))
# EYES (одна линия)
eye_y = cy - 150
circle(screen, BLACK, (cx - 45, eye_y), 12)
circle(screen, BLACK, (cx + 45, eye_y), 12)
circle(screen, WHITE, (cx - 50, eye_y - 5), 4)
circle(screen, WHITE, (cx + 40, eye_y - 5), 4)
# NOSE (ровный и аккуратный)
nose_y = cy - 90
polygon(screen, NOSE, [
(cx, nose_y),
(cx - 12, nose_y + 14),
(cx + 12, nose_y + 14)
])
# MOUTH (симметрия)
line(screen, BLACK, (cx, nose_y + 14), (cx, nose_y + 28), 2)
arc(screen, BLACK, (cx - 30, nose_y + 20, 30, 20), math.pi, 2*math.pi, 2)
arc(screen, BLACK, (cx, nose_y + 20, 30, 20), math.pi, 2*math.pi, 2)
# WHISKERS (зеркально)
for side in [-1, 1]:
for angle in [-10, 0, 10]:
rad = math.radians(angle)
line(screen, BLACK,
(cx + side*10, nose_y + 10),
(cx + side*(10 + 120*math.cos(rad)), nose_y + 10 + 40*math.sin(rad)), 2)
# FRONT PAWS (симметрия)
ellipse(screen, GRAY, (cx - 120, cy + 160, 90, 50))
ellipse(screen, GRAY, (cx + 30, cy + 160, 90, 50))
# BACK PAWS
ellipse(screen, GRAY, (cx - 180, cy + 200, 120, 70))
ellipse(screen, GRAY, (cx + 60, cy + 200, 120, 70))
# TAIL
circle(screen, GRAY, (cx + 160, cy + 80), 30)
pygame.display.update()
running = True
while running:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()