(57)【要約】【課題】入力装置自身の動きに応じて複雑なオブジェクトを動作させる。【解決手段】オブジェクトは、互いに接続される複数のジョイント５１〜５５を有する。ゲーム装置は、オブジェクトの各ジョイントのうちでオブジェクトを基準としたときの位置が固定であるジョイントを基準ジョイントとし、当該基準ジョイントに接続される隣接ジョイントの当該基準ジョイントに対する向き（隣接ボーンの向き）を入力データに基づいて算出する。次に、ゲーム装置は、算出された向きに基づいて基準ジョイントに接続される隣接ジョイントの位置を移動させるとともに、基準ジョイントと隣接ジョイントとを除く他のジョイントを当該隣接ジョイントの移動に応じて移動させる。さらに、ゲーム装置は、移動後の各ジョイントの位置に基づいて形状が決められたオブジェクトを表示装置に表示させる。【選択図】図９
2008310523.tif 000002
【特許請求の範囲】
【請求項１】
入力装置の動きに応じて変化する入力値に基づいて仮想空間内におけるオブジェクトを動作させる情報処理装置のコンピュータに実行させる情報処理プログラムであって、
前記オブジェクトは、互いに接続される複数の接続点を有し、当該接続点の位置関係に基づいて当該オブジェクトの形状が決定され、
前記入力値を示す入力データを取得する入力データ取得ステップと、
前記オブジェクトの各接続点のうち所定の１つの接続点を基準点とし、当該基準点に接続される隣接接続点の当該基準点に対する向きを前記入力データに基づいて算出する向き算出ステップと、
前記向き算出ステップにおいて算出された向きに基づいて前記基準点を除く他の接続点の位置を移動させる接続点移動ステップと、
前記接続点移動ステップにおける移動後の各接続点の位置関係に基づいて形状が決められた前記オブジェクトを表示装置に表示させる表示ステップとを前記コンピュータに実行させる、情報処理プログラム。
【請求項２】
前記接続点移動ステップにおいて、前記コンピュータは、前記基準点を除く他の接続点について、前記基準点に近い接続点から順に移動後の位置を算出する、請求項１に記載の情報処理プログラム。
【請求項３】
前記向き算出ステップは、
前記入力装置の動きを示す動きデータを前記入力データに基づいて算出する動き算出ステップと、
前記隣接接続点の前記基準点に対する向きを前記動きデータに基づいて算出する算出実行ステップとを含む、請求項１または請求項２に記載の情報処理プログラム。
【請求項４】
前記入力データ取得ステップにおいて、前記コンピュータは、前記入力装置が備える加速度センサから出力される加速度データを前記入力データとして取得する、請求項３に記載の情報処理プログラム。
【請求項５】
前記動き算出ステップは、
前記入力データ取得ステップで取得された加速度データの値を平滑化した値を示す平滑化データを算出する平滑化ステップと、
前記入力データ取得ステップで取得した加速度データの値と前記平滑化データの値との差分を示すデータを前記動きデータとして算出する差分算出ステップとを含む、請求項４に記載の情報処理プログラム。
【請求項６】
前記加速度センサは、所定の１軸方向に関する前記入力装置の加速度を検出し、
前記動き算出ステップにおいて、前記コンピュータは、前記所定の１軸方向に関する前記入力装置の動きを示す動きデータを算出する、請求項４に記載の情報処理プログラム。
【請求項７】
前記隣接接続点の前記基準点に対する基準の向きは予め定められており、
前記動き算出ステップにおいて、前記コンピュータは、所定の方向に関する入力装置の動きを示す動きデータを算出し、
前記算出実行ステップにおいて、前記コンピュータは、前記隣接接続点の前記基準点に対する向きが前記基準の向きに対していずれの方向に変化しているかを、前記動きデータにより示される動きが前記所定の方向に関して正方向であるか負方向であるかに応じて決定する、請求項３に記載の情報処理プログラム。
【請求項８】
前記接続点移動ステップにおける各接続点の移動量に基づいて前記オブジェクトを移動させるオブジェクト移動ステップを前記コンピュータにさらに実行させる、請求項１または請求項２に記載の情報処理プログラム。
【請求項９】
前記基準点を除く各接続点のうちの端の接続点と当該端の接続点に接続される接続点とを結ぶ線の方向に基づいて、前記オブジェクトの方向を変更する方向変更ステップを前記コンピュータにさらに実行させる、請求項１、請求項２または請求項８に記載の情報処理プログラム。
【請求項１０】
入力装置の動きに応じて変化する入力値に基づいて仮想空間内におけるオブジェクトを動作させる情報処理装置であって、
前記オブジェクトは、互いに接続される複数の接続点を有し、当該接続点の位置関係に基づいて当該オブジェクトの形状が決定され、
前記入力値を示す入力データを取得する入力データ取得手段と、
前記オブジェクトの各接続点のうち所定の１つの接続点を基準点とし、当該基準点に接続される隣接接続点の当該基準点に対する向きを前記入力データに基づいて算出する向き算出手段と、
前記向き算出手段によって算出された向きに基づいて前記基準点を除く他の接続点の位置を移動させる接続点移動手段と、
前記接続点移動手段による移動後の各接続点の位置関係に基づいて形状が決められた前記オブジェクトを表示装置に表示させる表示制御手段とを備える、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理プログラムおよび情報処理装置に関し、より特定的には、仮想空間内のオブジェクトに対して入力装置自身の動きに応じた動作を行わせる、情報処理プログラムおよび情報処理装置に関する。
【背景技術】
【０００２】
従来より、入力装置自身を動かすことによって操作を行う情報処理システムが提案されている。例えば、特許文献１には、振動ジャイロを搭載した入力装置が開示されている。この入力装置では、リモートコマンダー（入力装置）が振られた方向を振動ジャイロから得られる角速度によって判別し、その判別結果に応じたコマンドが実行される。例えば、振動ジャイロから得られる角速度によってリモートコマンダーが上方向に振られたか、それとも下方向に振られたかを判別し、上方向に振られた場合には、画面内に表示されるカーソルを上方向に移動し、下方向に振られた場合にはカーソルを下方向に移動させる。これによれば、リモートコマンダーを移動させた方向にカーソルを移動させることができ、直感的な入力操作が可能となる。
【特許文献１】特開平６−５０７５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
特許文献１に記載された技術では、例えばカーソルのような単純な構成のオブジェクトが動作対象である場合には動作を制御することは可能であるが、複数の部分で構成されるような複雑なオブジェクトが動作対象である場合には動作を制御することはできなかった。すなわち、入力装置の動きを示す値（角速度）は１種類であるのに対して制御対象（オブジェクトの各部分）は複数であるので、特許文献１に記載された技術をそのまま用いても複数の部分で構成されるオブジェクトの各部分を制御することはできなかった。
【０００４】
それ故、本発明の目的は、入力装置自身の動きに応じて複雑なオブジェクトを動作させることが可能な情報処理プログラムおよび情報処理プログラムを提供することである。
【課題を解決するための手段】
【０００５】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、本欄における括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明を何ら限定するものではない。
【０００６】
第１の発明は、入力装置（コントローラ５）の動きに応じて変化する入力値（加速度ベクトル）に基づいて仮想空間（ゲーム空間）内におけるオブジェクト（プレイヤオブジェクト５０）を動作させる情報処理装置（ゲーム装置３）のコンピュータ（ＣＰＵ１０）に実行させる情報処理プログラム（ゲームプログラム６０）である。オブジェクトは、互いに接続される複数の接続点（ジョイント）を有し、当該接続点の位置関係に基づいて当該オブジェクトの形状が決定される。情報処理プログラムは、入力データ取得ステップ（Ｓ３）と、向き算出ステップ（Ｓ４，Ｓ５，およびＳ１１）と、接続点移動ステップ（Ｓ１４）と、表示ステップ（Ｓ８）とをコンピュータに実行させる。入力データ取得ステップにおいて、コンピュータは、入力値を示す入力データ（加速度データ）を取得する。向き算出ステップにおいて、コンピュータは、オブジェクトの各接続点のうち所定の１つの接続点を基準点（基準ジョイント）とし、当該基準点に接続される隣接接続点（隣接ジョイント）の当該基準点に対する向き（隣接ボーンの向き）を入力データに基づいて算出する。接続点移動ステップにおいて、コンピュータは、向き算出ステップにおいて算出された向きに基づいて基準点を除く他の接続点の位置を移動させる。表示ステップにおいて、コンピュータは、接続点移動ステップにおける移動後の各接続点の位置関係に基づいて形状が決められたオブジェクトを表示装置（テレビ２）に表示させる。
【０００７】
第２の発明においては、接続点移動ステップにおいて、コンピュータは、基準点と隣接接続点とを除く他の接続点について、基準点に近い接続点から順に移動後の位置を算出してもよい。
【０００８】
第３の発明においては、向き算出ステップは、動き算出ステップ（Ｓ４およびＳ５）と、算出実行ステップ（Ｓ１１）とを含んでいてもよい。動き算出ステップにおいて、コンピュータは、入力装置の動きを示す動きデータ（６５）を入力データに基づいて算出する。算出実行ステップにおいて、コンピュータは、隣接接続点の基準点に対する向きを動きデータに基づいて算出する。
【０００９】
第４の発明においては、入力データ取得ステップにおいて、コンピュータは、入力装置が備える加速度センサから出力される加速度データを入力データとして取得する。
【００１０】
第５の発明においては、動き算出ステップは、平滑化ステップ（Ｓ４）と、差分算出ステップ（Ｓ５）とを含んでいてもよい。平滑化ステップにおいて、コンピュータは、入力データ取得ステップで取得された加速度データの値を平滑化した値を示す平滑化データ（追従加速度データ６４）を算出する。差分算出ステップにおいて、コンピュータは、入力データ取得ステップで取得した加速度データの値と平滑化データの値との差分を示すデータを動きデータとして算出する。
【００１１】
第６の発明においては、加速度センサは、所定の１軸方向に関する入力装置の加速度を検出してもよい。このとき、動き算出ステップにおいて、コンピュータは、所定の１軸方向に関する入力装置の動きを示す動きデータを算出する。
【００１２】
第７の発明においては、隣接接続点の基準点に対する基準の向きは予め定められていてもよい。このとき、動き算出ステップにおいて、コンピュータは、所定の方向（Ｘ軸方向）に関する入力装置の動きを示す動きデータを算出する。算出実行ステップにおいて、コンピュータは、隣接接続点の基準点に対する向きが基準の向きに対していずれの方向に変化しているかを、動きデータにより示される動きが所定の方向に関して正方向であるか負方向であるかに応じて決定する。
【００１３】
第８の発明においては、情報処理プログラムは、接続点移動ステップにおける各接続点の移動量（ジョイント速度）に基づいてオブジェクトを移動させるオブジェクト移動ステップ（Ｓ３４）をコンピュータにさらに実行させてもよい。
【００１４】
第９の発明においては、情報処理プログラムは、基準点を除く各接続点のうちの端の接続点（第５ジョイント５５）と当該端の接続点に接続される接続点（第４ジョイント５４）とを結ぶ線の方向（第４ボーン５９の方向）に基づいて、オブジェクトの方向を変更する方向変更ステップ（Ｓ３５）をコンピュータにさらに実行させてもよい。
【００１５】
また、本発明は、上記第１〜第９の発明における各ステップを実行する情報処理装置と同等の機能を有する情報処理装置の形態で提供されてもよい。
【発明の効果】
【００１６】
第１の発明によれば、隣接接続点の基準点に対する向きが入力装置の動きに応じて変化し、当該向きの変化に応じて他の接続点が移動されるので、複数の接続点を有するような複雑なオブジェクトを入力装置自身の動きに応じて動作させることができる。したがって、入力装置の動きによって複数の部分からなるオブジェクトを操作するという、今までにない操作をプレイヤに提供することができる。
【００１７】
第２の発明によれば、すでに位置が決まっている接続点に基づいて、まだ位置が決まっていない接続点の位置を順次算出するので、各接続点の移動後の位置を容易に算出することができる。
【００１８】
第３の発明によれば、入力装置の動きに応じて隣接接続点の基準点に対する向きを変更することができる。さらに、第７の発明によれば、入力装置を動かす方向に応じて上記向きが基準に対して変化する方向が決まる。これによれば、例えば、入力装置を左右方向に振る操作によって、オブジェクトが身体を所定方向に振り動かすような動作を行わせることができる。
【００１９】
第４の発明によれば、加速度センサを用いることによって、入力装置の動きを容易に算出することができる。さらに、第５の発明によれば、加速度センサによって検出された加速度と、当該加速度を平滑化した値との差分を算出することによって、入力装置の動きをより正確に算出することができる。また、第６の発明によれば、簡易な構成で入力装置の動きを算出することができる。
【００２０】
第８の発明によれば、接続点移動ステップにおける各接続点の移動量に基づいてオブジェクトが移動する。ここで、向き算出ステップにおいて算出される向きに応じてオブジェクトが移動する場合には、入力操作によって決められるオブジェクトの向きに基づいて、オブジェクトの動作（各接続点の移動）およびオブジェクトの移動の両方が決められることになる。そのため、入力操作に応じてオブジェクトが動作するとともに、入力操作に応じてオブジェクトが移動することとなる。ここで、オブジェクトは、オブジェクトが動作した結果に基づいて移動する方がより自然であるが、上記の場合、オブジェクトが動作した結果、オブジェクトが移動することをリアルに表現することができない。これに対して、第８の発明によれば、入力装置の動きが各接続点の移動量（オブジェクトの動作）に反映された後、当該移動量がオブジェクトの移動に反映されるので、「オブジェクトが動作した結果、オブジェクトが移動する」ことをよりリアルに表現することができる。
【００２１】
第９の発明によれば、オブジェクトの方向は、端の接続点と当該端の接続点に接続される接続点とを結ぶ線の方向に基づいて決められる。これによれば、入力操作に応じてオブジェクトの動作が決められ、オブジェクトの動作に応じてオブジェクトの方向が変化されるので、オブジェクトが動作した（接続点が移動した）結果、オブジェクトの方向が変化する様子をリアルに表現することができる。
【発明を実施するための最良の形態】
【００２２】
（ゲームシステムの全体構成）
図１を参照して、本発明の一実施形態に係る情報処理装置の一例として、ゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置３、光ディスク４、コントローラ５、およびマーカ部６を含む。本システムは、コントローラ５を用いたゲーム操作に基づいてゲーム装置３でゲーム処理を実行するものである。
【００２３】
本発明に係る情報処理装置の一例であるゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置３において実行されるためのゲームプログラムが記憶されている。ゲーム装置３の前面には光ディスク４の挿入口が設けられている。ゲーム装置３は、挿入口に挿入された光ディスク４に記憶されているゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００２４】
ゲーム装置３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２は、ゲーム装置３において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部６が設置される。マーカ部６は、その両端に２つのマーカ６Ｒおよび６Ｌを備えている。マーカ６Ｒ（マーカ６Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部６はゲーム装置３に接続されており、ゲーム装置３はマーカ部６が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００２５】
コントローラ５は、自機に対して行われた操作の内容を示す操作データをゲーム装置３に与える入力装置である。コントローラ５とゲーム装置３とは無線通信によって接続される。本実施形態では、コントローラ５とゲーム装置３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ５とゲーム装置３とは有線で接続されてもよい。
【００２６】
（ゲーム装置３の内部構成）
次に、図２を参照して、ゲーム装置３の内部構成について説明する。図２は、ゲーム装置３の構成を示すブロック図である。ゲーム装置３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００２７】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩの内部構成について後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００２８】
また、システムＬＳＩ１１には、入出力プロセッサ１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００２９】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ１１ｄは、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００３０】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００３１】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００３２】
入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、およびメモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００３３】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００３４】
また、入出力プロセッサ１１ａは、コントローラ５から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００３５】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０およびメモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０やメモリカード用コネクタ２１を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
【００３６】
ゲーム装置３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００３７】
（コントローラ５の構成）
次に、図３〜図６を参照して、コントローラ５について説明する。図３および図４は、コントローラ５の外観構成を示す斜視図である。図３は、コントローラ５の上側後方から見た斜視図であり、図４は、コントローラ５を下側前方から見た斜視図である。
【００３８】
図３および図４において、コントローラ５は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ５に設けられたボタンを押下すること、および、コントローラ５自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
【００３９】
ハウジング３１には、複数の操作ボタンが設けられる。図３に示すように、ハウジング３１の上面には、十字ボタン３２ａ、１番ボタン３２ｂ、２番ボタン３２ｃ、Ａボタン３２ｄ、マイナスボタン３２ｅ、ホームボタン３２ｆ、プラスボタン３２ｇ、および電源ボタン３２ｈが設けられる。本明細書では、これらのボタン３２ａ〜３２ｈが設けられるハウジング３１の上面を「ボタン面」と呼ぶことがある。一方、図４に示すように、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＢボタン３２ｉが設けられる。これらの各操作ボタン３２ａ〜３２ｉには、ゲーム装置３が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン３２ｈは遠隔からゲーム装置３本体の電源をオン／オフするためのものである。ホームボタン３２ｆおよび電源ボタン３２ｈは、その上面がハウジング３１の上面に埋没している。これによって、プレイヤがホームボタン３２ｆまたは電源ボタン３２ｈを誤って押下することを防止することができる。
【００４０】
ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、コントローラ５に他の機器（例えば、他のコントローラ）を接続するために利用される。
【００４１】
ハウジング３１上面の後方には複数（図３では４つ）のＬＥＤ３４ａ〜３４ｄが設けられる。ここで、コントローラ５には、他のメインコントローラと区別するためにコントローラ種別（番号）が付与される。各ＬＥＤ３４ａ〜３４ｄは、コントローラ５に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ５の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ５を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のＬＥＤ３４ａ〜３４ｄのいずれか１つが点灯する。
【００４２】
また、コントローラ５は撮像情報演算部３５（図５Ｂ）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射面３５ａが設けられる。光入射面３５ａは、マーカ６Ｒおよび６Ｌからの赤外光を少なくとも透過する材質で構成される。
【００４３】
ハウジング３１上面における１番ボタン３２ｂとホームボタン３２ｆとの間には、コントローラ５に内蔵されるスピーカ４９（図５Ａ）からの音を外部に放出するための音抜き孔３１ａが形成されている。
【００４４】
次に、図５Ａおよび図５Ｂを参照して、コントローラ５の内部構造について説明する。図５Ａおよび図５Ｂは、コントローラ５の内部構造を示す図である。なお、図５Ａは、コントローラ５の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂは、コントローラ５の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図５Ｂに示す斜視図は、図５Ａに示す基板３０を裏面から見た斜視図となっている。
【００４５】
図５Ａにおいて、ハウジング３１の内部には基板３０が固設されており、当該基板３０の上主面上に各操作ボタン３２ａ〜３２ｈ、各ＬＥＤ３４ａ〜３４ｄ、加速度センサ３７、アンテナ４５、およびスピーカ４９等が設けられる。これらは、基板３０等に形成された配線（図示せず）によってマイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）４２（図５Ｂ参照）に接続される。本実施形態では、加速度センサ３７は、Ｘ軸方向に関してコントローラ５の中心からずれた位置に配置されている。これによって、コントローラ５をＺ軸回りに回転させたときのコントローラ５の動きが算出しやすくなる。また、加速度センサ３７は、長手方向（Ｚ軸方向）に関してコントローラ５の中心よりも前方に配置されている。また、無線モジュール４４（図６）およびアンテナ４５によって、コントローラ５がワイヤレスコントローラとして機能する。
【００４６】
一方、図５Ｂにおいて、基板３０の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ５の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を備えている。これらの部材３８〜４１はそれぞれ基板３０の下主面に取り付けられる。
【００４７】
さらに、基板３０の下主面上には、上記マイコン４２およびバイブレータ４８が設けられている。バイブレータ４８は、例えば振動モータやソレノイドであり、基板３０等に形成された配線によってマイコン４２と接続される。マイコン４２の指示によりバイブレータ４８が作動することによってコントローラ５に振動が発生する。これによって、コントローラ５を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ４８は、ハウジング３１のやや前方寄りに配置される。つまり、バイブレータ４８がコントローラ５の中心よりも端側に配置することによって、バイブレータ４８の振動によりコントローラ５全体を大きく振動させることができる。また、コネクタ３３は、基板３０の下主面上の後端縁に取り付けられる。なお、図５Ａおよび図５Ｂに示す他、コントローラ５は、マイコン４２の基本クロックを生成する水晶振動子、スピーカ４９に音声信号を出力するアンプ等を備えている。
【００４８】
なお、図３〜図５Ａ、図５Ｂに示したコントローラ５の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はＺ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ５における撮像情報演算部３５の位置（撮像情報演算部３５の光入射面３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【００４９】
図６は、コントローラ５の構成を示すブロック図である。コントローラ５は、操作部３２（各操作ボタン３２ａ〜３２ｉ）、コネクタ３３、撮像情報演算部３５、通信部３６、および加速度センサ３７を備えている。コントローラ５は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置３へ送信するものである。
【００５０】
操作部３２は、上述した各操作ボタン３２ａ〜３２ｉを含み、各操作ボタン３２ａ〜３２ｉに対する入力状態（各操作ボタン３２ａ〜３２ｉが押下されたか否か）を示す操作ボタンデータを通信部３６のマイコン４２へ出力する。
【００５１】
撮像情報演算部３５は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ５の動きでも追跡して解析することができる。
【００５２】
撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ５の前方から入射する光から赤外線のみを通過させる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ入射させる。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤセンサのような固体撮像素子であり、レンズ３９が集光した赤外線を受光して画像信号を出力する。ここで、テレビ２の表示画面近傍に配置されるマーカ部６のマーカ６Ｒおよび６Ｌは、テレビ２の前方に向かって赤外光を出力する赤外ＬＥＤで構成される。したがって、赤外線フィルタ３８を設けることによって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを受光して画像データを生成するので、マーカ６Ｒおよび６Ｌの画像をより正確に撮像することができる。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ６Ｒおよび６Ｌ）の位置を算出する。画像処理回路４１は、算出された位置を示す座標を通信部３６のマイコン４２へ出力する。この座標のデータは、マイコン４２によって操作データとしてゲーム装置３に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ５自体の向き（姿勢）や位置に対応して変化するので、ゲーム装置３はこのマーカ座標を用いてコントローラ５の向きや位置を算出することができる。
【００５３】
加速度センサ３７は、コントローラ５の加速度（重力加速度を含む）を検出する、すなわち、コントローラ５に加わる力（重力を含む）を検出する。加速度センサ３７は、当該加速度センサ３７の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度（直線加速度）の値を検出する。例えば、２軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、３軸または２軸の加速度センサは、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能である種類のものでもよい。なお、加速度センサ３７は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
【００５４】
本実施形態では、加速度センサ３７は、コントローラ５を基準とした上下方向（図３に示すＹ軸方向）、左右方向（図３に示すＸ軸方向）および前後方向（図３に示すＺ軸方向）の３軸方向に関してそれぞれ直線加速度を検出する。加速度センサ３７は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ３７からの出力は３軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ５を基準に設定されるＸＹＺ座標系における３次元のベクトル（ＡＸ，ＡＹ，ＡＺ）として表される。以下では、加速度センサ３７によって検出される３軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【００５５】
加速度センサ３７が検出した加速度を示すデータ（加速度データ）は、通信部３６へ出力される。なお、加速度センサ３７が検出した加速度は、コントローラ５自体の向き（姿勢）や動きに対応して変化するので、ゲーム装置３は加速度データを用いてコントローラ５の向きや動きを算出することができる。本実施形態では、ゲーム装置３は、加速度データに基づいてコントローラ５の姿勢を判断する。
【００５６】
加速度センサ３７が検出した加速度（加速度ベクトル）を示すデータ（加速度データ）は、通信部３６へ出力される。本実施形態において、加速度センサ３７は、コントローラ５の姿勢を判断するためのデータを出力するセンサとして用いられる。
【００５７】
なお、加速度センサ３７から出力される加速度の信号に基づいて、ゲーム装置３のプロセッサ（例えばＣＰＵ１０）またはコントローラ５のプロセッサ（例えばマイコン４２）等のコンピュータが処理を行うことによって、コントローラ５に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ３７を搭載するコントローラ５が静止状態であることを前提としてコンピュータ側の処理が実行される場合（すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合）、コントローラ５が現実に静止状態であれば、検出された加速度に基づいてコントローラ５の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ３７の検出軸が鉛直下方向を向いている状態を基準としたとき、１Ｇ（重力加速度）がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかも知ることができる。また、多軸の加速度センサ３７の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ３７からの出力に基づいてコントローラ５の傾き角度を算出してもよいし、当該傾き角度を算出せずに、コントローラ５の傾き方向を算出するようにしてもよい。このように、加速度センサ３７をプロセッサと組み合わせて用いることによって、コントローラ５の傾きまたは姿勢を判定することができる。
【００５８】
一方、コントローラ５が動的な状態（コントローラ５が動かされている状態）であることを前提とする場合には、加速度センサ３７は重力加速度に加えてコントローラ５の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ５の動き方向を知ることができる。また、コントローラ５が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ５の傾きを知ることが可能である。なお、他の実施例では、加速度センサ３７は、内蔵の加速度検出手段で検出された加速度信号をマイコン４２に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ３７が静的な加速度（例えば、重力加速度）を検出するために用いられる場合、加速度信号を傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００５９】
なお、本実施形態では、コントローラの動きに応じて変化する値を出力するセンサとして、例えば静電容量式の加速度センサを用いることとしたが、他の方式の加速度センサやジャイロセンサを用いるようにしてもよい。ただし、加速度センサは各軸に沿った直線方向の加速度をそれぞれ検出するものであるのに対して、ジャイロセンサは回転に伴う角速度を検出するものである。つまり、加速度センサに代えてジャイロセンサを採用する場合には、検出される信号の性質が異なるため、両者を簡単に置き換えることはできない。そこで、加速度センサの代わりにジャイロセンサを用いて姿勢を算出する場合には、例えば次のような変更を行う。具体的には、ゲーム装置３は、検出開始の状態において姿勢の値を初期化する。そして、当該ジャイロセンサから出力される角速度のデータを積分する。さらに、積分結果を用いて、初期化された姿勢の値からの姿勢の変化量を算出する。この場合、算出される姿勢は、角度で表されることになる。
【００６０】
なお、既に説明したように、加速度センサによって姿勢を算出する場合には、加速度ベクトルを用いて姿勢を算出する。したがって、算出される姿勢はベクトルで表すことが可能であり、初期化を行わずとも絶対的な方向を算出することが可能である点で、加速度センサを用いる場合とジャイロセンサを用いる場合とで異なる。また、姿勢として算出される値の性質についても上記のように角度であるかベクトルであるかの違いがあるので、加速度センサからジャイロセンサへの置き換えを行う際には当該姿勢のデータに対しても所定の変換を行う必要がある。
【００６１】
通信部３６は、マイコン４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理を行う際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータをゲーム装置３へ無線送信する無線モジュール４４を制御する。
【００６２】
操作部３２、撮像情報演算部３５、および加速度センサ３７からマイコン４２へ出力されたデータは、一時的にメモリ４３に格納される。これらのデータは、上記操作データとしてゲーム装置３へ送信される。すなわち、マイコン４２は、ゲーム装置３の無線コントローラモジュール１９への送信タイミングが到来すると、メモリ４３に格納されている操作データを無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ５から送信される。微弱電波信号はゲーム装置３側の無線コントローラモジュール１９で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。なお、通信部３６から無線コントローラモジュール１９への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は１／６０秒を単位として（１フレーム時間として）行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ５の通信部３６は、例えば１／２００秒に１回の割合で各操作データをゲーム装置３の無線コントローラモジュール１９へ出力する。
【００６３】
上記コントローラ５を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ５によって画面上の任意の位置を指示する操作、および、コントローラ５自体を動かす操作を行うことができる。図７は、コントローラ５を用いてゲーム操作を行うときの様子を示す図解図である。本実施形態では、プレイヤは、コントローラ５の上面（十字ボタン３２ａ等が設けられた面）を略鉛直上向きとした姿勢でコントローラ５を把持する。そして、図７に示すように、コントローラ５を左右方向（コントローラ５のＸ軸方向）に動かす（振る）ゲーム操作を行う。
【００６４】
（ゲーム処理の概要）
次に、図８および図９を参照して、ゲーム装置３において実行されるゲーム処理の概要を説明する。以下では、３次元の仮想空間（ゲーム空間）内に配置されたオブジェクトをコントローラ５の動きに応じて動作させる処理について主に説明する。本実施形態においてプレイヤによる操作対象となるオブジェクト（プレイヤオブジェクト）は、複数の部分からなる構成であり、具体的には、複数のジョイント（接続点）を有する構成である。つまり、本実施形態に係るゲーム装置３は、複数の部分によって構成されるプレイヤオブジェクトをコントローラ５を動かすゲーム操作に応じて動作させるものである。
【００６５】
図８は、本実施形態において操作対象となるプレイヤオブジェクトの構成を示す図である。本実施形態においては、操作対象のプレイヤオブジェクト５０は、図８に示すように、魚を模した外観のプレイヤオブジェクトである。プレイヤオブジェクト５０は、先頭から順に第１ジョイント５１、第２ジョイント５２、第３ジョイント５３、第４ジョイント５４、および第５ジョイント５５という５つのジョイントを有する。ジョイント同士は、ボーンによって接続される。本実施形態では、５つのジョイント５１〜５５は一列に接続されている。すなわち、第１ジョイント５１と第２ジョイント５２とは第１ボーン５６によって接続され、第２ジョイント５２と第３ジョイント５３とは第２ボーン５７によって接続され、第３ジョイント５３と第４ジョイント５４とは第３ボーン５８によって接続され、第４ジョイント５４と第５ジョイント５５とは第４ボーン５９によって接続される。本実施形態では、各ボーン５６〜５９の長さは一定である。また、プレイヤオブジェクト５０を構成するポリゴン（スキン）の頂点の位置は、各ジョイント５１〜５５の位置によって決められる。つまり、プレイヤオブジェクト５０の形状は、各ジョイント５１〜５５の位置関係によって決められる。
【００６６】
また、本実施形態では、図８に示すように、各ボーン５６〜５９が一直線に配置されるような各ジョイント５１〜５５の接続関係を基準の位置関係とする。詳細は後述するが、コントローラ５に対する入力が行われない状態が続いた場合、各ジョイント５１〜５５の位置関係は上記基準の位置関係に収束する。また、本実施形態では、プレイヤオブジェクト５０は３次元空間における所定の平面内において移動し、プレイヤオブジェクト５０の各ジョイント５１〜５５は当該平面内で移動するものとする。
【００６７】
なお、本実施形態では、プレイヤオブジェクトは、一列に並んで接続される５つのジョイントにより構成されるものとするが、プレイヤオブジェクトを構成するジョイントの数および接続関係はどのようなものであっても構わない。
【００６８】
図９は、コントローラ５に対して操作が加えられた時のプレイヤオブジェクトを示す図である。本実施形態においては、ゲーム装置３は、加速度センサ３７からの出力（加速度ベクトル）に基づいて、コントローラ５の動きを示す動き量を算出する。そして、当該動き量を用いてプレイヤオブジェクト５０の動作を制御する。なお、本実施形態では、ゲーム装置３は、コントローラ５のｘ軸方向に関する動き量を算出する。つまり、ゲーム装置３は、コントローラ５を左右に動かす動きの量を算出する。動き量の詳細な算出方法については後述する。
【００６９】
図９に示されるように、ゲーム装置３は、動き量に基づいて第１ボーン５６の向き、すなわち、第１ジョイント５１に対する第２ジョイント５２の向きを決定する。つまり、本実施形態では、コントローラ５の左右の動きに応じて第１ボーン５６の向きが変化する（図９に示す矢印参照）。また、プレイヤオブジェクト５０を基準として見た場合、第１ジョイント５１は入力の影響を受けずに固定されている。つまり、入力である動き量は第１ジョイント５１の位置に対して反映されない。
【００７０】
以下では、第１ジョイント５１のように、コントローラ５の入力の影響を受けずに位置が決定されるジョイントを「基準ジョイント」と呼ぶ。基準ジョイントは、ボーンの向きおよび他のジョイントの位置を決める基準となるジョイントである。本実施形態では、先頭のジョイントである第１ジョイント５１を基準ジョイントとするが、基準ジョイントは必ずしも先頭のジョイントである必要はない。また、以下では、第１ボーン５６のように、基準ジョイントに隣接するボーンを「隣接ボーン」と呼ぶ。隣接ボーンは、コントローラ５の入力によって向きが直接決められるボーンである。さらに、第２ジョイント５２のように、基準ジョイントに隣接するジョイントを「隣接ジョイント」と呼ぶ。隣接ジョイントは、コントローラ５の入力によって基準ボーンに対する向きが決められるジョイントである。
【００７１】
上記のようにコントローラ５の動きに応じて基準ボーン（第１ボーン５６）の向きが決められると、基準ボーンの向きに基づいて隣接ジョイントが移動され、さらに、隣接ジョイントの移動に応じて他のジョイントが移動される。具体的には、基準ボーンよりも後ろ側のジョイントの位置およびボーンの向きが、先頭側（基準ジョイントがある側）のジョイントの位置およびボーンの向きに基づいて決められる。すなわち、第１ボーン５６の向きが決まると、ゲーム装置３は、第１ジョイント５１の位置および第１ボーン５６の向きから第２ジョイント５２の位置を算出する。第２ジョイント５２の位置を算出すると、次に、ゲーム装置３は第２ボーン５７の向きを算出する。ここで、基準ジョイントを基準に第１ボーン５６よりも後側のボーン（第２〜第４ボーン５７〜５９）の向きは、当該ボーンよりも１つ基準ジョイント側にあるボーンの向きに近づくように決定される。換言すれば、ボーンの向きは、１つ基準ジョイント側に位置するボーンの向きに追従するように変化する。例えば、第２ボーン５７の向きは、第１ボーン５６の向きに近づくように、すなわち、第１ボーン５６と第２ボーン５７とが平行に近づくように決定される。
【００７２】
上記のように第２ジョイント５２の位置および第２ボーン５７の向きが決定された後、第３ジョイント５３から後側のジョイントおよびボーンについても、第２ジョイント５２および第２ボーン５７と同様にジョイントの位置およびボーンの向きが決定される。すなわち、ゲーム装置３はジョイントの位置とボーンの向きとを、後端のジョイントである第５ジョイント５５まで順に算出していく。第５ジョイント５５の位置が算出されたことによって、すべてのジョイントの位置が決定されたこととなり、プレイヤオブジェクト５０の姿勢（形状）が決められたこととなる。つまり、プレイヤオブジェクト５０を構成する各ポリゴンの頂点の位置が各ジョイント５１〜５５の位置を基準にして決められる。
【００７３】
以上より、本実施形態においては、コントローラ５を左右に動かす（振る）ことに応じて、プレイヤオブジェクト５０の前部分（第１ジョイント５１および第１ボーン５６）が左右に振られることとなる。そして、当該前部分から後側の部分については、前部分の振りに追従するように移動することとなる。したがって、本実施形態においては、魚を模したプレイヤオブジェクト５０を、コントローラ５の左右の動きに応じて身体を左右に振る（くねらす）ように動作させることができ、魚が泳いでいる動作をリアルに表現することができる。また、プレイヤは、コントローラ５を左右に動かすことによって魚に泳ぐ動作を行わせるという、今までにないゲーム操作を行うことができる。
【００７４】
また、本実施形態においては、ゲーム装置３は、プレイヤオブジェクト５０の姿勢が決定された後、ゲーム空間においてプレイヤオブジェクト５０を移動させる。詳細は後述するが、プレイヤオブジェクト５０の位置は、各ジョイントの移動量（速度）に基づいて算出される。したがって、本実施形態においては、プレイヤオブジェクト５０の移動に対してコントローラ５の入力（すなわち、動き量）が直接反映されるのではなく、コントローラ５の入力から決められる各ジョイントの速度が反映される。ここで、コントローラ５の入力が反映されるのはプレイヤオブジェクト５０の先端部分（頭の部分）であるので、プレイヤオブジェクト５０の移動に対してコントローラ５の入力を直接反映させるようにすると、頭の振りに応じて魚が移動するような表現になってしまい、魚が泳ぐ様子を自然に表現することができない。これに対して、本実施形態では、コントローラ５の入力が各ジョイントの位置を介して間接的にプレイヤオブジェクトの移動に反映されるので、身体の振りに応じて魚が移動するように表現することができ、魚が泳ぐ様子を自然に表現することができる。
【００７５】
また、本実施形態においては、ゲーム装置３は、プレイヤオブジェクト５０の姿勢が決定された後、ゲーム空間におけるプレイヤオブジェクト５０全体の向きを算出する。詳細は後述するが、プレイヤオブジェクト全体の向きは、後端のボーン（ここでは、第４ボーン５９）の向きによって決められる。ここで、コントローラ５の入力が反映されるのはプレイヤオブジェクト５０の先端部分であるので、コントローラ５の入力をプレイヤオブジェクト５０の向きに直接反映させるようにすると、頭の向きに応じて魚の向きが変化するような表現になってしまい、魚が泳ぐ様子を自然に表現することができない。これに対して、本実施形態では、コントローラ５の入力が各ジョイントの位置および各ボーンの向きを介して間接的にプレイヤオブジェクトの向きに反映されるので、身体の振りに応じて魚が向きを変えるように表現することができ、魚が泳ぐ様子を自然に表現することができる。
【００７６】
（ゲーム処理の詳細）
次に、ゲーム装置３において実行される処理の詳細について説明する。まず、ゲーム装置３における処理において用いられる主なデータについて図１０〜図１２を用いて説明する。図１０は、ゲーム装置３のメインメモリ（外部メインメモリ１２または内部メインメモリ１１ｅ）に記憶される主なデータを示す図である。図１０に示すように、ゲーム装置３の記憶装置には、ゲームプログラム６０、操作データ６１、およびゲーム処理用データ６３が記憶される。なお、メインメモリには、図１０に示すデータの他、ゲームに登場する各種オブジェクトの画像データや、オブジェクトの各種パラメータを示すデータ等、ゲーム処理に必要なデータが記憶される。
【００７７】
ゲームプログラム６０は、ゲーム装置３に電源が投入された後の適宜のタイミングで光ディスク４からその一部または全部が読み込まれてメインメモリに記憶される。ゲームプログラム６０には、コントローラ５の動きに応じてプレイヤオブジェクトを動作させるためのプログラムが含まれている。
【００７８】
操作データ６１は、コントローラ５からゲーム装置３へ送信されてくる操作データである。上述したように、コントローラ５からゲーム装置３へ１／２００秒に１回の割合で操作データが送信されるので、メインメモリに記憶される操作データはこの割合で更新される。メインメモリには、最新の（最後に取得された）操作データのみが記憶されればよい。
【００７９】
操作データ６１には、加速度データ６２が含まれる。加速度データ６２は、加速度センサ３７によって検出された加速度（加速度ベクトル）を示すデータである。ここでは、加速度データ６２は、図３に示すＸＹＺの３軸の方向に関する加速度を各成分とする３次元の加速度ベクトルＡ＝（ＡＸ，ＡＹ，ＡＺ）を示すデータである。また、操作データ６１には、加速度データ６２の他、各操作ボタン３２ａ〜３２ｉに対する入力状態を示す操作ボタンデータ、および、上記マーカ座標を示すマーカ座標データが含まれている。
【００８０】
ゲーム処理用データ６３は、後述するゲーム処理（図１３）において用いられるデータである。ゲーム処理用データ６３は、追従加速度データ６４、動きデータ６５、オブジェクト位置データ６６、オブジェクト方向データ６７、オブジェクト速度データ６８、オブジェクト推進力データ６９、現在ジョイント位置データ７０、前回ジョイント位置データ７１、ジョイント速度データ７２、ジョイント推進力データ７３、角度データ７４、角速度データ７５、および、ボーン方向データ７６を含む。
【００８１】
追従加速度データ６４は、追従加速度Ａｆの値を示すデータである。追従加速度Ａｆとは、加速度センサ３７によって検出された加速度ベクトルに追従して変化する加速度である。換言すれば、追従加速度は、加速度センサ３７によって逐次検出された加速度を平滑化した値である。追従加速度Ａｆの算出方法の詳細については後述する。本実施形態では、追従加速度Ａｆは、加速度ベクトルの各成分うちＸ軸成分の加速度ＡＸに追従して変化する加速度である。
【００８２】
動きデータ６５は、コントローラ５の動きを表す動き量Ｍの値を示すデータである。具体的には、動き量Ｍは、上記加速度ベクトルのＸ軸成分ＡＸから追従加速度Ａｆを引いた差として算出される（後述する式（２）参照）。
【００８３】
オブジェクト位置データ６６は、ゲーム空間におけるプレイヤオブジェクトの位置（オブジェクト位置）ＰＯＳの値を示す。また、オブジェクト位置ＰＯＳは、プレイヤオブジェクトの所定位置の、ゲーム空間における位置である。この所定位置は、例えば上記基準ジョイントである第１ジョイント５１の位置であってもよいし、プレイヤオブジェクトの中心位置であってもよい。
【００８４】
オブジェクト方向データ６７は、ゲーム空間におけるプレイヤオブジェクトの向きを表す２つのベクトルＦおよびＬの値をそれぞれ示す。前方向ベクトルＦはプレイヤオブジェクトの前方を向く単位ベクトルであり、左方向ベクトルＬはプレイヤオブジェクトの左方を向く単位ベクトルである。
【００８５】
オブジェクト速度データ６８は、プレイヤオブジェクトの速度（オブジェクト速度）ＶＥＬ、すなわち、位置ＰＯＳの単位時間（１フレーム時間）あたりの変化量の値を示す。詳細は後述するが、オブジェクト速度ＶＥＬは、後述するオブジェクト推進力ＰＯＷに基づいて算出される。本実施形態では、オブジェクト推進力ＰＯＷに基づいてオブジェクト速度ＶＥＬが算出され、当該速度ＶＥＬに基づいて新たなオブジェクト位置ＰＯＳが算出される。
【００８６】
オブジェクト推進力データ６９は、プレイヤオブジェクトの推進力（オブジェクト推進力）ＰＯＷの値を示すデータである。ここで、オブジェクト推進力ＰＯＷとは、オブジェクト速度ＶＥＬを算出するための変数であり、プレイヤオブジェクトの各ジョイントの推進量（後述するジョイント推進力ｐｏｗ［ｉ］）に基づいて算出される。
【００８７】
ここで、本実施形態では、プレイヤオブジェクトは、３次元のゲーム空間における所定の平面上において移動および回転を行うものとする。また、上記オブジェクト位置ＰＯＳ、前方向ベクトルＦ、左方向ベクトルＦ、オブジェクト速度ＶＥＬ、およびオブジェクト推進力ＰＯＷの各変数は、上記平面上における位置を表すための２次元のｘ’ｙ’座標系によって表されるものとする。一方、後述する、ジョイントおよびボーンに関する各変数（ジョイント位置ｐｏｓ、ジョイント速度ｖｅｌ、ジョイント推進力ｐｏｗ、水平方向ベクトルｈ、垂直方向ベクトルｖ）は、上記平面上においてプレイヤオブジェクトを基準に設定されるｘｙ座標系（図１１参照）によって表されるものとする。このｘｙ座標系は、プレイヤオブジェクトの所定位置（例えばオブジェクト位置ＰＯＳ）がｘｙ座標系の原点となるように設定される。また、ｘｙ座標系は、ｘ’ｙ’座標系においてプレイヤオブジェクトの方向に応じて回転するように設定される。例えば、ｘｙ座標系は、ｙ軸正方向がプレイヤオブジェクトの前方の向き、すなわち、ベクトルＦの向きとなるように設定される。
【００８８】
現在ジョイント位置データ７０は、プレイヤオブジェクトの各ジョイントの現在の位置の値をそれぞれ示すデータである。図１１は、プレイヤオブジェクトのジョイントおよびボーンに関する各変数を示す図である。本実施形態では、図１１に示すように、オブジェクトが有するジョイントをＮ個（本実施形態ではＮ＝５）としたときにおける、第ｉジョイント（ｉは０≦ｉ≦Ｎの整数）の位置を“ｐｏｓ［ｉ］”と表す。また、基準ジョイントである第１ジョイントの位置ｐｏｓ［０］は、上記ｘｙ座標系における固定値であり、予め定められた値に設定される。
【００８９】
前回ジョイント位置データ７１は、前回における上記各ジョイントの位置ｐｏｓ［ｉ］（ｉは０≦ｉ≦Ｎの整数）の値をそれぞれ示すデータであり、“ｐｏｓ’［ｉ］”と表す。ここでは、１フレーム時間毎に各ジョイントの位置が更新されるので、前回ジョイント位置データ７１は、１フレーム前における各ジョイントの位置ｐｏｓ［ｉ］の値をそれぞれ示す。
【００９０】
ジョイント速度データ７２は、上記各ジョイントの速度（移動量）ｖｅｌ［ｉ］（ｉは０≦ｉ≦Ｎの整数）の値をそれぞれ示すデータである。具体的には、ジョイントの速度ｖｅｌ［ｉ］は、現在の当該ジョイントの位置ｐｏｓ［ｉ］から前回の当該ジョイントの位置ｐｏｓ’［ｉ］を引いた差として算出される。
【００９１】
ジョイント推進力データ７３は、上記各ジョイントの移動により発生される推進力ｐｏｗ［ｉ］（ｉは０≦ｉ≦Ｎの整数）の値をそれぞれ示すデータである。ジョイントの推進力ｐｏｗ［ｉ］は、ジョイントの速度ｖｅｌ［ｉ］に基づいて算出される。また、ジョイントの推進力ｐｏｗ［ｉ］は、上記オブジェクト推進力ＰＯＷを算出するために用いられる。
【００９２】
角度データ７４は、プレイヤオブジェクトの各ボーンの向き（角度）ｄｅｇ［ｉ］（ｉは０≦ｉ≦Ｎ−１の整数）をそれぞれ示すデータである。図１１に示すように、第ｉボーンの角度ｄｅｇ［ｉ］（°）は、プレイヤオブジェクトを基準に決められる所定方向（ここでは、ｘｙ座標系におけるｙ軸負方向）と、第ｉジョイントから第（ｉ＋１）ジョイントへの方向とのなす角度として表される。ここでは、角度ｄｅｇ［ｉ］は、−１８０°≦ｄｅｇ［ｉ］＜１８０°の範囲で表されるものとし、ｙ軸負方向から右回りに進む側にボーンがある場合の角度を正とし、ｙ軸負方向から左回りに進む側にボーンがある場合の角度を負とする。したがって、プレイヤオブジェクトの後方から前方を見た場合にｙ軸に対して左側にボーンが曲がっている場合には、角度ｄｅｇ［ｉ］が正となり、ｙ軸に対して右側にボーンが曲がっている場合には、角度ｄｅｇ［ｉ］が負となる。
【００９３】
角速度データ７５は、上記各ボーンの向きの変化量（角速度）ｄｓ［ｉ］（ｉは０≦ｉ≦Ｎ−１の整数）をそれぞれ示すデータである。ボーンの角速度ｄｓ［ｉ］は、当該ボーンの前回の角度から新たな角度を算出するために用いられる。
【００９４】
ボーン方向データ７６は、プレイヤオブジェクトの各ボーンの向きを表す２つのベクトルｈ［ｉ］およびｖ［ｉ］の値をそれぞれ示す。図１２は、ボーンの向きを表す２つのベクトルを示す図である。図１２に示すように、水平方向ベクトルｈ［ｉ］は第ｉボーン８３の向きに水平な向きを向く単位ベクトルであり、垂直方向ベクトルｖ［ｉ］は第ｉボーン８３の向きに水平な向きを向く単位ベクトルである。より具体的には、水平方向ベクトルｈ［ｉ］は、第ｉ＋１ジョイント８２から第ｉジョイント８１への方向を向く。また、垂直方向ベクトルｖ［ｉ］は、水平方向ベクトルｈ［ｉ］を左回りに９０°回転させたベクトルである。
【００９５】
次に、ゲーム装置３において行われる処理の詳細を、図１３〜図１５を用いて説明する。図１３は、ゲーム装置３において実行される処理の流れを示すメインフローチャートである。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリに読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１３に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
【００９６】
まず、ステップＳ１において、ゲームに関する初期化処理が実行される。具体的には、この初期化処理においては、仮想の３次元ゲーム空間が構築され、プレイヤオブジェクトや他のオブジェクトがゲーム空間の初期位置に配置される処理等が行われる。したがって、オブジェクト位置データ６６として上記初期位置を示すデータがメインメモリに記憶され、オブジェクト方向データ６７として所定の初期方向を示すデータがメインメモリに記憶される。なお、ここではプレイヤオブジェクトは初期状態では静止しているものとし、そのため、オブジェクト速度データ６８としては“（０，０）”を示すデータがメインメモリに記憶される。なお、ステップＳ１の初期化処理においては、上記処理の他、ゲーム空間の画像を生成するための仮想カメラの位置および向きが予め定められた初期状態に設定される等の処理が行われる。
【００９７】
続くステップＳ２において、以降のゲーム処理において用いられる変数の各値が初期化される。すなわち、ＣＰＵ１０は、追従加速度データ６４、動きデータ６５、現在ジョイント位置データ７０、ジョイント速度データ７２、ジョイント推進力データ７３、角度データ７４、および角速度データ７５の内容を次のように設定してメインメモリに記憶する。すなわち、追従加速度データ６４の内容は、追従加速度Ａｆ＝０を示すように設定される。動きデータ６５の内容は、動き量Ｍ＝０を示すように設定される。現在ジョイント位置データ７０の内容は、各ジョイント位置ｐｏｓ［ｉ］が全て“（０，０）”を示すように設定される。ジョイント速度データ７２の内容は、各ジョイント速度ｖｅｌ［ｉ］が全て“（０，０）”を示すように設定される。ジョイント推進力データ７３の内容は、各ジョイント推進力ｐｏｗ［ｉ］が全て“（０，０）”を示すように設定される。角度データ７４の内容は、各ボーンの角度ｄｅｇ［ｉ］が全て“０”を示すように設定される。角速度データ７５の内容は、各ボーンの角速度ｄｓ［ｉ］が全て“０”を示すように設定される。
【００９８】
上記ステップＳ２の後、ステップＳ３〜Ｓ９の処理ループが、ゲームが実行される間繰り返し実行される。なお、１回の当該処理ループは、１フレーム時間（例えば１／６０秒）に１回の割合で実行される。
【００９９】
ステップＳ３において、ＣＰＵ１０は操作データを取得する。すなわち、コントローラ５から送信されてくる操作データが無線コントローラモジュール１９を介して受信され、操作データに含まれる加速度データがメインメモリに記憶されるので、ＣＰＵ１０はメインメモリから加速度データ６２を読み出す。ステップＳ３〜Ｓ９の処理ループにおいて上記ステップＳ３が繰り返し実行されることによって、コントローラ５の動きに応じて変化する値（加速度ベクトル）が繰り返し取得されることとなる。
【０１００】
続くステップＳ４において、ＣＰＵ１０は、加速度ベクトルＡに基づいて追従加速度Ａｆを算出する。本実施形態では、ＣＰＵ１０は、追従加速度ベクトルＡｆは、ステップＳ３で取得された加速度データ６２により示される加速度ベクトルのＸ軸成分ＡＸと、前回の追従加速度Ａｆ’とを用いて算出される。なお、前回の追従加速度Ａｆ’は、ステップＳ４の実行直前の時点でメインメモリに記憶されている追従加速度データ６４により示される。具体的には、追従加速度Ａｆは次式（１）に従って算出される。
Ａｆ＝Ａｆ’＋（ＡＸ−Ａｆ’）×Ｋ１  …（１）
上式（１）において、定数Ｋ１の値は０＜Ｋ１＜１の範囲で予め定められ、ここでは、定数Ｋ１は例えばＫ１＝０．０３に設定される。ステップＳ４において算出された追従加速度Ａｆを示すデータは、追従加速度データ６４としてメインメモリに記憶される。
【０１０１】
続くステップＳ５において、ＣＰＵ１０は、追従加速度Ａｆに基づいて動き量Ｍを算出する。動き量Ｍは、メインメモリに記憶されている加速度データ６２および追従加速度データ６４を用いて算出される。具体的には、動き量Ｍは次式（２）に従って算出される。
Ｍ＝ＡＸ−Ａｆ  …（２）
ステップＳ５において算出された動き量Ｍを示すデータは、動きデータ６５としてメインメモリに記憶される。
【０１０２】
以上のように、本実施形態では、加速度センサ３７によって検出される加速度ベクトルの値をそのまま用いるのではなく、検出される加速度値から、当該加速度値に追従して変化する追従加速度の値を減算した結果である動き量Ｍを入力として用いることとした。ここで、他の実施形態においては、動き量Ｍに代えて、検出される加速度の値をそのまま入力として用いるようにしてもよい。
【０１０３】
ここで、加速度センサ３７によって検出される加速度には、重力に起因する成分（重力加速度の成分）と、コントローラ５が動かされたことによる慣性力に起因する成分とが含まれている。本実施形態のように、コントローラ５の傾きがほぼ変わらない状態でコントローラ５が振り動かされて使用される態様においては、重力加速度の成分は急激には変化しないと考えられる一方、慣性力に起因する成分は急激に変化すると考えられる。追従加速度は、検出される加速度を平滑化することによって高周波成分（急激に変化する成分）を除去したものであるので、上記２つの成分のうちの重力加速度の成分に相当すると考えられる。したがって、検出された加速度から追従加速度を減算することによって、検出される加速度に含まれる２つの成分から、慣性力に起因する成分、すなわち、コントローラ５の動きに起因する成分を抽出することができる。したがって、本実施形態のように動き量Ｍを用いることによって、検出される加速度をそのまま用いる場合に比べてコントローラ５の動きを正確に反映することができ、コントローラ５を動かす操作をオブジェクトの動作に正確に反映させることができる。
【０１０４】
なお、本実施形態では、コントローラ５がボタン面を略鉛直上向きとした状態で把持されることを前提とした上で、コントローラ５の水平方向に関する動きを算出するものである。そのため、加速度ベクトルのＸ軸成分のみを用いて動き量Ｍを算出するようにした。ここで、コントローラ５がＺ軸周りに回転された状態で把持される（例えば、ボタン面が水平方向を向いた状態で把持される）ことを想定する場合には、コントローラ５の水平方向に関する動きを算出するようにしてもよい。具体的には、上記ステップＳ４において、ＣＰＵ１０は、加速度ベクトルのＸ軸成分およびＹ軸成分について追従加速度を算出する。そして、上記ステップＳ５において、Ｘ軸成分およびＹ軸成分についてそれぞれ動き量を算出し、Ｘ軸成分の動き量とＹ軸成分の動き量とを各成分とする２次元ベクトルを算出する。さらに、ＣＰＵ１０は、Ｙ軸負方向と重力方向とのなす角度を算出し、当該角度だけ上記２次元ベクトルを回転させる変換を行う。なお、重力方向は、Ｘ軸成分の追従加速度とＹ軸成分の追従加速度とを各成分とする追従加速度ベクトルにより示されるので、上記角度は、Ｙ軸負方向と追従加速度ベクトルとのなす角度として算出することができる。上記変換後の２次元ベクトルのＸ軸成分が、コントローラ５の水平方向の動きを表すことになるので、ＣＰＵ１０は、本実施形態における動き量に代えて当該Ｘ軸成分の値を用いる。これによって、コントローラ５がＺ軸周りに回転された状態で把持される場合であっても、水平方向の動きを算出することができる。
【０１０５】
ステップＳ６において、ＣＰＵ１０は、動作制御処理を実行する。動作制御処理は、コントローラ５の動き（動き量Ｍ）に応じてプレイヤオブジェクトを動作させるための処理である。以下、図１４を参照して、動作制御処理の詳細を説明する。
【０１０６】
図１４は、図１３に示す動作制御処理（ステップＳ６）の流れを示すフローチャートである。動作制御処理においては、まずステップＳ１１において、ＣＰＵ１０は、基準ジョイントに接続される隣接ボーン（本実施形態では第１ボーン５６）の向きを算出する。前述したように、隣接ボーンの向きｄｅｇ［０］は、コントローラ５の入力である動き量Ｍに基づいて算出される。なお、動き量Ｍは、動きデータ６５としてメインメモリに記憶されている。具体的には、ＣＰＵ１０は、次式（３）に従って隣接ボーンの向きｄｅｇ［０］を算出する。
ｄｅｇ［０］＝Ｍ×Ｓ１  …（３）
上式（３）において、定数Ｓ１は予め定められ、ここでは、定数Ｓ１は例えばＳ１＝８．６に設定される。上記ステップＳ１１においては、メインメモリに記憶されている角度データ７４のうち、隣接ボーンの角度ｄｅｇ［０］を示すデータが、ステップＳ１１で新たに算出された値に更新される。
【０１０７】
上式（３）のように、本実施形態においては、隣接ボーンの向きｄｅｇ［０］は動き量Ｍに比例する大きさとなる。したがって、本実施形態では、隣接ボーンの向きが基準の向き（ｄｅｇ［０］＝０°の向き）に対していずれの側にあるか（換言すれば、ｄｅｇ［０］が正であるか負であるか）は、コントローラ５が左方向に動かされているか右方向に動かされているか（換言すれば、動き量Ｍが正であるか負であるか）によって決まる。これによって、コントローラ５を左右に動かす（振る）ことに応じて、隣接ボーンが左右に動くことになる。
【０１０８】
続くステップＳ１２において、ＣＰＵ１０は、カウンタｎの値をｎ＝１に設定する。カウンタｎの値を示すデータはメインメモリに記憶される。ｎは、処理対象となるジョイントまたはボーンの番号を示す変数である。
【０１０９】
上記ステップＳ１２の後、ステップＳ１３〜Ｓ２０の処理ループが繰り返し実行される。ステップＳ１３〜Ｓ２０の処理ループにおいては、基準ジョイントを基準に隣接ボーン（第１ボーン５６）よりも後側にあるジョイントの位置およびボーンの向きが算出される。
【０１１０】
以下に説明するステップＳ１３〜Ｓ１６においては、基準ジョイント以外の各ジョイントの位置が算出されるとともに、当該各ジョイントの速度および推進力が算出される。ここで、ステップＳ１３〜Ｓ１６において位置、速度、および推進力が算出される対象となるジョイントを処理対象ジョイントと呼ぶ。処理対象ジョイントは、カウンタｎの値によって指定されるジョイント、すなわち、第ｎジョイントである。
【０１１１】
ステップＳ１３において、ＣＰＵ１０は、処理対象ジョイントに接続され、処理対象ジョイントよりも１つ基準ジョイント側にあるボーン、すなわち、第（ｎ−１）ボーンの方向を示す２つのベクトルｈ［ｎ−１］およびｖ［ｎ−１］を算出する。これら２つのベクトルｈ［ｎ−１］およびｖ［ｎ−１］は、第（ｎ−１）ボーンの角度ｄｅｇ［ｎ−１］に基づいて算出される。具体的には、第（ｎ−１）ボーンの水平方向ベクトルｈ［ｎ−１］（＝（ｈｘ［ｎ−１］，ｈｙ［ｎ−１］））および垂直方向ベクトルｖ［ｎ−１］（＝（ｖｘ［ｎ−１］，ｖｙ［ｎ−１］））は、次式（４）に従って算出される。
ｈｘ［ｎ−１］＝ｓｉｎ（ｄｅｇ［ｎ−１］）
ｈｙ［ｎ−１］＝ｃｏｓ（ｄｅｇ［ｎ−１］）
ｖｘ［ｎ−１］＝−ｃｏｓ（ｄｅｇ［ｎ−１］）
ｖｙ［ｎ−１］＝ｓｉｎ（ｄｅｇ［ｎ−１］）  …（４）
上記ステップＳ１３においては、メインメモリに記憶されているボーン方向データ７６のうち、第（ｎ−１）ボーンの水平方向ベクトルおよび垂直方向ベクトルを示すデータが、ステップＳ１３で新たに算出された値に更新される。
【０１１２】
ステップＳ１４において、ＣＰＵ１０は、処理対象ジョイントの位置を算出する。処理対象ジョイントの位置ｐｏｓ［ｎ］は、第（ｎ−１）ボーンの水平方向ベクトルｈ［ｎ−１］および垂直方向ベクトルｖ［ｎ−１］と、第（ｎ−１）ジョイントの位置ｐｏｓ［ｎ−１］とに基づいて算出される。具体的には、ＣＰＵ１０は、メインメモリに記憶されている現在ジョイント位置データ７０およびボーン方向データ７６を読み出し、次式（５）に従って処理対象ジョイントの位置ｐｏｓ［ｎ］（＝（ｐｏｓｘ［ｎ］，ｐｏｓｙ［ｎ］））を算出する。
ｐｏｓｘ［ｎ］＝ｐｏｓｘ［ｎ−１］−ｈｘ×Ｌ
ｐｏｓｙ［ｎ］＝ｐｏｓｙ［ｎ−１］−ｈｙ×Ｌ  …（５）
上式（５）において、定数Ｌは、ボーンの長さを示し、予め定められる。ここでは、定数Ｌは例えばＬ＝１０に設定される。上記ステップＳ１４においては、メインメモリに記憶されている現在ジョイント位置データ７０のうち、第ｎジョイントの位置を示すデータが、ステップＳ１４で新たに算出された値に更新される。また、更新前の第ｎジョイントの位置を示すデータは、メインメモリに記憶されている前回ジョイント位置データ７１のうちの第ｎジョイントの位置を示すデータとしてメインメモリに記憶される。
【０１１３】
ステップＳ１５において、ＣＰＵ１０は、処理対象ジョイントの速度ｖｅｌ［ｎ］を算出する。この速度ｖｅｌ［ｎ］は、現在の処理対象ジョイントの位置ｐｏｓ［ｎ］と、１フレーム前の処理対象ジョイントの位置ｐｏｓ’［ｎ］とに基づいて算出される。具体的には、ＣＰＵ１０は、メインメモリに記憶されている現在ジョイント位置データ７０および前回ジョイント位置データ７１を読み出し、次式（６）に従って処理対象ジョイントの速度ｖｅｌ［ｎ］（＝（ｖｅｌｘ［ｎ］，ｖｅｌｙ［ｎ］））を算出する。
ｖｅｌｘ［ｎ］＝ｐｏｓｘ［ｎ］−ｐｏｓｘ’［ｎ］
ｖｅｌｙ［ｎ］＝ｐｏｓｙ［ｎ］−ｐｏｓｙ’［ｎ］  …（６）
上式（６）において、変数ｐｏｓｘ’［ｎ］は前回における第ｎジョイントの位置のｘ座標値であり、変数ｐｏｓｙ’［ｎ］は前回における第ｎジョイントの位置のｙ座標値である。上記ステップＳ１５においては、メインメモリに記憶されているジョイント速度データ７２のうち、第ｎジョイントの速度を示すデータが、ステップＳ１５で新たに算出された値に更新される。
【０１１４】
ステップＳ１６において、ＣＰＵ１０は、処理対象ジョイントの速度ｖｅｌ［ｎ］に基づいて処理対象ジョイントによる推進力ｐｏｗ［ｎ］を算出する。具体的には、ＣＰＵ１０は、メインメモリに記憶されているジョイント速度データ７２を読み出し、次式（７）に従って処理対象ジョイントの推進力ｐｏｗ［ｎ］（＝（ｐｏｗｘ［ｎ］，ｐｏｗｙ［ｎ］））を算出する。
ｐｏｗｘ［ｎ］＝ｖｘ［ｎ］×（−ｖｘ［ｎ］×ｖｅｌｘ［ｎ］−ｖｙ［ｎ］×ｖｅｌｙ［ｎ］）
ｐｏｗｙ［ｎ］＝ｖｙ［ｎ］×（−ｖｘ［ｎ］×ｖｅｌｘ［ｎ］−ｖｙ［ｎ］×ｖｅｌｙ［ｎ］）  …（７）
上記ステップＳ１６においては、メインメモリに記憶されているジョイント推進力データ７３のうち、第ｎジョイントの推進力を示すデータが、ステップＳ１６で新たに算出された値に更新される。
【０１１５】
上式（７）から明らかなように、ジョイント推進力ｐｏｗ［ｎ］は、処理対象ジョイントの速度ｖｅｌ［ｎ］の各成分のうち、垂直方向ベクトルｖにより示される方向の逆方向の成分の大きさとして算出される。ここで、ジョイント推進力の向きがジョイント速度の逆方向を向くようにしているのは、本実施形態のように水中を泳ぐ魚の動作を表現する場合には、ジョイントの移動方向の逆方向に推進力が加わり、ジョイントの移動方向の逆方向にオブジェクトが移動することが自然だからである。なお、他の実施形態においては、ジョイント推進力は、ジョイント速度に基づいて算出されればよく、例えば、ジョイント速度に所定の定数を乗算したものとしてもよい。
【０１１６】
ステップＳ１７において、ＣＰＵ１０は、プレイヤオブジェクトの全てのジョイントについてステップＳ１３〜Ｓ１６の処理を行ったか否かを判定する。この判定は、カウンタｎの値がジョイントの数Ｎに等しいか否かによって行うことができる。ステップＳ１７の判定結果が肯定である場合、ＣＰＵ１０は動作制御処理を終了する。一方、ステップＳ１７の判定結果が否定である場合、ステップＳ１８〜Ｓ２０の処理が実行される。
【０１１７】
ステップＳ１８およびＳ１９の処理は、最後に実行されたステップＳ１３〜Ｓ１６の処理において処理対象ジョイントであったジョイントの後側に接続されるボーンの向きを算出するための処理である。以下では、ステップＳ１８およびＳ１９の処理によって向きを算出する処理対象となるボーンを処理対象ボーンと呼ぶ。処理対象ボーンは、カウンタｎの値によって指定されるボーン、すなわち、第ｎボーンである。
【０１１８】
ステップＳ１８において、ＣＰＵ１０は、処理対象ボーンの角速度ｄｓ［ｎ］を算出する。この角速度ｄｓ［ｎ］は、１フレーム前に算出された処理対象ボーンの角度ｄｅｇ’［ｎ］および角速度ｄｓ’［ｎ］と、処理対象ボーンの１つ先端側に位置する第（ｎ−１）ボーンの角度ｄｅｇ［ｎ−１］とに基づいて算出される。具体的には、ＣＰＵ１０は、メインメモリに記憶されている角度データ７４および角速度データ７５を読み出して、次式（８）に従って処理対象ボーンの角速度ｄｓ［ｎ］を算出する。
ｄｓ［ｎ］＝ｄｓ’［ｎ］×Ｄ−（ｄｅｇ［ｎ］−ｄｅｇ［ｎ−１］）×Ｋ２  …（８）
上式（８）において、定数Ｄは０＜Ｄ＜１の範囲で予め定められ、ここでは、定数Ｄは例えばＤ＝０．９に設定される。また、定数Ｋ２は０＜Ｋ２＜１の範囲で予め定められ、ここでは、定数Ｋ２は例えばＫ２＝０．０２に設定される。上記ステップＳ１８においては、メインメモリに記憶されている角速度データ７５のうち、第ｎボーンの角速度を示すデータが、ステップＳ１８で新たに算出された値に更新される。
【０１１９】
上式（８）から明らかなように、ステップＳ１８では、前回における角速度ｄｓ’［ｎ］を減衰させるとともに、処理対象ボーンの角度が、当該処理対象ボーンよりも１つ先端側のボーンの角度に近づくように、新たな角速度ｄｓ［ｎ］が算出される。したがって、プレイヤオブジェクトの各ボーンは、１つ先端側のボーンの動きに追従するように動作し、先端側のボーンが停止した状態が続けばその後側のボーンはある時間が経過した時点で停止することとなる。つまり、コントローラ５に対する入力が行われずに隣接ボーン（先端のボーン）が停止した状態が続けば、各ボーンおよび各ジョイントの位置関係は上述した基準の位置関係に収束することとなる。なお、基準の位置関係に収束するまでの時間は、上記定数Ｄおよび上記定数Ｋ２の大きさによって変化する。
【０１２０】
ステップＳ１９において、ＣＰＵ１０は、処理対象ボーンの角速度ｄｓ［ｎ］に基づいて処理対象ボーンの向き（角度）ｄｅｇ［ｎ］を算出する。具体的には、ＣＰＵ１０は、メインメモリに記憶されている角度データ７４および角速度データ７５を読み出して、次式（９）に従って処理対象ボーンの角度ｄｅｇ［ｎ］を算出する。
ｄｅｇ［ｎ］＝ｄｅｇ’［ｎ］＋ｄｓ［ｎ］  …（９）
上式（９）において、変数ｄｅｇ’［ｎ］は式（８）と同様、１フレーム前に算出された処理対象ボーンの角度であり、ステップＳ１９の時点で角度データ７４としてメインメモリに記憶されている。上記ステップＳ１９においては、メインメモリに記憶されている角度データ７４のうち、第ｎボーンの角度を示すデータが、ステップＳ１９で新たに算出された値に更新される。
【０１２１】
ステップＳ２０において、ＣＰＵ１０は、カウンタｎの値をインクリメントする（１増加する）。ステップＳ２０の後、上記ステップＳ１３〜Ｓ２０の処理ループが再度実行される。これによって、次に実行されるステップＳ１３〜Ｓ１６の処理では、今回処理対象となったジョイントの１つ後端側のジョイントが処理対象となり、次に実行されるステップＳ１８およびＳ１９の処理では、今回処理対象となったボーンの１つ後端側のボーンが処理対象となる。したがって、ステップＳ１３〜Ｓ２０の処理ループが繰り返し実行されることにより、隣接ボーンより後端側のジョイントおよびボーンについて、ジョイントの位置およびボーンの向きが先端側から順に算出されることとなる。
【０１２２】
以上に説明した動作制御処理によれば、ステップＳ１１の処理によって、隣接ボーンの角度、すなわち、隣接ジョイントの基準ジョイントに対する向きが動き量に基づいて決定される。そして、続いて実行される１回目のステップＳ１３およびＳ１４の処理によって、隣接ボーンに接続される隣接ジョイントの位置が決定される。さらに、１回目のステップＳ１３およびＳ１４の後、ステップＳ１８およびＳ１９の処理と、（２回目以降の）ステップＳ１３およびＳ１４の処理とが繰り返し実行されることによって、基準ジョイントと隣接ジョイントとを除く他のジョイントについて、基準ジョイントに近いジョイントから順に移動後の位置が算出される。具体的には、隣接ジョイントよりも後端側にあるボーンおよびジョイントについて、ジョイントの位置およびボーンの向きが順に決定されていく。そして、Ｎ回目のステップＳ１３およびＳ１４の後のステップＳ１７において判定結果が肯定となり、動作制御処理が終了する。これによって、Ｎ個のジョイントの位置およびＮ−１個のボーンの向きが全て決定されたこととなり、プレイヤオブジェクトの形状が決定されたこととなる。また、本実施形態では、ステップＳ１５およびＳ１６の処理によって、基準ジョイントを除く各ジョイントについて推進力が算出される。後述するステップＳ７の移動制御処理では、この推進力に基づいてプレイヤオブジェクトがゲーム空間内において移動される。
【０１２３】
図１３の説明に戻り、ステップＳ６の次のステップＳ７において、ＣＰＵ１０は、移動制御処理を実行する。移動制御処理は、プレイヤオブジェクトをゲーム空間内において移動させるための処理である。以下、図１５を参照して、移動制御処理の詳細を説明する。
【０１２４】
図１５は、図１３に示す移動制御処理（ステップＳ７）の流れを示すフローチャートである。移動制御処理においては、まずステップＳ３１およびＳ３２において、オブジェクト推進力ＰＯＷが各ジョイントの推進力ｐｏｗ［ｉ］に基づいて算出される。すなわち、ステップＳ３１において、ＣＰＵ１０は、まず各ジョイントの推進力の総和を算出する。具体的には、メインメモリに記憶されているジョイント推進力データ７３を読み出し、各ジョイントの推進力ｐｏｗ［ｉ］（ｉは１〜Ｎの整数）の総和を算出する。なお、ここで算出された総和は、ジョイント推進力と同様、ｘｙ座標系における２次元ベクトルであり、（ｓｕｍｘ，ｓｕｍｙ）と表すことができる。
【０１２５】
続くステップＳ３２において、ＣＰＵ１０は、ステップＳ３１で算出された総和に基づいてオブジェクト推進力ＰＯＷを算出する。具体的には、ＣＰＵ１０は、プレイヤオブジェクトを基準としたｘｙ座標系における上記総和（ｓｕｍｘ，ｓｕｍｙ）を、ゲーム空間を基準としたｘ’ｙ’座標系の２次元ベクトルに変換することによりオブジェクト推進力ＰＯＷを算出する。ここで、ｘｙ座標系は、ｙ軸正方向がｘ’ｙ’座標系におけるベクトルＦの向きとなるように設定される。したがって、ＣＰＵ１０は、次式（１０）に従ってオブジェクト推進力ＰＯＷ（＝（ＰＯＷｘ，ＰＯＷｙ））を算出する。
ＰＯＷｘ＝−Ｌｘ×ｓｕｍｘ＋Ｆｘ×ｓｕｍｙ
ＰＯＷｙ＝−Ｌｙ×ｓｕｍｘ＋Ｆｙ×ｓｕｍｙ  …（１０）
上式（１０）において、変数ＬｘおよびＬｙは、上記左方向ベクトルＬのｘ’成分およびｙ’成分であり、変数ＦｘおよびＦｙは、上記前方向ベクトルＦのｘ’成分およびｙ’成分である。上式（１０）で算出されたオブジェクト推進力ＰＯＷを示すデータは、オブジェクト推進力データ６９としてメインメモリに記憶される。
【０１２６】
ステップＳ３３において、ＣＰＵ１０は、オブジェクト速度ＶＥＬを算出する。オブジェクト速度ＶＥＬは、１フレーム前に算出されたオブジェクト速度ＶＥＬ’と、オブジェクト推進力ＰＯＷとに基づいて算出される。具体的には、ＣＰＵ１０は、メインメモリに記憶されているオブジェクト速度データ６８およびオブジェクト推進力データ６９を読み出して、次式（１１）に従ってオブジェクト速度ＶＥＬ（＝（ＶＥＬｘ，ＶＥＬｙ））を算出する。
ＶＥＬｘ＝ＶＥＬｘ’×Ｒ＋ＰＯＷｘ×Ｓ２
ＶＥＬｙ＝ＶＥＬｙ’×Ｒ＋ＰＯＷｙ×Ｓ２  …（１１）
上式（１１）において、定数Ｒは０＜Ｒ＜１の範囲で予め定められ、ここでは、定数Ｒは例えばＲ＝０．９９５に設定される。また、定数Ｓ２は予め定められ、ここでは、定数Ｓ２は例えばＳ２＝０．０１に設定される。また、変数ＶＥＬｘ’およびＶＥＬｙ’は、１フレーム前に算出されたオブジェクト速度のｘ’成分およびｙ’成分であり、ステップＳ３３の時点でオブジェクト速度データ６８としてメインメモリに記憶されている。上式（１１）で算出されたオブジェクト速度ＶＥＬを示すデータは、オブジェクト速度データ６８としてメインメモリに記憶される。
【０１２７】
上式（１１）から明らかなように、ステップＳ３３では、前回におけるオブジェクト速度ＶＥＬ’を減衰させるとともに、減衰させた値に、今回のフレームで算出されたオブジェクト推進力ＰＯＷに所定の重みを付した値を加算することによって、今回のフレームにおけるオブジェクト速度ＶＥＬを算出している。これによって、各ジョイントの速度ｖｅｌ［ｉ］がオブジェクト速度ＶＥＬに反映される。
【０１２８】
ステップＳ３４において、ＣＰＵ１０は、オブジェクト速度ＶＥＬに基づいてプレイヤオブジェクトの位置ＰＯＳを算出する。具体的には、ＣＰＵ１０は、メインメモリに記憶されているオブジェクト位置データ６６およびオブジェクト速度データ６８を読み出して、次式（１２）に従ってオブジェクト位置ＰＯＳ（＝（ＰＯＳｘ，ＰＯＳｙ））を算出する。
ＰＯＳｘ＝ＰＯＳｘ’＋ＶＥＬｘ
ＰＯＳｙ＝ＰＯＳｙ’＋ＶＥＬｙ  …（１２）
上式（１２）において、変数ＰＯＳｘ’およびＰＯＳｙ’は、１フレーム前に算出されたオブジェクト位置のｘ’成分およびｙ’成分であり、ステップＳ３４の時点でオブジェクト位置データ６６としてメインメモリに記憶されている。上式（１２）で算出されたオブジェクト位置ＰＯＳを示すデータは、オブジェクト位置データ６６としてメインメモリに記憶される。上記ステップＳ３４によって、各ジョイントの速度に基づいてプレイヤオブジェクトが移動されたこととなる。
【０１２９】
ステップＳ３５において、ＣＰＵ１０は、オブジェクトの向きを算出する。前述のように、オブジェクトの向きは、後端のボーンの向きｄｅｇ［Ｎ−１］に基づいて決定される。具体的には、ＣＰＵ１０は、メインメモリに記憶されている角度データ７４を読み出し、次式（１３）に従って前方向ベクトルＦ（＝（Ｆｘ，Ｆｙ））を算出する。
Ｆｘ＝Ｆｘ’−Ｌｘ’×ｄｅｇ［Ｎ−１］×Ｓ３
Ｆｙ＝Ｆｙ’−Ｌｙ’×ｄｅｇ［Ｎ−１］×Ｓ３  …（１３）
上式（１３）において、定数Ｓ３は予め定められ、ここでは、定数Ｓ３は例えばＳ３＝０．０２に設定される。変数Ｆｘ’およびＦｙ’は、１フレーム前に算出された前方向ベクトルＦのｘ’成分およびｙ’成分であり、ステップＳ３５の時点でオブジェクト方向データ６７としてメインメモリに記憶されている。変数Ｌｘ’およびＬｙ’は、１フレーム前に算出された左方向ベクトルＬのｘ’成分およびｙ’成分であり、ステップＳ３５の時点でオブジェクト方向データ６７としてメインメモリに記憶されている。上式（１３）によれば、プレイヤオブジェクトの後方から前方を見た場合において、ｙ軸に対して左回りに後端のボーンが曲がっていれば（ｄｅｇ［Ｎ−１］＞０であれば）、プレイヤオブジェクトは右回りに回転することとなる。また、ｙ軸に対して右回りにボーンが曲がっていれば（ｄｅｇ［Ｎ−１］＜０であれば）、プレイヤオブジェクトは左回りに回転することとなる。そして、ｙ軸と後端のボーンの向きとが一致すれば（ｄｅｇ［Ｎ−１］＝０であれば）、プレイヤオブジェクトは回転しないこととなる。つまり、上式（１３）によれば、プレイヤオブジェクトの方向が後端のボーンの向きに一致するように、プレイヤオブジェクトの方向が変化される。
【０１３０】
上式（１３）の計算を行った後、ＣＰＵ１０は、計算によって得られた前方向ベクトルＦの大きさを正規化し、前方向ベクトルＦを単位ベクトルとする。さらに、単位ベクトルとなった前方向ベクトルＦに基づいて左方向ベクトルを算出する。具体的には、ＣＰＵ１０は、次の式（１４）に従って左方向ベクトルＬ（＝（Ｌｘ，Ｌｙ））を算出する。
Ｌｘ＝−Ｆｙ
Ｌｙ＝Ｆｘ  …（１４）
以上の処理によって算出された前方向ベクトルＦおよび左方向ベクトルＬを示すデータは、オブジェクト方向データ６７としてメインメモリに記憶される。上記ステップＳ３５の後、ＣＰＵ１０は、移動制御処理を終了する。
【０１３１】
図１３の説明に戻り、ステップＳ７の次のステップＳ８において、ＣＰＵ１０は、プレイヤオブジェクトを含むゲーム空間の画像を生成して表示する。すなわち、プレイヤオブジェクトを構成するポリゴンは、メインメモリに記憶されている現在ジョイント位置データ７０により示される各ジョイントの位置に基づいて形成され、オブジェクト位置データ６６により示される位置に、オブジェクト方向データ６７により示される方向を向くようにゲーム空間に配置される。ＣＰＵ１０およびＧＰＵ１１ｂは、以上のようにプレイヤオブジェクトが配置されたゲーム空間を仮想カメラから見たときの画像を生成し、テレビ２の画面に表示する。
【０１３２】
ステップＳ９において、ＣＰＵ１０は、ゲームを終了するか否かを判定する。ステップＳ９の判定は、例えば、ゲームがクリアされたか否か、ゲームオーバーとなったか否か、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップＳ９の判定結果が否定である場合、ステップＳ３の処理が再度実行される。以降、ステップＳ９でゲームを終了すると判定されるまで、ステップＳ３〜Ｓ９の処理が繰り返し実行される。一方、ステップＳ９の判定結果が肯定である場合、ＣＰＵ１０は、図１３に示すゲーム処理を終了する。以上で、ゲーム処理の説明を終了する。
【０１３３】
以上のように、本実施形態によれば、コントローラ５を左右方向に動かす操作によって、プレイヤオブジェクトが当該操作に応じて身体を左右にくねらすように動作させることができる。つまり、本実施形態によれば、コントローラ５を動かす操作によって、複数の部分からなる複雑なオブジェクトを動作させることができ、さらに、オブジェクトの動作を自然に表現することができる。
【０１３４】
なお、上記実施形態においては、ゲーム装置３は、３次元空間における所定の平面内においてプレイヤオブジェクトを移動させ、プレイヤオブジェクトの各ジョイントを当該平面内で移動させる場合を例として説明を行った。ここで、他の実施形態においては、ゲーム装置３は、プレイヤオブジェクトおよび各ジョイントを３次元的に移動させるようにしてもよい。また、このとき、ゲーム装置３は、加速度センサ３７によって検出される加速度ベクトルから２軸方向の動き（例えば、Ｘ軸方向およびＹ軸方向）を示す動きベクトルを算出し、当該動きベクトルに基づいて隣接ボーンの向きを３次元的に変化させるようにしてもよい。
【０１３５】
また、上記実施形態においては、一列に接続される先端のジョイントを基準ジョイントとしたが、基準ジョイントは先端のジョイントでなくてもよい。例えば、先端からｊ番目のジョイント（第ｊジョイント）を基準ジョイントとする場合には、先頭からｊ＋１番目以降のジョイントについては上記実施形態と同様に動作させるとともに、ｊ番目よりも前のジョイントについては固定してもよい。また、ｊ番目よりも前のジョイントについては、隣接ボーン（ｊ番目のジョイントとｊ＋１番目のジョイントとを接続するボーン）の延長線上に位置するように動作させてもよい。また、ｊ番目よりも前のジョイントについてもｊ＋１番目以降のジョイントと同様に動作させるようにしてもよい。
【０１３６】
また、上記実施形態においては、ジョイントおよびボーンを有する構成のオブジェクトを例として説明したが、オブジェクトの構成はこれに限らず、複数の部分からなり、各部分の接続関係が変化する構成であればどのような構成であってもよい。例えば、ポリゴンの各頂点を各部分（上記実施形態におけるジョイント）とみなし、所定の頂点を基準点（基準ジョイント）として上記実施形態と同様の処理を行うことも可能である。
【産業上の利用可能性】
【０１３７】
本発明は、入力装置自身の動きに応じて複雑なオブジェクトを動作させること等を目的として、例えば、オブジェクトを操作するゲームを実行するためのゲーム装置またはゲームプログラム等に利用することが可能である。
【図面の簡単な説明】
【０１３８】
【図１】ゲームシステム１の外観図
【図２】ゲーム装置３の機能ブロック図
【図３】コントローラ５の外観構成を示す斜視図
【図４】コントローラ５の外観構成を示す斜視図
【図５Ａ】コントローラ５の内部構造を示す図
【図５Ｂ】コントローラ５の内部構造を示す図
【図６】コントローラ５の構成を示すブロック図
【図７】コントローラ５を用いてゲーム操作を行うときの様子を示す図解図
【図８】本実施形態のプレイヤオブジェクトの構成を示す図
【図９】コントローラ５に対して操作が加えられた時のプレイヤオブジェクトを示す図
【図１０】ゲーム装置３のメインメモリに記憶される主なデータを示す図
【図１１】プレイヤオブジェクトのジョイントおよびボーンに関する各変数を示す図
【図１２】ボーンの向きを表す２つのベクトルを示す図
【図１３】ゲーム装置３において実行される処理の流れを示すメインフローチャート
【図１４】図１３に示す動作制御処理（ステップＳ６）の流れを示すフローチャート
【図１５】図１３に示す移動制御処理（ステップＳ７）の流れを示すフローチャート
【符号の説明】
【０１３９】
１    ゲームシステム
２    テレビ
３    ゲーム装置
４    光ディスク
５    コントローラ
６    マーカ部
１０    ＣＰＵ
１１ｃ  ＧＰＵ
１１ｅ  内部メインメモリ
１２    外部メインメモリ
５０    プレイヤオブジェクト
５１〜５５，８１，８２    ジョイント
５６〜５９，８３    ボーン
【図１】
2008310523.tif 000003
【図２】
2008310523.tif 000004
【図３】
2008310523.tif 000005
【図４】
2008310523.tif 000006
【図５Ａ】
2008310523.tif 000007
【図５Ｂ】
2008310523.tif 000008
【図６】
2008310523.tif 000009
【図７】
2008310523.tif 000010
【図８】
2008310523.tif 000011
【図９】
2008310523.tif 000012
【図１０】
2008310523.tif 000013
【図１１】
2008310523.tif 000014
【図１２】
2008310523.tif 000015
【図１３】
2008310523.tif 000016
【図１４】
2008310523.tif 000017
【図１５】
2008310523.tif 000018