Ok to break it down:
He loaded the score values in order, counterclockwise, into an array. (6,13,4,18,ect...)
Then normalize the angle() expression (normally returns -180 to 180) with angle()+360%360, resulting in a value 0-360 (this is dAngle)
Then map that angle to the array with (20-(round(dAngle/18)))%20. (this is dIndex)
Based on the distance from the center, you can determine if the final score (dNumber) should be a inner bullseye at 50, outerbullseye at 25, or a multiple of the base value stored in the array.
He uses some nice math to to be efficient. If you have trouble wrapping your head around that (and or the array), here's general pseudocode:
If distance (from middle) is less than (bullseye size), then score = 50
else if distance is less than (2*bullseye size), then score = 25
else if distance is greater than (dartboard score zone), then score = 0
ELSE
If -10<angle<10, score = 6
If 10<angle<30, score = 13
If 30<angle<50, score = 4
and so on...
and after that if the dart is within a certain distance from the middle, multiply the score by 2 or 3 (bonus rings)
-------- OR -----------
The arguably simplest way is to make invisible placeholder sprites for each target zone with a score variable for each instance. This could be a lot of work though, and not nearly as accurate as the mathematical way with distance and angle (you might have overlaps or gaps).