거북이가 세마리는 서로 만날 때가지 화면을 임의로 돌아다닌다. 세 마리 중 서로 만나는 거북이가 있다면 움직임을 멈추고 모든 거북이를 세배로 키운다.
소스코드
import turtle
import math
import random
## 전역 변수 선언 부분 ##
t1, t2, t3 = [None] * 3
t1X, t1Y, t2X, t2Y, t3X, t3Y = [0] * 6
swidth, sheight = 300, 300
## 메인 코드 부분 ##
if __name__ == "__main__" :
turtle.title('거북이 만나기')
turtle.setup(width = swidth + 50, height = sheight + 50)
turtle.screensize(swidth, sheight)
t1 = turtle.Turtle('turtle'); t1.color('red'); t1.speed(10); t1.penup()
t2 = turtle.Turtle('turtle'); t2.color('green'); t2.speed(10); t2.penup()
t3 = turtle.Turtle('turtle'); t3.color('blue'); t3.speed(10); t3.penup()
t1.goto(-100, -100); t2.goto(0, 0); t3.goto(100, 100)
while True:
angle = random.randrange(0, 360)
dist = random.randrange(1, 50)
t1.left(angle); t1.forward(dist)
angle = random.randrange(0, 360)
dist = random.randrange(1, 50)
t2.left(angle); t2.forward(dist)
angle = random.randrange(0, 360)
dist = random.randrange(1, 50)
t3.left(angle); t3.forward(dist)
## xcor() : 거북이의 현재 x좌표 반환, ycor() : 거북이의 현재 y좌표 반환 ##
t1X = t1.xcor(); t1Y = t1.ycor()
t2X = t2.xcor(); t2Y = t2.ycor()
t3X = t3.xcor(); t3Y = t3.ycor()
## 거북이끼기 거리가 20미만이면 만난 것으로 처리 ##
## 두 거북이의 거리는 (x2 -x1)의 제곱 + (y2-y1)의 제곱으로 계산 ##
if math.sqrt(((t1X - t2X) * (t1X - t2X)) + ((t1Y - t2Y) * (t1Y - t2Y))) <= 20 or \
math.sqrt(((t1X - t3X) * (t1X - t3X)) + ((t1Y - t3Y) * (t1Y - t3Y))) <= 20 or \
math.sqrt(((t2X - t3X) * (t2X - t3X)) + ((t2Y - t3Y) * (t2Y - t3Y))) <= 20 :
t1.turtlesize(3); t2.turtlesize(3); t3.turtlesize(3)
turtle.done()
거북이 세 마리가 화면을 돌아다니다가 서로 만나면 만난 위치에 도장을 찍고 계속 움직이는 프로그램을 작성하시오. 프로그램은 무한 반복된다. 거북이가 화면 밖으로 나가면 다시 각자의 처음 위치로 이동 [ 거북이1은 -100, -100에 거북이2는 0, 0에 거북이3은 100, 100으로 이동]
소스코드
import turtle
import math
import random
## 전역 변수 선언 부분 ##
t1, t2, t3 = [None] * 3
t1X, t1Y, t2X, t2Y, t3X, t3Y = [0] * 6
swidth, sheight = 300, 300
## 메인 코드 부분 ##
if __name__ == "__main__" :
turtle.title('거북이 만나기')
turtle.setup(width = swidth + 50, height = sheight + 50)
turtle.screensize(swidth, sheight)
t1 = turtle.Turtle('turtle'); t1.color('red'); t1.speed(10); t1.penup()
t2 = turtle.Turtle('turtle'); t2.color('green'); t2.speed(10); t2.penup()
t3 = turtle.Turtle('turtle'); t3.color('blue'); t3.speed(10); t3.penup()
t1.goto(-100, -100); t2.goto(0, 0); t3.goto(100, 100)
while True:
angle = random.randrange(0, 360)
dist = random.randrange(1, 50)
t1.left(angle); t1.forward(dist)
angle = random.randrange(0, 360)
dist = random.randrange(1, 50)
t2.left(angle); t2.forward(dist)
angle = random.randrange(0, 360)
dist = random.randrange(1, 50)
t3.left(angle); t3.forward(dist)
## xcor() : 거북이의 현재 x좌표 반환, ycor() : 거북이의 현재 y좌표 반환 ##
t1X = t1.xcor(); t1Y = t1.ycor()
t2X = t2.xcor(); t2Y = t2.ycor()
t3X = t3.xcor(); t3Y = t3.ycor()
## 거북이가 화면 밖으로 나가면 처음 위치로 설정 ##
if not((-swidth / 2 <= t1X and t1X <= swidth / 2) and (-sheight / 2 <= t1Y and t1Y <= sheight / 2)):
t1.goto(-100, -100)
if not((-swidth / 2 <= t2X and t2X <= swidth / 2) and (-sheight / 2 <= t2Y and t2Y <= sheight / 2)):
t2.goto(0, 0)
if not((-swidth / 2 <= t3X and t3X <= swidth / 2) and (-sheight / 2 <= t3Y and t3Y <= sheight / 2)):
t3.goto(100, 100)
## 거북이끼기 거리가 20미만이면 만난 것으로 처리 ##
## 두 거북이의 거리는 (x2 -x1)의 제곱 + (y2-y1)의 제곱으로 계산 ##
if math.sqrt(((t1X - t2X) * (t1X - t2X)) + ((t1Y - t2Y) * (t1Y - t2Y))) <= 20 :
t1.stamp(); t2.stamp()
elif math.sqrt(((t1X - t3X) * (t1X - t3X)) + ((t1Y - t3Y) * (t1Y - t3Y))) <= 20 :
t1.stamp(); t3.stamp()
elif math.sqrt(((t2X - t3X) * (t2X - t3X)) + ((t2Y - t3Y) * (t2Y - t3Y))) <= 20 :
t2.stamp(); t3.stamp()
turtle.done()
'프로그램언어 > 파이썬' 카테고리의 다른 글
거북이로 구구단 출력하기 (0) | 2020.06.03 |
---|---|
거북이 소라 모양 그리기 (0) | 2020.06.02 |
무지개색 원그리기 (0) | 2020.06.02 |
거북이로 두개의 숫자를 입력받아 논리곱하기 (1) | 2020.06.01 |
거북이 도장찍는 소스코드 (0) | 2020.05.29 |