구현 사항
동작 화면
https://github.com/dkswnkk/DongA-Univ/tree/main/python
GitHub - dkswnkk/DongA-Univ: 🍊 DongA-Univ. - 학교 학습 내용
🍊 DongA-Univ. - 학교 학습 내용. Contribute to dkswnkk/DongA-Univ development by creating an account on GitHub.
github.com
코드
import turtle
import math
from random import randint, random
# 랜덤으로 거북이 이동 하기
def move_random(my_cute_turtle):
flag = True
my_cute_turtle.left(randint(-45, 45)) # 거북이의 각도를 -45~45 사이의 랜덤 값으로 바꿔준다.
forward_rand = randint(0, 10) # 거북이가 얼마나 이동할지 0~10 사이의 랜덤 값을 정한다.
for z in range(0, 3, 1): # 거북이가 총 세마리 이므로 모든 거북이를 비교한다.
for i in range(z + 1, 3, 1):
# 두 점의 좌표를 구하는 공식을 이용하여 두 거북이의 거리를 구한다.
d = math.sqrt(math.pow(turtles[z].xcor() - turtles[i].xcor(), 2) + math.pow(
turtles[z].ycor() - turtles[i].ycor(), 2))
if d > 45: # 만약 두 거북이의 거리가 45이상 차이가 난다면 무시한다.
continue
else: # 만약 두 거북이의 거리가 45 이하일 경우
flag = False
turtles[z].setheading(turtles[i].heading()) # 그 거북이의 각도(머리방향)을 거리가 45이하인 다른 거북이랑 똑같은 방향으로 지정한다.
turtles[z].forward(forward_rand) # 랜덤으로 이동한다.
break
if flag: # 거북이가 화면의 스크린을 벗어나는지 판단하는 부분이다.
if abs(my_cute_turtle.xcor() + forward_rand) < 220 and abs(my_cute_turtle.ycor() + forward_rand) < 220:
my_cute_turtle.forward(forward_rand) # 거북이가 화면 스크린을 벗어나지 않는다면 랜덤으로 현재 머리방향으로 거리를 이동한다.
else: # 만약 스크린을 벗어날 위험이 있을경우
my_cute_turtle.setheading(my_cute_turtle.towards(0, 0)) # 거북이의 머리방향을 중앙을 향하도록하고
my_cute_turtle.forward(11) # 이동한다.
else:
return
# 거북이 초기 이동하기
def init_goto(my_cute_turtle, x, y):
my_cute_turtle.penup()
my_cute_turtle.goto(x, y)
# 초기 거북이 값 설정.
def init_random_turtle(x, y):
my_cute_turtle = turtle.Turtle()
my_cute_turtle.shape('turtle') # 모양을 거북이로 설정
init_goto(my_cute_turtle, x, y) # 랜덤 좌표로 초기 거북이의 위치를 설정해준다.
my_cute_turtle.setheading(randint(0, 359)) # 랜덤으로 거북이의 각도를 설정해준다.
my_cute_turtle.speed(0)
my_cute_turtle.color(random(), random(), random()) # 랜덤으로 거북이의 색상을 지정해준다.
return my_cute_turtle
if __name__ == "__main__":
turtle.title("거북이 충돌없이 이동하기")
my_cute_turtle = turtle.Turtle()
my_cute_turtle.hideturtle() # 화살표 숨기기
turtles = []
# 거북이 초기 생성
for cnt in range(3):
turtles.append(init_random_turtle(randint(-250,250), randint(-250,250)))
while True:
for my_cute_turtle in turtles:
move_random(my_cute_turtle)
'ETC' 카테고리의 다른 글
[ios]애뮬레이터 키보드 자판 보이기 (0) | 2021.11.06 |
---|---|
[python] 파이썬에서 언더스코어('_') 가 가지는 다양한 의미 (0) | 2021.11.03 |
[python] iterable 과 iterator 의 의미와 차이 (0) | 2021.11.03 |
영화추천 알고리즘(Movie-Recommender) 파이썬으로 구현해보기 (0) | 2021.10.24 |
추천 알고리즘(Recommendation Algorithm)이란? (0) | 2021.10.24 |
[c++] class 에서 멤버 변수를 초기화 하는 세가지 방법 (0) | 2021.10.20 |
댓글