6번 포스트부터 Rect 객체를 조작해볼 것이다. Rect는 파이게임에서 사각형을 표현하는 객체이다. 먼저 컴퓨터게임에서 사각형이 왜 중요한지를 생각해보자. 사각형은 좌표와 크기가 있다. 이 속성은 2D게임의 캐릭터에게 해당하는 성질이다.
즉 사각형을 완벽히 조작할 수 있다면 2D게임을 마스터 할 수 있다.
사각형 객체의 기본 속성을 알아본다. 다음의 예제를 확인하자. pyc 는 색상 상수를 정의한 모듈이다. 폰트파일은 경로지정이 없다면 같은 경로에 있어야 한다.
pyc.py
BLACK = (0, 0, 0)
GRAY = (127, 127, 127)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
CYAN = (0, 255, 255)
MAGENTA = (255, 0, 255)
from pygame import *
from pygame.locals import *
from pygame.rect import *
import pyc
init()
def draw_point(text, pos):
img = font.render(text, True, (255, 0, 100))
draw.circle(screen, pyc.RED, pos, 5)
screen.blit(img, pos)
SIZE = 800,600
C1_GREEN = (204, 255, 204)
C1_BLUE = (153, 204, 255)
screen = display.set_mode(SIZE)
rect = Rect(50,70,300,200)
print(f'x={rect.x}, y={rect.y}, w={rect.w}, h={rect.h}')
print(f'left={rect.left}, top={rect.top}, right={rect.right}, bottom={rect.bottom} , top left ={rect.topleft}')
print(f'center={rect.center}')
pts = ('topleft', 'topright', 'bottomleft', 'bottomright',
'midtop', 'midright', 'midbottom', 'midleft', 'center')
font = font.Font("Travel.ttf", 30)
running = True
while running:
for ev in event.get():
if ev.type == QUIT:
running = False
screen.fill(C1_GREEN)
draw.rect(screen, pyc.GREEN, rect)
for pt in pts:
pass
draw_point(pt, eval('rect.' + pt))
display.flip()
quit()
함수를 정의한 것은 사각형의 각 꼭지를 반복해서 출력하기 때문이다.
먼저 콘솔창을 본다. 사각형 객체를 정의할 때 어떻게 속성이 들어가는지 보인다. x,y 가 좌표, w,h 가 너비, 높이이다. Rect() 생성자에 들어가는 인자가 출력된다. 다음 left, top, right, bottom 속성과 center 와 topleft 등 속성도 가진다. 그러니까 Rect() 생성시킬때 이런 좌표들이 이미 다 계산이 되서 멤버 변수에 저장이 된다. 개발자가 일일히 작성하지 않아도 되는 단순작업이니까 유용하게 바로 쓸 수가 있다.
다음 줄로 내려와서 pts 튜플을 보면 꼭지점의 이름들이 많다. 이 텍스트들을 표시하는데 사용할 것이다.
font 설정은 종류와 크기를 기본 설정한다. font 파일이 실제로 디렉토리에 있어야 한다.
마지막으로 While 루프에서 사각형 객체를 그려준다. Surface 객체에 칼라 rect 인스턴스만 넘겨주면 되니 심플하다. 딱 필요한 인자만 전달하는 것이다. for 루프를 이터러블로 사용하는 것에 이제는 익숙해졌을 것이다. 파이썬은 이터러블이 어울린다. 앞에서 정의한 draw_point 함수를 텍스트 튜플만큼 실행시킨다. eval 함수는 문자열을 모아서 주면 표현식으로 변환한다. 즉 rect.topleft 변수부터 불러내서 함수에 전달한다. 텍스트와 좌표가 함수에 전달되면 함수는 설정된 폰트로 이미지로 처리한다.(Rendering) 원을 받은 좌표로 그려주고, 그 다음에 폰트를 그려준다.
따지고 보면 별 것 없는 내용이지만 사각형을 조작하기 위해서 미리 사각형의 속성에 대하여 알아봤다.