본문 바로가기

Python/Python 초등 교육

9. 장애물 넘기 게임 - 2부

반응형

이제 앞에서 내용에 이어 공룡이미지와 장애물 이미지르 나오게 하는 부분에 대해 알아 보아요.

하나하나 기능과 파이썬 코드들을 알아가는데 어렵고 오래 걸려서 힘들고 지루하다고 생각하는 사람들이 많을것 같아요.

 

하지만 이제 시작하는 부분이라 이런 시간이 꼭!! 필요합니다. 이런 시간들이 쌓이고 쌓여가는 과정이 바로 경력! 실력!이 되어가는 것이니까요.

 

앞에 작성한 코드에 붙여서 공룡이미지를 어떻게 나오하는지 알아 보아요.

 

먼저 공룡이미지가 필요하겠죠? 공룡이미지는 각자 원하는 이미지를 사용하셔도 됩니다. 

공룡이미지는 https://github.com/devraccon/PracticeGame1/blob/master/images/dino1.png 요기서 다운받으셔도 됩니다.

 

이렇게 준비한 이미지는 아래 그림처럼 image 디렉토리를 만들고 해당 디렉토리에 이미지를 넣어 놓습니다.

 

이제 파이썬 코드에서 옴겨 놓은 이미지를 어떻게 읽어 와서 게임화면에 나오게 하느지 보아요.

import sys

import pygame

pygame.init()
pygame.display.set_caption("데브라쿤 파이썬게임 연습1")
MAX_WIDTH = 800
MAX_HEIGHT = 400

def main():
    # 게임 화면의 사이즈 설정
    screen = pygame.display.set_mode((MAX_WIDTH, MAX_HEIGHT))

    # #공룡 이미지 로드
    image_dino1 = pygame.image.load("images/dino1.png")
    dino_height = image_dino1.get_size()[1]
    # 공룡이 바닥에 붙어 있는 모양을 만들고 싶음
    dino_bottom = MAX_HEIGHT - dino_height

    # 공룡 좌표
    dino_x = 50
    dino_y = dino_bottom

    while True:
        screen.fill((255, 255, 255))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        #공룡이미지를 화면에 나오게 하는 부분 , dino_x , dino_y 좌표에 나오게됨
        screen.blit(image_dino1, (dino_x, dino_y))

        pygame.display.update()

if __name__ == '__main__':
    main()

1부에서 우리가 작성한 게임화면이 나오게 하는 코드에서 추가된 부분을 하나씩 살펴보아요.

#공룡 이미지 로드
image_dino1 = pygame.image.load("images/dino1.png")

pygame에는 우리가 게임을 위하 준비한 게임엥 필요한 이미지 , 음악등의 리소스를 읽어 올수 있는 함수를 제공하는데요.

우리가 준비한 공룡 이미지를 읽어서 게임화면에 넣기 위한 image_dino1 이라는 변수에 담아 놓는 과정입니다. 

 

dino_height = image_dino1.get_size()[1]

이부분은 공룡이미지의 세로 크기를 알아내는 부분이에요. 앞에서 image_dino1 변수에는 pygame이미지 객체가 들어 있을건데요. 

이미지객체에는 get_size() 라는 함수가 있고 이 get_size() 라는 함수는 해당 이미지의 가로 , 세로 크기를 배열로  return (돌려준다) 하고 있어요.

 

배열에 대해서는 앞에서 간단하게 배워서 알고 있죠? 다시 간단하게 알아 보면 아래와같은 형태의 데이터를 배열이라고합니다

array = [1,2,3,]
또는 
array = ["문자1", "문자2" , "문자3"]

이런 형태의 데이터를 배열이라고 하고 배열안에 각데이터는 자리번호가 있어요. 0 부터 시작하게 되고 1씩 증가하게 됩니다.

 

위 샘플 코드에서 각 배열에 있는 데이터의 자리값은 아래와같습니다 

1 = 0
2 = 1 
3 = 2

문자1 = 0
문자2 = 1
문자3 = 3

그럼 image_dino1.get_size() 했을때는 아래와 같은 형태의 데이터가 return 되었을거에요.

