python 海龟中的逻辑错误
Logic error in python turtle
我正在 python 3.2 turtle 中编码,我有这张漂亮的坦克图。我知道如何将它向左移动并书写。但是,当试图使坦克上下移动时。我面临着它上升的问题,但如果我放手并再次按下向上按钮。它向左转。可能很难解释,所以我包含了代码。
"""
Programmer: Bert
Tank Run 1
"""
#------------------------------------------------------------------------------
#Importing random modules geddit
from turtle import *
from turtle import Turtle
import turtle
import random
#Welcome Statement and story
input("WELCOME TO TANK RUN 1!! PRESS ENTER TO CONTINUE")
Name = input("Name your Tank: ")
quitFunction = input(
"""The """ + Name + """ is in a battle and heading toward the
enemy base camp so that the """ + Name + """ can blow it up
Get to the base camp and do not let enemy
artillery, or soldiers kill you. Good luck"""
)
#setting up variables
unVar1 = 25
unVar2 = 100
unVar3 = 90
unVar4 = 150
unVar5 = -30
unVar6 = 75
unVar7 = 50
t = Turtle()
#defining shapes
def polySquare(t, x, y, length):
t.goto(x, y)
t.setheading(270)
t.begin_poly()
for count in range(4):
t.forward(length)
t.left(90)
t.end_poly()
return t.get_poly()
def polyCircle(t, x, y, radius):
t.up()
t.goto(x, y)
t.down()
t.hideturtle()
t.circle(radius)
t.end_poly()
return t.get_poly()
def polyRectangle(t, x, y, length1, length2):
t.goto(x, y)
t.setheading(270)
t.begin_poly()
for count in range(2):
t.forward(length1)
t.left(90)
t.forward(length2)
t.left(90)
t.end_poly()
return t.get_poly()
def drawLine(t, x1, x2, y1, y2):
t.up()
t.hideturtle()
t.goto(x1, y1)
t.do+wn()
t.goto(x2, y2)
def tankCursor():
"""
Create the tank cursor. An alternate solution is to toss the temporary turtle
and use the commented out polygon assignments instead of the poly* function calls
"""
temporary = turtle.Turtle()
screen = turtle.getscreen()
delay = screen.delay()
screen.delay(0)
temporary.hideturtle()
temporary.penup()
tank = turtle.Shape("compound")
# tire1 = ((10, unVar1), (10, unVar1 - unVar6), (10 + 30, unVar1 - unVar6), (10 + 30, unVar1))
tire1 = polyRectangle(temporary, 10, unVar1, unVar6, 30) # Tire #1
tank.addcomponent(tire1, "gray", "black")
# tire2 = ((110, unVar1), (110, unVar1 - unVar6), (110 + 30, unVar1 - unVar6), (110 + 30, unVar1))
tire2 = polyRectangle(temporary, 110, unVar1, unVar6, 30) # Tire #2
tank.addcomponent(tire2, "gray", "black")
# tire3 = ((110, unVar2), (110, unVar2 - unVar6), (110 + 30, unVar2 - unVar6), (110 + 30, unVar2))
tire3 = polyRectangle(temporary, 110, unVar2, unVar6, 30) # Tire #3
tank.addcomponent(tire3, "gray", "black")
# tire4 = ((10, unVar2), (10, unVar2 - unVar6), (10 + 30, unVar2 - unVar6), (10 + 30, unVar2))
tire4 = polyRectangle(temporary, 10, unVar2, unVar6, 30) # Tire #4
tank.addcomponent(tire4, "gray", "black")
# bodyTank = ((20, unVar3), (20, unVar3 - 130), (20 + 110, unVar3 - 130), (20 + 110, unVar3))
bodyTank = polyRectangle(temporary, 20, unVar3, 130, 110)
tank.addcomponent(bodyTank, "black", "gray")
# gunTank = ((65, unVar4), (65, unVar4 - 100), (65 + 20, unVar4 - 100), (65 + 20, unVar4))
gunTank = polyRectangle(temporary, 65, unVar4, 100, 20) # Gun
tank.addcomponent(gunTank, "black", "gray")
# exhaustTank = ((50, unVar5), (50, unVar5 - 20), (50 + 10, unVar5 - 20), (50 + 10, unVar5))
exhaustTank = polyRectangle(temporary, 50, unVar5, 20, 10)
tank.addcomponent(exhaustTank, "black", "gray")
# turretTank = ((50, unVar7), (50, unVar7 - 50), (50 + 50, unVar7 - 50), (50 + 50, unVar7))
turretTank = polySquare(temporary, 50, unVar7, 50) # Turret
tank.addcomponent(turretTank, "red", "gray")
turtle.addshape("tank", shape=tank)
del temporary
screen.delay(delay)
tankCursor() # creates and registers the "tank" cursor shape
tank = turtle
tank.shape("tank")
turtle.up() # get rid of the ink
screen = turtle.Screen()
def moveforward(): #I cannot get this function to work
tank.left(90)
tank.forward(40)
def movebackward(): #I cannot get this function to work
tank.left(90)
tank.backward(40)
def moveright():
tank.forward(40)
def moveleft():
tank.backward(40)
#Background color
t.screen.bgcolor("green")
#Movement of tank
screen.onkeypress(moveright, "Right")
screen.onkeypress(moveleft, "Left")
screen.onkeypress(moveforward, "Up")
screen.onkeypress(movebackward, "Down")
绘制自定义光标时,除非您有理由不这样做,否则请使光标设计以原点 (0, 0) 为中心。如果你画到原点的一侧,那么当你的乌龟向右或向左转时,它不会对称地转。也就是说,当它朝一个方向转动时,它看起来会很快,但在相反的方向上,它会看起来 "take the long way around".
我处理了坦克光标下方的多边形,使其中心成为炮塔的中心,并从绘图例程中删除了 setheading() 调用。
这个例子使用了我认为一致的运动:无论坦克方向如何,'up' 向前,'down' 向后,'left' 向左 90 度,'right' 向右倾斜 90 度。我还精简了示例以演示动作:
import turtle
# Defining shapes
def polySquare(t, x, y, length):
t.goto(x, y)
t.begin_poly()
for count in range(4):
t.forward(length)
t.left(90)
t.end_poly()
return t.get_poly()
def polyRectangle(t, x, y, length1, length2):
t.goto(x, y)
t.begin_poly()
for count in range(2):
t.forward(length1)
t.left(90)
t.forward(length2)
t.left(90)
t.end_poly()
return t.get_poly()
def tankCursor():
"""
Create the tank cursor.
"""
temporary = turtle.Turtle()
temporary.hideturtle()
temporary.penup()
screen = turtle.getscreen()
delay = screen.delay()
screen.delay(0)
tank = turtle.Shape("compound")
tire1 = polyRectangle(temporary, -65, -75, 30, 75) # Tire #1
tank.addcomponent(tire1, "gray", "black")
tire2 = polyRectangle(temporary, 35, -75, 30, 75) # Tire #2
tank.addcomponent(tire2, "gray", "black")
tire3 = polyRectangle(temporary, 35, 0, 30, 75) # Tire #3
tank.addcomponent(tire3, "gray", "black")
tire4 = polyRectangle(temporary, -65, 0, 30, 75) # Tire #4
tank.addcomponent(tire4, "gray", "black")
bodyTank = polyRectangle(temporary, -55, -65, 110, 130)
tank.addcomponent(bodyTank, "black", "gray")
gunTank = polyRectangle(temporary, -10, 25, 20, 100) # Gun
tank.addcomponent(gunTank, "black", "gray")
exhaustTank = polyRectangle(temporary, -25, -75, 10, 20)
tank.addcomponent(exhaustTank, "black", "gray")
turretTank = polySquare(temporary, -25, -25, 50) # Turret
tank.addcomponent(turretTank, "red", "gray")
turtle.addshape("tank", shape=tank)
del temporary
screen.delay(delay)
tankCursor() # creates and registers the "tank" cursor shape
turtle.shape("tank")
turtle.up() # get rid of the ink
# Movement of tank
screen = turtle.Screen()
screen.onkeypress(lambda : turtle.right(90), "Right")
screen.onkeypress(lambda : turtle.left(90), "Left")
screen.onkeypress(lambda : turtle.forward(40), "Up")
screen.onkeypress(lambda : turtle.backward(40), "Down")
turtle.listen()
turtle.mainloop()
我正在 python 3.2 turtle 中编码,我有这张漂亮的坦克图。我知道如何将它向左移动并书写。但是,当试图使坦克上下移动时。我面临着它上升的问题,但如果我放手并再次按下向上按钮。它向左转。可能很难解释,所以我包含了代码。
"""
Programmer: Bert
Tank Run 1
"""
#------------------------------------------------------------------------------
#Importing random modules geddit
from turtle import *
from turtle import Turtle
import turtle
import random
#Welcome Statement and story
input("WELCOME TO TANK RUN 1!! PRESS ENTER TO CONTINUE")
Name = input("Name your Tank: ")
quitFunction = input(
"""The """ + Name + """ is in a battle and heading toward the
enemy base camp so that the """ + Name + """ can blow it up
Get to the base camp and do not let enemy
artillery, or soldiers kill you. Good luck"""
)
#setting up variables
unVar1 = 25
unVar2 = 100
unVar3 = 90
unVar4 = 150
unVar5 = -30
unVar6 = 75
unVar7 = 50
t = Turtle()
#defining shapes
def polySquare(t, x, y, length):
t.goto(x, y)
t.setheading(270)
t.begin_poly()
for count in range(4):
t.forward(length)
t.left(90)
t.end_poly()
return t.get_poly()
def polyCircle(t, x, y, radius):
t.up()
t.goto(x, y)
t.down()
t.hideturtle()
t.circle(radius)
t.end_poly()
return t.get_poly()
def polyRectangle(t, x, y, length1, length2):
t.goto(x, y)
t.setheading(270)
t.begin_poly()
for count in range(2):
t.forward(length1)
t.left(90)
t.forward(length2)
t.left(90)
t.end_poly()
return t.get_poly()
def drawLine(t, x1, x2, y1, y2):
t.up()
t.hideturtle()
t.goto(x1, y1)
t.do+wn()
t.goto(x2, y2)
def tankCursor():
"""
Create the tank cursor. An alternate solution is to toss the temporary turtle
and use the commented out polygon assignments instead of the poly* function calls
"""
temporary = turtle.Turtle()
screen = turtle.getscreen()
delay = screen.delay()
screen.delay(0)
temporary.hideturtle()
temporary.penup()
tank = turtle.Shape("compound")
# tire1 = ((10, unVar1), (10, unVar1 - unVar6), (10 + 30, unVar1 - unVar6), (10 + 30, unVar1))
tire1 = polyRectangle(temporary, 10, unVar1, unVar6, 30) # Tire #1
tank.addcomponent(tire1, "gray", "black")
# tire2 = ((110, unVar1), (110, unVar1 - unVar6), (110 + 30, unVar1 - unVar6), (110 + 30, unVar1))
tire2 = polyRectangle(temporary, 110, unVar1, unVar6, 30) # Tire #2
tank.addcomponent(tire2, "gray", "black")
# tire3 = ((110, unVar2), (110, unVar2 - unVar6), (110 + 30, unVar2 - unVar6), (110 + 30, unVar2))
tire3 = polyRectangle(temporary, 110, unVar2, unVar6, 30) # Tire #3
tank.addcomponent(tire3, "gray", "black")
# tire4 = ((10, unVar2), (10, unVar2 - unVar6), (10 + 30, unVar2 - unVar6), (10 + 30, unVar2))
tire4 = polyRectangle(temporary, 10, unVar2, unVar6, 30) # Tire #4
tank.addcomponent(tire4, "gray", "black")
# bodyTank = ((20, unVar3), (20, unVar3 - 130), (20 + 110, unVar3 - 130), (20 + 110, unVar3))
bodyTank = polyRectangle(temporary, 20, unVar3, 130, 110)
tank.addcomponent(bodyTank, "black", "gray")
# gunTank = ((65, unVar4), (65, unVar4 - 100), (65 + 20, unVar4 - 100), (65 + 20, unVar4))
gunTank = polyRectangle(temporary, 65, unVar4, 100, 20) # Gun
tank.addcomponent(gunTank, "black", "gray")
# exhaustTank = ((50, unVar5), (50, unVar5 - 20), (50 + 10, unVar5 - 20), (50 + 10, unVar5))
exhaustTank = polyRectangle(temporary, 50, unVar5, 20, 10)
tank.addcomponent(exhaustTank, "black", "gray")
# turretTank = ((50, unVar7), (50, unVar7 - 50), (50 + 50, unVar7 - 50), (50 + 50, unVar7))
turretTank = polySquare(temporary, 50, unVar7, 50) # Turret
tank.addcomponent(turretTank, "red", "gray")
turtle.addshape("tank", shape=tank)
del temporary
screen.delay(delay)
tankCursor() # creates and registers the "tank" cursor shape
tank = turtle
tank.shape("tank")
turtle.up() # get rid of the ink
screen = turtle.Screen()
def moveforward(): #I cannot get this function to work
tank.left(90)
tank.forward(40)
def movebackward(): #I cannot get this function to work
tank.left(90)
tank.backward(40)
def moveright():
tank.forward(40)
def moveleft():
tank.backward(40)
#Background color
t.screen.bgcolor("green")
#Movement of tank
screen.onkeypress(moveright, "Right")
screen.onkeypress(moveleft, "Left")
screen.onkeypress(moveforward, "Up")
screen.onkeypress(movebackward, "Down")
绘制自定义光标时,除非您有理由不这样做,否则请使光标设计以原点 (0, 0) 为中心。如果你画到原点的一侧,那么当你的乌龟向右或向左转时,它不会对称地转。也就是说,当它朝一个方向转动时,它看起来会很快,但在相反的方向上,它会看起来 "take the long way around".
我处理了坦克光标下方的多边形,使其中心成为炮塔的中心,并从绘图例程中删除了 setheading() 调用。
这个例子使用了我认为一致的运动:无论坦克方向如何,'up' 向前,'down' 向后,'left' 向左 90 度,'right' 向右倾斜 90 度。我还精简了示例以演示动作:
import turtle
# Defining shapes
def polySquare(t, x, y, length):
t.goto(x, y)
t.begin_poly()
for count in range(4):
t.forward(length)
t.left(90)
t.end_poly()
return t.get_poly()
def polyRectangle(t, x, y, length1, length2):
t.goto(x, y)
t.begin_poly()
for count in range(2):
t.forward(length1)
t.left(90)
t.forward(length2)
t.left(90)
t.end_poly()
return t.get_poly()
def tankCursor():
"""
Create the tank cursor.
"""
temporary = turtle.Turtle()
temporary.hideturtle()
temporary.penup()
screen = turtle.getscreen()
delay = screen.delay()
screen.delay(0)
tank = turtle.Shape("compound")
tire1 = polyRectangle(temporary, -65, -75, 30, 75) # Tire #1
tank.addcomponent(tire1, "gray", "black")
tire2 = polyRectangle(temporary, 35, -75, 30, 75) # Tire #2
tank.addcomponent(tire2, "gray", "black")
tire3 = polyRectangle(temporary, 35, 0, 30, 75) # Tire #3
tank.addcomponent(tire3, "gray", "black")
tire4 = polyRectangle(temporary, -65, 0, 30, 75) # Tire #4
tank.addcomponent(tire4, "gray", "black")
bodyTank = polyRectangle(temporary, -55, -65, 110, 130)
tank.addcomponent(bodyTank, "black", "gray")
gunTank = polyRectangle(temporary, -10, 25, 20, 100) # Gun
tank.addcomponent(gunTank, "black", "gray")
exhaustTank = polyRectangle(temporary, -25, -75, 10, 20)
tank.addcomponent(exhaustTank, "black", "gray")
turretTank = polySquare(temporary, -25, -25, 50) # Turret
tank.addcomponent(turretTank, "red", "gray")
turtle.addshape("tank", shape=tank)
del temporary
screen.delay(delay)
tankCursor() # creates and registers the "tank" cursor shape
turtle.shape("tank")
turtle.up() # get rid of the ink
# Movement of tank
screen = turtle.Screen()
screen.onkeypress(lambda : turtle.right(90), "Right")
screen.onkeypress(lambda : turtle.left(90), "Left")
screen.onkeypress(lambda : turtle.forward(40), "Up")
screen.onkeypress(lambda : turtle.backward(40), "Down")
turtle.listen()
turtle.mainloop()