如何在 Python 中传送乌龟?
How do I teleport the turtle in Python?
我正在 Python 3.6.4.
制作游戏
当玩家触及红圈时,玩家应该传送回起点。
问题一:乌龟撞到红圈了怎么移动到起点?
我的代码:
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:如何修复此错误?
看来你对pos()函数不熟悉,这种说法不成立requirement.I建议你再看一下帮助文档
Turtle.pos()
returns乌龟的位置;它不会 test 出现在给定位置(如您的 if
行所尝试的那样)或 set 它(如您所尝试的那样)你的最后一行)。前者是Vec2D
比较,后者是Turtle.goto()
.
另外,您的代码不包含用户输入的规定,因此无法对到达任何地方的玩家做出“反应”;也许你已经知道了。
在你的 if 语句中,你写了 player.pos(100, -100)
。 Turtle.pos()
returns 乌龟的位置。要检查此位置是否等于 (100, -100),只需执行以下操作:if player.pos()==(100,-100)
。要改变玩家的位置,请使用 Turtle.goto(x,y)
。以下代码应该是您要执行的操作:
if player.pos()==(100,-100):
player.goto(100, -110)
希望对您有所帮助!
解决这两个问题的方法是不要自己进行位置比较,使用 turtle 提供的 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()
我正在 Python 3.6.4.
制作游戏当玩家触及红圈时,玩家应该传送回起点。
问题一:乌龟撞到红圈了怎么移动到起点?
我的代码:
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:如何修复此错误?
看来你对pos()函数不熟悉,这种说法不成立requirement.I建议你再看一下帮助文档
Turtle.pos()
returns乌龟的位置;它不会 test 出现在给定位置(如您的 if
行所尝试的那样)或 set 它(如您所尝试的那样)你的最后一行)。前者是Vec2D
比较,后者是Turtle.goto()
.
另外,您的代码不包含用户输入的规定,因此无法对到达任何地方的玩家做出“反应”;也许你已经知道了。
在你的 if 语句中,你写了 player.pos(100, -100)
。 Turtle.pos()
returns 乌龟的位置。要检查此位置是否等于 (100, -100),只需执行以下操作:if player.pos()==(100,-100)
。要改变玩家的位置,请使用 Turtle.goto(x,y)
。以下代码应该是您要执行的操作:
if player.pos()==(100,-100):
player.goto(100, -110)
希望对您有所帮助!
解决这两个问题的方法是不要自己进行位置比较,使用 turtle 提供的 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()