CSE557 Final Project
Bumper Cars
By Ryan Kaminsky & Lynn Yang

Our project is to simulate the game "bumper cars" using both player-controlled and computer-controlled cars. We simulated the cars as a particle system and used a physics engine to control the movement of the cars and the collisions between the cars and the arena boundry.  We also developed several strategies that can be assigned to computer-controlled vehicles enabling them to play the game more intelligently and creating some interesting interactions between different cars and different strategies.

The main components of the system are as follows:

CARS
Forces
Collisions
Strategies

Car Attributes

A number of state attributes are maintained on each vehicle to create smooth movement based on the physics of the system. 

Position:  This is the current 3D position of the car in the drawing window.  For the purpose of this game, cars can only move in two directions, but the overall view of the game appears as if in 3D.

Heading:  At creation time, a randomly assigned heading unit vector is assigned to each car.  This is the direction vector along which a car can accelerate or decelrate.  To enable more realistic car movement,  a car can only steer in a direction tangent to its heading.

Velocity:  The current speed and direction of a car at a moment in time.   This is updated based on the forces acting on the car at each moment in time.  

Score:  The accumulated score based on the number of other cars bumped.  A car's score is increased if the point of contact is within a threshold distance of the car's heading and the score is decremented if the contact is elsewhere.

Mass:  The mass of the car.  This is used to compute the resulting forces acting on the car. 

Strategy:  The strategy the car follows while playing the game.

Forces

There are a number of forces acting on the cars during the course of the game.  These forces affect their movements and act according to the general rules of Physics.

Acceleration/Deceleration:

Acceleration is under the control of the car itself.  The user controls the accelration using the up and down arrow keys and the computer-controlled cars use acceleration depending on the strategy.  We chose to make all cars have the same acceleration ability, meaning that the true acceleration is inversely proportional to mass.  Lower mass cars can accelerate faster than higher mass cars.  The resulting acceleration  is a=F/m (force/mass).

Steering force:

Steering force is also under the control of the car itself.  The steering force is used to change the direction of the heading for a car.  Once the heading is changed, the car can accelerate along the new heading, thus moving in the correct direction.  This is similar to the way a car steers.

The relationship between the acceleration/deceleration  and steering forces and the car heading is illustrated in the image below:



Friction:

Friction force is imposed on the particle system and simulates the friction caused by the contact of wheels with the surface of the bumper arena and is proportional to the velocity of the car.  The friction force is separated into two directions that each exert different forces:

1.  The first component of the force is in the direction of the car heading.  This friction force exerts a force that is opposite the velocity vector in this direction and a fraction of the car speed.  A friction force of 0 will cause the cars to move indefinitely, while a large force will cause the cars to barely move.

2.  The second component is tangent to the car heading.  To make the movement of the bumper cars appear more realistic, the friction force tangent to the car heading is set to be extremely high.  This simulates the fact that a car drives on wheels and moving in a direction tangent to the direction of the wheels is a rare occurrence unless the car slides due to a severe loss of friction (from rain or ice).

The friction components are illustrated below.  The velocity has components in both the heading direction and the direction tangent to the heading.  Thus, the velocity component tangent to the heading will decreasing much more rapidly than the other velocity component.



Collisions

Car Collisions

We consider the collisions as perfectly elastic, frictionless and ignore the rotation of the cars.  The collisions will behave as if all the mass of the car is concentrated at the car's center of mass, which is the sphere center.  Then, we apply the conservation laws of momentum and energy during the collision.

We use the following equations, derived from Newton's Laws,  to calculate the velocity of car A and car B after the collision.

v(A) and v(B) are velocities of car A and car B before collision, respectively.
v(AB) is the their relative velocity.
m(A) and m(B) are masses of car A and car B, respectively.
n is the vector pointing from the position of car A to the position of car B.



The figures below show a two-dimensional elastic collision between a moving car and a stationary one.


When two cars hit each other,  the velocity of a car can be considered as the sum of two component- the component vertical to the common normal surfaces of the colliding bodies at the point of contact, and the component along the common normal surface. In the figure above, the velocity of the object (represented by red arrow) is considered as the two component represented by blue arrows.


When a collision takes place, the two-dimension collision can be considered as a one-dimension collision in the direction vertical to the common normal surfaces, and both object maintains their velocity in directions along the common normal surfaces.


After the collision, the objects move away along their new velocities.

This collision calculation can be generalized for the cases where two or more colliding objects are moving.

Wall Collisions

For collisions with the surrounding walls, we also assume a perfectly elastic collision.  In this scenario, we  use the negative of the component of the velocity that is vertical to the wall as the new velocity.


Strategies

We have created a number of strategies that the computer-controlled opponents follow.  Each strategy has a particular goal that the computer-controlled car is attempting to achieve.  Often these goals involve targeting a specific car, or a specific type of car.  

The key below shows the various strategies as well as the colors associated with them.



1.  Chase the closest car:  Here, the car will constantly analyze the playing area to determine the closest car.  It will then adjust its steering and acceleration to bump this target.

click here to see the video

2.  Avoid the closest car:  The car will analyze the playing area to find the closest car, then it will direct itself away from that car.

click here to see the video

3.  Chase the easiest hit:  Different from the first strategy, strategy three chooses its target  by considering both the distance and the heading direction of the other cars  The closer a car is and the more favorable its heading, the better the chance it will be chosen.  The strategy car will then adjust its steering and acceleration to bump this target.

We use a measure of possibility to determine the likelihood that a target car can be hit by the strategy car:

PossibilityMeasure = cos(a) / d;
a is the angle difference of the heading direction of the car and the position difference of the two cars;
d is distance between the two cars.

click here to see the video

4.  Avoid the easiest hit:  The possibility measure of strategy 3 is used, but the strategy car will then avoid this target rather than chase it.

click here to see the video

5.  Careful Driver:  This strategy is a troublemaker.  The car drives around and gets close to other cars and walls, but almost never hits them.  This strategy just likes to scare people.

click here to see the video

6.  Chase the car with the lowest score:  For this strategy, a car will analyze the playing field for the car with the lowest score and then adjust its parameters to help it bump that target.

click here to see the video

7.  Chase the car with the highest score:  This strategy is similar to strategy 6, but will find the car with the highest score instead of the lowest.

click here to see the video

8.  Chase the user:  For this strategy, the car will only focus on bumping the user car and will adjust its parameters to enable it to do so.

click here to see the video

9.  Avoid the user:  This strategy is similar to strategy 8, but instead of moving towards the user, it will move away from the user.

click here to see the video

10.  Sneaker:  This car will look for cars within a particular radius that are facing the opposite way, so it can sneak up and bump them from behind without them knowing.

click here to see the video

Other videos:

Mass effects: Demonstrates some of the mass effects of the system.
200 cars: Demonstrates the system with 200 bumper cars trying to bump each other.
Runaway strategies: Demonstrates the difference between some runaway strategies.
other


Application Features

Here is a screenshot of our application.  Additional features include, the drawing of the car number and car score over each car, a legend that describes the strategies and a debug window that displays car attributes (velocity, position, mass, etc.)  when a car is clicked on.  New cars can be added with a chosen strategy and mass, by using the add car feature.   For debugging, a white line from the car to its target can be drawn.