abstract game engine