Menu
CoddyTech

Conte com While

Parte da seção Python em uma janela de jogo do Journey de Pygame da Coddy. Lição 19 de 32.

Um loop while se repete enquanto sua condição for verdadeira. Use-o quando você não sabe de antemão quantas vezes precisa repetir:

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

O raio cai pela metade a cada vez: 200, 100, 50, 25, 12. // divide e descarta o que vem depois da vírgula, então 25 // 2 é 12. Depois, o valor é 6, a condição é falsa e o loop termina após 5 anéis. rings os conta. O quinto número na chamada de círculo, 2, desenha um contorno de 2 pixels de largura em vez de um círculo preenchido.

O loop do jogo também é um loop while, que executa até você fechar a janela. Um loop while dentro de um quadro precisa terminar rapidamente, ou o quadro nunca termina. Se você remover a linha que divide o raio pela metade, a condição permanece verdadeira para sempre: o jogo congela, e Check informa que o jogo nunca chegou ao primeiro quadro.

challenge icon

Desafio

Médio

Na parte de desenho, substitua o anel único por um loop while:

  1. Comece com radius = 200 e rings = 0.
  2. Enquanto radius > 10: desenhe um anel de contorno da cor (150, 190, 255), com largura 2, centralizado em (320, 240); divida o raio pela metade usando //; adicione 1 a rings.
  3. Após o loop, mostre f"Rings: {rings}" em (20, 20). Ele exibe Rings: 5.

Experimente você mesmo

import pygame

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

# Configure as coisas aqui, antes do loop do jogo.
font = pygame.font.Font(None, 36)

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

    # Altere as coisas aqui, uma vez por quadro.

    screen.fill((20, 24, 48))
    # Desenhe aqui, depois de preencher a tela.
    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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Python em uma janela de jogo

Pratique por conta própria: Playground de Pygame