Menu
CoddyTech

Счёт с помощью while

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

Цикл while повторяется, пока его условие истинно. Используй его, если заранее не знаешь, сколько раз нужно пройти цикл:

radius = 200
rings = 0
while radius > 10:
    pygame.draw.circle(screen, (150, 190, 255), (320, 240), radius, 2)
    radius = radius // 2
    rings = rings + 1

Радиус каждый раз уменьшается вдвое: 200, 100, 50, 25, 12. // делит и отбрасывает дробную часть, поэтому 25 // 2 — это 12. Затем получается 6, условие становится ложным, и цикл завершается после 5 колец. Переменная rings считает их. Пятое число в вызове функции для рисования круга — 2 — задаёт контур шириной 2 пикселя вместо закрашенного круга.

Игровой цикл — это тоже цикл while, который выполняется, пока ты не закроешь окно. Цикл while внутри кадра должен быстро завершаться, иначе кадр так и не закончится. Убери строку, которая делит радиус пополам, и условие навсегда останется истинным: игра зависнет, а Check сообщит, что игра так и не достигла первого кадра.

challenge icon

Задание

Средне

В части отрисовки замените одно кольцо циклом while:

  1. Начните с radius = 200 и rings = 0.
  2. Пока radius > 10: нарисуйте контурное кольцо цвета (150, 190, 255), шириной 2, с центром в точке (320, 240); разделите радиус пополам с помощью //; увеличьте rings на 1.
  3. После цикла выведите f"Rings: {rings}" в точке (20, 20). На экране появится Rings: 5.

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

import pygame

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

# Выполните настройку здесь, до начала игрового цикла.
font = pygame.font.Font(None, 36)

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

    # Изменяйте нужные параметры здесь, один раз за кадр.

    screen.fill((20, 24, 48))
    # Рисуйте здесь, после заливки фона.
    pygame.draw.circle(screen, (150, 190, 255), (320, 240), 200, 2)
    text = font.render("Rings: 1", True, (230, 230, 240))
    screen.blit(text, (20, 20))

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

pygame.quit()
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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

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