🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Snowman Stalker

Started by
1 comment, last by Paradigm Shifter 10 years, 7 months ago

Hi,

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,

Checkmate_001

Advertisement
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!

Wielder of the Sacred Wands
[Work - ArenaNet] [Epoch Language] [Scribblings]

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.

"Most people think, great God will come from the sky, take away everything, and make everybody feel high" - Bob Marley

This topic is closed to new replies.

Advertisement