Well, I have one important advice for you: writing a future proof code is your biggest enemy!
You would say that I'm wrong, but believe me, programming for games are different than other types of programming.
With some research you'll see that no AAA game is made with a closed source game engine. About %70 of AAA games are made with in-house engines, and the other %30 are made with their own modified versions of commercial engines.
So face the truth: There is NO general code in game development industry. You have to make your own technology for your game.
Also it is a good practice to write your code in a data-oriented way. This way you have to figure out how your game data is transformed first, then implement some routines to accomplish that transformations.
By data transformation I mean something like this:
User input -> Game Logic -> Physics calculations -> Render engine -> Monitor
To achieve this, make a very big flowchart of your game, then design your code specific to the game.
So with every change in the game design, the flowchart needs to be modified.
This method has three main advantages:
1- Better performance (because of memory access patterns)
2- Better project scheduling
3- Better readable code
For more info, read the publications of DICE and Insomniac, that cover this method in more depth.
Object oriented programming is no longer used in game programming, for many reasons that's covered in those documents.