본문 바로가기
Python/pygame

01-python 게임 만들기 - 시작(콘티)

by To올라운더 2024. 2. 5.
반응형

사실 게임을 만들려고 하면, 가장 먼저 시작해야하는 건

콘티라고 생각한다.

 

당연하게도 게임을 만들 수 있는 사람들을 모아서 게임을 만들기 때문인데,

우리는 기술(또는 기능)이 없으니, 기술부터 배워야 한다.

 

그래도 방향은 정하고 시작해야 큰 그림을 그려나갈 수 있을 것 같은데,

기본 동작은 마리오나 쿠키런 같은 배경과 캐릭터, 아이템이 있는 형태의

게임을 만들어보고 pygame에 대한 어느 정도의 이해가 선행되면

내가 만들고 싶은 게임의 콘티부터 다시 시작해보자.

 

 

1. 게임 콘티 생각하기

우리가 지난 시간에 배웠던 기본틀은 단지 검은 화면이었다.

게임이라 부르기에도 부끄러웠을 것이다.

 

 

  이제 여기에 배경과 캐릭터등을 추가할 예정인데,

  아래에 첨부된 압축파일을 풀고, game_opening 폴더 아래에 image 폴더를 생성한 뒤, 파일을 저장하면 된다.

rabbit_and_turtle.zip
0.14MB

 

맞다. 이번 강의의 테마는 별주부전이다.

재미를 위해 약간의 이야기를 더해보면,

용왕의 치료와 장수를 위해 용궁으로 토끼를 데려가려는 별주부(자라)와 

반란을 꿈꾸며 별주부를 방해하는 상어들 이라는 상황이다.

 

1차적인으로 구현할 게임 기능은

 - 바닷속 배경과, 별주부, 상어를 나타낸 뒤 우리가 별주부를 조작하고,

   임의로 움직이는 상어를 피하는 방식으로 상어와 부딪치면 게임이 종료된다.

 

2차적인 추가 기능으로 

  - 타이머를 추가하여 얼마나 오랜 시간 동안 상어들을 피하였는지 게임 기록을 나타내고,

  - 바닷속에서 숨을 못쉬는 토끼에게 산소를 공급하는(공기 방울과 충돌) 과정과

    산소가 공급되지 못했을 때 게임이 종료되는 추가적인 종료 상황을 만든다.

 

3차적인 마지막 추가 기능으로

  - 스페이스 키를 누르면, 용왕이 위급상황에 사용하라고 전달해준 여의주로 

   화면에 나타난 모든 상어를 사라지게 한다.

 

이제 위의 이미지들을 코드내에 추가하는 과정을 진행해보겠다.

 

 

2. 이미지 추가하기

 - 앞서 작성한 기본 프레임 코드를 붙여 넣기 한 뒤, 

   image_load

import pygame

pygame.init()

background = pygame.display.set_mode((480,360))
pygame.display.set_caption('Exciting Pygame by ToAllrounder')


# 배경 화면 나타내기
background_img = pygame.image.load(r'image/sea_backgound.png')
background.blit(background_img,(0,0))
pygame.display.update()


running = True # 동작 상태

while running:
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            running = False



pygame.quit()

 

 

 - 추가된 건 단 3줄이지만 생각보다 설명해야 할 부분이 많다.

# 배경 화면 나타내기
background_img = pygame.image.load(r'image/sea_backgound.png')
background.blit(background_img,(0,0))
pygame.display.update()

 

 1) 이미지 불러오기

  - background_img 라는 변수를 생성하고, pygame.image.load를 이용해 이미지 파일을 불러온다.

  - image 경로를 입력할 때, 현재 실행하는 python 파일과 image 폴더가 같은 경로에 있기 때문에

    상대 경로를 이용해 폴더이름(image) / 파일이름(sea_background.png)로 불러올 수 있고,

    경로가 다르다면 절대 경로 등을 이용해 해당 파일을 불러와야 한다.

 

  - blit을 알기 전에 먼저 surface에 대해 간단한 이해가 필요한데,

    surface는 표면이라는 사전적인 의미처럼

    pygame을 통해 이미지를 표현하는 화면의 가장 바깥 부분이라고 생각하면된다.

    기본 틀처럼 아무것도 입력되지 않은 상태의 surface는 검은 화면으로 나타나고,

    우리는 이런 surface에 그림을 그리기도 하고, 글자도 적으면서 실제 사용자에게 화면을 보여준다.

 - 기본틀(5라인)에서 생성한 background 가 우리가 사용할 surface이다.

 - 이제 위의 설명처럼 backgrond surface에 그림을 그리기 위해 background.bilt 을 이용해 바다 배경(backgound_img)를 입력하는데, 입력하는 방법은 (해당 이미지 객체,(이미지 x좌표, 이미지 y좌표)) 이다.

 - 우리가 처음 pygame의 surface를 생성할 때(5라인), 가로 480 픽셀, 세로 360 픽셀의 크기로 생성하였는데,

   좌측 상단이 (0, 0) 으로 기준점이 되고, 우측으로 이동할 수록 가로 값이 증가,

   아래로 이동할 수록 세로 값이 증가한다.

  - 불러온 background_img의 기준점 또한 좌측 상단인데, 해당 값이 background.blit(background_img,(0,0)) 을 통해

   (0, 0)의 위치로 불러오게 된다.

 - 불러오는 이미지의 크기와 pygame의 surface의 크기가 다를 경우, 이미지 사이즈 조정이 필요하나,

   현재의 배경 이미지는 pygame의 해상도와 동일하므로 크기 변경은 진행하지 않아도 된다.

 

단순히 배경을 불러오는 것만으로도 한걸음 나아간 모습처럼 보인다.

 

 - 그리고 마지막으로 pygame.display.update() 를 실행해줘야 실제 적용한 이미지가 surface에 적용된다.

 

blit과 image에 대해 이야기 할 거리가 좀 더 남아 다음 포스팅에서 이어 나가 보겠다.

 

 

 

 

 

 

 

 

 

 

반응형