[Python turtle] 04. 파이썬 터틀로 거북이 모양 스탬프 찍기
이번에는 길 위에 걸어 다니는 거북이들을 그려(찍어) 보겠습니다.
일단 길 위에 있는 거북이들을 파이썬 터틀로 표현하기 위해서 약간의 좌표 계산이 필요합니다.
전 600x600창을 만들어서 사용하였습니다.
만약 파이썬 터틀에서 600x600짜리 창을 만들었다면 좌표는
이러한 형식으로 지정됩니다.
양의 좌표의 최대는 300, 음의 좌표의 최대는 -300으로 총 합쳐서 600으로 구성이 됩니다.
이러한 특성을 생각하여 좌표 계산을 해보겠습니다.
일단 터틀 라이브러리를 불러오고 창 크기를 설정합니다. 그리고 갈색 길을 그려줄 커서와 거북이 모양을 찍어 줄 커서를 생성합니다.
1
2
3
4
5
6
|
import turtle
turtle.setup(width=600, height=600) #창 크기 600x600
gil=turtle.Turtle()
t=turtle.Turtle()
|
cs |
길을 그려봅시다. 저는 가로 300, 세로 600 짜리의 길을 그렸습니다. x좌표의 -150과 150을 걸치게 설정하였습니다. 색깔은 갈색으로 지정하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import turtle
turtle.setup(width=600, height=600) #창 크기 600x600
gil=turtle.Turtle()
t=turtle.Turtle()
gil.penup()
gil.goto(-150,-300)
gil.pendown()
gil.pensize(5)
gil.color("brown")
gil.begin_fill()
gil.goto(-150,300)
gil.goto(150,300)
gil.goto(150,-300)
gil.goto(-150,-300)
gil.end_fill()
|
cs |
성공적으로 길이 그려졌습니다.
이제 메인인 거북이들을 길 위에 찍어줍시다.
총 9마리의 거북이들을 찍겠습니다. 각각의 좌표를 정해서 리스트에 저장하였습니다.
1
2
|
xy=[[-75,-250],[50,-200],[-50,-150],[50,-100],
[-25,50],[50,75],[-75,100],[100,150],[-50,200]] #거북이들을 찍을 좌표들
|
cs |
리스트로 저장하는 이유는 반복문을 사용하여 간편하게 코드를 짜기 위함입니다.
1
2
3
|
t.shape("turtle")
t.color("green")
t.setheading(90) #거북이의 머리가 북쪽을 향하게
|
cs |
일단 커서의 모양을 turtle(거북이)로 설정해줍니다.
그리고 거북이하면 초록색이 떠오르니깐 초록색으로 지정해줍니다.
또한 거북이의 머리가 위로 향하게(북쪽) setheading() 함수를 사용합니다. 90을 넣어주면 북쪽을 향하게 됩니다.
1
2
3
4
5
6
|
t.penup()
t.goto(xy[0])
t.stamp()
for x,y in xy :
t.goto(x,y)
t.stamp()
|
cs |
거북이의 이동경로가 표시되지 않게 penup() 함수를 사용합니다.
이제 첫 번째 거북이를 찍어봅시다. goto()를 이용하여 거북이를 옮겨줍니다. xy[0]은 맨 처음 만들었던 좌표 리스트 기억 나시죠? 거기서 첫 번째 값을 가져온다는 의미입니다.
그리고 stamp() 함수를 이용하면 그 자리에 거북이 모양이 그대로 찍힙니다!
이제 여러 마리의 거북이들을 찍어야 됩니다. 하지만 앞에서 한 것처럼 일일히 코드를 작성하면 비효율적입니다. 그래서 반복문 for문을 이용하여 단 3줄 만에 모든 거북이들을 찍어보겠습니다.
for x,y in xy:
위의 코드의 해석은 xy리스트에서 하나씩 계속 값을 가져온다는 의미입니다. 저희는 리스트를 생성할 때부터 2개의 숫자를 지정하였고 좌표도 x와 y가 둘 다 있어야 되므로 x, y라고 적어줍니다.
그러면 xy리스트에서 좌표를 하나씩 가져와 반복문 안에 있는 코드들을 실행합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import turtle
turtle.setup(width=600, height=600) #창 크기 600x600
gil=turtle.Turtle()
t=turtle.Turtle()
#길 만들기
def draw_gil() :
gil.penup()
gil.goto(-150,-300)
gil.pendown()
gil.pensize(5)
gil.color("brown")
gil.begin_fill()
gil.goto(-150,300)
gil.goto(150,300)
gil.goto(150,-300)
gil.goto(-150,-300)
gil.end_fill()
#거북이 찍기
def stamp():
xy=[[-75,-250],[50,-200],[-50,-150],[50,-100],
[-25,50],[50,75],[-75,100],[100,150],[-50,200]] #거북이들을 찍을 좌표들
t.shape("turtle")
t.color("green")
t.setheading(90) #거북이의 머리가 북쪽을 향하게
t.penup()
t.goto(xy[0])
t.stamp()
for x,y in xy :
t.goto(x,y)
t.stamp()
#함수 실행
draw_gil()
stamp()
|
cs |
최종 코드입니다. 최종 코드에는 길을 그리는 함수와 거북이를 찍는 함수를 따로 만들어 정리하였습니다.
코드는 github에서 다운로드 받을 수 있습니다.