Lecture 선 그리기

Lecture • Views 90 • Comments 0 • Last Updated at 1 week ago  
  • 도형그리기
  • 선그리기

line

pygame.draw.line(surface, color, start, end, width=1)
  • surface : 도형을 그릴 창
  • color : 색
  • start : 선 시작 점
  • end : 선 끝 점
  • width : 선의 굵기
import pygame
from pygame.locals import *

pygame.init()
screen = pygame.display.set_mode((500,400))
clock = pygame.time.Clock()

#p_img = pygame.image.load('tiger.bmp')
#p_img = pygame.transform.scale(p_img, (100,100))

white = (255,255,255)
black = (0,0,0)

running = True
left_key, right_key, up_key, down_key = False, False, False, False

while running:
    clock.tick(120)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(white)
    pygame.draw.line(screen,black,[50,100],[350,300],5)
    #screen.blit(p_img, (x,y))
    pygame.display.update()
pygame.quit()
import pygame
pygame.init( )

BLACK= ( 0, 0, 0)
WHITE= (255, 255, 255)
BLUE = ( 0, 0, 255)
GREEN = ( 0, 255, 0)

#화면설정
size = [600, 300]
screen = pygame.display.set_mode(size)
pygame .display.set_ caption('선 그러기')

#메인루프
running = True
clock = pygame.time.Clock()

while running:
    clock.tick(10)
    screen.fill(WHITE)
    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            running = False

    #width 값이 홀수인 경우
    pygame.draw.line(screen, GREEN, [0, 50], [200,150], 29)
    pygame.draw.line(screen, BLUE, [0, 50], [200, 150], 1)
    #width 값이 짝수인 경우
    pygame.draw.line(screen, GREEN, [200, 50], [400, 150], 30)
    pygame.draw.line(screen, BLUE, [200, 50], [400, 150], 29)
    pygame.draw.line(screen, GREEN, [400, 50], [500,250], 30)
    pygame.draw.line(screen, BLUE, [400, 50], [500, 250], 29)
    pygame.display.flip()
pygame.qu1t()

마우스 클릭하여 선그리기

import pygame
#from pygame.locals import*
from sys import e×it
from random import *

pygame.init()

BLACK= ( 0, 0, 0)
BLUE = ( 0, 0, 255)

screen = pygame.display.set_mode((640, 480), 0, 32)
pygame.display.set_caption('마우스로 클릭하여 선 그리기')
screen.fill((255, 255, 255))
clock= pygame.time.Clock()
line_points = []
running = True
while running:
    clock.tick(30)
    for event in pygame.event.get( ):
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            line_points.append(event.pos)
        for point in line_points:
            pygame.draw.circle(screen, BLACK, point, 5)
        if len(line_points)) > 0 and (len(line_points) % 2 == 0):
            pygame.draw.line(screen, BLUE, line_points[len(line_points)-2], line_points[len(line_points)-1], 2)
    pygame.display.update()
pygame.display.quit()        
import pygame

pygame.init( )
#색 설정
BLACK= (0, 0, 0)
WHITE= (255, 255, 255)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)

#화면설정
size = [600, 300]
screen = pygame.display.set_mode(size)
pygame.display.set_caption(”선 그러기∼∼∼”)

#메인루프
running = True
clock = pygame.time.Clock( )

while running:
    clock.tick(10)
    screen.fill(WHITE)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 〈닫기〉 버튼을 클릭하면
            running = False  # 루프 탈출을 위해 변수 값 설정
    #width 값이 홀수인 경우
    pygame.draw.line(screen, GREEN, [0, 50], [200,150], 29)
    pygame.draw.line(screen, BLUE, [0, 50], [200, 150], 1)
    #width 값이 짝수인 경우
    pygame.draw.line(screen, GREEN, [200, 50], [400, 150], 30)
    pygame.draw.line(screen , BLUE, [200, 50], [400, 150], 29)
    pygame.draw.line(screen, GREEN, [400, 50], [500,250], 30)
    pygame.draw.line(screen, BLUE, [400, 50], [500, 250], 29)
    pygame.display.flip( )
pygame.quit( )
import pygame
from pygame.locals import *
from random import *

pygame.init( )
BLACK= ( 0, 0, 0)
BLUE = ( 0, 0, 255)
screen = pygame.display.set_mode((640, 480), 0, 32)
pygame.display.set_caption(”마우스로 클릭하여 선 그리기”)
screen.fill((255, 255, 255))
clock= pygame.time.Clock( )
line_points = []
running = True

