Welcome to the world of programming. When you are writing scripts the first rule is they are very picky, every word has to be an exact match(case sensitive) and punctuation needs to be in the right place.
Running blender from a terminal window can help as you will see error messages that can help you find the problems - at least the line numbers will help you focus on where python finds the error. I'd recommend you start from a terminal and use the errors to try and see how I found the following fixes.
Not sure it's a big thing but you have the same logic bricks setup for the plane as well as the lamp.
To get you started - in MouseRay.py -
Line 13 the plane after the = is a call to the Plane class above - it needs to use a capital P
Line 15 needs a : at the end
Line 17 needs () after the function name
Line 24 ray.p0 should be ray_p0
Line 27 intersect_lin_plane should be intersect_line_plane
As you see they are very small picky things but you need to specify exactly what you are referring to each time. You have a class called Plane and a variable named plane and an object called plane.004 which could be named plane. Python needs to know exactly which plane you refer to at any given time. It also highlights the need to use helpful distinct names for everything. Even if python can tell which one you are referring to given the context - can you? without spending 5 minutes ticking off what refers to what?