我试图用python编写一个程序,让用户在其中一只海龟身上下注,然后在比赛结束后告诉他是否正确。 我想让用户通过单击“r”来选择是否要重新开始比赛(我使用了turtle.onkey方法),在我输入以下代码之前,它工作得很好: bet=screen.textinput(“选择您的赌注”,“输入蓝色或绿色:”)。 现在,该程序允许用户像我希望的那样选择他的赌注,但当按下“r”时,它不会做出反应。。 我想澄清一下,在文本输入行代码之后,程序不会对任何.onkey方法做出反应。 有人知道为什么会这样吗
守则:
import turtle
import random
import ctypes
speed = random.randint(0, 2)
myTurtle = turtle.Turtle()
myTurtle2 = turtle.Turtle()
screen = turtle.Screen()
def up():
myTurtle.setheading(90)
myTurtle.forward(10)
def down():
myTurtle.setheading(270)
myTurtle.forward(10)
def left():
myTurtle.setheading(180)
myTurtle.forward(10)
def right():
myTurtle.setheading(0)
myTurtle.forward(10)
def up2():
myTurtle2.setheading(90)
myTurtle2.forward(10)
def down2():
myTurtle2.setheading(270)
myTurtle2.forward(10)
def left2():
myTurtle2.setheading(180)
myTurtle2.forward(10)
def right2():
myTurtle2.setheading(0)
myTurtle2.forward(10)
def restart():
myTurtle.setposition(400, -300)
myTurtle.setheading(90)
myTurtle2.setposition(-400, -300)
myTurtle2.setheading(90)
speed = random.randint(0, 2)
bet = screen.textinput("Choose your bet", "Enter blue or green: ")
while myTurtle.ycor() < 300 and myTurtle2.ycor() < 300:
if speed == 1:
up()
elif speed == 2:
up2()
speed = random.randint(0, 2)
if myTurtle.ycor() == 300:
if bet == "blue":
ctypes.windll.user32.MessageBoxW(0, "Blue is the winner", "You win!", 0x00010000)
else:
ctypes.windll.user32.MessageBoxW(0, "Blue is the winner", "You lost", 0x00010000)
else:
if bet == "green":
ctypes.windll.user32.MessageBoxW(0, "Green is the winner", "You win!", 0x00010000)
else:
ctypes.windll.user32.MessageBoxW(0, "Green is the winner", "You lost", 0x00010000)
screen.title("Turtle race")
turtle.listen()
myTurtle.shape("turtle")
myTurtle2.shape("turtle")
myTurtle.setposition(400,-300)
myTurtle.setheading(90)
myTurtle2.setposition(-400,-300)
myTurtle2.setheading(90)
myTurtle.dot(10, "blue")
myTurtle2.dot(10, "green")
myTurtle.pencolor("blue")
myTurtle2.pencolor("green")
myTurtle.speed(0)
myTurtle2.speed(0)
bet = screen.textinput("Choose your bet", "Enter blue or green: ")
while myTurtle.ycor() < 300 and myTurtle2.ycor() < 300:
if speed == 1:
up()
elif speed == 2:
up2()
speed = random.randint(0, 2)
if myTurtle.ycor() == 300:
if bet == "blue":
ctypes.windll.user32.MessageBoxW(0, "Blue is the winner", "You win!", 0x00010000)
else:
ctypes.windll.user32.MessageBoxW(0, "Blue is the winner", "You lost", 0x00010000)
else:
if bet == "green":
ctypes.windll.user32.MessageBoxW(0, "Green is the winner", "You win!", 0x00010000)
else:
ctypes.windll.user32.MessageBoxW(0, "Green is the winner", "You lost", 0x00010000)
turtle.onkey(up, 'Up')
turtle.onkey(down, 'Down')
turtle.onkey(left, 'Left')
turtle.onkey(right, 'Right')
turtle.onkey(restart, 'r')
turtle.onkey(up2, 'w')
turtle.onkey(down2, 's')
turtle.onkey(left2, 'a')
turtle.onkey(right2, 'd')
turtle.mainloop()
问题是
onkey
需要将焦点放在主窗口上才能从系统获取密钥,但当您执行textinput
时,此焦点将丢失,并且需要再次screen.listen()
最小工作代码
因为您在
restart()
内部和restart()
外部重复一些代码,所以我运行restart()
而不是外部代码因为我不使用
Windows
,所以我使用tkinter.messagebox
来显示消息turtle
已经使用tkinter
显示带有画布和textinput
的主窗口编辑:
简化的代码-我将海龟放在列表中,以后我可以使用
myTurtles[number]
,我可以使用一个函数up(number)
,而不是两个函数up()
和up2()
相关问题 更多 >
编程相关推荐