Hands on experience comes from working on different games and reading. I can never stress enough how important it is for a programmer to read and try new things. You won't be able to think of everything, no one can, BUT there is such an abundance of books and material out there you can lend ideas from any number of them, finding exactly what you want.
Not one person started programming and on day 1 made an awesome game (well.. I sure thought my games were awesome, but the internet would very quickly disagree).
Try thinking of a simple game you enjoy playing, Pong(my first game)?, arkanoid, pacman, snake... any of these. Very simple ideas. Pracice making them. You will fail.. .GOOD! thats a good thing, learn and understand why you failed and try again from scratch, this time using what you just learned.
Takes time, patience and dedication to make any good game, but if you can do it, the results are never a let down.