It sounds like you should start playing with some small 2D games. SFML is a good API for that. Try to have your projects completable within one month apiece, so you get in the habit of not quitting projects. Also, try to end every programming session with your code being able to compile. Having your code in an uncompiled state for too long is wearying and demotivating. Break large tasks into smaller bite-sized tasks, and complete them one by one, always trying to keep your code able to compile. Implementing a "feature" should not take two weeks - but rather be 14 days of small sub-tasks that together make the feature.
The Pragmatic Programmer also covers some of the same ground as Code Complete and Design Patterns, but not as in-depth.
If you can only get one of those three books, make it Code Complete, and follow it with Design Patterns later. If you can't get any of them, badger your library to get a copy for you - that's what your government pays the libraries for (and that's what you or your parents pay taxes for).
Put your effort into learning to write clean code, and in learning the higher level architectural details. It's better (from a learning perspective) if you code one small game that is very well written, then if you code three small games that are poorly written.
Fare ye well on your journey!