문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인
← 수업 목록
▶ 슬라이드 시작

터틀 그래픽 실습 2

수업 목표

  • 함수(def)를 터틀 드로잉과 연계하여, 특정 위치와 크기를 매개변수로 받아 독립된 그림 요소를 그리는 모듈형 드로잉 구조를 구축할 수 있다.
  • 펜 제어 명령(up, down, color, width)을 정확히 통제하여 선이 겹치거나 지저분하게 흔적이 남는 현상을 방어할 수 있다.
  • 반복되는 도형 모듈 호출과 회전 각도 연산을 엮어 눈결정, 꽃 등 기하학적인 응용 작품을 구현할 수 있다.

생각해보기: 조립식 완구와 그림 그리는 로봇

레고 블록으로 큰 성을 지을 때, 성벽 블록과 창문 블록, 지붕 블록을 각각 규격에 맞게 따로 제작해둔 뒤 이를 조립하여 최종 작품을 만듭니다. 만약 그림을 그릴 때도 "나무 그리는 로봇", "구름 그리는 로봇"을 별도로 프로그래밍해서 필요한 위치에 가져다 놓을 수 있다면, 거북이 화가를 일일이 수동 조종하는 것보다 훨씬 편리하고 완성도 높은 풍경화를 그릴 수 있을 것입니다.

드로잉 로직을 함수(def)의 묶음으로 설계하고, 여러 색상과 두께를 가미하여 화면 위에 아름다운 조립식 기하학 패턴이나 그래픽 요소를 그려내는 심화 기법을 마스터해 봅시다.


1. 펜 제어 명령어 — 그릴 때와 이동할 때 분리하기

거북이가 그림을 그릴 때, 특정 위치로 펜 자국을 남기지 않고 이동만 해야 하는 경우가 있습니다. 이때 사용하는 핵심 펜 제어 기능들입니다.

  • penup() / up(): 펜을 종이에서 떼어냅니다. 이후 거북이가 움직여도 선이 그려지지 않습니다.
  • pendown() / down(): 펜을 종이에 댑니다. 이후 움직이는 경로에 선이 그려집니다.
  • goto(x, y): 화면 상의 특정 X, Y 좌표 위치로 거북이를 한 번에 강제 이동시킵니다.
  • color("색상"): 선의 색상을 변경합니다. ("red", "blue", "green" 등 영어 단어 지정)
  • pensize(두께) / width(두께): 선의 두께를 조절합니다.
import turtle
t = turtle.Turtle()

# 펜 자국 없이 특정 좌표로 안전하게 이동하는 정석 코드
t.penup()
t.goto(-100, 50)  # X: -100, Y: 50 위치로 순간 이동
t.pendown()

t.color("blue")
t.pensize(5)
t.forward(100)  # 이동한 자리에서 두께 5의 파란색 선 드로잉

2. 드로잉 함수 모듈화 — 조립식 그림 그리기

특정 도형을 그리는 연산을 하나의 함수로 정의해두면, 크기(size)와 색상(color), 위치(x, y)를 매개변수로 전달받아 언제든 다르게 그려내는 만능 부품이 됩니다.

import turtle
t = turtle.Turtle()

# 특정 좌표에 원하는 크기와 색상으로 정사각형을 그리는 함수 정의
def draw_square(x, y, size, color_name):
    t.penup()
    t.goto(x, y)
    t.pendown()
    
    t.color(color_name)
    for _ in range(4):
        t.forward(size)
        t.right(90)

# 정의한 함수를 각각 다른 인자로 호출하여 화면 조립
draw_square(-150, 100, 50, "red")    # 왼쪽 상단에 빨간 사각형
draw_square(100, -50, 120, "green")  # 오른쪽 하단에 큰 초록 사각형
turtle.done()

3. 기하학 패턴 만들기 — 루프 속의 드로잉 함수

한 번 정의해 둔 도형 드로잉 함수를 for 반복문 내부에 탑재하고 회전 명령을 추가하면, 꽃이나 눈결정과 같은 신비로운 기하학 문양을 완성할 수 있습니다.

import turtle
t = turtle.Turtle()
t.speed(0)  # 드로잉 속도를 가장 빠르게(0) 설정

# 사각형 드로잉 함수
def draw_box(size):
    for _ in range(4):
        t.forward(size)
        t.right(90)

# 사각형을 10도씩 돌려가며 36번 반복 호출하여 원형 꽃 문양 완성
t.color("purple")
for _ in range(36):
    draw_box(100)
    t.right(10)  # 10도 회전

turtle.done()

자주 하는 실수 & 오류 예방

1. penup() 복원 누락으로 인한 투명 드로잉 버그

특정 위치로 이동하기 위해 t.penup() 처리를 한 후, 다시 t.pendown() 복원을 수행하지 않고 전진(forward) 명령을 내렸을 때 화면에 선이 나타나지 않아 작동 불능으로 착각하는 버그입니다.

오류 해결: 거북이 좌표 이동(goto)이 끝나면 본문의 드로잉 코드가 실행되기 전에 **세트로 pendown()을 반드시 호출했는지** 코드를 검토하십시오.

2. 무한 스크린 리셋에 따른 오버헤드

반복해서 많은 도형을 복합적으로 그릴 때 스크린 갱신 딜레이로 속도가 느려지거나 멈추는 상황입니다.

오류 해결: 거북이 동작 인스턴스의 t.speed(0) 명령을 통해 렌더링 성능을 최고조로 끌어올리십시오.


핵심 정리

터틀 펜 제어 도구 핵심 설계 규칙 자주 빚어지는 논리 오차 해결책
penup() / pendown() 좌표 이동 시 펜 오프, 드로잉 개시 시 펜 온 이동 후 pendown() 선언 누락 검수
goto(x, y) 화면 좌표계 기준 절대값 위치 이동 좌측 상단은 X음수/Y양수, 우측 하단은 X양수/Y음수 매핑 주의
color() / pensize() 선 색상 텍스트 지정 및 두께 조정 지정한 문자열 색상명이 올바른 스펠링인지 확인

이번 주 대회 바로가기

1반  |  2반  |  3반  |  4반  |  5반  |  6반  |  7반  |  8반  |  9반

※ 대회 링크는 선생님이 별도 공지합니다.

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