-
Notifications
You must be signed in to change notification settings - Fork 0
/
day13_hw.py
175 lines (144 loc) · 10.2 KB
/
day13_hw.py
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
import turtle as t
import random as r
import math as m
colors = ["gray","pink","magenta","yellow","brown","white","red","blue","black","purple","green"] # 거북이에게 랜덤한 색을 주기위한 배열
t.up()
t.goto(-250,250) #500x500 경계를 그리기 위한 시작위치
t.down()
def accelx(a,b,d):#x좌표를 이용해서 가속도를 받을 좌표를 구하는 함수 설정
xacl = t.xcor() #현재 거북이 좌표를 xacl에 저장
xc = float(xacl) #xacl을 실수형으로 변환
if xc+2*d <= 250 or xc+2*d >= -250 :#거북이의 x좌표가 경계에 닿으면 2단계에 걸쳐 가속도가 붙는다
t.speed(a) # 가속도 붙을시 가속도로 인해 경계를 넘어 가는것을 if문으로 방지
t.fd(d) #현재의 x좌표에 가속도를 받았을 때의 좌표를 미리 구해 넘어가지 않을때만 해당 함수를 실행하도록 설정
t.speed(b) # xc+2*d로 2단계 가속도 받을때 넘어가는것 방지
t.fd(d)
elif xc+d <= 250 or xc+d >= -250 : #거리로 인해 2단계 가속도 실행이 불가할때 1단계 가속도를 실행하도록 설정
t.speed(a) #xc+d 로 1단계 가속도 받을떄 넘어가는것 방지
t.fd(d)
def accely(a,b,d): #y좌표를 이용해서 가속도를 받을 좌표를 구하는 함수 설정
yacl = t.ycor() #현재 거북이 좌표를 yacl에 저장
yc = float(yacl) #yacl을 실수형으로 변환
if (yc+2*d <= -250) or (yc+2*d >= -250): #거북이의 y좌표가 경계에 닿으면 2단계에 걸쳐 가속도가 붙는다
t.speed(a) # 가속도 붙을시 가속도로 인해 경계를 넘어 가는것을 if문으로 방지
t.fd(d) #현재의 y좌표에 가속도를 받았을 때의 좌표를 미리 구해 넘어가지 않을때만 해당 함수를 실행하도록 설정
t.speed(b) # yc+2*d로 2단계 가속도 받을때 넘어가는것 방지
t.fd(d)
elif (yc+d <= 250) and (yc+d >=-250) : #거리로 인해 2단계 가속도 실행이 불가할때 1단계 가속도를 실행하도록 설정
t.speed(a) #yc+d 로 1단계 가속도 받을떄 넘어가는것 방지
t.fd(d)
def fillcolor(a,b): #사각형 그리는 것을 코드를 줄이기 위해 함수로 지정 a= 변의길이 , b=각도
t.fd(a)
t.right(b)
def sealine(a,b): #육지와 바다 사이의 경계를 그리기 위한 함수 a=호의 반지름 , b= 원하는 호 생성 개수(한번에 2개 )
for i in range(b):
t.left(180)
t.circle(a,80) #circle 함수로 각도를 조절해 물결무늬를 그림
t.left(180)
t.circle(a,-80)
def waterwv(a,b): # 원하는 좌표상에 파도 결을 그리기 위한 함수 a= x좌표, b=y좌표
t.up()
t.goto(a,b) #원하는 좌표로 이동
t.down()
for i in range(3): #for 문을 이용해 파도결 무늬반복 생성
t.circle(20,90) #circle 함수로 각도를 조절해 파도 무늬를 그림
t.right(180)
t.circle(15,90)
t.setup(520,520) #처음 시작 창 크기를 520x520으로 지정 (거북이 움직임 제한한 크기는 500x500입니다.)
t.bgcolor("cyan") #바탕색 cyan으로 지정
for i in range(4): #경계면 굵기 4로 그림 빠르게 그리기 위해 거북이 최고속도
t.pensize(4)
t.speed(0)
fillcolor(500,90)
t.pensize(1) #육지를 그리기 위한 좌표,태두리색, 각도 설정
t.up() #원하는 좌표로 가기 전에 의도하지 않은 선이 그려지는것을 막기위해 t.up() 함수 실행
t.goto(250,70)
t.down()
t.right(40)
t.color("cyan")
t.begin_fill() #육지 색칠 시작
sealine(32.5,6) #사전에 정의한 sealine() 함수로 해안가 그린다.
t.right(50) #각도와 길이를 조절하여 fill 함수가 색칠할 영역을 인식하도록 해준다.
t.fd(130)
t.right(130)
sealine(32.5,6)
t.color("brown","orange") #육지의 색은은 태두리 갈색 속은 오랜지 색으로 채워준다
t.end_fill() #색칠끝
t.up() #다른 조형물을 그리지 전에 의도하지 않은 선이 그려지는 것을 t.up 함수로 막아준다.
t.goto(-180,180) #장애물중 하나인 소용돌이를 그릴 위치로 이동한다.
t.down()
t.color("blue") #소용돌이 색은 파란색으로 설정
t.pensize(2) #굵기 2로 그려준다.
for i in range (15): #for 문을 이용하여 소용돌이를 그려준다.
t.circle(5*i,90) #각각지름이 증가하는 호를 15번 이어붙여 소용돌이를 그린다.
t.pensize(1) #물결을 그리기위한 사전 준비 굵기와 각도를 조절한다.
t.right(40)
waterwv(-200,-200) #사전에 정의해준 waterwv()함수를 이용하여 원하는 좌표에 파도결을 표시해 준다.
waterwv(-150,-120)
waterwv(-50,-230)
waterwv(130,-140)
waterwv(0,-130)
waterwv(-20,120)
waterwv(-80,170)
t.up()
t.goto(250,250) #장애물중 하나인 ?표 박스를 그리기 위한 위치로 이동한다.
t.down
t.begin_fill() #?표 박스를 색칠해준다. ?표박스는 회색이며 120x120크기의 사각형으로 그려질 것이다.
t.color("gray")
t.right(100)
fillcolor(120,90)
fillcolor(120,90)
fillcolor(120,90)
t.end_fill() #?표 박스 색칠 끝
t.up()
t.goto(170,215) #?표 박스 안에 ? 를 그리기 위한 위치로 이동한다.
t.down()
t.right(100)
t.color("red") #? 의 색은 빨간색이다.
t.pensize(2) #굵기 2
t.circle(20,-250) # circle 함수와 fd 함수 dot 함수를 이용하여 ? 를 그린다.
t.right(100)
t.fd(20)
t.up()
t.fd(10)
t.dot(8)
t.shape("turtle") #프로그램상에 거북이가 거북이 모양을 하고 돌아다니도록 설정해준다.
t.up()
t.goto(0,0) #거북이의 시작 위치를 (0,0)으로 설정해 준다.
t.right(r.randint(0,360)) # 거북이가 처음 출발하는 각도를 randint 함수를 이용하여 0~360 각도상에 무작위 각도로 출발하도록 해준다.
for i in range(10000000): # 거북이가 계속 돌아 다니도록 큰 수를 for 문에 주어 반복시킨다.
t.fd(1.5) #거북이가 1.5씩 전진
a =float(t.xcor()) # a에 실수형으로 거북이 x좌표 실시간 저장
c = float(t.ycor()) # c에 실수형으로 거북이 y좌표 실시간 저장
b = float(t.heading()) # b에 실수형으로 거북이 각도 저장
col = r.choice(colors) # col 에 사전에 정의해준 colors 배열에 있는 색중 랜덤으로 바꿔주면서 저장
if a >=150 and c>=150: # ?표 박스 장애물의 실행이다
t.ht() #거북이가 해당 x좌표와 y좌표를 동시에 (and 함수로 지정) 넘어가면 사라지도록 지정해준다.
if (a >=-250 and a<= 250) and (c>=-60 and c<=70): #거북이가 육지를 밟았을때의 실행이다
t.st() #거북이가 지정된 해당 좌표안에 들어오면 (x좌표-250~250 y좌표 -60~70동시에 만족한다면)
t.speed(10) #가장 느린 속도로 가도록 지정 만약 ?표 박스를 만나서 투명화 되었다면 투명을 다시푼다.
if (a <= -150 and a >=-200) and (c >=150 and c <= 200): # 소용돌이 장애물의 실행이다.
t.speed(2) #설정한 좌표 범위(소용돌이) 를 만나면 2의 속도로 소용돌이에 휘말리도록 설정
for i in range(8): #for문으로 소용돌이를 그려준것과 유사한 방법으로 소용돌이에 휘말리는 효과를 표현하였다.
t.circle(5 * i, 80)
if a>=250 : # 거북이가 x축좌표 경계값250을 넘어가는것을 방지해준다.
t.speed(0) #거북이가 경계값 을 만나거나 넘어가면 가장 빠른 속도로 반응하도록 설정
t.color(col) #경계값을 만나는 순간 사전에 정의해준 col 함수로 colors배열에 있던 색중에 랜덤으로 골라 거북이 색을 바꿔준다.
t.setheading(180-b) #거북이가 경계값을 만나는 순간 입사각을 고려해서 반사각으로 나아가도록 설정해 준다.
accelx(3,2,20) #거북이가 경계값을 만나는 순간 사전에 정의해준 가속도 함수 accelx 를 이용하여 1단계 속도3 2단계 속도2 로 각각 20씩 이동하도록 해준다.
if c <=-250: # if문을 사용하여 거북이가 y축좌표 경계값-250을 넘어가는것을 방지해주며 경계값을 만나는 순간 가속도 함수를 실행하고
t.speed(0) # 입사각 을 고려하여 거북이의 각도를 반사각으로 돌리며 거북이 색을 랜덤하게 바꾼다.
t.color(col)
t.setheading(360-b) #거북이가 경계값을 만나는 순간 입사각을 고려해서 반사각으로 나아가도록 설정해 준다. 위치가 위,아래 혹은 양옆에 있냐에 따라 식이 달라진다.
accely(3,2,20) #거북이가 경계값을 만나는 순간 사전에 정의해준 가속도 함수 accely를 이용하여 1단계 속도3 2단계 속도2 로 각각 20씩 이동하도록 해준다.
if a<=-250 : # if문을 사용하여 거북이가 x축좌표 경계값-250을 넘어가는것을 방지해주며 경계값을 만나는 순간 가속도 함수를 실행하고
t.speed(0) # 입사각 을 고려하여 거북이의 각도를 반사각으로 돌리며 거북이 색을 랜덤하게 바꾼다.
t.color(col)
t.setheading(180-b)
accelx(3,2,20)
if c>=250: # if문을 사용하여 거북이가 ycnr좌표 경계값-250을 넘어가는것을 방지해주며 경계값을 만나는 순간 가속도 함수를 실행하고
t.speed(0) # 입사각 을 고려하여 거북이의 각도를 반사각으로 돌리며 거북이 색을 랜덤하게 바꾼다.
t.color(col)
t.setheading(360 - b)
accely(3,2,20)
t.mainloop() #파이참 환경에서 거북이 그래픽 창을 계속 띄워주는 함수