説明

プログラム、情報記憶媒体及び画像生成装置

【課題】 ピアツーピア接続されたゲーム装置間で操作データを送受信してリアルタイムにゲームを進行することのできるゲームシステムを実現すること。
【解決手段】 ピアツーピア接続された2台のゲーム装置A,Bにおいて、フレーム毎に同期コマンドをセットしたフレームデータを相手装置に送信する。そして、自装置から同期コマンドを送信し、且つ、相手装置から同期コマンドを受信したときを相手装置との同期が取れたと判断し、このときの自装置でのシーケンス番号及び受信したフレームデータのシーケンス番号を、各装置での同期完了時のシーケンス番号とする。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、他コンピュータとピアツーピア接続されたコンピュータに、互いのコンピュータで同一の仮想三次元空間を共有するためのプログラム等に関する。
【背景技術】
【0002】
複数のゲーム装置間でリアルタイムにゲームが進行されるネットワーク型のゲームシステムが知られている。かかるゲームシステムの一形態として、マスター装置であるゲームデータ配信装置においてゲーム演算が行われてゲーム画像データやゲーム音データ等のゲームデータが生成され、スレーブ装置である各ゲーム装置において、ゲームデータ配信装置から配信されたゲームデータを再生することでゲームが進行される、いわゆるマスター・スレーブ型がある。
【0003】
この場合、各ゲーム装置間でのゲームデータの再生同期を取る必要がある。そこで、各ゲーム装置における動作クロックを同期させるための技術として、(1)ゲームデータ配信装置から該装置のクロックを各ゲーム装置に配信し、各ゲーム装置において受信したクロックを所定倍することにより該装置での動作クロックを生成する技術や、(2)ゲームデータ配信装置から、該装置のクロック速度の指標となる指標データを各ゲーム装置に配信し、各ゲーム装置において受信した指標データを基に該装置での動作クロックを少しずつ速める/遅らせることで、徐々にゲームデータ配信装置のクロックに近づけていく技術が知られている。ここで、指標データとは、累積クロック数や累積ラスター数といったある時点からの経過時間を示すデータである(例えば、特許文献1,2参照)。
【特許文献1】特開2000−254354号公報
【特許文献2】特開2000−288256号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、上述した特許文献1,2に開示されている技術では、マスター装置の処理負担が大きくなるため、スレーブ装置に比べて高性能なゲーム装置とする必要がある。このため、マスター装置及びスレーブ装置の何れにも利用可能なゲーム装置を製造・販売使用とする場合には、双方の機能を有したゲーム装置とする必要があり、必然的に高性能・高価なゲーム装置となる。また、マスター装置及びスレーブ装置双方の機能を必要とするため、制御が複雑化する。そこで、マスター装置及びスレーブ装置の区別の無いピアーピア型でのゲーム進行の同期の実現が望まれていた。
【0005】
上記事情に鑑み、本発明は、ピアツーピア接続されたゲーム装置間で操作データを送受信してリアルタイムにゲームを進行することのできるゲームシステムの実現を目的としている。
【課題を解決するための手段】
【0006】
上記課題を解決するための第1の発明は、
他コンピュータとピアツーピア接続されたコンピュータ(例えば、図1,2,11のゲーム装置1000)に、互いのコンピュータで同一の仮想三次元空間を共有するために、自コンピュータの自操作データと前記他コンピュータから受信する他操作データとに基づく前記仮想三次元空間の空間構成演算と、前記空間構成演算により構成された前記仮想三次元空間のレンダリング処理とをフレーム時間間隔で繰り返し実行させるためのプログラム(例えば、図11のゲームプログラム410)であって、
自操作データを自コンピュータのフレーム番号である自シーケンス番号とともに前記他コンピュータに送信する送信手段(例えば、図11のゲーム進行部214;図18のステップC3)、
前記送信手段と同様にして前記他コンピュータから送信される他操作データ及び前記他コンピュータのフレーム番号である他シーケンス番号を受信する受信手段(例えば、図11のゲーム進行部214;図18のステップC5)、
前記送信手段により送信された自シーケンス番号の操作データ、及び、前記受信手段により受信された操作データのうちの当該自シーケンス番号と一定の相対関係でなる他シーケンス番号の操作データに基づいて、前記空間構成演算を行うように制御する空間構成演算制御手段(例えば、図11のゲーム進行部214;図18のステップC11)、
として前記コンピュータを機能させるためのプログラムである。
【0007】
また、第8の発明は、
他の画像生成装置とピアツーピア接続され、互いの画像生成装置で同一の仮想三次元空間を共有するために、自画像生成装置の自操作データと前記他の画像生成装置から受信する他操作データとに基づく前記仮想三次元空間の空間構成演算と、前記空間構成演算により構成された前記仮想三次元空間のレンダリング処理とをフレーム時間間隔で繰り返し実行する画像生成装置(例えば、図1,11のゲーム装置1000)であって、
自操作データを自画像生成装置のフレーム番号である自シーケンス番号とともに前記他の画像生成装置に送信する送信手段(例えば、図11のゲーム進行部214;図18のステップC3)と、
前記送信手段と同様にして前記他の画像生成装置から送信される他操作データ及び前記他の画像生成装置のフレーム番号である他シーケンス番号を受信する受信手段(例えば、図11のゲーム進行部214;図18のステップC5)と、
前記送信手段により送信された自シーケンス番号の操作データ、及び、前記受信手段により受信された操作データのうちの当該自シーケンス番号と一定の相対関係でなる他シーケンス番号の操作データとに基づいて、前記空間構成演算を行うように制御する空間構成演算制御手段(例えば、図11のゲーム進行部214;図18のステップC11)と、
を備えた画像生成装置である。
【0008】
この第1又は第8の発明によれば、他コンピュータ(或いは画像生成装置)とピアツーピア接続されたコンピュータ(或いは画像生成装置)において、自シーケンス番号の操作データと、この自シーケンス番号と一定の相対関係でなる他シーケンス番号の操作データとに基づいて仮想三次元空間の空間構成演算が行われる。即ち、1フレーム分の空間構成演算の基となる自操作データの自シーケンス番号と他操作データの他シーケンス番号との相対関係は一定である。このため、各コンピュータ(画像生成装置)において同一の仮想三次元空間が構成され、従って、同期の取れた画像生成が実現される。またこのとき、シーケンス番号が一定の相対関係にある操作データを基に空間構成演算が行われるため、画像生成の同期を少ない処理負担で実現することが可能となる。
【0009】
第2の発明は、第1の発明のプログラムであって、
前記送信手段が、現在から所定フレーム数分の自操作データを自シーケンス番号とともに送信し(例えば、図18のステップC3)、
前記受信手段が、前記送信手段による送信と同様にして前記他コンピュータから送信される前記所定フレーム数分の他操作データ及び他シーケンス番号を受信し(例えば、図18のステップC5)、
前記空間構成演算制御手段が、当該自シーケンス番号と前記一定の相対関係でなる他シーケンス番号の操作データが前記受信手段により受信されていない場合には新たな前記空間構成演算を行わず、前記空間構成演算を行わなかった後、最初に前記空間構成演算を行うときに前記送信手段により送信された前記所定フレーム数分の自操作データのうちの当該空間構成演算を行わなかったフレーム数分の自操作データ及び前記受信手段により受信された前記所定フレーム数分の他操作データのうちの当該空間構成演算を行わなかったフレーム数分の他操作データに基づいて、当該空間構成演算を行わなかったフレーム数分の空間構成演算を行う(例えば、図18のステップC9〜C11)、
ように前記コンピュータを機能させるためのプログラムである。
【0010】
この第2の発明によれば、現在から所定フレーム数分の操作データが自シーケンス番号とともに送信され、自シーケンス番号と一定の相対関係でなる他シーケンス番号の操作データが受信されていない場合には仮想三次元空間の空間構成演算が行われず、空間構成演算が行われなかった後、最初に空間構成演算が行われるときに、この空間構成演算が行われなかったフレーム数分の自操作データ及び他操作データに基づいて、空間構成演算が行われなかったフレーム数分の空間構成演算が行われる。
【0011】
従って、空間構成演算が行われない場合、他コンピュータに対する画像生成の遅れが生じるが、その後、この空間構成演算が行われなかったフレーム数分の自操作データ及び他操作データに基づいて最初の空間構成演算が行われることで、この画像生成の遅れを取り戻すことが可能となる。またこのとき、所定フレーム数分の操作データが送信されるので、例えば操作データが不達であった場合でも問題なく空間構成演算を行うことが可能となる。
【0012】
第3の発明は、第2の発明のプログラムであって、
前記空間構成演算制御手段が、前記受信手段により受信された他操作データの他シーケンス番号のうちの最新の他シーケンス番号と、前回前記空間構成演算を行った際の基礎とした他操作データの他シーケンス番号とが同じ番号の場合に、前記空間構成演算を行わないと判定するように前記コンピュータを機能させるためのプログラムである。
【0013】
この第3の発明によれば、受信された他操作データの他シーケンス番号のうちの最新の他シーケンス番号と、前回空間構成演算を行った際の基礎とした他操作データの他シーケンス番号とが同じ番号の場合、空間構成演算が行われない。つまり、新たな他操作データが受信されていない場合、空間構成演算は行われない。
【0014】
第4の発明は、第2又は第3の発明のプログラムであって、
前記空間構成演算制御手段が、前記受信手段により受信された他操作データの他シーケンス番号のうちの最新の他シーケンス番号と、前回前記空間構成演算を行った際の基礎とした他操作データの他シーケンス番号との差分と同じフレーム数分の空間構成演算を行うように前記コンピュータを機能させることにより、前記空間構成演算を行わなかった後、最初に前記空間構成演算を行う際、自動的に前記空間構成演算を行わなかったフレーム数分の空間構成演算が行われることを特徴とするプログラムである。
【0015】
この第4の発明によれば、空間構成演算が行われなかった後、最初に空間構成演算が行われる際、最新のシーケンス番号と前回空間構成演算を行った際の基礎とした他操作データの他シーケンス番号との差分と同じフレーム数分の空間構成演算が行われることにより、自動的に空間構成演算が行われなかったフレーム数分の空間構成演算が行われる。
【0016】
第5の発明は、第1〜第4の何れかの発明のプログラムであって、
前記他コンピュータとの間で、自シーケンス番号及び他シーケンス番号の送受信を行って自シーケンス番号と他シーケンス番号との相対関係を判定し、前記一定の相対関係を決定する同期確立処理を実行する同期確立処理手段(例えば、図11の同期処理部212;図16のステップA7)として前記コンピュータを機能させるためのプログラムである。
【0017】
この第5の発明によれば、他コンピュータとの間で、自シーケンス番号及び他シーケンス番号の送受信を行って自シーケンス番号と他シーケンス番号との相対関係を判定し、自シーケンス番号と他シーケンス番号との一定の相対関係が決定される。即ち、シーケンス番号の送受信及びその相対関係の判定といった少ない処理負担で、コンピュータ間の同期を確立することができる。またこのとき、特許文献1,2に開示されているようなマスター/スレーブ装置それぞれのコンピュータ間で処理負担が偏るといったことは無い。
【0018】
第6の発明は、第5の発明のプログラムであって、
前記同期確立処理手段による同期確立処理の後に、前記各コンピュータの操作データに基づき、当該各コンピュータそれぞれの操作対象キャラクタの前記仮想三次元空間内での移動及び/又は動作を演算制御して前記空間構成演算を行うように前記コンピュータを機能させるためのプログラムである。
【0019】
この第6の発明によれば、同期確立処理の後に、各コンピュータの操作データに基づき、各コンピュータそれぞれの操作対象キャラクタの仮想三次元空間内での移動及び/又は動作を演算制御して空間構成演算が行われる。従って、各コンピュータにおいてその操作対象キャラクタを操作してリアルタイムに進行するゲームを実現することが可能となる。
【0020】
第7の発明は、第1〜第6の何れかの発明のプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体(例えば、図11の記憶部400)である。
【0021】
ここでいう「情報記憶媒体」とは、記憶されている情報をコンピュータが読み取り可能な、例えばハードディスクやMO、CD−ROM、DVD、メモリカード、ICメモリ等の記憶媒体である。従って、この第7の発明によれば、該情報記憶媒体に記憶されている情報をコンピュータに読み取らせて演算処理を実行させることで、第1〜第6の何れかの発明と同様の効果を奏することができる。
【発明の効果】
【0022】
本発明によれば、ゲーム装置間で操作データを送受信してリアルタイムにゲームが進行されるピアツーピア型のゲームシステムにおける同期が実現できる。またこのとき、シーケンス番号が一定の相対関係にある操作データを基に空間構成演算が行われるため、画像生成の同期を少ない処理負担で実現することが可能となる。
【発明を実施するための最良の形態】
【0023】
以下、図面を参照して本発明の好適な実施形態を説明する。尚、以下では、本発明を、格闘アクションゲームを実行する業務用ゲーム装置に適用した場合を説明するが、本発明の適用可能な実施形態がこれに限定されるものではない。
【0024】
[全体構成]
図1は、本実施形態におけるゲームシステムの全体構成を示すブロック図である。同図に示すように、本実施形態のゲームシステムは2台のゲーム装置1000を備え、各装置間が通信ケーブルKによって通信可能に接続され、その通信形態はピアツーピア接続で成るものである。
【0025】
図2に、ゲーム装置1000の外観の一例を示す図である。同図に示すように、ゲーム装置1000は、プレーヤが操作して格闘アクションゲームを楽しむものであり、ゲーム画面を表示するディスプレイ1012と、ゲームの効果音やBGMを音出力するスピーカ1014と、ゲーム操作を入力するアナログスティック1016及びボタン1018と、ゲームプレイ料であるコインを投入するコイン投入部1022とを備えて構成されている。
【0026】
ボタン1018は、上ボタン1018a、左ボタン1018b、右ボタン1018c及び下ボタン1018dの4種類を含み、上ボタン1018aは「右パンチ」、左ボタン1018bは「左パンチ」、右ボタン1018cは「右キック」、下ボタン1018dは「左キック」の操作入力が可能となっている。また、従来と同様に、複数のボタン1018を同時入力することによって、或いはアナログスティック1016の傾斜角度とボタン1018の入力とを組み合わせることによって、更に異なる種類の操作入力が可能である。例えば、ボタン1018の入力と組み合わせてプレーヤキャラクタが前進する方向にアナログスティック1016を傾斜させることにより、種々の攻撃動作の操作入力が可能である。また、ボタン1018の入力と組み合わせてプレーヤキャラクタが後退する方向にアナログスティック1016を傾斜させることにより、種々の防御動作の操作入力が可能である。
【0027】
また、ゲーム装置1000には、CPUや画像生成IC、音生成IC、メモリ等が実装された制御基板1024が内蔵されており、CPUが、メモリから読み出したゲームプログラムやゲームデータ、アナログスティック1016及びボタン1018から入力される操作信号、接続されている他のゲーム装置1000からの受信データ等に基づいて格闘アクションゲームを実行する。
【0028】
このような2台のゲーム装置1000が、例えば背中合わせに固定設置されて本実施形態のゲームシステムが構成される。各ゲーム装置1000のプレーヤは、ディスプレイ1012に表示されたゲーム画面を見、スピーカ1014から出力されるゲーム音を聞きながら、アナログスティック1016やボタン1018を操作して、他のゲーム装置1000のプレーヤと対戦する格闘アクションゲームを楽しむ。
【0029】
[ゲーム画面]
図3は、ディスプレイ1012に表示されるゲーム画面の一例であり、対戦中の画面を示している。ゲーム画面は、仮想三次元空間に設定されたゲームステージに、当該ゲーム装置1000のプレーヤの操作対象キャラクタであるプレーヤキャラクタと、他のゲーム装置1000のプレーヤの操作対象キャラクタである相手キャラクタとが配置されたゲーム空間を、所与の仮想カメラ等の視点に基づいたゲーム画像として表示される。また、ゲーム空間は各ゲーム装置1000において共有されるが、視点はゲーム装置1000毎に、例えばプレーヤの指示に従って設定可能となっている。従って、各ゲーム装置1000において、同一のゲーム空間を異なる視点で見たゲーム画像が表示され得ることになる。
【0030】
同図によれば、対戦画面には、当該ゲーム装置1000のプレーヤが操作するプレーヤキャラクタ11と、対戦相手のプレーヤが操作する相手キャラクタ12と、各キャラクタの体力値を示す体力ゲージ13と、ラウンド毎の勝敗結果14と、タイム15とが表示される。かかる対戦格闘ゲームでは、各キャラクタは、キックやパンチといった様々な格闘技を繰り出す攻撃動作や、相手の攻撃から身を守る防御動作等を行って対戦する。各キャラクタは、相手のキャラクタの攻撃によってダメージを受けると、受けたダメージによって体力値が低下し、先に体力値がゼロになったほうが負けとなる。各キャラクタの現在の体力値は体力ゲージ13で表示される。一回のゲームプレイは、所定時間に設定された複数のラウンドから構成され、各ラウンドでの残り時間はタイム15で表示される。最終的により多くのラウンドで勝利したものが、該ゲームプレイにおける勝者となる。
【0031】
[通信構成]
図4は、本実施形態の通信構成を示す図である。同図に示すように、各ゲーム装置1000は、自装置での操作データを他のゲーム装置1000(以下、「相手装置」という)に送信する。操作データとは、プレーヤによって為された操作を示すデータであり、具体的には、各ボタン1018の操作有無(ON/OFF)や、アナログスティック1016の傾斜方向及び傾斜角度のデータである。
【0032】
そして、各ゲーム装置1000は、自装置での操作データ(自操作データ)と相手装置から受信した操作データ(他操作データ)とに基づいて各キャラクタの制御やヒットチェック等のゲーム演算を行い、ゲームを進行させる。即ち、自装置での操作データに基づいてプレーヤキャラクタ11を制御するとともに、相手装置から受信した操作データに基づいて相手キャラクタ12を制御する。
【0033】
本実施形態において、ゲーム装置1000間のデータ通信はフレームを単位として行われる。ここで、フレームとは、高速に画像を更新していく際の更新時間間隔のことを指し、例えば1/60秒といった固定時間による時間単位のことである。各ゲーム装置1000は、フレーム毎に、図5に示す構成のフレームデータFDを相手装置に送信する。
【0034】
図5は、フレームデータFDのデータ構成の一例を示す図である。同図に示すように、フレームデータFDは、シーケンス番号を格納するシーケンス番号領域FD−1と、各種コマンド値を格納するコマンド領域FD−2と、自装置での操作データを格納する操作データ領域FD−3とから成る固定長データである。
【0035】
シーケンス番号とは、フレームデータFDの送信順序を示す番号であり、送信順序に従った連続する整数値である。本実施形態において、フレームデータFDはフレーム毎に送信されるので、このシーケンス番号もフレーム毎に更新される。即ち、シーケンス番号は、各フレームを識別するフレーム番号に相当する。また、シーケンス番号は、ゲーム装置1000毎に独立した値が設定されている。
【0036】
コマンド領域FD−2に格納されるコマンド値として、本実施形態では同期コマンドがある。同期コマンドとは、後述のように、相手装置との同期を取るための同期処理にて用いられるコマンドである。また、操作データ領域FD−3には、詳細は後述するが、連続する過去数フレーム分の操作データの集合である操作履歴データが格納される。以下、シーケンス番号領域FD−1に格納されているシーケンス番号が「n」のフレームデータFDを、フレームデータFD[n]という。
【0037】
[同期処理]
各ゲーム装置1000では、相手装置から受信したフレームデータFD中の操作データに基づいてゲーム進行を行うが、当該フレームデータFDのシーケンス番号により、その操作データがどのフレームでの操作データであるかを判断することができる。
【0038】
しかし、シーケンス番号はゲーム装置1000毎に独立して設定された番号である。また、本実施形態の格闘アクションゲームはリアルタイムで進行するゲームであるとともに、ゲーム装置1000それぞれにおいてゲーム演算が行われる。このため、双方のゲーム装置1000でのゲーム進行の開始タイミングを合わせる必要があるとともに、互いにゲーム進行開始時点でのシーケンス番号を把握しておく必要がある。そこで、本実施形態では、ゲーム進行の開始前に、各ゲーム装置1000において、フレーム毎に同期コマンドを送信することで相手装置との同期を取る同期処理が行われる。
【0039】
図6は、同期処理を説明するための図である。同図中、右側を一方のゲーム装置Aとし、左側を他方のゲーム装置Bとして、各ゲーム装置1000での処理手順を、シーケンス番号を基準とした時系列に従って示している。ところで、上述のようにシーケンス番号はフレーム番号に相当する。このため、以下では、シーケンス番号が「n」のフレームをフレームFL[n]という。
【0040】
同図に示すように、各ゲーム装置1000から、フレーム毎に同期コマンドが送信される。正確には、コマンド領域FD−2に同期コマンドをセットしたフレームデータFDが送信されることになるが、ここでは、説明の簡明のため、同期コマンドがセットされたフレームデータFDの送信を、単に「同期コマンドの送信」と表現して説明する。
【0041】
そして、各ゲーム装置1000では、フレーム毎に、この同期データの送受信の状況を基に、同期完了条件を満足するか否かが判定される。同期完了条件とは、相手装置との同期が取れたとみなされるための条件であり、具体的には、自装置から同期コマンドを送信し、且つ、相手装置から同期コマンドを受信していることである。
【0042】
同期完了条件を満たすと判定されると、相手装置との同期が取れた(同期完了)と判断される。そして、そのフレームでのシーケンス番号が、自装置の同期完了時のシーケンス番号(以下、「自同期シーケンス番号」という)とされ、そのフレームで相手装置から受信したフレームデータFD中のシーケンス番号が、相手装置の同期完了時のシーケンス番号(以下、「相手同期シーケンス番号」という)とされる。
【0043】
同図では、ゲーム装置Aからは、シーケンス番号が「12」,「13」,「14」のフレームFL[12],FL[13],FL[14]それぞれにおいて同期コマンドが送信されている。また、ゲーム装置Bからは、シーケンス番号が「23」のフレームFL[23]において同期コマンドが送信されている。
【0044】
つまり、ゲーム装置Aでは、フレームFL[12]において、同期コマンドを送信しているが、ゲーム装置Bから同期コマンドを受信していない。即ち、該フレームFL[12]では同期完了条件は満たされていない。そして、次のフレームFL[13]においては、同期コマンドを送信しており、ゲーム装置Bから同期コマンドを受信している。即ち、該フレームFL[13]では同期完了条件が満たされている。従って、ゲーム装置Aでは、この同期完了条件が満たされたフレームFL[13]でのシーケンス番号「13」が自同期シーケンス番号となり、該フレームで受信したフレームデータFD[23]のシーケンス番号「23」が相手同期シーケンス番号となる。
【0045】
一方、ゲーム装置Bでは、フレームFL[22]において、ゲーム装置Aから同期コマンドを受信しているが、自装置から同期コマンドを送信していない。即ち、該フレームFL[22]では同期完了条件が満たされていない。そして、次のフレームFL[23]においては、同期コマンドを送信しており、ゲーム装置Aから同期コマンドを受信している。即ち、該フレームFL[23]では同期完了条件が満たされている。従って、ゲーム装置Bでは、この同期完了条件が満たされたフレームFL[23]でのシーケンス番号「23」が自同期シーケンス番号となり、該フレームで受信したフレームデータFD[13]のシーケンス番号「13」が相手同期シーケンス番号となる。
【0046】
このように、各ゲーム装置1000において、フレーム毎に同期完了条件が満たされるか否かが判定されることにより、各ゲーム装置1000で判定される同期シーケンス番号が一致する。同図では、ゲーム装置A,Bの双方において、ゲーム装置Aの同期シーケンス番号は「13」と判定され、ゲーム装置Bの同期シーケンス番号は「23」と判定されている。
【0047】
そして、同期が取れたと判定されると、その次のフレームからゲーム進行処理が開始される。即ち、同図では、ゲーム装置Aにおいては、フレームFL[14]からゲーム進行が開始され、ゲーム装置Bでは、フレームFL[24]からゲーム進行が開始される。尚、ここでのゲーム進行開始は、同期完了から所定数フレームをおいた後としても良い。
【0048】
[ゲーム進行処理]
図7は、ゲーム進行中における1フレームでのゲーム装置1000間のデータ通信手順を示す図である。同図中、左側をゲーム装置Aとし、右側をゲーム装置Bとしている。また、ゲーム装置Aにおけるシーケンス番号は「21」であり、ゲーム装置Bにおけるシーケンス番号は「31」である。
【0049】
同図に示すように、ゲーム装置Aにおいては、操作データCDaが取り込まれ、この取り込まれた操作データCDaが現在のシーケンス番号と対応付けられて自操作履歴バッファ432Aに蓄積される。以下、シーケンス番号「n」と対応付けられている操作データCDをCD[n]という。
【0050】
自操作履歴バッファ432とは、自装置における操作データCDの履歴を蓄積するバッファである。つまり、同図において、ゲーム装置Aにおける自操作履歴バッファ432Aにはゲーム装置Aでの操作データCDaが蓄積され、ゲーム装置Bにおける自操作履歴バッファ432にはゲーム装置Bでの操作データCDbが蓄積される。この自操作履歴バッファ432に蓄積されている操作データCDは、当該操作データCDが取り込まれた時点でのシーケンス番号と対応付けられている。
【0051】
また、自操作履歴バッファ432は、所定フレーム数分の操作データCDを蓄積可能となっている。同図では、自操作履歴バッファ432は10フレーム分の操作データCDを蓄積可能である。このため、新たな1フレーム分の操作データCDが蓄積される際には、蓄積順が最も古い(即ち、シーケンス番号が最も小さい)操作データCDが削除される。本実施形態では、1フレーム毎に操作データCDが取り込まれ、自操作履歴バッファ432に蓄積されるので、自操作履歴バッファ432には、連続する過去10フレーム分の操作データCDが蓄積されていることになる。
【0052】
同図では、現在のシーケンス番号「21」と対応付けられた操作データCDa[21]が自操作履歴バッファ432Aに蓄積されている。このとき、自操作履歴バッファ432Aから、蓄積順が最も古い操作データCDa[11]が削除されている。
【0053】
次いで、この自操作履歴バッファ432Aに格納されている各操作データCDaが、操作履歴データとしてフレームデータの操作データ領域FD−3に格納され、相手装置であるゲーム装置Bに送信される。即ち、ゲーム装置Aにおける現在のシーケンス番号が「21」であるので、シーケンス番号領域FD−1にシーケンス番号「21」が格納されたフレームデータFD[21]が、ゲーム装置Aからゲーム装置Bに送信される。
【0054】
そして、ゲーム装置Bでは、ゲーム装置Aから送信されたフレームデータFD[21]が受信され、受信されたフレームデータFD[21]中の操作データが相手操作履歴バッファ434Bに蓄積される。
【0055】
相手操作履歴バッファ434とは、相手装置での操作データCDの履歴を蓄積するバッファである。つまり、同図において、ゲーム装置Bにおける相手操作履歴バッファ434Bにはゲーム装置Aでの操作データCDaが蓄積され、ゲーム装置Aにおける相手操作履歴バッファ434Aにはゲーム装置Bでの操作データCDbが蓄積される。
【0056】
この相手操作履歴バッファ434は、フレームデータFDが受信される毎に当該フレームデータFD中の操作データCDが蓄積されて更新される。従って、相手操作履歴バッファ434に蓄積されている操作データCDは、当該操作データCDが取り込まれた時点での相手装置でのシーケンス番号と対応付けられている。
【0057】
また、この相手操作履歴バッファ434も、自操作履歴バッファ432と同様に所定フレーム数分の操作データCDを蓄積可能となっている。同図では、自操作履歴バッファ432に等しい10フレーム分の操作データCDを蓄積可能である。
【0058】
また、ゲーム装置Bにおいても、ゲーム装置Aと同様に、操作データCDbが取り込まれ、ゲーム装置Bにおける現在のシーケンス番号「31」と対応付けられて自操作履歴バッファ432Bに蓄積される。次いで、自操作履歴バッファ432Bに格納されている操作データCDbが操作履歴データとして格納されたフレームデータFD[31]が、相手装置であるゲーム装置Aに送信される。そして、ゲーム装置Aでは、ゲーム装置Bから受信されたフレームデータFD[31]中の操作データが相手操作履歴バッファ434Aに蓄積されて更新される。
【0059】
尚、このゲーム装置Aからゲーム装置BへのフレームデータFDの送信、及び、ゲーム装置Bからゲーム装置AのフレームデータFDの送信は並行して行われる。
【0060】
図8は、ゲーム進行処理を説明するための図である。同図中、左側を一方のゲーム装置Aとし、右側を他方のゲーム装置Bとして、各ゲーム装置1000での処理手順を、シーケンス番号を基準とした時系列に従って示している。
【0061】
上述のように、ゲーム進行中、各ゲーム装置1000では、フレーム毎に、(a)操作データCDが取り込まれ、現在のシーケンス番号と対応付けられて自操作履歴バッファ432に蓄積されるとともに、(b)更新後の自操作履歴バッファ432に蓄積されている各操作データCDを含むフレームデータFDが相手装置に送信される。また、(c)相手装置から受信したフレームデータFD中の操作履歴データが相手操作履歴バッファ434に蓄積される。
【0062】
更に、(d)自操作履歴バッファ432及び相手操作履歴バッファ434から、所定のシーケンス番号と対応付けられている操作データCDが読み出され、この読み出された各操作データを基に、各キャラクタ(プレーヤキャラクタ11及び相手キャラクタ12)の制御やヒットチェック等のゲーム演算(即ち、ゲーム空間を再設定する空間構成演算)が行われ、1フレーム分のゲーム進行が行われる。このとき、自操作履歴バッファ432から読み出された操作データCDを基にプレーヤキャラクタ11が制御され、相手操作履歴バッファ434から読み出された操作データCDを基に相手キャラクタ12が制御される。
【0063】
自操作履歴バッファ432及び相手操作履歴バッファ434から読み出される各操作データCDのシーケンス番号(以下、「読出シーケンス番号」という)は、次のように決定される。即ち、自操作履歴バッファ432から読み出される操作データCDのシーケンス番号(以下、「自読出シーケンス番号」という)は、次式で与えられる。
自読出シーケンス番号=自同期シーケンス番号+経過フレーム数−遅延フレーム数
また、相手操作履歴バッファ434から読み出される操作データCDのシーケンス番号(以下、「相手読出シーケンス番号」という)は、次式で与えられる。
相手読出シーケンス番号=相手同期シーケンス番号+経過フレーム数−遅延フレーム数
【0064】
ここで、経過フレーム数とは、自装置における同期完了時からの経過フレーム数であり、同期完了時のフレームを「0」とした相対的なフレーム数である。即ち、経過フレーム数は、自同期シーケンス番号と現在のシーケンス番号との差分に等しい。
【0065】
また、遅延フレーム数とは、当該フレームにおいてゲーム演算に使用する操作データが、当該フレームから数えて何フレーム前の操作データであるかを示す数である。本実施形態では、この遅延フレーム数は「1」であり、1フレーム前の操作データを基にゲーム演算が行われる。これは、ゲーム装置1000間で操作データの送受信を行っているからである。つまり、スタンドアロンで動作するゲーム装置の場合、各フレームで取り込まれた操作データは当該フレームでのゲーム演算に用いられる。即ち、遅延フレーム数は「0」である。しかし、本実施形態のように、ゲーム装置1000間で操作データを送受信する場合、この操作データの送受信に所定時間を要するため、各フレームで取り込んだ操作データを当該フレームで使用することが難しい。このため、本実施形態では最大1フレームの遅れを見込んで遅延フレーム数としている。
【0066】
従って、1フレーム分のゲーム演算に使用される自装置での操作データCDと相手装置での操作データCDとは、それぞれに対応付けられているシーケンス番号(即ち、該操作データが取り込まれた時点でのシーケンス番号)が、同期完了時のシーケンス番号を「0」としたときの相対的な番号が等しいという一定の相対関係にある。
【0067】
図8において、ゲーム装置A,Bそれぞれでの同期シーケンス番号は「13」,「23」である。即ち、ゲーム装置Aにおいて、自同期シーケンス番号は「13」であり、相手同期シーケンス番号は「23」である。また、ゲーム装置Bにおいて、自同期シーケンス番号は「23」であり、相手同期シーケンス番号は「13」である。
【0068】
そして、ゲーム装置Aにおいて、例えばフレームFL[21]では、経過フレーム数は「8(=21−13)」である。従って、自読出シーケンス番号は「20(=13+8−1)」であり、自操作履歴バッファ432Aからシーケンス番号「20」の操作データCDa[20]が読み出される。また、相手読出シーケンス番号は「30(=23+8−1)」であり、相手操作履歴バッファ434Aからシーケンス番号「30」の操作データCDb[30]が読み出される。そして、この読み出された操作データCDa[20],Db[30]を基に、ゲーム演算が行われる。
【0069】
また、ゲーム装置Bにおいて、経過フレーム数が同じく「8」であるシーケンス番号が「31」のフレームFL[31]では、自読出シーケンス番号は「30(=23+8−1)」であり、自操作履歴バッファ432Bからシーケンス番号「30」の操作データCDb[30]が読み出される。また、相手読出シーケンス番号は「20=(13+8−1)」となり、相手操作履歴バッファ434Bからシーケンス番号「20」の操作データCDa[20]が読み出される。そして、この読み出された操作データCDb[30],Da[20]を基に、ゲーム演算が行われる。
【0070】
ところで、ゲーム装置1000間の通信状況等により、送信したフレームデータFDが相手装置で受信されない“データの不達”が生じる恐れがある。このため、本実施形態では、このデータの不達に対処するため、フレーム毎に、過去複数フレーム分の操作データCDを送信している。
【0071】
図9は、データの不達が生じた場合の処理手順を説明するための図である。同図中、左側を一方のゲーム装置Aとし、右側を他方のゲーム装置Bとして、各ゲーム装置1000での処理手順を、シーケンス番号を基準とした時系列に従って示している。
【0072】
同図によれば、ゲーム装置BからフレームFL[33],FL[34]において送信されたフレームデータFD[33],FD[34]がゲーム装置Aで受信されていない。即ち、ゲーム装置Bからゲーム装置Aへの不達が生じている。
【0073】
この場合、ゲーム装置Aにおいては、フレームFL[22]では、操作データCDa[21],CDb[31]に基づいてゲーム演算が行われるとともに、ゲーム装置Bから送信されたフレームデータFD[32]が受信されている。また、次のフレームFL[23]では、操作データDa[22],Db[32]に基づいてゲーム演算が行われるが、ゲーム装置Bから送信されたフレームデータFD[33]が受信されていない。
【0074】
そして、その次のフレームFL[24]では、本来ならば、操作データCDa[23],CDb[33]に基づいてゲーム演算が行われるが、操作データCDb[33]、即ちフレームデータFD[33]が受信されていないため、ゲーム演算が行われない。従って、その前フレームFL[23]と同一のゲーム画像が表示される(画面が更新されない)。但し、フレームデータFD[24]の送信は行われる。
【0075】
また、その次のフレームFL[25]においても同様に、ゲーム進行が行われず、その前フレームFL[24]と同一のゲーム画像、即ちフレームFL[23]と同一のゲーム画像が表示される(画面が更新されない)。但し、フレームデータFD[25]の送信は行われる。そして、このフレームFL[25]において、フレームデータFD[35]が受信されると、その次のフレームFL[26]からゲーム演算が再開される。
【0076】
このとき、ゲーム演算の再開後、最初のフレームFL[26]においては、ゲーム演算が行われなかったフレームFL[24],FL[25]で行われるべき2フレーム分のゲーム演算と、当該フレームFL[26]で行われるべき1フレーム分のゲーム演算との合計3フレーム分のゲーム演算が行われる。即ち、フレームFL[24]で行われるべき、操作データCDa[23],CDb[33]に基づく1フレーム分のゲーム演算と、フレームFL[25]で行われるべき操作データCDa[24],CDb[34]に基づく1フレーム分のゲーム演算と、当該フレームFL[26]で行われるべき操作データCDa[25],CDb[35]に基づく1フレーム分のゲーム演算との合計3フレーム分のゲーム演算が行われる。そして、この3フレーム分のゲーム演算によって再設定(構成)されたゲーム空間のゲーム画像が生成され、ゲーム画面として表示される。
【0077】
ここで、各フレームにおいて何フレーム分のゲーム演算を行うかは、その時点で相手装置から受信している最新のフレームデータFDのシーケンス番号(以下、「最新受信シーケンス番号」という)と、前回のゲーム演算で用いた相手装置の操作データCDのシーケンス番号(以下、「前回使用受信シーケンス番号」という)との差分によって決まり、この差分に相当するフレーム数分のゲーム演算が行われる。
【0078】
本実施形態では、各フレームでのゲーム演算は、その前フレームでの操作データを基に行われる。このため、フレームデータFDの不達が無い場合、最新受信シーケンス番号と前回使用受信シーケンス番号との差分は「1」となる。従って、この差分が「1」の場合には、通常通り1フレーム分のゲーム演算を行えばよい。また、差分が「0」の場合には、未だゲーム演算に使用していない新たな相手装置の操作データCDが受信されていないので、ゲーム演算を行わない。また、差分が「2」以上の場合には、自装置でのゲーム演算の進行が相手装置でのゲーム演算の進行に対して遅れているので、この差分に相当するフレーム数分のゲーム演算を行えばよい。
【0079】
尚、図9において、ゲーム装置Aからはフレーム毎にフレームデータFDが送信され、ゲーム装置Bでは、ゲーム装置Aから送信されるフレームデータFDが受信されている。即ち、ゲーム装置Aからゲーム装置Bへの不達は生じていない。このため、ゲーム装置Bでは、通常通り、各フレームにおいて1フレーム分のゲーム演算が行われる。
【0080】
図10は、図9の場合にゲーム装置Aの各フレームで行うゲーム演算のフレーム数の決定を説明するための図であり、シーケンス番号21a毎に、最新受信シーケンス番号21bと、前回使用受信シーケンス番号21cと、差分21dとを対応付けて示している。
【0081】
図10によれば、フレームFL[22]において、最新受信シーケンス番号は「31」であり、前回使用受信シーケンス番号は「30」である。従って、差分は「1」となり、該フレームFL[22]においては、1フレーム分のゲーム演算が行われる。
【0082】
次のフレーム「23」では、最新受信シーケンス番号は、その前フレームFL[22]で受信されたフレームデータFD[32]のシーケンス番号「32」であり、前回使用受信シーケンス番号は「31」である。従って、受信シーケンス番号差分は「1」となり、該フレームFL[23]においては、1フレーム分のゲーム演算が行われる。
【0083】
次のフレーム「24」では、その前フレームFL[23]でフレームデータFDが受信されていないため、最新受信シーケンス番号は、前フレームFL[23]での最新受信シーケンス番号「32」がそのまま引き継がれる。また、前回使用受信シーケンス番号は「32」である。従って、受信シーケンス番号差分は「0」となり、該フレームFL[24]においてゲーム演算は行われない。
【0084】
その次のフレーム「25」では、その前フレームFL[24]でフレームデータFDが受信されていないため、前フレームFL[24]での最新受信シーケンス番号「32」がそのまま引き継がれる。また、前回使用受信シーケンス番号は、その前フレームFL[24]でゲーム演算が行われていないため、前フレームでの前回受信シーケンス番号「32」がそのまま引き継がれる。従って、受信シーケンス番号差分は「0」となり、該フレームFL[25]においてゲーム演算は行われない。
【0085】
その次のフレームFL[26]では、最新受信シーケンス番号は、その前フレームFL[25]で受信されたフレームデータFD[35]のシーケンス番号「35」となる。また、前回使用受信シーケンス番号は、前フレームFL[25]でゲーム演算が行われていないため、前フレームFL[25]での前回使用受信シーケンス番号「32」がそのまま引き継がれる。従って、受信シーケンス番号差分は「3」となり、該フレーム「26」において、3フレーム分のゲーム演算が行われる。
【0086】
そして、その次フレームFL[27]では、最新受信シーケンス番号は「36」となり、前回使用受信シーケンス番号は「35」となる。従って、該フレームFL[27]では、1フレーム分のゲーム演算が行われる。
【0087】
このようにすることで、フレームデータFDの不達によりゲーム演算で使用する相手装置での操作データが受信されていない場合にはゲーム演算が行われず、フレームデータFDが受信された後、ゲーム演算が行われてゲーム進行が再開される。このとき、最初のゲーム演算を、最新受信シーケンス番号と前回使用受信シーケンス番号との差分に等しいフレーム数分行うことで、相手装置に対するゲーム進行の遅れを取り戻すことができる。
【0088】
[機能構成]
図11は、本実施形態におけるゲーム装置1000の機能構成を示すブロック図である。同図によれば、ゲーム装置1000は、操作入力部100と、処理部200と、画像表示部330と、音出力部350と、記憶部400と、通信部500とを備えて構成される。
【0089】
操作入力部100は、プレーヤによる操作指示を受け付け、操作に応じた操作信号を処理部200に出力する。この機能は、例えばボタンスイッチやレバー、ダイヤル、マウス、キーボード、各種センサ等によって実現される。図2では、アナログスティック1016やボタン1018がこれに該当する。
【0090】
処理部200は、ゲーム装置1000の全体制御やゲームの進行、画像生成等の各種演算処理を行う。この機能は、例えばCPU(CISC型、RISC型)、ASIC(ゲートアレイ等)等の演算装置やその制御プログラムにより実現される。図2では、制御基板1024に実装されているCPU等がこれに該当する。
【0091】
また、処理部200は、主にゲームの実行に係る演算処理を行うゲーム演算部210と、ゲーム演算部210の処理によって求められた各種のデータに基づき、仮想カメラ等の所与の視点から見た仮想三次元空間(ゲーム空間)の画像を生成する画像生成部230と、効果音やBGM等のゲーム音を生成する音生成部250と、を含んでいる。
【0092】
ゲーム演算部210は、操作入力部100から入力された操作信号や、記憶部400から読み出したゲーム情報(プログラム及びデータ)等に基づいて種々のゲーム処理を実行する。ゲーム処理としては、例えばゲーム空間へのプレーヤキャラクタ11や相手キャラクタ12の配置処理、仮想カメラの配置処理、オブジェクトの交差判定処理(ヒットチェック)、対戦結果の算出等がある。また、ゲーム演算部210は、同期処理部212と、ゲーム進行部214とを含んでいる。
【0093】
同期処理部212は、相手装置との同期を取る同期処理を行う。具体的には、フレーム毎に、同期コマンドをセットしたフレームデータFDを相手装置に送信するとともに、相手装置から受信したフレームデータFD中に同期データがセットされているか否かにより、同期完了条件を満たすか否かを判定する。同期完了条件を満たすならば、相手装置との同期が取れた(同期完了)と判断し、現在のシーケンス番号を自装置の同期完了時のシーケンス番号である自同期シーケンス番号とするとともに、受信したフレームデータFD中のシーケンス番号を相手装置の同期完了時のシーケンス番号である相手同期シーケンス番号とする。
【0094】
同期処理部212により決定された各同期シーケンス番号は、同期シーケンス番号情報436に格納される。図12に、同期シーケンス番号情報436のデータ構成の一例を示す。同図によれば、同期シーケンス番号情報436は、自同期シーケンス番号436aと、相手同期シーケンス番号436bとを格納している。
【0095】
ゲーム進行部214は、同期処理部212による相手装置との同期完了後、ゲームを進行させるゲーム進行処理を行う。具体的には、フレーム毎に、(a)操作入力部100から入力される操作データCDを取り込み、取り込んだ操作データCDを現在のシーケンス番号と対応付けて自操作履歴バッファ432に蓄積する。そして、(b)自操作履歴バッファ432に格納されている各操作データCDを格納したフレームデータFDを相手装置に送信する。また、(c)相手装置から受信したフレームデータFD中の操作データを相手操作履歴バッファ434に蓄積するとともに、(d)受信シーケンス番号情報438の最新受信シーケンス番号を、受信したフレームデータFDのシーケンス番号に更新する。
【0096】
受信シーケンス番号情報438とは、受信シーケンス番号の情報である。図13に、受信シーケンス番号情報438のデータ構成の一例を示す。同図によれば、受信シーケンス番号情報438は、最新受信シーケンス番号438aと、前回使用受信シーケンス番号438bとを格納している。最新受信シーケンス番号438aは、フレーム毎に受信されたフレームデータFDのシーケンス番号に更新される。前回使用受信シーケンス番号438bは、後述のように、フレーム毎に、該フレームでのゲーム演算で最後に使用された相手装置の操作データCDのシーケンス番号を示す相手読出シーケンス番号に更新される。
【0097】
更に、ゲーム進行部214は、フレーム毎に、(e)自操作履歴バッファ432及び相手操作履歴バッファ434から読み出した操作データCDに基づくゲーム進行を行う。即ち、受信シーケンス番号情報438を参照し、最新受信シーケンス番号と前回使用受信シーケンス番号との差分を算出する。そして、この算出した差分に等しいフレーム数分、ゲーム演算(空間構成演算)を行う。
【0098】
ここで、1フレーム分のゲーム演算として次の処理を行う。即ち、自同期シーケンス番号に経過フレーム数を加算した値から「1」減算して自読出シーケンス番号を算出し、自操作履歴バッファ432から、算出した自読出シーケンス番号に対応する操作データCDを読み出す。また、相手同期シーケンス番号に経過フレーム数を加算した値から「1」減算して相手読出シーケンス番号を算出し、相手操作履歴バッファ434から、算出した相手読出シーケンス番号に対応する操作データCDを読み出す。そして、読み出した各操作データCDに基づいて、プレーヤキャラクタ11や相手キャラクタ12の再配置、ヒットチェック等を行う。
【0099】
そして、算出した差分に等しいフレーム数分のゲーム演算を行うと、画像生成部230に所与の視点に基づくゲーム空間の画像(ゲーム画像)を生成させ、生成した画像を画像表示部330に表示させてゲーム画面を更新させる。
【0100】
ここで、算出された各読出シーケンス番号は、読出シーケンス番号情報442に格納される。図14に、読出シーケンス番号情報442のデータ構成の一例を示す。同図によれば、読出シーケンス番号情報442は、自読出シーケンス番号442aと、相手読出シーケンス番号442bとを格納している。この読出シーケンス番号情報442は、1フレーム分のゲーム演算が行われる毎に更新される。
【0101】
また、自読出シーケンス番号及び相手読出シーケンス番号の算出に要するデータの内、同期シーケンス番号は同期シーケンス番号情報436に格納されており、経過フレーム数はフレーム進行情報444に格納されている。
【0102】
図15に、フレーム進行情報444のデータ構成の一例を示す。同図によれば、フレーム進行情報444は、現在のシーケンス番号444aと、経過フレーム数444bとを格納している。シーケンス番号444aは、フレームデータの送信毎、即ち1フレーム毎に「1」加算した値に更新される。経過フレーム数444bは、1フレーム分のゲーム演算が行われる毎に「1」加算した値に更新される。
【0103】
画像生成部230は、ゲーム演算部210による演算結果に基づき、幾何変換処理やシェーディング処理等を実行してゲーム画面を表示するためのゲーム画像(3DCG画像)を生成し、生成した画像の画像信号を画像表示部330に出力する。図2では、制御基板1024に実装されている画像生成ICがこれに相当する。
【0104】
画像表示部330は、画像生成部230からの画像信号に基づいて、例えば1/60秒のフレーム時間毎に1フレームの画面を再描画しながらゲーム画面を表示する。この機能は、例えばCRT、LCD、ELD、PDP、HMD等のハードウェアによって実現される。図2では、ディスプレイ1012がこれに該当する。
【0105】
音生成部250は、ゲーム中に使用される効果音やBGM等のゲーム音を生成し、生成したゲーム音の音信号を音出力部350に出力する。図2では、制御基板1024に実装されている音生成ICがこれに該当する。
【0106】
音出力部350は、音生成部250からの音信号に基づいて、BGMや効果音等のゲーム音声を出力する。この機能は、例えばスピーカ等によって実現される。図2では、スピーカ1014がこれに相当する。
【0107】
記憶部400は、処理部200にゲーム装置1000を統合的に制御させるための諸機能を実現するためのシステムプログラムや、ゲームを実行させるために必要なプログラムやデータ等を記憶するとともに、処理部200の作業領域として用いられ、処理部200が各種プログラムに従って実行した演算結果や操作入力部100から入力される入力データ等を一時的に記憶する。この機能は、例えば各種ICメモリやハードディスク、CD−ROM、DVD、MO、RAM、VRAM等によって実現される。図2では、制御基板1024に実装されているROMやRAM等がこれに該当する。
【0108】
また、記憶部400は、プログラムとしてゲームプログラム410を記憶し、ゲームデータとして、ステージ設定情報422と、キャラクタ情報424と、対戦結果情報426と、同期シーケンス番号情報436と、受信シーケンス番号情報438と、読出シーケンス番号情報442と、フレーム進行情報444とを記憶しているとともに、自操作履歴バッファ432と、相手操作履歴バッファ434とを備えている。
【0109】
ステージ設定情報422は、ゲーム空間に対戦の舞台となるゲームステージを設定するための情報であり、背景オブジェクト等のモデリングデータやテクスチャデータ等を含んでいる。
【0110】
キャラクタ情報424は、対戦している各キャラクタ(プレーヤキャラクタ11及び相手キャラクタ12)に関する情報であり、モデリングデータやテクスチャデータ、能力パラメータ、モーションデータ、現在の位置及び姿勢、体力値等のデータ等を含んでいる。
【0111】
対戦結果情報426は、該ゲームプレイにおける対戦結果の情報であり、各ラウンドでの勝敗を格納している。
【0112】
通信部500は、通信ケーブルKに接続して外部装置(主に、相手のゲーム装置1000)とのデータ通信を行う。この機能は、通信ケーブルKのジャックや制御回路などによって実現される。尚、通信部500が通信時に供するプロトコル等に係る情報は、例えば記憶部400に記憶されており、適宜読み出して利用される。
【0113】
[処理の流れ]
図16は、本実施形態における全体処理の流れを説明するためのフローチャートである。この処理は、例えばコイン投入部1022にゲームプレイ料のコインが投入されることで開始される1回のゲームプレイにかかる処理であり、ゲーム演算部210がゲームプログラム410に従った処理を実行することで実現される。
【0114】
同図によれば、ゲーム演算部210は、先ず、他のゲーム装置1000のプレーヤと対戦する対戦プレイが選択されたか否かを判断し、対戦プレイでないならば(ステップA1:NO)、コンピュータ制御されるCOMキャラクタと対戦する通常のCOM対戦処理を行う(ステップA13)。
【0115】
一方、対戦プレイが選択されたならば(ステップA1:YES)、他のゲーム装置1000に対戦を申し込む、或いは、他のゲーム装置1000からの対戦申し込みを受け付けることで対戦相手の決定処理を行い、対戦相手を決定すると(ステップA3:YES)、所定のフレーム時間間隔で、ループAの処理を繰り返し実行する。ループAでは、相手装置との同期が取れたか否かを示す同期完了フラグが「1」に設定されているか否かを判定し、「1」に設定されていないならば(ステップA5:NO)、同期処理部212が同期処理を行う(ステップA7)。
【0116】
図17は、同期処理の流れを説明するためのフローチャートである。同図によれば、同期処理部212は、先ず、同期コマンドをセットしたフレームデータFDを相手装置に送信する(ステップB1)。また、相手装置からフレームデータFDを受信したか否かを判定し、受信していないならば(ステップB3:NO)、ステップB13に移行し、受信したならば(ステップB3:YES)、その受信したフレームデータFD中に同期コマンドがセットされているか否かを判定する。
【0117】
同期コマンドがセットされていないならば(ステップB5:NO)、ステップB13に移行する。同期コマンドがセットされているならば(ステップB5:YES)、同期完了条件が満足されたと判断し、その受信したフレームデータFDのシーケンス番号を相手同期シーケンス番号とするとともに(ステップB7)、現在のシーケンス番号を自同期シーケンス番号として、同期シーケンス番号情報436を更新する(ステップB9)。そして、同期完了フラグを、同期完了を示す「1」に設定する(ステップB11)。
【0118】
その後、ステップB13において、同期処理部212は、現在のシーケンス番号を「1」加算した値に更新する(ステップB13)。以上の処理を行うと、同期処理は終了となる。同期処理が終了すると、1回分のループAの処理は終了となる。
【0119】
図16のステップA5において、同期完了フラグが「1」に設定されているならば(ステップA5:YES)、ゲーム進行部214がゲーム進行処理を行う(ステップA9)。
【0120】
図18は、ゲーム進行処理の流れを説明するためのフローチャートである。同図によれば、ゲーム進行部214は、操作入力部100から入力される操作データCDを取り込み、取り込んだ操作データCDを、現在のシーケンス番号と対応付けて自操作履歴バッファ432に蓄積する(ステップC1)。そして、更新後の自操作履歴バッファ432に蓄積されている各操作データCDを格納したフレームデータFDを相手装置に送信する(ステップC3)。
【0121】
また、ゲーム進行部214は、相手装置からフレームデータFDを受信したか否かを判断し、受信していないならば(ステップC5:NO)、ステップC9に移行する。フレームデータFDを受信したならば(ステップC5:YES)、その受信したフレームデータFD中の操作データを相手操作履歴バッファ434に蓄積して更新する(ステップC7)。
【0122】
次いで、ゲーム進行部214は、受信シーケンス番号情報438を参照し、最新受信シーケンス番号と前回使用受信シーケンス番号との差分を算出する(ステップC9)。そして、その算出した差分に等しい回数だけゲーム演算処理を実行して、当該差分に等しいフレーム数分だけゲームを進行させる(ステップC11)。尚このとき、算出した差分が「0」である場合には、ゲーム演算処理は行なわれず、ゲームは進行されない。
【0123】
図19は、ゲーム演算処理の流れを説明するためのフローチャートである。同図によれば、ゲーム進行部214は、相手同期シーケンス番号に経過フレーム数を加算した値から遅延フレーム数である「1」を減算して、相手読出シーケンス番号を算出する(ステップD1)。そして、相手操作履歴バッファ434から、算出した相手読出シーケンス番号に対応する操作データCDを読み出す(ステップD3)。また、自同期シーケンス番号に経過フレーム数を加算した値から遅延フレーム数である「1」を減算して、自読出シーケンス番号を算出する(ステップD5)。そして、自操作履歴バッファ432から、算出した自読出シーケンス番号に対応する操作データを読み出す(ステップD7)。
【0124】
次いで、読み出した各操作データCDに基づき、プレーヤキャラクタ11や相手キャラクタ12の再配置、ヒットチェック等のゲーム演算を行い、ゲーム空間を再設定する(ステップD9)。その後、経過フレーム数を「1」加算した値に更新する(ステップD11)。以上の処理を行うと、ゲーム演算処理は終了となる。
【0125】
算出した差分に等しい回数のゲーム演算処理を終了すると、ゲーム進行部214は、所与の視点に基づくゲーム空間のゲーム画像を画像生成部230に生成させ、生成した画像を画像表示部330に表示させてゲーム画面を更新させる(ステップC13)。
【0126】
次いで、受信したフレームデータFDのシーケンス番号を最新受信シーケンス番号とするとともに(ステップC15)、相手読出受信シーケンス番号を前回使用受信シーケンス番号として受信シーケンス番号情報438を更新する(ステップC17)。また、現在のシーケンス番号を「1」加算した値に更新する(ステップC19)。以上の処理を行うと、ゲーム進行処理は終了となる。
【0127】
図16において、ゲーム進行処理が終了すると、ゲーム演算部210は、全ラウンドが終了したか否かを判断し、終了していないならば(ステップA11:NO)、再度、ループAの処理を繰り返す。全ラウンドが終了したならば(ステップA11:YES)、ループAを終了する。そして、ループAが終了すると、ゲームプレイが終了となり、本処理は終了となる。
【0128】
[作用・効果]
以上、本実施形態によれば、ピアツーピア接続された各ゲーム装置1000において、プレーヤ対戦の格闘アクションゲームを実行する場合、先ず、ゲーム装置1000間の同期を取る同期処理が行なわれ、その後、各ゲーム装置1000においてゲーム進行が開始される。
【0129】
同期処理では、フレーム毎に、同期コマンドをセットしたフレームデータFDが相手装置に送信される。そして、相手装置に同期コマンドを送信し、且つ、相手装置から同期コマンドが受信されたかといった同期完了条件が満たされるか否かにより、同期が取られたか否かが判定される。同期完了条件が満たされると、その時点で同期が確立したと判断され、自装置のシーケンス番号が自同期シーケンス番号とされるとともに、受信されたフレームデータFDのシーケンス番号が相手同期シーケンス番号とされる。
【0130】
次いで、ゲーム進行中では、この各同期シーケンス番号及び同期完了時からの経過フレーム数を基に算出された読出シーケンス番号に対応する操作データCDが、自操作履歴バッファ432及び相手操作履歴バッファ434から読み出され、この読み出された操作データCDを基にゲーム演算が行われる。このようにすることで、どちらかに処理負担が偏ることなく且つ少ない処理負担で、ピアツーピア接続されたゲーム装置1000間の同期を実現することができる。
【0131】
[変形例]
尚、本発明を適用可能な実施形態は上述した実施形態に限定されることなく、本発明の趣旨を逸脱しない範囲で適宜変更可能なのは勿論である。
【0132】
(A)ゲーム装置1000の数
例えば、上述した実施形態では、ピアツーピア接続された2台のゲーム装置1000から成るゲームシステムについて説明したが、3台以上のゲーム装置1000から成るゲームシステムについても同様に適用可能である。この場合、相手装置が2台以上となる。従って、各ゲーム装置1000において、同期処理では、相手装置それぞれに同期コマンドを送信し、且つ、全相手装置から同期コマンドを受信したことが同期完了条件となる。
そして、このときの自装置のシーケンス番号を自同期シーケンス番号とし、各相手装置から受信したフレームデータFDのシーケンス番号を、当該相手装置の相手同期シーケンス番号とする。また、ゲーム進行処理では、1フレーム分のゲーム演算を行う際、相手装置それぞれについて、該相手装置の相手同期シーケンス番号に基づいて相手読出シーケンス番号を算出し、算出した読出シーケンス番号に対応する操作データを読み出す。そして、この読み出した各相手装置での操作データと、自装置での操作データとを使用してゲーム演算を行う。
【0133】
(B)適用するゲーム
また、上述した実施形態では、格闘アクションゲームに適用した場合を説明したが、各ゲーム装置で同一のゲーム空間を共有され、リアルタイムで進行する他のゲームにも適用可能である。特に、ゲーム装置毎に異なる視点のゲーム画像となることが望ましいゲームへの適用が好適である。例えば、一人称視点のシューティングゲームや、カーレースやバイクレース等のレースゲームなどが挙げられる。
【図面の簡単な説明】
【0134】
【図1】本実施形態におけるゲームシステムの全体構成図。
【図2】ゲーム装置の概観例。
【図3】ゲーム装置におけるゲーム画面例。
【図4】ゲームシステムの通信構成図。
【図5】フレームデータの構成図。
【図6】同期処理の説明図。
【図7】データ通信手順の説明図。
【図8】ゲーム進行処理(正常時)の説明図。
【図9】ゲーム進行処理(データの不達時)の説明図。
【図10】最新受信シーケンス番号と前回使用受信シーケンス番号との差分の決定説明図。
【図11】ゲーム装置の機能構成図。
【図12】同期シーケンス番号情報のデータ構成例。
【図13】受信シーケンス番号情報のデータ構成例。
【図14】読出シーケンス番号情報のデータ構成例。
【図15】フレーム進行情報のデータ構成例。
【図16】全体処理の流れ図。
【図17】全体処理中に実行される同期処理の流れ図。
【図18】全体処理中に実行されるゲーム進行処理の流れ図。
【図19】ゲーム進行処理中に実行されるゲーム演算処理の流れ図。
【符号の説明】
【0135】
10 ゲーム装置
100 操作入力部
200 処理部
210 ゲーム演算部
212 同期処理部
214 ゲーム進行部
230 画像生成部
250 音生成部
330 画像表示部
350 音出力部
400 記憶部
410 ゲームプログラム
422 ステージ設定情報
424 キャラクタ情報
426 対戦結果情報
432 自操作履歴バッファ
434 相手操作履歴バッファ
436 同期シーケンス番号情報
438 受信シーケンス番号情報
442 読出シーケンス番号情報
444 フレーム進行情報
500 通信部

