Almost all of the programming taught involves two-dimensions. The simulated sensor inputs, collision of objects, etc. can be complex, but it’s trivial compared to actual happenings in the real (3D) world.
Dealing with a moving robot, even just avoiding only stationary objects, is very difficult, especially if the third dimension is relevant. (Much easier if the robot is rolling and stays on a floor) Adding other moving robots or objects gets extremely complicated and difficult to deal with.
But being difficult doesn’t mean it’s impossible. Some folks have spent considerable time (many person-years) building so-called “physics engines” that can be used to make the programming tractable. Learning how to use these and other tools will take time — and again need to be used in “standard” ways.
If you examine a professional programmer’s code you will see references to various pre-programmed tools (e.g., a physics engine, or the languages’ libraries) following standards so that another person will be able to change the programming in the most pratical way — minimizing the chances of making errors.
There’s lots more, but the soap box that I’m standing on helps me yell loud and clear about learning programming properly from the ground up. Might as well do that rather than learn bad habits from “entertaining” folks and methods.
What’s needed is more than just logical thinking — it’s disciplined logical thinking.