(57)【特許請求の範囲】
【請求項１】
情報処理装置において、複数の個体からなる群集の移動を表現する方法であって、
ある時点ｔにおける群集を構成する個体の数と、各個体の位置とを取得し、あらかじめ定められた配置規則にしたがって、次の時点ｔ＋１における各個体の群集内における位置を割り当てる段階と、
ある時点ｔにおける群集を構成する個体の位置により定められる群集の基準点について、目的方向を定める段階と、
各個体について、上記配置処理により割り当てられた位置と上記目的方向に応じて次の時点ｔ＋１における位置を決定する段階と、
を有することを特徴とする群集の移動を表現する方法。
【請求項２】
ある時点ｔにおける群集を構成する個体の数と、各個体の位置とを取得し、あらかじめ定められた配置規則にしたがって、次の時点ｔ＋１における各個体の群集内における位置を割り当てる配置処理と、
ある時点ｔにおける群集を構成する個体の位置により定められる群集の基準点について、目的方向を定める処理と、
各個体について、上記配置処理により割り当てられた位置と上記目的方向に応じて次の時点ｔ＋１における位置を決定する処理と
を情報処理装置に実行させるためのプログラム。
【請求項３】
ある時点ｔにおける群集を構成する個体の数と、各個体の位置とを取得し、あらかじめ定められた配置規則にしたがって、次の時点ｔ＋１における各個体の群集内における位置を割り当てる配置手段と、
ある時点ｔにおける群集を構成する個体の位置により定められる群集の基準点について、目的方向を定める手段と、
各個体について、上記配置処理により割り当てられた位置と上記目的方向に応じて次の時点ｔ＋１における位置を決定する手段と
を有することを特徴とする情報処理装置。
【請求項４】
仮想世界中を移動する複数のキャラクタの動画像を、表示装置に表示するためのプログラムであって、
それぞれのキャラクタが、個体として行動するか、群集として行動するかを決定するモード決定処理と、
群集として行動すると決定した場合には、その群集を構成するキャラクタ群を特定して、そのキャラクタ群に対して移動に関する移動情報を与える仮想オブジェクトを、特定されたキャラクタ群のそれぞれの位置に基づいて生成する仮想オブジェクト生成処理と、
特定されたそれぞれのキャラクタの仮想世界中における割り当て位置を定める配置処理と、
前記移動情報および割り当て位置に基づいて、キャラクタ群を移動させる群集移動処理と
を、情報処理装置に実行させることを特徴とするプログラム。
【請求項５】
請求項４記載のプログラムであって、
前記移動情報は、仮想オブジェクトの目的方向に関する情報であること
を特徴とするプログラム。
【請求項６】
請求項５記載のプログラムであって、
操作装置を介して受付けた操作者の操作内容にしたがい仮想世界中を移動する操作者キャラクタの動画像を表示装置の表示画面上に表示する操作者キャラクタ表示処理を情報処理装置にさらに実行させ、
前記仮想オブジェクトの目的方向は、仮想世界中の前記操作者キャラクタを追いかける方向であることを特徴とするプログラム。
【請求項７】
請求項４〜６のいずれか一項に記載のプログラムであって、
前記モード決定処理により、あるキャラクタに対して個体として行動すると決定した場合には、仮想世界中において、そのキャラクタを移動させるキャラクタ移動処理と、
そのキャラクタの仮想世界中における位置に応じた、あらかじめ定められた範囲の領域内に、他のキャラクタが存在しているかどうかを判断するキャラクタサーチ処理と、
他のキャラクタが存在していると判断した場合には、当該他のキャラクタと群集を形成する行動を行わせる群集形成処理と
を情報処理装置にさらに実行させることを特徴とするプログラム。
【請求項８】
請求項４〜７のいずれか一項に記載のプログラムであって、
前記仮想世界中におけるキャラクタの割り当て位置は、群集を形成するキャラクタ群の仮想世界中における位置に基づいて定められる基準点を中心とした一の円上または複数の同心円上の位置であって、同一円上のキャラクタ同士が等間隔になるような位置であることを特徴とするプログラム。
【請求項９】
請求項２、４〜８のいずれか一項に記載のプログラムを記録した情報処理装置読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数の個体の集まりである群集の振る舞いを擬似的に表現する技術に係り、特に、情報処理装置を用いて、個体が群集となって移動を行う様子を画像により表現する技術に関する。
【０００２】
【従来の技術】
群集とは、複数の個体が集まった状態であり、群集の移動とはその集まった状態を保ちながら各個体が移動することである。情報処理装置上で、この群集の移動を擬似的に表現するためには、群集を構成する個々の個体に対して目的地に向う移動の指示を与える第１の方法と、群集を一つのかたまりとみなし、群集に対して目的地に向う移動の指示を与える第２の方法とが考えられる。
【０００３】
【発明が解決しようとする課題】
しかし、第１の場合、各個体が群集内の他の個体との関係を考慮せずに移動を行うことになり、群集としての振る舞いをうまく表現することは困難である。
【０００４】
一方、第２の場合、群集自体は目的地に向うが、例えば、群集内の各個体の分布がそのまま変化せずに移動することとなり、群集が示す流体のような動きを表現することができず、表現が不自然となる。
【０００５】
このため、群集を構成する個々の個体の振る舞いを表現でき、なおかつ、群集としての自然な移動を表現できる技術の開発が望まれている。
【０００６】
本発明の目的は、個体が群集となって移動を行う様子を表現する技術を提供することにある。
【０００７】
【課題を解決するための手段】
上記課題を解決するため、本発明は、情報処理装置において、複数の個体からなる群集の移動を表現する方法であって、ある時点ｔにおける群集を構成する個体の数と、各個体の位置とを取得し、あらかじめ定められた配置規則にしたがって、次の時点ｔ＋１における各個体の群集内における位置を割り当てる段階と、ある時点ｔにおける群集を構成する個体の位置により定められる群衆の基準点について、目的方向を定める段階と、各個体について、上記配置処理により割り当てられた位置と上記目的方向に応じて次の時点ｔ＋１における位置を決定する段階とを有することを特徴とする群集の移動を表現する方法を提供する。
【０００８】
【発明の実施の形態】
本発明の一実施形態について、図面を参照して説明する。
【０００９】
本実施形態においては、エンタテインメント装置において、プレイヤが操作するキャラクタを、プレイヤの敵であるキャラクタが群集となって追いかけるという追跡ゲームに本発明を適用した場合を例とする。
【００１０】
まず、本実施例に係るエンタテインメント装置１０のハードウェア構成について図１６を参照して説明する。図１６は、エンタテインメント装置のハードウェア構成を示すブロック図である。
【００１１】
本図に示すように、エンタテインメント装置１０は、メインＣＰＵ１００と、グラフィックスプロセッサ（ＧＰ）１１０と、Ｉ／Ｏプロセッサ（ＩＯＰ）１２０と、ＣＤ／ＤＶＤ読み出し部１３０と、サウンド再生処理プロセッサ（ＳＰＵ）１４０と、サウンドバッファ１４１と、ＯＳ−ＲＯＭ１５０と、メインメモリ１６０と、ＩＯＰメモリ１７０とを備える。
【００１２】
そして、メインＣＰＵ１００とＧＰ１１０とは、専用バス１０１によって接続されている。また、メインＣＰＵ１００とＩＯＰ１２０とは、バス１０２によって接続されている。また、ＩＯＰ１２０とＣＤ／ＤＶＤ読み出し部１３０とＳＰＵ１４０とＯＳ−ＲＯＭ１５０とは、バス１０３に接続されている。
【００１３】
メインＣＰＵ１００には、メインメモリ１６０が接続され、ＩＯＰ１２０には、ＩＯＰメモリ１７０が接続されている。さらに、ＩＯＰ１２０には、コントローラ（ＰＡＤ）１８０が接続される。
【００１４】
メインＣＰＵ１００は、ＯＳ−ＲＯＭ１５０に格納されたプログラム、あるいは、ＣＤ／ＤＶＤ−ＲＯＭ等からメインメモリ１６０に転送されたプログラムを実行することによって、所定の処理を行う。
【００１５】
ＧＰ１１０は、本エンタテインメント装置のレンダリング機能を受け持つ描画プロセッサであり、メインＣＰＵ１００からの指示に従って、描画処理を行う。
【００１６】
ＩＯＰ１２０は、メインＣＰＵ１００と、周辺装置、例えばＣＤ／ＤＶＤ読み出し部１３０、ＳＰＵ１４０等との間のデータのやり取りを制御する入出力用サブ・プロセッサである。
【００１７】
ＣＤ／ＤＶＤ読み出し部１３０は、ＣＤ／ＤＶＤドライブに装着されたＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭからデータを読み出し、メインメモリ１６０に設けられたバッファ領域１６１への転送を行う。
【００１８】
ＳＰＵ１４０は、サウンドバッファ１４１に格納された圧縮波形データ等を、メインＣＰＵ１００等からの発音命令に基づいて、所定のサンプリング周波数で再生する。
【００１９】
ＯＳ−ＲＯＭ１５０は、起動時にメインＣＰＵ１００およびＩＯＰ１２０が実行するプログラム等が格納されている不揮発性メモリである。
【００２０】
メインメモリ１６０は、メインＣＰＵ１００の主記憶装置であり、メインＣＰＵ１００が実行する命令、および、メインＣＰＵ１００が利用するデータ等が格納される。またメインメモリ１６０には、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等の記録媒体から読み出されたデータを一時的に格納するバッファ領域１６１が設けられている。
【００２１】
ＩＯＰメモリ１７０は、ＩＯＰ１２０の主記憶装置であり、ＩＯＰ１２０が実行する命令、および、メインＣＰＵ１００が利用するデータ等が格納される。
【００２２】
コントローラ（ＰＡＤ）１８０は、プレイヤの指示を受付けるインタフェースである。コントローラ１８０は、複数の操作ボタン、操作レバーからなる操作部を有しており、それぞれの操作ボタン等が押下、あるいは操作レバーが傾けられた情報は、あらかじめ定められた信号によりメインＣＰＵ１００に伝えられる。
【００２３】
図１７は、エンタテインメント装置１０の使用状態を説明する図である。本図において、エンタテインメント装置本体１１のコネクタ部１２にコントローラ（ＰＡＤ）１８０が接続される。また、エンタテインメント装置本体１１の画像音声出力端子１３には、画像音声出力用ケーブル１４が接続される。このケーブル１４の他端にはテレビ受信装置等の画像音声出力装置１５が接続される。エンタテインメント装置のプレイヤは、コントローラ（ＰＡＤ）１８０を用いて操作を指示する。エンタテインメント装置１０は、コントローラ１８０を介して、プレイヤからの指示を受け付け、この指示に対応した画像データと音声データを、画像音声出力装置１５に出力する。そして、画像音声出力装置１５が画像と音声を出力する。
【００２４】
次に、上記構成のエンタテインメント装置１０において、メインＣＰＵ１００が、エンタテインメント装置１０内に装着されたＣＤ／ＤＶＤから読み出されたアプリケーションプログラムを実行することで、実現される追跡ゲームについて説明する。
【００２５】
追跡ゲームにおいて、プレイヤはエンタテインメント装置１０に接続されたコントローラ１８０を使用して、操作対象オブジェクトであるプレイヤキャラクタを操作し、仮想的な世界を移動することができる。一方、仮想世界３１０にはプレイヤキャラクタの敵である敵キャラクタが複数存在している。敵キャラクタは、通常は単独で、プレイヤキャラクタを追いかけるが、近くに仲間である他の敵キャラクタを発見すると、群集を形成して、プレイヤキャラクタを追いかける。ここで、プレイヤキャラクタにとっての敵である敵キャラクタは、敵キャラクタ同士では仲間の関係となる。もちろん、敵キャラクタ内に複数のグループを設け、同じグループ内に属する敵キャラクタのみを仲間とするようにしてもよい。
【００２６】
プレイヤはこれらの敵キャラクタにつかまらないようにプレイヤキャラクタを操作することでゲームを続けることができる。
【００２７】
エンタテインメント装置１０は、この仮想世界３１０を移動するプレイヤキャラクタと、敵キャラクタとを表現する画像を生成し、エンタテインメント装置１０に接続された画像音声出力装置１５の表示画面に表示する。
【００２８】
図１は、エンタテインメント装置１０上に構築される追跡ゲームを実現するためのソフトウェア構成を示したブロック図である。なお、この図に示す各構成要素は、ＣＤ／ＤＶＤ読み出し部１３０により、エンタテインメント装置１０内に装着されたＣＤ／ＤＶＤから読み出され、メインメモリ１６０上に格納されたアプリケーションプログラムを、メインＣＰＵ１００が実行することにより、具現化される。
【００２９】
図１において、仮想世界ＤＢ２０５は、追跡ゲームが展開される仮想世界を形成するためのデータを格納する。
【００３０】
ここで、図２で示すように、仮想世界３１０は、Ｘ−Ｙ座標平面として管理される有限の２次元空間である。すなわち、仮想世界３１０における位置は座標（ｘ，ｙ）の形式で特定することができる。
【００３１】
仮想世界は、Ｘ軸に平行な一定間隔の直線とＹ軸に平行な一定間隔の直線とによって区切られるブロックに分割されている。ここでは、図２に示す仮想世界３１０の左下を原点として、Ｘ軸Ｙ軸に平行な直線を座標間隔１０で設け、ブロックに分割するものとする。そして、Ｙ軸に平行な直線で区切られる領域をＸ座標の小さいほうからＸ１、Ｘ２・・・とし、Ｘ軸に平行な直線で区切られる領域をＹ座標の小さいほうからＹ１、Ｙ２・・・とする。このように定義したことで、例えば、左下のブロックはＸ１Ｙ１として特定することできるように、個々のブロックは、ＸｎＹｍの形式で特定することができる。
【００３２】
各ブロックは、図３に一例を示すようなデータ構造を有している。
【００３３】
本図においてブロックＩＤは、ブロックを特定するためのＸｎＹｍ形式によるデータである。
【００３４】
ブロック属性は、ゲーム構成上の仮想世界３１０の地理的情報を定めるためのブロック属性を定める情報で、例えば道、川、丘、草原等を表すコードとすることができる。
【００３５】
表示用データは、ブロックを表示するための画像データである。画像生成部２０４は本データを用いて、仮想世界３１０の画像を生成する。
【００３６】
図１において、操作内容受付部２０１は、コントローラ１８０が受付けたプレイヤの指示にしたがい、プレイヤの操作対象オブジェクトであるプレイヤキャラクタの仮想世界３１０における移動方向を決定する。この処理は定期的に行われる。
【００３７】
ここで、プレイヤキャラクタの移動方向は、上下左右の方向をコントローラ１８０に設けられた特定の操作ボタンあるいは操作レバーに対応させ、そのボタン等の操作を受付けることで決定する。
【００３８】
図１において、プレイヤキャラクタ位置算出部２０２は、仮想世界３１０におけるプレイヤの操作対象オブジェクトであるプレイヤキャラクタの位置を算出する処理を行う。この処理は定期的に行われる。
【００３９】
具体的には、前回算出したプレイヤキャラクタの仮想世界３１０における位置と操作内容受付部２０１で決定されたプレイヤキャラクタの最新の移動方向と、あらかじめ定められたプレイヤキャラクタの移動速度とから、現時点でのプレイヤキャラクタの仮想世界３１０における位置を算出する。
【００４０】
画像生成部２０４は、仮想世界３１０の表示用データに、プレイヤキャラクタおよび敵キャラクタの表示用データを重ね合わせて、２次元画像を生成する。
【００４１】
表示制御部２０６は、画像生成部２０４で生成された２次元画像をビデオ信号に変換し、エンタテインメント装置１０に接続された画像音声出力装置１５の表示画面に表示する。
【００４２】
オブジェクト制御部２０３は、敵キャラクタオブジェクトの仮想世界３１０内における移動を制御する。その詳細について説明する。
【００４３】
敵オブジェクト制御部２０３が制御する対象には、単独で行動する場合の敵キャラクタオブジェクトと、敵キャラクタから構成される群集オブジェクトとがある。敵オブジェクト制御部２０３は、制御するオブジェクトをオブジェクトリストで管理する。図４（ａ）は、オブジェクトリストの一例を示す図である。本図において、敵オブジェクト制御部２０３は、敵キャラクタオブジェクトＥ００１とＥ００２とＥ００３とＥ００４とＥ００５とを管理している。
【００４４】
ここで、仮に敵キャラクタオブジェクトＥ００１とＥ００２とＥ００３とが群集を構成し、群集オブジェクトＧ００１となったとすると、オブジェクト制御部２０３は、図４（ｂ）に示すように、オブジェクトリストからＥ００１とＥ００２とＥ００３とを削除し（削除したＩＤは、図９の敵キャラクタリスト２８１に追加する。詳細については後述する。）、群集オブジェクトＧ００１をオブジェクトリストの先頭に追加する。
【００４５】
この後、群集オブジェクトＧ００１から敵オブジェクトＥ００３が分離したときは、図４（ｃ）に示すようにオブジェクト制御部２０３は、オブジェクトリストに敵オブジェクトＥ００３を追加する。そして、敵キャラクタオブジェクトＥ００３は単独で行動する。なお、敵キャラクタが群集を構成する場合および群集から敵キャラクタが分離する場合等の条件については後述する。
【００４６】
本実施形態において、敵キャラクタは個々の独立したオブジェクトとして管理される。そして、あらかじめ定められた行動基準に基づいて移動を行う。行動基準はルール化され、敵キャラクタオブジェクトに共通に適用される。以下にその行動基準について図面を用いて説明する。
【００４７】
図５は、敵キャラクタオブジェクトが管理するデータ構造の一例を模式的に説明するための図である。
【００４８】
本図に示すように、敵キャラクタオブジェクトは、データとしてオブジェクトＩＤ２６１と、モード２６２と、存在位置２６３と、標準速度２６４とを有している。
【００４９】
オブジェクトＩＤ２６１は、敵キャラクタオブジェクトを識別するためのコードで、例えばＥ００１、Ｅ００２とすることができる。
【００５０】
モード２６２は、敵キャラクタが個体として行動しているか、群集の中の一員として行動しているかを識別するためのデータで、個体モードと群集モードの２つの状態がある。敵キャラクタは初期状態においては、個体モードとして行動しているが、他の敵キャラクタを発見すると、その敵キャラクタと群集を形成し、群集モードに遷移する。
【００５１】
存在位置２６３は、仮想世界３１０内における敵キャラクタが存在している位置を表す座標データで、前回の存在位置と移動方向と移動速度とに基づいて、例えばΔｔごとの定期的に算出される。
【００５２】
標準速度２６４は敵キャラクタが移動するとき速度の基準値を表すあらかじめ定められた値である。例えば、Δｔあたり仮想世界３１０の座標で１０とすることができる。
【００５３】
敵キャラクタは、モード２６２によって行動のパターンが変化する。
【００５４】
まず、敵キャラクタオブジェクト（敵キャラクタ）の個体モードでの行動について説明する。
【００５５】
個体モードである敵キャラクタは、時刻ｔにおいて、この仮想世界３１０上の、現在位置で定められる位置に存在しているものとする。そして、時間間隔Δｔごとに離散的に位置を変えるものとする。ただし、Δｔは、敵キャラクタが連続して移動しているようにプレイヤに認識される程度に短い時間とする。このときの移動距離は敵キャラクタの移動速度により定められる。この、敵キャラクタの移動速度は、標準速度に基づいて定められる。例えば、キャラクタが存在している座標点を含むブロックの属性が道であれば、移動速度＝標準速度とし、属性が草原であれば移動速度＝標準速度×０．８などと、キャラクタの存在するブロックの属性に応じて変化させることができる。さらに、プレイヤキャラクタを追いかけるときには速度を早くするように変化させることもできる。
【００５６】
図６（ａ）は敵キャラクタの移動の様子を説明するイメージ図である。本図において敵キャラクタ３００ａ、３００ｂ…は、２次元の仮想世界３１０を移動する。本図において実線円はある時刻ｔにおける敵キャラクタ３００の位置で、破線円は時刻ｔ＋Δｔにおける敵キャラクタ３００の位置である。
【００５７】
図７は敵キャラクタが個体モードとして行動するときの１ターンにおける処理を説明するフローチャートである。ここで、１ターンとは、時刻ｔにおけるオブジェクトごとの処理単位で、敵オブジェクト制御部２０３により制御される。
【００５８】
敵キャラクタ３００は、個体モードとして行動するとき、存在している位置を基準に図６（ｂ）で示すようなサーチエリア３０１を有している。このサーチエリア３１０は、仮想世界３１０の敵キャラクタが存在している位置の座標を中心とした半径ａの円内の領域とすることができる。
【００５９】
敵キャラクタ３００は、サーチエリア３０１内における、プレイヤのキャラクタ３５０および他の敵キャラクタ３００ａの存在を検出することができる（Ｓ１０１）。具体的には、オブジェクトリストに登録されているキャラクタの存在位置２６３を参照して、敵キャラクタ３００の存在位置２６３の座標を中心とした半径ａの円の中に、プレイヤキャラクタあるいは他の敵キャラクタの存在位置２６３があるかどうかを判断できる。
【００６０】
そして、サーチエリア内に他の敵キャラクタが存在していることを検出すると、敵キャラクタは他の敵キャラクタと群集を形成する（Ｓ１０７）。この処理については後述する。
【００６１】
一方、サーチエリア内にプレイヤキャラクタが存在していることを検出すると（Ｓ１０２）、敵キャラクタは、プレイヤキャラクタの座標と自己の座標の位置関係から目的方向を定める（Ｓ１０３）。ここで、定められる目的方向はプレイヤキャラクタが存在する方向とする。すなわち、敵キャラクタは、プレイヤキャラクタの存在している座標を取得して、プレイヤキャラクタを追いかける方向に目的方向を設定することとなる。
【００６２】
次に、敵キャラクタは、移動速度を定める（Ｓ１０５）。移動速度は、例えば、標準速度の１．２倍とすることができる。また、前述のように、敵キャラクタが存在しているブロックの属性２５２に応じて変化させることとしてもよい。
【００６３】
そして、定めた目的方向と、移動速度とにより時刻ｔ＋Δｔの座標を算出する（１０６）。そして、その座標を現在位置に設定して時刻ｔにおけるターンを終了する。
【００６４】
敵キャラクタは、サーチエリア内に他の敵キャラクタおよびプレイヤキャラクタのいずれをも検出しないときは、任意に、例えば乱数を用いて、目的方向を定める（Ｓ１０４）。このとき、移動の様子を不自然にしないため、時刻ｔにおける目的方向とあまり変わらないような方向に設定することが望ましい。
【００６５】
次に、敵キャラクタは、移動速度を定める（Ｓ１０５）。移動速度は例えば標準速度とすることができる。もちろん、前述のようにブロックの属性２５２に応じて変化させることとしてもよい。
【００６６】
そして、定めた目的方向と、移動速度とにより時刻ｔ＋Δｔの座標を算出する（Ｓ１０６）。そして、その座標を現在位置に設定して時刻ｔにおけるターンを終了する。
【００６７】
以上のように、１の敵キャラクタの時刻ｔにおける１ターンが終了する。すなわち敵キャラクタは時刻ｔにおける１ターンで、群集を形成するか、時刻ｔ＋Δｔにおける現在位置に移動するかのいずれかの行動を行う。
【００６８】
この行動は、時刻ｔにおいて個体モードにあるすべての敵キャラクタが順番に行う。このときの制御方法について説明する。
【００６９】
オブジェクト制御手段は、前述のように図４（ａ）に示すようなオブジェクトリストを管理する。そして、時刻ｔにおいて、オブジェクトリストに記録されている敵キャラクタオブジェクトに対し、順番に１ターンにおける処理を行わせる。例えば、本図のように、オブジェクトリストに敵キャラクタＥ００４、敵キャラクタＥ００５が掲載されていたとすると、時刻ｔにおいて、まず、敵キャラクタＥ００４に前述の１ターンの処理を行わせる。このターンが終了すると、次に敵キャラクタＥ００５に１ターンの処理を行わせる。そして、敵キャラクタＥ００５のターンが終了すると、時刻ｔにおける処理を終了する。
【００７０】
この処理をΔｔごとに行うことにより、敵キャラクタＥ００４と敵キャラクタＥ００５を連続的に行動させることができる。なお、図４（ｂ）（ｃ）に示すように、オブジェクトリストに群集オブジェクトが掲載されている場合には、時刻ｔにおける敵キャラクタオブジェクトのターンを行わせる前に、時刻ｔにおける群集オブジェクトのターンが行われるが、この処理については後述する。
【００７１】
前述のように、サーチエリア内に他の敵キャラクタが存在することを検出すると、敵キャラクタは、サーチエリア内に存在する敵キャラクタと群集を形成する（Ｓ１０７）。
【００７２】
このときの群集を形成する処理について図８を参照して説明する。本例では、図８（ａ）に示すように、敵キャラクタＡ（Ｅ００６）が、時刻ｔにおけるターンで、サーチエリア３０１内に存在する敵キャラクタＢ（Ｅ００７）と敵キャラクタＣ（Ｅ００８）とを検出して、３体で群集を形成するものとする。
【００７３】
まず、オブジェクト制御手段２０３は、敵キャラクタＡから通知をうけ、図８（ｂ）に示すように、サーチエリア３０１内に存在する敵キャラクタについての仮想リーダたる群集オブジェクトＧ（Ｇ００２）３０２を作成する。そして、オブジェクトリストの先頭に群集オブジェクトＧのＩＤであるＧ００２を追加し、群集オブジェクトを構成する敵キャラクタＡ、敵キャラクタＢ、敵キャラクタＣのＩＤをオブジェクトリストから削除する。さらに、敵キャラクタＡ、敵キャラクタＢ、敵キャラクタＣのモード２６２を、個体から群集に変更する。そして、敵キャラクタＡの時刻ｔにおけるターンを終了する。
【００７４】
ここで、群集オブジェクトについて説明する。
【００７５】
群集オブジェクトは仮想オブジェクトであり、表示は行わない。そして、群集オブジェクトの位置は、図８（ｃ）に示すように、その群集を構成する敵キャラクタの位置の中心点（仮想世界３１０上における重心座標）とする。すなわち、時刻ｔにおける群集オブジェクトの位置は、群集を構成する敵キャラクタの時刻ｔにおける位置により定まる。なお、プレイヤの選択に応じて、群集オブジェクトを敵オブジェクトとは区別される図形で表示するようにしてもよい。
【００７６】
さらに、群集オブジェクトは、その群集を構成する敵キャラクタの数情報と位置情報を有している。図９は、群集オブジェクトが管理する情報のデータ構造を模式的に説明する図である。
【００７７】
本図において群集オブジェクトは、群集オブジェクトを識別するための群集オブジェクトＩＤ２７１と、群集を構成する敵キャラクタの数２７２と、群集オブジェクトの存在位置２７３とを管理している。
【００７８】
加えて、群集オブジェクトは、敵キャラクタの数２７２に応じて、それぞれの敵キャラクタのＩＤと存在位置とを管理する情報を有している。敵キャラクタの存在位置を管理する情報は、本例においては、２８１ａで敵キャラクタＡのＩＤと存在位置とを管理し、２８１ｂで敵キャラクタＢのＩＤと存在位置を管理し、２８１ｂで敵キャラクタＣのＩＤと存在位置を管理しているものとする。一方、これらの敵キャラクタの存在位置情報を基に、群集オブジェクトの存在位置２７３の値が定められる。これらの敵キャラクタの情報は、群集形成時、その直前の敵キャラクタの情報を取得することで初期値を形成することができる。
【００７９】
前述のようにオブジェクト制御部２０３は、時刻ｔにおけるオブジェクトリストに群集オブジェクトが掲載されている場合には、時刻ｔにおける個体モードの敵キャラクタオブジェクトのターンを行わせる前に、時刻ｔにおける群集オブジェクトのターンを行わせる。以下に、群集オブジェクトが１ターンで行う処理について図１０のフローチャートを参照して説明する。
【００８０】
ここでは、敵キャラクタＡ、敵キャラクタＢ、敵キャラクタＣとから構成される群集オブジェクトＧを例にする。
【００８１】
まず、群集オブジェクトＧは、その群集を構成する敵キャラクタの数２６２の情報を取得して（Ｓ２０１）、その情報に基づき敵キャラクタの配置情報を作成する（Ｓ２０２）。このときの処理について図１１を参照して説明する。
【００８２】
まず、群集オブジェクトＧは、配置形状を定める。配置形状を定めるルールは任意であるが、ここでは、群集の形状を見栄えよく表現するルールを用いるものとする。そのルールについて説明する。
【００８３】
群集オブジェクトＧは、図１１（ａ）に示すように、群集オブジェクトＧの位置を中心に所定の半径を有する複数の同心円を仮定する。同心円は中心点に近い方から第１層３０３ａ、第２層３０３ｂ…とする。なお、この同心円の大きさは固定とすることも、可変とすることもできる。可変とする場合には例えば、群集オブジェクトの存在しているブロックの属性に応じて変化させたり、プレイヤの操作内容に応じて変化させることができる。
【００８４】
そして、例えば、図１１（ｂ）に示すように、第１層３０３ａには６体まで、第２層には１２体までの敵キャラクタが配置できるものとする。以下同様にＮ層には３×２Ｎ体までの敵キャラクタが配置できるものとする。
【００８５】
この場合において、群集オブジェクトＧは、群集を構成する敵キャラクタを、第１層３０３ａから順番に分配していく。すなわち、群集を構成する敵キャラクタが２〜６体のときは、すべてを第１層に分配する。敵キャラクタが７体〜１８体のときは、６体を第１層３０３ａに分配し、残りの敵キャラクタを第２層３０３ｂに分配する。以下同様に中心点に近い層から順番に分配していく。なお、この時点においては、どの敵キャラクタがどの層に配置されるかは未確定である。
【００８６】
次に、群集オブジェクトは、敵キャラクタが配置された層に関して、各敵キャラクタ同士の間隔が等しくなるように配置を定める。例えば、群集オブジェクトＧを構成する敵キャラクタが４体で、第１層３０３ａにすべての敵キャラクタが分配されたとすると、同心円上で、これらの間隔が等しくなるよう配置を行うと、図１１（ｃ）に示すように４体の敵キャラクタが同心円上で正方形を描くような配置になる。同様に、６体では同図（ｄ）に示すように正六角形、１０体では同図（ｅ）に示すように２層構造となり、第１層３０３ａは正六角形、第２層３０３ｂは正方形を描くような配置となる。
【００８７】
次に、群集オブジェクトＧは、群集を構成する敵キャラクタのそれぞれに対して、上記のように定められた配置を割り当てる。群集オブジェクトは、敵キャラクタの位置と、定められた配置とを比較して、どの敵キャラクタをどの配置に割り当てるかを定める。割り当て方法は任意であるが、例えば、各敵キャラクタの現在位置を参照して、全体として最も移動距離が短くなるように割り当てるようにすることができる。あるいは、敵キャラクタと、配置に識別番号を付し、番号順に割り当てを行うようにしてもよい。ここでは、それぞれの配置位置に、最も近くにいる敵キャラクタを割り当てることとする。
【００８８】
この処理により、各敵キャラクタの配置割り当てを定めると、群集オブジェクトは、その割り当て情報を各敵キャラクタに通知する。これにより、敵キャラクタは自身が、仮想平面上のどの位置（座標）に割り当てられたかを知ることができる。
【００８９】
なお、仮想世界３１０のブロック属性に応じて、割り当て位置を制限することもできる。例えば、ブロックの属性が川であると、そのブロックには敵キャラクタを配置できないようなルールを用いてもよい。
【００９０】
次に、群集オブジェクトは、目的方向を定める処理を行う（Ｓ２０３）。群集オブジェクトの目的方向は、プレイヤキャラクタの存在している方向とする。例えば、時刻ｔにおいて、図１２に示すように、群集オブジェクトの存在位置が（ｘ１，ｙ１）で、プレイヤキャラクタの存在位置が（ｘ２，ｙ２）であったとすると、群集オブジェクトの目的方向は、目的方向とＸ軸とのなす角をθとすると、
θ＝ｔａｎ−１（ｙ２−ｙ１）／（ｘ２−ｘ１）
となる（ただしｘ２≠ｘ１、ｘ２＝ｘ１の場合はθ＝９０°）。
【００９１】
群集オブジェクトは、この目的方向を、群集オブジェクトを構成する各敵キャラクタに通知する。
【００９２】
なお、群集オブジェクトがプレイヤキャラクタの存在している位置を検索する処理は、例えば、群集オブジェクトが存在しているブロックを中心に、所定の距離範囲内のブロックを順番に検索して、プレイヤキャラクタがそのブロック内に存在しているかどうかを判断することにより行うことができる。この結果、検索範囲内のブロックでプレイヤキャラクタを発見した場合は、その方向を目的方向とすることができる。一方、プレイヤキャラクタを発見できなかった場合は、直前の目的方向を維持する、ランダムに目的方向を変える等の処理を行って、目的方向を定めることができる。
【００９３】
群集オブジェクトは、この目的方向を定めるだけで、群集オブジェクト自身は主体的に移動は行わない。群集オブジェクトの位置は、群集オブジェクトを構成する敵キャラクタの中心点であるからである。したがって、群集オブジェクトは、群集オブジェクトを構成する個々の敵キャラクタが移動することにより結果的に移動することになる。
【００９４】
以下に群集を構成する敵キャラクタの移動について説明する。
【００９５】
群集を構成し、群集モードにある敵キャラクタは、前述のように、群集オブジェクトから仮想平面上のどの座標に割り当てられたかという配置情報と目的方向に関する情報を得ている。
【００９６】
群集を構成する敵キャラクタは、この配置情報と目的方向から時刻ｔ＋Δｔの存在位置が定まる（Ｓ２０４）。
【００９７】
群集を構成する敵キャラクタの移動は時刻ｔにおける群集オブジェクトのターンの、子ターンとして処理される。すなわち、ターンは入れ子構造を有している。例えば、群集オブジェクトＧが、敵キャラクタＡ、敵キャラクタＢ、敵キャラクタＣから構成されているとすると、オブジェクト制御部２０３から与えられた群集オブジェクトＧのターン中において、群集オブジェクトＧは、敵キャラクタＡ・Ｂ・Ｃに対し、順番にターン（群集オブジェクトＧのターンにおける子ターン）を行わせる。
【００９８】
ここで、敵キャラクタＡを例に、子ターンにおける敵キャラクタの移動処理の一例について図１３を用いて説明する。
【００９９】
群集モードにある敵キャラクタＡは、時刻ｔに仮想平面上の座標（ｘ１，ｙ１）に存在したとする。そして、群集オブジェクトから配置情報（ｘ３，ｙ３）と、目的方向θが与えられたとする。このとき敵キャラクタＡの時刻ｔ＋Δｔにおける存在位置は以下のように定められる。
【０１００】
ここで、簡単のため仮想世界３１０の座標とは別の座標系を考え、図１３（ａ）に示すように、時刻ｔにおける敵キャラクタの存在位置（ｘ１，ｙ１）を（０，０）として、目的方向をθ＝９０°とする。
【０１０１】
まず、敵キャラクタＡは、配置情報が、目的方向を基準として、前方であるか、後方であるかを判断する。本例の場合は、配置情報（ｘ３，ｙ３）のｙ３が０以上であるか、０未満であるかを判断する。
【０１０２】
そして、配置情報の座標が、目的方向を基準として前方であると判断したときは、速い移動速度、例えば、移動速度＝基準速度×１．２で、配置情報の座標（ｘ３，ｙ３）の方向に、移動速度×Δｔの距離だけ移動する。そして、図１３（ｂ）に示すように、その結果得られる座標を、時刻ｔ＋Δｔにおける存在位置とする。
【０１０３】
なお、本図において実線の円Ａは時刻ｔにおける敵キャラクタＡの位置で、破線の円Ａは時刻ｔ＋Δｔにおける敵キャラクタＡの位置を表している。
【０１０４】
一方、配置情報の座標が、目的方向を基準として後方であると判断したときは、遅い移動速度、例えば、移動速度＝基準速度×０．６で、座標（ｘ３，０）の方向に、移動速度×Δｔの距離だけ移動する。すなわち、目的方向に対して後退しないで、配置情報の座標（ｘ３，ｙ３）に近づくように移動を行う。そして、図１３（ｃ）に示すように、その結果得られる座標を、時刻ｔ＋Δｔにおける存在位置とする。
【０１０５】
同様の、移動処理を敵キャラクタＢ、敵キャラクタＣも行うことにより（Ｓ２０５）、群集オブジェクトＧの時刻ｔにおけるターンが終了する。
【０１０６】
そして、オブジェクトリストに別の群集オブジェクトが登録されている場合には、その群集オブジェクトに対しても同様のターンを行わせる（Ｓ２０６）。
【０１０７】
時刻ｔのターン終了後、時刻ｔ＋Δｔにおける群集オブジェクトＧのターンで、群集オブジェクトＧは、群集を構成する敵キャラクタＡ、敵キャラクタＢ、敵キャラクタＣの時刻ｔ＋Δｔにおける存在位置とから、自己の存在位置を求める。そして、配置情報と目的方向を上述のように定め、群衆を構成する敵キャラクタに通知する。このような処理を繰り返すことにより、群集としてプレイヤキャラクタを追いかける様子を、エンタテインメント装置上で表現することができる。
【０１０８】
図１４は、時刻ｔから時刻ｔ＋Δｔで、敵キャラクタＡ、敵キャラクタＢ、敵キャラクタＣが群集として移動する様子を表した図である。本図において実線の円Ａ、円Ｂ、円Ｃは時刻ｔにおける敵キャラクタの位置を表し、点線の円Ａ、円Ｂ、円Ｃは時刻ｔ＋Δｔにおける敵キャラクタの位置を表している。本図に示すように、敵キャラクタが群集を構成しながら目的方向の移動している様子が表現できている。
【０１０９】
以上の例は、簡単のため、存在位置（ｘ１，ｙ１）を（０，０）として、目的方向をθ＝９０°としたが、この関係は、現在位置を原点とし、目的方向にＹ軸を一致させた仮想的な座標軸を設定し、座標変換を施すことで一般化できる。
【０１１０】
なお、上記の敵キャラクタの移動処理は一例であり、本発明の移動処理は本例に限られない。例えば、配置情報の座標が、目的方向を基準として前方であると判断したときは、図１５（ａ）に示すように、目的方向と配置情報の座標方向とを合成した方向に移動させるようにしてもよい。また、配置情報の座標が、目的方向を基準として後方であると判断したときでも、図１５（ｂ）に示すように、目的方向に対して前進させるようにしてもよい。このようにすることで、よりプレイヤキャラクタを追いかける様子を表現することができる。
【０１１１】
次に、群集の状態変化について説明する。群集は個体から形成されるが、ある群集を構成する個体は動的に変化する。
【０１１２】
まず、個体で行動している敵キャラクタが、群集に吸収される場合について説明する。個体で行動している敵キャラクタは、ターン中に自身の存在位置を中心とした半径ｂの円内に、群集オブジェクトを検知すると、群集に吸収される。
【０１１３】
具体的には、オブジェクト制御部２０３が、オブジェクトリストから、その敵キャラクタのＩＤを削除するとともに、群集オブジェクトが管理する敵キャラクタの数２７２に１を加え、その敵キャラクタのＩＤと、存在位置に関する情報を追加する。そして、敵キャラクタのモードを群集モードに変更する。この処理により、個体で行動していた敵キャラクタが、群集に吸収されることになる。
【０１１４】
次に、群集を構成してい敵キャラクタが、群集から分離する場合について説明する。群集として行動している敵キャラクタは、子ターン中に自身の存在位置と群集の位置との距離がｂ以上になると、群集から分離して、固体として行動するようになる。
【０１１５】
具体的には、オブジェクト制御部２０３が、オブジェクトリストに、その敵キャラクタのＩＤを追加するとともに、群集オブジェクトが管理する敵キャラクタの数２７２から１を引き、その敵キャラクタのＩＤと、存在位置に関する情報を削除する。そして、敵キャラクタのモードを個体モードに変更する。この処理により、群集として行動していた敵キャラクタが、群集から分離することになる。
【０１１６】
なお、吸収と分離の基準となる距離ｂの大きさは、例えば、仮想世界３１０の座標においてある値に固定させてもよいし、群集の大きさに応じて変化させるようにしてもよい。このようにすることで、群集が大きければ、敵キャラクタを吸収しやすくしたり、群集が小さければ、敵キャラクタが分離しやすくすることができる。
【０１１７】
また、プレイヤキャラクタを追いかける群集について、一定の条件下で複数の群集に分散してプレイヤキャラクタを追いかけるようにしてもよい。このときの処理について説明する。
【０１１８】
上述のように、群集オブジェクトの目的方向は、プレイヤキャラクタの存在している方向であるから、通常は、群集としてはプレイヤキャラクタに向ってまっすぐ追いかけることとなる。
【０１１９】
しかし、前述のように、仮想世界３１０のブロック属性に、例えば池のように敵キャラクタが通ることのできない属性を設定した場合は、このブロックを避けなければならないため、プレイヤキャラクタを追いかけるルートが複数存在することがある。
【０１２０】
図１８は、このときの様子の一例を説明する図である。本図において、群集オブジェクト４０１が、プレイヤキャラクタ４０２を追いかけている。斜線で示した４つのブロックからなるエリア４１０は、敵キャラクタが通ることのできない属性を有している。通常、群集オブジェクト４０１の目的方向は破線４１１で示すように、プレイヤキャラクタ４０２の存在する方向を向くが、本図の場合、エリア４１０は通ることができないため、ルート４１２とルート４１３の２通りのルートが候補として挙げられる。
【０１２１】
オブジェクト制御部２０３は、このような場合に群集Ｇを分割させる処理を行う。すなわち本例の場合では、群集４０１を、ルート４１２を通る第１の群衆と、ルート４１３を通る第２の群集とに分割する。もちろん３つ以上のルートが候補として挙げられる場合は、３つ以上の群集に分割させることができる。
【０１２２】
ここで、候補ルートの検索は、例えば、障害物を避けるのに可能な手段、本図の例では、池４１０の上側を通る手段と、池４１０の下側を通る手段のそれぞれについての最短ルートを候補ルートと決定することができる。
【０１２３】
分割に際して、群集を構成する敵キャラクタの分配方法については、種々の方法を取ることができる。例えば、群集オブジェクトを構成する敵キャラクタの数を等分して、それぞれ新たな群集を構成させること、あるいは、それぞれのルートのプレイヤキャラクタまでの距離の比、または、距離に反比例するような数に分配して、それぞれ新たな群集を構成させることができる。
【０１２４】
オブジェクト制御部２０３は、分割処理において、分割前の群集オブジェクトをオブジェクトリストから削除し、分割した群集オブジェクトをオブジェクトリストに追加し、群集を構成する敵キャラクタについての情報を付加する。
【０１２５】
このとき、分割された群集に係る敵キャラクタは、一定時間の間は、新たに群集を形成する行動をとらないようにさせる必要がある。そうしなければ、分割直後に、再び群集が合流してしまう可能性があるからである。
【０１２６】
また、例えば、ルート４１２を通った場合と、ルート４１３を通った場合とで、プレイヤキャラクタまでの移動距離の差が大きい場合、例えば、一方のルートが、他方のルートの１．５倍以上の距離があるような場合には、群集を分割しないようにしてもよい。
【０１２７】
エンタテインメント装置１０の外観およびハードウェア構成は図１６、図１７に示したものに限定されない。エンタテインメント装置１０は、例えば、ＣＰＵとメモリとハードディスク装置などの外部記憶装置と、ＣＤ／ＤＶＤ−ＲＯＭ等の可搬性を有する記憶媒体からデータを読み取る読取装置と、キーボード、マウス等の入力装置と、ディスプレイ等の表示装置と、インターネット等のネットワークを介して通信を行うためのデータ通信装置と、上述した各装置間のデータ送受信をつかさどるインタフェースといった、一般的な情報処理装置の構成を有するものであってもよい。この場合、エンタテインメント装置１０上に、図１に示すソフトウェア構成を構築するためのプログラム、データは、読取装置を介して、可搬性を有する記憶媒体から読み出され、メモリ、外部記憶装置に記憶されるようにしてもよいし、あるいは、データ通信装置を介して、ネットワークからダウンロードされ、メモリ、外部記憶装置に記憶されるようにしてもよい。
【０１２８】
なお、本発明の表現技術は、前述した例に限られず、多くの集合体の運動表現に適用することができる。例えば、魚群、鳥群、昆虫等の群れの運動画像表現にも適用できる。
【０１２９】
【発明の効果】
上述のように、本発明によれば、個体が群集となって移動を行う場合の各個体の振る舞いと、群集としての自然な移動の様子を、情報処理装置において表現することができる。
【図面の簡単な説明】
【図１】エンタテインメント装置上に構築される追跡ゲームを実現するためのソフトウェア構成を示したブロック図である。
【図２】仮想世界を説明する図である。
【図３】仮想世界のブロックのデータ構造を説明する図である。
【図４】オブジェクトリストの例を説明する図である。
【図５】敵キャラクタオブジェクトが管理するデータ構造の一例を模式的に説明するための図である。
【図６】敵キャラクタの移動の様子を説明する図である。
【図７】敵キャラクタが個体モードとして行動するときの１ターンにおける処理を説明するフローチャートである。
【図８】敵キャラクタが群集を構成するときの処理について説明するイメージ図である。
【図９】群集オブジェクトが管理する情報を模式的に説明する図である。
【図１０】群集オブジェクトが１ターンで行う処理について説明するフローチャートである。
【図１１】群集オブジェクトが敵キャラクタの配置情報を作成する処理について説明する図である。
【図１２】群集オブジェクトの目的方向について説明する図である。
【図１３】敵キャラクタの子ターンにおける移動処理の一例について説明する図である。
【図１４】時刻ｔから時刻ｔ＋Δｔで、敵キャラクタＡ、敵キャラクタＢ、敵キャラクタＣが群集として移動する様子を表した図である。
【図１５】敵キャラクタの子ターンにおける移動処理の別例について説明する図である。
【図１６】エンタテインメント装置のハードウェア構成を示すブロック図である。
【図１７】エンタテインメント装置の使用状態を説明する図である。
【図１８】群集が分割する処理について説明する図である。
【符号の説明】
２０１…操作内容受付部、２０２…プレイヤキャラクタ位置算出部、２０３…オブジェクト制御部、２０４…画像生成部、２０５…仮想世界ＤＢ、２０６…表示制御部
【図１】
0003581673.tif 000002
【図２】
0003581673.tif 000003
【図３】
0003581673.tif 000004
【図４】
0003581673.tif 000005
【図５】
0003581673.tif 000006
【図６】
0003581673.tif 000007
【図７】
0003581673.tif 000008
【図８】
0003581673.tif 000009
【図９】
0003581673.tif 000010
【図１０】
0003581673.tif 000011
【図１１】
0003581673.tif 000012
【図１２】
0003581673.tif 000013
【図１３】
0003581673.tif 000014
【図１４】
0003581673.tif 000015
【図１５】
0003581673.tif 000016
【図１６】
0003581673.tif 000017
【図１７】
0003581673.tif 000018
【図１８】
0003581673.tif 000019