[파이썬] 크리스마스 카드 만들기 (with 터틀 그래픽)

다각형 그리기 및 색 채우기와 텍스트 출력하기를 활용한다면 다양한 작품을 만들 수 있다. 그래서 이번에 만들어 볼 것은 크리스마스 카드 만들기를 하려고 한다.

Table of Contents

크리스마스 카드 만들기

크리스마스 카드

구성 요소들

  1. 그래픽 창 설정
  2. 사각 테두리 그리기
  3. 나무의 오른쪽 윗 부분 그림 정의
  4. 나무의 왼쪽 윗 부분 그림 정의
  5. 나무의 아래 부분 그림 정의
  6. 장식용 원 그리기 정의
  7. 장식용 세모 그리기 정의
  8. 별 그리기
  9. 출력 및 텍스트 작성

구성별 코드 보기

  • 그래픽 창 설정
t.setup(500,500)           # 창 크기 설정 500 x 500
t.bgcolor("Light Blue")       # 카드의 배경색상 지정
t.title("메리 크리스마스 카드")     # 터틀 그래픽의 타이틀 제목 설정
t.speed(0)               # 터틀이 그려주는 속도를 조절, 0은 최대 속도
  • 사각 테두리 그리기
t.penup()
t.goto(-200,200)     # 터틀이 시작할 위치로 이동해주는 설정
t.pendown()
for i in range(4):
    t.forward(400)
    t.right(90)
for 문을 사용하여 사각형 그리기
  • 나무의 오른쪽 윗부분 그림 정의
# 나무의 오른쪽 윗부분 그리기
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로 새 함수를 만들어 그 안에 위치와 색상 등 그림을 정의한다.
  • 장식용 원 그리기 정의
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()

Loading

댓글 남기기