def moveForward(self): self.center += self.step * self.heading self.rect.center = self.center.toPoint() # I don't know what this line doesWhat is self.rect.center? And why do you need to call `toPoint' on self.center? What is self.center if not a point?
EDIT: Oh, the tricky part with using heading as a length-one vector is how to rotate it when the user presses a key. Instead of adding something to the angle, rotate the vector by some amount (you seem to already have code for that). You may have to normalize the vector every so often (like every frame, for simplicity) so that it doesn't end up being much longer or shorter by accumulated floating-point errors.