while running:
    for event in pygame.event.get( ):
        if event.type== QUIT:
            running = False
    if event.type == MOUSEBUTTONDOWN:
        line_points.append(event.pos)
    for point in line_points:
        pygame.draw.circle(screen, BLACK, point, 5)
    if len(line_points) > 0 and (len(line_points) % 2 == 0):
        pygame.draw.line(screen, BLUE, line_points[len(line_points)-2],    line_points[len(line_points)-1], 2)
    pygame.display.update()
    clock.tick(30)
pygame.quit()

lines

pygame.draw.lines(surface, color, closed, pointlist, width=1)
  • surface : 도형을 그릴 창
  • color : 색
  • closed : 선들이 닫힌 도형을 만들면 True, 아니면 False
  • pointlist : 점들의 리스트 [[ x1, y1] , [x2, y2], ... ]
  • width : 선의 굵기
\# pg_draw_lines.py

import pygame

pygame.init()
screen = pygame.display.set_mode((500,400))
clock = pygame.time.Clock()

white = (255,255,255)
black = (0,0,0)

running = True

while running:
    clock.tick(120)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(white)
    pygame.draw.lines(screen,black,False,[[50,100],[150,100],[200,250],[250,150]],5)
    #screen.blit(p_img, (x,y))
    pygame.display.flip()
    #pygame.display.update()
pygame.quit()

여러 개의 선을 그린다.

import pygame
from pygame.locals import *

pygame.init( )

#색설정
BLACK= ( 0, 0, 0)
WHITE= (255, 255, 255)
BLUE = ( 0, 0, 255)

lines_points = []

#화면설정
size = [500, 300]
screen = pygame.display.set_mode(size)
pygame.display.set_caption(”여러 개의 선을 이어그리기 ”)

#메인루프
running = True
clock = pygame.time.Clock( )

while running:
    clock.tick(10)
    for event in pygame.event.get( ):
        if event.type == pygame.QUIT:  
            running = False 
    if event.type == MOUSEBUTTONDOWN # 마우스를 클록/하먼
        lines_points.append(event.pos) # 점 목록 추가
    screen.fill(WHITE)

    for point in lines_points:
        pygame.draw.circle(screen, BLACK, point, 5)
        
    if len(lines_points) >= 2:  #선그리기
        pygame.draw.lines(screen, BLUE, False, lines_points, 4)
    pygame.display.flip( )
pygame.quit( )

마우스를 클릭하면 선을 그린다.

import pygame
pygame.init()

#색설정
BLACK= ( 0, 0, 0)
WHITE= (255, 255, 255)
BLUE = ( 0, 0, 255)
lines_points = []

#화면설정
size = (500, 300)
screen = pygame.display.set_mode(size)
pygame.display.set_caption('여러 개의 선을 이어그리기')

#메인루프
running = True
clock = pygame.time.Clock()
while running:
    clock.tick(10)
    for event in pygame.event.get( ):
        if event.type == pygame.QUIT:
            running = False 
    if event.type == pygame.MOUSEBUTTONDOWN:
        lines_points.append(event.pos)
    screen.fill(WHITE)
    for point in lines_points:
        pygame.draw.circle(screen, BLACK, point, 5)
    if len(lines_points) >= 2:
        pygame.draw.lines(screen, BLUE, False, lines_points, 4)
    pygame.display.flip()
pygame.quit()

aaline (anti-aliased)

부드러운 선

pygame.draw.aaline(surface, color, start, end, blend = True)
  • surface : 도형을 그릴 창
  • color : 색
  • start : 시작 점
  • end : 끝 점
  • blend : True, pygame 2.2부터는 True만 존재한다.

부드러운 선은 선두께가 1로 고정되어 있다.

import pygame
import numpy as np

pygame.init()
screen = pygame.display.set_mode((500,400))
clock = pygame.time.Clock()

white = (255,255,255)
black = (0,0,0)
pi = np.pi

running = True

while running:
    clock.tick(120)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(white)
    pygame.draw.line(screen,black,(50,50),(300,300))
    pygame.draw.aaline(screen,black,(60,40),(350,250))
    pygame.display.update()
pygame.quit()

aalines

pygame.draw.aalines(surface, color, closed, [start, end] )
  • surface : 도형을 그릴 창
  • color : 색
  • closed :
  • start : 시작 점
  • end : 끝 점
import pygame
import numpy as np

pygame.init()
screen = pygame.display.set_mode((500,400))
clock = pygame.time.Clock()

white = (255,255,255)
black = (0,0,0)
pi = np.pi

running = True

while running:
    clock.tick(120)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill(white)
    pygame.draw.line(screen,black,(50,50),(300,300))
    pygame.draw.aalines(screen,black,True, [(60,40),(350,250)])
    pygame.display.update()
pygame.quit()

previous article
next article
Comments
Feel free to ask a question, answer or comment, etc.