Menu
CoddyTech

Мерцание

Часть раздела Python в игровом окне путешествия по Pygame на Coddy. Урок 30 из 32.

Настоящие звёзды мерцают. Здесь каждая звезда время от времени случайно тускнеет на один кадр. В каждом кадре каждая звезда выбирает число от 1 до 30, и если выпадает 1, она рисуется тусклой:

for star in stars:
    colour = (255, 255, 255)
    if random.randint(1, 30) == 1:
        colour = (110, 120, 170)
    pygame.draw.circle(screen, colour, star, 3)

Для каждой звезды colour сначала задаётся белым, а if меняет его только при выпадении 1. Один кадр из 30 — это примерно два раза в секунду для каждой звезды, и каждая звезда выбирает собственное число, поэтому они мерцают в разное время. Именно это небольшое неравномерное изменение создаёт ощущение, что небо живое.

Добавь import random в начало программы. Здесь случайное число нужно выбирать в цикле отрисовки, потому что это должно происходить заново в каждом кадре для каждой звезды.

challenge icon

Задание

Средне

Сделайте звёзды мерцающими:

  1. Добавьте import random в начало.
  2. В цикле по звёздам задавайте каждой звезде начальное значение colour — белый цвет (255, 255, 255).
  3. Когда random.randint(1, 30) == 1, делайте её тусклой (110, 120, 170).
  4. Нарисуйте звезду цветом colour.

Попробуйте сами

import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# Настройте всё здесь, до игрового цикла.
stars = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            stars.append(event.pos)

    # Изменяйте всё здесь, один раз за кадр.

    screen.fill((20, 24, 48))
    # Рисуйте здесь, после заливки экрана.
    pygame.draw.circle(screen, (240, 230, 160), (560, 80), 40)
    pygame.draw.rect(screen, (14, 16, 30), (0, 430, 640, 50))
    for star in stars:
        pygame.draw.circle(screen, (255, 255, 255), star, 3)

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Все уроки раздела Python в игровом окне

Потренируйтесь самостоятельно: Песочница Pygame