The Technical Details
Introduction
This really boring page is only here because someone asked for it as
it were. The game makes use of some basic physics to calculate in real time the
paths of the projectiles. I have tried to keep this as maths free as
possible, so as to give a general overview of the techniques that have gone in
to the game.
Intial game setup
Initially the positions of all the bodies are generated randomly. This is
done by giving an random value to the x and y position of the planets and
then the stations and then checking that they don't overlap. This whole
thing is repeated until the program is happy with the arrangement. It is
very crude, but seems to work most of the time! The parameters are changed
for the different scenarios, eg, the star scenario doesn't allow planet
1's position to vary much, therefor recreating a star-system like map.
Easy really. I have varied the density of the planets and stars in the
different scenarios in order to result in a playable, but different
environment for each scenario. There is no point in having even slightly
realistic values for mass, radius or distance, or the chance of hitting
anyone would be quite literaly astronomical!
Firing the bullets
With the map set up, the game starts. Initial angles and power are read
and stored from the sliders, easy enough in java! From the initial angle
and power and using a little trigonometry the initial velocity (as x and y
components) and x and y position of the bullet can be calculated taking in
to account the size of the station so the bullet starts outside the
station and is aiming away from it.
Main simulation
When the calculation starts properly each iteration of the main loop
corresponds to a time step, delta t. The overall force and hence
acceleration (by F=ma) is only a function of position and therefor can be
calculated by summing the forces in the x and y direction separately for
all of the gravitational bodies. The individual forces are (thanks to
Newtons law of gravitation) proportional the inverse of the square of the
distance. I put the gravitational constant to unity for simplicity. So
having calculated the force and therefor the acceleration on each bullet,
the velocities are updated for that time step and then the positions are
changed for that time step by the velocities. Having changed the
positions, the bullets can be checked for various collisions.
Numerical problems
The calculation suffers from numerical errors if the time step is too
large, so the calculation uses quite a small time step. However the
position of the bullet is only output to the screen every so many
timesteps so the game runs smoothly. There are many other more complicated methods
for calculating this, however they are only really needed for astronomical simulation
of great accuracy. The path taken by the bullet is surprisingly accurate and only shows
signs of going wrong for the unusual scenairios of wormholes and black holes. If you want to test it, select the black hole scenairio and put the number of planets to 1. Fire a shot at right angles to the black hole at low power. The shot should either hit the black hole or orbit it and hit you. Any deviation from returning to the exact position fired from is due to numerical errors. The display is flicker free and smooth, by not double but triple buffering allowing for a background
layer that records the trails of the bullets without them being
overwritten by explosions etc. The starfield, planets and trail are on the
back buffer, which is copied to the front buffer on to which the bullets,
stations and explosions are placed which is then copied to the screen
buffer.
Computer player AI
The artificial intellegence (AI) of the computer players is very crude. They take pseudo-random simulated shots with less time steps and record the shot that gets closest. They then try and improve on that shot by slightly adjusting the angle and power. The best shot from the previous turn is used next turn making them more accurate each go. The challenge is not making them accurate, but making them aim better and better each time like a human. The higher level bots also select a target as a team, not all firing at the same target and tend to target the closest enemy first or the biggest threat. The better bots use more accurate simulations when firing and simulate longer shots. Hyperspacing is done randomly (I will change this at some point) for the better bots the chance of hyperspacing is effected by conditions.
Related Links
click here to return to DEATH STAR
BATTLES