I am making a 3D game in DirectX11. The idea of the game is a snowball fight between two snowmen.
One is controlled by the player and the other is controlled with AI.
It's my first proper game, so I wanted to keep it as simple as possible, and the only thing I wanted the AI to do was: How would I code the opponent to move towards the player for five seconds, then stop for two seconds, fire one snowball and then repeat until either the opponent or they are dead?
The problems I had were how to get the AI snowman to react to the players location and go towards them.
It's pretty simple, really. Suppose your location is just a number on a number line, with 0 being "far left" and 10 being "far right."
If the player's number is less than the AI's number, subtract from the AI's number until you are "in range" to fire a snowball, i.e. the absolute value of the difference between the player's number and the AI's number is sufficiently small. On the other hand, if the player's number is greater than the AI's number, add to the AI's position slowly until you get to "in range."
Now, you can extend this trivially to movement in two dimensions by doing the same check for the vertical axis as you did for the left/right horizontal axis. The check for range just needs to become a simple Euclidean distance check (remember your Pythagorean theorem!). Voila, one top-down snowball fighting game.
I assume your 3D game actually takes place on a flat surface and not free-floating in space, so you really don't need much else besides a 2D movement check for your AI. (If you do need 3D flying movement like in Star Wars, just add a third axis using the same steps as before.) The only tricky bit is knowing which axes to use, which depends on how your renderer is set up. X and Z are the most likely pairing (Y is vertical in the 3D view and doesn't matter for moving on the flat surface), followed by X and Y (Z is vertical).
Timing issues are going to be part of standard game loop design and should be well-covered by any article on how to write a game loop and perform time-based actions; there's not much AI-specific stuff there.
Checking for victory/loss conditions (i.e. is someone dead) is just basic programming logic: each iteration of the game loop, if the AI is dead, the player wins. If the player is dead, the AI wins. Not much to it.
If you want more than just a flat open area to fight in, or obstacles, or other things, it gets more sophisticated - but for just getting started, that should be all you need!