#!/usr/bin/env python3 import pygame from pygame.draw import * pygame.init() FPS = 30 # Устанавливаем размер окна как на референсе screen = pygame.display.set_mode((800, 400)) def draw_scenery(screen): # --- Небо (Теплые цвета, как на референсе) --- # Мы используем несколько перекрывающихся прямоугольников с альфа-смешиванием (прозрачностью) # для достижения мягкого градиентного эффекта. # Создаем поверхность для неба с поддержкой прозрачности sky_surface = pygame.Surface((800, 400), pygame.SRCALPHA) # 1. Основной, самый светлый оранжевый/желтый фон sky_base_color = (255, 220, 180) rect(sky_surface, sky_base_color, (0, 0, 800, 400)) # 2. Мягкая розовая полоса pink_band_color = (255, 190, 210, 80) # Добавлено альфа-значение 80 для прозрачности rect(sky_surface, pink_band_color, (0, 100, 800, 100)) # 3. Мягкая оранжевая полоса orange_band_color = (255, 170, 110, 60) # Усиленная прозрачность rect(sky_surface, orange_band_color, (0, 200, 800, 100)) # Отрисовываем небо на основном экране screen.blit(sky_surface, (0, 0)) # --- Солнце (Ярко-желтый круг, как на референсе) --- sun_color = (255, 240, 0) # Смещаем немного вправо для композиции sun_center = (450, 110) sun_radius = 50 circle(screen, sun_color, sun_center, sun_radius) # --- Дальний хребет (Светло-оранжевый, СЛОЖНАЯ ФОРМА) --- # В этом массиве точек добавлено много промежуточных значений x и y, # чтобы создать зубчатый, ломаный силуэт, как на твоем референсе. distant_ridge_points = [ (-10, 210), (50, 180), (120, 220), (180, 150), (250, 200), (320, 160), (380, 200), (450, 140), (520, 180), (600, 90), (680, 170), (750, 130), (810, 160), (810, 250), # Правый нижний угол (-10, 250) # Левый нижний угол ] distant_ridge_color = (255, 150, 50) polygon(screen, distant_ridge_color, distant_ridge_points) # --- Средний хребет (Темно-красный/коричневый, СЛОЖНАЯ ФОРМА) --- # Этот хребет имеет свои уникальные зубцы и выемки, # отличные от первого, чтобы добавить глубины. middle_ridge_points = [ (-10, 240), (70, 200), (140, 240), (200, 180), (280, 240), (350, 200), (420, 240), (480, 170), (560, 220), (630, 160), (700, 210), (760, 180), (810, 210), (810, 350), # Правый нижний угол (-10, 350) # Левый нижний угол ] middle_ridge_color = (170, 70, 60) polygon(screen, middle_ridge_color, middle_ridge_points) # --- Поверхность воды (Как на референсе) --- water_color = (190, 160, 170) water_rect = (0, 340, 800, 60) rect(screen, water_color, water_rect) # --- Передний план (Темные силуэты, УГЛОВАТАЯ ФОРМА) --- # Мы используем сложные полигоны, чтобы они выглядели как обрывистые скалы, # а не просто блоки. foreground_color = (50, 20, 50) # Очень темно-фиолетовый/черный # Левый силуэт left_foreground_points = [(-10, 260), (120, 310), (120, 410), (-10, 410)] polygon(screen, foreground_color, left_foreground_points) # Правый силуэт right_foreground_points = [(810, 270), (700, 340), (700, 410), (810, 410)] polygon(screen, foreground_color, right_foreground_points) # --- Птицы (Как на референсе) --- def draw_bird(screen, color, center, scale=1.0): # Аппроксимация формы "V" двумя слегка изогнутыми линиями x, y = center width = 15 * scale height = 8 * scale # Левое крыло arc(screen, color, (x - width, y - height / 2, width * 2, height), 3.14159/4, 3.14159 * 0.9, 2) # Правое крыло arc(screen, color, (x - width / 2, y - height / 2, width * 2, height), 3.14159 * 0.1, 3.14159 * 0.75, 2) bird_color = (80, 50, 40) # Темно-коричневый # Птицы в небе (разного размера для перспективы) draw_bird(screen, bird_color, (380, 180), 1.2) draw_bird(screen, bird_color, (450, 190), 1.0) draw_bird(screen, bird_color, (480, 210), 0.9) draw_bird(screen, bird_color, (400, 230), 1.1) # Птицы в воде (отражения, более размытые и тусклые) water_bird_color = (100, 80, 70) draw_bird(screen, water_bird_color, (600, 340), 1.0) draw_bird(screen, water_bird_color, (670, 380), 0.8) draw_bird(screen, water_bird_color, (750, 370), 0.9) # Вызов функции отрисовки draw_scenery(screen) pygame.display.update() clock = pygame.time.Clock() finished = False while not finished: clock.tick(FPS) for event in pygame.event.get(): if event.type == pygame.QUIT: finished = True pygame.quit()