Pygame Snake, 파트 2

발행: (2026년 4월 22일 AM 07:23 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

소개

1부에서는 1000 × 1000 픽셀 캔버스와 50 × 50 픽셀 정사각형이 지속적으로 움직이는 기본 pygame 창을 설정했습니다. 뱀 게임에서는 고정된 격자를 사용하고 싶으므로 타일과 캔버스를 축소합니다.

타일 크기 및 그리드 업데이트

30 × 30 격자를 사용하고 각 타일을 20 픽셀 정사각형으로 합니다 (30 타일 × 20 px = 600 px). 세 개의 상수를 정의하고 모든 하드코딩된 숫자를 해당 상수에 대한 참조로 교체합니다:

W = 30   # 그리드 너비 (타일)
H = 30   # 그리드 높이 (타일)
S = 20   # 타일 크기 (픽셀)

이 값을 사용해 화면을 생성합니다:

screen = pygame.display.set_mode((W * S, H * S))

뱀의 머리(또는 “점”)를 격자의 중앙 근처에 배치합니다:

dot = pygame.Vector2(W / 2, H / 2)

정사각형을 그릴 때는 격자 좌표를 픽셀 좌표로 변환하기 위해 S와 곱합니다:

square = pygame.Rect(dot * S, (S, S))

정사각형을 만들기 직전에 가로축에 대한 래핑 검사를 추가합니다:

if dot.x > W:
    dot.x = 0

현재 시점의 전체 코드

import pygame

W = 30
H = 30
S = 20

# pygame setup
pygame.init()
screen = pygame.display.set_mode((W * S, H * S))
clock = pygame.time.Clock()
running = True

dot = pygame.Vector2(W / 2, H / 2)

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

    # fill buffer with white
    screen.fill("white")

    # move the dot to the right
    dot.x += 1
    if dot.x > W:
        dot.x = 0

    # draw the square (scaled to pixel size)
    square = pygame.Rect(dot * S, (S, S))
    screen.fill("black", square)

    # copy buffer to screen
    pygame.display.flip()

    # limit FPS
    clock.tick(20)

pygame.quit()

스케일링 작동 방식

보드는 이제 1 × 1 타일로 이루어진 논리적인 30 × 30 격자입니다. 그릴 때는 그 격자 좌표를 실제 픽셀 위치로 스케일링합니다.

  • dot은 격자 좌표를 보유합니다. 예: (15, 15).
  • S와 곱하면 (dot * S) 픽셀 공간으로 변환됩니다: (15 * 20, 15 * 20) = (300, 300).

따라서 정사각형은 올바른 픽셀 위치에 그려지며, 우리는 여전히 격자 타일 단위로 생각할 수 있습니다.

0 조회
Back to Blog

관련 글

더 보기 »

Pygame Snake, 파트 1

소개 Pygame은 Python으로 2D 게임을 만들 수 있게 해주는 모듈입니다. 프로그래밍 개념을 배우기에 좋은 방법이며, 고전 게임인 Snake는 ...

Pygame Snake, 파트 3

키보드 입력으로 정사각형 제어 파트 2에서 우리는 격자 위를 움직이는 정사각형을 보았습니다. 이제 KEYDOWN 이벤트에 반응하도록 만들어 플레이어가 제어할 수 있게 합니다.