본문 바로가기

프로그래밍/pygame

Pygame 도전기 4 - 맵 짜기

저번 글에서는 플레이어인 팽이가 움직이는 것을 구현하였다.

이번 글에서는 밋밋한 현재의 바탕 대신에 도트로 찍은 그림을 배경화면으로 쓸 것이다!!

 

우리는 처음에 그리드로 구역을 나눴었다

우리는 맵 전부를 우리가 직접 그리는 것 대신에

일정한 타일 양식을 몇 개 만들고 그 타일을 가지고 맵을 구성할 것이다.

 

먼저 기본적으로 땅 타일과 바다 타일을 만들 것이다.

Sea 클래스와 Ground 클래스를 만들자

 

class Sea(pygame.sprite.Sprite):
    # 타일의 위치를 지정하기 위해 col과 row를 인자로 받아 타일의 위치를 지정해줄 것이다.
    def __init__(self, col, row):
        pygame.sprite.Sprite.__init__(self)
        # 타일 한개당 위치를 좌표로 본다
        self.grid_x = row * TILESIZE
        self.grid_y = col * TILESIZE
        self.image = pygame.image.load(path.join(image_folder, 'sea.png')).convert_alpha()
        self.rect = self.image.get_rect()
        # 타일 생성위치를 좌표에 대입
        self.rect.x = self.grid_x
        self.rect.y = self.grid_y

class Ground(pygame.sprite.Sprite):
    
    def __init__(self, col, row):
        pygame.sprite.Sprite.__init__(self)
        # 타일 한개당 위치를 좌표로 본다
        self.grid_x = row * TILESIZE
        self.grid_y = col * TILESIZE
        self.image = pygame.image.load(path.join(image_folder, 'ground.png')).convert_alpha()
        self.rect = self.image.get_rect()
        # 타일 생성위치를 좌표에 대입
        self.rect.x = self.grid_x
        self.rect.y = self.grid_y

 

그리고 타일을 기반으로 내가 원하는 형태의 맵을 텍스트 파일 형식으로 저장한다.

 

타일 하나의 사이즈를 정해 게임 화면의 크기에 맞게 설정해준다.

내가 설정한 게임 화면의 크기는 1024 * 768 이고 타일 하나의 사이즈는 64 * 64 이므로

맵 텍스트 파일은 16행 12열로 만들어준다. 

바다 타일은 s, 땅 타일은 g라고 할 것이다.

 

맵 텍스트 파일이다

그리고 위와 같이 작성된 텍스트 파일을 한 줄씩 읽어와 map_data에 저장한다.

 

# 맵 데이터를 저장할 리스트를 만들어 준다
map_data = []
# map_file을 읽는다
with open(map_file, 'r') as file:
    for line in file:
        # 마지막 줄바꿈 기호까자 출력되므로 strip을 이용해 없애준다.
        # 그리고 띄어쓰기를 기준으로 한 행을 하나의 리스트로 만든 다음 그 리스트를 map_data에 추가해 2차원 리스트로 만들어준다
        map_data.append(line.strip('\n').split(' '))

그리고 원소를 하나씩 불러와 만약 "s"라면 좌표의 위치에 sea.png를 "g"면 ground.png를 불러온다.

for col in range(0,len(map_data)):
    for row in range(0,len(map_data[col])):
        if map_data[col][row] == "s":
            sea = Sea(col, row)
            sprite_group.add(sea)
        if map_data[col][row] == "g":
            ground = Ground(col, row)
            sprite_group.add(ground)

그리고 게임을 실행해보자.

간단하게 맵을 생성했다!

위과 같이 성공적으로 맵을 만들었음을 알 수 있다.

'프로그래밍 > pygame' 카테고리의 다른 글