在乌龟图形中创建一个端点

时间:2017-04-19 19:18:11

标签: python turtle-graphics

我正在为一个班级项目制作一个带有乌龟图形的迷宫,在我完成之前我还有一件事需要完成......

我已经创建了第二个“乌龟”来在终点处制作一个盒子。因此,目标是完成迷宫并将乌龟放入盒子中。但我不确定如何使盒子成为一个实际的端点并弹出一条消息。

这是我的代码:

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 个答案:

答案 0 :(得分:0)

我们只需要添加一些功能。首先,我们不是用乌龟box绘制终点,而是通过box扩展乌龟本身来制作海龟box.shapesize()。这样,我们就可以使用move.distance(box)来确定move是否位于box的中心附近。

其次,我们需要一个由所有运动函数调用的函数来测试距离是否足够接近,然后调用以下内容:

第三,我们引入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()就足够了,让用户通过不再选择再次播放或使用窗口控件来关闭窗口。

相关问题