다각형 그리기 및 색 채우기와 텍스트 출력하기를 활용한다면 다양한 작품을 만들 수 있다. 그래서 이번에 만들어 볼 것은 크리스마스 카드 만들기를 하려고 한다.
Table of Contents
크리스마스 카드 만들기
![[파이썬] 크리스마스 카드 만들기 (with 터틀 그래픽) 2 크리스마스 카드](https://www.shindeacon.co.kr/wp-content/uploads/2023/10/크리스마스-편지-1-optimized.png)
구성 요소들
- 그래픽 창 설정
- 사각 테두리 그리기
- 나무의 오른쪽 윗 부분 그림 정의
- 나무의 왼쪽 윗 부분 그림 정의
- 나무의 아래 부분 그림 정의
- 장식용 원 그리기 정의
- 장식용 세모 그리기 정의
- 별 그리기
- 출력 및 텍스트 작성
구성별 코드 보기
- 그래픽 창 설정
t.setup(500,500) # 창 크기 설정 500 x 500 t.bgcolor("Light Blue") # 카드의 배경색상 지정 t.title("메리 크리스마스 카드") # 터틀 그래픽의 타이틀 제목 설정 t.speed(0) # 터틀이 그려주는 속도를 조절, 0은 최대 속도
- 사각 테두리 그리기
for 문을 사용하여 사각형 그리기t.penup() t.goto(-200,200) # 터틀이 시작할 위치로 이동해주는 설정 t.pendown() for i in range(4): t.forward(400) t.right(90)
- 나무의 오른쪽 윗부분 그림 정의
def로 새 함수를 만들어 그 안에 위치와 색상 등 그림을 정의한다.# 나무의 오른쪽 윗부분 그리기 def draw_right(): # draw_right()라는 함수를 생성 t.penup() t.goto(0, 0) t.pendown() t.color("green") t.pensize(5) t.begin_fill() t.forward(100) t.left(150) t.forward(90) t.right(150) t.forward(60) t.left(150) t.forward(60) t.right(150) t.forward(40) t.left(150) t.forward(100) t.end_fill()
- 나무의 왼쪽 윗부분 그림 정의
def로 새 함수를 만들어 그 안에 위치와 색상 등 그림을 정의한다.# 나무의 왼쪽 윗부분 그리기 def draw_left(): t.color("green") t.pensize(5) t.begin_fill() t.left(60) t.forward(100) t.left(150) t.forward(40) t.right(150) t.forward(60) t.left(150) t.forward(60) t.right(150) t.forward(90) t.left(150) t.forward(133) t.end_fill()
- 나무의 아래 부분 그림 정의
def로 새 함수를 만들어 그 안에 위치와 색상 등 그림을 정의한다.# 나무 기둥 그리기 def draw_down(): t.color("red") t.pensize(1) t.begin_fill() t.right(90) t.forward(80) t.right(90) t.forward(40) t.right(90) t.forward(80) t.end_fill()
- 장식용 원 그리기 정의
원의 설정 값들은 매개변수를 활용하여 실행할 때 설정할 수 있다.def draw_circle(x, y, color, r): #매개변수를 활용 t.penup() t.goto(x,y) # 좌표 x, y t.pendown() t.color(color) # 공의 색상 t.begin_fill() t.circle(r) # 반지름 r t.end_fill()
- 장식용 세모 그리기 정의
원과 동일하게 세모의 설정 값은 실행할 때 매개 변수를 활용하여 실행 할 수 있다.def draw_triangle(x, y, color): t.penup() t.goto(x, y) t.color(color) t.setheading(0) # 터틀의 방향을 정해주어 삼각형 그리기 t.pendown() t.begin_fill() for i in range(3): t.forward(10) t.left(120) t.end_fill()
- 별 그리기
터틀의 머리 방향에 따라 별 그림이 달라질 수 있다. 그리고 시작 좌표도 바뀔 수 있다.# 별 그리기 def draw_star(): t.penup() t.goto(-35,140) t.setheading(0) # 터틀의 머리방향에 따라 좌표가 달라짐 t.pendown() t.color("yellow") t.begin_fill() for i in range(5): t.forward(40) t.right(144) t.end_fill()
- 출력하기
실행 명령은 차례대로 입력하면 되며, 원과 삼각형을 실행할 때, 매개변수를 순서대로 입력을 해야 제대로 출력이 된다.# 나무 오른쪽 draw_right() # 나무 왼쪽 draw_left() # 나무 아래 draw_down() # 원 그리기 # draw_circle(x, y, color, r) # 매개변수의 값을 순서대로 입력해야 한다. draw_circle(110, -10, "red", 10) draw_circle(-120, -10, "red", 10) draw_circle(100, 40, "yellow", 10) draw_circle(-105, 40, "yellow", 10) draw_circle(85, 70, "red", 7) draw_circle(-95, 70, "red", 7) # 삼각형 그리기 # 매개변수의 값을 순서대로 입력해야 한다. # draw_triangle(x, y, color) draw_triangle(-20, 30, "yellow") draw_triangle(20, 60, "red") draw_triangle(-40, 75, "white") # 별 그리기 draw_star()
- 텍스트 출력하기
텍스트 출력하기에서 사용했던 함수와 동일하며, 원하는 위치와 크기는 설정이 가능하다.# 글자 쓰기 message="메리 크리스마스!!!" t.penup() t.goto(-10,-180) t.color("red") t.pendown() t.write(message,move=False,align="center",font=("Arial",15,"normal")) t.hideturtle() t.done()
다만, 폰트에 대해서는 본인의 컴퓨터에 쓰고자 하는 폰트가 설치되어야 다른 폰트를 설정할 수 있다.
최종 완성본
import turtle as t
#그래픽 창 설정하기
t.setup(500,500)
t.bgcolor("Light Blue")
t.title("메리 크리스마스 카드")
t.speed(0)
# 사각 테두리 그리기
t.penup()
t.goto(-200,200)
t.pendown()
for i in range(4):
t.forward(400)
t.right(90)
# 나무의 오른쪽 윗부분 그리기
def draw_right():
t.penup()
t.goto(0, 0)
t.pendown()
t.color("green")
t.pensize(5)
t.begin_fill()
t.forward(100)
t.left(150)
t.forward(90)
t.right(150)
t.forward(60)
t.left(150)
t.forward(60)
t.right(150)
t.forward(40)
t.left(150)
t.forward(100)
t.end_fill()
# 나무의 왼쪽 윗부분 그리기
def draw_left():
t.color("green")
t.pensize(5)
t.begin_fill()
t.left(60)
t.forward(100)
t.left(150)
t.forward(40)
t.right(150)
t.forward(60)
t.left(150)
t.forward(60)
t.right(150)
t.forward(90)
t.left(150)
t.forward(133)
t.end_fill()
# 나무 기둥 그리기
def draw_down():
t.color("red")
t.pensize(1)
t.begin_fill()
t.right(90)
t.forward(80)
t.right(90)
t.forward(40)
t.right(90)
t.forward(80)
t.end_fill()
# 장식용 원 그리기
def draw_circle(x, y, color, r): #매개변수를 활용
t.penup()
t.goto(x,y) # 좌표 x, y
t.pendown()
t.color(color) # 공의 색상
t.begin_fill()
t.circle(r) # 반지름 r
t.end_fill()
# 장식용 세모 그리기
def draw_triangle(x, y, color):
t.penup()
t.goto(x, y)
t.color(color)
t.setheading(0)
t.pendown()
t.begin_fill()
for i in range(3):
t.forward(10)
t.left(120)
t.end_fill()
# 별 그리기
def draw_star():
t.penup()
t.goto(-35,140)
t.setheading(0)
t.pendown()
t.color("yellow")
t.begin_fill()
for i in range(5):
t.forward(40)
t.right(144)
t.end_fill()
### 출력하기###
# 나무 오른쪽
draw_right()
# 나무 왼쪽
draw_left()
# 나무 아래
draw_down()
# 원 그리기
# draw_circle(x, y, color, r)
draw_circle(110, -10, "red", 10)
draw_circle(-120, -10, "red", 10)
draw_circle(100, 40, "yellow", 10)
draw_circle(-105, 40, "yellow", 10)
draw_circle(85, 70, "red", 7)
draw_circle(-95, 70, "red", 7)
# 삼각형 그리기
# draw_triangle(x, y, color)
draw_triangle(-20, 30, "yellow")
draw_triangle(20, 60, "red")
draw_triangle(-40, 75, "white")
# 별 그리기
draw_star()
# 글자 쓰기
message="메리 크리스마스!!!"
t.penup()
t.goto(-10,-180)
t.color("red")
t.pendown()
t.write(message,move=False,align="center",font=("Arial",15,"normal"))
t.hideturtle()
t.done()