Skip to content
Advertisement

Why is the turtle not turning?

My turtle won’t move with my key press. When you remove the self.forward part, it turns just fine, but when it moves it doesn’t work. How can I make it so that turtle turns while it is moving. Also, what was it that didn’t work in my code before. Also, the image labeled backround isn’t loading. How do I fix that? Thanks. Code:

import turtle
import turtle as trtl

color = input("Please select color of turtle: ")


# classes
class enemy(turtle.Turtle):
    def __init__(self):
        turtle.Turtle.__init__(self, shape='square')
        self.color('white')
        self.turtlesize(2)
        self.penup()
        self.goto(0, 240)


class player(turtle.Turtle):

    def __init__(self, x=True):
        turtle.Turtle.__init__(self, shape='turtle')
        self.x = x
        self.color(color)
        self.turtlesize(2)
        self.hideturtle()
        self.penup()
        self.goto(4.440892098500626e-14, -180.0)
        self.setheading(90)
        self.showturtle()
        while self.x:
            self.forward(10)
            self.speed('slowest')

    def turning_left(self):
        self.x = False
        self.left(30)
        self.x = True

    def turning_right(self):
        self.x = False
        self.right(30)
        self.x = True


enemy1 = enemy()
shooter = player()

# controls


wn = trtl.Screen()

wn.onkeypress(shooter.turning_right, 'Right')
wn.onkeypress(shooter.turning_left, 'Left')
wn.onkeypress(shooter.turning_right, 'd')
wn.onkeypress(shooter.turning_left, 'a')

wn.listen()
wn.bgpic('backround.gif')
turtle.done()

Advertisement

Answer

Below is a simplification of your code that’s further modified such that the turtle constantly moves forward but you can cause it to turn via the keyboard:

from turtle import Screen, Turtle

screen = Screen()

class player(Turtle):

    def __init__(self):
        super().__init__(shape='turtle')
        self.hideturtle()
        self.turtlesize(2)
        self.setheading(90)
        self.penup()
        self.backward(180.0)
        self.showturtle()

        self.move()

    def move(self):
        self.forward(1)
        screen.ontimer(self.move)

    def turn_left(self):
        self.left(15)

    def turn_right(self):
        self.right(15)

shooter = player()

screen.onkeypress(shooter.turn_right, 'Right')
screen.onkeypress(shooter.turn_left, 'Left')
screen.listen()

screen.mainloop()
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement