pygam의 기본

서희찬·2021년 4월 5일
0
post-thumbnail

CLI vs GUI

CLI : Command Line Interface 명령어 인터페이스
GUI : Graphic User Interface 그래픽 사용자 인터페이스

pygame 을 통해서는 GUI가 있는 프로그램을 만들 수 있다. 이는 CLI와 다르게 이미지/색깔이 있는 윈도우를 보여줄 수 있다.

Pygame으로 "Hello World"

pygame 에서는 print 나 input 함수를 사용해서 보여주거나 입력 받을 수 없다! 그러니 hello world도 지금까지 그저 프린터하던 것과는 다른 방식이다 !

import pygame, sys
from pygame.locals import *

pygame.init() #pygame 초기화
DISPLAYSURF = pygame.display.set_mode((400,300))
pygame.display.set_caption("Chans World")
while True: #main game Loop
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        pygame.display.update()

이를 실행하면

이런식의 gui가 나오게 된다.
코드를 하나씩 뜯어 봐 보자 !

improt pygame, sys 

pygame,sys 모듈을 가져온다.
pygame 모듈을 가져올 때 pygame 의 pygame.image, pygame.mixer.music 같은 모든 모듈을 자동으로 가져온다.

음... 생각보다 길어질것같다..
그냥 중요하다고 생각드는 것만 뜯어보쟈 ~ !

pygame.locals import *

pygame.locals 안에 미리정해놓은 상수들이 워낙~ 많아서 그냥 모두 가져오는게 좋다 ~

이후 내용은 주석으로 하겠다 ㅎㅅㅎ

import pygame, sys
from pygame.locals import *

pygame.init() #pygame 초기화 -> 이 함수를 수행하고 나서야만 pygame 함수를 수행 할 수 있다.
DISPLAYSURF = pygame.display.set_mode((400,300)) #pygame.display.set_mode() 함수는 윈도우에 대한 pygame.surface 객체 반환.(400,300) = (너비,높이)를 set_mode 함수에게 넘겨준다. 
#따라서 (400,300)인 윈도우를 만든다. 
#정수 2개가아니라 1개이다 ! 주의!!
pygame.display.set_caption("Chans World") #이름 설정 ㅇㅇ
while True: #main game Loop
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        pygame.display.update()

게임루프는 다음 3가지를 수행한다.

  • 이벤트 핸들링
  • 게임 상태 업데이트
  • 게임 스테이트를 화면상에 그린다.
    이벤트 처리 -> 게임 스테이트 업데이트 -> 스크린 그리기 반복 !

함수와 메소드는 거의 동일하지만, 메소드는 객체에 연관되어 있다는 점에서 차이가 있다.

보통 메소드는 특정 객체에 대한 것을 바꾸는 일을 한다.

함수 : foo()
메소드 : duckie.foo()

생성자 함수는 함수 호출과 똑같이 생겼지만 새로운 객체를 반환한다는 점에서 차이가 있다
생성자 함수는 대문자로 시작해 구별한다 !

투명한 색

anotherSurface = DISPLAYSURF.convert_alpha()

pygame.Color

Rect 객체

Rect(10,20,200,300) = 가장 왼쪽 상단의 모서리 좌표 (10,20) 이고 폭은 200픽셀, 높이는 300픽셀 사각형이다.
Rect 객체는 편리하게도 ! 다른 필요한 좌표들을 자동으로 계산한다.
예를들어서 right 값을 350으로 바꾸었다면 left는 자동으로 150이 된다 !

기본 형태 그리기 함수

(뭐야..캡션만 헬로월드로 바꾸고 이걸로 넘어간다고..?)
surface 객체 위에 여러 가지 형태를 그릴 수 있다.

import pygame,sys
from pygame.locals import *

pygame.init()

#setting Window
DISPLAYSURF = pygame.display.set_mode((400,300),0,32)
pygame.display.set_caption("Drawing")

#색깔 설정하기
BLACK = (0,0,0)
WHITE = (255,255,255)
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)

#surface 객체상에 그리기 
DISPLAYSURF.fill(WHITE) 
pygame.draw.polygon(DISPLAYSURF,GREEN,((146,0),(291,106),(236,277),(56,277),(0,106)))
pygame.draw.line(DISPLAYSURF,BLUE,(60,60),(120,60),4)
pygame.draw.line(DISPLAYSURF,BLUE,(120,60),(60,120))
pygame.draw.line(DISPLAYSURF,BLUE,(60,120),(120,120),4)
pygame.draw.circle(DISPLAYSURF,BLUE,(300,50),20,0)
pygame.draw.ellipse(DISPLAYSURF,RED,(300,200,40,80),1)
pygame.draw.rect(DISPLAYSURF,RED,(200,150,100,50))

pixObj = pygame.PixelArray(DISPLAYSURF)
pixObj[380][280] = BLACK
pixObj[382][282] = BLACK
pixObj[384][284] = BLACK
pixObj[386][286] = BLACK
pixObj[388][288] = BLACK # 각 픽셀을 그리는 작업
del pixObj

#Game loop
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit
            sys.exit()
    pygame.display.update()


음ㅋㅋ 그냥 도형 그리기 놀이 ~~ 룰루 ~~ !

일단은 여기까지..
완전 뒤죽박죽이다...
Rect 와 event가 가지고 있는 생성자 함수들이 매우많아서,,, 그냥 필요할 때마다 인터넷에서 찾아 쓰는게 훨 나을 것같다!

profile
부족한 실력을 엉덩이 힘으로 채워나가는 개발자 서희찬입니다 :)

0개의 댓글