79 lines
2.5 KiB
Python
79 lines
2.5 KiB
Python
import pygame
|
||
from pygame.draw import *
|
||
import math
|
||
|
||
pygame.init()
|
||
|
||
FPS = 30
|
||
WIDTH, HEIGHT = 1200, 800
|
||
screen = pygame.display.set_mode((WIDTH, HEIGHT))
|
||
pygame.display.set_caption("Горный пейзаж")
|
||
|
||
# Цвета
|
||
SKY = (255, 200, 125) # небо
|
||
SUN = (255, 255, 0) # солнце
|
||
BEIGE = (245, 220, 200) # полоса
|
||
MOUNTAINS_FAR = (255, 100, 0) # дальние горы
|
||
MOUNTAINS_NEAR = (150, 0, 0) # ближние горы
|
||
GROUND = (200, 100, 200) # земля
|
||
|
||
def rotate_point(point, center, angle_deg):
|
||
"""Поворачивает точку относительно центра по часовой стрелке"""
|
||
angle_rad = math.radians(angle_deg)
|
||
x, y = point
|
||
cx, cy = center
|
||
|
||
x -= cx
|
||
y -= cy
|
||
|
||
# Поворот по часовой стрелке
|
||
x_rotated = x * math.cos(angle_rad) + y * math.sin(angle_rad)
|
||
y_rotated = -x * math.sin(angle_rad) + y * math.cos(angle_rad)
|
||
|
||
return (x_rotated + cx, y_rotated + cy)
|
||
|
||
def draw_mountain_rotated(surface, color, points, center, angle):
|
||
"""Рисует повёрнутую гору"""
|
||
rotated_points = [rotate_point(p, center, angle) for p in points]
|
||
polygon(surface, color, rotated_points)
|
||
|
||
# Основной рисунок
|
||
screen.fill(SKY)
|
||
|
||
rect(screen, BEIGE, (0, 120, WIDTH, 200)) # Здесь было просто rect, а нужно rect(screen, ...)
|
||
|
||
circle(screen, SUN, (WIDTH//2, 80), 50)
|
||
|
||
# Центр поворота для дальнего ряда
|
||
rotate_center = (WIDTH//2, 400)
|
||
|
||
# ВТОРОЙ РЯД - ПОВЁРНУТ НА 10° ПО ЧАСОВОЙ СТРЕЛКЕ
|
||
far_mountains_points = [
|
||
(-100, 520), (0, 420), (100, 440), (200, 400), (300, 430),
|
||
(400, 390), (500, 420), (600, 380), (700, 410), (800, 370),
|
||
(900, 400), (1000, 360), (1100, 390), (1200, 350), (1300, 380),
|
||
(1400, 340), (1500, 420), (1600, 520)
|
||
]
|
||
|
||
draw_mountain_rotated(screen, MOUNTAINS_FAR, far_mountains_points, rotate_center, 10)
|
||
|
||
# БЛИЖНИЙ РЯД
|
||
polygon(screen, MOUNTAINS_NEAR,
|
||
[(-200, HEIGHT-150), (-50, 590), (100, 630), (250, 570), (400, 610),
|
||
(550, 550), (700, 590), (850, 530), (1000, 570), (1150, 510),
|
||
(1300, 550), (1450, 490), (1600, 530), (1750, 450), (1900, HEIGHT-170)])
|
||
|
||
rect(screen, GROUND, (0, HEIGHT-165, WIDTH, 1000))
|
||
|
||
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()
|
||
sys.exit() |