(57)【要約】【課題】所定期間に検出されたプレーヤの入力情報に基づいて特定コマンドを実行するオンラインの対戦ゲームにおいて、通信遅延が生じたとしても、特定コマンドを実行することが可能なプログラム、情報記憶媒体、ゲーム機を提供することにある。【解決手段】自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で特定コマンドを実行する処理を行う。【選択図】図６
2010022492.tif 000002
【特許請求の範囲】
【請求項１】
複数のゲーム機それぞれが、プレーヤの入力情報を含むゲームデータを、共通の識別情報に対応付けて、ネットワークを介して相互に送受信する処理を行い、識別情報が一致する自機のゲームデータと他機のゲームデータとに基づいて、ゲーム演算を行うゲーム機のためのプログラムであって、
特定コマンドに関する自動制御情報を設定する設定部と、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に基づいて前記特定コマンドを実行する処理を行い、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で前記特定コマンドを実行する処理を行うコマンド実行部として、コンピュータを機能させることを特徴とするプログラム。
【請求項２】
請求項１において、
特定コマンドに対応するプレーヤの入力情報が所定期間内に入力されたものである場合に、当該入力情報を有効と判定する処理を行う判定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、有効と判定されたプレーヤの入力情報に基づいて、前記特定コマンドを実行する処理を行うことを特徴とするプログラム。
【請求項３】
請求項２において、
前記所定期間は、所定コマンドに対応するプレーヤの入力情報に応じた期間であることを特徴とするプログラム。
【請求項４】
請求項１〜３のいずれかにおいて、
複数のゲーム機共通の抽選処理に基づいて、特定コマンドを実行するか否かを決定する決定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、前記抽選処理の結果に基づいて、前記特定コマンドを実行する処理を行うことを特徴とするプログラム。
【請求項５】
コンピュータにより読取可能な情報記憶媒体であって、請求項１〜４のいずれかに記載のプログラムを記憶することを特徴とする情報記憶媒体。
【請求項６】
複数のゲーム機それぞれが、プレーヤの入力情報を含むゲームデータを、共通の識別情報に対応付けて、ネットワークを介して相互に送受信する処理を行い、識別情報が一致する自機のゲームデータと他機のゲームデータとに基づいて、ゲーム演算を行うゲーム機であって、
特定コマンドに関する自動制御情報を設定する設定部と、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に基づいて前記特定コマンドを実行する処理を行い、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で前記特定コマンドを実行する処理を行うコマンド実行部とを含むことを特徴とするゲーム機。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、情報記憶媒体、及び、ゲーム機に関する。
【背景技術】
【０００２】
従来から、ネットワークを介して複数のプレーヤが参加してゲームを行うオンラインゲームが知られている。通常、オンラインゲームでは、ネットワークを介してデータを送受信する通信遅延が必然的に生じるため、プレーヤからの操作入力をゲームに反映させるまでに時間を要する。
【０００３】
この問題を解決するために、特許文献１に開示される技術では、他機から受信するデータの通信遅延時間に基づいて、他のプレーヤが操作する他キャラクタの移動を予測して、プレーヤキャラクタと他プレーヤキャラクタとの整合性を図り、レスポンスの早いゲームを実現している。
【０００４】
しかし、格闘ゲームのように、操作タイミングが重視されるゲームでは、特許文献１に開示される技術を採用し難い。なぜなら、他プレーヤキャラクタの移動・動作を予測することは極めて難しく、仮に他プレーヤキャラクタの移動・動作を予測したとしても、予測した移動・動作と、実際の移動・動作とに矛盾が生じてしまうからである。
【０００５】
つまり、格闘ゲームでは、他プレーヤキャラクタの移動・動作を予測することなく、自機のデータと他機からのデータとが揃った段階でゲーム処理を行うので、複数のゲーム機間において通信遅延時間が生じると、例えば、特定コマンド（例えば「投げ抜け」のコマンド）の入力情報を、プレーヤはタイミングを見計らって適切に行うことができなくなる。このような状況下では、格闘ゲームをプレイするプレーヤに多大なストレスを与えてしまう。
【特許文献１】特開２００６−３２０５０２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明は、以上のような課題に鑑みてなされたものであり、その目的とするところは、所定期間に検出されたプレーヤの入力情報に基づいて特定コマンドを実行するオンラインの対戦ゲームにおいて、通信遅延が生じたとしても、特定コマンドを実行することが可能なプログラム、情報記憶媒体、ゲーム機を提供することにある。
【課題を解決するための手段】
【０００７】
（１）本発明は、
複数のゲーム機それぞれが、プレーヤの入力情報を含むゲームデータを、共通の識別情報に対応付けて、ネットワークを介して相互に送受信する処理を行い、識別情報が一致する自機のゲームデータと他機のゲームデータとに基づいて、ゲーム演算を行うゲーム機のためのプログラムであって、
特定コマンドに関する自動制御情報を設定する設定部と、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に基づいて前記特定コマンドを実行する処理を行い、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で前記特定コマンドを実行する処理を行うコマンド実行部として、コンピュータを機能させるプログラムに関する。
【０００８】
本発明は、上記プログラムを記憶した情報記憶媒体、上記各部として構成するゲーム機に関係する。
【０００９】
本発明は、通信遅延が生じたとしても、特定コマンドに関する自動制御情報が設定されている場合に、所定条件下で特定のコマンドを実行することが可能となる。
【００１０】
（２）また、本発明のプログラム、情報記憶媒体、及び、ゲーム機では、
特定コマンドに対応するプレーヤの入力情報が所定期間内に入力されたものである場合に、当該入力情報を有効と判定する処理を行う判定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、有効と判定されたプレーヤの入力情報に基づいて、前記特定コマンドを実行する処理を行うようにしてもよい。
【００１１】
本発明は、プレーヤが所定期間内に特定コマンドに対応する操作入力をしなければならない環境にあっても、自動制御情報が設定されている場合に、所定条件下で特定のコマンドを実行することが可能となる。
【００１２】
（３）また、本発明のプログラム、情報記憶媒体、及び、ゲーム機では、
前記所定期間は、所定コマンドに対応するプレーヤの入力情報に応じた期間であってもよい。
【００１３】
本発明は、所定コマンドに対応するプレーヤの入力情報に応じた期間内に、特定コマンドに対応する操作入力をしなければならない環境にあっても、自動制御情報が設定されている場合に、所定条件下で特定のコマンドを実行することが可能となる。
【００１４】
（４）また、本発明のプログラム、情報記憶媒体、及び、ゲーム機では、
複数のゲーム機共通の抽選処理に基づいて、特定コマンドを実行するか否かを決定する決定部として、コンピュータを更に機能させ、
前記コマンド実行部が、
前記自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、前記抽選処理の結果に基づいて、前記特定コマンドを実行する処理を行うようにしてもよい。
【００１５】
本発明によれば、ゲーム機それぞれが共通の抽選処理を行うので、抽選処理の結果を、複数のゲーム機間相互で送受信させる必要がない。従って、通信遅延が生じても特定コマンドを実行することが可能となる。
【００１６】
また、本発明によれば、自動制御情報が設定されている場合であっても特定コマンドが実行されることは不確実な状態となり、特定コマンドが実行されるという期待感をプレーヤに与えることができる。
【発明を実施するための最良の形態】
【００１７】
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【００１８】
１．構成
図１に本実施形態のゲーム機の機能ブロック図を示す。なお本実施形態のゲーム機は図１の構成要素（各部）の一部を省略した構成としてもよい。
【００１９】
操作部１６０は、プレーヤがプレーヤキャラクタ（プレーヤが操作するプレーヤキャラクタ、移動体、プレーヤオブジェクト、ゲームキャラクタを含む）の操作情報を入力するためのものであり、その機能は、レバー、ボタン、ステアリング、マイク、タッチパネル型ディスプレイ、或いは筺体などにより実現できる。
【００２０】
記憶部１７０は、処理部１００や通信部１９６などのワーク領域となるもので、その機能はＲＡＭ（ＶＲＡＭ）などにより実現できる。特に、本実施形態の記憶部１７０は、主記憶部１７２、画像バッファ１７４、第１のバッファ１７６、第２のバッファ１７８、自動制御情報記憶部１７９を有している。
【００２１】
ここで、第１のバッファ１７６には、自機において入力情報を検出した検出結果を含むゲームデータが入力される。また、第２のバッファ１７８には、受信した他機のゲームデータが入力される。
【００２２】
自動制御情報記憶部１７９には、特定コマンドに関する自動制御情報を記憶される。この自動制御情報とは、プレーヤからの入力情報によらずに、特定コマンドを実行することを示す情報である。
【００２３】
情報記憶媒体１８０（コンピュータにより読み取り可能な媒体）は、プログラムやデータなどを入力するものであり、その機能は、光ディスク（ＣＤ、ＤＶＤ）、光磁気ディスク（ＭＯ）、磁気ディスク、ハードディスク、磁気テープ、或いはメモリ（ＲＯＭ）、メモリカードなどにより実現できる。処理部１００は、情報記憶媒体１８０に入力されるプログラム（データ）に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体１８０には、本実施形態の各部としてコンピュータを機能させるためのプログラム（各部の処理をコンピュータに実行させるためのプログラム）が記憶される。
【００２４】
表示部１９０は、本実施形態により生成された画像を出力するものであり、その機能は、ＣＲＴ、ＬＣＤ、タッチパネル型ディスプレイ、或いはＨＭＤ（ヘッドマウントディスプレイ）などにより実現できる。音出力部１９２は、本実施形態により生成された音を出力するものであり、その機能は、スピーカ、或いはヘッドフォンなどにより実現できる。
【００２５】
通信部１９６は外部（例えば、他機、サーバや他のゲームシステム）との間で通信を行うための各種制御を行うものであり、その機能は、各種プロセッサ又は通信用ＡＳＩＣなどのハードウェアや、プログラムなどにより実現できる。
【００２６】
なお、ゲーム機が、本実施形態の各部としてコンピュータを機能させるためのプログラム（データ）を、ネットワークを介してサーバからダウンロードし、情報記憶媒体１８０に記憶するようにしてもよい。このようなサーバに入力されているプログラムの出力も本発明の範囲内に含めることができる。
【００２７】
処理部１００（プロセッサ）は、操作部１６０からの操作情報（入力情報の一例）やプログラムなどに基づいて、ゲーム演算処理、画像生成処理、或いは音生成処理などの処理を行う。この処理部１００は記憶部１７０内の主記憶部１７２をワーク領域として各種処理を行う。処理部１００の機能は各種プロセッサ（ＣＰＵ、ＤＳＰ等）、ＡＳＩＣ（ゲートアレイ等）などのハードウェアや、プログラムにより実現できる。
【００２８】
処理部１００は、ゲーム演算部１１０、オブジェクト空間設定部１１１、仮想カメラ制御部１１２、移動・動作処理部１１３、ネットワーク設定部１１４、通信制御部１１５、バッファ制御部１１６、設定部１１７、判定部１１８、コマンド実行部１１９、決定部１２０、描画部１３０、音生成部１４０を含む。なおこれらの一部を省略する構成としてもよい。
【００２９】
ゲーム演算部１１０は、ゲーム開始条件が満たされた場合にゲームを開始する処理、ゲームを進行させる処理、キャラクタやマップなどのオブジェクトを配置する処理、オブジェクトを表示する処理、ゲーム結果を演算する処理、或いはゲーム終了条件が満たされた場合にゲームを終了する処理などがある。
【００３０】
本実施形態のゲーム演算部１１０は、ゲーム開始時に各プレーヤの体力値を初期値（例えば１００）に設定し、ゲームを開始してからゲームが終了するまでのゲーム期間（例えば、９０秒の間）に、フレーム毎に、各プレーヤからの入力情報に基づいてヒット判定処理を行い、ヒット判定結果に基づいていて、各プレーヤキャラクタの体力値を減算させ、各プレーヤキャラクタの体力値が０になったか否かに基づいてゲーム結果（勝敗、引き分け）を決定する演算処理を行う。なお、ゲーム演算部１１０は、ゲーム期間経過時点で、いずれのプレーヤキャラクタの体力値が０より大きい値である場合には、一方のプレーヤキャラクタの体力値が、他方のプレーヤキャラクタの体力値よりも大きい値である場合に、一方のプレーヤキャラクタが勝ちと決定し、他方のプレーヤキャラクタが負けと決定し、体力値が双方同じ場合には引き分けと決定する。
【００３１】
本実施形態のゲーム演算部１１０は、識別情報が一致する第１のバッファ１７６から出力されたゲームデータと第２のバッファ１７８から出力されたゲームデータとに基づいて、フレーム毎にゲーム演算を行う。
【００３２】
また、本実施形態のゲーム演算部１１０は、第１のバッファ１７６から出力されたゲームデータと第２のバッファ１７８から出力されたゲームデータとに基づいて、自機を使用するプレーヤの操作対象の第１のプレーヤキャラクタと、他機を使用するプレーヤの操作対象の第２のプレーヤキャラクタとを動作させるゲーム演算を行う。
【００３３】
また、本実施形態のゲーム演算部１１０は、第１のバッファ１７６から出力された識別情報が異なる複数のゲームデータと、第２のバッファ１７８から出力された識別情報が異なる複数のゲームデータとに基づいて、フレーム毎にゲーム演算を行ってもよい。例えば、第１のバッファから出力された識別番号１〜４の複数のゲームデータと、第２のバッファ１７８から出力された識別番号１〜４の複数のゲームデータとに基づいて、プレーヤキャラクタに連続技の動作演算を行わせるようにしてもよい。
【００３４】
オブジェクト空間設定部１１１は、プレーヤキャラクタ、移動体、建物、球場、車、樹木、柱、壁、マップ（地形）などの表示物を表す各種オブジェクト（ポリゴン、自由曲面又はサブディビジョンサーフェスなどのプリミティブで構成されるオブジェクト）をオブジェクト空間に配置設定する処理を行う。即ちワールド座標系でのオブジェクトの位置や回転角度（向き、方向と同義）を決定し、その位置（Ｘ、Ｙ、Ｚ）にその回転角度（Ｘ、Ｙ、Ｚ軸回りでの回転角度）でオブジェクトを配置する。
【００３５】
仮想カメラ制御部１１２は、オブジェクト空間内の所与（任意）の仮想カメラ（視点）から見える画像を生成するための仮想カメラの制御処理を行う。具体的には、仮想カメラの位置（Ｘ、Ｙ、Ｚ）又は回転角度（Ｘ、Ｙ、Ｚ軸回りでの回転角度）を制御する処理（視点位置、視線方向あるいは画角を制御する処理）を行う。また、画角を制御するようにしてもよい。
【００３６】
例えば、仮想カメラによりオブジェクト（例えば、プレーヤキャラクタ、ボール、車）を後方から撮影する場合には、オブジェクトの位置又は回転の変化に仮想カメラが追従するように、仮想カメラの位置又は回転角度（仮想カメラの向き）を制御する。この場合には、移動・動作処理部で得られたオブジェクトの位置、回転角度又は速度などの情報に基づいて、仮想カメラを制御できる。或いは、仮想カメラを、予め決められた回転角度で回転させたり、予め決められた移動経路で移動させる制御を行ってもよい。この場合には、仮想カメラの位置（移動経路）又は回転角度を特定するための仮想カメラデータに基づいて仮想カメラを制御する。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラについて上記の制御処理が行われる。
【００３７】
移動・動作処理部１１３は、モデル（キャラクタ、車、電車又は飛行機等）の移動・動作演算（移動・動作シミュレーション）を行う。すなわち操作部１６０によりプレーヤが入力した操作データや、プログラム（移動・動作アルゴリズム）や、各種データ（モーションデータ）などに基づいて、モデルをオブジェクト空間内で移動させたり、オブジェクトを動作（モーション、アニメーション）させたりする処理を行う。具体的には、オブジェクトの移動情報（位置、回転角度、速度、或いは加速度）や動作情報（オブジェクトを構成する各パーツの位置、或いは回転角度）を、１フレーム（１／６０秒）毎に順次求めるシミュレーション処理を行う。なおフレームは、オブジェクトの移動・動作処理（シミュレーション処理）や画像生成処理を行う時間の単位である。
【００３８】
特に、本実施形態の移動・動作処理部１１３は、プレーヤからの入力情報に基づいて、プレーヤの操作対象のプレーヤキャラクタを移動・動作させる処理を行うことができる。また、後述する通信制御部１１５によって送信されたパケットに含まれる他機のゲームデータに基づいて、他機を使用する第２のプレーヤの操作対象の第２のプレーヤキャラクタを、自機を使用するプレーヤの操作対象となる第１のプレーヤキャラクタと同一のオブジェクト空間において移動・動作させる処理を行うことができる。
【００３９】
要するに、本実施形態の移動・動作処理部１１３は、第１のバッファ１７６から出力されたゲームデータに基づいて、自機を使用するプレーヤの操作対象の第１のプレーヤキャラクタを動作させる演算と、第２のバッファ１７８から出力されたゲームデータに基づいて、他機を使用するプレーヤの操作対象の第２のプレーヤキャラクタを動作させる演算を行うことができる。
【００４０】
ネットワーク設定部１１４は、ゲームシステムで必要となるネットワーク情報を取得し、管理する処理等を行う。特に、本実施形態のネットワーク設定部は、各ゲーム機に個別に付与されるゲーム機の識別情報（オンラインゲームに参加できるゲーム機を識別するために個別に付与されたデータ）と、ゲーム機の識別情報に対応付けられたパケットの送信先を指定する宛先情報とを取得し、管理する処理を行う。
【００４１】
また、宛先情報とは、ゲームシステムを構成する各ゲーム機のＩＰアドレス、ポート番号とすることができる。ＩＰアドレスは、インターネット上もしくはＷＡＮで特定のゲーム機を特定するためのグローバルＩＰアドレスとしてもよいし、ＬＡＮで特定のゲーム機を特定するためのプライベートＩＰアドレスとしてもよい。
【００４２】
通信制御部１１５は、他機（第２のゲーム機）に送信するパケットを生成する処理、パケット送信先のゲーム機のＩＰアドレスやポート番号を指定する処理、受信したパケットに含まれるデータを記憶部１７０に保存する処理、受信したパケットを解析する処理、その他のパケットの送受信に関する制御処理等を行う。
【００４３】
パケットとは、ネットワークを介して通信する固まりであり、送信元ＩＰアドレス、送信先ＩＰアドレスを含むネットワークに必要なヘッダーと、送信元において書き込まれたデータがペイロードとからなるデータのことをいう。
【００４４】
また、アプリケーションレベルの通信を実現するためには、使用するＴＣＰやＵＤＰプロトコルに応じたアプリケーションの種類を特定するポート番号を指定してパケットを生成する。例えば、ＴＣＰプロトコルは、データの送受信の信頼性が高く、例えば、確認応答や再送を利用している。また、ＴＣＰプロトコルは、紛失したデータの再送処理を行うことができ、さらにデータの送信順序を確保して送信先のゲーム機にパケットを送信することができる。一方、ＵＤＰプロトコルでは、送信の途中でデータを紛失しても再送されず、順番が入れ替わって伝送されることがある。しかし、ＵＤＰプロトコルは、ＴＣＰプロトコルに比べてオーバヘッドがないので、リアルタイムにデータを送信するオンラインゲームでは適している場合がある。ＵＤＰプロトコルを利用する場合には、バッファに入力するゲームデータが識別番号順（昇順）に入力するようにし、入力対象の識別番号のゲームデータが届いていない場合には、他機に要求するようにしてもよい。本実施形態では、いずれのプロトコルにも対応することができる。なお、ＵＤＰプロトコルを利用する場合には、バッファへのゲームデータの入力順序を識別情報（識別番号）の昇順に入力するように制御するようにしてもよい。
【００４５】
本実施形態の通信制御部１１５は、画像を描画するフレームレートに応じてパケットを生成し、接続先の第２のゲーム機に生成したパケットを送信する処理を行う。具体的に説明すると、例えば、フレームレートが６０ｆｐｓである場合には、１／６０秒毎に、パケットのヘッダーの送信先ＩＰアドレスと送信先ポート番号に、第２のゲーム機のＩＰアドレスと使用するポート番号指定し、ヘッダーの送信元のＩＰアドレスと送信元ポート番号に、第１のゲーム機のＩＰアドレスと使用するポート番号を指定して、ゲームデータを含むデータをパケットのペイロードに入力し、生成したパケットを第２のゲーム機に送信する処理を行う。なお、送信したゲームデータは、後述するバッファ制御部１１６において、所与の条件下、第１のバッファ１７６に入力される。
【００４６】
ここで、ゲームデータとは、フレーム毎にゲーム機を操作するプレーヤからの入力情報（操作情報も含む）を含むデータである。例えば、ゲームデータは、入力情報の有無や、入力情報が有る場合には入力情報の内容を示したデータとすることができる。例えば、ゲームデータを数値で示す場合には、入力情報が無い場合はゲームデータを「０」とし、入力情報があってその内容がＡボタンの入力である場合にはゲームデータを「１」、入力情報があってその内容がＢボタンの入力である場合にはゲームデータを「２」とする。また、入力情報があってその内容がＡ及びＢボタンの入力である場合にはゲームデータを「３」とする。
【００４７】
また、ここで、識別情報とは、フレーム毎に付与される複数のゲーム機（第１、第２のゲーム機）において共通のデータである。本実施形態では、第１のゲーム機と第２のゲーム機との接続が確立されたときを基準に、経過時間に応じてフレーム毎に付与される情報とすることができる。例えば、ゲーム機において、フレームレートに応じて取得したゲームデータに対応付けるシーケンシャルな識別番号（１から始まる正の整数）とすることができる。
【００４８】
例えば、フレームレートが６０ｆｐｓである場合を考えると、１／６０毎に取得したゲームデータに、識別情報を対応付ける。例えば、第１のゲーム機と第２のゲーム機それぞれにおいて、接続が確立された時点に取得したゲームデータには、識別番号「１」を対応付けし、接続確立時から１／６０秒後に取得したゲームデータには、識別番号「２」を対応付けし、接続確立時から２／６０秒後に取得したゲームデータには、識別番号「３」を対応付けする。
【００４９】
また、本実施形態の通信制御部１１５は、第２のゲーム機から送信されたパケットを受信する処理を行う。そして、受信したパケットを解析し、パケットのペイロードに含まれるゲームデータを含むデータを取得する。そして、受信したゲームデータは、後述するバッファ制御部１１６において、第２のバッファ１７８に入力される。
【００５０】
また、本実施形態の通信制御部１１５は、複数のゲーム機間においての接続（第１のゲーム機と第２のゲーム機との接続）が確立されてから接続が切断されるまで、ゲームデータを互いに送受信する処理を行うことができる。
【００５１】
なお、本実施形態のゲームに参加する通信グループに所属する複数のゲーム機のうち、１つのゲーム機を親機として特定することができる。親機は、ゲーム空間を生成したゲーム機としてもよいし、勝者と挑戦者との対戦ゲームである場合には、勝者側のゲーム機としてもよい。
【００５２】
本実施形態のバッファ制御部１１６は、第１のバッファ１７６、第２のバッファ１７８のゲームデータの入出力を制御する処理を行う。ここで、バッファにゲームデータを入力する処理とは、ゲームデータをバッファが確保する記憶領域に記憶させる処理をいい、バッファからゲームデータを出力する処理とは、バッファが確保する記憶領域に記憶されたゲームデータを読み取ると共に、そのゲームデータを記憶領域から抹消することを意味する。
【００５３】
また、本実施形態のバッファ制御部１１６は、自機のゲームデータを第１のバッファ１７６に入力し、他機のゲームデータを第２のバッファ１７８に入力する処理とを行う。
【００５４】
また、本実施形態のバッファ制御部１１６は、第１のバッファ１７６に入力されている最先のゲームデータに対応する識別情報と、第２のバッファ１７８に入力されている最先のゲームデータに対応する識別情報とが一致する場合に、最先のゲームデータを第１のバッファ１７６から出力すると共に、最先のゲームデータを第２のバッファ１７８から出力する処理とを行う。つまり、本実施形態のバッファ制御部１１６は、第１のバッファ１７６、第２のバッファ１７８に入力（格納）されているゲームデータは、同期処理を行うために、第１のバッファ１７６に入力されているゲームデータの識別情報と、第２のバッファ１７８に入力されているゲームデータの識別情報とが一致していることを条件に、識別番号の昇順（小さい順）に出力される。
【００５５】
設定部１１７は、ゲーム開始前又はゲーム中に、複数のゲーム機それぞれに対応付けて、或いは、操作入力や所定のゲーム条件の成立に基づいて、特定コマンドに関する自動制御情報を、自動制御情報記憶部１７９に設定する。
【００５６】
例えば、設定部１１７は、ゲーム開始前に、各ゲーム機の識別情報に対応づけて、特定コマンドに関する自動制御情報を設定する。ここで、自動制御情報とは、プレーヤからの入力情報によらずに、所定条件下で特定コマンドを実行することを示す情報である。
【００５７】
判定部１１８は、所定期間内に特定コマンドに対応するプレーヤの入力情報が検出された場合に、当該入力情報を有効と判定する処理を行う。ここで、所定期間とは、所定コマンドに対応するプレーヤの入力情報に応じた期間である。
【００５８】
例えば、判定部１１８は、所定コマンド（「投げ」コマンド）に対応するプレーヤの「投げ」の入力情報に応じた期間内に、特定コマンド（「投げ抜け」コマンド）に対応するプレーヤの「投げ抜け」の入力情報が検出された場合に、「投げ抜け」の入力情報を有効と判定する処理を行う。
【００５９】
コマンド実行部１１９は、自動制御情報が設定されていないゲーム機のゲームデータに基づいてゲーム演算を行う場合には、プレーヤの入力情報に基づいて、特定コマンドを実行する処理を行う。なお、前記自動制御情報が設定されていないゲーム機のゲームデータに基づいて前記ゲーム演算を行う場合には、有効と判定されたプレーヤの入力情報に基づいて、特定コマンドを実行する処理を行う。
【００６０】
コマンド実行部１１９は、自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合には、プレーヤの入力情報に関わらず、所定条件下で特定コマンドを実行する処理を行う。
【００６１】
また、コマンド実行部１１９は、自動制御情報が設定されているゲーム機のゲームデータに基づいてゲーム演算を行う場合に、後述する決定部１２０による抽選処理の結果に基づいて、特定コマンドを実行する処理を行う。
【００６２】
決定部１２０は、複数のゲーム機共通の抽選処理に基づいて、特定コマンドを実行するか否かを決定する。
【００６３】
描画部１３０は、処理部１００で行われる種々の処理（ゲーム処理）の結果に基づいて描画処理を行い、これにより画像を生成し、表示部１９０に出力する。いわゆる３次元ゲーム画像を生成する場合には、まずオブジェクト（モデル）の各頂点の頂点データ（頂点の位置座標、テクスチャ座標、色データ、法線ベクトル或いはα値等）を含むオブジェクトデータ（モデルデータ）が入力され、入力されたオブジェクトデータ（モデルデータ）に含まれる頂点データに基づいて、頂点処理（頂点シェーダによるシェーディング）が行われる。なお頂点処理を行うに際して、必要に応じてポリゴンを再分割するための頂点生成処理（テッセレーション、曲面分割、ポリゴン分割）を行うようにしてもよい。頂点処理では、頂点処理プログラム（頂点シェーダプログラム、第１のシェーダプログラム）に従って、頂点の移動処理や、座標変換（ワールド座標変換、カメラ座標変換）、クリッピング処理、あるいは透視変換等のジオメトリ処理が行われ、その処理結果に基づいて、オブジェクトを構成する頂点群について与えられた頂点データを変更（更新、調整）する。そして、頂点処理後の頂点データに基づいてラスタライズ（走査変換）が行われ、ポリゴン（プリミティブ）の面とピクセルとが対応づけられる。そしてラスタライズに続いて、画像を構成するピクセル（表示画面を構成するフラグメント）を描画するピクセル処理（ピクセルシェーダによるシェーディング、フラグメント処理）が行われる。ピクセル処理では、ピクセル処理プログラム（ピクセルシェーダプログラム、第２のシェーダプログラム）に従って、テクスチャの読出し（テクスチャマッピング）、色データの設定／変更、半透明合成、アンチエイリアス等の各種処理を行って、画像を構成するピクセルの最終的な描画色を決定し、透視変換されたオブジェクトの描画色を画像バッファ１７４（ピクセル単位で画像情報を記憶できるバッファ。ＶＲＡＭ、レンダリングターゲット）に出力（描画）する。すなわち、ピクセル処理では、画像情報（色、法線、輝度、α値等）をピクセル単位で設定あるいは変更するパーピクセル処理を行う。これにより、オブジェクト空間内において仮想カメラ（所与の視点）から見える画像が生成される。なお、仮想カメラ（視点）が複数存在する場合には、それぞれの仮想カメラから見える画像を分割画像として１画面に表示できるように画像を生成することができる。
【００６４】
なお、頂点処理やピクセル処理は、シェーディング言語によって記述されたシェーダプログラムによって、ポリゴン（プリミティブ）の描画処理をプログラム可能にするハードウェア、いわゆるプログラマブルシェーダ（頂点シェーダやピクセルシェーダ）により実現される。プログラマブルシェーダでは、頂点単位の処理やピクセル単位の処理がプログラム可能になることで描画処理内容の自由度が高く、従来のハードウェアによる固定的な描画処理に比べて表現力を大幅に向上させることができる。
【００６５】
そして、描画部１３０は、オブジェクトを描画する際に、ジオメトリ処理、テクスチャマッピング、隠面消去処理、αブレンディング等を行う。
【００６６】
ジオメトリ処理では、オブジェクトに対して、座標変換、クリッピング処理、透視投影変換、或いは光源計算等の処理が行われる。そして、ジオメトリ処理後（透視投影変換後）のオブジェクトデータ（オブジェクトの頂点の位置座標、テクスチャ座標、色データ（輝度データ）、法線ベクトル、或いはα値等）は、オブジェクトデータ記憶部１７６に保存される。
【００６７】
テクスチャマッピングは、記憶部１７０のテクスチャ記憶部に記憶されるテクスチャ（テクセル値）をオブジェクトにマッピングするための処理である。具体的には、オブジェクトの頂点に設定（付与）されるテクスチャ座標等を用いて記憶部１７０のテクスチャ記憶部からテクスチャ（色（ＲＧＢ）、α値などの表面プロパティ）を読み出す。そして、２次元の画像であるテクスチャをオブジェクトにマッピングする。この場合に、ピクセルとテクセルとを対応づける処理や、テクセルの補間としてバイリニア補間などを行う。
【００６８】
隠面消去処理としては、描画ピクセルのＺ値（奥行き情報）が入力されるＺバッファ（奥行きバッファ）を用いたＺバッファ法（奥行き比較法、Ｚテスト）による隠面消去処理を行うことができる。すなわちオブジェクトのプリミティブに対応する描画ピクセルを描画する際に、Ｚバッファに入力されるＺ値を参照する。そして参照されたＺバッファのＺ値と、プリミティブの描画ピクセルでのＺ値とを比較し、描画ピクセルでのＺ値が、仮想カメラから見て手前側となるＺ値（例えば小さなＺ値）である場合には、その描画ピクセルの描画処理を行うとともにＺバッファのＺ値を新たなＺ値に更新する。
【００６９】
αブレンディング（α合成）は、α値（Ａ値）に基づく半透明合成処理（通常αブレンディング、加算αブレンディング又は減算αブレンディング等）のことである。
【００７０】
なお、α値は、各ピクセル（テクセル、ドット）に関連づけて記憶できる情報であり、例えば色情報以外のプラスアルファの情報である。α値は、マスク情報、半透明度（透明度、不透明度と等価）、バンプ情報などとして出力できる。
【００７１】
音生成部１４０は、処理部１００で行われる種々の処理の結果に基づいて音処理を行い、ＢＧＭ、効果音、又は音声などのゲーム音を生成し、音出力部１９２に出力する。
【００７２】
２．本実施形態の手法
（１）概要
本実施形態のゲームシステムは、オンライン格闘ゲームのためのゲームシステムである。すなわち、本実施形態のゲームシステムは、プレーヤの操作対象のプレーヤキャラクタが、他のプレーヤの操作対象の相手プレーヤキャラクタに攻撃を加えることによって相手プレーヤキャラクタにダメージを与え相手プレーヤキャラクタの体力値を減算させ、各プレーヤキャラクタの体力値に基づいて勝敗を判定する処理を行う。
【００７３】
図２は、本実施形態のゲームシステムの一例を示す。本実施形態のゲームシステムでは、オンラインゲームに参加する各ゲーム機が、インターネットを介して相互に直接通信して、データを共有することができるピア・ツー・ピア方式のゲームシステムを採用する。また、本実施形態は、オンラインゲームに参加するプレーヤの操作対象のプレーヤキャラクタが同一のゲーム空間（オブジェクト空間）に存在してゲームが進行されるゲームシステムである。
【００７４】
つまり、本実施形態では、第１のゲーム機、第２のゲーム機の相互間において、ゲーム機を操作するプレーヤからの入力情報の検出結果を含むゲームデータを送受信する処理を行い、ゲーム演算を行う。
【００７５】
ここで、ゲームデータとは、フレーム毎に、方向キー、Ａボタン、Ｂボタン等のキー入力によって検出された検出信号等のプレーヤの入力情報や、キー入力の検出結果を特定コマンドに変換した情報、入力情報がないという情報（例えば、「キー入力なし」の情報）も含む。
【００７６】
本実施形態では、例えば、第１のゲーム機は、第１のゲーム機のゲームデータに基づいて、第１のプレーヤキャラクタ（第１のゲーム機を使用する第１のプレーヤの操作対象のプレーヤキャラクタ）の移動・動作演算等のゲーム演算を行い、第１のゲーム機のゲームデータを、ネットワークを介して第２のゲーム機へ送信する処理を行う。そして、第１のゲーム機は、ネットワークを介して受信した第２のゲーム機のゲームデータに基づいて、第２のプレーヤキャラクタ（第２のゲーム機を使用する第２のプレーヤの操作対象のプレーヤキャラクタ）の移動・動作演算等のゲーム演算を行う。また、第２のゲーム機においても、第１のゲーム機と同様にゲーム演算処理を行う。
【００７７】
（２）同期処理
本実施形態は、同期処理を図るために、第１、第２のゲーム機が、フレーム毎に付与される共通の識別番号を用いて、ゲームデータを送受信する処理を行う。
【００７８】
より具体的に説明すると、本実施形態では、まず、各ゲーム機において、画像を描画するフレームレートと同じ周期で、ゲームデータを取得する。そして取得したゲームデータに識別番号を対応付ける。すなわち、描画フレームレートが６０ｆｐｓのフレームレートである場合には、第１のゲーム機と第２のゲーム機との接続が確立した時点を基準に、１／６０毎に取得したゲームデータに、「１」、「２」、「３」、「４」・・・と、シーケンシャルに正の整数からなる識別番号を対応付けていく。
【００７９】
なお、同じタイミングで取得したゲームデータを用いて正確に同期処理を行うために、第１、第２のゲーム機共に、同じ描画フレームレート（例えば、６０ｆｐｓ）に設定することが望ましい。以下の説明では、第１のゲーム機、第２のゲーム機共に、描画のフレームレートを６０ｆｐｓに設定した際の説明である。
【００８０】
なお、「接続が確立した時点」とは、第１のゲーム機においては、第２のゲーム機に対する接続要求に対する確認応答を得たときであって、第２のゲーム機においても、第１のゲーム機に対する接続要求に対する確認応答を得たときである。なお、絶対時間軸に対して第１のゲームにおける「接続が確立した時点」と、ゲーム機２における「接続が確立した時点」とにおいて僅かな誤差があってもよい。
【００８１】
本実施形態のゲーム機では、記憶部に自機のゲームデータを入力する第１のバッファ１７６と、他機のゲームデータを入力する第２のバッファ１７８を設け、第１のバッファ１７６に識別番号を対応付けた自機のゲームデータを入力する処理を行い、第２のバッファ１７８に識別番号に対応付けられた他機のゲームデータを入力する処理を行う。また、自機のゲームデータは、識別番号を対応付けて他機に送信する処理を行う。
【００８２】
そして、本実施形態では、第１のバッファ１７６に入力されているの最先のゲームデータの識別番号と、第２のバッファ１７８に入力されているの最先のゲームデータの識別番号とが一致することを条件に、第１のバッファ１７６に入力されている最先のゲームデータと、第２のバッファ１７８に入力されている最先のゲームデータとを出力する処理を行う。
【００８３】
そして、本実施形態では、第１のバッファ１７６から出力された最先のゲームデータに基づいて第１のプレーヤキャラクタの移動・動作演算等のゲーム演算を行い、第２のバッファ１７８から出力された最先のゲームデータに基づいて第２のプレーヤキャラクタの移動・動作演算（モーション演算）等のゲーム演算を行う。要するに、本実施形態では、第１のバッファ１７６、第２のバッファ１７８をＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ，Ｆｉｒｓｔ  Ｏｕｔ）（先入れ先出し）によって入出力処理を行っている。
【００８４】
より具体的に、第１ゲーム機において、第１のゲーム機のゲームデータを第１のバッファ１７６に入出力を制御する処理、第２のゲーム機のゲームデータを第２のバッファ１７８に入出力する処理について、図３を用いて具体的に説明する。
【００８５】
例えば、本実施形態では、第１、第２のゲーム機の接続が確立されるＴ１時点において、識別番号「１」の第１のゲーム機のゲームデータを、第１のバッファ１７６に入力する処理を行う。一方、Ｔ１時点では、まだ第２のゲーム機からゲームデータを受信していないので、第２のバッファ１７８は空の状態である。
【００８６】
そして、Ｔ２時点〜Ｔ９時点と経過したときに第２のゲーム機から識別番号「１」のゲームデータを受信すると、Ｔ１１時点において、第１のバッファ１７６に、識別番号「１１」のゲームデータを入力し、第２のゲーム機から受信した識別番号「１」のゲームデータを、第２のバッファ１７８に入力する処理を行う。
【００８７】
すると、Ｔ１２時点において、第１のバッファ１７６、第２のバッファ１７８に入力されている最先のゲームデータの識別番号が一致する（共通の識別番号「１」である）ので、識別番号「１」のゲームデータを第１のバッファ１７６、第２のバッファ１７８から出力して、出力されたゲームデータに基づいて、ゲーム演算を行う。
【００８８】
以上のように、本実施形態では、第１、第２のゲーム機それぞれが、フレーム毎に付与される共通の識別番号を用いて、ゲームデータを送受信する処理を行い、自機の最先のゲームデータの識別番号と、他機の最先のゲームデータの識別番号とが一致することを条件に、自機、他機の最先のゲームデータに基づいてゲーム演算を行うので、オンラインの格闘ゲームにおいても、第１、第２のプレーヤが、平等な環境下でゲームプレイを行うことができる。つまり、本実施形態によれば各ゲーム機において、同一のゲーム結果になるようにゲーム演算処理を行うことができる。
【００８９】
（３）入力情報の有効性
本実施形態では、第１のバッファ１７６、第２のバッファ１７８それぞれの入力情報フラグを設定し、フレーム毎に第１のバッファ１７６、第２のバッファ１７８それぞれの入力情報フラグの値を更新して、入力情報の有効／無効を制御する。
【００９０】
まず、入力情報フラグの値を更新する処理について説明すると、本実施形態では、フレーム毎に、プレーヤキャラクタが動作していない期間中の入力情報フラグの値を真（１）に更新し、プレーヤキャラクタが動作している期間中の入力情報フラグの値を偽（０）に更新する。なお、初期状態等のデフォルトの状態において、各バッファの入力情報フラグの値を真に設定する。
【００９１】
具体的に第１のゲーム機の処理について説明すると、第１のバッファ１７６から出力された「右パンチ」の入力情報に基づいて、第１のプレーヤキャラクタに「右パンチ」の動作をさせると判断すると、第１のバッファ１７６の入力情報フラグの値を偽に更新する。そして、第１のプレーヤキャラクタの「右パンチ」の動作期間（１０フレーム分の期間）は第１のバッファ１７６の入力情報フラグの値を偽に設定し、「右パンチ」の動作期間終了後に、第１のバッファ１７６の入力情報フラグの値を真に設定する。
【００９２】
そして、第１のプレーヤキャラクタと第２のプレーヤキャラクタとが所定範囲に位置することによりヒットし（パンチがヒットし）、第２のプレーヤキャラクタが「右パンチ攻撃を受ける動作」を行うと判断すると、第２のバッファ１７８の入力情報フラグの値を偽に設定する。そして、第２のプレーヤキャラクタに「右パンチ攻撃を受ける動作」をさせる期間（例えば、１０フレーム分の期間）は、第２のバッファ１７８の入力情報フラグの値を偽に設定し、動作期間終了後に、第２のバッファ１７８の入力情報フラグの値を真に更新する。
【００９３】
次に、本実施形態の入力情報の有効／無効の判断について説明する。本実施形態では、第１のバッファ１７６の入力情報フラグが真である状態の場合に、第１のバッファ１７６から出力された入力情報は有効であり、第１のバッファ１７６の入力情報フラグが偽である状態には、第１のバッファ１７６から出力された入力情報は無効であると判断する。
【００９４】
また、本実施形態では、第２のバッファ１７８の入力情報フラグが真である状態の場合に、第２のバッファ１７８から出力された入力情報は有効であり、第２のバッファ１７８の入力情報フラグが偽である状態には、第２のバッファ１７８から出力された入力情報は無効であると判断する。
【００９５】
すなわち、有効と判断された入力情報に基づいてコマンドが実行され、動作演算が開始されると、当該演算が終了するまで他の動作演算を行わないようにしている。
【００９６】
ところで、本実施形態では、バッファから出力された入力情報が無効であると判断され、入力情報フラグの真偽に関わらず、所定の入力情報については、有効・無効の判定をする場合がある。例えば、「投げ抜け」の入力情報等がある。
【００９７】
まず、本実施形態の「投げ」コマンドについて説明する。本実施形態の「投げ」コマンドは、一方のプレーヤが「投げ」キー入力を行うと、一方のプレーヤキャラクタが、他方のプレーヤキャラクタを「投げ掴む」動作演算を行い、一方のプレーヤキャラクタが、他方のプレーヤキャラクタにヒットしたと判定されると、プレーヤキャラクタが他方のプレーヤキャラクタを「投げる」動作演算を行い、他方のプレーヤキャラクタが「投げられる」動作演算を行うものである。そして、他方のプレーヤキャラクタにダメージを与えることで体力値を減算させる処理を行っている。なお、一方のプレーヤキャラクタが、他方のプレーヤキャラクタにヒットしないと判定されると、プレーヤキャラクタは投げ掴まえることができずに立ち構えの状態に戻る。つまり、他方のプレーヤはダメージを被ることはない。
【００９８】
次に、本実施形態の「投げ抜け」コマンドについて説明する。本実施形態の「投げ抜け」コマンドは、プレーヤキャラクタが仕掛けた「投げ」を回避する。つまり「投げ抜け」コマンドは、一方のプレーヤが「投げ」のキー入力を行ってから所定期間内に、他方のプレーヤが「投げ抜け」のキー入力を行うと、他方のプレーヤキャラクタが「投げられる」動作の途中で「投げ抜ける」動作演算に切り替える。つまり、他方のプレーヤキャラクタは「投げ」に対するダメージを受けず、体力値から「投げ」に対するダメージ分が減算されないように制御するものである。
【００９９】
ここで、本実施形態において、「投げ抜け」の入力情報が有効と判定される場合について説明する。
【０１００】
本実施形態では、第２のプレーヤキャラクタが「投げられる」動作が行われている期間は、第２のバッファ１７８の入力情報フラグの値は偽に設定される。つまり、「投げられる」動作が行われている期間に、第２のバッファ１７８から出力される入力情報は無効であると判断される。
【０１０１】
しかし、本実施形態では、「投げ抜け」の入力情報については、「投げられる」動作が行われている期間であっても、第１のプレーヤキャラクタと第２のプレーヤキャラクタとがヒットした直後の所定期間（例えば３フレームの期間）に、第２のバッファ１７８から「投げ抜け」の入力情報が出力される場合には、その「投げ抜け」の入力情報は有効と判定し、「投げ抜け」コマンドを実行する。
【０１０２】
また、第１のプレーヤキャラクタと第２のプレーヤキャラクタとがヒットした直後の所定期間（例えば３フレームの期間）以外の期間に、第２のバッファ１７８から「投げ抜け」の入力情報が出力される場合には、その「投げ抜け」の入力情報は無効と判定し、「投げ抜け」コマンドを実行しない。
【０１０３】
（４）通信遅延
本実施形態のゲームシステムは、同期処理を行っているので、プレーヤの入力情報がゲームに反映されるまでに時間を要してしまう。
【０１０４】
例えば、図３の識別番号「１」のゲームデータは、Ｔ１時点に入力情報が検出されているにも関わらず、Ｔ１２時点で、識別番号「１」のゲームデータに基づくゲーム演算が行われる。つまり、本実施形態では、第１、第２のゲーム機間におけるゲームデータの送受信を行う通信遅延時間（タイムラグ）、が必然的に生じるために、不都合が生じる場合がある。具体的に、通信遅延時間に伴う弊害について、図４（Ａ）〜（Ｃ）を用いて説明する。
【０１０５】
まず、図４（Ａ）を用いて説明すると、Ｔ１２１時点において、第１のプレーヤからの「投げ」の入力情報が検出されたとすると、第１のゲーム機において、Ｔ１２１時点において、識別番号「１２１」に対応付けられた第１のプレーヤからの「投げ」の入力情報を第１のバッファ１７６に入力すると共に、第２のゲーム機に送信する処理を行う。
【０１０６】
そして、第１のゲーム機は、第２のゲーム機から識別番号「１２１」のゲームデータを受信して（Ｔ１３１時点）、識別番号「１２１」のゲームデータを出力する（Ｔ１３２時点）。そして、Ｔ１３２時点で、第１のバッファ１７６から、最先の識別番号「１２１」に対応付けられた「投げ」の入力情報が出力され、有効だと判断されると「投げ」コマンドを実行する。
【０１０７】
図４（Ｂ）に示すように、第１のゲーム機では、「投げ」コマンドは、第１のプレーヤキャラクタが、第２のプレーヤキャラクタを掴もうとする動作演算が、例えば、Ｔ１３３〜Ｔ１３５にかけて行われ、Ｔ１３６時点で、第１のプレーヤキャラクタが、第２のプレーヤキャラクタにヒットしたと判定される。
【０１０８】
そして、第１のゲーム機では、第１、第２のプレーヤキャラクタがヒットした後の、例えば所定期間Ｔ１３７〜Ｔ１５０に、第１のプレーヤキャラクタが第２のプレーヤキャラクタを投げる動作演算が行われるが、ヒットした時点（Ｔ１３０時点）直後の所定期間（Ｔ１３７〜Ｔ１３９）に、第２のバッファ１７８から出力されたゲームデータに含まれる「投げ抜け」の入力情報が有効と判定される。
【０１０９】
したがって、図４（Ｂ）に示す例のように、所定期間Ｔ１３７〜Ｔ１３９に、識別情報１２６〜１２８のゲームデータが出力されることになる場合には、Ｔ１２６〜Ｔ１２８の期間に「投げ抜け」の入力情報が検出されている場合に、Ｔ１３７〜Ｔ１３９に、「投げ抜け」のゲームデータが出力され、その「投げ抜け」の入力情報が有効と判定される。
【０１１０】
しかし、第１のゲーム機では、識別番号１２６〜１２８のゲームデータが第１のバッファ１７６、第２のバッファ１７８からＴ１３７〜Ｔ１３９の期間をかけて出力され、第２のゲーム機においても、識別番号１２６〜１２８のゲームデータが第１のバッファ１７６、第２のバッファ１７８からＳ１３７〜Ｓ１３９の期間をかけて出力される。
【０１１１】
しかし、図４（Ｃ）に示すように、第２のゲーム機のプレーヤがＳ１３８時点で投げられたことに気付き、Ｓ１３９時点で「投げ抜け」の入力情報を入力することにより、第２のゲーム機において、Ｓ１３９の時点で、第２のプレーヤからの「投げ抜け」の入力情報が検出されると、識別番号１３９に対応付けられて、「投げ抜け」のゲームデータが、第２のゲーム機の第１のバッファ１７６に入力されると共に、識別番号１３９に対応付けられた「投げ抜け」のゲームデータが第１のゲーム機に送信される。
【０１１２】
すると、第１のゲーム機においては、第２のプレーヤが入力した識別番号１３９の「投げ抜け」の入力情報が、Ｔ１４９時点に受信され、第１のゲーム機の第２のバッファ１７８に入力され、Ｔ１５０時点で、識別番号１３９の「投げ抜け」のゲームデータが第２のバッファ１７８から出力される。
【０１１３】
しかし、本実施形態では、Ｔ１５０時点では、識別番号１３９の「投げ抜け」のゲームデータは、所定期間Ｔ１３７〜Ｔ１３９で出力されたものではないので、無効と判断され、「投げ抜け」コマンドは実行されない。
【０１１４】
同様に、第２のゲーム機においても、Ｓ１３９時点において、入力情報された「投げ抜け」の入力情報は、無効と判断されるので、「投げ抜け」コマンドは実行されない。
【０１１５】
つまり、本実施形態のように同期処理が担保されたゲームシステムを採用すると、第２のプレーヤは、「投げ抜け」のキー入力のタイミングが適切だと思っているにも関わらず、通信遅延時間が起因して「投げ抜け」コマンドが実行できない事態が生じる。
【０１１６】
すなわち、本実施形態では、「投げ抜け」コマンドを実行させるためには、第２のプレーヤは、第２のゲーム機において、Ｓ１３３〜Ｓ１３６の期間で「投げ掴み」の動作が表示されるよりも前のＳ１２６〜Ｓ１２８の期間で「投げ抜け」の入力情報を入力しなければならず、実質的に「投げ抜け」コマンドを実行することができない。
【０１１７】
（５）自動的にコマンドを実行する手法
このように、本実施形態では、「投げ抜け」の入力情報が有効と判断される期間が、「投げられる」動作期間よりもきわめて短い期間であったり、通信遅延時間よりも短い期間である場合には、プレーヤは、「投げ抜け」コマンドが実行されるように「投げ抜け」のキー入力を行うことが極めて難しくなる。つまり、プレーヤは、相手が投げ技を仕掛けるであろうと予想して、Ｔ１２６〜Ｔ１２８の期間に、予め「投げ抜け」の入力情報を行わなければ、「投げ抜け」の入力情報が無効になってしまう。
【０１１８】
そこで、本実施形態では、所定条件下で、プレーヤの入力情報に関わらず、自動的に「投げ抜け」コマンドを実行する処理を行う。
【０１１９】
より具体的に説明すると、第１のバッファ１７６から出力された「投げ」の入力情報に基づいて第１のプレーヤキャラクタが第２のプレーヤキャラクタにヒットしたと判定されると、第２のバッファ１７８から「投げ抜け」の入力情報が出力されなくても、所定条件下で「投げ抜け」コマンドを実行する処理を行う。
【０１２０】
例えば、図４（Ｂ）に示すように、第１のゲーム機のＴ１３６時点で、第１のプレーヤキャラクタが第２のプレーヤキャラクタにヒットしたと判定されると、Ｔ１３７時点で、自動的に、所定条件に基づいて「投げ抜け」コマンドを実行する処理を行う。
【０１２１】
このようにすれば、プレーヤは、相手プレーヤキャラクタに投げられそうになったとしても、自身のプレーヤキャラクタに対して「投げ抜け」を行うことができ、相手からの投げ技を回避することができる。
【０１２２】
（６）抽選処理
本実施形態では、所定の確率に基づいて自動的に「投げ抜け」コマンドを実行する。なぜなら、常に「投げ抜け」コマンドを実行する処理を行うと、常に投げ技が失敗してしまうことになるからである。
【０１２３】
例えば、本実施形態では、図５（Ａ）に示す、シーケンシャルなＩＤ（１から始まる正の整数）に対応づけて、０〜９のいずれかの数値が設定された乱数値が設定された乱数テーブル、及び、図５（Ｂ）に示す当選判定テーブルＡ、当選判定テーブルＢ、当選判定テーブルＣが用意される。
【０１２４】
当選判定テーブルＡ、Ｂ、Ｃそれぞれは、乱数範囲０〜９の中から、当選確率に基づいて当選範囲が決められている。
【０１２５】
例えば、当選判定テーブルＡは、８０％確率で当選するように、当選範囲を２〜９に決定し、当選判定テーブルＢは、５０％確率で当選するように、当選範囲を５〜９に決定し、当選判定テーブルＣは、３０％確率で当選するように、当選範囲を７〜９に決定する。
【０１２６】
本実施形態では、第１、第２のゲーム機が共通の抽選処理結果を得るようにするために、ゲーム開始前に、第１、第２のゲーム機間で乱数テーブル、及び、当選判定テーブルＡ、Ｂ、Ｃを共有する。例えば、ゲーム開始前に、いずれかのゲーム機が、他方のゲーム機に乱数テーブルを送信する。また、乱数テーブルを送信する際に、ゲームが開始時に参照する乱数テーブルのＩＤの値を送信する。また、ゲーム開始前に、いずれかのゲーム機が、他方のゲーム機に当選判定テーブルＡ、Ｂ、Ｃを送信する。
【０１２７】
また、本実施形態の第１のゲーム機は、ゲーム開始前に、第１のゲーム機の「投げ抜け」コマンドの自動制御情報の設定有無を第２のゲーム機に送信し、第２のゲーム機から「投げ抜け」コマンドの自動制御情報の設定有無（「投げ抜け」コマンドの自動制御情報が設定されているか否かの情報）を受信する処理を行う。ここで、自動制御情報とは、プレーヤからの入力情報によらずに、「投げ抜け」コマンドを実行することを示す情報である。
【０１２８】
なお、自動制御情報が設定されている場合には、抽選処理で用いる当選判定テーブルの種類（「Ａ」、「Ｂ」、「Ｃ」のいずれかの情報）を送信する。
【０１２９】
同様に、本実施形態の第２のゲーム機は、ゲーム開始前に、第２のゲーム機の「投げ抜け」コマンドの自動制御情報の設定有無を第１のゲーム機に送信し、第１のゲーム機から「投げ抜け」コマンドの自動制御情報の設定有無を受信する処理を行う。
【０１３０】
例えば、第１のゲーム機において、「投げ抜け」コマンドの自動制御情報を設定しない場合には、第１のゲーム機は、第２のゲーム機に自動制御情報無しの情報（例えば、自動制御情報フラグ＝０）を送信する。一方、第２のゲーム機において、「投げ抜け」コマンドの自動制御情報が設定されている場合には、第２のゲーム機は、第１のゲーム機に自動制御情報有りの情報（例えば、自動制御情報フラグ＝１）を送信する。また、第２のゲーム機は、抽選処理において、当選判定テーブルＣを用いている場合には、当選判定テーブルの種類（例えば、「Ｃ」）を第１のゲーム機に送信する処理を行う。
【０１３１】
そして、図６に示すように、第１、第２の各ゲーム機は、各ゲーム機（ゲーム機の識別情報）に対応づけて「投げ抜け」コマンドの自動制御情報の設定有無（例えば、自動制御情報フラグ）を記憶部に記憶する。そして、第１、第２の各ゲーム機は、各ゲーム機に対応づけて「投げ抜け」コマンドの自動制御情報が設定されている場合には（例えば、自動制御情報フラグ＝１に設定されている場合には）、併せて抽選処理で用いる当選判定テーブルを記憶部に記憶する。
【０１３２】
そして、ゲームが開始されると、上述した自動制御情報の設定有無に基づいて、ゲーム演算が行われる。
【０１３３】
例えば、第２のゲーム機に、「投げ抜け」コマンドの自動制御情報が設定され、抽選処理では当選判定テーブルＣを用いる場合における、第１のゲーム機の処理について説明する。
【０１３４】
まず、第１のゲーム機において、第１のバッファ１７６から出力された有効な「投げ」入力情報に基づいて、「投げ」コマンドを実行し、第１のプレーヤキャラクタが、第２のプレーヤキャラクタにヒットしたと判定される。
【０１３５】
すると、第２のバッファ１７８から出力される入力情報に関わらず、乱数テーブルの参照ＩＤに対応する乱数値を取得し、取得した乱数値が当選範囲（７〜９）に存在する場合に、「投げ抜け」コマンドを実行する処理を行う。
【０１３６】
一方、取得した乱数値が当選範囲（７〜９）に存在しない場合には、「投げ抜け」コマンドを実行せずに、第２のバッファ１７８から出力されるゲームデータに基づいてゲーム演算を行う。
【０１３７】
なお、本実施形態では、抽選処理が行われる度に、乱数テーブルの参照するＩＤを次の番号に移行するように制御している。
【０１３８】
このように、本実施形態では、ゲーム開始前に、第１、第２のゲーム機間で、乱数テーブルを共有すると共に、第１、第２のゲーム機に設定されている自動制御情報の有無を共有し、通信遅延が生じたとしても、抽選処理結果に基づいて「投げ抜け」コマンドを実行することができる。
【０１３９】
（７）自動制御情報の設定手法
本実施形態では、ゲームプレイ回数（格闘ゲームで勝負した回数）に応じて、「投げ抜け」コマンドの自動制御情報を設定でき、抽選処理で用いる当選判定テーブルを設定できるようにしている。
【０１４０】
例えば、本実施形態では、ゲームプレイ回数に応じて、１〜９段階ある熟練度を設定し、ゲームプレイ回数が３０回行われる度に熟練度の段階を上げる。
【０１４１】
そして、本実施形態では、予め、熟練度が１〜６である段階では、プレーヤからの入力情報によらずに「投げ抜け」コマンドの自動制御情報を無効に設定し、熟練度が７以上になると、プレーヤからの入力情報に基づいて、「投げ抜け」コマンドの自動制御情報を設定できるようにしている。
【０１４２】
また、熟練度が７の場合には、当選判定テーブルＣに設定されるが、熟練度が８になると、プレーヤからの入力情報に基づいて、当選判定テーブルＢ、当選判定テーブルＣのうち、いずれか一方の当選判定テーブルの選択を受け付け、受け付けた当選判定テーブルを設定できるようにしている。
【０１４３】
また、熟練度が９になると、プレーヤからの入力情報に基づいて、当選判定テーブルＡ、当選判定テーブルＢ、当選判定テーブルＣのうち、いずれか一つの当選判定テーブルの選択を受け付け、受け付けた当選判定テーブルを設定できるようにしている。
【０１４４】
このように、本実施形態では、ゲームプレイ回数に応じて、プレーヤに有利に働くよう自動制御情報を設定でき、また、当選判定テーブルの選択の幅が広がるので、プレーヤに、ゲームプレイに対する意欲を増大させることができる。
【０１４５】
（８）スキルを設定する手法
本実施形態では、ゲーム開始前に、キャラクタセッティング画面において、プレーヤからの入力情報に基づいて、複数のキャラクタの中から、１つのキャラクタの選択を受け付け、受け付けたキャラクタを、プレーヤの操作対象のプレーヤキャラクタとして設定する処理を行う。
【０１４６】
本実施形態では、プレーヤキャラクタを設定後、ゲーム開始前に、プレーヤの入力情報に基づいて、プレーヤキャラクタに対応づけて１又は複数のスキルを設定する。ここで、スキルとは、プレーヤに有利に働く情報である。例えば、スキルは、上述した「投げ抜け」コマンドの自動制御情報や、相手の防御に関わらず、必ず右パンチが成功する右パンチ成功情報、相手の防御に関わらず、必ず右キックが成功する右キック成功情報がある。
【０１４７】
そして、本実施形態では、スキル設定後、ゲーム開始前に、第１のゲーム機、第２のゲーム機がそれぞれ互いに、プレーヤキャラクタと当該プレーヤキャラクタに対応付けて設定されているスキルを送受信する処理を行う。
【０１４８】
つまり、本実施形態の第１、第２の各ゲーム機は、自機のプレーヤキャラクタに対応付けて１又は複数のスキルを記憶部に記憶し、他のゲーム機から、他のプレーヤキャラクタと当該他のプレーヤキャラクタに対応付けられた１又は複数のスキルを受信し、受信した他のプレーヤキャラクタと当該他のプレーヤキャラクタに対応付けられた１又は複数のスキルを記憶部に記憶する。
【０１４９】
３．タイミングチャート
本実施形態のタイミングチャートについて、図７を用いて説明する。例えば、第１のゲーム機では、「投げ抜け」コマンドの自動制御情報が設定されていない場合であって、第２のゲーム機において、「投げ抜け」コマンドの自動制御情報が設定されている場合について説明する。
【０１５０】
まず、ゲーム開始前において、第１のゲーム機が、第２のゲーム機に乱数テーブルを送信し、第２のゲーム機が第１のゲーム機から送信された乱数テーブルを受信する処理を行う。
【０１５１】
また、ゲーム開始前に、第１のゲーム機、第２のゲーム機がそれぞれ互いに、自動制御情報の設定有無を送受信する。なお、第２のゲーム機は、自動制御情報が設定されているので、抽選処理で用いる当選判定テーブルの種類を送信し、第１のゲーム機が第２のゲーム機から送信された当選判定テーブルの種類を受信する。
【０１５２】
そして、ゲームが開始されると、各ゲーム機において、各プレーヤからの入力情報が第１のバッファ１７６、第２のバッファ１７８に次々入力され、識別番号が一致するゲームデータから順次出力してゲーム演算が行われる。
【０１５３】
例えば、第１、第２のゲーム機間において、識別番号が「１２１」のゲームデータが送受信されると、第１、第２のゲーム機それぞれにおいて、第１のバッファ１７６、第２のバッファ１７８から出力される識別番号「１２１」のゲームデータに基づいてゲーム演算が行われる。
【０１５４】
つまり、第１のゲーム機において、第１のバッファ１７６から、有効な「投げ」の入力情報が含まれるゲームデータに基づいて、第１のプレーヤキャラクタが第２のプレーヤキャラクタを投げ掴みする動作演算がＬ１期間で行われる。同様に、第２のゲーム機において、第２のバッファ１７８から、「投げ」の入力情報が含まれるゲームデータに基づいて、第１のプレーヤキャラクタが第２のプレーヤキャラクタを投げ掴みする動作演算がＬ１´期間で行われる。
【０１５５】
そして、第１、第２のゲーム機それぞれにおいて、第１のプレーヤキャラクタが第２のプレーヤキャラクタにヒットしたと判定されると、取得した乱数値が当選判定テーブルＣの当選範囲に含まれるか否かをし、取得した乱数値が当選範囲に含まれると判断されると、「投げ抜け」コマンドを実行する。
【０１５６】
つまり、取得した乱数値が当選範囲に含まれると判断されると、第１のゲーム機では、期間Ｌ２で第２のプレーヤキャラクタが第１のプレーヤキャラクタから投げ抜ける動作が表示され、期間Ｌ２´で、第２のプレーヤキャラクタが第１のプレーヤキャラクタから投げ抜ける動作が表示される。
【０１５７】
一方、取得した乱数値が乱数範囲外にあると判断されると、ヒット後、所定期間内において、第２のプレーヤからの入力情報が格納されるバッファ（第１のゲーム機では第２のバッファ１７８、第２のゲーム機では第１のバッファ１７６）から「投げ抜け」の入力情報が出力されない限り、第２のプレーヤキャラクタは「投げ抜け」することはできない。
【０１５８】
通常、第２のプレーヤは、相手の投げ技を予測することができないので、例えば、「投げ抜け」の入力情報が出力されず、その結果、期間Ｌ３で第１のプレーヤキャラクタが第２のプレーヤキャラクタを投げる動作が表示され、第２のゲーム機においても、期間Ｌ３´で第１のプレーヤキャラクタが第２のプレーヤキャラクタを投げる動作が表示される。
【０１５９】
なお、以上に説明した通りであるが、ゲーム開始してからゲームが終了するまで（勝敗結果が算出されるまで）第２のゲーム機は、第１のゲーム機と全く同じ処理が行われる。つまり、第２のゲーム機の第１のバッファ１７６には、第１のゲーム機の第２バッファにと同一のゲームデータが入出力され、第２のゲーム機の第２のバッファ１７８には、第１のゲーム機の第１のバッファ１７６と同一のゲームデータが入出力される。
【０１６０】
すなわち、第１、第２のゲーム機において、ゲーム演算に用いられるゲームデータは全く同じであり、自動制御情報の設定有無や、乱数テーブルを第１、第２のゲーム機で、同一のものが格納され、抽選処理も全く同じように行われるので、同じゲーム演算処理が行われることになる。
【０１６１】
つまり、第１のゲーム機において、１２１番の「投げ」の入力情報に基づいて双方のプレーヤキャラクタがヒットしたこと起因に、抽選処理結果に基づき「投げ抜け」コマンドを実行する際には、第２のゲーム機においても、同様に１２１番の「投げ」の入力情報に基づいて双方のプレーヤキャラクタがヒットしたことを起因に、第１のゲーム機と同様の抽選処理結果に基づき「投げ抜け」コマンドを実行することになる。
【０１６２】
４．フローチャート
次に、本実施形態の各ゲーム機で行われる処理の流れを、図８を用いて説明する。
【０１６３】
まず、「投げ」コマンドを実行するか否かを判断する（ステップＳ１０）。例えば、第１のバッファ１７６、第２のバッファ１７８のうち、いずれかのバッファから出力されたゲームデータが「投げ」の入力情報である場合に、「投げ」コマンドを実行する。
【０１６４】
そして、「投げ」コマンドを実行すると判断される（ステップＳ１０のＹｅｓ）と、第１のプレーヤキャラクタと第２のプレーヤキャラクタとが所定範囲に存在することにより「投げ」がヒットしたか否かを判断する（ステップＳ１１）。
【０１６５】
第１のプレーヤキャラクタと第２のプレーヤキャラクタとがヒットしたと判断されると（ステップＳ１１のＹｅｓ）、「投げ」をしたプレーヤキャラクタに対する他方のプレーヤキャラクタのゲーム機に、自動制御情報が設定されているか否かを判断する（ステップＳ１２）。
【０１６６】
自動制御情報が設定されていると判断されると（ステップＳ１２のＹｅｓ）、抽選処理を行い（ステップＳ１４）、当選か否かを判定する（ステップＳ１５）。
【０１６７】
当選であると判定されると（ステップＳ１５のＹｅｓ）、「投げ抜け」コマンドを実行する処理を行う（ステップＳ１６）。例えば、投げ技が失敗し、第２のプレーヤキャラクタが、第１のプレーヤキャラクタから「投げ抜ける」モーションを表示させ、第２のプレーヤキャラクタが第１のプレーヤキャラクタからダメージを受けないように制御する。つまり第２のプレーヤキャラクタの体力値は、「投げ技」のダメージによる減算はされないように制御する。
【０１６８】
一方、当選でないと判定されると（ステップＳ１５のＮｏ）、処理を終了する。例えば、投げ技が成功し、第１のプレーヤキャラクタが、第２のプレーヤキャラクタを「投げる」モーションを表示させ、第１のプレーヤキャラクタが第２のプレーヤキャラクタにダメージを与え、第２のプレーヤキャラクタの体力値を減算する処理を行う。
【０１６９】
一方、「自動投げ抜け」コマンドが設定されていないと判断されると（ステップＳ１２のＮｏ）、所定期間内に、「投げ」をしたプレーヤキャラクタに対する他方のプレーヤキャラクタに相当するバッファから「投げ抜け」の入力情報が出力されたか否かを判断する（ステップＳ１３）。
【０１７０】
所定期間内に、バッファから「投げ抜け」の入力情報が出力されたと判断されると（ステップＳ１３のＹｅｓ）、「投げ抜け」コマンドを実行する処理を行う（ステップＳ１６）。一方、所定期間内に、バッファから「投げ抜け」の入力情報が出力されていないと判断されると（ステップＳ１３のＮｏ）、処理を終了する。
【図面の簡単な説明】
【０１７１】
【図１】本実施形態のゲーム機の機能ブロック図。
【図２】本実施形態のネットワーク図。
【図３】同期処理の説明図。
【図４Ａ】図４（Ａ）は、本実施形態の第１、第２のバッファの入出力の説明図。
【図４Ｂ】図４（Ｂ）は、本実施形態の第１、第２のバッファの入出力の説明図。
【図４Ｃ】図４（Ｃ）は、本実施形態の第１、第２のバッファの入出力の説明図。
【図５】図５（Ａ）は、乱数テーブルの一例、図５（Ｂ）は当選判定テーブルの一例。
【図６】本実施形態の自動制御情報。
【図７】本実施形態のタイミングチャート。
【図８】本実施形態のフローチャート。
【符号の説明】
【０１７２】
１００  処理部、１１０  ゲーム演算部、１１１、オブジェクト空間設定部、
１１２  仮想カメラ制御部、１１３  移動・動作処理部、１１４  ネットワーク部、
１１５  通信制御部、１１６  バッファ制御部、１１７  設定部、１１８  判定部、
１１９  コマンド実行部、１２０  決定部、１３０  描画部、１４０  音生成部、
１６０  操作部、１７０  記憶部、１７２  主記憶部、１７４  画像バッファ、
１７６  第１のバッファ、１７８  第２のバッファ、１７９  自動制御情報記憶部、
１８０  情報記憶媒体、１９０  表示部、１９２  音出力部、１９６  通信部
【図１】
2010022492.tif 000003
【図２】
2010022492.tif 000004
【図３】
2010022492.tif 000005
【図４Ａ】
2010022492.tif 000006
【図４Ｂ】
2010022492.tif 000007
【図４Ｃ】
2010022492.tif 000008
【図５】
2010022492.tif 000009
【図６】
2010022492.tif 000010
【図７】
2010022492.tif 000011
【図８】
2010022492.tif 000012