Во первых, тебе нужно определится с тем, какой игровой движок ты хочешь. Для каких жанров ты будешь его использовать? 2d или 3d?
Потом выбираешь язык или платформу для твоего движка. Исходя из этого пишешь или используешь готовые: движки рендера (свой на opengl vulkan или directx, можешь использовать чужие такие как ogre), движки физики (если хорош в физике можешь написать свой, но можешь найти много движков в интернете: bullet, ODE, PhysX в конце концов), и так для каждой подсистемы.
Тут главное не превратить архитектуру в лапшу.
Если тебе нужно узнать больше, напиши в комментарии к этому ответу.