Menu
CoddyTech

Nhấp vào viên ngọc

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

get_pos cho biết con trỏ đang ở đâu. Một lần nhấp là một sự kiện: khi nút chuột được nhấn xuống, vòng lặp sự kiện nhận một sự kiện pygame.MOUSEBUTTONDOWN trong khung hình đó. event.pos cho biết vị trí nhấp chuột.

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    elif event.type == pygame.MOUSEBUTTONDOWN:
        x, y = event.pos
        if gx <= x <= gx + 30 and gy <= y <= gy + 30:
            print("Got it!")

Viên ngọc nằm gọn trong hình vuông có kích thước 30 x 30, bắt đầu từ (gx, gy). Bạn nhấp trúng viên ngọc khi x nằm giữa cạnh trái và cạnh phải của hình vuông, còn y nằm giữa cạnh trên và cạnh dưới. Python cho phép bạn viết gx <= x <= gx + 30 để diễn đạt “x nằm trong khoảng từ gx đến gx + 30”.

random.randint(a, b) chọn một số nguyên từ a đến b, vì vậy viên ngọc bị bắt có thể nhảy đến một vị trí mới.

challenge icon

Thử thách

Dễ

Khi bạn nhấp vào viên ngọc, hãy làm cho nó nhảy đi nơi khác.

  1. Thêm import random ở đầu.
  2. Trong vòng lặp sự kiện, khi có MOUSEBUTTONDOWN, nếu event.pos nằm trong hình vuông từ (gx, gy) đến (gx + 30, gy + 30), hãy đặt gx = random.randint(15, 435) và gy = random.randint(55, 315).

Nhấn Chơi rồi nhấp vào viên ngọc: nó sẽ nhảy đến một vị trí mới. 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("Gem Hunt")
clock = pygame.time.Clock()

gx, gy = 225, 165

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

    screen.fill((30, 30, 46))
    gem_points = [(gx + 15, gy), (gx + 30, gy + 15), (gx + 15, gy + 30), (gx, gy + 15)]
    pygame.draw.polygon(screen, (80, 220, 255), gem_points)
    mouse_x, mouse_y = pygame.mouse.get_pos()
    pygame.draw.circle(screen, (240, 240, 240), (mouse_x, mouse_y), 10, 2)
    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