I've been hobbying around with a lot of 3d programming but lately I've started messing around with Love, which is a nice cross-platform 3d accelerated 2d engine that uses lua.
Content creation for 3d games can be a long, difficult process, especially for the lone game programmer. To that end, I've made a few simple 2d games if for no other reason than to say that I've made a couple of complete games.
First you'll need Love, which is a fairly small download.
With that installed, you can get the game files here:
My simple lander game
Militia Defense game
In Windows you should automatically have love associated with .love files if you ran the installer. In Linux, just run 'love land.love' or 'love md.love'. Alternatively, your preferred desktop probably has a mechanism for associating love files the the love binary. In gnome it's as easy as going to the 'Open With' tab on the file properties, adding the love command, then selecting it as default.
The .love files are actually just zips, so source code and resources can be found by unzipping them. Both games are released under the MIT license so feel free to play around in the source, but be warned, it might be nasty.
The lua backend makes it so easy to make games that I tend to just plow through them without much thought. The good side of this is, you can use your first game prototype as a design document and you really haven't lost any time.