메뉴 건너뛰기

OBG

Programming

MoA
조회 수 428 추천 수 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 1597
43 Python 화면 캡쳐 소스 MoA 2014.01.14 950
42 Python 파이썬에서 C모듈 사용하기 MoA 2014.02.10 1900
41 Python 고양이 움직이기 1 file MoA 2013.11.08 815
40 Python 고양이 밖으로 못나가게 하기 file MoA 2013.11.10 601
39 Python SciPy and NumPy MoA 2013.12.23 595
38 Python OpenCV 이용한 템플릿 매칭 MoA 2014.01.16 1220
37 Python Numpy의 axis 변경 OBG 2023.06.09 48
36 Python FastAPI 톺아보기 - 부제: python 백엔드 봄은 온다 OBG 2023.01.25 88
35 Python Embedding Python in C/C++ MoA 2013.12.23 388
34 Python 2048 Game in Python OBG 2022.09.22 93
33 Python [첫게임 만들기] 9. 사운드 file MoA 2013.11.21 418
32 Python [첫게임 만들기] 8. Win or Lose file MoA 2013.11.21 392
31 Python [첫게임 만들기] 7. 게임 정보 표시 file MoA 2013.11.21 1012
30 Python [첫게임 만들기] 6. 적을 해치우자 1 file MoA 2013.11.21 456
29 Python [첫게임 만들기] 5. 적을 생성하자 file MoA 2013.11.21 384
28 Python [첫게임 만들기] 4. 화살을 발사해보자 file MoA 2013.11.21 647
27 Python [첫게임 만들기] 3. Bunny를 회전시키자 file MoA 2013.11.21 985
» Python [첫게임 만들기] 2. 배경 그리기, Bunny 움직이게 하기 file MoA 2013.11.21 428
25 Python [첫게임 만들기] 1. 게임 소개 및 실습 준비 1 file MoA 2013.11.20 886
24 Python [액션게임 만들기] 9. 캐릭터 액션 구현 2 MoA 2014.05.07 400
Board Pagination Prev 1 2 ... 3 Next
/ 3
위로