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.
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.
- Thêm
import randomở đầu. - Sau khi khối rơi xuống, khi
block.top > 360, đặtblock.y = -20và đặtblock.xthànhrandom.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
1Di chuyển hình vuông
Mở cửa sổTô nền4Di chuyển theo thời gian
Thời gian deltaPixel mỗi giâyVector2Gia tốc và ma sátDi chuyển vòng quanh màn hình2Hình dạng và màu sắc
Hình tròn, đường thẳng và đa giácĐường viền và gócMột khung cảnh với các hìnhMàu sắc thay đổi5Bắt các khối
Cái giỏKhối đang rơiTự luyện tập: Playground Pygame