Question: Code:

```
import turtle
import random
import time

s = turtle.getscreen()
turtle.screensize(canvwidth=400, canvheight=400)
t = turtle.Turtle()
t.pensize(0)
t.shape('square')
t.color("black")
t.speed(0)
t.penup()

def moveu(num):
    t.setheading(num)
    t.forward(20)

s.onkey(lambda : moveu(90), 'w')
s.onkey(lambda : moveu(270), 's')
s.onkey(lambda : moveu(180), 'a')
s.onkey(lambda : moveu(0), 'd')

s.listen()

```

I am not close to done with this project but I have run into some problems. I want to create a game in the `turtle` module. But I don't know how to prevent the block from moving backward. I have seen other people use `t.direction` or something. But I have tried that and it didn't really work, maybe I'm just stupid and I did something wrong. How can I prevent the square from moving in the opposite direction?

Answer: 
You can add the condition `if (t.heading() + 180) % 360 != num:`, meaning if the opposite direction of the turtle's current heading direction isn't the direction the number passed into the function, then proceed:

```
import turtle
import random
import time

s = turtle.getscreen()
turtle.screensize(canvwidth=400, canvheight=400)
t = turtle.Turtle()
t.pensize(0)
t.shape('square')
t.color("black")
t.speed(0)
t.penup()

def moveu(num):
    if (t.heading() + 180) % 360 != num:
        t.setheading(num)
        t.forward(20)

s.onkey(lambda : moveu(90), 'w')
s.onkey(lambda : moveu(270), 's')
s.onkey(lambda : moveu(180), 'a')
s.onkey(lambda : moveu(0), 'd')

s.listen()
turtle.mainloop()

```
Like [cdlane](https://stackoverflow.com/users/5771269/cdlane) said in their [answer](https://stackoverflow.com/a/67375590/843953), your turtle *does* only move forward. However, you always *ask* it to face the direction you want and then make it move forward. Instead, you should check its current direction, and allow it to move only if it's not opposite to the current direction.

This only needs a slight modification to your `moveu()` function:

```
def moveu(angle):
    current_heading = turtle.heading()
    if abs(angle - current_heading) != 180:
        turtle.setheading(angle)
        turtle.forward(20)

```

Now, your turtle won't move down if you first press `w` and then `s`. However, if you press `w` and then `a` and then `s`, your turtle will first move to the left and then downwards.

Here's a demo: I modified cdlane's demo to add another turtle at the bottom of the canvas to print status messages [Code](https://replit.com/@PranavHosangadi/TurtleDemo#main.py). I added a couple lines in the `moveu()` function to print which key was pressed.

[![enter image description here](https://i.stack.imgur.com/dTfDF.gif)](https://i.stack.imgur.com/dTfDF.gif)