2017-04-19 3 views
-1

I 클래스 프로젝트 거북이 그래픽 미로를 만들고 그리고 난 내가 완성 해요 전에 완료 한 번 더 중요한 것은이 ...하고 나는 "두 번째를 만들었습니다

거북 그래픽 엔드 포인트 거북이 "를 클릭하여 끝점에 상자를 만듭니다. 그래서 목표는 미로를 완성하고 상자에 거북이를 얻는 것입니다. 그러나 상자를 실제 끝점으로 만들고 메시지 팝업을 표시하는 방법을 모르겠습니다. 우리는 단지 몇 가지 기능을 추가 할 필요가

from turtle import Turtle, Screen 

screen = Screen() 

screen.setup(650, 850) 
screen.title("Turtle Keys") 
screen.bgpic('scooby_doo_maze.gif') 

move = Turtle(shape="triangle") 
move.penup() 
move.setx(-150) 
move.sety(200) 
move.pendown() 
move.pensize(5) 

box = Turtle(shape="square") 
box.hideturtle() 
box.speed(0) 
box.penup() 
box.setx(150) 
box.sety(-190) 
box.pendown() 
box.right(90) 
box.forward(100) 
box.right(90) 
box.forward(100) 
box.right(90) 
box.forward(100) 
box.right(90) 
box.forward(100) 

def keyUp(): 
    move.forward(12) 

def keyLeft(): 
    move.left(90) 

def keyRight(): 
    move.right(90) 

def keyDown(): 
    move.backward(12) 

def keyReset(): 
    move.reset() 
    move.penup() 
    move.setx(-150) 
    move.sety(200) 
    move.pendown() 
    move.pensize(5) 

screen.onkey(keyUp, "Up") 
screen.onkey(keyLeft, "Left") 
screen.onkey(keyRight, "Right") 
screen.onkey(keyDown, "Down") 
screen.onkey(keyReset, "r") 

screen.listen() 

screen.exitonclick() 
+1

StackOverflow에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. StackOverflow는 코딩 또는 튜토리얼 서비스가 아닙니다. 특히, 오버 헤드 코드 (특히 사용자 제어 루틴)를 제거하고 최선의 시도를 추가하고 수행하는 작업을 보여줍니다. – Prune

답변

0

:

여기 내 코드입니다. 먼저 거북이 box으로 끝점을 그려 넣지 않고 을 통해 거북이를 확장하여 거북이 box을 끝점으로 만듭니다. 이렇게하면 move.distance(box)을 사용하여 movebox의 가운데 근처에 있는지 확인할 수 있습니다.

둘째, 우리는 위의 거리가 충분히 가까운 경우 테스트 후 다음 호출하는 모든 이동 기능을 호출하는 기능이 필요합니다

셋째, 우리는 플레이 수 있도록 screen.textinput()을 소개를 그들은 성공하고 제공하는 것을 알고있다 다음 옵션을 다시 재생하거나 종료합니다.

from turtle import Turtle, Screen 

screen = Screen() 
screen.setup(650, 850) 
screen.title("Turtle Keys") 
screen.bgpic('scooby_doo_maze.gif') 

def insideBox(): 
    if move.distance(box) < 60: 
     play_again = screen.textinput("Success!", "Play again?") 

     if play_again and play_again.lower().startswith('y'): 
      keyReset() 
     else: 
      screen.bye() 

def keyUp(): 
    move.forward(12) 
    insideBox() 

def keyLeft(): 
    move.left(90) 

def keyRight(): 
    move.right(90) 

def keyDown(): 
    move.backward(12) 
    insideBox() 

def keyReset(): 
    move.reset() 
    move.penup() 
    move.goto(-150, 200) 
    move.pendown() 
    move.pensize(5) 
    screen.listen() # it's here because screen.textinput() unsets it 

screen.onkey(keyUp, "Up") 
screen.onkey(keyLeft, "Left") 
screen.onkey(keyRight, "Right") 
screen.onkey(keyDown, "Down") 
screen.onkey(keyReset, "r") 

move = Turtle(shape="triangle") 
keyReset() 

box = Turtle(shape="square") 
box.color("black", "white") 
box.shapesize(5, 5, 5) 
box.penup() 
box.goto(150, -190) 

screen.mainloop() 

이 당신이 그것을 듣고 쉽게 종료 얻을 수있는 창을 클릭해야로서 내가 screen.exitonclick()를 방지 할 상황이다 : 나는 이러한 추가 사항을 소개하고 그것을 스타일에 약간 조정할 아래 코드를 재 작업했습니다 그것을 닫아라! screen.mainloop()을 사용하면 충분하므로 사용자가 다시 재생하거나 창 컨트롤을 사용하지 않아도 창을 닫을 수 있습니다.

관련 문제