1. 좌표계의 이해
- 코드 타이핑
import turtle as t # 그림그려주는 거북이 패키지 임포트
t.forward(200) # 200픽셀만큼 화살표 전진
t.exitonclick() # 출력된 그림 클릭시 창을 닫아주는 명령어
- 결과
Q. turtle 패키지 함수는 어떤 좌표계를 사용하는가?
1) AWT 좌표 시스템
2) 데카르트 좌표 시스템
- turtle 패키지는 데카르트 좌표 시스템 기반임을 알수 있다.
- 하지만 많은 컴퓨터 그래픽 함수들은 1) AWT 좌표 시스템 기반으로 동작함을 알고 가자.
- t.forward(200) 의 200은 픽셀값이다.
2. turtle 기본 함수 (1)
import turtle as t # 그림그려주는 거북이 패키지 임포트
t.speed(1) # 속도를 숫자로 표시. 0~10까지 숫자.t.forward(300) #전진 300픽셀(x축 양의 방향)
t.forward(200) #전진 200픽셀
t.left(90) #왼쪽으로 회전 90도
t.shape('turtle') #커서모양 '거북이'로 변경
t.forward(200) #전진 200픽셀
t.left(90) #왼쪽으로 회전 90도
t.color('red') # 색 빨간색으로 변경
t.fd(300) #forward 와 같은 명령어, 줄임말
t.left(90) #왼쪽으로 회전 90도
t.color('purple') # 색 보라색으로 변경
t.speed(5) # 속도를 숫자로 표시. 0~10까지 숫자.
t.fd(500)
t.exitonclick() # 출력된 그림 클릭시 창을 닫아주는 명령어
- 결과
그런데 여기서 잠깐,
t.shape('turtle') #커서모양 '거북이'로 변경
여기서 거북이 말고 어떤 모양들이 더 있을까?
구글에서 어떻게 검색하면 알수 있을까?
- 보통 구글링 맨 위에 검색 되는 것이 가장 정확하다.
- 파이썬 공식 라이브러리 설명서
docs.python.org/3/library/turtle.html
문서의 양이 어마어마하다.
ctr + f 기능을 사용하여 shape를 검색해 본다.
오호라 이러한 모양들이 있음을 알수 있다.
또한 검색의 고수라면
getshape()함수를 통해 현재 등록된 모양을 확인할수도 있고, register_shape() 함수를 통해 모양을 더 등록 할 수 도 있다.
print 함수를 통해 모양을 확인해 본다.
이렇게 모양을 바꿀수 있다.
이렇게 검색을 통해 패키지에 있는 함수와 속성들을 스스로 공부할 수 있다.
영어공부와 푹풍검색은 프로그래밍 고수가 되기 위한 필수적으로 동반되는 고난이 아닐까 생각해 본다.
3. turtle 기본함수 (2)
- 코드 타이핑
import turtle as t # 그림그려주는 거북이 패키지 임포트
t.shape('turtle') #커서모양 '거북이'로 변경
t.color('red') # 색 빨간색으로 변경
t.speed(2)
t.fd(200) # 200픽셀 전진
t.left(90) #왼쪽으로 회전 90도
t.pensize(5) # 선굵기 지정
t.fd(200)
t.left(90)
t.bgcolor('blue') # 선 배경 색 지정정
t.fd(300)
t.left(90)
t.penup() # 펜들기 -> 그림 안그리고 거북이만 이동
t.fd(200)
t.left(90)
t.pendown() # 펜다운 -> 다시 그림 그림
t.fd(100)
t.exitonclick() # 출력된 그림 클릭시 창을 닫아주는 명령어
- 결과
4. goto 함수
- 기본코드
import turtle as t # 그림그려주는 거북이 패키지 임포트
t.shape('turtle') #커서모양 '거북이'로 변경
t.color('red') # 색 빨간색으로 변경
t.speed(2)
t.goto(100,100) # 해당 좌표로 거북이 즉시 이동
t.goto(100,-100)
t.goto(-100,-100)
t.goto(-100,100)
t.goto(100,100)
t.exitonclick() # 출력된 그림 클릭시 창을 닫아주는 명령어
- 결과
5. 함수 만들어서 사용하기
import turtle as t
def box(x, y): # box라는 함수 생성
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.fd(x)
t.left(90)
t.fd(y)
box(100, 50) # (0,0)과 (100, 50)을 지나는 직사각형 그리기
t.exitonclick() # 출력된 그림 클릭시 창을 닫아주는 명령어
[도전 과제 1]
아래와 같이 color라는 입력 변수를 함수에 추가하여 box 함수를 사용하여 빨간 사각형을 그려 보시오.
def box(x, y, color): # box라는 함수 생성
결과값
6. 우리의 목표확인
우리는 이러한 사람을 그려 보려고 한다.
- 소스 코드
import turtle as t
def box(x,y,color):
t.speed('normal') # 속도증가; slowest,slow,normal,fast,fastest
t.color(color)
t.begin_fill() # 색깔채우기, 시작부분 코드
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.fd(x)
t.left(90)
t.fd(y)
t.end_fill() # 색깔채우기, 종료부분 코드
#foot
t.penup()
t.goto(-100,-150)
t.pendown()
box(80,50,'blue')
t.exitonclick()
[도전 과제 2] #foot 부분을 추가하여 아래와 같이 다리 2개를 완성해 보시오.
- 코드 확인
import turtle as t
def box(x,y,color):
t.speed('normal')
t.color(color)
t.begin_fill()
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.fd(x)
t.left(90)
t.fd(y)
t.end_fill()
t.left(90) # 90도 회전 명령 추가.
# foot
t.penup()
t.goto(-100, -150)
t.pendown()
box(80, 50, 'blue')
t.penup()
t.goto(0, -150)
t.pendown()
box(80, 50, 'blue')
t.exitonclick()
Q. 그림을 그리는 상황에서 box() 함수를 사용할때 반복되는 코드는 무엇인가?
Q. 반복되는 코드를 효율적으로 하는 방법은 무엇이 있을까?
[도전과제 3] 아래와 같이 start_x, start_y 입력 변수를 추가하여 t.penup(), t.goto( _ , _ ) , t.pendown() 에 대한 내용을 box()함수에 넣어 불필요한 코드의 반복을 줄여라.
def box(start_x,start_y,x,y,color): #goto()로 전달될 매개변수 pos_x,pos_y 추가.
기본 코드는 짜드림.
import turtle as t
def box(start_x,start_y,x,y,color): #goto()로 전달될 매개변수 pos_x,pos_y 추가.
# 코드추가
# 코드추가
# 코드추가
#기존 코드
t.speed('normal')
t.color(color)
t.begin_fill()
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.end_fill()
#foot 다시 그리기
box(-100,-150,80,50,'blue')
box( 0,-150,80,50,'blue')
t.exitonclick()
[최종 동작 확인]
- 좌표 찾는게 쉽지 않아 동작코드를 전부를 첨부한다.
import turtle as t
def box(start_x,start_y,x,y,color):
t.penup()
t.goto(start_x - x/2,start_y - y/2) #시작점을 약간의 계산을 통해서 변경.
t.pendown()
#기존 코드
t.speed('normal')
t.color(color)
t.begin_fill()
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.fd(x)
t.left(90)
t.fd(y)
t.left(90)
t.end_fill()
# foot
box(-50, -150, 80, 50, 'blue')
box(50, -150, 80, 50, 'blue')
# leg
box(-50, -80, 20, 100, 'red')
box(50, -80, 20, 100, 'red')
# body
box(0, 50, 150, 150, 'yellow')
# arm
box(120, 70, 80, 20, 'green')
box(-120, 70, 80, 20, 'green')
# head
box(0, 160, 80, 70, 'pink')
# eye
box(10, 170, 10, 10, 'black')
box(-10, 170, 10, 10, 'black')
# mouth
box(0, 150, 30, 10, 'black')
t.hideturtle() # 커서감추기
t.exitonclick()
@ Edit by wonking.
자료 출처 : 이고잉님의 오픈튜토리얼
'Python > 파이썬 프로젝트' 카테고리의 다른 글
[모듈 2-12] 파이썬 매크로 기본 함수와 다양한 활용 예제 코드 (0) | 2020.11.26 |
---|---|
[모듈 2-11] python 기반 스네이크 게임 만들기 (1) | 2020.11.13 |
[모듈 2-10] pygame 패키지의 기본 사용법 (0) | 2020.11.12 |
[모듈 2-9] 업다운 게임 만들기 (0) | 2020.11.09 |
[모듈 2-5] 외부 카메라에서 이미지 받아오기 파이썬 코드(feat. 스마트폰 웹캠 Droid cam) (4) | 2020.10.13 |