메뉴 건너뛰기

OBG

Programming

MoA
조회 수 425 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

배경 그리기

이제 배경을 그려보자. 먼저 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)

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

 

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

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Tool/etc Programming 게시판 관련 2 MoA 2014.11.01 1591
162 API/MFC Simple Add-On Wait Dialog in MFC MoA 2013.11.21 389
161 Python [첫게임 만들기] 4. 화살을 발사해보자 file MoA 2013.11.21 647
160 Python [첫게임 만들기] 3. Bunny를 회전시키자 file MoA 2013.11.21 981
» Python [첫게임 만들기] 2. 배경 그리기, Bunny 움직이게 하기 file MoA 2013.11.21 425
158 Python [첫게임 만들기] 1. 게임 소개 및 실습 준비 1 file MoA 2013.11.20 885
157 Python 고양이 밖으로 못나가게 하기 file MoA 2013.11.10 599
156 Python 고양이 움직이기 1 file MoA 2013.11.08 815
155 Site CSS, 자바스크립트 강좌 MoA 2013.11.05 359
154 API/MFC 슬라이더 컨트롤에 툴팁 삽입 (동적 툴팁) MoA 2013.10.28 599
153 API/MFC 태스크 대화상자 (Task Dialog) MoA 2013.10.22 406
152 API/MFC 프린터 출력하기 MoA 2013.10.16 3383
151 Tool/etc Flash CS5 and Version Control MoA 2013.10.11 329
150 Library AS3 Code Library MoA 2013.10.11 4995
149 Site 영상 처리 관련 블로그 MoA 2013.09.29 310
148 Tool/etc [S/W 공학] 월-인원(man-month), LOC MoA 2013.09.23 501
147 Site 졸업작품 및 각종 과제물 프로그램은 어떻게 만들어야 하나? (윈도우즈 응용프로그램) MoA 2013.09.10 1611
146 API/MFC UpdateDialogControls MoA 2013.09.05 773
145 API/MFC MFC에서 생성,사용되는 파일 확장자 MoA 2013.08.30 636
144 API/MFC 로그 클래스 및 업데이터 MoA 2013.08.30 923
143 Site 검색엔진 개발자 그룹 MoA 2013.08.30 259
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 11 ... 15 Next
/ 15
위로