設計の一例に過ぎないけど例えば

class Mode
{
public:
 virtual void ExeOneFrame() = 0;
};

class GameMode : public Mode
{
 int m_status;
public:
 virtual void ExeOneFrame();
};

そのswitch文は丸ごとg_mode->ExeOneFrame();とゆー感じに置き換えてしまって、
GameMode::ExeOneFrame()でm_statusの内容に応じてswitchする、という感じ

グローバルなgame_statusに各モードの推移状態を持たせるとだんだんややこしくなるので
各ローカルクラスでコードが完結するように心がけるとスッキリする。
TitleModeなりConfigModeなり適当に必要なモードを作ってg_modeを差し替えてモード変更。
デザパタで言うところのファサードとかストラテジーとかいうあたりになるのかな