These tutorials will show you how to create games from start to finish. When I started programming, I immediately wanted to create amazing 3D games, but I soon realized that there was no way I could do that without having the basics down first. There's just no way you can make your own game without being able to set up a game loop or handle multiple game states.
These are my site's original tutorials, which take you line-by-line through a number of 2D games.
Arcade Game Tutorial Series
Introduction. This tutorial will show you how to set up SDL and handle game states using stacks and function pointers. Note that the tutorials in this series build off of each other, so you'll need to read each tutorial before moving on to the next.
Tetris. Tetris is generally considered to be a game programmer's first step into 2D games. Making Tetris will help you to see how everything fits together in a game. (Also available in pdf)
Pong. Pong is a simple game that involves some basic physics. After programming Pong you'll know how to make game objects move on their own and be able to perform some simple collision detection.
Breakout. Breakout builds off Pong by eliminating the computer paddle and replacing it with a group of blocks. Since you've already programmed Pong, making Breakout will be a snap. (Also available in pdf)