Lots of home video games and arcade games use some sort of gun as an input device. You point the gun at the screen and pull the trigger, and if you hit the target on the screen, the target explodes.
To create this effect, the gun contains a photodiode (or a phototransistor) in the barrel. The photodiode is able to sense light coming from the screen. The gun also contains a trigger switch. The output of the photodiode and the switch are fed to the computer controlling the game.
At the same time, the computer is getting signals from the screen driver electronics. If you have read How Television Works, you know about the horizontal retrace and vertical retrace signals used to align the picture on the screen. The screen driver electronics send pulses to the computer at the start of the horizontal and vertical retrace signals, so the computer knows where on the screen the electron beam is located during each frame.
The computer normally uses one of two different techniques to figure out whether or not the gun is pointed at the target when the user pulls the trigger:
- The computer blanks the screen and then paints just the target object white. If the photodiode senses darkness after one vertical retrace signal and then light after the next, the computer assumes that the gun is pointed at the target and scores a hit.
- The computer blanks the screen and then paints the entire screen white. It takes time for the electron beam to trace the entire screen while painting it white. By comparing the signal coming from the photodiode with the horizontal and vertical retrace signals, the computer can detect where the electron beam is on the screen when the photodiode first senses its light. The computer counts the number of microseconds that pass between the time the horizontal and vertical retrace signals start and the time the photodiode first senses light. The number of microseconds tells the computer exactly where on the screen the gun is pointing. If the calculated position and the position of the target match, the computer scores a hit.