파이게임 라이브러리로 도형을 그려보겠다.

 

도형에는 삼각형, 사각형, 원, 타원 등 종류가 다양한데 보통 GUI 프로그램을 만들때는 기본 도형은 다들 포함시키려고 한다. 아무래도 수학 교과서라는게 세계 공통같다. 다들 비슷한 생각을 하는 것 같다.

 

가장 만만한 것은 사각형이다. 너비와 높이가 같으면 정사각형이고 다르면 직사각형이 된다. 영어로 rectangle이라고 한다. 언제 한번 프로그래밍에 쓰이는 용어와 수학용어를 정리해야 할 것 같다. 매번 영어를 해석하지 않으면 진행이 안되니까... 글쓴이도 영어를 몰랐을 때 컴퓨터를 시작했다. 지금이야 미국에 살아본 경험도 있고 무엇보다 구글 영어검색으로 인터넷에서 손쉽게 정보를 얻을 수 있지만 번역된 책 하나로 프로그래밍을 배우는 것은 당시 엄청난 장벽과도 같았다. 스택오버플로우의 번성은 필연적이었다고 본다.

 

왜 실리콘밸리와 영어권에서 좋은 소프트웨어와 시스템이 만들어지는지 이제는 안다. 그들은 영어를 쓰기 때문이다. 영어는 프로그래밍에 대한 접근성을 높인다. 똑똑한 사람이건 그렇지 않은 사람이건 마찬가지다.

 

사실 컴퓨터 공학을 위한 영어는 그렇게 많은 것을 요구하지 않는다. 사고방식에 있어서 좀더 +@적인 이해도를 요구할 뿐이다. 최근에 서점에 가면 그런 책도 있다. IT공학도를 위한 영어책 같은 것들. 그냥 블로그와 웹사이트에 정보가 많으면 될텐데 아직도 IT기술은 용어 해석 같은 메타데이터가 부족하다.

 

파이게임으로 도형그리기

 

도형을 그리기 위해서 무엇이 필요한지 생각해보자. 일단 사각형이다. 첫번째 어디에 그릴 것인지 알아야한다. 윈도우 창에 그릴지, 타이틀바에 그릴지 설정한다. 두번째 색상이다. 무슨색으로 그릴지 정해줘야 한다. 세번째 기준이 되는 좌표다. 네번째 너비와 높이다. GUI 함수에 따라 매개변수에 차이가 있을지언정 거의 비슷하다.

 

draw.rect(screen,pyc.RED,(50,20,150,100))

draw는 도형을 그리기 위한 pygame의 모듈이다.  rect는 Surface 객체에(파이게임 윈도우창), RED 색상으로 주어진 좌표에 사이즈에 따라 사각형을 그린다.

 

pyc 모듈은 사용자정의 모듈로 만들었다. 매번 색상 코드를 작성하다 보면 별내용 아닌데 복잡해진다. 색상코드들을 모아서 저장한 다음 사용할 수 있다. 기본 색상만 지정했지만 프로그램에서 사용할 색상표를 얼마든지 더 추가할 수 있다. 구글에서 rgb picker 라고 검색후에 마음에 드는 색상을 추가하자.

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)

draw 로 그리기

이제 위의 그림처럼 도형을 그려보자.

 

from pygame import *
import pyc

C1_GREEN = (204, 255, 204)
C1_BLUE = (153, 204, 255)
bgColor = C1_GREEN

size = width, height = 800,600
screen = display.set_mode(size)
screen.fill(bgColor)

draw.rect(screen,pyc.RED,(50,20,150,100))
draw.rect(screen,pyc.GREEN,(100,70,150,100))
draw.rect(screen,pyc.BLUE,(150,120,150,100))

draw.rect(screen,pyc.RED,(450,20,150,100),1)
draw.rect(screen,pyc.GREEN,(500,70,150,100),5)
draw.rect(screen,pyc.BLUE,(550,120,150,100),15)

draw.ellipse(screen,pyc.RED,(50,320,150,100))
draw.ellipse(screen,pyc.GREEN,(100,370,150,100))
draw.ellipse(screen,pyc.BLUE,(150,420,150,100))

draw.ellipse(screen,pyc.RED,(450,320,150,100),1)
draw.ellipse(screen,pyc.GREEN,(500,370,150,100),5)
draw.ellipse(screen,pyc.BLUE,(550,420,150,100),15)

display.update()
init()

run =True
while (run):
    for pyEvent in event.get():
        if pyEvent.type == QUIT:
            run = False

print("END HERE")
quit()



from pygame import * 는 코드를 더 쉽게 쓸수 있다. 그동안 pygame.init() 했다면 init() 라고 하면 된다. 지금 Local namespace에 들어와 있기 때문에 가능하다.

 

한번 읽은 후에 실행해 보면 무슨 의미인지 알 수 있다. RGB 색상을 달리하고 위치를 달리해서 사각형 채우기 3개 , 사각형 테두리 3개, 타원형 채우기 3개, 타원형 테두리 3개를 출력한다. rect나 ellipse의 세번째 인자는 위치x, 위치y, 너비, 높이를 의미하고 네번째 인자(마지막)는 테두리의 두께를 의미한다. 두께를 표기하지 않으면 채우기를 한다. 메소드 오버로딩이다. (하나의 메소드의 매개변수 숫자를 다르게 하여 사용하는 방법)

 

rect 그리기

상기 그림의 구조를 기억할 필요가 있다. 도형이 아니라 캐릭터 이미지를 가져와도 저 방식은 그대로 적용된다. 좌표가 수학의 좌표같지 않고 좌상단에서 시작하는 것에 주의한다. (x,y) 가 있다면 (+x, +y) 방향은 우하향한다. 반대로 (-x, -y)는 좌상향한다. 좌상단의 꼭지점 좌표는 0,0 이다.

 

이 포스트는 도형만 그리고 마무리한다. pygame의 도형을 그려보면 컴퓨터가 그래픽을 다루는 본질에 대해서 하나씩 알아갈 수 있다.

공유하기

facebook twitter kakaoTalk kakaostory naver band