프로젝트 개요
- pygame을 사용하여 Pirate Mario제작
- Youtube Clear Code의 Platformer in Pygame을 따라하며 진행
- 주요 과제: 게임 실행을 위한 기본적인 세팅을 완성하고 맵과 플레이어를 화면에 출력
프로젝트 내용
Default Settings
main.py
import pygame
from sys import exit
pygame.init()
screen = pygame.display.set_mode((1200, 700))
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(60)
- 게임에서 진행할 모든 이벤트를 처리하기 위해 메인 모듈을 먼저 설계
settings.py
level_map = [
' ',
' ',
' ',
' XX XXX XX ',
' XX P ',
' XXXX XX XX ',
' XXXX XX ',
' XX X XXXX XX XX ',
' X XXXX XX XXX ',
' XXXX XXXXXX XX XXXX ',
'XXXXXXXX XXXXXX XX XXXX ']
tile_size = 64
screen_width = 1200
screen_height = len(level_map) * tile_size
- 플레이어, 적, 구조물 등이 배치될 level을 먼저 저장
- 벽 또는 장애물이 있을 경우 'X' 표시
- 'X' 표시가 된 인덱스에 대해 tile이라 칭하고 그 크기를 64로 고정 (플레이어의 경우 'P' 표시)
- screen의 너비 = 1200, 높이 = level_map의 크기 * tile의 크기로 고정
tiles.py
import pygame
class Tile(pygame.sprite.Sprite):
def __init__(self, size, pos):
super().__init__()
self.image = pygame.Surface((size, size))
self.image.fill('grey')
self.rect = self.image.get_rect(topleft = pos)
- 크기와 위치를 입력받아 타일을 생성해주는 sprite class
player.py
import pygame
class Player(pygame.sprite.Sprite):
def __init__(self, pos):
super().__init__()
self.image = pygame.Surface((32, 64))
self.image.fill('red')
self.rect = self.image.get_rect(topleft = pos)
- 위치를 입력받아 플레이어를 생성해주는 sprite class
level.py
import pygame
from settings import tile_size
from tiles import Tile
from player import Player
class Level:
def __init__(self, level_data, surface):
super().__init__()
self.display_surface = surface
self.setup_level(level_data)
def setup_level(self, level_data):
self.tiles = pygame.sprite.Group()
self.player = pygame.sprite.GroupSingle()
for row_index, row in enumerate(level_data):
for col_index, cell in enumerate(row):
x = col_index * tile_size
y = row_index * tile_size
if cell == 'X':
tile = Tile(tile_size, (x, y))
self.tiles.add(tile)
elif cell == 'P':
player = Player((x, y))
self.player.add(player)
def run(self):
self.tiles.draw(self.display_surface)
self.player.draw(self.display_surface)
- settings, tiles, player 모듈을 불러와 sprite들을 생성하고 level_map에 따라 level을 화면에 출력하도록 하는 sprite class
Basic setup using default settings
main.py
import pygame
from sys import exit
from settings import *
from level import Level
pygame.init()
screen = pygame.display.set_mode((1200, 700))
clock = pygame.time.Clock()
level = Level(level_map, screen)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
level.run()
pygame.display.update()
clock.tick(60)
![](https://velog.velcdn.com/images/sh97818/post/0155967e-f078-4bca-9502-da6f35cb9cb1/image.png)
KEEP
- main.py의 default setting을 혼자 작성
PROBLEM
- 여러가지 모듈을 만들고 호출하는 과정에서 상당히 복잡함을 느꼈고 class의 상속을 통해 다른 모듈에서 instance, method를 사용하는 것이 미숙했음
- level_map의 원소를 받아들여 화면에 출력하는 부분에서 이해하는 데에 다소 걸림
TRY
- class의 사용과 상속에 대해 다시 공부하고 코드 복기
- 알고리즘 작성 연습