Вызываем много раз
Часть раздела Python в игровом окне путешествия по Pygame на Coddy. Урок 23 из 32.
Вызови функцию в цикле, и она нарисует узор. Цикл вычисляет аргументы, а функция выполняет рисование:
for i in range(8):
draw_star(60 + i * 70, 60 + i * 45)Каждый проход цикла находится на 70 пикселей правее предыдущего и на 45 пикселей ниже, поэтому звёзды выстраиваются в линию от (60, 60) до (550, 375). Измени 70 или 45, и положение каждой звезды изменится.
Вот почему функции стоит писать. Строки, рисующие звезду, существуют в одном экземпляре. Чтобы изменить вид всех звёзд — например, сделать лучи длиннее или выбрать другой цвет, — измени тело функции, и каждый вызов будет рисовать новую звезду.
Называй функцию по тому, что она делает, часто используя глагол: draw_star, move_comet, reset_game. Тогда строка, которая её вызывает, читается как предложение.
Задание
ЛегкоНарисуй линию из звёзд: замени единственный вызов циклом for i in range(8):, вызывающим draw_star(60 + i * 70, 60 + i * 45). 8 звёзд располагаются от (60, 60) до (550, 375).
Попробуйте сами
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()
# Настройте всё здесь, до начала игрового цикла.
def draw_star(x, y):
pygame.draw.line(screen, (255, 240, 200), (x - 10, y), (x + 10, y), 2)
pygame.draw.line(screen, (255, 240, 200), (x, y - 10), (x, y + 10), 2)
pygame.draw.circle(screen, (255, 240, 200), (x, y), 4)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Изменяйте всё здесь один раз за кадр.
screen.fill((20, 24, 48))
# Рисуйте здесь, после заливки фона.
draw_star(60, 60)
pygame.display.flip()
clock.tick(60)
pygame.quit()
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Python в игровом окне
Потренируйтесь самостоятельно: Песочница Pygame