0

現在ゲームを実装していて、ネットワーク機能を追加したいと思っています。(つまり、アプリケーション/ゲームに参加してホストできるようにしたい)。これは私が最初に想像したよりもずっと難しいようです。この質問の目的は、これらの種類の実装に適した一般的なデータ構造の選択があるかどうかを尋ねることです。

私の主な問題は、現在、Gameクラスに次のような関数がたくさんあることです。

f() { if (host) doSomething() else doSomethingCompletelyDifferent() }

4

3 に答える 3

2

OOPを使用できます。残念ながら、使用するプログラミング言語を提供していません。

たとえば、C でプログラミングしている場合は、次のようにすることができます。

struct thefunctions {
    void (*stuff1)(void);
    void (*stuff2)(int);
    int (*get)(int);
};

struct thefunctions network {
    .stuff1 = doSomething;
}

struct thefunctions standalone {
    .stuff1 = doSomethingCompletelyDifferent;
}

struct thefunctions * funcs;

[...]

if (host) {
    funcs = &network;
} else {
    funcs = &standalone;
}

// now the structs are initialized. We can now use funcs->.

[...]

// If I am sure that stuff1 has been initialited properly, I can do
funcs->stuff1();

// If not, I should check first
if (funcs->stuff1) funcs->stuff1();

// or
assert(funcs->stuff1);
funcs->stuff1();
于 2012-05-27T21:49:23.213 に答える
0

個人的には、ネットワーク アプリの同じクラスにサーバー コードとクライアント コードを記述しません。おそらく、同じ Interface または基本クラスから派生した ServerGame クラスと ClientGame クラスを考えることができます。

他の特定のデータ構造については、作成しているプラ​​ットフォームと使用している言語に大きく依存すると思います (たとえば、.NET の世界では、WCF を利用できる場合があります)。多くの低レベルのネットワーク関連のものを隠すため)

于 2012-05-27T21:50:51.463 に答える
0

これにアプローチする最善の方法は、常にゲーム サーバーを用意することです。その後、ローカルでプレイしたり、自分のマシンや他の誰かがホストしているネットワーク ゲームに参加したりできます。

ジョブ 1 は、サーバーで必要な機能とクライアントで必要な機能を分割することです。一般に、それはクライアントの UI であり、サーバーのロジック/ストレージです。

データ構造はゲームに大きく依存します。切り替えがどれほど簡単かは、現在のコードによって異なりますが、クライアント サーバーが最適です。

于 2012-05-27T22:14:35.340 に答える