Your approximation basically dictates shots are landing on a part of the surface of a sphere, determined by angle; the target area within that surface is a constant; the probability distribution is constant within the surface and zero elsewhere.
Gajet has already given a number of good reasons why some of these assumptions fall flat, but holds on to the same inaccuracy model: a bounded error in angle. The result still falls off with r^-2, but with a small constant.
Say the shooter has a maximum spread of 5°. He has a chance of firing between a 0° and 1° error, but the area of the ring between 4° and 5° is much larger than the area of the ring/circle between 0° and 1°. Larger errors have a larger probability of occuring. Increase the error any further, and the probability suddenly drops to zero, because we're out of the five degree limit. That doesn't seem very realistic.
A more accurate representation would be to have a guassian distribution of angular error, i.e.:
A(ϕ) = sqrt(a/π) exp(-a ϕ²). The variable a can be used to include the shooter's skill etc. Note this solution is one-dimensional. If your target is very tall compared to its width, you might omit the vertical error altogether and just assume the shot landed at the correct elevation. Alternatively, you can run the calculation twice and multiply the result, assuming the target is roughly rectangular.
To get from the probability function to the actual probability of hitting a target, we integrate the function A and end up with an expensive error function - which is actually called the error function:
p(ϕ) = erf(ϕ sqrt(a)). The angle ϕ equates to the angle between the targeted point and the target's edge. In terms of target size s and distance r:
p(r) = erf(arctan(s/2r) sqrt(a)). This function is plotted below for a target of size 1 and accuracy values of
Note that unlike a falloff of r^-2, the probabilty neatly stays below one, no matter how close the target is. In fact, even a target at exactly zero distance can be missed, due to the extremely small probability the error is more than 90°.
Like I said before, the error function is quite expensive, but its argument
ϕ sqrt(a), doesn't vary all that much for any sensible shooter scenario. We can do a lot better by evaluating part of the Taylor series instead and capping the result. First, we map
x = arctan(s/2r) sqrt(a), then evaluate:
2 x - (2/3) x^3 + (1/5) x^5 .... Omit or add as many terms as deemed necessary, but keep in mind an even number of terms will cause unwanted behavior for low distances. Plotted below is the real error function, compared to the first three non-zero terms of its Taylor series.
As a final note, this is purely mathematics. Throw in a couple of sine functions, random coefficients and logarithms and your game might be equally fun.