메뉴 건너뛰기

OBG

Programming

Python
2013.11.10 17:10

고양이 밖으로 못나가게 하기

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

바로 전 글에 이어서 고양이를 밖으로 못나가게 해보자.

 

앞서 고양이를 이동시키는 예제에서 고양이를 그려주는 코드는 blit 부분이다.

 

DISPLAYSURF.blit(catImg, (catx, caty))

우리는 방향키를 누를 때마다 catx, caty를 바꾸어 준 뒤 catImg를 바뀐 (catx, caty) 좌표에 뿌려주었다.
이를 생각하면 밖으로 못나가게 하는 건 쉽다. catx, caty가 화면 크기보다 커지면 catx, caty 값을 그대로 두면 된다.

즉 다음과 같은 코드가 있으면 된다.

 

elif event.type == KEYDOWN and event.key == K_RIGHT:
 if catx <= 400
 catx += 5

위 코드에서 400은 화면의 가로 크기이다.

 

그런데 문제가 있다.

catx가 397이면 catx += 5가 실행되면서 402가 된다.

이를 고려하면 위 코드는 아래와 같이 바뀐다.

 

elif event.type == KEYDOWN and event.key == K_RIGHT:
 if catx <= 400 - 5
 catx += 5

오른쪽 키 뿐만 아니라 위, 아래, 왼쪽 키에 대해서도 마찬가지로 적용하면 잘 동작할거라 생각이 든다.

하지만 실제로 해보면 왼쪽, 위쪽은 잘 동작하지만 오른쪽, 아래쪽은 화면 밖을 넘어가 버린다.

 

왜 그럴까?

 

처음에 언급한 blit 함수를 다시 살펴보자.

blit함수는 이미지를 화면에 그려주는 함수이다.

위에선 catx, caty 좌표에 고양이 이미지를 그렸다.

이 catx, caty 좌표의 기준은 어디일까?

제일 처음 고양이 이미지가 그려지는 위치를 생각해보면 알 수 있다.

바로 고양이 이미지의 왼쪽 위 꼭지점이다.

 

즉, 고양이를 밖으로 못나가게 하려면 catx, caty 값이 아래와 같은 영역 안에 있어야 한다.

 

cat trap.png

 

그러면 가로 방향의 좌표는 화면의 가로 크기 - 고양이 이미지의 가로 크기 안에 있어야 하고

세로 방향의 좌표는 화면의 세로 크기 - 고양이 이미지의 세로 크기 안에 있어야 한다는 것을 알 수 있다.

 

고양이 이미지의 크기는 다음과 같이 알 수 있다.

 

가로 사이즈 = catImg.get_width()
세로 사이즈 = catImg.get_height()

이를 이용하면 코드는 아래와 같이 바뀐다.

 

elif event.type == KEYDOWN and event.key == K_RIGHT:
 if catx <= 400 - catImg.get_width() - 5
 catx += 5

전체 소스는 아래와 같다.

(키 누르는 동안 움직이는 코드도 추가하였다)

 

import pygame, sys
from pygame.locals import *

pygame.init()

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

# set up the window
DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32)
pygame.display.set_caption('Cat')

WHITE = (255, 255, 255)
catImg = pygame.image.load('cat.png')
catx = 10
caty = 10
RightkeyIsDown = False
LeftkeyIsDown = False
DownkeyIsDown = False
UpkeyIsDown = False

while True: # the main game loop
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == KEYDOWN and event.key == K_RIGHT:
            RightkeyIsDown = True
        elif event.type == KEYDOWN and event.key == K_LEFT:
            LeftkeyIsDown = True
        elif event.type == KEYDOWN and event.key == K_DOWN:
            DownkeyIsDown = True
        elif event.type == KEYDOWN and event.key == K_UP:
            UpkeyIsDown = True
        elif event.type == KEYUP and event.key == K_RIGHT:
            RightkeyIsDown = False
        elif event.type == KEYUP and event.key == K_LEFT:
            LeftkeyIsDown = False
        elif event.type == KEYUP and event.key == K_DOWN:
            DownkeyIsDown = False
        elif event.type == KEYUP and event.key == K_UP:
            UpkeyIsDown = False

    if RightkeyIsDown == True:
        if catx <= 400 - catImg.get_width() - 5:
            catx += 5
    if LeftkeyIsDown == True:
        if catx >= 5:
            catx -= 5
    if DownkeyIsDown == True:
        if caty <= 300 - catImg.get_height() - 5:
            caty += 5
    if UpkeyIsDown == True:
        if caty >= 5:
            caty -= 5

    DISPLAYSURF.fill(WHITE)
    DISPLAYSURF.blit(catImg, (catx, caty))

    pygame.display.update()
    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
159 Python [첫게임 만들기] 2. 배경 그리기, Bunny 움직이게 하기 file MoA 2013.11.21 425
158 Python [첫게임 만들기] 1. 게임 소개 및 실습 준비 1 file MoA 2013.11.20 885
» 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
위로