Python

[첫게임 만들기] 2. 배경 그리기, Bunny 움직이게 하기

by MoA posted Nov 21, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄

배경 그리기

이제 배경을 그려보자. 먼저 while 1: 루프 전에 이미지를 불러와야 한다.

 

grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")

잔디와 성을 불러왔다. 다음은 잔디와 성을 그릴 차례다. 배경이 뒤에 와야 하므로 플레이어가 그려지는 6번 코드 전에 배경을 그리자.

 

# 잔디를 그린다.
    for x in range( int(width/grass.get_width()) + 1):
        for y in range( int(height/grass.get_height()) + 1):
            screen.blit(grass,(x*100,y*100))

    # 성을 배치
    screen.blit(castle,(0,30))
    screen.blit(castle,(0,135))
    screen.blit(castle,(0,240))
    screen.blit(castle,(0,345 ))

잔디 그리는 코드에서 width/grass.get_width() 부분을 보자. width는 코드의 맨 처음 부분에서 640으로 정했다. grass는 잔디 이미지이고 grass.get_width()는 잔디 이미지의 가로 크기를 알고 싶을 때 쓰는 것이다. 잔디 이미지 크기는 100x100이다. 그러므로 width/grass.get_width() = 640 / 100이다. 이 결과는 int ()함수를 통해 정수로 바뀌어 내림 후 6이 된다. 즉 맨 처음의 for문은 다음과 같이 된다.

 

for  in range(7):

range(7)는 0 ~ 6 범위를 나타낸다. 마지막 숫자는 제외됨에 유의하자. for문이 중첩되어 있으므로 7 x 7 개의 이미지를 그리게 된다.

 

draw image.png

 

Bunny 움직이게 하기

다음으로 Bunny를 움직여 보자. 먼저 Bunny의 위치를 실시간으로 업데이트하고 관리하기 위해 변수를 만들자. 그리고 키 입력을 체크하는 변수를 만들자. 게임 초기화 다음 부분에 변수를 선언하자.

 

# 키 입력 체크
keys = [False, False, False, False]

# 플레이어 위치
playerpos=[100,100]

keys, playerpos 변수 모두 리스트 형태로 선언하였다. 리스트는 배열처럼 여러 변수를 한 번에 저장할 수 있다. 그렇지만 리스트는 배열보다 더 뛰어나다. 자세한 설명은 다른 파이썬 강좌를 참고하고 여기에서는 이것이 리스트라는 것만 알아두자. keys 변수의 각각의 항목은 w, a, s, d 키가 눌렸는지 안눌렸는지를 체크한다. 처음에는 안눌러져 있는 것으로 설정하였다. 플레이어 위치는 (100, 100)으로 설정하였다.

위치를 나타내는 변수를 만들었으므로 플레이어를 그리는 부분을 아래와 같이 바꾸자.

 

screen.blit(player, playerpos)

이제 playerpos 변수 값을 바꾸면 플레이어 위치를 바꿀 수 있게 되었다. playerpos 변수는 당연히 키입력을 통해 바꾼다. 코드의 맨 아랫부분에 다음 코드를 추가하자. 이벤트를 체크하는 부분이므로 if 문은 if event.type==pygame.QUIT: 문과 같은 수준으로 들여쓰기를 해야한다.

 

        # 키를 누르면
        if event.type == pygame.KEYDOWN:
            if event.key==K_w:
                keys[0]=True
            elif event.key==K_a:
                keys[1]=True
            elif event.key==K_s:
                keys[2]=True
            elif event.key==K_d:
                keys[3]=True
        # 키를 떼면
        if event.type == pygame.KEYUP:
            if event.key==pygame.K_w:
                keys[0]=False
            elif event.key==pygame.K_a:
                keys[1]=False
            elif event.key==pygame.K_s:
                keys[2]=False
            elif event.key==pygame.K_d:
                keys[3]=False

키를 누르는 동안은 keys 변수의 각 항목을 True로 바꾸었고 키를 떼는 순간 이를 False로 바꾸었다. 이렇게 하면 키를 누르고 있는 동안 플레이어를 계속 움직이게 하고 키를 떼면 플레이어를 멈추게 하는 동작을 할 수 있다.

마지막으로 플레이어를 움직이게 하자. 이벤트를 처리하는 부분이 아니라 상태를 업데이트 하는 부분이므로 for event in pygame.event.get(): 구문과 같은 수준으로 들여쓰기를 해야한다. 그리고 키를 입력하고 나서 상태를 업데이트 하는 것이므로 맨 마지막에 아래 코드를 입력한다.

 

    # 9 - 플레이어를 움직인다.
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    if keys[1]:
        playerpos[0]-=5
    elif keys[3]:
        playerpos[0]+=5

움직임이 너무 빠른가? 프레임 레이트를 고정시켜서 움직임을 좀 더 느리게 하자. screen 변수 선언 다음 부분에 아래 코드를 입력하자.

 

FPS = 60 # frames per second setting
fpsClock = pygame.time.Clock()

그리고 화면을 업데이트하는 7번 코드 바로 아래에 fps 설정을 하는 코드를 추가하자.

 

fpsClock.tick(FPS)

이렇게 한 후 코드를 실행하면 플레이어가 좀 더 느려진 걸 확인할 수 있다.

 

지금가지 완성된 코드는 맨 위의 첨부 파일을 참고