Adventures in C++ Game Architecture