for count in range(maxBugs): c = random.randint(0,6) s = random.randint(0,5) bugs.append(t.Turtle()) bugs[count].color(colors[c]) bugs[count].shape(shapes[s]) bugs[count].penup() bugs[count].speed(0) bugs[count].setposition(random.randint(-300, 300), random.randint(-300, 300)) bugs[count].right(random.randint(0,360))
#Turtle 객체 p 생성 p = t.Turtle() #p 객체의 모양을 거북이로 만들기 p.shape("turtle") #p 객체 크기 설정 p.turtlesize(2,2) #p 객체 색상 설정, #색상은 색상 이름 또는 색상 코드(#FFFFFF) 등을 이용하여 설정 할 수 있다. p.color("blue") #거북이를 따라다니는 선을 제거 #p.penup()
#울타리 체크 if p.xcor() > 300 or p.xcor() < -300: p.right(180)
if p.ycor() > 300 or p.ycor() < -300: p.right(180)
#다수의 벌레 움직이기 for count in range(maxBugs):
bugs[count].forward(5)
#울타리 체크 if bugs[count].xcor() > 300 or bugs[count].xcor() < -300: bugs[count].right(180) #soundBounce()
if bugs[count].ycor() > 300 or bugs[count].ycor() < -300: bugs[count].right(180)
#두 점의 거리 구하기 d = math.sqrt( math.pow(p.xcor() - bugs[count].xcor(), 2) + math.pow(p.ycor() - bugs[count].ycor(), 2))
#두 점과의 거리가 0일때 일치, 서로간의 거리가 20정도 되면 먹은 것으로 생각 if d < 20: print("벌레 먹음", count) else: #벌레 못 먹음 pass
2. 거북이가 벌레를 먹은 이후 동작 구현
위에서 거북이가 벌레를 먹은 것을 표현하기 위해 거북이와 벌레가 만났을 때, 즉 두 객체의 좌표간의 거리를 구하여 구현하였다.
보통 게임에서 두 객체의 거리를 구하는 것을 많이 사용하는데, 만난다는 표현보다는 "두 객체의 충돌"이라는 표현을 많이 사용한다.
이후에는 우리도 충돌이라는 용어를 사용하도록 한다.
이번에는 거북이와 벌레가 충돌이후, 다양한 동작들을 구현해보도록 한다.
1) 거북이와 충돌후 벌레의 위치 옮기기
거북이가 벌레를 먹고 난 뒤, 벌레가 계속 움직이면 좌표간의 거리때문에 여러번 먹은 것이 될 수 있다. 따라서 거북이와 벌레가 충돌하면 바로 벌레의 위치를 옮겨보도록 하자.
벌레의 위치를 옮길 때, 벌레의 모양과 색상도 변경한다.
벌레 위치 옮기기
#두 점의 거리 구하기 d = math.sqrt( math.pow(p.xcor() - bugs[count].xcor(), 2) + math.pow(p.ycor() - bugs[count].ycor(), 2))
#두 점과의 거리가 0일때 일치, 서로간의 거리가 20정도 되면 먹은 것으로 생각 if d < 20:
#벌레가 먹히면 색상, 모양 변경후 다른 곳으로 이동 bugs[count].setposition(random.randint(-300, 300), random.randint(-300, 300)) bugs[count].right(random.randint(0,360)) s = random.randint(0,5) c = random.randint(0,6) bugs[count].shape(shapes[s]) bugs[count].color(colors[c]) else: #벌레 못 먹음 pass
전체 코드
import turtle as t import random import math
#스크린 객체 생성 screen = t.Screen() #스크린 배경색 지정 screen.bgcolor("lightgreen") screen.tracer(2)
for count in range(maxBugs): c = random.randint(0,6) s = random.randint(0,5) bugs.append(t.Turtle()) bugs[count].color(colors[c]) bugs[count].shape(shapes[s]) bugs[count].penup() bugs[count].speed(0) bugs[count].setposition(random.randint(-300, 300), random.randint(-300, 300)) bugs[count].right(random.randint(0,360))
#Turtle 객체 p 생성 p = t.Turtle() #p 객체의 모양을 거북이로 만들기 p.shape("turtle") #p 객체 크기 설정 p.turtlesize(2,2) #p 객체 색상 설정, #색상은 색상 이름 또는 색상 코드(#FFFFFF) 등을 이용하여 설정 할 수 있다. p.color("blue") #거북이를 따라다니는 선을 제거 #p.penup()
#울타리 체크 if p.xcor() > 300 or p.xcor() < -300: p.right(180)
if p.ycor() > 300 or p.ycor() < -300: p.right(180)
#다수의 벌레 움직이기 for count in range(maxBugs):
bugs[count].forward(5)
#울타리 체크 if bugs[count].xcor() > 300 or bugs[count].xcor() < -300: bugs[count].right(180) #soundBounce()
if bugs[count].ycor() > 300 or bugs[count].ycor() < -300: bugs[count].right(180)
#두 점의 거리 구하기 d = math.sqrt( math.pow(p.xcor() - bugs[count].xcor(), 2) + math.pow(p.ycor() - bugs[count].ycor(), 2))
#두 점과의 거리가 0일때 일치, 서로간의 거리가 20정도 되면 먹은 것으로 생각 if d < 20: #벌레가 먹히면 색상, 모양 변경후 다른 곳으로 이동 bugs[count].setposition(random.randint(-300, 300), random.randint(-300, 300)) bugs[count].right(random.randint(0,360)) s = random.randint(0,5) c = random.randint(0,6) bugs[count].shape(shapes[s]) bugs[count].color(colors[c]) else: #벌레 못 먹음 pass
실행 결과 - 거북이가 벌레를 먹으면 벌레는 다른 모양과 색상으로 변경되어 다른 곳에서 나타난다.