공을 원점으로 이동시키고 반복문 횟수를 5번으로 제한걸고 싶습니다

조회수 737회
import turtle

screen=turtle.Screen()

image1="D:\\ball.gif"

screen.addshape(image1)

ball=turtle.Turtle()

ball.shape(image1)

ball.pensize(0)

ball.penup()

ball.goto(0, 0)

ball.left(90)



def go_left():
       b1 = 0
       ball.left(45)
       ball.forward(220)

def go_up():
       b1= 1
       ball.forward(190)

def go_right():
       b1 = 2
       ball.right(45)
       ball.forward(220)


screen.onkeypress(go_left,"Left")

screen.onkeypress(go_right,"Right")

screen.onkeypress(go_up,"Up")

screen.listen()

실행시키면 공이 이동한 다음 다시 원점으로 돌아오지 않고 이동한 그 위치에서 움직이는데 어떡하면 원점에서 다시 시작할 수 있을까요? 그리고 게임 횟수가 5번이 되면 멈추고 싶은데 반복문 조건을 어떻게 걸어야 할지 모르겠습니다 도와주세요!

1 답변

  • 현 시점에서 공은 당연히 원점으로 안 돌아옵니다. 소스에서 "원점으로 돌아간다"에 해당하는 정의가 없거든요.

    일단 원하시는 것을 하자면 아마 대충 이런 함수를 추가로 정의를 하신 다음에:

    def return_to_origin() :
        ball.goto(0, 0)
    

    이걸 go_left(), go_up() 등의 함수 정의에서 적당히 이용하시면 될겁니다. 예를 들어 사용자가 공을 움직이고 나서 5초 안에 다시 또 움직여야 한다고 생각해 보자면:

    # 테스트 안해봤습니다. 아이디어만 참고하세요.
    import time
    
    # "사용자가 마지막으로 공을 움직인 순간". 기본값으로 프로그램 실행 시점을 찍어둔다.
    last_time_user_moved = time.time()
    
    # 공을 왼쪽으로 움직이고 싶다면...
    def go_left():
        # '사용자가 마지막으로 공을 움직인 순간'으로부터 5초가 지나지 않아야 하고
        now = time.time()
        if now - last_time_user_moved < 5 :
            b1 = 0
            ball.left(45)
            ball.forward(220)
            last_time_user_moved = now # 공의 움직임을 끝낸 뒤에 '사용자가 공을 마지막으로 움직인 순간'을 고쳐주는 것 잊지말기
        # 5초가 지났다면 얄짤없이 원점으로 돌려보낸다.
        else :
            return_to_origin()
    

    실행 횟수가 뭔지는 모르겠지만 그것도 대충 이런 플래그 변수 아이디어로 처리하실 수 있을 겁니다. 행운을 빕니다.

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

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

(ಠ_ಠ)
(ಠ‿ಠ)