KARIU의 IT 블로그

[Python turtle] 04. 파이썬 터틀로 거북이 모양 스탬프 찍기 본문

프로그래밍 언어/Python turtle

[Python turtle] 04. 파이썬 터틀로 거북이 모양 스탬프 찍기

카리우 2020. 12. 30. 23:06
반응형

완성 결과

 

 이번에는 길 위에 걸어 다니는 거북이들을 그려(찍어) 보겠습니다. 

 일단 길 위에 있는 거북이들을 파이썬 터틀로 표현하기 위해서 약간의 좌표 계산이 필요합니다.

 

 전 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에서 다운로드 받을 수 있습니다.

github.com/kariray/turtle_stamp

반응형
Comments