Menu
CoddyTech

Vòng lặp lồng nhau

Thuộc phần Python trong cửa sổ trò chơi trong hành trình Pygame của Coddy. Bài học 19 trên 33.

Phần thân của một vòng lặp có thể chứa một vòng lặp khác. Vòng lặp bên trong chạy hết một lượt mỗi khi vòng lặp bên ngoài lặp:

for row in range(4):
    for col in range(8):
        x = 130 + col * 50
        y = 210 + row * 60
        pygame.draw.rect(screen, (255, 210, 90), (x, y, 20, 20))

Khi row là 0, vòng lặp bên trong vẽ 8 cửa sổ dọc theo hàng trên cùng. Sau đó, row trở thành 1 và vòng lặp bên trong vẽ thêm 8 cửa sổ, thấp hơn 60 pixel. Bốn hàng, mỗi hàng tám cửa sổ, tạo thành 32 cửa sổ. Lưới luôn có hình dạng này: một vòng lặp cho các hàng, một vòng lặp cho các cột.

pygame.draw.rect(screen, colour, (x, y, width, height)) vẽ một hình chữ nhật tô kín, có góc trên bên trái tại (x, y).

Hãy chú ý thụt lề: for bên trong được thụt lề dưới vòng lặp bên ngoài, phần thân của nó lại được thụt lề thêm, cách vòng lặp bên ngoài 8 dấu cách.

challenge icon

Thử thách

Trung bình

Thắp sáng toàn bộ tòa nhà: 4 hàng, mỗi hàng có 8 cửa sổ.

  1. Bọc vòng lặp cửa sổ trong for row in range(4):.
  2. Đặt y = 210 + row * 60 để các hàng nằm ở y 210, 270, 330 và 390.

Nhấn “Chơi”: 32 cửa sổ sáng. Sau đó nhấn “Kiểm tra”.

Tự làm thử

import pygame

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

# Thiết lập mọi thứ ở đây, trước vòng lặp (loop) của trò chơi.

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

    # Thay đổi mọi thứ ở đây sau mỗi khung hình.

    screen.fill((20, 24, 48))
    # Vẽ ở đây, sau khi tô nền.
    pygame.draw.rect(screen, (40, 44, 70), (100, 180, 440, 300))
    for col in range(8):
        x = 130 + col * 50
        y = 210
        pygame.draw.rect(screen, (255, 210, 90), (x, y, 20, 20))

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

pygame.quit()

Tất cả bài học trong Python trong cửa sổ trò chơi

Tự luyện tập: Playground Pygame