私が間違っていなければ、あなたは基本的に、ゲームを Model-View-Controller パラダイムに分割する方法を尋ねています。
簡単に言えば、モデルはゲームの状態です。オブジェクト指向の用語では、モデルはゲーム内のすべてのオブジェクトと考えることができます。
Controller は、すべての更新サイクルでゲームの状態 (この場合はすべてのゲーム オブジェクト) に適用される一連のルールです。これは、すべてのオブジェクトで update() と呼ばれるメソッドとして実装することも、更新が必要なすべてのオブジェクトを体系的に調べて、それらを更新するゲーム ループで呼び出される関数にすることもできます。コントローラはゲーム ループそのものと考えることができます。更新するすべてのものを呼び出し、それを画面に描画して繰り返します。いくつかの条件が満たされない限り、プログラムに何か他のことをするように指示します。このようにして、ネストされた 2 つの MVC 構造がほぼ完成します。1 つはメニューなどを通じてプログラムの流れを制御し、もう 1 つはゲーム自体専用です。
ビューは、ゲームのグラフィック表現にすぎません。これは画面上のテキストと同じくらい簡単ですが、あなたの場合は 2D グラフィックです。これを実装するには、各オブジェクトにグラフィカルな状態を直接またはカプセル化によって含めることもできます。ビューは、すべてのオブジェクトのグラフィカルな状態を照会し、それを画面に表示するだけです。これも、draw() と呼ばれるメソッドや、ゲーム ループから直接呼び出される別の体系的な関数など、オブジェクトごとに実装できます。一般的な方法は、'Sptite' などと呼ばれるオブジェクトを作成してグラフィック情報を保持し、描画されるすべてのゲーム オブジェクトに個人的なインスタンスを持たせることです。また、ビューはそれ自体がオブジェクトである必要はないことに注意してください。ゲームループで呼び出される単なる関数で十分です。ただし、ビューの操作 (ウィンドウ サイズなど) に直接影響する情報を格納する必要がある場合もありますが、その場合、ビューはオブジェクトにすることができます。コントローラーも同様です。
また、生活を簡素化するために、これらの区分をさらに細かく分割できることも覚えておいてください。例: コントローラーは、AI 処理、動きの更新、衝突チェックに分けることができます。ビューはゲーム オブジェクト ディスプレイと HUD に分離でき、モデルはすべてのオブジェクト + ゲーム オブジェクトから独立したすべての状態 (解像度、ウィンドウ サイズ、キー構成などのゲーム設定など) にすることができます。
これは少しやり過ぎかもしれませんし、おそらく余分な情報が含まれているかもしれませんが、うまくいけば、あなたの質問に答え、どこから始めるべきかについてのアイデアが得られることを願っています.