The problem you described is called creative burnout and there are several ways to fix that:

1. Write a design-doc. Do not start a game without having a detailed concept of what's it going to look and feel like. Once the design-doc is done which may take several months, do not add new features to your game. That's also one of the reasons why people don't finish their games - they keep adding features until the project becomes too big for them to handle it.
Also, set yourself goals like "I want the drawing routines of the engine to be completed by the end of june". Make a step-by-step list like
"finish the drawing routines by the end of june".
"finish the level editor by the end of august"
"implement the level-file import routines by the end of october"
etc.

2. Write smaller games. My first game ever was a simple number-puzzle game. My second game was a Sokoban clone. My third game was a point-and-click adventure game that never got finished. My fourth game was an isometric action-rpg that also never got finished. See how there's nothing inbetween "Sokoban" and "Adventure"... After my failed RPG, I wrote a tetris clone that got finished and then I wrote like ten smaller games in a row that all got finished. Now I'm in the pre-production phase of my first platform game... i do believe that I have the skills to write a bigger game, but I want to keep it small. I rather finish three smaller games than start five bigger games that all end up unfinished and wasting space on my hard disk.

3. Write re-usable code. I have a giant code library that theoretically would enable me to write a simple game in a couple of hours.