Agreeing with Devlin, you should just dive into the fire and get burned. The best way to learn is by failing.
See the forum here as a resource when you've banged your head bloody against the wall. Though keep in mind, if it is complicated to implement, your probably doing it wrong. Most things can be implemented in a simple way. Though programmers tend to take the rout to create systems that is supposed to handle ANY case that is thrown at it. This is generally a bad thing in game development. Only middle-ware needs to do that.
As some kind of guidelines I would say you should create games in an increasing difficulty:
* Non-scrolling, one screen game (Tetris, Pong, Space Invaders)
* Multiple screen game with Trigger-Event system (Point and click adventures like Myst, Monkey island, I've made one and it's much more fun than it sounds like)
* Scrolling game with dynamic interactivity with the world (RPG game like Zelda, Diablo, or 2D version of Morrowind)
[/list]
And of course you'll have to do everything with wonderful coderart
RPG's are the most fun if you ask me. There's no end to what you can add to the game. You want a fantasy RPG with awesome particle effects for magics? No problem. You suddenly want to copy the game-play in Minecraft, add it into the ye' old RPG game and it will fit right in. And so on and so on. That's a genre you can always just keep on working on.