메뉴 건너뛰기

OBG

Programming

MoA
조회 수 456 추천 수 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 1725
47 API/MFC 슬라이더 컨트롤에 툴팁 삽입 (동적 툴팁) MoA 2013.10.28 630
46 Deeplearning 시계열 데이터 예측 모델 OBG 2022.11.08 89
45 JAVA/Android 시스템 분석을 위한 쉘 명령어 MoA 2013.05.28 436
44 JAVA/Android 안드로이드 개발 참고 사이트 MoA 2013.03.31 319
43 JAVA/Android 안드로이드 어플 개발 사이트 MoA 2013.03.11 386
42 JAVA/Android 안드로이드 초간단 리스트뷰 사용법 MoA 2013.04.10 295
41 JAVA/Android 안드로이드 프로세스 확인 MoA 2013.04.09 440
40 Site 알고리즘 정리된 블로그 MoA 2013.07.28 284
39 Tool/etc 앱 디자인의 발견 - 메모 서비스를 생각하다 MoA 2013.08.17 280
38 Tool/etc 어셈블리어 컴파일 - 기초 Naya 2012.08.02 290
37 Tool/etc 에디트 플러스, VS 2008 컴파일 환경 설정 너울 2012.04.02 247
36 Tool/etc 에디트 플러스, VS 2008 컴파일 환경 설정 MoA 2013.07.28 282
35 Site 영상 처리 관련 블로그 MoA 2013.09.29 346
34 Tool/etc 예외 처리 가이드 (Slide) MoA 2013.07.28 349
33 Reversing 워게임 사이트 정리 MoA 2014.01.27 1282
32 Site 윈도우 8 앱 개발 동영상 강의 Naya 2012.09.10 263
31 API/MFC 윈도우 프로그램의 종료 메시지 순서 Naya 2012.08.03 446
30 Tool/etc 유용한 라이브러리 소개 MoA 2013.12.27 877
29 Site 이미지공학(IE) 연구실 MoA 2013.07.28 273
28 JAVA/Android 이클립스에서 ADT 설치시 에러 해결 MoA 2013.03.09 350
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 ... 15 Next
/ 15
위로