説明

通信ゲームプログラムおよび通信ゲームシステム

【課題】ゲームシステムを構成する各ゲーム装置間においてより正確にタイミングをとることが可能な通信ゲームプログラムおよび通信ゲームシステムを提供する。
【解決手段】ゲーム装置は、自機と他のゲーム装置との間の通信の遅延時間を測定し、開始時点データをメモリに記憶する。さらに、ゲーム装置は、他のゲーム装置が所定のイベントの実行を開始する時点を遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する。また、自機が所定のイベントの実行を開始する時点を示すデータ(補正データ)が他のゲーム装置から送信されてきたとき、開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する。そして、開始時点データにより示される時点が到来したときに所定のイベント(レースゲーム)を実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のゲーム装置間でゲームを実行するための通信ゲームプログラムおよび通信ゲームシステムに関し、より特定的には、ゲームにおいて何らかのイベントを開始するタイミングを各ゲーム装置において合わせるための通信ゲームプログラムおよび通信ゲームシステムに関する。
【背景技術】
【0002】
従来、複数のゲーム装置をネットワークを介して接続することによって、同じ内容のゲームを複数人のプレイヤでプレイするゲームシステムがよく知られている。特に、昨今ではネットワークロールプレイングゲーム(以下ネットワークRPGとする)が広くプレイされるようになっている。ネットワークRPGでは、サーバを介して、あるいはピア・ツー・ピアで、複数のプレイヤが同じ内容のゲームをプレイすることができる。
【0003】
ネットワークRPGでは、最終的に同じ結果が得られれば、ゲームの進行状況、すなわち、ある時点において各ゲーム装置において表示される画像の内容が多少違っていても支障はきたさない。したがって、ネットワークのトラフィックの増減や(無線LANの場合では)ノイズの影響等によって、データの送受信に要する時間にばらつきが出ても、大きな影響をきたすことはない。
【0004】
一方、レースゲームやアクションゲームのようなゲームにおいては、正確なタイミングでゲーム操作を行うことや、より迅速にゲーム操作を行うことがプレイヤに要求される。そのため、このようなゲームでは、複数のプレイヤの間でゲーム処理に使用されるデータの内容とデータの受信タイミングにばらつきが出ると、各プレイヤ間でゲームの処理内容が異なってしまい、ゲームが成立しなくなる。そのため、レースゲームやアクションゲームのようなゲームをネットワークを介した通信システムで実行する場合には、各ゲーム装置でゲームの進行状況を必要に応じて一致させることが必要となる。例えばレースゲームであれば、レースのスタートのタイミングを各ゲーム装置で一致させる必要がある。
【0005】
特許文献1には、親機および子機を含む複数のゲーム装置からなるシステムが記載されている。このシステムにおいては、各ゲーム装置が自機と他のゲーム装置との遅延時間を測定し、親機が各ゲーム装置の測定結果を収集する。親機は、収集した遅延時間を考慮に入れて、タイマーをリセットするまでの時間を子機毎に決定し、当該時間を各子機に送信する。これらの時間は、親機と各子機との遅延時間が考慮されているので、子機毎に異なる時間となっている。上記システムは、親機との遅延時間を子機毎に考慮して、タイマーをリセットするまでの時間を決定することによって、タイマーをリセットする時刻を各ゲーム装置で一致させるものである。これによって、ゲームを開始するタイミングを各ゲーム装置間で一致させることができる。
【特許文献1】特開2001−198363号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
特許文献1に記載のシステムでは、親機は、自機と各子機との遅延時間に基づいてタイマーをリセットするまでの時間を子機毎に決定している。つまり、このシステムでは親機と各子機との間で同期をとるための処理が実行される。しかし、このシステムでは、各子機間では直接同期をとる処理は実行されない。したがって、各子機間でタイミングのずれが生じている場合には、このずれを補正することが難しい。そのため、上記システムでは、子機間での同期を正確にとることが難しいことから各装置全体についても同期を正確にとることができないおそれがあった。
【0007】
それ故、本発明の目的は、通信遅延を含むネットワークを介したゲームシステムを構成する各ゲーム装置間においてできる限りゲームの処理内容を一致させることが可能な通信ゲームプログラムおよび通信ゲームシステムを提供することである。
【課題を解決するための手段】
【0008】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【0009】
第1の発明は、ネットワーク(1)を介して複数のゲーム装置(10a〜10c)を接続してなる通信ゲームシステムに含まれるゲーム装置(10)のコンピュータ(CPUコア21等)において実行される通信ゲームプログラム(51)である。通信ゲームプログラムは、測定ステップ(S11)と、記憶ステップ(S15、S16)と、送信ステップ(S19)と、補正ステップ(S21)と、イベント実行ステップ(S3)とをコンピュータに実行させる。測定ステップは、自機と他のゲーム装置との間の通信に係る遅延時間を測定する。記憶ステップは、自機が所定のイベントの実行を開始する時点を示す開始時点データ(64)をゲーム装置のメモリ(RAM24)に記憶する。送信ステップは、他のゲーム装置が所定のイベントの実行を開始する時点を遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータ(送信補正データ65)を他のゲーム装置へ送信する。補正ステップは、自機が所定のイベントの実行を開始する時点を示すデータ(補正データ)が他のゲーム装置から送信されてきたとき、開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する。イベント実行ステップは、開始時点データにより示される時点が到来したときに所定のイベント(レースゲーム)を実行する。
【0010】
第2の発明においては、開始時点データは、自機が所定のイベントの実行を開始する時点を現在から当該時点までの残り時間に係るデータでありってもよい。このとき、記憶ステップは、通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で実行される。また、通信ゲームプログラムは、開始時点データを所定時間だけ減算した時間に係るデータとなるように当該開始時点データを更新する処理を所定時間毎に繰り返し実行する減算ステップ(S17)をコンピュータにさらに実行させる。
【0011】
第3の発明においては、通信ゲームプログラムは、遅延時間の測定が完了したことを他のゲーム装置に通知する完了通知ステップ(S12)をコンピュータにさらに実行させてもよい。このとき、減算ステップは、全ての他のゲーム装置から遅延時間の測定が完了したことの通知を受信したこと、または、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から初めて送信されてきたことに応じて実行が開始される。
【0012】
第4の発明においては、記憶ステップにおいては、全ての他のゲーム装置から遅延時間の測定が完了したことの通知を受信したとき、予め定められた時点を示すデータが開始時点データとしてメモリに記憶され、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から初めて送信されてきたとき、当該データが開始時点データとしてメモリに記憶されてもよい。
【0013】
第5の発明においては、送信ステップは、通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後において、予め決められたタイミングで実行されてもよい。
【0014】
第6の発明においては、送信ステップは、通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で所定時間毎に繰り返し実行されてもよい。
【0015】
第7の発明においては、送信ステップにおいて、他のゲーム装置が所定のイベントの実行を開始する時点は、当該他のゲーム装置に関する遅延時間と開始時点データとに基づいて算出されてもよい。
【0016】
第8の発明においては、補正ステップにおいて、他のゲーム装置から送信されてくるデータにより示される時点と、開始時点データにより示される時点との間の時点となるように補正後の時点が算出されてもよい。
【0017】
第9の発明は、ネットワーク(1)を介して複数のゲーム装置(10a〜10c)を接続してなる通信ゲームシステムである。各ゲーム装置(10)は、測定手段(CPUコア21、遅延時間測定プログラム52)と、記憶制御手段(CPUコア21、開始時点設定プログラム54)と、送信手段(CPUコア21、補正データ送信プログラム56)と、補正手段(CPUコア21、補正プログラム57)と、イベント実行手段(CPUコア21、レースゲームプログラム58)とを備えている。測定手段は、自機と他のゲーム装置との間の通信に係る遅延時間を測定する。記憶制御手段は、自機が所定のイベントの実行を開始する時点を示す開始時点データをメモリ(RAM24)に記憶する。送信手段は、他のゲーム装置が所定のイベントの実行を開始する時点を遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する。補正手段は、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から送信されてきたとき、開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する。イベント実行手段は、開始時点データにより示される時点が到来したときに所定のイベントを実行する。
【発明の効果】
【0018】
第1の発明によれば、ゲームシステムに含まれる各ゲーム装置が本発明に係る通信ゲームプログラムを実行することによって、通信遅延を含むネットワークに接続された各ゲーム装置間で、所定のイベントの実行を開始する時点を補正して調整し合うことができる。すなわち、送信ステップにおいて、他のゲーム装置が所定のイベントの実行を開始する時点を示すデータが送信され、補正ステップにおいて、当該データに基づいて、開始時点データにより示される時点が補正される。これによって、各ゲーム装置における開始時点データの値が次第に一致するように収束する結果、所定のイベントの実行を開始する時点を正確に一致させることができる。すなわち、ゲームシステムを構成する各ゲーム装置間においてできる限り正確にゲーム処理内容を一致させることが可能となる。
【0019】
第2の発明によれば、全てのゲーム装置において遅延時間の測定が完了した後に残り時間のカウントダウンが開始される。ここで、本発明では、遅延時間が測定できなければ、送信ステップにおいて送信されるデータ(補正データ)を送信することができない。そのため、遅延時間の測定が完了していないゲーム装置が存在した状態で他のゲーム装置がカウントダウンを開始すると、遅延時間の測定が完了していないゲーム装置は補正データを送信することができないので、補正データが一方向にしか送信されないこととなってしまう。その結果、イベントの開始タイミングを正確に一致させることができないおそれがある。これに対して、第2の発明では、全てのゲーム装置が補正データを送信することが可能となった状態でカウントダウンが開始されるので、各ゲーム装置間で確実に補正データを送信し合うことができ、イベントの開始タイミングをより正確に一致させることができる。
【0020】
第3の発明によれば、全ての他のゲーム装置から遅延時間の測定が完了した通知を受信したこと、または、自機が所定のイベントの実行を開始する時点を示すデータが他のゲーム装置から初めて送信されてきたことに応じて、減算ステップの実行が開始される。したがって、残り時間のカウントダウンは、確実に、全てのゲーム装置において遅延時間の測定が完了した後で開始される。これによって、各ゲーム装置間でより確実に補正データを送信し合うことができ、イベントの開始タイミングをより正確に一致させることができる。
【0021】
第4の発明によれば、カウントダウンを開始する時点での残り時間の値をより正確に設定することができる。
【0022】
第5の発明によれば、予め決められたタイミングが到来する度に補正データが他のゲーム装置へ送信される。そのため、他のゲーム装置に確実に補正データを送信することができるので、イベントの開始タイミングをより確実に一致させることができる。例えば、他のゲーム装置から補正データが送信されてきたことに応じて自機から補正データを送信するとした場合には、送信相手から補正データが送信されてこない限り送信相手に補正データを送信することができなくなってしまう。これに対して、第5の発明によれば、他のゲーム装置に確実に補正データを送信することができる。
【0023】
第6の発明によれば、所定時間毎に補正データが送信されるので、他のゲーム装置に確実に補正データを送信することができ、イベントの開始タイミングをより確実に一致させることができる。
【0024】
第7の発明によれば、他のゲーム装置が所定のイベントの実行を開始する時点は、当該他のゲーム装置に関する遅延時間と開始時点データとに基づいて算出される。したがって、他のゲーム装置が所定のイベントの実行を開始する時点をより正確に推測することができる。
【0025】
第8の発明によれば、補正ステップによる補正後の時点は、他のゲーム装置から送信されてくるデータにより示される時点と、開始時点データにより示される時点との間の値となる。これによって、補正後の時点をより適切な値に補正することができるので、イベントの開始タイミングをより確実に一致させることができる。
【発明を実施するための最良の形態】
【0026】
以下、図面を参照して、本発明の一実施形態に係るゲームシステムに含まれるゲーム装置の構成について説明する。図1は、本実施形態に係るゲームシステムの構成を示すブロック図である。図1に示すように、本ゲームシステムは、複数の携帯ゲーム装置(以下、単に「ゲーム装置」と呼ぶ。)10a〜10cがインターネット等のネットワーク1を介して接続される構成である。本実施形態では、例えば3つのゲーム装置10a〜10cによってゲームシステムが構成され、3人のプレイヤがゲーム装置を1つずつ使用するものとする。各ゲーム装置10a〜10cは、無線でネットワーク1に接続可能であるが、有線で接続されるものであってもよい。以下においては、3つのゲーム装置10a〜10cを、第1ゲーム装置10a、第2ゲーム装置10b、および第3ゲーム装置10cと呼ぶ。なお、3つのゲーム装置を特に区別する必要がない場合は、第1〜第3ゲーム装置10a〜10cを単にゲーム装置10と記載することもある。
【0027】
まず、ゲーム装置の構成について説明する。図2は、ゲームシステムに含まれるゲーム装置10の外観図である。本実施形態では、第1〜第3ゲーム装置10a〜10cは全て同じで構成あり、全て図1に示す構成である。
【0028】
以下、ゲーム装置の構成および動作を説明する。図2は、本実施形態に係るゲームシステムに含まれるゲーム装置の外観図である。図2において、ゲーム装置10は、第1LCD(Liquid Crystal Display:液晶表示装置)11および第2LCD12を含む。ハウジング13は上側ハウジング13aと下側ハウジング13bとによって構成されており、第1LCD11は上側ハウジング13aに収納され、第2LCD12は下側ハウジング13bに収納される。第1LCD11および第2LCD12の解像度はいずれも256dot×192dotである。なお、本実施形態では表示装置としてLCDを用いているが、例えばEL(Electro Luminescence:電界発光)を利用した表示装置など、他の任意の表示装置を利用することができる。また任意の解像度のものを利用することができる。
【0029】
上側ハウジング13aには、後述する1対のスピーカ(図3の30a、30b)からの音を外部に放出するための音抜き孔18a、18bが形成されている。
【0030】
下側ハウジング13bには、入力装置として、十字スイッチ14a、スタートスイッチ14b、セレクトスイッチ14c、Aボタン14d、Bボタン14e、Xボタン14f、Yボタン14g、Lボタン14LおよびRボタン14Rが設けられている。また、さらなる入力装置として、第2LCD12の画面上にタッチパネル15が装着されている。また、下側ハウジング13bには、電源スイッチ19や、メモリカード17やスティック16を収納するための挿入口も設けられている。
【0031】
タッチパネル15としては、例えば抵抗膜方式や光学式(赤外線方式)や静電容量結合式など、任意の方式のものを利用することができる。タッチパネル15は、その表面をスティック16で触れると、その接触位置に対応する座標データを出力する機能を有している。なお、以下ではプレイヤがタッチパネル15をスティック16で操作するものとして説明を行うが、スティック16の代わりにペン(スタイラスペン)や指でタッチパネル15を操作することももちろん可能である。本実施形態では、タッチパネル15として、第2LCD12の解像度と同じく256dot×192dotの解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル15の解像度と第2LCD12の解像度が一致している必要はない。
【0032】
メモリカード17はゲームプログラムを記録した記録媒体であり、下部ハウジング13bに設けられた挿入口に着脱自在に装着される。
【0033】
次に、図3を参照してゲーム装置10の内部構成を説明する。図3において、ハウジング13に収納される電子回路基板20には、CPUコア21が実装される。CPUコア21には、バス22を介して、コネクタ23が接続されるとともに、入出力インターフェース回路(図面ではI/F回路と記す)25、第1GPU(Graphics Processing Unit)26、第2GPU27、RAM24、およびLCDコントローラ31が接続される。コネクタ23には、メモリカード17が着脱自在に接続される。メモリカード17は、ゲームプログラムを記憶するROM17aと、バックアップデータを書き換え可能に記憶するRAM17bを搭載する。メモリカード17のROM17aに記憶されたゲームプログラムはRAM24にロードされ、RAM24にロードされたゲームプログラムがCPUコア21によって実行される。RAM24には、ゲームプログラムの他にも、CPUコア21がゲームプログラムを実行して得られる一時的なデータや、ゲーム画像を生成するためのデータが記憶される。I/F回路25には、タッチパネル15、右スピーカ30a、左スピーカ30b、無線通信部33、および図2の十字スイッチ14aやAボタン14d等からなる操作スイッチ部14が接続される。右スピーカ30aと左スピーカ30bは、音抜き孔18a、18bの内側にそれぞれ配置される。
【0034】
第1GPU26には、第1VRAM(Video RAM)28が接続され、第2GPU27には、第2VRAM29が接続される。第1GPU26は、CPUコア21からの指示に応じて、RAM24に記憶されているゲーム画像を生成するためのデータに基づいて第1のゲーム画像を生成し、第1VRAM28に描画する。第2GPU27は、同様にCPUコア21からの指示に応じて第2のゲーム画像を生成し、第2VRAM29に描画する。第1VRAM28および第2VRAM29はLCDコントローラ31に接続されている。
【0035】
LCDコントローラ31はレジスタ32を含む。レジスタ32はCPUコア21からの指示に応じて0または1の値を記憶する。LCDコントローラ31は、レジスタ32の値が0の場合は、第1VRAM28に描画された第1のゲーム画像を第1LCD11に出力し、第2VRAM29に描画された第2のゲーム画像を第2LCD12に出力する。また、レジスタ32の値が1の場合は、第1VRAM28に描画された第1のゲーム画像を第2LCD12に出力し、第2VRAM29に描画された第2のゲーム画像を第1LCD11に出力する。
【0036】
無線通信部33は、I/F回路25と接続されている。無線通信部33は、他のゲーム装置の無線通信部33との間で、ゲーム処理に利用されるデータやその他のデータを送受信する機能を有しており、一例としてIEEE802.11の無線LAN規格に則った無線通信機能を提供する。無線通信部33は、受信したデータをCPUコア21に出力する。また、無線通信部33は、CPUコア21から指示されたデータを他のゲーム装置へ送信する。なお、TCP/IP(Transmission Control Protocol/Internet Protocol)等のプロトコルや所定のブラウザを無線通信部33やゲーム装置10内の記憶部に実装することによって、ゲーム装置10は、無線通信部33を介してインターネット等のネットワークとの接続が可能となる。そして、ゲーム装置10は、ネットワークを介して他のゲーム装置と通信を行うことによって、複数のゲーム装置で同じゲームを実行することが可能となる。また、ゲーム装置10は、ネットワーク上で公開されている文書や画像等のデータを第1LCD11および第2LCD12で閲覧したり、ネットワーク上で公開されているゲームデータを用いてゲーム処理を実行したりすることもできる。
【0037】
なお、上記のようなゲーム装置10の構成は単なる一例に過ぎず、本発明は、ネットワークを介して他の装置と通信可能な任意のコンピュータシステムに適用することができる。また、本発明のゲームプログラムは、メモリカード17などの外部記憶媒体を通じてコンピュータシステムに供給されるだけでなく、有線または無線の通信回線を通じてコンピュータシステムに供給されてもよいし、さらにはコンピュータシステム内部の不揮発性記憶装置に予め記録されていてもよい。
【0038】
以下、本実施形態においてゲーム装置10を用いて行われるゲームについて説明する。図4は、本実施形態におけるゲームのゲーム画面を示す図である。ゲーム装置10の第2LCD12の画面には、当該ゲーム装置のプレイヤによって操作されるカート(レースカー)41の他、他のゲーム装置のプレイヤによって操作されるオブジェクトであるカート42および43が表示される。本ゲームはレースゲームであり、各プレイヤはカートを操作してカートがゴールする順位を競って遊ぶ。
【0039】
図4に示したようなレースゲームでは、カートなどのゲームオブジェクトがゴールする順位を競うというゲームの性質上、各ゲーム装置10a〜10cの間でレースのスタート時刻ができるだけ一致させる必要がある。以下では、レースをスタートする時点をできるだけ一致させる処理について主に説明する。なお、本実施形態では、レースゲームにおけるレース開始のタイミングを各ゲーム装置間で一致させるための処理を例として説明するが、本発明は、ゲーム中に実行されるイベントを開始するタイミングを一致させるために適用することが可能である。
【0040】
まず、レースゲームが開始されるまでに各ゲーム装置10a〜10cにおいて実行される処理の概要を、図5および図6を用いて説明する。図5は、レースゲームが開始されるまでの処理の概要を示す図である。レースをスタートする前に、各ゲーム装置10a〜10cは、まず、自機と他のゲーム装置との間のネットワークを介した通信における遅延時間の測定処理を実行する(図5に示す状態(a)なおゲーム装置間に存在するネットワークを示す図は省略してある。)。遅延時間は、自機と他のゲーム装置との間におけるネットワークを介したデータの送受信に要する時間である。第1ゲーム装置10aを例にとって説明すると、まず、第1ゲーム装置10aは他のゲーム装置10bおよび10cへテストデータを送信する。テストデータは、送信元のゲーム装置を示すデータが少なくとも含まれていればどのような内容であってもよい。他のゲーム装置10bおよび10cは、第1ゲーム装置10aからテストデータを受信したことに応じて、第1ゲーム装置10aへ返信用のデータを送信する。第1ゲーム装置10aは、テストデータを送信してから返信用のデータを受信するまでの時間を他のゲーム装置毎に測定する。ここでは、遅延時間は、測定された時間を2で割ることによって得られる。
【0041】
以上のようにして、第1ゲーム装置10aは、第1ゲーム装置10aと第2ゲーム装置10bとの間の遅延時間、および、第1ゲーム装置10aと第3ゲーム装置10cとの間の遅延時間を算出する。第2および第3ゲーム装置10bおよび10cは、第1ゲーム装置10aにおける遅延時間の測定処理と同様の処理を行う。すなわち、第2ゲーム装置10bは、第2ゲーム装置10bと第1ゲーム装置10aとの間の遅延時間、および、第2ゲーム装置10bと第3ゲーム装置10cとの間の遅延時間を算出する。同様に、第3ゲーム装置10cは、第3ゲーム装置10cと第1ゲーム装置10aとの間の遅延時間、および、第3ゲーム装置10cと第2ゲーム装置10bとの間の遅延時間を算出する。なお、本実施形態においては、各ゲーム装置10a〜10cは、フレーム時間(1/60秒)を単位として遅延時間を測定する。すなわち、各ゲーム装置10a〜10cは、1/60秒単位で時間をカウントするタイマーを内蔵し、このタイマーの値を用いて時間を測定する。
【0042】
なお、本実施形態においては、遅延時間の測定処理は、テストデータを送信してから返信用のデータを受信するまでの時間を1回だけ測定するものであったが、他の実施形態においては、遅延時間の測定精度を高めるべく、当該測定を複数回繰り返すようにしてもよい。例えば、ゲーム装置10は、当該測定を10回繰り返し、10回の測定結果の平均時間を算出するようにしてもよい。そして、算出した平均時間を2で割った結果を遅延時間としてもよい。これによって、遅延時間をより正確に測定することができる。
【0043】
遅延時間の測定処理が終了すると、各ゲーム装置10a〜10cは、遅延時間の測定処理が完了した旨の通知(完了通知)を他のゲーム装置へ送信する(図5に示す状態(b)および状態(c))。ここで、遅延時間は各ゲーム装置間で異なるので、遅延時間の測定処理が完了するタイミングはゲーム装置毎に異なる。つまり、完了通知を他のゲーム装置へ送信するタイミングはゲーム装置毎に異なる。図5においては、第1ゲーム装置10aが他のゲーム装置10bおよび10cへ完了通知を最初に送信し(状態(b))、次に、第2ゲーム装置10が他のゲーム装置10aおよび10cへ完了通知を送信したものとする。
【0044】
次に、各ゲーム装置10a〜10cは、レース開始までのカウントダウンを開始するか否かを判定する。この判定は、具体的には、自機が遅延時間の測定処理を完了しており、かつ、他の全てのゲーム装置から完了通知を受信しているか否かによって行われる。図5を例にとって説明すると、状態(c)において、第3ゲーム装置10cは、遅延時間の測定処理を完了しているとする。また、第3ゲーム装置10cは、他の全てのゲーム装置10aおよび10bから完了通知を受信している。したがって、このとき第3ゲーム装置10cは、レース開始までのカウントダウンを開始すると判定する(状態(c))。以上のように、本実施形態においては、第3ゲーム装置10cは、自己が送信した完了通知が他のゲーム装置10aおよび10bで受信されたか否かによらずに、全てのゲーム装置10a〜10cが遅延時間の測定処理を完了したことを認識することができる。
【0045】
カウントダウンを開始すると判定した第3ゲーム装置10cは、レース開始時点までの残り時間を示すカウンタの減算を開始する。ここで、カウンタは、予め定められた所定時間から1フレーム時間ずつ減算されていく。また、第3ゲーム装置10cは、他のゲーム装置10aおよび10bへ補正データを送信する(状態(d))。ここで、補正データとは、上記カウンタの値を補正するためのデータである。補正データの内容の詳細については後述する。一方、他のゲーム装置10aおよび10bは、第3ゲーム装置10cから補正データを受信したことによって、レース開始までのカウントダウンを開始する(状態(d))。なお、ここでは第3ゲーム装置10cが最初に他の全てのゲーム装置10aおよび10bから完了通知を受信することとしたが、もちろんネットワークの状況による遅延時間によって、例えば第1ゲーム装置10aが最初に完了通知を受信することもありうる。すなわち、特定のゲーム装置が補正データを最初に送信するのではなく、特定されない、いずれかのゲーム装置が最初に補正データを送信するようにしたので、ネットワークの状況に左右されずに、補正データを的確に生成することができる。
【0046】
ここで、他のゲーム装置10aおよび10bにおいては、カウンタのスタート時の値は、上記予め定められた所定時間とは異なり、当該所定時間を補正データにより補正した値となる。以上のように、本実施形態においては、他の全てのゲーム装置から完了通知を受信したゲーム装置以外のゲーム装置は、他の全てのゲーム装置から完了通知を受信したゲーム装置から送信されてくる補正データを受信したことに応じてカウントダウンを開始する。これによって、全てのゲーム装置10a〜10cにおいてカウントダウンが開始されたこととなる。
【0047】
カウントダウンを開始したゲーム装置10は、所定時間間隔で補正データを他のゲーム装置へ送信する。したがって、全ゲーム装置10a〜10cにおいてカウントダウンが開始された後においては、各ゲーム装置10a〜10cは補正データを互いに送信し合うこととなる(状態(e))。なお、本実施形態では、ゲーム装置10は、1フレームにつき1回、他のゲーム装置へ補正データを送信するものとする。したがって、各フレームにおいて、第1ゲーム装置10aは第2ゲーム装置10bおよび第3ゲーム装置10cへ、第2ゲーム装置10bは第1ゲーム装置10aおよび第3ゲーム装置10cへ、第3ゲーム装置10cは第1ゲーム装置10aおよび第2ゲーム装置10bへ、補正データを送信する。
【0048】
また、各ゲーム装置10a〜10cは、他のゲーム装置から補正データを受信すると、自身のカウンタの値を当該補正データに基づいて補正する。したがって、カウントダウンが開始された後、カウンタに対しては、1フレームにつき1フレーム時間ずつ減算されるとともに、他のゲーム装置から送信されてきた補正データに基づいて補正される処理が繰り返される。この処理は、カウンタの値が0になるまで繰り返される。そして、カウンタの値が0になると、ゲーム装置10はレースゲームを開始する。
【0049】
以上のように、本実施形態においては、ゲーム装置10のカウンタの値は、他の全てのゲーム装置から送信されてくる補正データによって補正される処理が繰り返される。この処理が繰り返されることによって、各ゲーム装置10a〜10cにおける各カウンタの値は、次第に収束していく(値が一致していく)。したがって、カウンタの値が0になるタイミングは各ゲーム装置10a〜10cでほぼ一致し、レースゲームを開始するタイミングを正確に一致させることができる。以下、補正データによるカウンタの補正処理について説明する。
【0050】
図6は、カウンタの補正処理を説明するための図である。なお、本実施形態において補正データの送信処理は毎フレーム実行されるが、図6の説明においては説明が煩雑になることを避け説明を簡単にする目的で、各ゲーム装置10a〜10cの間で送受信される補正データの一部のみを示し、その他の補正データを無視して説明を行う。また、図6においては、カウントの初期値を100(フレーム)とし、カウントダウンを最初に開始するゲーム装置を第1ゲーム装置10aとする。第1ゲーム装置10aは、残り100フレーム時間の時点において第2ゲーム装置10bへ補正データを送信するとともに、第3ゲーム装置10cへ補正データを送信するものとする。第2ゲーム装置10bは、残り90フレーム時間の時点において第3ゲーム装置10cへ補正データを送信するものとする。第3ゲーム装置10cは、残り93フレーム時間の時点において第1ゲーム装置10aへ補正データを送信するものとする。
【0051】
ここで、補正データは、受信側のゲーム装置が補正データを受信した時点における、レース開始までの残り時間を示すデータである。したがって、各ゲーム装置は、自己のカウンタの値と、補正データの受信先のゲーム装置と自己との間の通信の遅延時間とに基づいて、補正データの内容を決定する。例えば、第1ゲーム装置10aと第2ゲーム装置10bとの間の遅延時間が2フレーム時間であるとし、第1ゲーム装置10aが残り100フレームの時点において第2ゲーム装置10bへ補正データを送信する場合を考える。この場合、ゲーム装置10aは、送信すべき補正データが第2ゲーム装置10bで受信される時点における残り時間を推測する。具体的には、残り時間(100フレーム時間)から遅延時間(2フレーム時間)を減算した値を補正データとする。すなわち、この場合、第1ゲーム装置10aは、「98フレーム時間」を示す補正データを第2ゲーム装置10bへ送信する。第2ゲーム装置10bは、この補正データを受信することによってカウントダウンを開始する。すなわち、98フレーム時間からカウントダウンを開始する。また、第1ゲーム装置10aと第3ゲーム装置10cとの間の遅延時間を7フレーム時間とすれば、残り100フレーム時間において第1ゲーム装置10aから第3ゲーム装置10cへ送信される補正データは、「93フレーム時間」を示すデータとなる。なお、この補正データを受信した第3ゲーム装置10cは、93フレーム時間からカウントダウンを開始する。
【0052】
以上のようにして、補正データの送信側のゲーム装置においては、受信側のゲーム装置が補正データを受信する時点における残り時間が推測され、推測された残り時間の情報が補正データとして送信される。しかし、実際には、各ゲーム装置間の通信の遅延時間が正確に測定されるとは限らず、また、遅延時間は時間経過に応じて変化し、測定時と補正データの送信時とで遅延時間が異なることが考えられる。そのため、受信側のゲーム装置が補正データを受信した時点における残り時間が、当該補正データにより示される残り時間と一致しないことが考えられる。例えば、図6においては、第1ゲーム装置10aから第3ゲーム装置10cへ送信される補正データが4フレーム時間で送信されている。つまり、「93フレーム時間」を示す補正データが、実際には残り95フレーム時間の時点で受信されている(図6参照)。このとき、第3ゲーム装置10cは、正しくは残り95フレーム時間であるにもかかわらず、93フレーム時間からカウントダウンを開始してしまうことになり、カウントダウンを開始した時点で2フレーム時間分のずれが生じている。このように、遅延時間を測定し、遅延時間を考慮した補正データを用いてカウントダウンを実行するようにしても、補正データを1つの装置から1回のみ送信するだけでは、レース開始のタイミングを各ゲーム装置間で正確に一致させることができないおそれがある。
【0053】
そこで、本実施形態においては、各ゲーム装置が補正データを互いに送信し合うようにしている。これによって、各ゲーム装置におけるカウンタ値の差が小さくなり、カウンタ値が0になるタイミングを一致させることができる。以下、この理由を図6を用いて説明する。
【0054】
図6においては、残り93フレーム時間において、第3ゲーム装置10cから第1ゲーム装置10aへ補正データが送信されている。この時点で、第3ゲーム装置10cは、正しくは残り93フレーム時間であるにもかかわらず、残り91フレーム時間と認識している。上述したように、カウントダウンを開始した時点で2フレーム時間分のずれが生じたためである。このとき、第3ゲーム装置10cと第1ゲーム装置10aとの遅延時間は4フレーム時間であるとすると、この時点で第3ゲーム装置10cから送信される補正データは、残り(91−4=)87フレーム時間を示すデータとなる。
【0055】
第3ゲーム装置10cからの補正データは、測定された遅延時間通りに4フレーム時間で第1ゲーム装置10aに受信されたとする。つまり、第1ゲーム装置10aは、残り89フレーム時間の時点において上記補正データを受信する。一方、この補正データは、残り89フレーム時間を示している。ここで、第1ゲーム装置10aは、この補正データを用いて残り時間を補正する。具体的には、ゲーム装置10aは、補正データにより示される残り時間と、自己のカウンタにより示される残り時間との平均値を算出し、新たなカウンタ値とする。図6の例では、第3ゲーム装置10cからの補正データにより示される残り時間は「87フレーム時間」であり、第1ゲーム装置10aのカウンタにより示される残り時間は「89フレーム時間」である。したがって、補正後のカウンタ値は、88フレーム時間を示すこととなる。一方、第1ゲーム装置10aにおいて補正データが受信された時点において、第3ゲーム装置10cのカウンタ値は、残り87フレーム時間を示している。したがって、この補正データにより補正が行われる前においては第1ゲーム装置10aのカウンタ値と第3ゲーム装置10cのカウンタ値とでは2フレーム時間分の差があったのに対して、補正後においては差が1フレーム時間となっている。つまり、2つのゲーム装置におけるカウンタ値の差が小さくなっている。
【0056】
以上のように、本実施形態においては、各ゲーム装置が補正データを互いに送信し合うことによって、各ゲーム装置におけるカウンタ値の差が収束していく(次第に小さくなっていく)。これによって、カウンタ値が0になるタイミング、すなわち、レースを開始するタイミングを正確に一致させることができる。
【0057】
また、本実施形態においては、各ゲーム装置は、補正データを複数のゲーム装置から受信する。これによって、ある補正データが、推測した残り時間の時点からずれて受信されたとしても、他の補正データによってそのずれを緩和したり、そのずれを打ち消したりすることができる。以下、この理由を図6を用いて説明する。
【0058】
図6においては、残り90フレーム時間において、第2ゲーム装置10bから第3ゲーム装置10cへ補正データが送信されている。なお、第2ゲーム装置10bと第3ゲーム装置10cとの遅延時間は4フレーム時間と測定されたものとし、当該補正データは、測定された遅延時間通りに4フレーム時間で第3ゲーム装置10cに受信されたとする。ここで、第2ゲーム装置10bからの補正データを受信した時点において、第3ゲーム装置10cにおけるカウンタは84フレーム時間を示している(図6参照)。つまり、第3ゲーム装置10cは、残り時間を84フレーム時間であると認識している。上述したように、カウントダウンを開始した時点で2フレーム時間分のずれが生じたためである。これに対して、第2ゲーム装置10bからの補正データは、残り86フレーム時間を示している。したがって、第3ゲーム装置10cは、この補正データを用いて残り時間を補正することができる。図6の例では、第2ゲーム装置10bからの補正データにより示される残り時間は「86フレーム時間」であり、第3ゲーム装置10cのカウンタにより示される残り時間は「84フレーム時間」であるので、補正後のカウンタ値は、残り85フレーム時間を示すこととなる。つまり、2フレーム時間分のずれが1フレーム分のずれに緩和されている。
【0059】
以上のように、本実施形態においては、複数のゲーム装置から補正データを受信することによって、ある1つのゲーム装置からの補正データによってカウンタ値にずれ(正しいと判断された残り時間に対するずれ)が生じても、他のゲーム装置からの補正データによってそのずれを緩和したり打ち消したりすることができる。また、本実施形態では、1つのゲーム装置からも複数回補正データを受信するので、ゲーム装置は、ある時点で受信した補正データによってカウンタ値にずれが生じても、その後に受信した補正データによってそのずれを緩和したり打ち消したりすることができる。そのため、カウンタ値が0になるタイミング、すなわち、レースを開始するタイミングを正確に一致させることができる。
【0060】
次に、本実施形態に係るゲームプログラムを実行することによってゲーム装置10において行われるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる主なデータについて図7を用いて説明する。図7は、ゲーム装置10のRAM24に記憶される主なデータを示す図である。図7に示すように、RAM24には、ゲームプログラム51およびゲームデータ61が記憶される。
【0061】
ゲームプログラム51には、遅延時間測定プログラム52、完了通知プログラム53、開始時点設定プログラム54、残り時間カウントプログラム55、補正データ送信プログラム56、補正プログラム57、およびレースゲームプログラム58等が含まれる。なお、ゲームプログラム51には、上記の他、他のゲーム装置から送信されてくるデータを受信する処理を実行するためのプログラム等が含まれる。
【0062】
遅延時間測定プログラム52は、自機と他のゲーム装置との間の通信の遅延時間を測定する処理を実行するためのプログラムである。完了通知プログラム53は、遅延時間の測定が完了したことを他のゲーム装置に通知する処理を実行するためのプログラムである。開始時点設定プログラム54は、自機がレースを開始するまでの残り時間を示すカウンタ値(後述する開始時点データ)を設定する処理を実行するためのプログラムである。残り時間カウントプログラム55は、上記カウンタ値を所定フレーム時間だけ減算した時間となるように更新する処理を実行するためのプログラムである。補正データ送信プログラム56は、他のゲーム装置が所定のイベントの実行を開始するまでの残り時間を他のゲーム装置毎に算出し、当該残り時間を示す補正データを他のゲーム装置へ送信する処理を実行するためのプログラムである。補正プログラム57は、補正データが他のゲーム装置から送信されてきたとき、自機のカウンタ値により示される残り時間を当該補正データに基づいて補正する処理を実行するためのプログラムである。レースゲームプログラム58は、プレイヤによるゲーム操作に応じてレースゲームを進行させる処理を実行するためのプログラムである。
【0063】
一方、ゲームデータ61には、遅延時間データ62、完了通知データ63、開始時点データ64、送信補正データ65、および受信補正データ66が含まれる。なお、RAM24には、図7に示すデータの他、各プレイヤによって操作されるカートに関するデータ(カートの位置や速度や画像データ)等、レースゲームに必要なデータが記憶される。なお、図7では、第1ゲーム装置10aのRAM24に記憶されるデータを例として説明するが、他のゲーム装置10bおよび10cにおいても同様のデータがRAM24に記憶される。
【0064】
遅延時間データ62は、自機と他のゲーム装置との間の通信における遅延時間を示すデータである。遅延時間データ62には、第1ゲーム装置10aと第2ゲーム装置10bとの間の遅延時間を示す第1遅延時間データ62a、および、第1ゲーム装置10aと第3ゲーム装置10cとの間の遅延時間を示す第2遅延時間データ62bが含まれる。なお、第2ゲーム装置10bに記憶される遅延時間データ62においては、第1遅延時間データ62aは第2ゲーム装置10bと第1ゲーム装置10aとの間の遅延時間を示し、第2遅延時間データ62bは第2ゲーム装置10bと第3ゲーム装置10cとの間の遅延時間を示す。同様に、第3ゲーム装置10cに記憶される遅延時間データ62においては、第1遅延時間データ62aは第3ゲーム装置10cと第1ゲーム装置10aとの間の遅延時間を示し、第2遅延時間データ62bは第3ゲーム装置10cと第2ゲーム装置10bとの間の遅延時間を示す。なお、遅延時間データ62は、遅延時間の測定処理によってRAM24に記憶される。遅延時間の測定処理は、各ゲーム装置10a〜10cにおいてそれぞれ独立して実行されるので、各ゲーム装置によって測定結果は異なる。例えば、第1ゲーム装置10aに記憶される第1遅延時間データ62aと、第2ゲーム装置10bに記憶される第1遅延時間データ62aとはともに、第1ゲーム装置10aと第2ゲーム装置10bとの間の遅延時間を示すデータであるが、遅延時間の値は異なることもある。
【0065】
完了通知データ63は、他のゲーム装置から自機へ送信されてくる上記完了通知を示すデータである。他のゲーム装置から自機へ完了通知データが送信されてくると、ゲーム装置10は当該完了通知データをRAM24へ記憶する。第1ゲーム装置10aに記憶される完了通知データ63には、第2ゲーム装置10bから送信されてくる完了通知を示す第1完了通知データ63aと、第3ゲーム装置10cから送信されてくる完了通知を示す第2完了通知データ63bとが含まれる。
【0066】
開始時点データ64は、レースを開始する時点を示すデータである。本実施形態においては、レースを開始する時点の情報として、現在からレース開始時点までの残り時間のカウンタ値を示すデータが開始時点データ64として記憶される。なお、開始時点データ64は、レースを開始する時点を示すデータであればよく、例えば、レースを開始する時刻と現在時刻とを示すデータであってもよい。
【0067】
送信補正データ65は、自機から他のゲーム装置へ送信すべき補正データである。上述したように、送信補正データ65は、それが送信先のゲーム装置で受信された時点における、レース開始までの残り時間の推定値を示す。第1ゲーム装置10aに記憶される送信補正データ65には、第2ゲーム装置10bへ送信すべき補正データを示す第1送信補正データ65aと、第3ゲーム装置10cへ送信すべき補正データを示す第2送信補正データ65aとが含まれる。同様に、第2ゲーム装置10bおよび第3ゲーム装置10cに記憶される送信補正データ65には、他の2つのゲーム装置へ送信すべき2つの補正データが、第1送信補正データ65aおよび第2送信補正データ65bとして含まれる。本実施形態では、送信補正データ65の内容は毎フレーム更新され、更新される度に他のゲーム装置へ送信される。
【0068】
受信補正データ66は、他のゲーム装置から自機へ送信されてきた補正データである。受信補正データ66は、それを自機が受信した時点における、レース開始までの残り時間の推定値を示す。受信補正データ66の内容は、他のゲーム装置から補正データを受信する度に更新される。
【0069】
次に、ゲームプログラムを実行することによってゲーム装置10において行われるゲーム処理の詳細を、図8および図9を用いて説明する。図8は、ゲーム装置10において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置10の電源が投入されると、ゲーム装置10のCPUコア21は、図示しないブートROMに記憶されている起動プログラムを実行し、RAM24等の各ユニットが初期化される。そして、メモリカード17に格納されたゲームプログラムがRAM24に読み込まれ、CPUコア21によって当該ゲームプログラムの実行が開始される。図8に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。なお、図8および図9においては、ゲーム処理のうち、レースゲームを開始するタイミングを各ゲーム装置間で調整する処理について詳細に示し、本願発明と関連しない他のゲーム処理については詳細な説明を省略する。
【0070】
図8のステップS1において、まず、初期設定処理が実行される。初期設定処理においては、CPUコア21は、ゲームに参加するためにネットワークを介して通信可能となった各ゲーム装置に対して、固有のIDを設定する。また、初期設定処理において、レースゲームのゲーム空間が構築され、各プレイヤによって操作されるカートなどの各ゲームオブジェクトや、ゲーム装置10によって操作されるゲームオブジェクトが初期位置に配置される。(カートはレースゲーム限定の操作オブジェクトを示すので修正しました)
【0071】
続くステップS2において、開始時点決定処理が実行される。開始時点決定処理は、レースゲームを開始するタイミングを決定するための処理である。レースゲームは、開始時点決定処理が終了することによって各ゲーム装置で開始される。以下、図9を用いて開始時点決定処理の詳細を説明する。
【0072】
図9は、図8に示すステップS2の詳細な処理の流れを示すフローチャートである。開始時点決定処理においては、まずステップS11において、遅延時間測定プログラム52が実行されることによって、自機と他のゲームとの通信の遅延時間が測定される。遅延時間の測定は、上述したように、他のゲーム装置それぞれについて個別に測定される(図5に示す状態(a)参照)。すなわち、第1ゲーム装置10aであれば、第1ゲーム装置10aと第2ゲーム装置10bとの間の遅延時間、および、第1ゲーム装置10aと第3ゲーム装置10cとの間の遅延時間を測定する。ステップS11で測定された結果は、遅延時間データ62としてRAM24に記憶される。例えば第1ゲーム装置10aにおいては、第1ゲーム装置10aと第2ゲーム装置10bとの間の遅延時間を示すデータが第1遅延時間データ62aとしてRAM24に記憶され、第1ゲーム装置10aと第3ゲーム装置10cとの間の遅延時間を示すデータが第2遅延時間データ62bとしてRAM24に記憶される。なお、各ゲーム装置間の遅延時間はそれぞれ異なっているので、遅延時間の測定が終了するタイミングは各ゲーム装置においてばらばらである。ステップS11の処理が完了すると、ステップS12の処理が実行される。
【0073】
ステップS12においては、完了通知プログラム53が実行されることによって、完了通知が他のゲーム装置へ送信される。すなわち、CPUコア21は、完了通知データを生成して他の全てのゲーム装置へ送信する。ステップS12の次にステップS13の処理が実行される。
【0074】
ステップS13において、CPUコア21は、他の全てのゲーム装置から完了通知を受信したか否かを判定する。なお、図示していないが、CPUコア21は、ゲーム処理中において一定時間毎(例えば1フレーム毎)に他のゲーム装置からのデータを受信しているか否かをチェックする。そして、完了通知データを受信した場合、受信した完了通知データをRAM24に記憶する。したがって、ステップS13の判定は、他の全てのゲーム装置からの完了通知データがRAM24に記憶されているか否かによって行うことができる。判定の結果、少なくとも1つの他のゲーム装置から完了通知を受信していないと判定される場合、ステップS14の処理が実行される。一方、他の全てのゲーム装置から完了通知を受信していると判定される場合、ステップS15の処理が実行される。
【0075】
ステップS14において、CPUコア21は、他のゲーム装置から補正データを受信しているか否かを判定する。ステップS14の判定は、RAM24に受信補正データ66が記憶されているか否かによって行うことができる。レース開始までのカウントダウンが開始されていない時点では、補正データがまだ受信されていないからである。判定の結果、他のゲーム装置から補正データを受信していると判定される場合、ステップS16の処理が実行される。一方、他のゲーム装置から補正データを受信していない場合、ステップS13の処理が再度実行される。以降、ステップS13およびS14のいずれかの判定処理における判定結果が肯定となるまで、ステップS13およびS14の処理が繰り返し実行される。
【0076】
ステップS15においては、開始時点設定プログラム54が実行されることによって、予め定められた所定の残り時間の値に開始時点データ64の内容が設定される。例えば、当該所定の残り時間の値が100フレーム時間であるとすると、100フレーム時間を示すデータが開始時点データ64としてRAM24に記憶される。
【0077】
また、ステップS16においては、開始時点設定プログラム54が実行されることによって、受信した補正データに従って開始時点データ64の内容が設定される。例えば、RAM24に記憶されている受信補正データ66により示される残り時間の値が95フレーム時間であるとすると、95フレーム時間を示すデータが開始時点データ64としてRAM24に記憶される。
【0078】
以上のステップS13〜S16によって、各ゲーム装置においてレース開始までのカウントダウンが開始される。他の全てのゲーム装置から完了通知を受信したゲーム装置においてはステップS13の判定処理の結果が肯定となり、ステップS15の処理が実行される。その結果、所定の残り時間からカウントダウンが開始される。一方、他の全てのゲーム装置から完了通知を受信する前に、他のゲーム装置から補正データを受信したゲーム装置においてはステップS14の判定処理の結果が肯定となり、ステップS16の処理が実行される。その結果、補正データにより示される残り時間からカウントダウンが開始される。ステップS15またはS16の後、ステップS17〜S22の一連の処理が実行されることによって、残り時間のカウントダウンが行われる。なお、ステップS17〜S22の処理ループは、1フレームにつき1回実行される。
【0079】
ステップS17において、残り時間カウントプログラム55が実行されることによって、残り時間がカウントダウンされる。CPUコア21は、RAM24に記憶されている開始時点データ64により示される残り時間を、1フレーム時間だけ減算した値に更新する。
【0080】
続くステップS18およびS19において、補正データ送信プログラム56が実行されることによって、補正データが生成されて他のゲーム装置へ送信される。すなわち、ステップS18において、他のゲーム装置のそれぞれに送信すべき補正データが生成される。補正データにより示される残り時間は、自機において設定されている現在の残り時間から、補正データの送信先の他のゲーム装置と自機との間の遅延時間を減算した値となる。すなわち、CPUコア21は、RAM24に記憶されている遅延時間データ62と開始時点データ64とを参照して、開始時点データ64により示される残り時間から遅延時間データ62により示される遅延時間を減算することによって補正データを生成する。CPUコア21は、他のゲーム装置毎に減算処理を行い、補正データを他のゲーム装置毎に生成する。例えば第1のゲーム装置10aは、第2のゲーム装置10bへ送信すべき補正データと、第3のゲーム装置10cへ送信すべき補正データとを生成する。生成された各補正データは、送信補正データ65の第1および第2送信補正データ65aおよび65bとしてRAM24に記憶される。
【0081】
続くステップS19において、ステップS18で生成された各補正データが他のゲーム装置へ送信される。CPUコア21は、RAM24に記憶されている送信補正データ65を各ゲーム装置へそれぞれ送信する。すなわち、第1のゲーム装置10aであれば、第1送信補正データ65aを第2ゲーム装置10bへ送信するとともに、第1送信補正データ65bを第3ゲーム装置10cへ送信する。
【0082】
続くステップS20において、CPUコア21は、今回のフレームにおいて他のゲーム装置から補正データを新たに受信したか否かを判定する。この判定は、今回のフレームにおいてRAM24の受信補正データ66が更新されたか否かによって行うことができる。判定の結果、他のゲーム装置から補正データを新たに受信したと判定される場合、ステップS21の処理が実行される。一方、他のゲーム装置から補正データを新たに受信していないと判定される場合、ステップS21の処理がスキップされてステップS22の処理が実行される。
【0083】
ステップS21においては、補正プログラム57が実行されることによって、受信された補正データに基づいて開始時点データ64の内容が補正される。具体的には、CPUコア21は、受信された補正データにより示される残り時間と、開始時点データ64により示される残り時間との平均値を算出し、開始時点データ64の内容を当該平均値に更新する。ステップS21の次にステップS22の処理が実行される。
【0084】
なお、本実施形態では、2つの残り時間の平均値を更新後の残り時間とするが、更新後の残り時間の算出方法はこれに限らず、更新後の残り時間の値が当該2つの残り時間の間の値となるような算出方法であればどのような方法であってもよい。例えば、CPUコア21は、それまでの補正結果と今回受信された補正データとに基づいて補正量(現在の残り時間に対して加算または減算を行う量)を算出するようにしてもよい。具体的には、a回目(aは1以上の整数)の補正データの受信時においては、次の式に従って補正量を算出してもよい。
Add(a)=(Add(a−1)+Diff(a))/2
上式において、Add(n)は(nは1以上の整数)、n回目の補正データを受信したときにおける補正量を示す関数である。また、Diff(n)は、n回目に受信した補正データにより示される残り時間と、現在の残り時間(開始時点データ64により示される残り時間)との差である。つまり、上式は、それまで(a−1回目まで)の補正結果(Add(a−1))と、今回(a回目に)受信された補正データに基づく補正量とを平均した値を補正量とするものである。なお、補正データにより示される残り時間と自機の残り時間との平均値を算出する方法では、残り時間の値が小さくなってきたときに、受信された補正データにより示される残り時間が自機の残り時間から大きくずれているような場合、残り時間が大きく補正されてしまい、残り時間が0になるタイミングがゲーム装置間でずれてしまうおそれがある。これに対して、それまでの補正結果を今回の補正量に反映させる方法では、上記のような場合であっても当該補正データによる影響をより小さくすることができ、残り時間が0になるタイミングをゲーム装置間でより一致させやすくなる。
【0085】
ステップS22においては、レースを開始するタイミングが到来したか否かが判定される。すなわち、CPUコア21は、開始時点データ64により示される残り時間が0になったか否かを判定する。判定の結果、レースを開始するタイミングが到来したと判定される場合、すなわち、上記残り時間が0になった場合、CPUコア21は開始時点決定処理を終了し、レースを開始する。一方、レースを開始するタイミングが到来していないと判定される場合、すなわち、上記残り時間が0になっていない場合、ステップS17の処理が再度実行される。以降、ステップS22においてレース開始タイミングが到来したと判定されるまで、ステップS17〜S22の処理ループが繰り返される。
【0086】
図8の説明に戻り、ステップS2の開始時点決定処理が終了すると、ステップS3〜S5において、レースゲームプログラム58が実行されることによってレースが開始される。すなわち、ステップS3において、レースゲームを進行するための処理が実行される。この処理は、プレイヤによる操作に応じてカートなどのゲームオブジェクトの動作を制御する処理である。続くステップS4において、ステップS3の処理結果に従ってゲーム画像が生成され、第2LCD12に表示される。続くステップS5において、レースゲームを終了するか否かが判定される。CPUコア21は、例えば、全てのゲーム装置のプレイヤによって操作されるカートがゴールしたか否かや、レース開始から予め定められた所定時間が経過したか否かによって、レースゲームを終了するか否かを判定する。判定の結果、レースゲームを終了すると判定される場合、CPUコア21は図8に示すゲーム処理を終了する。一方、レースゲームを終了しないと判定される場合、ステップS3の処理が再度実行される。以降、レースゲームを終了すると判定されるまで、ステップS3〜S5の処理が繰り返し実行されることによってレースゲームが進行する。
【0087】
以上のように、本実施形態によれば、レース開始までのカウントダウンが開始されると、各ゲーム装置が互いに補正データを送信し合う。そして、他のゲーム装置から送信されてきた補正データを用いて自機のカウンタ値を補正することによって、各ゲーム装置間でカウンタ値が次第に一致していく。その結果、レースを開始するタイミングを各ゲーム装置間で正確に一致させることができる。
【0088】
また、本実施形態においては、各ゲーム装置における残り時間のカウンタ値は、各ゲーム装置が互いに調整し合い、「親機」に相当するゲーム装置は存在しない。そのため、親機が通信不能となったためにゲームを開始することができなくなるようなことがなく、カウントダウンが開始された後、何らかの理由で通信不能となったゲーム装置が発生したとしても、他のゲーム装置には影響がない。すなわち、他のゲーム装置間では、レースの開始タイミングを正確に一致させてゲームを続行することができる。
【0089】
また、本実施形態においては、レース開始までのカウントダウンが行われる間、各ゲーム装置間で補正データが繰り返し送信される。したがって、ネットワークの接続環境(通信速度やノイズ)が時々刻々変化するような場合でも、レースの開始タイミングを各ゲーム装置間で正確に一致させることができる。
【0090】
なお、上記実施形態においては、ゲーム装置10は補正データを毎フレーム送信することとしたが、補正データを送信する時間間隔はこれに限定されない。ゲーム装置は、例えば数フレームに1回補正データ送信するようにしてもよいし、補正データを送信する間隔を一定の範囲内でランダムに決定するようにしてもよい。また、上記実施形態においては、1フレームの間に他の全てのゲーム装置へ補正データを送信するものとしたが、他の実施形態においては、1フレームにつき1つの他のゲーム装置へ補正データを送信するようにしてもよい。なお、このとき、1つのゲーム装置が他の全てのゲーム装置へ補正データを送信するように、ゲーム装置は送信先のゲーム装置を毎回変えて補正データを送信するようにする。
【0091】
また、上記実施形態においては、レース開始までの残り時間をフレーム時間を単位として表した。ここで、開始時点データ64により示される残り時間は、レース開始までの残りフレームを表す整数で管理される必要はなく、小数で管理してもよい。このとき、ステップS22の判定処理においては、小数点を四捨五入したり、小数点以下を切り捨てまたは切り上げしたりして残り時間を判断すればよい。
【0092】
また、上記実施形態において、1フレームにおいて2つ以上の補正データを同時に受信した場合も考えられる。この場合、ゲーム装置は、受信された複数の補正データのうちのいずれか1つの補正データに基づいて残り時間を補正してもよいし、複数の補正データの全てに基づいて残り時間を補正してもよい。なお、いずれか1つの補正データに基づいて残り時間を補正する場合、ゲーム装置は、例えば最初または最後に受信した補正データを選択し、選択した補正データに基づいて残り時間を補正してもよい。また、複数の補正データの全てに基づいて残り時間を補正する場合、各補正データにより示される各残り時間と、自機のカウンタ値の残り時間との平均値を算出するようにしてもよい。
【0093】
また、上記実施形態では、レースゲームにおけるレースの開始のタイミングを各ゲーム装置間でできる限り一致させる場合を例として説明したが、本発明は、ゲーム中に行われる何らかのイベントを開始するために各ゲーム装置間でできる限りタイミングを合わせるゲームシステムに適用することが可能である。例えば、ゲーム中のミニゲームの開始タイミングをできる限り一致させる場合や、特定のアイテムを出現させるタイミングをできる限り一致させる場合等、種々の状況に適用することができる。
【産業上の利用可能性】
【0094】
本発明は、ゲームシステムを構成する各ゲーム装置間においてより正確にタイミングをとること等を目的として、ゲームシステムやゲーム装置、ゲームプログラム等に利用することが可能である。
【図面の簡単な説明】
【0095】
【図1】本実施形態に係るゲームシステムの構成を示すブロック図
【図2】本実施形態に係るゲームシステムに含まれるゲーム装置の外観図
【図3】ゲーム装置の内部構成図
【図4】本実施形態におけるゲームのゲーム画面を示す図
【図5】レースゲームが開始されるまでの処理の概要を示す図
【図6】カウンタの補正処理を説明するための図
【図7】ゲーム装置10のRAM24に記憶される主なデータを示す図
【図8】ゲーム装置10において実行されるゲーム処理の流れを示すメインフローチャート
【図9】図8に示すステップS2の詳細な処理の流れを示すフローチャート
【符号の説明】
【0096】
1 ネットワーク
10 ゲーム装置
12 第2LCD
17 メモリカード
21 CPUコア
24 RAM
33 無線通信部
51 ゲームプログラム51
52 遅延時間測定プログラム
53 完了通知プログラム
54 開始時点設定プログラム
55 残り時間カウントプログラム
56 補正データ送信プログラム
57 補正プログラム
58 レースゲームプログラム