【特許請求の範囲】
【請求項1】
他コンピュータとピアツーピア接続されたコンピュータに、互いのコンピュータで同一の仮想三次元空間を共有するために、自コンピュータの自操作データと前記他コンピュータから受信する他操作データとに基づく前記仮想三次元空間の空間構成演算と、前記空間構成演算により構成された前記仮想三次元空間のレンダリング処理とをフレーム時間間隔で繰り返し実行させるためのプログラムであって、
自操作データを自コンピュータのフレーム番号である自シーケンス番号とともに前記他コンピュータに送信する送信手段、
前記送信手段と同様にして前記他コンピュータから送信される他操作データ及び前記他コンピュータのフレーム番号である他シーケンス番号を受信する受信手段、
前記送信手段により送信された自シーケンス番号の操作データ、及び、前記受信手段により受信された操作データのうちの当該自シーケンス番号と一定の相対関係でなる他シーケンス番号の操作データに基づいて、前記空間構成演算を行うように制御する空間構成演算制御手段、
として前記コンピュータを機能させるためのプログラム。
【請求項2】
前記送信手段が、現在から所定フレーム数分の自操作データを自シーケンス番号とともに送信し、
前記受信手段が、前記送信手段による送信と同様にして前記他コンピュータから送信される前記所定フレーム数分の他操作データ及び他シーケンス番号を受信し、
前記空間構成演算制御手段が、当該自シーケンス番号と前記一定の相対関係でなる他シーケンス番号の操作データが前記受信手段により受信されていない場合には新たな前記空間構成演算を行わず、前記空間構成演算を行わなかった後、最初に前記空間構成演算を行うときに前記送信手段により送信された前記所定フレーム数分の自操作データのうちの当該空間構成演算を行わなかったフレーム数分の自操作データ及び前記受信手段により受信された前記所定フレーム数分の他操作データのうちの当該空間構成演算を行わなかったフレーム数分の他操作データに基づいて、当該空間構成演算を行わなかったフレーム数分の空間構成演算を行う、
ように前記コンピュータを機能させるための請求項1に記載のプログラム。
【請求項3】
前記空間構成演算制御手段が、前記受信手段により受信された他操作データの他シーケンス番号のうちの最新の他シーケンス番号と、前回前記空間構成演算を行った際の基礎とした他操作データの他シーケンス番号とが同じ番号の場合に、前記空間構成演算を行わないと判定するように前記コンピュータを機能させるための請求項2に記載のプログラム。
【請求項4】
前記空間構成演算制御手段が、前記受信手段により受信された他操作データの他シーケンス番号のうちの最新の他シーケンス番号と、前回前記空間構成演算を行った際の基礎とした他操作データの他シーケンス番号との差分と同じフレーム数分の空間構成演算を行うように前記コンピュータを機能させることにより、前記空間構成演算を行わなかった後、最初に前記空間構成演算を行う際、自動的に前記空間構成演算を行わなかったフレーム数分の空間構成演算が行われることを特徴とする請求項2又は3に記載のプログラム。
【請求項5】
前記他コンピュータとの間で、自シーケンス番号及び他シーケンス番号の送受信を行って、自シーケンス番号と他シーケンス番号との相対関係を判定して、前記一定の相対関係を決定する同期確立処理を実行する同期確立処理手段として前記コンピュータを機能させるための請求項1〜4の何れか一項に記載のプログラム。
【請求項6】
前記同期確立処理手段による同期確立処理の後に、前記各コンピュータの操作データに基づき、当該各コンピュータそれぞれの操作対象キャラクタの前記仮想三次元空間内での移動及び/又は動作を演算制御して前記空間構成演算を行うように前記コンピュータを機能させるための請求項5に記載のプログラム。
【請求項7】
請求項1〜6の何れか一項に記載のプログラムを記憶したコンピュータ読み取り可能な情報記憶媒体。
【請求項8】
他の画像生成装置とピアツーピア接続され、互いの画像生成装置で同一の仮想三次元空間を共有するために、自画像生成装置の自操作データと前記他の画像生成装置から受信する他操作データとに基づく前記仮想三次元空間の空間構成演算と、前記空間構成演算により構成された前記仮想三次元空間のレンダリング処理とをフレーム時間間隔で繰り返し実行する画像生成装置であって、
自操作データを自画像生成装置のフレーム番号である自シーケンス番号とともに前記他の画像生成装置に送信する送信手段と、
前記送信手段と同様にして前記他の画像生成装置から送信される他操作データ及び前記他の画像生成装置のフレーム番号である他シーケンス番号を受信する受信手段と、
前記送信手段により送信された自シーケンス番号の操作データ、及び、前記受信手段により受信された操作データのうちの当該自シーケンス番号と一定の相対関係でなる他シーケンス番号の操作データとに基づいて、前記空間構成演算を行うように制御する空間構成演算制御手段と、
を備えた画像生成装置。

【図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

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate