본문 바로가기

Minding's Programming/Pygame

[Pygame] 04. 도형 그리기

728x90
반응형

이 글은 아래 영상을 참고했다.

https://www.youtube.com/watch?v=g8I10TmueXI&list=PLz2iXe7EqJOMp5LozvYa0qca9E4OBkevW&index=4 

이번 시간에는 선, 원, 타원, 다각형 등 여러 도형을 그리는 방법을 배웠다.


선 그리기

pygame.draw.line(화면, 색, 시작 위치, 끝 위치, 선 굵기)
pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
            
    background.fill((255,255,255)) # 배경 흰색
    
    # 선 그리기
    # pygame.draw.line(화면, 색, 시작 위치, 끝 위치, 선 굵기)
    pygame.draw.line(background, (0,0,0), (240,0), (240,360))
    pygame.draw.line(background, (0,0,0), (0,180), (480,180), 5)
    pygame.draw.line(background, (0,0,0), (0,360), (480,0), 3)
    
    pygame.display.update()
    
pygame.quit()
  • 선 굵기 defalut = 1

코드 실행 결과


 

for 문으로 선 여러개 그리기

pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_3')

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
            
    background.fill((255,255,255)) # 배경 흰색
    
    # for문을 통해 선 여러개 그리기
    for i in range(0,480,30):
        pygame.draw.line(background, (0,0,0), (i,0), (i,360))
    for i in range(0,360,30):
        pygame.draw.line(background, (0,0,0), (0,i), (480,i))
    
    pygame.display.update()
    
pygame.quit()
  • for문을 활용해 바둑판 배열 등의 선을 그릴 수 있다.
  • 한 칸씩 이동하는 게임 / 바둑, 체스 등의 보드게임에 유용하게 활용가능하다.

코드 실행 결과

바둑판 완성


 

원 그리기

pygame.draw.circle(화면, 색, 중심 좌표, 반지름, 선 굵기)
pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

# 중심 좌표
x = background.get_size()[0]//2 # 240
y = background.get_size()[1]//2 # 180

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
            
    background.fill((255,255,255))
    
    # 원
    # pygame.draw.circle(화면, 색, 중심 좌표, 반지름, 선 굵기)
    # pygame.draw.circle(background, (255,0,0), (240,180), 50)
    pygame.draw.circle(background, (255,0,0), (240,180), 50, 5)
            
    # 중심점 기준으로 선 그려주기
    pygame.draw.line(background, (0,0,0), (x,0), (x,y*2))
    pygame.draw.line(background, (0,0,0), (0,y), (x*2,y))
    pygame.display.update()
    
pygame.quit()
  • 중심점을 미리 설정해두었다. (x, y)
  • 중심 좌표를 미리 설정하면 화면 크기가 바뀌어도 중심점 똑같이 유지할 수 있다.
  • 선 굵기 defalut : 원 전체 채울 정도

코드 실행 결과


 

사각형 그리기

pygame.draw.rect(화면, 색, 위치와 크기, 선 굵기)
pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

# 중심 좌표
x = background.get_size()[0]//2 # 240
y = background.get_size()[1]//2 # 180

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
            
    background.fill((255,255,255))
    
    # 다각형
    # pygame.draw.rect(화면, 색, 위치와 크기, 선 굵기)
    # pygame.draw.rect(background, (0,255,0), (240,180,100,50))
    pygame.draw.rect(background, (0,255,0), (240,180,100,50), 5)
            
    # 중심점 기준으로 선 그려주기
    pygame.draw.line(background, (0,0,0), (x,0), (x,y*2))
    pygame.draw.line(background, (0,0,0), (0,y), (x*2,y))
    pygame.display.update()
    
pygame.quit()
  • 위치와 크기를 한꺼번에 설정
    • ex) (240, 180, 100, 50)
    • (240, 180) : 시작 점의 좌표 (왼쪽 상단 가장자리 점)
    • 100 : 가로의 길이
    • 50 : 세로의 길이

코드 실행 결과


 

타원 그리기

pygame.draw.ellipse(화면, 색, 위치와 크기, 선 굵기)

 

pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

# 중심 좌표
x = background.get_size()[0]//2 # 240
y = background.get_size()[1]//2 # 180

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
            
    background.fill((255,255,255))
    
    # 타원
    # pygame.draw.ellipse(화면, 색, 위치와 크기, 선 굵기)
    # pygame.draw.ellipse(background, (0,0,255), (240,180,100,50))
    pygame.draw.rect(background, (0,255,0), (240,180,100,50), 5)
    pygame.draw.ellipse(background, (0,0,255), (240,180,100,50), 5) # 여러 도형을 같이 그릴 수도 있다.
            
    # 중심점 기준으로 선 그려주기
    pygame.draw.line(background, (0,0,0), (x,0), (x,y*2))
    pygame.draw.line(background, (0,0,0), (0,y), (x*2,y))
    pygame.display.update()
    
pygame.quit()
  • 파라미터 설정은 사각형과 똑같다.

코드 실행 결과

타원만 그렸을 때

 

 

타원과 사각형을 한꺼번에 그렸을 때

  • 여러 개의 도형을 한번에 그릴 수 있다.

 

다각형 그리기

pygame.draw.polygon(화면, 색, 점들의 위치, 선 굵기)
pygame.init()

background = pygame.display.set_mode((480, 360))
pygame.display.set_caption('PYGAME_2')

# 중심 좌표
x = background.get_size()[0]//2 # 240
y = background.get_size()[1]//2 # 180

play = True
while play:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            play = False
            
    background.fill((255,255,255))
    
    # 다각형
    # pygame.draw.polygon(화면, 색, 점들의 위치, 선 굵기)
    pygame.draw.polygon(background, (0,0,255), [[100,100], [0,200],[200,200]]) # 삼각형
    pygame.draw.polygon(background, (255,255,0), ((146,0),(291,106),(236,277),(56,277),(0,106)), 5) # 오각형
    
            
    # 중심점 기준으로 선 그려주기
    pygame.draw.line(background, (0,0,0), (x,0), (x,y*2))
    pygame.draw.line(background, (0,0,0), (0,y), (x*2,y))
    pygame.display.update()
    
pygame.quit()
  • 원하는 형태의 다각형을 만들 수 있음
  • 좌표는 tuple, list등 괄호의 형태로 넣어주면 됨

코드 실행 결과

728x90