モジュール定数でゲームロジッククラス/ルーチンがゲーム定数/テーブルを使用できるようにする


8

いくつかの定義済み定数とチャート(XPチャート、商品のコストなど)があるゲームがあるとします。これらは、実行時に定義することも、起動時にファイルからロードすることもできます。問題は、これらのロジックルーチンが定数とチャートにどのようにアクセスするかです。

たとえば、グローバル変数を使用することもできますが、その場合、変数に依存するすべてのクラスがそれらと密に結合されます。

回答:


3

それは、あなたが話しているデータのタイプ(および量/サイズ)に本当に依存します。実行中にメモリに安全に保持できる小さなデータの場合は、静的クラスのようなものがお勧めです。

public static class Constants
{
    public static int[] Levels = { 0, 100, 200, 400, 800, 1600, 3200, 6400 }
}

このように、レベルXに到達するために必要なエクスペリエンスConstatns.Levels[X - 1];は簡単で、他のデータへのアクセスも簡単です。アイテムのコレクションが必要な場合は、ここにも追加できます。アイテムデータが大きすぎてメモリに格納できない場合は、次のことができます。また、静的クラス内にキャッシュロジックを実装します。

静的にすることで、1つのコピーがメモリに保持され、このクラスのすべてのクライアントが同じデータを取得することが保証されます。

これはクラスを「密結合」しますが、設計が本当にそれを必要とする場合、密結合は悪いことではありません。これは、アイテム統計とXPチャートの場合、これらを密結合することが合理的です。何かがそれを複雑にさせるまで、私はいつもそれをシンプルに保つようにしています。


3

各ピースを表すオブジェクトを作成し、そのオブジェクトを必要とする関数に渡します。これは他のデータと何の違いもありません-あなたはそれを渡します。


2

グローバルにアクセスできるクラスを1つ使用することをお勧めします。これを辞書と呼びましょう(フラッシュ用語を使用)。ディクショナリは基本的に、アプリケーション全体でアクセスできるようにする名前と値のペア(データ、ルール、定数)のリストです。名前(文字列)を使用すると、他のクラスはコードにインターフェイスされている値(数値、文字列、クラスなど)を取得できます。したがって、インスタンス化が以前にディクショナリで行われたことを除いて、実装は基本的にIOCです。辞書の変更などを聞くこともできます。


このアプローチは、デバッグのために良いです-することができますパイプhttpサーバおよび編集他のアプリからオンザフライ番号、または画面の値を印刷するなどの辞書
tenpn

0

Javaを使用している場合は、適切なオブジェクトに必要なデータを取得するために、データをXMLファイルに入れ、JAXBやsimple-xmlなどを使用することをお勧めします。


1
私が完全に間違っているわけではない場合、問題はデータを格納およびロードする方法ではなく、ロード後にデータへのアクセスを提供する方法です(ソフトウェア設計、OOP)。
bummzack 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.