1

LWJGLの練習問題として、簡単な三目並べゲームを作成しています。

ボードの正方形やxやoのピースなどのピースを描画するメソッドを作成する場合、ボードなどのさまざまなオブジェクトから呼び出すことができる1つのgraphicsLibクラスにそれらを配置する必要がありますか?または、各オブジェクトに独自の要素を描画するためのコードを含めることがベストプラクティスと見なされますか?私はコードを可能な限り拡張可能にすることを目指しています。

具体的には、SquareタイプのオブジェクトのコレクションであるBoardクラスがあり、Squareオブジェクトには列挙型の状態CLEAR、X、またはOが割り当てられます。次に、適切なメソッドを呼び出して描画する状態でswitchステートメントを実行します。正方形。各メソッドを独自のオブジェクトに配置する必要がありますか、それともさまざまな要素を描画するためのメソッドを提供する1つの大きなグラフィックスオブジェクト(たとえば、パブリッククラスgraphicsLib)を用意する必要がありますか?

これを整理するための最良の方法は何ですか?

4

1 に答える 1

1

可能な場合は、オブジェクト指向のアプローチを使用してください。私がこのようなものを書いているとき、私は通常、私のオブジェクトのそれぞれに少なくとも2つのメソッドを提供させます。

public void update(int delta);
public void render();

そうすれば、私のオブジェクトとそれらの多くのインスタンス化はすべて、自分自身を更新して自分自身をレンダリングする方法を知っています。update次に、Boardクラスのupdateメソッドとrenderメソッドがその子Squaresを呼び出すようにコードを構造化できますrender(以下の例を参照)。これにはいくつかの利点があります。

  1. オブジェクトの描画/更新は、そのオブジェクトの表現にまとまって近いです(関心の分離)。
  2. 「モデル」クラスが複雑になると、レンダリング関数はそのデータに近くなるため、APIは安定した状態に保たれます。描画用のクラスが1つある場合、描画クラスに大量のデータを渡す必要があり、モデルの変更に応じて、これらの各呼び出しをカスタマイズおよび変更する必要があると想像できます。
  3. すべてを描画するためのAPIを提供する巨大なクラスは1つではありません。これは大きくなり、すぐに扱いにくくなります。
  4. 親子関係に基づいて物事が描画されるタイミングの階層があるため、画家のアルゴリズムの構造が組み込まれています。renderあなたはそれぞれの親の方法であなたの兄弟を正しく管理する必要があるだけです。

階層レンダリングの例を次に示します。

public class Board {
    List<Square> squares;

    public render() {
        // Render your board first
        ...

        // Render child squares
        for (Square square : squares) {
            square.render();
        }
    }
}

ご想像のとおり、メインのゲームループは、ボードオブジェクトにレンダリングを指示するだけで、完了です。ボードが他に何をレンダリングする必要があるかについての深い知識を持っている必要はありません。

于 2013-01-11T17:36:43.520 に答える