파이썬 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조건을 만족해도 프로그램이 안 끝납니다. 무엇이 잘못된 건가요?

  • 코드 하나하나는 잘 모르지만.. 강조하신 부분에 조건문에서 exit() 위에 break가 있기 때문에 exit를 실행하기 전에 while loop에서 빠져나오게 됩니다. 따라서 프로그램을 종료하는 코드를 실행하지 않아요. break를 지워보세요 HIAOAIH 2020.5.8 00:37

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)