Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Snowman Stalker


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   -  Reputation: 139

Like
0Likes
Like

Posted 17 November 2013 - 03:38 PM

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



Sponsor:

#2 ApochPiQ   Moderators   -  Reputation: 16387

Like
2Likes
Like

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!

#3 Paradigm Shifter   Crossbones+   -  Reputation: 5433

Like
1Likes
Like

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.



PARTNERS