Menu
CoddyTech

보석 클릭하기

Coddy Pygame 여정의 게임 루프 섹션에 포함된 레슨. 32개 중 14번째.

get_pos는 포인터가 어디에 있는지 알려 줍니다. 클릭은 이벤트입니다. 마우스 버튼을 누르면 이벤트 루프는 해당 프레임에서 pygame.MOUSEBUTTONDOWN 이벤트를 하나 받습니다. 이 이벤트의 event.pos는 클릭이 발생한 위치입니다.

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:
            score += 1

보석은 (gx, gy)를 기준으로 한 30×30 정사각형 안에 들어갑니다. x가 정사각형의 왼쪽과 오른쪽 경계 사이에 있고 y가 위쪽과 아래쪽 경계 사이에 있으면 보석을 클릭한 것입니다. Python에서는 "x가 gx에서 gx + 30까지"라는 뜻으로 gx <= x <= gx + 30이라고 쓸 수 있습니다.

획득한 보석은 random.randint를 사용해 새로운 위치로 이동하고, for 루프는 점수만큼 작은 분홍색 정사각형을 한 줄로 그려 점수를 표시합니다.

challenge icon

챌린지

쉬움
  1. 맨 위에 import random을 추가하고, 반복문 앞에 score = 0을 추가합니다.
  2. MOUSEBUTTONDOWN이 발생했을 때 event.pos가 (gx, gy)부터 (gx + 30, gy + 30)까지의 정사각형 안에 있으면 score에 1을 더하고, gx를 random.randint(15, 435)로, gy를 random.randint(55, 315)로 설정합니다.
  3. 보석을 그린 다음 점수를 표시합니다. range(score)의 각 i에 대해 분홍색 (240, 110, 180) 사각형을 (10 + 10 * i, 14, 8, 8) 위치에 그립니다.

직접 해보기

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()

게임 루프의 모든 레슨

직접 연습해 보세요: Pygame 플레이그라운드