【特許請求の範囲】
【請求項1】
ネットワークを介して複数のゲーム装置を接続してなる通信ゲームシステムに含まれるゲーム装置のコンピュータにおいて実行される通信ゲームプログラムであって、
自機と他のゲーム装置との間の通信に係る遅延時間を測定する測定ステップと、
自機が所定のイベントの実行を開始する時点を示す開始時点データをゲーム装置のメモリに記憶する記憶ステップと、
前記他のゲーム装置が所定のイベントの実行を開始する時点を前記遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する送信ステップと、
自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から送信されてきたとき、前記開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する補正ステップと、
前記開始時点データにより示される時点が到来したときに前記所定のイベントを実行するイベント実行ステップとを前記コンピュータに実行させる、通信ゲームプログラム。
【請求項2】
前記開始時点データは、自機が所定のイベントの実行を開始する時点を現在から当該時点までの残り時間に係るデータであり、
前記記憶ステップは、前記通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で実行され、
前記開始時点データを所定時間だけ減算した時間に係るデータとなるように当該開始時点データを更新する処理を所定時間毎に繰り返し実行する減算ステップを前記コンピュータにさらに実行させる、請求項1に記載の通信ゲームプログラム。
【請求項3】
遅延時間の測定が完了したことを前記他のゲーム装置に通知する完了通知ステップを前記コンピュータにさらに実行させ、
前記減算ステップは、全ての前記他のゲーム装置から遅延時間の測定が完了したことの通知を受信したこと、または、自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から初めて送信されてきたことに応じて実行が開始される、請求項2に記載の通信ゲームプログラム。
【請求項4】
前記記憶ステップにおいては、全ての前記他のゲーム装置から遅延時間の測定が完了したことの通知を受信したとき、予め定められた時点を示すデータが前記開始時点データとして前記メモリに記憶され、自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から初めて送信されてきたとき、当該データが前記開始時点データとして前記メモリに記憶される、請求項3に記載の通信ゲームプログラム。
【請求項5】
前記送信ステップは、前記通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後において、予め決められたタイミングで実行される、請求項1に記載の通信ゲームプログラム。
【請求項6】
前記送信ステップは、前記通信ゲームシステムに含まれる全てのゲーム装置において遅延時間の測定が完了した後で所定時間毎に繰り返し実行される、請求項5に記載の通信ゲームプログラム。
【請求項7】
前記送信ステップにおいては、前記他のゲーム装置が所定のイベントの実行を開始する時点は、当該他のゲーム装置に関する遅延時間と前記開始時点データとに基づいて算出される、請求項1に記載の通信ゲームプログラム。
【請求項8】
前記補正ステップにおいては、前記他のゲーム装置から送信されてくるデータにより示される時点と、前記開始時点データにより示される時点との間の時点となるように補正後の時点が算出される、請求項1に記載の通信ゲームプログラム。
【請求項9】
ネットワークを介して複数のゲーム装置を接続してなる通信ゲームシステムであって、
各ゲーム装置は、
自機と他のゲーム装置との間の通信に係る遅延時間を測定する測定手段と、
自機が所定のイベントの実行を開始する時点を示す開始時点データをメモリに記憶する記憶制御手段と、
前記他のゲーム装置が所定のイベントの実行を開始する時点を前記遅延時間に基づいて当該他のゲーム装置毎に算出し、当該時点を示すデータを他のゲーム装置へ送信する送信手段と、
自機が所定のイベントの実行を開始する時点を示すデータが前記他のゲーム装置から送信されてきたとき、前記開始時点データにより示される時点を当該送信されてきたデータに基づいて補正する補正手段と、
前記開始時点データにより示される時点が到来したときに前記所定のイベントを実行するイベント実行手段とを備える、通信ゲームシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2007−97838(P2007−97838A)
【公開日】平成19年4月19日(2007.4.19)
【国際特許分類】
【出願番号】特願2005−291640(P2005−291640)
【出願日】平成17年10月4日(2005.10.4)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】