저번 글에서는 플레이어인 팽이가 움직이는 것을 구현하였다.
이번 글에서는 밋밋한 현재의 바탕 대신에 도트로 찍은 그림을 배경화면으로 쓸 것이다!!
우리는 처음에 그리드로 구역을 나눴었다
우리는 맵 전부를 우리가 직접 그리는 것 대신에
일정한 타일 양식을 몇 개 만들고 그 타일을 가지고 맵을 구성할 것이다.
먼저 기본적으로 땅 타일과 바다 타일을 만들 것이다.
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' 카테고리의 다른 글
Pygame 도전기 5 - 장애물 만들기 (0) | 2020.01.09 |
---|---|
Pygame 도전기 3 - player 움직임 구현 (0) | 2020.01.08 |
Pygame 도전기 - 2(그리드 만들기) (2) | 2020.01.06 |
Pygame 도전기 - 1 (0) | 2019.10.22 |
Pygame에 도전하다 (0) | 2019.10.22 |