Python 几秒钟后,一只乌龟停下来,另一只走得更快
经过几周的尝试,我还没有找到解决这个问题的办法,一只乌龟完全停下来,另一只乌龟的速度快了2-3倍。我怎样才能解决这个问题?你必须把他们两个都移动一点,才能遇到这个问题。这也在网站上:repl.it 我尝试过移动Python 几秒钟后,一只乌龟停下来,另一只走得更快,python,python-3.x,turtle-graphics,Python,Python 3.x,Turtle Graphics,经过几周的尝试,我还没有找到解决这个问题的办法,一只乌龟完全停下来,另一只乌龟的速度快了2-3倍。我怎样才能解决这个问题?你必须把他们两个都移动一点,才能遇到这个问题。这也在网站上:repl.it 我尝试过移动wn.listen()命令,但只切换了哪个海龟停止了,哪个没有。我尝试将forward()命令切换到goto()失败,并且尝试使用特定方向的移动(也失败): 导入海龟 导入系统 player1=海龟。海龟() player1.up() 玩家1.转到(0350) 玩家1.右(90) 播放者1
wn.listen()
命令,但只切换了哪个海龟停止了,哪个没有。我尝试将forward()
命令切换到goto()
失败,并且尝试使用特定方向的移动(也失败):
导入海龟
导入系统
player1=海龟。海龟()
player1.up()
玩家1.转到(0350)
玩家1.右(90)
播放者1.向下()
player2=海龟。海龟()
wn=tutle.Screen()
#赛前设置
player2.up()
玩家2。转到(0,-350)
播放者2.左(90)
播放者2.向下()
播放者2.颜色(“蓝色”)
播放者1.颜色(“红色”)
#主游戏循环
播放器1.速度(0)
播放机2.速度(0)
k=0
def kr():
播放者1.左(90)
def kl():
玩家1.右(90)
wn.onkey(kr,“d”)
wn.onkey(吉隆坡,“a”)
def k1():
玩家2.右(90)
def k2():
播放者2.左(90)
wn.onkey(k1,“k”)
wn.onkey(k2,“l”)
听着
尽管如此:
球员1.前锋(1)
球员2.前锋(1)
当player1.xcor()<(-350)或player1.xcor()>(350)或player1.ycor()>(350)或player1.ycor()<(-350)时:
球员1.后卫(30)
当player2.xcor()<(-350)或player2.xcor()>(350)或player2.ycor()>(350)或player2.ycor()<(-350)时:
球员2.后卫(30)
如果player1.pos()==player2.pos():
打印(“不要撞到其他玩家”)
sys.exit()
我希望它们都会无限期地继续移动,但其中一个总是停止,另一个则以2倍的速度移动。将KeyListener移动到循环之外-将它们移动到while循环中会重新连接它们,并始终重新定义函数,从而使您感到困惑 您需要设置它们一次,而不是每隔几毫秒:
import turtle
player1 = turtle.Turtle()
player2 = turtle.Turtle()
player1.goto(350, 0)
player2.goto(-350, 0)
player1.right(180)
wn = turtle.Screen()
def kl():
player1.left(90)
def kr():
player1.right(90)
def k1():
player2.right(90)
def k2():
player2.left(90)
wn.onkey(kl, "d") # changed to lowercase
wn.onkey(kr, "a")
wn.onkey(k1, "j") # changed to other letters
wn.onkey(k2, "l")
wn.listen()
while True: # not changing k so just use while True
player1.forward(1) # changed speed
player2.forward(1)
嵌套的
while
循环结构对您不利,对于像turtle这样的事件驱动环境无效。下面是对您的程序进行的返工,以修复此问题并清理代码:
from turtle import Screen, Turtle
import sys
# preGame setup
player1 = Turtle()
player1.hideturtle()
player1.up()
player1.goto(0, 350)
player1.down()
player1.right(90)
player1.color('red')
player1.speed('fastest')
player1.showturtle()
def r1():
player1.left(90)
def l1():
player1.right(90)
player2 = Turtle()
player2.hideturtle()
player2.up()
player2.goto(0, -350)
player2.down()
player2.left(90)
player2.color('blue')
player2.speed('fastest')
player2.showturtle()
def r2():
player2.right(90)
def l2():
player2.left(90)
# main game loop
def move():
player1.forward(5)
if not (-350 < player1.xcor() < 350 and -350 < player1.ycor() < 350):
player1.backward(30)
player2.forward(5)
if not (-350 < player2.xcor() < 350 and -350 < player2.ycor() < 350):
player2.backward(30)
if player1.distance(player2) < 5:
print("DON'T CRASH INTO THE OTHER PLAYER!")
sys.exit()
screen.ontimer(move, 100)
screen = Screen()
screen.onkey(r1, 'd')
screen.onkey(l1, 'a')
screen.onkey(r2, 'k')
screen.onkey(l2, 'l')
screen.listen()
move()
screen.mainloop()
从海龟导入屏幕,海龟
导入系统
#赛前设置
player1=海龟()
player1.hideturtle()
player1.up()
玩家1。转到(0350)
播放者1.向下()
玩家1.右(90)
播放器1.颜色(“红色”)
玩家1.速度(“最快”)
player1.showturtle()
def r1():
播放者1.左(90)
def l1():
玩家1.右(90)
player2=海龟()
player2.hideturtle()
player2.up()
玩家2。转到(0,-350)
播放者2.向下()
播放者2.左(90)
播放器2.颜色(“蓝色”)
玩家2.速度(“最快”)
player2.showturtle()
def r2():
玩家2.右(90)
def l2():
播放者2.左(90)
#主游戏循环
def move():
球员1.前锋(5)
如果不是(-350
看看这是否更符合您的期望/愿望。我已将代码更改为一个我有问题的代码,希望它能成功difference@xu我不知道你在尝试什么。但是,最后的逻辑是有缺陷的:
如果player1.xcor()<(-350)
您不应该再往回走,而应该向前走。否则你会变得更消极。前后取决于海龟看的方向——最好将其位置设置为绝对位置:如果<350,则将其设置为350;如果>350,则将其设置为350。
from turtle import Screen, Turtle
import sys
# preGame setup
player1 = Turtle()
player1.hideturtle()
player1.up()
player1.goto(0, 350)
player1.down()
player1.right(90)
player1.color('red')
player1.speed('fastest')
player1.showturtle()
def r1():
player1.left(90)
def l1():
player1.right(90)
player2 = Turtle()
player2.hideturtle()
player2.up()
player2.goto(0, -350)
player2.down()
player2.left(90)
player2.color('blue')
player2.speed('fastest')
player2.showturtle()
def r2():
player2.right(90)
def l2():
player2.left(90)
# main game loop
def move():
player1.forward(5)
if not (-350 < player1.xcor() < 350 and -350 < player1.ycor() < 350):
player1.backward(30)
player2.forward(5)
if not (-350 < player2.xcor() < 350 and -350 < player2.ycor() < 350):
player2.backward(30)
if player1.distance(player2) < 5:
print("DON'T CRASH INTO THE OTHER PLAYER!")
sys.exit()
screen.ontimer(move, 100)
screen = Screen()
screen.onkey(r1, 'd')
screen.onkey(l1, 'a')
screen.onkey(r2, 'k')
screen.onkey(l2, 'l')
screen.listen()
move()
screen.mainloop()