Pygame Snake, 파트 2
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).
따라서 정사각형은 올바른 픽셀 위치에 그려지며, 우리는 여전히 격자 타일 단위로 생각할 수 있습니다.