Мерцание
Часть раздела 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 в начало программы. Здесь случайное число нужно выбирать в цикле отрисовки, потому что это должно происходить заново в каждом кадре для каждой звезды.
Задание
СреднеСделайте звёзды мерцающими:
- Добавьте
import randomв начало. - В цикле по звёздам задавайте каждой звезде начальное значение
colour— белый цвет(255, 255, 255). - Когда
random.randint(1, 30) == 1, делайте её тусклой(110, 120, 170). - Нарисуйте звезду цветом
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