我如何用Python传送乌龟?

时间:2018-01-05 02:33:42

标签: python python-3.x turtle-graphics

我在Python 3.6.4中制作游戏。

当玩家触摸红色圆圈时,玩家应该传送回头部。

问题1:如果乌龟撞到红色圆圈,如何将乌龟移动到开头?

我的代码:

import turtle

wn = turtle.Screen()
wn.bgcolor("black")

player = turtle.Turtle()
player.color("white")
player.speed(0)
player.penup()
player.setposition(100, -110)

enemy = turtle.Turtle()
enemy.color("red")
enemy.shape("circle")
enemy.penup()
enemy.setposition(100, -100)

if player.pos(100, -100):
    player.pos(100, -110)

我得到的错误是:

Traceback (most recent call last): File "C:\Users\ruffi\AppData\Local\Programs\Python\Python36-32\behg.p", line 18, in <module> if player.pos(100, -100): TypeError: pos() takes 1 positional argument but 3 were given

问题2:如何修复此错误?

4 个答案:

答案 0 :(得分:2)

Turtle.pos() 返回乌龟的位置;它不会测试出现在给定位置(由您的if行尝试)或设置它(由您的上一行尝试)。前一项工作由Vec2D比较执行,后者则为Turtle.goto()

另外,您的代码不包含用户输入的条款,因此无法对到达任何地方的玩家做出“反应”;也许你已经知道了。

答案 1 :(得分:1)

你好像不熟悉pos()。这种论点不满足要求。我建议你阅读帮助文件agau

答案 2 :(得分:1)

在你的if语句中,你写了player.pos(100, -100)Turtle.pos()返回Turtle的位置。要检查此位置是否等于(100,-100),请执行:if player.pos()==(100,-100)。要更改玩家的位置,请使用Turtle.goto(x,y)。以下代码应该是您要执行的操作:

if player.pos()==(100,-100):
    player.goto(100, -110)

希望这有帮助!

答案 3 :(得分:1)

我将采取的解决这两个问题的方法是不要自己进行位置比较,使用乌龟提供的distance()方法:

if player.distance(enemy) < 10:  # if the centers are within 10 pixels

这里有一个完整的例子,让你点击屏幕移动玩家,但如果玩家离敌人的心脏太近,它会传送回你可以再次移动的起点点击屏幕:

from turtle import Turtle, Screen

wn = Screen()
wn.setup(500, 500)
wn.bgcolor('black')

player = Turtle(visible=False)
player.speed('fastest')
player.shapesize(2)
player.color('white')
player.penup()
player.setposition(200, -200)
player.showturtle()

enemy = Turtle('circle', visible=False)
enemy.shapesize(2)
enemy.color('red')
enemy.penup()
enemy.setposition(-200, 200)
enemy.showturtle()

def click_handler(x, y):
    wn.onclick(None)  # disable handler while in handler
    player.setheading(player.towards(x, y))  # head towards new location
    player.setposition(x, y)

    if player.distance(enemy) < 10:
        player.hideturtle()  # teleport
        player.setposition(200, -200)
        player.showturtle()

    wn.onclick(click_handler)

wn.onclick(click_handler)

wn.mainloop()