【文献】
中嶋 謙互,オンラインゲームを支える技術 −壮大なプレイ空間の舞台裏,株式会社技術評論社,2011年 4月25日,初版第1刷,P.128-129,174,410
【文献】
金田 裕剛(外4名),ネットワークゲームの再利用を可能にする通信接続形態切替機構の実装と評価,電子情報通信学会技術研究報告,日本,社団法人電子情報通信学会,2005年 2月25日,Vol.104,No.692,P.293-298
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0013】
以下、ゲーム管理方法の一実施形態を
図1〜
図6に従って説明する。本実施形態は、複数のユーザ端末(クライアント)に対して、同期して進行するゲームコンテンツ(ロールプレイゲーム)を提供する場合を想定する。このゲーム進行は、時間経過とともにインクリメント(増加)されるステップ数により管理される。
【0014】
図1に示すように、本実施形態では、インターネット等のネットワークを介して接続された複数のユーザ端末10、管理サーバ20(ゲーム管理システム)を用いる。
ユーザ端末10は、ゲームを行なうユーザが利用するコンピュータ端末(スマートフォン等の情報処理端末)である。ユーザ端末10は、通信部、入力部や出力部(タッチパネルディスプレイ等)を備える。更に、ユーザ端末10は、CPU、RAM及びROM等からなる制御部(遅延処理部11、ゲーム処理部12)を備える。
【0015】
遅延処理部11は、継続的に、管理サーバ20との接続状態についてレイテンシ(データ転送等を要求してから、その結果が返送されるまでの遅延時間)を計測し、管理サーバ20に送信する。本実施形態では、継続的な計測として、定期的な計測を行なう場合を想定するが、計測の時間間隔として、「不定期」や「連続的」を用いることが可能である。更に、このゲーム処理部12は、管理サーバ20に送信したレイテンシに関するデータを保持する。
【0016】
ゲーム処理部12は、ゲームを行なうためのアプリケーションにより機能し、ゲーム進行を管理する。また、ゲーム処理部12は、ユーザの操作によるリクエストを管理サーバ20に送信したり、管理サーバ20から取得した指示に基づいてイベントを実行したりする。
【0017】
管理サーバ20は、各ユーザ端末10に対して、各種ゲームコンテンツを提供するサーバコンピュータである。
この管理サーバ20は、CPU、RAM及びROM等からなる制御部21、ユーザ情報記憶部22、接続状況記憶部23、ゲーム情報記憶部24を備える。制御部21は、管理プログラムを実行することにより、ユーザ管理部211、遅延管理部212、ゲーム管理部213、進行管理部214として機能する。
【0018】
ユーザ管理部211は、ゲームを利用するユーザを管理する処理を実行する。
遅延管理部212は、各ユーザ端末10との接続状況を管理する処理を実行する。具体的には、各ユーザ端末10からレイテンシ情報を取得し、接続状態を判定する。更に、遅延管理部212は、レイテンシが大きく、ゲーム進行上の支障があるユーザ端末10(クライアント異常)を判定するための閾値に関するデータを保持している。
【0019】
ゲーム管理部213は、各ユーザ端末10におけるゲーム進行を管理する処理を実行する。本実施形態では、ゲーム管理部213は、各ユーザ端末10に対するゲーム開始や、ユーザ端末10におけるリクエストの取得、ゲーム進行において生じたイベントの通知等を行なう。ここでは、ゲーム開始からの経過時間(ステップ数)に基づいて、ゲーム進行を管理する。具体的には、ステップ数に基づいて、各クライアントのユーザ端末10、管理サーバ20のゲーム進行を同期させる。また、ゲーム管理部213は、管理サーバ20におけるゲーム進行と矛盾するリクエストをユーザ端末10から取得した場合には、不正行為として対応する。
【0020】
進行管理部214は、管理サーバ20において、ゲーム進行を管理する処理を実行する。この進行管理部214は、この管理サーバ20におけるゲーム進行と、各ユーザ端末10におけるゲーム進行との同期を行なう。
【0021】
ユーザ情報記憶部22には、ゲームを利用するユーザに関するユーザ情報が記録されている。このユーザ情報には、ユーザが登録された場合に記録される。ユーザ情報には、クライアントID、属性に関するデータが含まれる。
【0022】
クライアントIDデータ領域は、各ユーザを特定するための識別子に関するデータが記録されている。
属性データ領域には、このユーザの属性に関するデータが記録されている。この属性には、例えばユーザが属するグループやスキル、所有するアイテムに関する情報が含まれる。
【0023】
接続状況記憶部23には、ユーザ端末10との接続状況を管理するための接続管理情報が記録される。この接続管理情報は、ユーザ端末10が管理サーバ20に接続した場合に登録される。接続管理情報には、グループID、クライアントID、レイテンシ、ステータスに関するデータが含まれる。
【0024】
グループID領域には、同期してゲームを行なっているグループを特定するための識別子に関するデータが記録される。
クライアントIDデータ領域には、このグループでゲームを行なっている各ユーザ端末10(クライアント)を特定するための識別子に関するデータが記録される。
【0025】
レイテンシデータ領域には、各クライアント(ユーザ端末10)との接続状況(ここでは、レイテンシ)に関するデータが記録される。
ステータスデータ領域には、各クライアントから取得したリクエストの有効性を判定するための情報が記録される。本実施形態では、レイテンシが閾値より大きいクライアントに対しては、このデータ領域に異常フラグを記録する。異常フラグが記録されているクライアントのユーザ端末10からのリクエストは無効とする。
【0026】
ゲーム情報記憶部24には、ゲームの進行状況に関するゲーム管理情報が記録される。このゲーム管理情報は、ゲームを行なう場合に登録され、ゲーム中に更新される。ゲーム管理情報には、グループID、クライアントID、利用ゲーム、進捗状況に関するデータが含まれる。
【0027】
グループID領域には、各ユーザが属しているグループを特定するための識別子に関するデータが記録される。
クライアントIDデータ領域には、このグループでゲームを行なっている各ユーザ端末10を特定するための識別子に関するデータが記録される。
【0028】
利用ゲームデータ領域には、このグループが利用しているゲームを特定するための識別子に関するデータが記録される。
進捗状況データ領域には、このゲームの進捗状況に関するデータが記録される。本実施形態では、ゲームの進行をカウントしたステップ数に対して、各クライアントにおけるイベント(例えば、オブジェクトの配置等の操作等)が記録される。
【0029】
以下、上記システム用いて、クライアントA〜Cのユーザ端末10が、一つのグループとしてゲームを行なう場合のゲーム管理方法を説明する。
(レイテンシ管理処理)
まず、
図2、
図5を用いて、レイテンシ管理処理を説明する。レイテンシ管理処理では、ゲーム開始前から終了まで、各クライアントのレイテンシを管理する。
【0030】
まず、ユーザ端末10は、定期的に、レイテンシ測定処理を実行する(ステップS1−1)。具体的には、ユーザ端末10の遅延処理部11は、管理サーバ20に対して、定期的にPingを送信する。Pingを受信した管理サーバ20は、Pingに対する応答を返信する。そして、遅延処理部11は、Ping送信から返信までの所要時間に基づいて、ネットワークレイテンシ(遅延時間)を測定する。そして、遅延処理部11は、測定してレイテンシを保持する。
図5では、クライアントA〜Cが、それぞれ時刻t11〜t13において、レイテンシを測定するためのPingを送信する。
【0031】
次に、ユーザ端末10は、レイテンシ送信処理を実行する(ステップS1−2)。具体的には、ユーザ端末10の遅延処理部11は、管理サーバ20に対して、レイテンシ情報を送信する。このレイテンシ情報には、ユーザ端末10を特定する情報や、このユーザ端末10において測定したレイテンシに関する情報を含める。
図5では、クライアントA〜Cが、それぞれ時刻t21〜t23において、レイテンシ情報を送信する。そして、ユーザ端末10は、次の測定タイミングで、レイテンシ測定処理(ステップS1−1)以降の処理を繰り返す。
【0032】
次に、管理サーバ20の制御部21は、レイテンシの取得処理を実行する(ステップS2−1)。具体的には、制御部21の遅延管理部212は、ユーザ端末10によって送信されたレイテンシ情報を取得する。
【0033】
次に、管理サーバ20の制御部21は、レイテンシの記録処理を実行する(ステップS2−2)。具体的には、制御部21の遅延管理部212は、接続状況記憶部23において、ユーザ端末10のクライアントIDに関連付けてレイテンシを記録する。ここで、初めてレイテンシを取得した場合には、遅延管理部212は、グループID,クライアントIDに関連づけて、レイテンシを記録した接続状況管理情報を生成し、接続状況記憶部23に登録する。一方、既に、このユーザ端末10についての接続状況管理情報が接続状況記憶部23に登録されている場合には、遅延管理部212は、この接続状況管理情報に最新のレイテンシを更新記録する。
【0034】
次に、管理サーバ20の制御部21は、クライアント異常かどうかについての判定処理を実行する(ステップS2−3)。具体的には、制御部21の遅延管理部212は、ユーザ端末10から取得したレイテンシと閾値とを比較する。レイテンシが閾値より大きい場合には、クライアント異常と判定する。
【0035】
クライアント異常でないと判定した場合(ステップS2−3において「NO」の場合)、管理サーバ20の制御部21は、レイテンシ管理処理を終了する。
一方、クライアント異常と判定した場合(ステップS2−3において「YES」の場合)、管理サーバ20の制御部21は、リクエスト無効化処理を実行する(ステップS2−4)。具体的には、制御部21の遅延管理部212は、接続状況記憶部23の接続状況管理情報に、ステータスとして異常フラグを記録し、レイテンシ管理処理を終了する。そして、ゲーム進行中において、ゲーム管理部213は、異常フラグが記録されたユーザ端末10からのリクエストを無視する。
【0036】
(ゲーム開始時処理)
次に、
図3、
図5を用いて、ゲーム開始時処理を説明する。この処理は、ユーザ端末10からゲームスタート要求を受信した場合(ゲーム開始時)に実行される。
【0037】
ここでは、まず、管理サーバ20の制御部21は、レイテンシの最大値の特定処理を実行する(ステップS3−1)。具体的には、制御部21のゲーム管理部213は、接続状況記憶部23から、同じグループIDが記録された接続状況管理情報を取得して、同じグループに属するユーザ端末10のレイテンシを特定する。この場合、異常フラグが記録されているレイテンシを無視する。そして、ゲーム管理部213は、特定したレイテンシの中で最大値を特定する。本実施形態では、クライアントA〜Cのレイテンシは、それぞれ「50ms」,「30ms」,「200ms」の場合を想定する。この場合、レイテンシの最大値は「200ms」となる。
【0038】
次に、管理サーバ20の制御部21は、最大値より大きいオフセットの決定処理を実行する(ステップS3−2)。具体的には、制御部21のゲーム管理部213は、レイテンシの最大値より大きいオフセット(猶予時間)を特定する。ここでは、最大値に対して所定値(例えば1.5)を乗算した値をオフセットとして決定する。具体的には、最大値(200ms)に対して、オフセットとして「300ms(=200*1.5)」が算出される。なお、オフセットの算出は、ゲーム管理部213に予め保持させた算出方法であれば、上述の定数倍に限定されるものではない。
【0039】
次に、管理サーバ20の制御部21は、オフセットの通知処理を実行する(ステップS3−3)。具体的には、制御部21のゲーム管理部213は、スタート時間情報をユーザ端末10に送信する。このスタート時間情報には、決定したオフセットに関する情報を含める。
【0040】
次に、管理サーバ20の制御部21は、ゲーム開始処理を実行する(ステップS3−4)。具体的には、制御部21の進行管理部214は、オフセット経過後に、管理サーバ20におけるゲームを開始する。
図5では、オフセット経過後の時刻t40において、ゲームを開始する。そして、進行管理部214は、一定時間毎にステップ数をインクリメントすることにより、ゲームを進行させる。
【0041】
一方、オフセットを受信したユーザ端末10は、スタート待機処理を実行する(ステップS4−1)。具体的には、ユーザ端末10のゲーム処理部12は、管理サーバ20から取得したオフセットから、遅延処理部11が保持しているレイテンシを差し引いて、ゲームのスタート時間を算出する。例えば、クライアントA〜Cにおいては、それぞれ250ms〔=300−50〕、270ms〔=300−30〕、100ms〔=300−200〕がスタート時間となる。そして、ゲーム処理部12は、このスタート時間を待機する。
【0042】
そして、スタート時間が経過した場合、ユーザ端末10は、ゲーム開始処理を実行する(ステップS4−2)。具体的には、ユーザ端末10のゲーム処理部12は、ゲームを開始する。
図5では、オフセット経過後の時刻t40において、クライアントA〜Cはゲームを開始する。そして、各ユーザ端末10のゲーム処理部12は、一定時間毎にステップ数をインクリメントすることにより、ゲームを進行させる。
【0043】
(リクエスト対応処理)
次に、
図4を用いて、リクエスト対応処理を説明する。ここでは、クライアントAのユーザ端末10からリクエストを取得した場合を想定する。
【0044】
まず、ユーザ端末10は、操作要求処理を実行する(ステップS5−1)。具体的には、ユーザ端末10のゲーム処理部12は、ユーザによる操作に基づいて、イベントを特定する。ここでは、イベントとして、オブジェクトの配置を想定する。この場合、クライアントAのゲーム処理部12は、クライアントAにおけるレイテンシを考慮したステップ数を算出する。ここでは、クライアントAにおける操作時のステップ数(ローカルステップ数)に対して、レイテンシをステップ単位時間で除算した値を加算した値(サーバステップ数)を算出する。そして、ゲーム処理部12は、管理サーバ20に対して、オブジェクト配置のリクエストを送信する。このリクエストには、オブジェクトの種類、配置位置、サーバステップ数に関するデータを含める。
図6では、クライアントAが、時刻t51において、オブジェクト配置のリクエストを送信する。
【0045】
次に、ユーザ端末10は、イベントまでの時間差の擬装処理を実行する(ステップS5−2)。具体的には、ユーザ端末10のゲーム処理部12は、イベント準備中(オブジェクトの配置の準備中)を示すアニメーション等を出力する。
【0046】
リクエストを取得した管理サーバ20の制御部21は、操作の検知処理を実行する(ステップS6−1)。具体的には、制御部21のゲーム管理部213は、クライアントAのユーザ端末10から、操作(オブジェクトの配置)についてのリクエストを取得する。
【0047】
次に、管理サーバ20の制御部21は、レイテンシの最大値の特定処理を実行する(ステップS6−2)。具体的には、制御部21のゲーム管理部213は、接続状況記憶部23において、同じグループIDが記録された接続状況管理情報を取得して、レイテンシの最大値を特定する。
【0048】
次に、管理サーバ20の制御部21は、レイテンシに基づいて指定ステップの決定処理を実行する(ステップS6−3)。具体的には、制御部21のゲーム管理部213は、レイテンシの最大値に対してマージンを加算したイベント実施時刻を算出する。そして、ゲーム管理部213は、イベント実施時刻をステップ単位時間で除算して、オブジェクトの配置を実施するステップ数を算出する。
【0049】
次に、管理サーバ20の制御部21は、指定ステップの通知処理を実行する(ステップS6−4)。具体的には、制御部21のゲーム管理部213は、クライアントA〜Cのユーザ端末10に対して、イベント通知を行なう。このイベント通知には、イベント内容(クライアントAにおけるオブジェクトの配置)、指定ステップ数に関するデータを含める。
図6では、管理サーバ20が、時刻t60において、イベント実施の指定ステップを通知する。
【0050】
次に、管理サーバ20の制御部21は、イベント待機処理を実行する(ステップS6−5)。具体的には、制御部21の進行管理部214は、指定ステップになるまで、イベントを待機する。
【0051】
次に、管理サーバ20の制御部21は、イベント実施処理を実行する(ステップS6−6)。具体的には、制御部21の進行管理部214は、指定ステップにおいて、管理サーバ20のゲーム進行において、イベント(オブジェクトの配置)をゲーム情報記憶部24に記録する。
図6では、進行管理部214は、時刻t70において、オブジェクトの配置を実施する。
【0052】
イベント通知を受信したユーザ端末10は、イベント待機処理を実行する(ステップS5−3)。具体的には、ユーザ端末10のゲーム処理部12は、管理サーバ20から指定ステップになるまで、イベントを待機する。
【0053】
次に、ユーザ端末10は、イベント実施処理を実行する(ステップS5−4)。具体的には、指定ステップが到来した場合、ユーザ端末10のゲーム処理部12は、擬装を終了し、オブジェクトの配置を実施する。
【0054】
また、クライアントB、クライアントCのユーザ端末10においても、ステップS5−3、S5−4と同様に、イベント待機処理(ステップS7−1)、イベント実施処理(ステップS7−2)を実行する。
図6では、時刻t70において、クライアントA〜Cは、オブジェクトの配置を実施する。
【0055】
上記実施形態によれば、以下のような効果を得ることができる。
(1)上記実施形態では、ユーザ端末10は、レイテンシ測定処理(ステップS1−1)、レイテンシ送信処理(ステップS1−2)を実行する。管理サーバ20の制御部21は、レイテンシの取得処理(ステップS2−1)、レイテンシの記録処理を実行する(ステップS2−2)。これにより、管理サーバ20において、各クライアントにおける遅延状況を把握することができる。特に、この処理が定期的に実行されるため、サーバ・クライアント間の通信状況の変化にも対応することができる。
【0056】
(2)上記実施形態では、進行管理部214は、管理サーバ20において、ゲーム進行を管理する処理を実行する。この進行管理部214は、管理サーバ20におけるゲーム進行と、各ユーザ端末10におけるゲーム進行との同期を行なう。また、ゲーム管理部213は、管理サーバ20におけるゲーム進行と矛盾するリクエストをユーザ端末10から取得した場合には、不正行為として対応する。これにより、管理サーバ20においてゲーム進行を管理しているので、各クライアントでの不正行為を監視することができる。更に、ユーザ端末10との通信障害が生じても、障害から復帰した場合、ゲームを継続することができる。
【0057】
(3)上記実施形態では、クライアント異常と判定した場合(ステップS2−3において「YES」の場合)、管理サーバ20の制御部21は、リクエスト無効化処理を実行する(ステップS2−4)。これにより、ゲーム進行において、遅延が大きいクライアントの影響を抑制することができる。
【0058】
(4)上記実施形態では、管理サーバ20の制御部21は、レイテンシの最大値の特定処理(ステップS3−1)、最大値より大きいオフセットの決定処理(ステップS3−2)、オフセットの通知処理(ステップS3−3)を実行する。これにより、遅延が大きいクライアントにおいても、同時期にゲームを開始することができる。そして、各クライアントのユーザ端末10、管理サーバ20において、ゲーム進行の同期を図ることができる。
【0059】
(5)上記実施形態では、ユーザ端末10は、操作要求処理を実行する(ステップS5−1)。この場合、ユーザ端末10のゲーム処理部12は、クライアントAにおけるレイテンシを考慮したステップ数を算出する。これにより、管理サーバ20のゲーム進行におけるステップ数を特定して、リクエストを行なうことができる。
【0060】
更に、ユーザ端末10は、イベントまでの時間差の擬装処理を実行する(ステップS5−2)。これにより、クライアントにおける操作(オブジェクトの配置操作)からイベント実施(オブジェクトの配置)までの時間を確保することができる。
【0061】
(6)上記実施形態では、管理サーバ20の制御部21は、レイテンシの最大値の特定処理(ステップS6−2)、レイテンシに基づいて指定ステップの決定処理(ステップS6−3)、指定ステップの通知処理(ステップS6−4)を実行する。これにより、ゲームを行なっているグループの中に、遅延が大きいクライアントが含まれている場合にも、同時期にイベントを実行することができる。
【0062】
なお、上記実施形態は以下のように変更してもよい。
・上記実施形態では、管理サーバ20の制御部21は、レイテンシに基づいて指定ステップの決定処理を実行する(ステップS6−3)。ここで、レイテンシが大きい場合、他のユーザ端末10における後続ステップでの操作に関するリクエストが、管理サーバ20に先着することがある。この状況を考慮して、指定ステップを決定するようにしてもよい。
【0063】
図7を用いて、この場合のリクエスト対応処理を説明する。
この場合、管理サーバ20の制御部21は、ステップS6−1、S6−2と同様に、操作の検知処理(ステップS8−1)、レイテンシの最大値の特定処理(ステップS8−2)を実行する。
【0064】
次に、管理サーバ20の制御部21は、前後ステップの反転があるかどうかについての判定処理を実行する(ステップS8−3)。具体的には、制御部21のゲーム管理部213は、リクエストに含まれるステップ数に基づいて、先に到着している後続ステップのリクエストがあるかどうかを確認する。先着リクエストに含まれるステップ数が、後着リクエストに含まれるステップ数が大きい場合には、前後ステップの反転があると判定する。
【0065】
前後ステップの反転がないと判定した場合(ステップS8−3において「NO」の場合)、管理サーバ20の制御部21は、ステップS6−3と同様に、レイテンシに基づいて指定ステップの決定処理を実行する(ステップS8−4)。
【0066】
一方、前後ステップの反転があると判定した場合(ステップS8−3において「YES」の場合)、管理サーバ20の制御部21は、先着リクエストに基づいて指定ステップの決定処理を実行する(ステップS8−5)。具体的には、制御部21のゲーム管理部213は、先着リクエストにおける指定ステップよりも後のステップを指定する。ここでは、レイテンシの最大値に対してマージンを加算したイベント実施時刻を算出する。そして、ゲーム管理部213は、イベント実施時刻をステップ単位時間で除算して、イベント(オブジェクトの配置)を実施するステップ数を算出する。ここで、ゲーム管理部213は、算出したステップ数が先着リクエストにおける指定ステップよりも大きいかどうかを確認する。先着リクエストにおける指定ステップよりも小さい場合には、ゲーム管理部213は、先着リクエストにおける指定ステップに対して、レイテンシの最大値及びマージンに対応するステップ数を加算したステップ数を指定ステップ数として特定する。
【0067】
次に、管理サーバ20の制御部21は、ステップS6−4〜S6−6と同様に、指定ステップの通知処理(ステップS8−6)〜イベント実施処理(ステップS8−8)を実行する。
【0068】
これにより、レイテンシの違いにより、後続ステップ数におけるリクエストが先着した場合にも、リクエストの到着順番で対応することができる。なお、後着リクエストに対応した場合、ゲーム進行上、不都合が生じる場合には、後着リクエストを無視することも可能である。
【0069】
・上記実施形態では、ユーザ端末10との接続状況を管理するための接続管理情報が記録される。接続管理情報には、グループID、クライアントID、レイテンシ、ステータスに関するデータが記録される。そして、各クライアントのレイテンシの最大値を用いて、ゲーム開始時刻や指定ステップを決定する。同期のために用いるレイテンシは、最大値に限定されるものではない。例えば、クライアント毎に、レイテンシ履歴を記録し、所定期間のレイテンシの平均値を用いるようにしてもよい。この場合には、平均値の最大値を用いて、同期を行なう。
【0070】
また、変動幅を一定値以下に抑えたような値を算出するようにしてもよい。この場合には、レイテンシ履歴に基づいて、統計的にレイテンシが含まれる値を用いる。例えば、レイテンシの平均値に対して標準偏差を加算した偏差値を用いる。この偏差値の最大値により、同期を行なう。
【0071】
・上記実施形態では、ユーザ端末10は、レイテンシ測定処理を実行する(ステップS1−1)。そして、ユーザ端末10は、レイテンシ送信処理を実行する(ステップS1−2)。これに代えて、管理サーバ20において、レイテンシを測定するようにしてもよい。この場合には、制御部21の遅延管理部212が、各クライアントのユーザ端末10に対して、Pingを送信して、レイテンシを計測する。そして、遅延管理部212は、各クライアントのユーザ端末10に対して、それぞれのレイテンシを送信する。
【0072】
・上記実施形態では、定期的にPingを送信することにより、レイテンシ測定処理を実行する(ステップS1−1)。レイテンシ測定のタイミングはこれに限定されるものではない。ここで、レイテンシ測定間隔を、ゲーム種類によって、変更してもよい。この場合には、遅延管理部212に、ゲーム種類に対応させて、レイテンシ測定間隔を記録したタイミング情報を保持させておく。そして、遅延管理部212は、利用するゲーム種類に対応したレイテンシ測定間隔を特定し、このレイテンシ測定間隔を用いて、レイテンシ測定処理を実行する。ゲーム種別によっては、ゲーム進行における同期の意義は異なる。例えば、厳格に同期が必要なゲームもあれば、同期の必要性が緩やかなゲームもある。そこで、ゲーム種別に応じた同期状況(同期の厳格性)を考慮して、リクエストに対応することができる。
更に、ゲームの画面に応じて、レイテンシ測定間隔を変更するようにしてもよい。この場合には、ゲーム進行のステップ数に関連付けて、レイテンシ測定間隔を記録しておく。
【0073】
また、レイテンシ測定間隔を、レイテンシの分散状況によって変更してもよい。この場合には、遅延管理部212に、同じグループに属するユーザ端末10のレイテンシの履歴を特定し、レイテンシの分布を算出する。そして、レイテンシの変化が少ない場合(変化幅が基準値以下の場合)には、レイテンシ測定間隔を大きくする。一方、レイテンシの変化が大きい場合(変化幅が基準値を超えている場合)には、レイテンシ測定間隔を小さくする。これにより、レイテンシの分散状況に応じて、レイテンシ評価の処理負担と正確性とのバランスを考慮して、ゲーム進行を図ることができる。
【0074】
また、レイテンシ測定間隔を、グループへの参加人数によって変更してもよい。この場合には、遅延管理部212に、参加人数に対応させて、レイテンシ測定間隔を記録したタイミング情報を保持させておく。そして、遅延管理部212は、利用するゲーム種類に対応したレイテンシ測定間隔を特定し、このレイテンシ測定間隔を用いて、レイテンシ測定処理を実行する。これにより、ゲーム参加人数の多少に応じて、効率的にゲーム進行を図ることができる。
【0075】
・上記実施形態では、クライアント異常と判定した場合(ステップS2−3において「YES」の場合)、管理サーバ20の制御部21は、リクエスト無効化処理を実行する(ステップS2−4)。クライアント異常を判定するための閾値を変更可能としてもよい。この場合には、ここで、閾値をゲーム種類によって変更してもよい。この場合には、ゲーム管理部213に、ゲーム種類に対応させて、閾値を記録した閾値情報を保持させておく。そして、ゲーム管理部213は、利用するゲーム種類に対応した閾値を特定し、この閾値を用いて、リクエスト無効化処理を実行する。ゲーム種別によっては、ゲーム進行における同期の意義は異なるが、ゲーム種別に応じた同期状況(同期の厳格性)を考慮して、リクエストに対応することができる。
更に、ゲームの画面に応じて、閾値を変更するようにしてもよい。この場合には、ゲーム進行のステップ数に関連付けて、閾値を記録しておく。
【0076】
また、閾値を、レイテンシの分散状況によって変更してもよい。この場合には、ゲーム管理部213に、同じグループに属するユーザ端末10のレイテンシの履歴を特定し、レイテンシの分布を算出する。そして、レイテンシの変化が少ない場合(変化幅が基準値以下の場合)には、閾値を大きくする。一方、レイテンシの変化が大きい場合(変化幅が基準値を超えている場合)には、閾値を小さくする。これにより、レイテンシの分散状況に応じてレイテンシの許容範囲を変更して、ゲーム進行を図ることができる。
【0077】
また、閾値を、グループにおけるゲーム参加人数によって変更してもよい。この場合には、ゲーム管理部213に、参加人数に対応させて、閾値を記録したタイミング情報を保持させておく。そして、ゲーム管理部213は、利用するゲーム種類に対応した閾値を特定し、この閾値を用いて、リクエスト無効化処理を実行する。この場合、ゲーム参加人数が多い場合には、閾値を上げて、許容範囲を広げる。これにより、ゲーム参加人数の多少に応じて、効率的にゲーム進行を図ることができる。
【0078】
・上記実施形態では、ユーザ端末10は、ゲーム開始処理を実行する(ステップS4−2)。ここでは、ゲームに参加する各クライアントのユーザ端末10において、同時期にゲームを開始し、ゲーム進行のステップ数の同期を行なう。ここで、ゲーム進行途中で、ステップ数の同期を図るようにしてもよい。この場合には、管理サーバ20において、途中調整処理を実行する。この場合には、ゲーム管理部213に、同期の要否を判定するための閾値(遅延ステップ数)に関するデータを保持させておく。
【0079】
図8を用いて、途中調整処理を説明する。
ここでは、まず、ユーザ端末10は、定期的に、ステップ数の送信処理を実行する(ステップS9−1)。具体的には、ユーザ端末10のゲーム処理部12は、管理サーバ20に対して、定期的に現在ステップ数を送信する。
【0080】
この場合、管理サーバ20の制御部21は、ステップ数の取得処理を実行する(ステップS9−2)。具体的には、制御部21のゲーム管理部213は、各クライアントのユーザ端末10から、定期的に現在ステップ数を取得する。
【0081】
次に、管理サーバ20の制御部21は、レイテンシに基づいてステップ数の補正処理を実行する(ステップS9−3)。具体的には、制御部21のゲーム管理部213は、現在ステップ数を取得したユーザ端末10におけるレイテンシを、接続状況記憶部23から取得する。次に、ゲーム管理部213は、レイテンシをステップ単位時間で除算した値を加算した値(遅延ステップ数)を算出する。そして、ゲーム管理部213は、現在ステップ数に遅延ステップ数を加算したローカルステップ数を算出する。
【0082】
次に、管理サーバ20の制御部21は、差分が閾値以上かどうかについての判定処理を実行する(ステップS9−4)。具体的には、制御部21のゲーム管理部213は、ユーザ端末10から取得した現在ステップ数を取得したときのサーバステップ数と、ローカルステップ数との差分を算出する。そして、ゲーム管理部213は、差分と閾値とを比較する。
【0083】
差分が閾値より小さいと判定した場合(ステップS9−4において「NO」の場合)、管理サーバ20の制御部21は、途中調整処理を終了する。
一方、差分が閾値以上と判定した場合(ステップS9−4において「YES」の場合)、管理サーバ20の制御部21は、レイテンシに基づいて現在ステップ数の補正処理を実行する(ステップS9−5)。具体的には、制御部21のゲーム管理部213は、現在のサーバステップ数に対して、遅延ステップ数を加算した修正ステップ数を算出する。
【0084】
次に、管理サーバ20の制御部21は、同期指示処理を実行する(ステップS9−6)。具体的には、制御部21のゲーム管理部213は、同期指示を、ステップ数を取得したユーザ端末10に対して送信する。この同期指示には、修正ステップ数に関するデータを含める。
【0085】
そして、同期指示を取得したユーザ端末10は、同期処理を実行する(ステップS9−7)。具体的には、ユーザ端末10のゲーム処理部12は、ゲーム進行を、管理サーバ20から取得した修正ステップ数までスキップする。これにより、管理サーバ20におけるゲーム進行と、クライアントにおけるゲーム進行とにズレが生じている場合にも、両者の同期を図ることができる。
【0086】
・上記実施形態では、クライアントA〜Cのユーザ端末10が一つのグループとしてゲームを行なう場合を想定した。ここで、レイテンシを考慮してグループを生成するようにしてもよい。ここでは、レイテンシが所定範囲内に含まれるクライアントをまとめたグループを構成するグループ化処理を行なう。
【0087】
図9を用いて、グループ化処理を説明する。
ここでは、まず、管理サーバ20の制御部21は、参加希望者のレイテンシの取得処理を実行する(ステップS10−1)。具体的には、制御部21のゲーム管理部213は、ゲーム参加希望のクライアントのレイテンシを、ユーザ端末10から取得する。
【0088】
次に、管理サーバ20の制御部21は、レイテンシの近いクライアントでグループ作成処理を実行する(ステップS10−2)。具体的には、制御部21のゲーム管理部213は、取得したレイテンシが所定範囲内に含まれるクライアントを特定する。そして、ゲーム管理部213は、特定したクライアントをゲーム情報記憶部24に、グループとして登録する。
【0089】
次に、管理サーバ20の制御部21は、
図3に示すゲーム開始時処理を実行する(ステップS10−3)。
これにより、レイテンシの違いが少ないクライアントによりゲームを行なうことができるので、ゲーム進行の同期が容易となる。
【0090】
なお、ここで、ユーザの属性(ゲームスキルやレベル等)を考慮して、グループ作成を行なってもよい。この場合には、管理サーバ20の制御部21は、ユーザ情報記憶部22に記録された属性に基づいて、共通するユーザ(グループ候補)を特定する。そして、管理サーバ20の制御部21は、グループ候補のユーザにおいて、グループ化処理を実行し、レイテンシの近いクライアントでグループ作成を行なう。