Jump to content

View more

Image of the Day

Boxes as reward for our ranking mode. ヾ(☆▽☆)
#indiedev #gamedev #gameart #screenshotsaturday https://t.co/ALF1InmM7K
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

Sign up now

Snowman Stalker

4: Adsense

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 Checkmate_001   Members   


Posted 17 November 2013 - 03:38 PM



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,


#2 ApochPiQ   Moderators   


Posted 17 November 2013 - 04:23 PM

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]

#3 Paradigm Shifter   Members   


Posted 17 November 2013 - 04:23 PM

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

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.