[이미지가로크기 , 이미지세로크기]

그럼 해당 배열에 0번자리는 가로 크기 이고 , 1번 자리는 세로 크기 라는것을 알수 있죠

그렇게 이미지의 세로크기를 알아 봤어요. 

# 공룡이 바닥에 붙어 있는 모양을 만들고 싶음
dino_bottom = MAX_HEIGHT - dino_height

 

이 부분은 코드의 주석에 있는거처럼 공룡이미지가 게임 화면의 바닥 즉 아래쪽에 있게 만들고 싶어서 넣은 코드에요.

게임 화면 세로 크기에서 이미지 세로크기를 빼면 화면에서 공룡이 위치해야 할 위치 좌표값을 구할수 있기 때문에 필요한 부분입니다. 

그럼 좌표가 뭐죠? 라는 궁금점이 생길거에요. 아래 그림을 보면서 이해 봐요

게임에서 캐릭터가 이동하고 장애물이 이동을 하는것은 게임 화면에서 좌표로 이동을 하는것인데요. 좌표는 [가로, 세로] 로 구성되어 있습니다. 2D 일때는 이렇게 가로 , 세로 의 좌표로 구성이 되고 우리가 사는 세상인 3D 세상은 [가로,세로,높이]의  3개의 좌표로 구성이 됩니다. 3D는 아직 몰라도 되요. 나중에 여러분이 3D게임을 만들고 싶을때 다시 공부해도 늦지 않아요.

 

그럼 위 그림에 대해 설명을 하자면 그림에서 그림에서 보면 왼쪽 상단 꼭지점이 [0 , 0 ] 으로 시작해서 오른쪽 밑에 끝 꼭지점을 보면 

[ 800 , 400 ] 으로 되어 있어요. 이것은 우리가 게임화면 크기를 설정한 크기값도 똑같죠? 그렇게 게임화면은 여러분이 설명한 크기안에 좌표를 구성하게 됩니다 

 

위 코드의 dino_bottom은 그림에서 360 이라는 값을 가지게 될것인데요 . 이 360이라는 값은 공룡의 머리부분이 즉 이미지의 제일 상단 부분이 위치해야 되는 세로 좌표값을 나타내게 됩니다.  

 

즉 , 공룡이 위치값 [ 0 , 360]이라고 화면 공룡은 화면 제일 왼쪽 아래에 있을거고 

[400 , 360] 은 화면의 가운데 부분에 위치하게 될거에요. 이해가 잘 안간다면 나중에 공룡의 위치값을 막 바꿔 가면서 어떻게 동작하는지 테스트 해보는것이 좋아요. 

 

이렇게 구한 공룡의 세로 위치값을 어떻게 사용하는지 알아 보아요. 이제 dino_image를 보여지게 해 봅시다. 

# 공룡 좌표
dino_x = 50
dino_y = dino_bottom

while True:
    screen.fill((255, 255, 255))
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    #공룡이미지를 화면에 나오게 하는 부분 , dino_x , dino_y 좌표에 나오게됨
    screen.blit(image_dino1, (dino_x, dino_y))

	#화면을 계속 새롭게 Refresh 시켜줍니다
    pygame.display.update()

주석 달려 있는 부분이 보이죠? 저렇게 screen 즉 앞에서 게임화면을 설정 정보를 담고 있는 객체에 blit 함수에 공룡이미지와 

공룡이미지가 있어야할 가로 , 세로 좌표값을 넣어 주고 pygame.display.update()를 해주면 됩니다.

 

 pygame.display.update()를 안하게 되면 화면의 업데이트가 이뤄지지 않아 공룡이나 다른 게임화면의 정보들이 게임화면에 나타나지 않게 되요.  이것도 테스트해보면 좋아요.

 

이렇게 하면 게임을 실행하면 공룡이미지가 짠! 하고 나타나게  됩니다. 

 

요기까지 공룡이미지가 나오는 부분까지 알아 보았어요. 다음은 장애물을 나오게 하고 해당 장애물을 움직이게 하는 부분까지 알아 보아요.

 

https://github.com/devraccon/PracticeGame1.git