Advertisement Jump to content
Sign in to follow this  

Snowman Stalker

This topic is 1892 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts



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.


Thanks in Advanced,


Share this post

Link to post
Share on other sites
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!

Share this post

Link to post
Share on other sites

Use a state machine and timers, with states like


Idle (waiting to wake up for AI to be run on it, perhaps checking for player coming into activation range)

MoveToPlayer (with 5 second timer)

WaitToThrow (with 2 second timer)

ThrowSnowball (run anim and spawn snowball)


then go back to the MoveToPlayer state. You probably want a Hit state and a Dead state too.

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!