forked from 24_LitvintsevaVD/YP_2026_litvintseva
Обновить rabit2.py
This commit is contained in:
149
rabit2.py
149
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
|
||||
|
||||
Reference in New Issue
Block a user