# basic futuristic race game AI

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

## Recommended Posts

Hi folks, I'm busy with a futuristic racing game. I am making this for a handheld gaming system so resources are limited. I have 4 futuristic hoverplanes of which one is the player and the other 3 are computer driven planes. I need AI for this. The levels are build up from an ascii in which you can make straights and corners. So i don't know the level before hand so i can't make a script or anything for it. It needs to be done when i load in the file or just at realtime. How can i do this? (I never have done racing AI so please every pointer or idea is welcome). My own thoughts(can be bad or impossible) 3 ways: - creating a trackpart (straigth for example) with waypoints on it. Trying to calculate the closest and then go there but i have no idea how i should model it physicswise. - creating 1 waypoint in the middle of the trackpart and then always let the plane go to the next one (only then i really don't know how to model overtaking.) - checking how close you are to a wall (every trackpart has walls so you can't go out of the track) and adjust your direction to go as far from both walls as possible ( this will not work when approaching corners, you will simply go to fast i guess.) well as yo ucan see i have some thoughts but since i have not done this I hoped you could guide me into the right direction. greets ghotirein EDIT: it is at the moment a 2D problem since i do not have hieght differences. However I hope the give solution will take into account that i want to expand it maybe in the future to a 3D problem. [Edited by - ghotirein on June 1, 2007 3:10:24 AM]

##### Share on other sites
Quote:
 Original post by ghotirein- checking how close you are to a wall (every trackpart has walls so you can't go out of the track) and adjust your direction to go as far from both walls as possible ( this will not work when approaching corners, you will simply go to fast i guess.)

You could use:
X = (lane_width / Distance to left wall)
Y = distance to next corner.
nextCornerSide = next corner is right or left.
ClosestOpponentDistance = distance to the closest opponent in front.
ClosestOpponentX = Same as your X but for the closest opponent.

Base behavior:
1[base] * MoveToX(1/2);2[prepare for turns] * if (Y < turnSafetyDistance) desiredSpeed = f(Y); //f should give the proper speed to enter a corner.3[overtake] * if (ClosestOpponentDistance < distanceToStartOvertaking)    if (ClosestOpponentX < 1/2)      MoveToX(3/4);   else      MoveToX(1/4);

You have to compensate 2 and 3 with nextcornerside.

##### Share on other sites
There's a pretty exhaustive set of articles about how to set up a racing game on this site. I'm sure you can repurpose anything in their to suit your game.

I can't find the articles at the moment (got bored looking) but just browse around the Articles & Resources section.

-me

##### Share on other sites
Hi

@ Palidine: Well i have searched on the site but i only found a lot of articles about real racing games and all the physics that come along with it. My raing game is more a simple SNES mario kart kindof game. But I will try to find some articles about AI see if I can simplify it a bit to only suit my needs :)

@ Zanshibumi: I get it for the straight parts but how do i calculate X when in a corner ? and what exactly do you mean by

if (ClosestOpponentX < 1/2)
MoveToX(3/4);
else
MoveToX(1/4);
Do you mean here that if the opponent is on the left side of the track then overtake on the right otherwise overtake on the left ? (or vice versa)

##### Share on other sites
Quote:
 Original post by ghotirein@ Zanshibumi: I get it for the straight parts but how do i calculate X when in a corner ?

You subtract the distance of both sides from the center of curvature.

Quote:
 Original post by ghotireinif (ClosestOpponentX < 1/2) MoveToX(3/4); else MoveToX(1/4);Do you mean here that if the opponent is on the left side of the track then overtake on the right otherwise overtake on the left ? (or vice versa)

Exactly.

1. 1
2. 2
3. 3
4. 4
Rutin
17
5. 5

• 11
• 21
• 12
• 11
• 41
• ### Forum Statistics

• Total Topics
631401
• Total Posts
2999871
×