(57)【要約】【課題】ゲームシステムを構成する各ゲーム装置間においてより正確にタイミングをとることが可能な通信ゲームプログラムおよび通信ゲームシステムを提供する。【解決手段】ゲーム装置は、自機と他のゲーム装置との間の通信の遅延時間を測定し、開始時点データをメモリに記憶する。さらに、ゲーム装置は、他のゲーム装置が所定のイベントの実行を開始する時点を遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する。また、自機が所定のイベントの実行を開始する時点を示すデータ（補正データ）が他のゲーム装置から送信されてきたとき、開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する。そして、開始時点データにより示される時点が到来したときに所定のイベント（レースゲーム）を実行する。【選択図】図５
2007097838.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して複数のゲーム装置を接続してなる通信ゲームシステムに含まれるゲーム装置のコンピュータにおいて実行される通信ゲームプログラムであって、
自機と他のゲーム装置との間の通信に係る遅延時間を測定する測定ステップと、
自機が所定のイベントの実行を開始する時点を示す開始時点データをゲーム装置のメモリに記憶する記憶ステップと、
前記他のゲーム装置が所定のイベントの実行を開始する時点を前記遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する送信ステップと、
自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から送信されてきたとき、前記開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する補正ステップと、
前記開始時点データにより示される時点が到来したときに前記所定のイベントを実行するイベント実行ステップとを前記コンピュータに実行させる、通信ゲームプログラム。
【請求項２】
前記開始時点データは、自機が所定のイベントの実行を開始する時点を現在から当該時点までの残り時間に係るデータであり、
前記記憶ステップは、前記通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で実行され、
前記開始時点データを所定時間だけ減算した時間に係るデータとなるように当該開始時点データを更新する処理を所定時間毎に繰り返し実行する減算ステップを前記コンピュータにさらに実行させる、請求項１に記載の通信ゲームプログラム。
【請求項３】
遅延時間の測定が完了したことを前記他のゲーム装置に通知する完了通知ステップを前記コンピュータにさらに実行させ、
前記減算ステップは、全ての前記他のゲーム装置から遅延時間の測定が完了したことの通知を受信したこと、または、自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から初めて送信されてきたことに応じて実行が開始される、請求項２に記載の通信ゲームプログラム。
【請求項４】
前記記憶ステップにおいては、全ての前記他のゲーム装置から遅延時間の測定が完了したことの通知を受信したとき、予め定められた時点を示すデータが前記開始時点データとして前記メモリに記憶され、自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から初めて送信されてきたとき、当該データが前記開始時点データとして前記メモリに記憶される、請求項３に記載の通信ゲームプログラム。
【請求項５】
前記送信ステップは、前記通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後において、予め決められたタイミングで実行される、請求項１に記載の通信ゲームプログラム。
【請求項６】
前記送信ステップは、前記通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で所定時間毎に繰り返し実行される、請求項５に記載の通信ゲームプログラム。
【請求項７】
前記送信ステップにおいては、前記他のゲーム装置が所定のイベントの実行を開始する時点は、当該他のゲーム装置に関する遅延時間と前記開始時点データとに基づいて算出される、請求項１に記載の通信ゲームプログラム。
【請求項８】
前記補正ステップにおいては、前記他のゲーム装置から送信されてくるデータにより示される時点と、前記開始時点データにより示される時点との間の時点となるように補正後の時点が算出される、請求項１に記載の通信ゲームプログラム。
【請求項９】
ネットワークを介して複数のゲーム装置を接続してなる通信ゲームシステムであって、
各ゲーム装置は、
自機と他のゲーム装置との間の通信に係る遅延時間を測定する測定手段と、
自機が所定のイベントの実行を開始する時点を示す開始時点データをメモリに記憶する記憶制御手段と、
前記他のゲーム装置が所定のイベントの実行を開始する時点を前記遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する送信手段と、
自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から送信されてきたとき、前記開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する補正手段と、
前記開始時点データにより示される時点が到来したときに前記所定のイベントを実行するイベント実行手段とを備える、通信ゲームシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のゲーム装置間でゲームを実行するための通信ゲームプログラムおよび通信ゲームシステムに関し、より特定的には、ゲームにおいて何らかのイベントを開始するタイミングを各ゲーム装置において合わせるための通信ゲームプログラムおよび通信ゲームシステムに関する。
【背景技術】
【０００２】
従来、複数のゲーム装置をネットワークを介して接続することによって、同じ内容のゲームを複数人のプレイヤでプレイするゲームシステムがよく知られている。特に、昨今ではネットワークロールプレイングゲーム（以下ネットワークＲＰＧとする）が広くプレイされるようになっている。ネットワークＲＰＧでは、サーバを介して、あるいはピア・ツー・ピアで、複数のプレイヤが同じ内容のゲームをプレイすることができる。
【０００３】
ネットワークＲＰＧでは、最終的に同じ結果が得られれば、ゲームの進行状況、すなわち、ある時点において各ゲーム装置において表示される画像の内容が多少違っていても支障はきたさない。したがって、ネットワークのトラフィックの増減や（無線ＬＡＮの場合では）ノイズの影響等によって、データの送受信に要する時間にばらつきが出ても、大きな影響をきたすことはない。
【０００４】
一方、レースゲームやアクションゲームのようなゲームにおいては、正確なタイミングでゲーム操作を行うことや、より迅速にゲーム操作を行うことがプレイヤに要求される。そのため、このようなゲームでは、複数のプレイヤの間でゲーム処理に使用されるデータの内容とデータの受信タイミングにばらつきが出ると、各プレイヤ間でゲームの処理内容が異なってしまい、ゲームが成立しなくなる。そのため、レースゲームやアクションゲームのようなゲームをネットワークを介した通信システムで実行する場合には、各ゲーム装置でゲームの進行状況を必要に応じて一致させることが必要となる。例えばレースゲームであれば、レースのスタートのタイミングを各ゲーム装置で一致させる必要がある。
【０００５】
特許文献１には、親機および子機を含む複数のゲーム装置からなるシステムが記載されている。このシステムにおいては、各ゲーム装置が自機と他のゲーム装置との遅延時間を測定し、親機が各ゲーム装置の測定結果を収集する。親機は、収集した遅延時間を考慮に入れて、タイマーをリセットするまでの時間を子機毎に決定し、当該時間を各子機に送信する。これらの時間は、親機と各子機との遅延時間が考慮されているので、子機毎に異なる時間となっている。上記システムは、親機との遅延時間を子機毎に考慮して、タイマーをリセットするまでの時間を決定することによって、タイマーをリセットする時刻を各ゲーム装置で一致させるものである。これによって、ゲームを開始するタイミングを各ゲーム装置間で一致させることができる。
【特許文献１】特開２００１−１９８３６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載のシステムでは、親機は、自機と各子機との遅延時間に基づいてタイマーをリセットするまでの時間を子機毎に決定している。つまり、このシステムでは親機と各子機との間で同期をとるための処理が実行される。しかし、このシステムでは、各子機間では直接同期をとる処理は実行されない。したがって、各子機間でタイミングのずれが生じている場合には、このずれを補正することが難しい。そのため、上記システムでは、子機間での同期を正確にとることが難しいことから各装置全体についても同期を正確にとることができないおそれがあった。
【０００７】
それ故、本発明の目的は、通信遅延を含むネットワークを介したゲームシステムを構成する各ゲーム装置間においてできる限りゲームの処理内容を一致させることが可能な通信ゲームプログラムおよび通信ゲームシステムを提供することである。
【課題を解決するための手段】
【０００８】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００９】
第１の発明は、ネットワーク（１）を介して複数のゲーム装置（１０ａ〜１０ｃ）を接続してなる通信ゲームシステムに含まれるゲーム装置（１０）のコンピュータ（ＣＰＵコア２１等）において実行される通信ゲームプログラム（５１）である。通信ゲームプログラムは、測定ステップ（Ｓ１１）と、記憶ステップ（Ｓ１５、Ｓ１６）と、送信ステップ（Ｓ１９）と、補正ステップ（Ｓ２１）と、イベント実行ステップ（Ｓ３）とをコンピュータに実行させる。測定ステップは、自機と他のゲーム装置との間の通信に係る遅延時間を測定する。記憶ステップは、自機が所定のイベントの実行を開始する時点を示す開始時点データ（６４）をゲーム装置のメモリ（ＲＡＭ２４）に記憶する。送信ステップは、他のゲーム装置が所定のイベントの実行を開始する時点を遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータ（送信補正データ６５）を他のゲーム装置へ送信する。補正ステップは、自機が所定のイベントの実行を開始する時点を示すデータ（補正データ）が他のゲーム装置から送信されてきたとき、開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する。イベント実行ステップは、開始時点データにより示される時点が到来したときに所定のイベント（レースゲーム）を実行する。
【００１０】
第２の発明においては、開始時点データは、自機が所定のイベントの実行を開始する時点を現在から当該時点までの残り時間に係るデータでありってもよい。このとき、記憶ステップは、通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で実行される。また、通信ゲームプログラムは、開始時点データを所定時間だけ減算した時間に係るデータとなるように当該開始時点データを更新する処理を所定時間毎に繰り返し実行する減算ステップ（Ｓ１７）をコンピュータにさらに実行させる。
【００１１】
第３の発明においては、通信ゲームプログラムは、遅延時間の測定が完了したことを他のゲーム装置に通知する完了通知ステップ（Ｓ１２）をコンピュータにさらに実行させてもよい。このとき、減算ステップは、全ての他のゲーム装置から遅延時間の測定が完了したことの通知を受信したこと、または、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から初めて送信されてきたことに応じて実行が開始される。
【００１２】
第４の発明においては、記憶ステップにおいては、全ての他のゲーム装置から遅延時間の測定が完了したことの通知を受信したとき、予め定められた時点を示すデータが開始時点データとしてメモリに記憶され、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から初めて送信されてきたとき、当該データが開始時点データとしてメモリに記憶されてもよい。
【００１３】
第５の発明においては、送信ステップは、通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後において、予め決められたタイミングで実行されてもよい。
【００１４】
第６の発明においては、送信ステップは、通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で所定時間毎に繰り返し実行されてもよい。
【００１５】
第７の発明においては、送信ステップにおいて、他のゲーム装置が所定のイベントの実行を開始する時点は、当該他のゲーム装置に関する遅延時間と開始時点データとに基づいて算出されてもよい。
【００１６】
第８の発明においては、補正ステップにおいて、他のゲーム装置から送信されてくるデータにより示される時点と、開始時点データにより示される時点との間の時点となるように補正後の時点が算出されてもよい。
【００１７】
第９の発明は、ネットワーク（１）を介して複数のゲーム装置（１０ａ〜１０ｃ）を接続してなる通信ゲームシステムである。各ゲーム装置（１０）は、測定手段（ＣＰＵコア２１、遅延時間測定プログラム５２）と、記憶制御手段（ＣＰＵコア２１、開始時点設定プログラム５４）と、送信手段（ＣＰＵコア２１、補正データ送信プログラム５６）と、補正手段（ＣＰＵコア２１、補正プログラム５７）と、イベント実行手段（ＣＰＵコア２１、レースゲームプログラム５８）とを備えている。測定手段は、自機と他のゲーム装置との間の通信に係る遅延時間を測定する。記憶制御手段は、自機が所定のイベントの実行を開始する時点を示す開始時点データをメモリ（ＲＡＭ２４）に記憶する。送信手段は、他のゲーム装置が所定のイベントの実行を開始する時点を遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する。補正手段は、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から送信されてきたとき、開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する。イベント実行手段は、開始時点データにより示される時点が到来したときに所定のイベントを実行する。
【発明の効果】
【００１８】
第１の発明によれば、ゲームシステムに含まれる各ゲーム装置が本発明に係る通信ゲームプログラムを実行することによって、通信遅延を含むネットワークに接続された各ゲーム装置間で、所定のイベントの実行を開始する時点を補正して調整し合うことができる。すなわち、送信ステップにおいて、他のゲーム装置が所定のイベントの実行を開始する時点を示すデータが送信され、補正ステップにおいて、当該データに基づいて、開始時点データにより示される時点が補正される。これによって、各ゲーム装置における開始時点データの値が次第に一致するように収束する結果、所定のイベントの実行を開始する時点を正確に一致させることができる。すなわち、ゲームシステムを構成する各ゲーム装置間においてできる限り正確にゲーム処理内容を一致させることが可能となる。
【００１９】
第２の発明によれば、全てのゲーム装置において遅延時間の測定が完了した後に残り時間のカウントダウンが開始される。ここで、本発明では、遅延時間が測定できなければ、送信ステップにおいて送信されるデータ（補正データ）を送信することができない。そのため、遅延時間の測定が完了していないゲーム装置が存在した状態で他のゲーム装置がカウントダウンを開始すると、遅延時間の測定が完了していないゲーム装置は補正データを送信することができないので、補正データが一方向にしか送信されないこととなってしまう。その結果、イベントの開始タイミングを正確に一致させることができないおそれがある。これに対して、第２の発明では、全てのゲーム装置が補正データを送信することが可能となった状態でカウントダウンが開始されるので、各ゲーム装置間で確実に補正データを送信し合うことができ、イベントの開始タイミングをより正確に一致させることができる。
【００２０】
第３の発明によれば、全ての他のゲーム装置から遅延時間の測定が完了した通知を受信したこと、または、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から初めて送信されてきたことに応じて、減算ステップの実行が開始される。したがって、残り時間のカウントダウンは、確実に、全てのゲーム装置において遅延時間の測定が完了した後で開始される。これによって、各ゲーム装置間でより確実に補正データを送信し合うことができ、イベントの開始タイミングをより正確に一致させることができる。
【００２１】
第４の発明によれば、カウントダウンを開始する時点での残り時間の値をより正確に設定することができる。
【００２２】
第５の発明によれば、予め決められたタイミングが到来する度に補正データが他のゲーム装置へ送信される。そのため、他のゲーム装置に確実に補正データを送信することができるので、イベントの開始タイミングをより確実に一致させることができる。例えば、他のゲーム装置から補正データが送信されてきたことに応じて自機から補正データを送信するとした場合には、送信相手から補正データが送信されてこない限り送信相手に補正データを送信することができなくなってしまう。これに対して、第５の発明によれば、他のゲーム装置に確実に補正データを送信することができる。
【００２３】
第６の発明によれば、所定時間毎に補正データが送信されるので、他のゲーム装置に確実に補正データを送信することができ、イベントの開始タイミングをより確実に一致させることができる。
【００２４】
第７の発明によれば、他のゲーム装置が所定のイベントの実行を開始する時点は、当該他のゲーム装置に関する遅延時間と開始時点データとに基づいて算出される。したがって、他のゲーム装置が所定のイベントの実行を開始する時点をより正確に推測することができる。
【００２５】
第８の発明によれば、補正ステップによる補正後の時点は、他のゲーム装置から送信されてくるデータにより示される時点と、開始時点データにより示される時点との間の値となる。これによって、補正後の時点をより適切な値に補正することができるので、イベントの開始タイミングをより確実に一致させることができる。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照して、本発明の一実施形態に係るゲームシステムに含まれるゲーム装置の構成について説明する。図１は、本実施形態に係るゲームシステムの構成を示すブロック図である。図１に示すように、本ゲームシステムは、複数の携帯ゲーム装置（以下、単に「ゲーム装置」と呼ぶ。）１０ａ〜１０ｃがインターネット等のネットワーク１を介して接続される構成である。本実施形態では、例えば３つのゲーム装置１０ａ〜１０ｃによってゲームシステムが構成され、３人のプレイヤがゲーム装置を１つずつ使用するものとする。各ゲーム装置１０ａ〜１０ｃは、無線でネットワーク１に接続可能であるが、有線で接続されるものであってもよい。以下においては、３つのゲーム装置１０ａ〜１０ｃを、第１ゲーム装置１０ａ、第２ゲーム装置１０ｂ、および第３ゲーム装置１０ｃと呼ぶ。なお、３つのゲーム装置を特に区別する必要がない場合は、第１〜第３ゲーム装置１０ａ〜１０ｃを単にゲーム装置１０と記載することもある。
【００２７】
まず、ゲーム装置の構成について説明する。図２は、ゲームシステムに含まれるゲーム装置１０の外観図である。本実施形態では、第１〜第３ゲーム装置１０ａ〜１０ｃは全て同じで構成あり、全て図１に示す構成である。
【００２８】
以下、ゲーム装置の構成および動作を説明する。図２は、本実施形態に係るゲームシステムに含まれるゲーム装置の外観図である。図２において、ゲーム装置１０は、第１ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶表示装置）１１および第２ＬＣＤ１２を含む。ハウジング１３は上側ハウジング１３ａと下側ハウジング１３ｂとによって構成されており、第１ＬＣＤ１１は上側ハウジング１３ａに収納され、第２ＬＣＤ１２は下側ハウジング１３ｂに収納される。第１ＬＣＤ１１および第２ＬＣＤ１２の解像度はいずれも２５６ｄｏｔ×１９２ｄｏｔである。なお、本実施形態では表示装置としてＬＣＤを用いているが、例えばＥＬ（Ｅｌｅｃｔｒｏ  Ｌｕｍｉｎｅｓｃｅｎｃｅ：電界発光）を利用した表示装置など、他の任意の表示装置を利用することができる。また任意の解像度のものを利用することができる。
【００２９】
上側ハウジング１３ａには、後述する１対のスピーカ（図３の３０ａ、３０ｂ）からの音を外部に放出するための音抜き孔１８ａ、１８ｂが形成されている。
【００３０】
下側ハウジング１３ｂには、入力装置として、十字スイッチ１４ａ、スタートスイッチ１４ｂ、セレクトスイッチ１４ｃ、Ａボタン１４ｄ、Ｂボタン１４ｅ、Ｘボタン１４ｆ、Ｙボタン１４ｇ、Ｌボタン１４ＬおよびＲボタン１４Ｒが設けられている。また、さらなる入力装置として、第２ＬＣＤ１２の画面上にタッチパネル１５が装着されている。また、下側ハウジング１３ｂには、電源スイッチ１９や、メモリカード１７やスティック１６を収納するための挿入口も設けられている。
【００３１】
タッチパネル１５としては、例えば抵抗膜方式や光学式（赤外線方式）や静電容量結合式など、任意の方式のものを利用することができる。タッチパネル１５は、その表面をスティック１６で触れると、その接触位置に対応する座標データを出力する機能を有している。なお、以下ではプレイヤがタッチパネル１５をスティック１６で操作するものとして説明を行うが、スティック１６の代わりにペン（スタイラスペン）や指でタッチパネル１５を操作することももちろん可能である。本実施形態では、タッチパネル１５として、第２ＬＣＤ１２の解像度と同じく２５６ｄｏｔ×１９２ｄｏｔの解像度（検出精度）のものを利用する。ただし、必ずしもタッチパネル１５の解像度と第２ＬＣＤ１２の解像度が一致している必要はない。
【００３２】
メモリカード１７はゲームプログラムを記録した記録媒体であり、下部ハウジング１３ｂに設けられた挿入口に着脱自在に装着される。
【００３３】
次に、図３を参照してゲーム装置１０の内部構成を説明する。図３において、ハウジング１３に収納される電子回路基板２０には、ＣＰＵコア２１が実装される。ＣＰＵコア２１には、バス２２を介して、コネクタ２３が接続されるとともに、入出力インターフェース回路（図面ではＩ／Ｆ回路と記す）２５、第１ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２６、第２ＧＰＵ２７、ＲＡＭ２４、およびＬＣＤコントローラ３１が接続される。コネクタ２３には、メモリカード１７が着脱自在に接続される。メモリカード１７は、ゲームプログラムを記憶するＲＯＭ１７ａと、バックアップデータを書き換え可能に記憶するＲＡＭ１７ｂを搭載する。メモリカード１７のＲＯＭ１７ａに記憶されたゲームプログラムはＲＡＭ２４にロードされ、ＲＡＭ２４にロードされたゲームプログラムがＣＰＵコア２１によって実行される。ＲＡＭ２４には、ゲームプログラムの他にも、ＣＰＵコア２１がゲームプログラムを実行して得られる一時的なデータや、ゲーム画像を生成するためのデータが記憶される。Ｉ／Ｆ回路２５には、タッチパネル１５、右スピーカ３０ａ、左スピーカ３０ｂ、無線通信部３３、および図２の十字スイッチ１４ａやＡボタン１４ｄ等からなる操作スイッチ部１４が接続される。右スピーカ３０ａと左スピーカ３０ｂは、音抜き孔１８ａ、１８ｂの内側にそれぞれ配置される。
【００３４】
第１ＧＰＵ２６には、第１ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）２８が接続され、第２ＧＰＵ２７には、第２ＶＲＡＭ２９が接続される。第１ＧＰＵ２６は、ＣＰＵコア２１からの指示に応じて、ＲＡＭ２４に記憶されているゲーム画像を生成するためのデータに基づいて第１のゲーム画像を生成し、第１ＶＲＡＭ２８に描画する。第２ＧＰＵ２７は、同様にＣＰＵコア２１からの指示に応じて第２のゲーム画像を生成し、第２ＶＲＡＭ２９に描画する。第１ＶＲＡＭ２８および第２ＶＲＡＭ２９はＬＣＤコントローラ３１に接続されている。
【００３５】
ＬＣＤコントローラ３１はレジスタ３２を含む。レジスタ３２はＣＰＵコア２１からの指示に応じて０または１の値を記憶する。ＬＣＤコントローラ３１は、レジスタ３２の値が０の場合は、第１ＶＲＡＭ２８に描画された第１のゲーム画像を第１ＬＣＤ１１に出力し、第２ＶＲＡＭ２９に描画された第２のゲーム画像を第２ＬＣＤ１２に出力する。また、レジスタ３２の値が１の場合は、第１ＶＲＡＭ２８に描画された第１のゲーム画像を第２ＬＣＤ１２に出力し、第２ＶＲＡＭ２９に描画された第２のゲーム画像を第１ＬＣＤ１１に出力する。
【００３６】
無線通信部３３は、Ｉ／Ｆ回路２５と接続されている。無線通信部３３は、他のゲーム装置の無線通信部３３との間で、ゲーム処理に利用されるデータやその他のデータを送受信する機能を有しており、一例としてＩＥＥＥ８０２．１１の無線ＬＡＮ規格に則った無線通信機能を提供する。無線通信部３３は、受信したデータをＣＰＵコア２１に出力する。また、無線通信部３３は、ＣＰＵコア２１から指示されたデータを他のゲーム装置へ送信する。なお、ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）等のプロトコルや所定のブラウザを無線通信部３３やゲーム装置１０内の記憶部に実装することによって、ゲーム装置１０は、無線通信部３３を介してインターネット等のネットワークとの接続が可能となる。そして、ゲーム装置１０は、ネットワークを介して他のゲーム装置と通信を行うことによって、複数のゲーム装置で同じゲームを実行することが可能となる。また、ゲーム装置１０は、ネットワーク上で公開されている文書や画像等のデータを第１ＬＣＤ１１および第２ＬＣＤ１２で閲覧したり、ネットワーク上で公開されているゲームデータを用いてゲーム処理を実行したりすることもできる。
【００３７】
なお、上記のようなゲーム装置１０の構成は単なる一例に過ぎず、本発明は、ネットワークを介して他の装置と通信可能な任意のコンピュータシステムに適用することができる。また、本発明のゲームプログラムは、メモリカード１７などの外部記憶媒体を通じてコンピュータシステムに供給されるだけでなく、有線または無線の通信回線を通じてコンピュータシステムに供給されてもよいし、さらにはコンピュータシステム内部の不揮発性記憶装置に予め記録されていてもよい。
【００３８】
以下、本実施形態においてゲーム装置１０を用いて行われるゲームについて説明する。図４は、本実施形態におけるゲームのゲーム画面を示す図である。ゲーム装置１０の第２ＬＣＤ１２の画面には、当該ゲーム装置のプレイヤによって操作されるカート（レースカー）４１の他、他のゲーム装置のプレイヤによって操作されるオブジェクトであるカート４２および４３が表示される。本ゲームはレースゲームであり、各プレイヤはカートを操作してカートがゴールする順位を競って遊ぶ。
【００３９】
図４に示したようなレースゲームでは、カートなどのゲームオブジェクトがゴールする順位を競うというゲームの性質上、各ゲーム装置１０ａ〜１０ｃの間でレースのスタート時刻ができるだけ一致させる必要がある。以下では、レースをスタートする時点をできるだけ一致させる処理について主に説明する。なお、本実施形態では、レースゲームにおけるレース開始のタイミングを各ゲーム装置間で一致させるための処理を例として説明するが、本発明は、ゲーム中に実行されるイベントを開始するタイミングを一致させるために適用することが可能である。
【００４０】
まず、レースゲームが開始されるまでに各ゲーム装置１０ａ〜１０ｃにおいて実行される処理の概要を、図５および図６を用いて説明する。図５は、レースゲームが開始されるまでの処理の概要を示す図である。レースをスタートする前に、各ゲーム装置１０ａ〜１０ｃは、まず、自機と他のゲーム装置との間のネットワークを介した通信における遅延時間の測定処理を実行する（図５に示す状態（ａ）なおゲーム装置間に存在するネットワークを示す図は省略してある。）。遅延時間は、自機と他のゲーム装置との間におけるネットワークを介したデータの送受信に要する時間である。第１ゲーム装置１０ａを例にとって説明すると、まず、第１ゲーム装置１０ａは他のゲーム装置１０ｂおよび１０ｃへテストデータを送信する。テストデータは、送信元のゲーム装置を示すデータが少なくとも含まれていればどのような内容であってもよい。他のゲーム装置１０ｂおよび１０ｃは、第１ゲーム装置１０ａからテストデータを受信したことに応じて、第１ゲーム装置１０ａへ返信用のデータを送信する。第１ゲーム装置１０ａは、テストデータを送信してから返信用のデータを受信するまでの時間を他のゲーム装置毎に測定する。ここでは、遅延時間は、測定された時間を２で割ることによって得られる。
【００４１】
以上のようにして、第１ゲーム装置１０ａは、第１ゲーム装置１０ａと第２ゲーム装置１０ｂとの間の遅延時間、および、第１ゲーム装置１０ａと第３ゲーム装置１０ｃとの間の遅延時間を算出する。第２および第３ゲーム装置１０ｂおよび１０ｃは、第１ゲーム装置１０ａにおける遅延時間の測定処理と同様の処理を行う。すなわち、第２ゲーム装置１０ｂは、第２ゲーム装置１０ｂと第１ゲーム装置１０ａとの間の遅延時間、および、第２ゲーム装置１０ｂと第３ゲーム装置１０ｃとの間の遅延時間を算出する。同様に、第３ゲーム装置１０ｃは、第３ゲーム装置１０ｃと第１ゲーム装置１０ａとの間の遅延時間、および、第３ゲーム装置１０ｃと第２ゲーム装置１０ｂとの間の遅延時間を算出する。なお、本実施形態においては、各ゲーム装置１０ａ〜１０ｃは、フレーム時間（１／６０秒）を単位として遅延時間を測定する。すなわち、各ゲーム装置１０ａ〜１０ｃは、１／６０秒単位で時間をカウントするタイマーを内蔵し、このタイマーの値を用いて時間を測定する。
【００４２】
なお、本実施形態においては、遅延時間の測定処理は、テストデータを送信してから返信用のデータを受信するまでの時間を１回だけ測定するものであったが、他の実施形態においては、遅延時間の測定精度を高めるべく、当該測定を複数回繰り返すようにしてもよい。例えば、ゲーム装置１０は、当該測定を１０回繰り返し、１０回の測定結果の平均時間を算出するようにしてもよい。そして、算出した平均時間を２で割った結果を遅延時間としてもよい。これによって、遅延時間をより正確に測定することができる。
【００４３】
遅延時間の測定処理が終了すると、各ゲーム装置１０ａ〜１０ｃは、遅延時間の測定処理が完了した旨の通知（完了通知）を他のゲーム装置へ送信する（図５に示す状態（ｂ）および状態（ｃ））。ここで、遅延時間は各ゲーム装置間で異なるので、遅延時間の測定処理が完了するタイミングはゲーム装置毎に異なる。つまり、完了通知を他のゲーム装置へ送信するタイミングはゲーム装置毎に異なる。図５においては、第１ゲーム装置１０ａが他のゲーム装置１０ｂおよび１０ｃへ完了通知を最初に送信し（状態（ｂ））、次に、第２ゲーム装置１０が他のゲーム装置１０ａおよび１０ｃへ完了通知を送信したものとする。
【００４４】
次に、各ゲーム装置１０ａ〜１０ｃは、レース開始までのカウントダウンを開始するか否かを判定する。この判定は、具体的には、自機が遅延時間の測定処理を完了しており、かつ、他の全てのゲーム装置から完了通知を受信しているか否かによって行われる。図５を例にとって説明すると、状態（ｃ）において、第３ゲーム装置１０ｃは、遅延時間の測定処理を完了しているとする。また、第３ゲーム装置１０ｃは、他の全てのゲーム装置１０ａおよび１０ｂから完了通知を受信している。したがって、このとき第３ゲーム装置１０ｃは、レース開始までのカウントダウンを開始すると判定する（状態（ｃ））。以上のように、本実施形態においては、第３ゲーム装置１０ｃは、自己が送信した完了通知が他のゲーム装置１０ａおよび１０ｂで受信されたか否かによらずに、全てのゲーム装置１０ａ〜１０ｃが遅延時間の測定処理を完了したことを認識することができる。
【００４５】
カウントダウンを開始すると判定した第３ゲーム装置１０ｃは、レース開始時点までの残り時間を示すカウンタの減算を開始する。ここで、カウンタは、予め定められた所定時間から１フレーム時間ずつ減算されていく。また、第３ゲーム装置１０ｃは、他のゲーム装置１０ａおよび１０ｂへ補正データを送信する（状態（ｄ））。ここで、補正データとは、上記カウンタの値を補正するためのデータである。補正データの内容の詳細については後述する。一方、他のゲーム装置１０ａおよび１０ｂは、第３ゲーム装置１０ｃから補正データを受信したことによって、レース開始までのカウントダウンを開始する（状態（ｄ））。なお、ここでは第３ゲーム装置１０ｃが最初に他の全てのゲーム装置１０ａおよび１０ｂから完了通知を受信することとしたが、もちろんネットワークの状況による遅延時間によって、例えば第１ゲーム装置１０ａが最初に完了通知を受信することもありうる。すなわち、特定のゲーム装置が補正データを最初に送信するのではなく、特定されない、いずれかのゲーム装置が最初に補正データを送信するようにしたので、ネットワークの状況に左右されずに、補正データを的確に生成することができる。
【００４６】
ここで、他のゲーム装置１０ａおよび１０ｂにおいては、カウンタのスタート時の値は、上記予め定められた所定時間とは異なり、当該所定時間を補正データにより補正した値となる。以上のように、本実施形態においては、他の全てのゲーム装置から完了通知を受信したゲーム装置以外のゲーム装置は、他の全てのゲーム装置から完了通知を受信したゲーム装置から送信されてくる補正データを受信したことに応じてカウントダウンを開始する。これによって、全てのゲーム装置１０ａ〜１０ｃにおいてカウントダウンが開始されたこととなる。
【００４７】
カウントダウンを開始したゲーム装置１０は、所定時間間隔で補正データを他のゲーム装置へ送信する。したがって、全ゲーム装置１０ａ〜１０ｃにおいてカウントダウンが開始された後においては、各ゲーム装置１０ａ〜１０ｃは補正データを互いに送信し合うこととなる（状態（ｅ））。なお、本実施形態では、ゲーム装置１０は、１フレームにつき１回、他のゲーム装置へ補正データを送信するものとする。したがって、各フレームにおいて、第１ゲーム装置１０ａは第２ゲーム装置１０ｂおよび第３ゲーム装置１０ｃへ、第２ゲーム装置１０ｂは第１ゲーム装置１０ａおよび第３ゲーム装置１０ｃへ、第３ゲーム装置１０ｃは第１ゲーム装置１０ａおよび第２ゲーム装置１０ｂへ、補正データを送信する。
【００４８】
また、各ゲーム装置１０ａ〜１０ｃは、他のゲーム装置から補正データを受信すると、自身のカウンタの値を当該補正データに基づいて補正する。したがって、カウントダウンが開始された後、カウンタに対しては、１フレームにつき１フレーム時間ずつ減算されるとともに、他のゲーム装置から送信されてきた補正データに基づいて補正される処理が繰り返される。この処理は、カウンタの値が０になるまで繰り返される。そして、カウンタの値が０になると、ゲーム装置１０はレースゲームを開始する。
【００４９】
以上のように、本実施形態においては、ゲーム装置１０のカウンタの値は、他の全てのゲーム装置から送信されてくる補正データによって補正される処理が繰り返される。この処理が繰り返されることによって、各ゲーム装置１０ａ〜１０ｃにおける各カウンタの値は、次第に収束していく（値が一致していく）。したがって、カウンタの値が０になるタイミングは各ゲーム装置１０ａ〜１０ｃでほぼ一致し、レースゲームを開始するタイミングを正確に一致させることができる。以下、補正データによるカウンタの補正処理について説明する。
【００５０】
図６は、カウンタの補正処理を説明するための図である。なお、本実施形態において補正データの送信処理は毎フレーム実行されるが、図６の説明においては説明が煩雑になることを避け説明を簡単にする目的で、各ゲーム装置１０ａ〜１０ｃの間で送受信される補正データの一部のみを示し、その他の補正データを無視して説明を行う。また、図６においては、カウントの初期値を１００（フレーム）とし、カウントダウンを最初に開始するゲーム装置を第１ゲーム装置１０ａとする。第１ゲーム装置１０ａは、残り１００フレーム時間の時点において第２ゲーム装置１０ｂへ補正データを送信するとともに、第３ゲーム装置１０ｃへ補正データを送信するものとする。第２ゲーム装置１０ｂは、残り９０フレーム時間の時点において第３ゲーム装置１０ｃへ補正データを送信するものとする。第３ゲーム装置１０ｃは、残り９３フレーム時間の時点において第１ゲーム装置１０ａへ補正データを送信するものとする。
【００５１】
ここで、補正データは、受信側のゲーム装置が補正データを受信した時点における、レース開始までの残り時間を示すデータである。したがって、各ゲーム装置は、自己のカウンタの値と、補正データの受信先のゲーム装置と自己との間の通信の遅延時間とに基づいて、補正データの内容を決定する。例えば、第１ゲーム装置１０ａと第２ゲーム装置１０ｂとの間の遅延時間が２フレーム時間であるとし、第１ゲーム装置１０ａが残り１００フレームの時点において第２ゲーム装置１０ｂへ補正データを送信する場合を考える。この場合、ゲーム装置１０ａは、送信すべき補正データが第２ゲーム装置１０ｂで受信される時点における残り時間を推測する。具体的には、残り時間（１００フレーム時間）から遅延時間（２フレーム時間）を減算した値を補正データとする。すなわち、この場合、第１ゲーム装置１０ａは、「９８フレーム時間」を示す補正データを第２ゲーム装置１０ｂへ送信する。第２ゲーム装置１０ｂは、この補正データを受信することによってカウントダウンを開始する。すなわち、９８フレーム時間からカウントダウンを開始する。また、第１ゲーム装置１０ａと第３ゲーム装置１０ｃとの間の遅延時間を７フレーム時間とすれば、残り１００フレーム時間において第１ゲーム装置１０ａから第３ゲーム装置１０ｃへ送信される補正データは、「９３フレーム時間」を示すデータとなる。なお、この補正データを受信した第３ゲーム装置１０ｃは、９３フレーム時間からカウントダウンを開始する。
【００５２】
以上のようにして、補正データの送信側のゲーム装置においては、受信側のゲーム装置が補正データを受信する時点における残り時間が推測され、推測された残り時間の情報が補正データとして送信される。しかし、実際には、各ゲーム装置間の通信の遅延時間が正確に測定されるとは限らず、また、遅延時間は時間経過に応じて変化し、測定時と補正データの送信時とで遅延時間が異なることが考えられる。そのため、受信側のゲーム装置が補正データを受信した時点における残り時間が、当該補正データにより示される残り時間と一致しないことが考えられる。例えば、図６においては、第１ゲーム装置１０ａから第３ゲーム装置１０ｃへ送信される補正データが４フレーム時間で送信されている。つまり、「９３フレーム時間」を示す補正データが、実際には残り９５フレーム時間の時点で受信されている（図６参照）。このとき、第３ゲーム装置１０ｃは、正しくは残り９５フレーム時間であるにもかかわらず、９３フレーム時間からカウントダウンを開始してしまうことになり、カウントダウンを開始した時点で２フレーム時間分のずれが生じている。このように、遅延時間を測定し、遅延時間を考慮した補正データを用いてカウントダウンを実行するようにしても、補正データを１つの装置から１回のみ送信するだけでは、レース開始のタイミングを各ゲーム装置間で正確に一致させることができないおそれがある。
【００５３】
そこで、本実施形態においては、各ゲーム装置が補正データを互いに送信し合うようにしている。これによって、各ゲーム装置におけるカウンタ値の差が小さくなり、カウンタ値が０になるタイミングを一致させることができる。以下、この理由を図６を用いて説明する。
【００５４】
図６においては、残り９３フレーム時間において、第３ゲーム装置１０ｃから第１ゲーム装置１０ａへ補正データが送信されている。この時点で、第３ゲーム装置１０ｃは、正しくは残り９３フレーム時間であるにもかかわらず、残り９１フレーム時間と認識している。上述したように、カウントダウンを開始した時点で２フレーム時間分のずれが生じたためである。このとき、第３ゲーム装置１０ｃと第１ゲーム装置１０ａとの遅延時間は４フレーム時間であるとすると、この時点で第３ゲーム装置１０ｃから送信される補正データは、残り（９１−４＝）８７フレーム時間を示すデータとなる。
【００５５】
第３ゲーム装置１０ｃからの補正データは、測定された遅延時間通りに４フレーム時間で第１ゲーム装置１０ａに受信されたとする。つまり、第１ゲーム装置１０ａは、残り８９フレーム時間の時点において上記補正データを受信する。一方、この補正データは、残り８９フレーム時間を示している。ここで、第１ゲーム装置１０ａは、この補正データを用いて残り時間を補正する。具体的には、ゲーム装置１０ａは、補正データにより示される残り時間と、自己のカウンタにより示される残り時間との平均値を算出し、新たなカウンタ値とする。図６の例では、第３ゲーム装置１０ｃからの補正データにより示される残り時間は「８７フレーム時間」であり、第１ゲーム装置１０ａのカウンタにより示される残り時間は「８９フレーム時間」である。したがって、補正後のカウンタ値は、８８フレーム時間を示すこととなる。一方、第１ゲーム装置１０ａにおいて補正データが受信された時点において、第３ゲーム装置１０ｃのカウンタ値は、残り８７フレーム時間を示している。したがって、この補正データにより補正が行われる前においては第１ゲーム装置１０ａのカウンタ値と第３ゲーム装置１０ｃのカウンタ値とでは２フレーム時間分の差があったのに対して、補正後においては差が１フレーム時間となっている。つまり、２つのゲーム装置におけるカウンタ値の差が小さくなっている。
【００５６】
以上のように、本実施形態においては、各ゲーム装置が補正データを互いに送信し合うことによって、各ゲーム装置におけるカウンタ値の差が収束していく（次第に小さくなっていく）。これによって、カウンタ値が０になるタイミング、すなわち、レースを開始するタイミングを正確に一致させることができる。
【００５７】
また、本実施形態においては、各ゲーム装置は、補正データを複数のゲーム装置から受信する。これによって、ある補正データが、推測した残り時間の時点からずれて受信されたとしても、他の補正データによってそのずれを緩和したり、そのずれを打ち消したりすることができる。以下、この理由を図６を用いて説明する。
【００５８】
図６においては、残り９０フレーム時間において、第２ゲーム装置１０ｂから第３ゲーム装置１０ｃへ補正データが送信されている。なお、第２ゲーム装置１０ｂと第３ゲーム装置１０ｃとの遅延時間は４フレーム時間と測定されたものとし、当該補正データは、測定された遅延時間通りに４フレーム時間で第３ゲーム装置１０ｃに受信されたとする。ここで、第２ゲーム装置１０ｂからの補正データを受信した時点において、第３ゲーム装置１０ｃにおけるカウンタは８４フレーム時間を示している（図６参照）。つまり、第３ゲーム装置１０ｃは、残り時間を８４フレーム時間であると認識している。上述したように、カウントダウンを開始した時点で２フレーム時間分のずれが生じたためである。これに対して、第２ゲーム装置１０ｂからの補正データは、残り８６フレーム時間を示している。したがって、第３ゲーム装置１０ｃは、この補正データを用いて残り時間を補正することができる。図６の例では、第２ゲーム装置１０ｂからの補正データにより示される残り時間は「８６フレーム時間」であり、第３ゲーム装置１０ｃのカウンタにより示される残り時間は「８４フレーム時間」であるので、補正後のカウンタ値は、残り８５フレーム時間を示すこととなる。つまり、２フレーム時間分のずれが１フレーム分のずれに緩和されている。
【００５９】
以上のように、本実施形態においては、複数のゲーム装置から補正データを受信することによって、ある１つのゲーム装置からの補正データによってカウンタ値にずれ（正しいと判断された残り時間に対するずれ）が生じても、他のゲーム装置からの補正データによってそのずれを緩和したり打ち消したりすることができる。また、本実施形態では、１つのゲーム装置からも複数回補正データを受信するので、ゲーム装置は、ある時点で受信した補正データによってカウンタ値にずれが生じても、その後に受信した補正データによってそのずれを緩和したり打ち消したりすることができる。そのため、カウンタ値が０になるタイミング、すなわち、レースを開始するタイミングを正確に一致させることができる。
【００６０】
次に、本実施形態に係るゲームプログラムを実行することによってゲーム装置１０において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図７を用いて説明する。図７は、ゲーム装置１０のＲＡＭ２４に記憶される主なデータを示す図である。図７に示すように、ＲＡＭ２４には、ゲームプログラム５１およびゲームデータ６１が記憶される。
【００６１】
ゲームプログラム５１には、遅延時間測定プログラム５２、完了通知プログラム５３、開始時点設定プログラム５４、残り時間カウントプログラム５５、補正データ送信プログラム５６、補正プログラム５７、およびレースゲームプログラム５８等が含まれる。なお、ゲームプログラム５１には、上記の他、他のゲーム装置から送信されてくるデータを受信する処理を実行するためのプログラム等が含まれる。
【００６２】
遅延時間測定プログラム５２は、自機と他のゲーム装置との間の通信の遅延時間を測定する処理を実行するためのプログラムである。完了通知プログラム５３は、遅延時間の測定が完了したことを他のゲーム装置に通知する処理を実行するためのプログラムである。開始時点設定プログラム５４は、自機がレースを開始するまでの残り時間を示すカウンタ値（後述する開始時点データ）を設定する処理を実行するためのプログラムである。残り時間カウントプログラム５５は、上記カウンタ値を所定フレーム時間だけ減算した時間となるように更新する処理を実行するためのプログラムである。補正データ送信プログラム５６は、他のゲーム装置が所定のイベントの実行を開始するまでの残り時間を他のゲーム装置毎に算出し、当該残り時間を示す補正データを他のゲーム装置へ送信する処理を実行するためのプログラムである。補正プログラム５７は、補正データが他のゲーム装置から送信されてきたとき、自機のカウンタ値により示される残り時間を当該補正データに基づいて補正する処理を実行するためのプログラムである。レースゲームプログラム５８は、プレイヤによるゲーム操作に応じてレースゲームを進行させる処理を実行するためのプログラムである。
【００６３】
一方、ゲームデータ６１には、遅延時間データ６２、完了通知データ６３、開始時点データ６４、送信補正データ６５、および受信補正データ６６が含まれる。なお、ＲＡＭ２４には、図７に示すデータの他、各プレイヤによって操作されるカートに関するデータ（カートの位置や速度や画像データ）等、レースゲームに必要なデータが記憶される。なお、図７では、第１ゲーム装置１０ａのＲＡＭ２４に記憶されるデータを例として説明するが、他のゲーム装置１０ｂおよび１０ｃにおいても同様のデータがＲＡＭ２４に記憶される。
【００６４】
遅延時間データ６２は、自機と他のゲーム装置との間の通信における遅延時間を示すデータである。遅延時間データ６２には、第１ゲーム装置１０ａと第２ゲーム装置１０ｂとの間の遅延時間を示す第１遅延時間データ６２ａ、および、第１ゲーム装置１０ａと第３ゲーム装置１０ｃとの間の遅延時間を示す第２遅延時間データ６２ｂが含まれる。なお、第２ゲーム装置１０ｂに記憶される遅延時間データ６２においては、第１遅延時間データ６２ａは第２ゲーム装置１０ｂと第１ゲーム装置１０ａとの間の遅延時間を示し、第２遅延時間データ６２ｂは第２ゲーム装置１０ｂと第３ゲーム装置１０ｃとの間の遅延時間を示す。同様に、第３ゲーム装置１０ｃに記憶される遅延時間データ６２においては、第１遅延時間データ６２ａは第３ゲーム装置１０ｃと第１ゲーム装置１０ａとの間の遅延時間を示し、第２遅延時間データ６２ｂは第３ゲーム装置１０ｃと第２ゲーム装置１０ｂとの間の遅延時間を示す。なお、遅延時間データ６２は、遅延時間の測定処理によってＲＡＭ２４に記憶される。遅延時間の測定処理は、各ゲーム装置１０ａ〜１０ｃにおいてそれぞれ独立して実行されるので、各ゲーム装置によって測定結果は異なる。例えば、第１ゲーム装置１０ａに記憶される第１遅延時間データ６２ａと、第２ゲーム装置１０ｂに記憶される第１遅延時間データ６２ａとはともに、第１ゲーム装置１０ａと第２ゲーム装置１０ｂとの間の遅延時間を示すデータであるが、遅延時間の値は異なることもある。
【００６５】
完了通知データ６３は、他のゲーム装置から自機へ送信されてくる上記完了通知を示すデータである。他のゲーム装置から自機へ完了通知データが送信されてくると、ゲーム装置１０は当該完了通知データをＲＡＭ２４へ記憶する。第１ゲーム装置１０ａに記憶される完了通知データ６３には、第２ゲーム装置１０ｂから送信されてくる完了通知を示す第１完了通知データ６３ａと、第３ゲーム装置１０ｃから送信されてくる完了通知を示す第２完了通知データ６３ｂとが含まれる。
【００６６】
開始時点データ６４は、レースを開始する時点を示すデータである。本実施形態においては、レースを開始する時点の情報として、現在からレース開始時点までの残り時間のカウンタ値を示すデータが開始時点データ６４として記憶される。なお、開始時点データ６４は、レースを開始する時点を示すデータであればよく、例えば、レースを開始する時刻と現在時刻とを示すデータであってもよい。
【００６７】
送信補正データ６５は、自機から他のゲーム装置へ送信すべき補正データである。上述したように、送信補正データ６５は、それが送信先のゲーム装置で受信された時点における、レース開始までの残り時間の推定値を示す。第１ゲーム装置１０ａに記憶される送信補正データ６５には、第２ゲーム装置１０ｂへ送信すべき補正データを示す第１送信補正データ６５ａと、第３ゲーム装置１０ｃへ送信すべき補正データを示す第２送信補正データ６５ａとが含まれる。同様に、第２ゲーム装置１０ｂおよび第３ゲーム装置１０ｃに記憶される送信補正データ６５には、他の２つのゲーム装置へ送信すべき２つの補正データが、第１送信補正データ６５ａおよび第２送信補正データ６５ｂとして含まれる。本実施形態では、送信補正データ６５の内容は毎フレーム更新され、更新される度に他のゲーム装置へ送信される。
【００６８】
受信補正データ６６は、他のゲーム装置から自機へ送信されてきた補正データである。受信補正データ６６は、それを自機が受信した時点における、レース開始までの残り時間の推定値を示す。受信補正データ６６の内容は、他のゲーム装置から補正データを受信する度に更新される。
【００６９】
次に、ゲームプログラムを実行することによってゲーム装置１０において行われるゲーム処理の詳細を、図８および図９を用いて説明する。図８は、ゲーム装置１０において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置１０の電源が投入されると、ゲーム装置１０のＣＰＵコア２１は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、ＲＡＭ２４等の各ユニットが初期化される。そして、メモリカード１７に格納されたゲームプログラムがＲＡＭ２４に読み込まれ、ＣＰＵコア２１によって当該ゲームプログラムの実行が開始される。図８に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図８および図９においては、ゲーム処理のうち、レースゲームを開始するタイミングを各ゲーム装置間で調整する処理について詳細に示し、本願発明と関連しない他のゲーム処理については詳細な説明を省略する。
【００７０】
図８のステップＳ１において、まず、初期設定処理が実行される。初期設定処理においては、ＣＰＵコア２１は、ゲームに参加するためにネットワークを介して通信可能となった各ゲーム装置に対して、固有のＩＤを設定する。また、初期設定処理において、レースゲームのゲーム空間が構築され、各プレイヤによって操作されるカートなどの各ゲームオブジェクトや、ゲーム装置１０によって操作されるゲームオブジェクトが初期位置に配置される。（カートはレースゲーム限定の操作オブジェクトを示すので修正しました）
【００７１】
続くステップＳ２において、開始時点決定処理が実行される。開始時点決定処理は、レースゲームを開始するタイミングを決定するための処理である。レースゲームは、開始時点決定処理が終了することによって各ゲーム装置で開始される。以下、図９を用いて開始時点決定処理の詳細を説明する。
【００７２】
図９は、図８に示すステップＳ２の詳細な処理の流れを示すフローチャートである。開始時点決定処理においては、まずステップＳ１１において、遅延時間測定プログラム５２が実行されることによって、自機と他のゲームとの通信の遅延時間が測定される。遅延時間の測定は、上述したように、他のゲーム装置それぞれについて個別に測定される（図５に示す状態（ａ）参照）。すなわち、第１ゲーム装置１０ａであれば、第１ゲーム装置１０ａと第２ゲーム装置１０ｂとの間の遅延時間、および、第１ゲーム装置１０ａと第３ゲーム装置１０ｃとの間の遅延時間を測定する。ステップＳ１１で測定された結果は、遅延時間データ６２としてＲＡＭ２４に記憶される。例えば第１ゲーム装置１０ａにおいては、第１ゲーム装置１０ａと第２ゲーム装置１０ｂとの間の遅延時間を示すデータが第１遅延時間データ６２ａとしてＲＡＭ２４に記憶され、第１ゲーム装置１０ａと第３ゲーム装置１０ｃとの間の遅延時間を示すデータが第２遅延時間データ６２ｂとしてＲＡＭ２４に記憶される。なお、各ゲーム装置間の遅延時間はそれぞれ異なっているので、遅延時間の測定が終了するタイミングは各ゲーム装置においてばらばらである。ステップＳ１１の処理が完了すると、ステップＳ１２の処理が実行される。
【００７３】
ステップＳ１２においては、完了通知プログラム５３が実行されることによって、完了通知が他のゲーム装置へ送信される。すなわち、ＣＰＵコア２１は、完了通知データを生成して他の全てのゲーム装置へ送信する。ステップＳ１２の次にステップＳ１３の処理が実行される。
【００７４】
ステップＳ１３において、ＣＰＵコア２１は、他の全てのゲーム装置から完了通知を受信したか否かを判定する。なお、図示していないが、ＣＰＵコア２１は、ゲーム処理中において一定時間毎（例えば１フレーム毎）に他のゲーム装置からのデータを受信しているか否かをチェックする。そして、完了通知データを受信した場合、受信した完了通知データをＲＡＭ２４に記憶する。したがって、ステップＳ１３の判定は、他の全てのゲーム装置からの完了通知データがＲＡＭ２４に記憶されているか否かによって行うことができる。判定の結果、少なくとも１つの他のゲーム装置から完了通知を受信していないと判定される場合、ステップＳ１４の処理が実行される。一方、他の全てのゲーム装置から完了通知を受信していると判定される場合、ステップＳ１５の処理が実行される。
【００７５】
ステップＳ１４において、ＣＰＵコア２１は、他のゲーム装置から補正データを受信しているか否かを判定する。ステップＳ１４の判定は、ＲＡＭ２４に受信補正データ６６が記憶されているか否かによって行うことができる。レース開始までのカウントダウンが開始されていない時点では、補正データがまだ受信されていないからである。判定の結果、他のゲーム装置から補正データを受信していると判定される場合、ステップＳ１６の処理が実行される。一方、他のゲーム装置から補正データを受信していない場合、ステップＳ１３の処理が再度実行される。以降、ステップＳ１３およびＳ１４のいずれかの判定処理における判定結果が肯定となるまで、ステップＳ１３およびＳ１４の処理が繰り返し実行される。
【００７６】
ステップＳ１５においては、開始時点設定プログラム５４が実行されることによって、予め定められた所定の残り時間の値に開始時点データ６４の内容が設定される。例えば、当該所定の残り時間の値が１００フレーム時間であるとすると、１００フレーム時間を示すデータが開始時点データ６４としてＲＡＭ２４に記憶される。
【００７７】
また、ステップＳ１６においては、開始時点設定プログラム５４が実行されることによって、受信した補正データに従って開始時点データ６４の内容が設定される。例えば、ＲＡＭ２４に記憶されている受信補正データ６６により示される残り時間の値が９５フレーム時間であるとすると、９５フレーム時間を示すデータが開始時点データ６４としてＲＡＭ２４に記憶される。
【００７８】
以上のステップＳ１３〜Ｓ１６によって、各ゲーム装置においてレース開始までのカウントダウンが開始される。他の全てのゲーム装置から完了通知を受信したゲーム装置においてはステップＳ１３の判定処理の結果が肯定となり、ステップＳ１５の処理が実行される。その結果、所定の残り時間からカウントダウンが開始される。一方、他の全てのゲーム装置から完了通知を受信する前に、他のゲーム装置から補正データを受信したゲーム装置においてはステップＳ１４の判定処理の結果が肯定となり、ステップＳ１６の処理が実行される。その結果、補正データにより示される残り時間からカウントダウンが開始される。ステップＳ１５またはＳ１６の後、ステップＳ１７〜Ｓ２２の一連の処理が実行されることによって、残り時間のカウントダウンが行われる。なお、ステップＳ１７〜Ｓ２２の処理ループは、１フレームにつき１回実行される。
【００７９】
ステップＳ１７において、残り時間カウントプログラム５５が実行されることによって、残り時間がカウントダウンされる。ＣＰＵコア２１は、ＲＡＭ２４に記憶されている開始時点データ６４により示される残り時間を、１フレーム時間だけ減算した値に更新する。
【００８０】
続くステップＳ１８およびＳ１９において、補正データ送信プログラム５６が実行されることによって、補正データが生成されて他のゲーム装置へ送信される。すなわち、ステップＳ１８において、他のゲーム装置のそれぞれに送信すべき補正データが生成される。補正データにより示される残り時間は、自機において設定されている現在の残り時間から、補正データの送信先の他のゲーム装置と自機との間の遅延時間を減算した値となる。すなわち、ＣＰＵコア２１は、ＲＡＭ２４に記憶されている遅延時間データ６２と開始時点データ６４とを参照して、開始時点データ６４により示される残り時間から遅延時間データ６２により示される遅延時間を減算することによって補正データを生成する。ＣＰＵコア２１は、他のゲーム装置毎に減算処理を行い、補正データを他のゲーム装置毎に生成する。例えば第１のゲーム装置１０ａは、第２のゲーム装置１０ｂへ送信すべき補正データと、第３のゲーム装置１０ｃへ送信すべき補正データとを生成する。生成された各補正データは、送信補正データ６５の第１および第２送信補正データ６５ａおよび６５ｂとしてＲＡＭ２４に記憶される。
【００８１】
続くステップＳ１９において、ステップＳ１８で生成された各補正データが他のゲーム装置へ送信される。ＣＰＵコア２１は、ＲＡＭ２４に記憶されている送信補正データ６５を各ゲーム装置へそれぞれ送信する。すなわち、第１のゲーム装置１０ａであれば、第１送信補正データ６５ａを第２ゲーム装置１０ｂへ送信するとともに、第１送信補正データ６５ｂを第３ゲーム装置１０ｃへ送信する。
【００８２】
続くステップＳ２０において、ＣＰＵコア２１は、今回のフレームにおいて他のゲーム装置から補正データを新たに受信したか否かを判定する。この判定は、今回のフレームにおいてＲＡＭ２４の受信補正データ６６が更新されたか否かによって行うことができる。判定の結果、他のゲーム装置から補正データを新たに受信したと判定される場合、ステップＳ２１の処理が実行される。一方、他のゲーム装置から補正データを新たに受信していないと判定される場合、ステップＳ２１の処理がスキップされてステップＳ２２の処理が実行される。
【００８３】
ステップＳ２１においては、補正プログラム５７が実行されることによって、受信された補正データに基づいて開始時点データ６４の内容が補正される。具体的には、ＣＰＵコア２１は、受信された補正データにより示される残り時間と、開始時点データ６４により示される残り時間との平均値を算出し、開始時点データ６４の内容を当該平均値に更新する。ステップＳ２１の次にステップＳ２２の処理が実行される。
【００８４】
なお、本実施形態では、２つの残り時間の平均値を更新後の残り時間とするが、更新後の残り時間の算出方法はこれに限らず、更新後の残り時間の値が当該２つの残り時間の間の値となるような算出方法であればどのような方法であってもよい。例えば、ＣＰＵコア２１は、それまでの補正結果と今回受信された補正データとに基づいて補正量（現在の残り時間に対して加算または減算を行う量）を算出するようにしてもよい。具体的には、ａ回目（ａは１以上の整数）の補正データの受信時においては、次の式に従って補正量を算出してもよい。
Ａｄｄ（ａ）＝（Ａｄｄ（ａ−１）＋Ｄｉｆｆ（ａ））／２
上式において、Ａｄｄ（ｎ）は（ｎは１以上の整数）、ｎ回目の補正データを受信したときにおける補正量を示す関数である。また、Ｄｉｆｆ（ｎ）は、ｎ回目に受信した補正データにより示される残り時間と、現在の残り時間（開始時点データ６４により示される残り時間）との差である。つまり、上式は、それまで（ａ−１回目まで）の補正結果（Ａｄｄ（ａ−１））と、今回（ａ回目に）受信された補正データに基づく補正量とを平均した値を補正量とするものである。なお、補正データにより示される残り時間と自機の残り時間との平均値を算出する方法では、残り時間の値が小さくなってきたときに、受信された補正データにより示される残り時間が自機の残り時間から大きくずれているような場合、残り時間が大きく補正されてしまい、残り時間が０になるタイミングがゲーム装置間でずれてしまうおそれがある。これに対して、それまでの補正結果を今回の補正量に反映させる方法では、上記のような場合であっても当該補正データによる影響をより小さくすることができ、残り時間が０になるタイミングをゲーム装置間でより一致させやすくなる。
【００８５】
ステップＳ２２においては、レースを開始するタイミングが到来したか否かが判定される。すなわち、ＣＰＵコア２１は、開始時点データ６４により示される残り時間が０になったか否かを判定する。判定の結果、レースを開始するタイミングが到来したと判定される場合、すなわち、上記残り時間が０になった場合、ＣＰＵコア２１は開始時点決定処理を終了し、レースを開始する。一方、レースを開始するタイミングが到来していないと判定される場合、すなわち、上記残り時間が０になっていない場合、ステップＳ１７の処理が再度実行される。以降、ステップＳ２２においてレース開始タイミングが到来したと判定されるまで、ステップＳ１７〜Ｓ２２の処理ループが繰り返される。
【００８６】
図８の説明に戻り、ステップＳ２の開始時点決定処理が終了すると、ステップＳ３〜Ｓ５において、レースゲームプログラム５８が実行されることによってレースが開始される。すなわち、ステップＳ３において、レースゲームを進行するための処理が実行される。この処理は、プレイヤによる操作に応じてカートなどのゲームオブジェクトの動作を制御する処理である。続くステップＳ４において、ステップＳ３の処理結果に従ってゲーム画像が生成され、第２ＬＣＤ１２に表示される。続くステップＳ５において、レースゲームを終了するか否かが判定される。ＣＰＵコア２１は、例えば、全てのゲーム装置のプレイヤによって操作されるカートがゴールしたか否かや、レース開始から予め定められた所定時間が経過したか否かによって、レースゲームを終了するか否かを判定する。判定の結果、レースゲームを終了すると判定される場合、ＣＰＵコア２１は図８に示すゲーム処理を終了する。一方、レースゲームを終了しないと判定される場合、ステップＳ３の処理が再度実行される。以降、レースゲームを終了すると判定されるまで、ステップＳ３〜Ｓ５の処理が繰り返し実行されることによってレースゲームが進行する。
【００８７】
以上のように、本実施形態によれば、レース開始までのカウントダウンが開始されると、各ゲーム装置が互いに補正データを送信し合う。そして、他のゲーム装置から送信されてきた補正データを用いて自機のカウンタ値を補正することによって、各ゲーム装置間でカウンタ値が次第に一致していく。その結果、レースを開始するタイミングを各ゲーム装置間で正確に一致させることができる。
【００８８】
また、本実施形態においては、各ゲーム装置における残り時間のカウンタ値は、各ゲーム装置が互いに調整し合い、「親機」に相当するゲーム装置は存在しない。そのため、親機が通信不能となったためにゲームを開始することができなくなるようなことがなく、カウントダウンが開始された後、何らかの理由で通信不能となったゲーム装置が発生したとしても、他のゲーム装置には影響がない。すなわち、他のゲーム装置間では、レースの開始タイミングを正確に一致させてゲームを続行することができる。
【００８９】
また、本実施形態においては、レース開始までのカウントダウンが行われる間、各ゲーム装置間で補正データが繰り返し送信される。したがって、ネットワークの接続環境（通信速度やノイズ）が時々刻々変化するような場合でも、レースの開始タイミングを各ゲーム装置間で正確に一致させることができる。
【００９０】
なお、上記実施形態においては、ゲーム装置１０は補正データを毎フレーム送信することとしたが、補正データを送信する時間間隔はこれに限定されない。ゲーム装置は、例えば数フレームに１回補正データ送信するようにしてもよいし、補正データを送信する間隔を一定の範囲内でランダムに決定するようにしてもよい。また、上記実施形態においては、１フレームの間に他の全てのゲーム装置へ補正データを送信するものとしたが、他の実施形態においては、１フレームにつき１つの他のゲーム装置へ補正データを送信するようにしてもよい。なお、このとき、１つのゲーム装置が他の全てのゲーム装置へ補正データを送信するように、ゲーム装置は送信先のゲーム装置を毎回変えて補正データを送信するようにする。
【００９１】
また、上記実施形態においては、レース開始までの残り時間をフレーム時間を単位として表した。ここで、開始時点データ６４により示される残り時間は、レース開始までの残りフレームを表す整数で管理される必要はなく、小数で管理してもよい。このとき、ステップＳ２２の判定処理においては、小数点を四捨五入したり、小数点以下を切り捨てまたは切り上げしたりして残り時間を判断すればよい。
【００９２】
また、上記実施形態において、１フレームにおいて２つ以上の補正データを同時に受信した場合も考えられる。この場合、ゲーム装置は、受信された複数の補正データのうちのいずれか１つの補正データに基づいて残り時間を補正してもよいし、複数の補正データの全てに基づいて残り時間を補正してもよい。なお、いずれか１つの補正データに基づいて残り時間を補正する場合、ゲーム装置は、例えば最初または最後に受信した補正データを選択し、選択した補正データに基づいて残り時間を補正してもよい。また、複数の補正データの全てに基づいて残り時間を補正する場合、各補正データにより示される各残り時間と、自機のカウンタ値の残り時間との平均値を算出するようにしてもよい。
【００９３】
また、上記実施形態では、レースゲームにおけるレースの開始のタイミングを各ゲーム装置間でできる限り一致させる場合を例として説明したが、本発明は、ゲーム中に行われる何らかのイベントを開始するために各ゲーム装置間でできる限りタイミングを合わせるゲームシステムに適用することが可能である。例えば、ゲーム中のミニゲームの開始タイミングをできる限り一致させる場合や、特定のアイテムを出現させるタイミングをできる限り一致させる場合等、種々の状況に適用することができる。
【産業上の利用可能性】
【００９４】
本発明は、ゲームシステムを構成する各ゲーム装置間においてより正確にタイミングをとること等を目的として、ゲームシステムやゲーム装置、ゲームプログラム等に利用することが可能である。
【図面の簡単な説明】
【００９５】
【図１】本実施形態に係るゲームシステムの構成を示すブロック図
【図２】本実施形態に係るゲームシステムに含まれるゲーム装置の外観図
【図３】ゲーム装置の内部構成図
【図４】本実施形態におけるゲームのゲーム画面を示す図
【図５】レースゲームが開始されるまでの処理の概要を示す図
【図６】カウンタの補正処理を説明するための図
【図７】ゲーム装置１０のＲＡＭ２４に記憶される主なデータを示す図
【図８】ゲーム装置１０において実行されるゲーム処理の流れを示すメインフローチャート
【図９】図８に示すステップＳ２の詳細な処理の流れを示すフローチャート
【符号の説明】
【００９６】
１  ネットワーク
１０  ゲーム装置
１２  第２ＬＣＤ
１７  メモリカード
２１  ＣＰＵコア
２４  ＲＡＭ
３３  無線通信部
５１  ゲームプログラム５１
５２  遅延時間測定プログラム
５３  完了通知プログラム
５４  開始時点設定プログラム
５５  残り時間カウントプログラム
５６  補正データ送信プログラム
５７  補正プログラム
５８  レースゲームプログラム
【図１】
2007097838.tif 000003
【図２】
2007097838.tif 000004
【図３】
2007097838.tif 000005
【図４】
2007097838.tif 000006
【図５】
2007097838.tif 000007
【図６】
2007097838.tif 000008
【図７】
2007097838.tif 000009
【図８】
2007097838.tif 000010
【図９】
2007097838.tif 000011