파이썬 turtle 로 앵그리버드 비슷한 표적 맞추기. 표적에 충돌 조건 구하기.
조회수 2604회
파이썬으로 앵그리버드 게임 비스무리한 걸 만들려고 합니다. 그래서 코드를 짜봤더니
import turtle as t
import math
import random
t.shape("turtle")
def square():
for i in range(4):
t.forward(10)
t.left(90)
d1 = random.randint(100,200) #d1은 램덤으로 설정
t.up()
t.forward(d1)
t.down()
square() #이 사각형이 표적입니다.
t.up()
t.goto(0,0)
t.down()
def fire(): #발사함수입니다.
x = 0
y = 0
speed = int(input("속도:"))
angle = int(input("각도:"))
vx = speed * math.cos(angle * 3.14/180.0)
vy = speed * math.sin(angle * 3.14/180.0)
while t.ycor() >= 0: #y좌표가 음수값이 될 때 까지 반복
vx = vx
vy = vy - 10
x = x + vx
y = y + vy
if x>= d1 and x<=d1+10 and y>=0 and y<=10: #만약 x값이 d1과 d1+10사이이고 y값이 0과 10 사이이면 프로그램 종료
break
exit()
else: #그렇치 않으면 계속 그리기
t.goto(x,y)
t.up()
t.goto(0,0)
t.down()
fire()
fire()
특히
while t.ycor() >= 0:
vx = vx
vy = vy - 10
x = x + vx
y = y + vy
if x>= d1 and x<=d1+10 and y>=0 and y<=10:
break
exit()
else:
t.goto(x,y)
t.up()
t.goto(0,0)
t.down()
fire()
이 부분이 문제입니다. 원래 거북이가 사각형 표적에 닿으면 게임을 끝내려고 했는데 조건을 만족해도 안되네요.
제가 while문을 써서 포물선을 그리고 이동할 때 x좌표와 y좌표가 if 조건문 사이에 만족하면 프로그램을 종료시키려고 했는데 정작 프로그램을 돌리면 if조건을 만족해도 프로그램이 안 끝납니다. 무엇이 잘못된 건가요?
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
포물선을 근사해서 그리는, 매 이터레이션의
(x(i), y(i))
가v
가 크다면, 표적사각형 내부를 건너뛸 수 있습니다.그래서,
- 각 이터레이션 점만 표적사각형 영역에 있는지 확인하는 것이 아니라,
- 연속된 이터레이션 두점
(x(i), y(i))
와(x(i+1), y(i+1))
을 지나는 선분이 표적사각형을 지나는지 확인해야 합니다.
댓글 입력