Platform SDK: DirectX |
ここでは、ネットワーク ゲームまたは同様のアプリケーションにおける通信と、共通の状態の維持に関する一般的な原則について説明する。アプリケーションで DirectPlay を使用すると、以下に説明するいずれかのモデルを利用して、アプリケーション自体のデータを維持することができる。
ネットワークに対応したマルチプレーヤー ゲームを記述する際の主要な関心事は、セッションに参加しているすべてのコンピュータにどのようにして状態情報を伝えるかということである。セッションの状態は、ユーザーが自分のコンピュータ上で見るものと、ユーザーが実行できることを定義する。一般に、セッション状態は 2 つのものによって構成される。つまり、「環境」と、個別のユーザーまたはプレーヤーである。
注 : "ユーザー" と "プレーヤー" は一般的には同じ意味で使用されることが多いが、プレーヤーは DirectPlay アプリケーションの論理概念でもあることを覚えておくことが重要である。アプリケーションでは、2 人以上のプレーヤーによって表現される、あるユーザーをも許容する。
「環境」は、プレーヤーが対話したり、操作したりするオブジェクトによって構成される。たとえば、ダンジョン、レースコース、一連のチャット メッセージなどである。また、「環境」には、コンピュータによって制御されるプレーヤーが含まれる場合もある。
「環境」内では、各プレーヤーがプレーヤーの現在のプロパティを示す状態を保持する。これらのプロパティには、位置、速度、エネルギー、防具などが含まれる。
プレーヤーがセッションに最初に参加するときは、「環境」を含むセッションの現在の状態と、ほかのプレーヤーの状態をダウンロードする必要がある。
ユーザーが実行する動作と、ゲームの自然な進行により、セッション状態が変化する。このような変化が発生した場合、その変化をメッセージによってセッションに参加しているほかのコンピュータに伝える必要がある。セッション状態を更新する方法はいくつもあるが、これらの方法はいずれもコンピュータ間でのメッセージの送信に依存している。
セッションで状態データを維持するための方法は、主に 2 つある。1 つは、ピアツーピアと呼ばれる方法である。ピアツーピア セッションでは、セッションに参加しているすべてのコンピュータが「環境」およびすべてのプレーヤーについての完全な状態を保持する。あるコンピュータ上で状態の変更が発生したら、それをセッションに参加するほかのすべてのコンピュータに伝える必要がある。1 台のコンピュータが状態データを管理するわけではない。
セッション状態を維持するためのもう 1 つの方法は、クライアント/サーバーと呼ばれるものである。クライアント/サーバー セッションでは、1 台のコンピュータがサーバーとして指定され、そのコンピュータがゲームの完全な状態を維持し、衝突を解決する。セッション内のほかのすべてのコンピュータはクライアントとなる。各クライアントは、そのコンピュータに関連する情報だけを保持し、その情報をサーバーから受け取る。あるコンピュータが何かを変更したときは、その変更をサーバーに伝える。続いてサーバーは、その変更を伝えるべきクライアントを判断する。
DirectPlay を使用すると、ピアツーピア アプリケーションとクライアント/サーバー アプリケーションの両方を作成および管理することができる。DirectPlay は、ネットワークに対応したマルチプレーヤー アプリケーションを記述するために必要なツールをすべて提供する。これを実現するために、DirectPlay は、プレーヤーを管理し、プレーヤー間でメッセージを送信し、すべてのコンピュータ間で状態を自動的に伝達するためのサービスを提供する。
以下のトピックでは、DirectPlay セッションにおける 2 つの通信モデルについて説明する。