Files

126 lines
5.7 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()