Nice!
I definitely see a remake of "Buggy Boy" mixed with some "Live and Let Die".
Regarding the code, what about replacing the "640"'s and "480"s by some symbolslike "Width" and "Height" ? that would bet better practice, especially if you have to change them. Also why use floats for indices in you arrays? Ok it may have been "fast coding" but still..
A lot of your code calculates values depending on x and y. If you look closer, you will see that you have a lot of linear functions, that can be easily replaced by accumulators to which you simply add the same fraction at every new x and every new y. This will save a lot of computations too.
Just my 2 cents.