텍스트로 레벨 만들기
Coddy Pygame 여정의 게임 월드 섹션에 포함된 레슨. 35개 중 1번째.
숫자로 벽을 하나씩 그려 레벨을 만들면 작성하는 데 시간이 오래 걸리고 수정하기도 어렵습니다. 대신 레벨을 텍스트로 입력하세요. 문자열 목록을 만들고, 타일 한 줄마다 문자열 하나를 사용하며, 타일 하나마다 문자 하나를 사용합니다.
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]여기서 #은 벽이고 .은 빈 공간입니다. LEVEL[9]는 맨 아래 행인 문자열이며, LEVEL[9][4]는 그 문자열의 다섯 번째 문자입니다. 행은 위에서부터, 열은 왼쪽에서부터 세며, 둘 다 0부터 시작합니다.
타일의 너비가 TILE = 36픽셀일 때, col열 row행에 있는 타일은 x = col * TILE, y = row * TILE 위치에서 시작합니다. 한 행을 순회하려면 enumerate를 사용해 각 문자와 그 인덱스를 가져옵니다.
for col, char in enumerate(LEVEL[9]):
if char == "#":
pygame.draw.rect(screen, WALL, (col * TILE, 9 * TILE, TILE, TILE))맨 아래 행의 두 간격은 빈 상태로 유지됩니다. #만 타일을 그리기 때문입니다.
챌린지
쉬움시작 코드는 맨 아래 행 전체를 갈색 막대 하나로 그립니다. 대신 맵에서 그리도록 하세요.
- 막대를 그리는 줄을 제거하세요.
enumerate를 사용해LEVEL[9]를 반복하세요.- 각
#에 대해(col * TILE, 9 * TILE, TILE, TILE)위치에WALL사각형을 그리세요.
맵은 그대로 두세요. 초록색 사각형은 방향키로 움직이며 지금은 모든 것을 통과합니다. 이 섹션의 뒷부분에서 사각형을 막는 벽을 추가합니다.
직접 해보기
import pygame
TILE = 36
WALL = (120, 90, 60)
PLAYER = (80, 200, 120)
LEVEL = [
"################",
"#..............#",
"#....####......#",
"#..............#",
"#.........##...#",
"#..##.....##...#",
"#..##..........#",
"#.........###..#",
"#..............#",
"####..####..####",
]
pygame.init()
screen = pygame.display.set_mode((576, 360))
pygame.display.set_caption("Map from Text")
clock = pygame.time.Clock()
player = pygame.Rect(40, 40, 28, 28)
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]:
player.x -= 4
if keys[pygame.K_RIGHT]:
player.x += 4
if keys[pygame.K_UP]:
player.y -= 4
if keys[pygame.K_DOWN]:
player.y += 4
screen.fill((30, 30, 46))
pygame.draw.rect(screen, WALL, (0, 324, 576, 36))
pygame.draw.rect(screen, PLAYER, player)
pygame.display.flip()
clock.tick(60)
pygame.quit()
게임 월드의 모든 레슨
직접 연습해 보세요: Pygame 플레이그라운드