Menu
CoddyTech

Các khối rơi ngẫu nhiên

Thuộc phần Vòng lặp trò chơi trong hành trình Pygame của Coddy. Bài học 28 trên 35.

Khi khối rơi qua mép dưới, hãy đưa nó trở lại phía trên mép trên để nó rơi xuống lần nữa. Mép trên của khối vượt quá mép dưới khi block.top > 360.

Để trò chơi khó đoán hơn, hãy thả khối ở một vị trí ngẫu nhiên. Module random của Python chọn các số: random.randint(0, 460) là một số nguyên từ 0 đến 460, bao gồm cả hai đầu.

import random

if block.top > 360:
    block.y = -20
    block.x = random.randint(0, 460)

Tại sao là 460? Khối rộng 20, nên giá trị x là 460 sẽ đặt cạnh phải của khối ngay sát mép cửa sổ. Còn y = -20 đặt khối ngay phía trên cửa sổ, để nó trượt vào từ phía trên.

challenge icon

Thử thách

Dễ

Thả một khối ở vị trí ngẫu nhiên sau mỗi lần khối rơi xuống.

  1. Thêm import random ở đầu.
  2. Sau khi khối rơi xuống, khi block.top > 360, đặt block.y = -20 và đặt block.x thành random.randint(0, 460).

Nhấn Chơi: các khối tiếp tục rơi xuống ở những vị trí ngẫu nhiên. Sau đó nhấn Kiểm tra.

Tự làm thử

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)

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

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        basket.x -= 8
    if keys[pygame.K_RIGHT]:
        basket.x += 8
    basket.clamp_ip(screen.get_rect())

    block.y += 3

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Tất cả bài học trong Vòng lặp trò chơi

Tự luyện tập: Playground Pygame