(57)【要約】【課題】加速度センサから出力されるデータに応じて、ユーザの動作を迅速に反映させた処理を実行する情報処理プログラムおよび情報処理装置を提供する。【解決手段】加速度データ取得手段は、加速度データを繰り返し取得する。加速度判別手段は、加速度データ取得手段が取得した加速度データが示す加速度が、筐体が加速して動いているときに生じる加速時の加速度か、筐体が減速して動いているときに生じる減速時の加速度かを判別する。動作方向算出手段は、加速度判別手段が判別した減速時の加速度を用いて、筐体が動く方向を算出する。処理手段は、動作方向算出手段が算出した動く方向を用いて、所定の処理を行う。【選択図】図１５
2008276615.tif 000002
【特許請求の範囲】
【請求項１】
所定の筐体に加わる加速度を検出する加速度センサから出力される加速度データを用いた処理を実行する情報処理装置のコンピュータに実行させる情報処理プログラムであって、
前記コンピュータを、
前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データが示す加速度が、前記筐体が所定方向に動いて加速しているときに生じた加速時の加速度か、前記筐体が所定方向に動いて減速しているときに生じた減速時の加速度かを判別する加速度判別手段と、
前記加速度判別手段が判別した減速時の加速度を用いて、前記筐体が動く方向を算出する動作方向算出手段と、
前記動作方向算出手段が算出した前記動く方向を用いて、所定の処理を行う処理手段として機能させる、情報処理プログラム。
【請求項２】
前記加速度判別手段は、
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の所定方向に生じる加速度を累積する第１累積手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記所定方向とは逆方向に生じる加速度を、前記第１累積手段が累積した値を超えない範囲で累積する第２累積手段と、
前記第１累積手段および前記第２累積手段がそれぞれ累積した値を所定の割合で減衰させる減衰手段とを含み、
前記動作方向算出手段は、前記第２累積手段が累積した値を前記減速時の加速度として用いて、前記筐体が動く方向を算出する、請求項１に記載の情報処理プログラム。
【請求項３】
前記加速度判別手段は、前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の複数の方向に生じるそれぞれの加速度成分を算出する加速度成分算出手段を、さらに含み、
前記第１累積手段は、前記複数の方向それぞれの正方向に生じる加速度成分を、当該正方向毎に累積し、
前記第２累積手段は、前記複数の方向それぞれの逆方向に生じる加速度成分を、前記第１累積手段が前記正方向毎に累積した値を超えない範囲で当該逆方向毎に累積し、
前記減衰手段は、前記第１累積手段および前記第２累積手段が前記複数の方向毎に累積した値をそれぞれ所定の割合で減衰させ、
前記動作方向算出手段は、前記第２累積手段がそれぞれ累積した値を前記複数の方向毎に加算した値を前記減速時の加速度として用いて、前記筐体が動く方向を算出する、請求項２に記載の情報処理プログラム。
【請求項４】
前記加速度判別手段は、前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の複数の方向に生じるそれぞれの加速度成分を算出する加速度成分算出手段を、さらに含み、
前記第１累積手段は、前記複数の方向それぞれの正方向に生じる加速度成分を、当該正方向毎に累積し、
前記第２累積手段は、前記複数の方向それぞれの逆方向に生じる加速度成分を、前記第１累積手段が前記正方向毎に累積した値を超えない範囲で当該逆方向毎に累積し、
前記減衰手段は、前記第１累積手段および前記第２累積手段が前記複数の方向毎に累積した値をそれぞれ所定の割合で減衰させ、
前記動作方向算出手段は、前記第２累積手段がそれぞれ累積した値の中で最大の値を前記減速時の加速度として用いて、前記筐体が動く方向を算出する、請求項２に記載の情報処理プログラム。
【請求項５】
前記加速度判別手段は、前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の複数の方向に生じるそれぞれの加速度成分を算出する加速度成分算出手段を、さらに含み、
前記加速度判別手段は、前記加速度成分算出手段が算出した前記加速度成分毎に、前記加速時の加速度か、前記減速時の加速度かを判別し、
前記動作方向算出手段は、前記加速度判別手段が判別した減速時の加速度を前記複数の方向毎に加算した値を用いて、前記筐体が動く方向を算出する、請求項１に記載の情報処理プログラム。
【請求項６】
前記加速度判別手段は、前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の複数の方向に生じるそれぞれの加速度成分を算出する加速度成分算出手段を、さらに含み、
前記加速度判別手段は、前記加速度成分算出手段が算出した前記加速度成分毎に、前記加速時の加速度か、前記減速時の加速度かを判別し、
前記動作方向算出手段は、前記加速度判別手段が判別した減速時の加速度の中で最大の値を用いて、前記筐体が動く方向を算出する、請求項１に記載の情報処理プログラム。
【請求項７】
前記動作方向算出手段は、前記減速時の加速度の大きさが所定値より大きいとき、当該減速時の加速度を用いて、前記筐体が動く方向を算出する、請求項１または２に記載の情報処理プログラム。
【請求項８】
前記減速時の加速度の大きさが前記所定値より大きくなったとき、当該減速時の加速度の大きさを新たな前記所定値として設定する所定値設定手段として、さらに前記コンピュータを機能させる、請求項７に記載の情報処理プログラム。
【請求項９】
前記減速時の加速度の大きさが前記所定値より小さくなったとき、前記所定値設定手段は、前記所定値を所定量低下させる、請求項８に記載の情報処理プログラム。
【請求項１０】
前記所定値設定手段は、前記所定値とは別に予め固定値をさらに設定し、
前記動作方向算出手段は、前記減速時の加速度の大きさが前記所定値および前記固定値の何れよりも大きいとき、前記減速時の加速度を用いて、前記筐体が動く方向を算出する、請求項８に記載の情報処理プログラム。
【請求項１１】
前記加速度判別手段で判別された減速時の加速度を用いて、前記筐体が減速して動いている方向を示す減速ベクトルを算出する減速ベクトル算出手段として、さらに前記コンピュータを機能させ、
前記動作方向算出手段は、前記減速ベクトル算出手段が算出した減速ベクトルを用いて、前記動く方向を算出する、請求項１に記載の情報処理プログラム。
【請求項１２】
前記加速度判別手段は、
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の所定方向に生じる加速度を累積する第１累積手段と、
前記加速度データ取得手段が取得した加速度データを用いて、前記所定方向とは逆方向に生じる加速度を、前記第１累積手段が累積した値を超えない範囲で累積する第２累積手段と、
前記第１累積手段および前記第２累積手段がそれぞれ累積した値を所定の割合で減衰させる減衰手段とを含み、
前記減速ベクトル算出手段は、前記第２累積手段が累積した値を前記減速時の加速度が累積された値として用いて、前記減速ベクトルを算出する、請求項１１に記載の情報処理プログラム。
【請求項１３】
前記加速度判別手段は、前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の複数の方向に生じるそれぞれの加速度成分を算出する加速度成分算出手段を、さらに含み、
前記第１累積手段は、前記複数の方向それぞれの正方向に生じる加速度成分を、当該正方向毎に累積し、
前記第２累積手段は、前記複数の方向それぞれの逆方向に生じる加速度成分を、前記第１累積手段が前記正方向毎に累積した値を超えない範囲で当該逆方向毎に累積し、
前記減衰手段は、前記第１累積手段および前記第２累積手段が前記複数の方向毎に累積した値をそれぞれ所定の割合で減衰させ、
前記減速ベクトル算出手段は、前記第２累積手段がそれぞれ累積した値を前記複数の方向毎に加算することによって前記減速ベクトルを算出する、請求項１２に記載の情報処理プログラム。
【請求項１４】
前記加速度判別手段は、前記加速度データ取得手段が取得した加速度データを用いて、前記筐体の複数の方向に生じるそれぞれの加速度成分を算出する加速度成分算出手段を、さらに含み、
前記第１累積手段は、前記複数の方向それぞれの正方向に生じる加速度成分を、当該正方向毎に累積し、
前記第２累積手段は、前記複数の方向それぞれの逆方向に生じる加速度成分を、前記第１累積手段が前記正方向毎に累積した値を超えない範囲で当該逆方向毎に累積し、
前記減衰手段は、前記第１累積手段および前記第２累積手段が前記複数の方向毎に累積した値をそれぞれ所定の割合で減衰させ、
前記減速ベクトル算出手段は、前記第２累積手段がそれぞれ累積した値の中で最大の値を用いて前記減速ベクトルを算出する、請求項１２に記載の情報処理プログラム。
【請求項１５】
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体に作用する重力加速度の方向を算出する重力方向算出手段として、さらに前記コンピュータを機能させ、
前記動作方向算出手段は、前記重力方向算出手段が算出した重力加速度の方向および前記減速ベクトルが示す方向に基づいて、前記重力加速度が作用する方向を基準として前記動く方向を算出する、請求項１１に記載の情報処理プログラム。
【請求項１６】
前記動作方向算出手段は、前記減速ベクトル算出手段が算出した前記減速ベクトルの大きさが所定値より大きいとき、当該減速ベクトルの方向を前記動く方向として算出する、請求項１１に記載の情報処理プログラム。
【請求項１７】
前記減速ベクトル算出手段が算出した前記減速ベクトルの大きさが前記所定値より大きくなったとき、当該減速ベクトルの大きさを新たな前記所定値として設定する所定値設定手段として、さらに前記コンピュータを機能させる、請求項１６に記載の情報処理プログラム。
【請求項１８】
前記減速ベクトル算出手段が算出した前記減速ベクトルの大きさが前記所定値より小さくなったとき、前記所定値設定手段は、前記所定値を所定量低下させる、請求項１７に記載の情報処理プログラム。
【請求項１９】
前記所定値設定手段は、前記所定値とは別に予め固定値をさらに設定し、
前記動作方向算出手段は、前記減速ベクトル算出手段が算出した前記減速ベクトルの大きさが前記所定値および前記固定値の何れよりも大きいとき、当該減速ベクトルの方向を前記動く方向として算出する、請求項１７に記載の情報処理プログラム。
【請求項２０】
前記動作方向算出手段が前記動く方向を算出した後の経過時間を計測する経過時間計測手段として、さらに前記コンピュータを機能させ、
前記処理手段は、前記経過時間が所定時間に達したとき、前記動作方向算出手段が算出した前記動く方向を用いて前記所定の処理を行う、請求項７または１６に記載の情報処理プログラム。
【請求項２１】
前記加速度判別手段は、前記筐体の所定方向に生じる加速度を示す加速度データを取得した直後に、当該所定方向とは逆方向に生じる加速度を示す加速度データを取得したとき、前者の加速度を前記加速時の加速度と判別し、後者の加速度を前記減速時の加速度と判別する、請求項１または２に記載の情報処理プログラム。
【請求項２２】
前記加速度データ取得手段が取得した加速度データを用いて、前記筐体に生じる重力加速度成分を算出する重力成分算出手段と、
前記加速度データ取得手段が取得した加速度データが示す加速度から、前記重力成分算出手段で算出された重力加速度成分を除く重力成分除去手段として、さらに前記コンピュータを機能させ、
前記加速度判別手段は、前記重力成分除去手段が前記重力加速度成分を除いた加速度を用いる、請求項１または２に記載の情報処理プログラム。
【請求項２３】
所定の筐体に加わる加速度を検出する加速度センサから出力される加速度データを用いた処理を実行する情報処理装置であって、
前記加速度データを繰り返し取得する加速度データ取得手段と、
前記加速度データ取得手段が取得した加速度データが示す加速度が、前記筐体が所定方向に動いて加速しているときに生じた加速時の加速度か、前記筐体が所定方向に動いて減速しているときに生じた減速時の加速度かを判別する加速度判別手段と、
前記加速度判別手段が判別した減速時の加速度を用いて、前記筐体が動く方向を算出する動作方向算出手段と、
前記動作方向算出手段が算出した前記動く方向を用いて、所定の処理を行う処理手段とを備える、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理プログラムおよび情報処理装置に関し、より特定的には、加速度センサから出力されるデータに応じて処理が実行される、情報処理プログラムおよび情報処理装置に関する。
【背景技術】
【０００２】
従来、加速度センサから出力されるデータを用いて算出されるプレイヤのパンチ動作に応じて、ボクシングゲームが実行されるゲーム装置が開示されている（例えば、特許文献１参照）。上記特許文献１に開示されたゲーム装置は、当該ゲーム装置のコントローラとして機能するグローブユニットに、前後（Ｙ軸）、左右（Ｘ軸）、および上下（Ｚ軸）方向の３軸の加速度をそれぞれ検出する加速度センサが設けられている。そして、上記ゲーム装置は、加速度センサから出力される出力波形を解析することによって、プレイヤが繰り出したパンチ種類を識別する。具体的には、ゲーム装置は、プレイヤのパンチの打ち始めから打ち終わりまでの期間を、Ｙ軸方向に対して検出された加速度データの出力波形から算出する。次に、ゲーム装置は、上記パンチの打ち始めから打ち終わりまでの期間に生じたＸ軸方向の加速度データおよびＺ軸方向の加速度データそれぞれの出力波形を用いて、例えば最大値と最小値、振幅、ピークの出現回数、積分値等のデータをそれぞれ抽出する。そして、ゲーム装置は、各抽出データとパンチ種類（ストレート、フック、およびアッパーパンチ）毎の各波形パターンとに基づいて、パンチの種類を判別する。その後、ゲーム装置は、パンチ種類を識別すると、当該パンチ種類に応じたゲーム処理を行う。
【特許文献１】特開２００２−１５３６７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１に記載された技術では、プレイヤがパンチ動作を終えてから当該パンチの種類の判定が行われて当該種類に応じたゲーム処理が実行されるので、プレイヤのパンチ動作を表すような画像を描画することができない。すなわち、特許文献１の技術において、プレイヤのパンチ動作を表すような画像、たとえばプレイヤキャラクタがパンチを打っている画像やプレイヤの拳を示すオブジェクトが移動する画像を描画しようとすると、プレイヤがパンチ動作を終えた後になってようやく当該画像が画面上に表示されることとなる。プレイヤの入力に対する応答速度が速いことが求められるこの種のアクションゲームや対戦ゲーム等において、この応答性の悪さは問題であり、ゲームの面白さを低下させる。このため、特許文献１の技術では、主観視点を用いた描画が基本的に採用されており、敵キャラクタにパンチがヒットしたと判定されるときには、プレイヤのパンチ動作を表すような画像を描画することなく、敵キャラクタがダメージを受ける画像がいきなり表示される。
【０００４】
また、上記ゲーム装置によって、プレイヤの操作対象のキャラクタ自身がパンチを繰り出すような表示をさせるような場合には、プレイヤのパンチ動作が終了してからパンチの種類に応じたパンチ動作を表す画像を描画する必要があるので、ユーザの動作の反映にさらに時間がかかるという問題もあった。
【０００５】
それ故に、本発明の目的は、加速度センサから出力されるデータに応じて、ユーザの動作を迅速に反映させた処理を実行する情報処理プログラムおよび情報処理装置を提供することである。
【課題を解決するための手段】
【０００６】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【０００７】
第１の発明は、所定の筐体（７、７１）に加わる加速度を検出する加速度センサ（７０１）から出力される加速度データ（Ｄａ）を用いた処理を実行する情報処理装置（５）のコンピュータ（１０）に実行させる情報処理プログラムである。情報処理プログラムは、加速度データ取得手段（ステップ４３を実行するＣＰＵ１０；以下、単にステップ番号のみ記載する）、加速度判別手段（Ｓ８２〜Ｓ８９）、動作方向算出手段（Ｓ４８）、および処理手段（Ｓ４９）として、コンピュータを機能させる。加速度データ取得手段は、加速度データを繰り返し取得する。加速度判別手段は、加速度データ取得手段が取得した加速度データが示す加速度が、筐体が所定方向に動いて加速しているときに生じた加速時の加速度（Ｄｄ）か、筐体が所定方向に動いて減速しているときに生じた減速時の加速度（Ｄｅ）かを判別する。動作方向算出手段は、加速度判別手段が判別した減速時の加速度を用いて、筐体が動く方向（ｄｉｒ）を算出する。処理手段は、動作方向算出手段が算出した動く方向を用いて、所定の処理を行う。
【０００８】
第２の発明は、上記第１の発明において、加速度判別手段は、第１累積手段（Ｓ８９）、第２累積手段（Ｓ８６〜Ｓ８８）、および減衰手段（Ｓ８２）を含む。第１累積手段は、加速度データ取得手段が取得した加速度データを用いて、筐体の所定方向に生じる加速度（ｄｐ＜０）を累積する。第２累積手段は、加速度データ取得手段が取得した加速度データを用いて、所定方向とは逆方向に生じる加速度（ｄｐ＞０）を、第１累積手段が累積した値を超えない範囲で累積する。減衰手段は、第１累積手段および第２累積手段がそれぞれ累積した値を所定の割合（ＤＡＭＰ）で減衰させる。動作方向算出手段は、第２累積手段が累積した値を減速時の加速度として用いて、筐体が動く方向を算出する。
【０００９】
第３の発明は、上記第２の発明において、加速度判別手段は、加速度成分算出手段（Ｓ８３、Ｓ８４）を、さらに含む。加速度データ取得手段が取得した加速度データを用いて、筐体の複数の方向（第０方向〜第Ｎ−１方向；図１９）に生じるそれぞれの加速度成分（ｄｐ）を算出する。第１累積手段は、複数の方向それぞれの正方向に生じる加速度成分（ｄｐ＜０；Ｓ８５でＹｅｓ）を、当該正方向毎に累積する。第２累積手段は、複数の方向それぞれの逆方向に生じる加速度成分（ｄｐ≧０；Ｓ８５でＮｏ）を、第１累積手段が正方向毎に累積した値を超えない範囲で当該逆方向毎に累積する。減衰手段は、第１累積手段および第２累積手段が複数の方向毎に累積した値をそれぞれ所定の割合で減衰させる。動作方向算出手段は、第２累積手段がそれぞれ累積した値を複数の方向毎に加算した値を減速時の加速度として用いて、筐体が動く方向を算出する。
【００１０】
第４の発明は、上記第２の発明において、加速度判別手段は、加速度成分算出手段を、さらに含む。加速度成分算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体の複数の方向に生じるそれぞれの加速度成分を算出する。第１累積手段は、複数の方向それぞれの正方向に生じる加速度成分を、当該正方向毎に累積する。第２累積手段は、複数の方向それぞれの逆方向に生じる加速度成分を、第１累積手段が正方向毎に累積した値を超えない範囲で当該逆方向毎に累積する。減衰手段は、第１累積手段および第２累積手段が複数の方向毎に累積した値をそれぞれ所定の割合で減衰させる。動作方向算出手段は、第２累積手段がそれぞれ累積した値の中で最大の値を減速時の加速度として用いて、筐体が動く方向を算出する。
【００１１】
第５の発明は、上記第１の発明において、加速度判別手段は、加速度成分算出手段を、さらに含む。加速度成分算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体の複数の方向に生じるそれぞれの加速度成分を算出する。加速度判別手段は、加速度成分算出手段が算出した加速度成分毎に、加速時の加速度か、減速時の加速度かを判別する。動作方向算出手段は、加速度判別手段が判別した減速時の加速度を複数の方向毎に加算した値を用いて、筐体が動く方向を算出する。
【００１２】
第６の発明は、上記第１の発明において、加速度判別手段は、加速度成分算出手段を、さらに含む。加速度成分算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体の複数の方向に生じるそれぞれの加速度成分を算出する。加速度判別手段は、加速度成分算出手段が算出した加速度成分毎に、加速時の加速度か、減速時の加速度かを判別する。動作方向算出手段は、加速度判別手段が判別した減速時の加速度の中で最大の値を用いて、筐体が動く方向を算出する。
【００１３】
第７の発明は、上記第１または第２の発明において、動作方向算出手段は、減速時の加速度の大きさ（ｓｐｅｅｄ）が所定値（ｓｐｅｅｄ＿ｍａｘ）より大きいとき（Ｓ１０２でＹｅｓ）、当該減速時の加速度を用いて、筐体が動く方向を算出する。
【００１４】
第８の発明は、上記第７の発明において、所定値設定手段（Ｓ１０４）として、さらにコンピュータを機能させる。所定値設定手段は、減速時の加速度の大きさが所定値より大きくなったとき、当該減速時の加速度の大きさを新たな所定値として設定する。
【００１５】
第９の発明は、上記第８の発明において、減速時の加速度の大きさが所定値より小さくなったとき、所定値設定手段は、所定値を所定量低下させる（Ｓ１０６）。
【００１６】
第１０の発明は、上記第８の発明において、所定値設定手段は、所定値とは別に予め固定値をさらに設定する。動作方向算出手段は、減速時の加速度の大きさが所定値および固定値の何れよりも大きいとき（Ｓ１０２でＹｅｓ）、減速時の加速度を用いて、筐体が動く方向を算出する。
【００１７】
第１１の発明は、上記第１の発明において、減速ベクトル算出手段（Ｓ９０）として、さらにコンピュータを機能させる。減速ベクトル算出手段は、加速度判別手段で判別された減速時の加速度を用いて、筐体が減速して動いている方向を示す減速ベクトル（Ｄｆ）を算出する。動作方向算出手段は、減速ベクトル算出手段が算出した減速ベクトルを用いて、動く方向を算出する。
【００１８】
第１２の発明は、上記第１１の発明において、加速度判別手段は、第１累積手段、第２累積手段、および減衰手段を含む。第１累積手段は、加速度データ取得手段が取得した加速度データを用いて、筐体の所定方向に生じる加速度を累積する。第２累積手段は、加速度データ取得手段が取得した加速度データを用いて、所定方向とは逆方向に生じる加速度を、第１累積手段が累積した値を超えない範囲で累積する。減衰手段は、第１累積手段および第２累積手段がそれぞれ累積した値を所定の割合で減衰させる。減速ベクトル算出手段は、第２累積手段が累積した値を減速時の加速度が累積された値として用いて、減速ベクトルを算出する。
【００１９】
第１３の発明は、上記第１２の発明において、加速度判別手段は、加速度成分算出手段を、さらに含む。加速度データ取得手段が取得した加速度データを用いて、筐体の複数の方向に生じるそれぞれの加速度成分を算出する。第１累積手段は、複数の方向それぞれの正方向に生じる加速度成分を、当該正方向毎に累積する。第２累積手段は、複数の方向それぞれの逆方向に生じる加速度成分を、第１累積手段が正方向毎に累積した値を超えない範囲で当該逆方向毎に累積する。減衰手段は、第１累積手段および第２累積手段が複数の方向毎に累積した値をそれぞれ所定の割合で減衰させる。減速ベクトル算出手段は、第２累積手段がそれぞれ累積した値を複数の方向毎に加算することによって減速ベクトルを算出する。
【００２０】
第１４の発明は、上記第１２の発明において、加速度判別手段は、加速度成分算出手段を、さらに含む。加速度成分算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体の複数の方向に生じるそれぞれの加速度成分を算出する。第１累積手段は、複数の方向それぞれの正方向に生じる加速度成分を、当該正方向毎に累積する。第２累積手段は、複数の方向それぞれの逆方向に生じる加速度成分を、第１累積手段が正方向毎に累積した値を超えない範囲で当該逆方向毎に累積する。減衰手段は、第１累積手段および第２累積手段が複数の方向毎に累積した値をそれぞれ所定の割合で減衰させる。減速ベクトル算出手段は、第２累積手段がそれぞれ累積した値の中で最大の値を用いて減速ベクトルを算出する。
【００２１】
第１５の発明は、上記第１１の発明において、重力方向算出手段（Ｓ４４）として、さらにコンピュータを機能させる。重力方向算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体に作用する重力加速度の方向（ｐｏｓ）を算出する。動作方向算出手段は、重力方向算出手段が算出した重力加速度の方向および減速ベクトルが示す方向に基づいて、重力加速度が作用する方向を基準として動く方向を算出する。
【００２２】
第１６の発明は、上記第１１の発明において、動作方向算出手段は、減速ベクトル算出手段が算出した減速ベクトルの大きさが所定値より大きいとき、当該減速ベクトルの方向を動く方向として算出する。
【００２３】
第１７の発明は、上記第１６の発明において、所定値設定手段として、さらにコンピュータを機能させる。所定値設定手段は、減速ベクトル算出手段が算出した減速ベクトルの大きさが所定値より大きくなったとき、当該減速ベクトルの大きさを新たな所定値として設定する。
【００２４】
第１８の発明は、上記第１７の発明において、所定値設定手段は、減速ベクトル算出手段が算出した減速ベクトルの大きさが所定値より小さくなったとき、所定値を所定量低下させる。
【００２５】
第１９の発明は、上記第１７の発明において、所定値設定手段は、所定値とは別に予め固定値をさらに設定する。動作方向算出手段は、減速ベクトル算出手段が算出した減速ベクトルの大きさが所定値および固定値の何れよりも大きいとき、当該減速ベクトルの方向を動く方向として算出する。
【００２６】
第２０の発明は、上記第７または第１６の発明において、経過時間計測手段（Ｓ１０５、Ｓ１０７）として、さらにコンピュータを機能させる。経過時間計測手段は、動作方向算出手段が動く方向を算出した後の経過時間（Ｄｈ）を計測する。処理手段は、経過時間が所定時間に達したとき、動作方向算出手段が算出した動く方向を用いて所定の処理を行う。
【００２７】
第２１の発明は、上記第１または第２の発明において、加速度判別手段は、筐体の所定方向に生じる加速度を示す加速度データを取得した直後に、当該所定方向とは逆方向に生じる加速度を示す加速度データを取得したとき、前者の加速度を加速時の加速度と判別し、後者の加速度を減速時の加速度と判別する。
【００２８】
第２２の発明は、上記第１または第２の発明において、重力成分算出手段（Ｓ４５）および重力成分除去手段（Ｓ４６）として、さらにコンピュータを機能させる。重力成分算出手段は、加速度データ取得手段が取得した加速度データを用いて、筐体に生じる重力加速度成分（Ｄｂ）を算出する。重力成分除去手段は、加速度データ取得手段が取得した加速度データが示す加速度から、重力成分算出手段で算出された重力加速度成分を除く。加速度判別手段は、重力成分除去手段が重力加速度成分を除いた加速度（Ｄｃ）を用いる。
【００２９】
第２３の発明は、所定の筐体に加わる加速度を検出する加速度センサから出力される加速度データを用いた処理を実行する情報処理装置である。情報処理装置は、加速度データ取得手段、加速度判別手段、動作方向算出手段、および処理手段を備える。加速度データ取得手段は、加速度データを繰り返し取得する。加速度判別手段は、加速度データ取得手段が取得した加速度データが示す加速度が、筐体が所定方向に動いて加速しているときに生じた加速時の加速度か、筐体が所定方向に動いて減速しているときに生じた減速時の加速度かを判別する。動作方向算出手段は、加速度判別手段が判別した減速時の加速度を用いて、筐体が動く方向を算出する。処理手段は、動作方向算出手段が算出した動く方向を用いて、所定の処理を行う。
【発明の効果】
【００３０】
上記第１の発明によれば、筐体が減速して動いているときに生じる減速時の加速度を用いることによって、筐体が動く方向や振られる方向を認識する応答性を向上させながら高精度でそれらの方向を算出することができる。
【００３１】
上記第２および第１２の発明によれば、所定方向に生じる加速度および当該所定方向の逆方向に生じる加速度をそれぞれ累積する正の変数を設定し、それぞれ所定の割合で減衰させている。そして、上記逆方向の変数が上記所定方向の変数を超えないように制御することによって、加速時に生じる加速度と当該加速直後に生じた減速時の加速度とがセットにされて、減速時の加速度を正確に特定することができる。
【００３２】
上記第３、第５、および第１３の発明によれば、減速時の加速度の判定を複数方向に対してそれぞれ行うことによって、筐体が動く方向の算出精度が向上する。また、複数の方向毎に減速時の加速度を加算することによって、筐体が動く方向が設定された複数の方向に限定されずにアナログ的な方向となり、最も特徴的な方向が算出される。さらに、上記複数の方向のうち、何れか１つにノイズが生じたとしても、そのノイズが生じた方向を筐体が動く方向と誤認することがない。
【００３３】
上記第４、第６、および第１４の発明によれば、減速時の加速度の判定を複数方向に対してそれぞれ行うことによって、筐体が動く方向の算出精度が向上する。また、複数の方向のうち、最大の減速時の加速度を用いることによって、筐体が動く方向を算出する処理が簡単となる。
【００３４】
上記第７および第１６の発明によれば、減速時の加速度や減速ベクトルの大きさが所定値より大きいときに、動く方向が算出されるため、筐体が動く方向を誤って算出することを防止することができる。
【００３５】
上記第８および第１７の発明によれば、減速時の加速度や減速ベクトルの大きさの最大値が所定値として設定されるため、動く方向の算出が頻繁に起こることを防止することができる。
【００３６】
上記第９および第１８の発明によれば、所定値が減衰するため、次の新たな動く方向の算出を可能にすることができる。
【００３７】
上記第第１０および第１９の発明によれば、重力加速度等の筐体の移動以外で生じる加速度の影響を除くことができ、筐体が動く方向を誤って算出することを防止することができる。
【００３８】
上記第１１の発明によれば、減速時の加速度を用いて、筐体が減速して動いている方向を示す減速ベクトルを算出することによって、筐体の動く方向や振られる方向を２次元または３次元方向で算出することができる。
【００３９】
上記第１５の発明によれば、筐体に作用する重力方向を基準とした筐体の動き方向を算出することができる。
【００４０】
上記第２０の発明によれば、動く方向を算出した後の経過時間を当該動く方向の信頼度として用いることでき、より確実な動く方向を取得したいときは、経過時間が所定時間に達したときに算出されている方向を用いて所定の処理を行うことが可能である。
【００４１】
上記第２１の発明によれば、所定方向に加速度が生じた直後に当該所定方向とは逆方向に加速度が生じたことを検出することによって、当該逆方向の加速度が減速時に生じた加速度であると容易に判別することができる。
【００４２】
上記第２２の発明によれば、筐体に常に加わる重力成分を除去することによって、筐体が動く方向や振られる方向を正確に算出することができる。
【００４３】
本発明の情報処理装置によれば、上述した情報処理プログラムと同様の効果を得ることができる。
【発明を実施するための最良の形態】
【００４４】
図１を参照して、本発明の一実施形態に係る情報処理プログラムを実行する装置について説明する。以下、説明を具体的にするために、当該装置の一例の据置型のゲーム装置本体５を含むゲームシステムについて説明する。なお、図１は据置型のゲーム装置３を含むゲームシステム１の外観図であり、図２はゲーム装置本体５のブロック図である。以下、当該ゲームシステム１について説明する。
【００４５】
図１において、ゲームシステム１は、表示手段の一例の家庭用テレビジョン受像機（以下、モニタと記載する）２と、当該モニタ２に接続コードを介して接続する据置型のゲーム装置３とから構成される。モニタ２は、ゲーム装置本体５から出力された音声信号を音声出力するためのスピーカ２ａを備える。また、ゲーム装置３は、本願発明の情報処理プログラムの一例のゲームプログラムを記録した光ディスク４と、当該光ディスク４のゲームプログラムを実行してゲーム画面をモニタ２に表示出力させるためのコンピュータを搭載したゲーム装置本体５と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体５に与えるためのコントローラ７とを備えている。
【００４６】
また、ゲーム装置本体５は、無線コントローラモジュール１９（図２参照）を内蔵する。無線コントローラモジュール１９は、コントローラ７から無線送信されるデータを受信し、ゲーム装置本体５からコントローラ７へデータを送信して、コントローラ７とゲーム装置本体５とを無線通信によって接続する。さらに、ゲーム装置本体５には、当該ゲーム装置本体５に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。
【００４７】
また、ゲーム装置本体５には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ１７（図２参照）が搭載される。ゲーム装置本体５は、光ディスク４に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ２に表示する。また、ゲームプログラム等は、光ディスク４に限らず、フラッシュメモリ１７に予め記録されたものを実行するようにしてもよい。さらに、ゲーム装置本体５は、フラッシュメモリ１７に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置本体５のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００４８】
コントローラ７は、無線コントローラモジュール１９を内蔵するゲーム装置本体５へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて操作情報等の送信データを無線送信する。コントローラ７は、主にモニタ２の表示画面に表示されるオブジェクト等を操作するための操作手段である。コントローラ７は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン（十字キーやスティック等を含む）とが設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像する撮像情報演算部７４を備えている。また、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって例えば赤外光を出力する。また、コントローラ７は、ゲーム装置本体５の無線コントローラモジュール１９から無線送信された送信データを通信部７５で受信して、当該送信データに応じた音や振動を発生させることもできる。
【００４９】
次に、図２を参照して、ゲーム装置本体５の内部構成について説明する。図２は、ゲーム装置本体５の構成を示すブロック図である。ゲーム装置本体５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０、システムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ／Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）１３、ディスクドライブ１４、およびＡＶ−ＩＣ（Ａｕｄｉｏ  Ｖｉｄｅｏ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）１５等を有する。
【００５０】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムＬＳＩ１１の内部構成については、後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置本体５の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ３５または外部メインメモリ１２に読み出したデータを書き込む。
【００５１】
また、システムＬＳＩ１１には、入出力プロセッサ３１、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）３２、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３３、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３４、および内部メインメモリ３５が設けられる。図示は省略するが、これらの構成要素３１〜３５は、内部バスによって互いに接続される。
【００５２】
ＧＰＵ３２は、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ３４は、ＧＰＵ３２がグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ３２は、ＶＲＡＭ３４に記憶されたデータを用いて画像データを作成する。
【００５３】
ＤＳＰ３３は、オーディオプロセッサとして機能し、内部メインメモリ３５や外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００５４】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、ＡＶコネクタ１６を介して、読み出した画像データをモニタ２に出力するとともに、読み出した音声データをモニタ２に内蔵されるスピーカ２ａに出力する。これによって、画像がモニタ２に表示されるとともに音がスピーカ２ａから出力される。
【００５５】
入出力プロセッサ（Ｉ／Ｏプロセッサ）３１は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ３１は、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、および外部メモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００５６】
入出力プロセッサ３１は、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ３１は、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介して当該データをネットワークに送信する。また、入出力プロセッサ３１は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２、および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０は、ゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置本体５と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体５を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５７】
また、入出力プロセッサ３１は、アンテナ２３および無線コントローラモジュール１９を介して、コントローラ７から送信される操作データ等を受信し、内部メインメモリ３５または外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。なお、内部メインメモリ３５には、外部メインメモリ１２と同様に、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、ＣＰＵ１０のワーク領域やバッファ領域として用いられてもかまわない。
【００５８】
さらに、入出力プロセッサ３１には、拡張コネクタ２０および外部メモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ３１は、拡張コネクタ２０や外部メモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００５９】
また、ゲーム装置本体５（例えば、前部主面）には、当該ゲーム装置本体５の電源ボタン２４、ゲーム処理のリセットボタン２５、光ディスク４を脱着する投入口、およびゲーム装置本体５の投入口から光ディスク４を取り出すイジェクトボタン２６等が設けられている。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置本体５の各構成要素に対して、図示しないＡＣアダプタを経て電力が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置本体５の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００６０】
図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００６１】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００６２】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００６３】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。
【００６４】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置本体５が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６５】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置本体５の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００６６】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール１９からコントローラ７へ、複数のＬＥＤ７０２のうち、上記コントローラ種別に対応するＬＥＤを点灯させるための信号が送信される。
【００６７】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５に示すスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００６８】
一方、ハウジング７１下面には、凹部が形成されている。ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ８Ｌおよび８Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００６９】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７０の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００７０】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の上面（操作ボタン７２ａが設けられた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の左側面（図３では表されていない側面）方向をＸ軸正方向とする。
【００７１】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００７２】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。また、無線モジュール７５３（図７参照）およびアンテナ７５４によって、コントローラ７がワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の動きを良好な感度でゲーム装置本体５等が判定することができる。
【００７３】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置本体５から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００７４】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置本体５から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００７５】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００７６】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００７７】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００７８】
コントローラ７は、３軸（Ｘ、Ｙ、Ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。また、後述する実施例のように、ゲーム処理に用いる制御信号の種類によっては、少なくとも２軸方向に沿った直線加速度を検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて、加速度センサ７０１が提供されてもよい。
【００７９】
加速度センサ７０１に用いられるような加速度検出手段は、加速度センサ７０１の持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、それら３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００８０】
しかしながら、加速度センサ７０１から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ（例えばＣＰＵ１０）またはコントローラのプロセッサ（例えばマイコン７５１）等のコンピュータが処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
【００８１】
例えば、加速度センサ７０１を搭載するコントローラ７が静的な状態であることを前提としてコンピュータ側で処理する場合（すなわち、加速度センサ７０１によって検出される加速度が重力加速度のみであるとして処理する場合）、コントローラ７が現実に静的な状態であれば、検出された加速度に基づいてコントローラ７の姿勢が重力方向に対して傾いているか否か、またはどの程度傾いているかを知ることができる。具体的には、加速度センサ７０１の検出軸が鉛直下方向を向いている状態を基準としたとき、当該検出軸方向に１Ｇ（重力加速度）が作用しているか否かだけでコントローラ７が鉛直下方向に対して傾いているか否かを知ることができる。また、上記検出軸方向に作用している加速度の大きさによって、コントローラ７が鉛直下方向に対してどの程度傾いているかも知ることができる。また、多軸方向の加速度を検出可能な加速度センサ７０１の場合には、さらに各軸に対して検出された加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ７がどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ７０１からの出力に基づいて、プロセッサがコントローラ７の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ７０１からの出力に基づいて、おおよそのコントローラ７の傾き具合を推定するような処理としてもよい。このように、加速度センサ７０１をプロセッサと組み合わせて用いることによって、コントローラ７の傾き、姿勢、または位置を判定することができる。
【００８２】
一方、加速度センサ７０１が動的な状態であることを前提とする場合には、当該加速度センサ７０１が重力加速度成分に加えて加速度センサ７０１の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、コントローラ７の動き方向等を知ることができる。具体的には、加速度センサ７０１を備えるコントローラ７がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７の様々な動きおよび／または位置を算出することができる。なお、加速度センサ７０１が動的な状態であることを前提とする場合であっても、加速度センサ７０１の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するコントローラ７の傾きを知ることが可能である。
【００８３】
他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ７０１が静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。加速度センサ７０１でそれぞれ検知された加速度を示すデータは、通信部７５に出力される。
【００８４】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置本体５からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置本体５から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置本体５から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００８５】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術を用いて、操作情報を示す電波信号を所定周波数の搬送波を用いてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置本体５の無線コントローラモジュール１９でその電波信号を受信し、ゲーム装置本体５で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、および処理結果データ）を取得する。そして、ゲーム装置本体５のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００８６】
次に、ゲーム装置本体５が行う具体的な処理を説明する前に、本ゲーム装置本体５で行うゲームの概要について説明する。図８に示すように、コントローラ７は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム１でコントローラ７を用いてゲームをプレイするためには、プレイヤが片手でコントローラ７を把持し、コントローラ７を振り動かす動作を行う。例えば、図８においては、プレイヤがコントローラ７を把持して、上下または左右に振り動かしている様子を示している。また、図８においては、プレイヤがコントローラ７を把持して、上下または左右にコントローラ７の向きを変えている様子を示している。このようなプレイヤがコントローラ７を振り動かすまたは向きを変えるような動作において、ゲーム装置本体５がコントローラ７の振り方向または向きを変える方向（以下、単に振り方向と記載する）や当該振り方向を判定した後の経過時間等を解析し、当該振り方向および経過時間を利用してゲーム処理が行われる。
【００８７】
例えば、プレイヤが静的にコントローラ７を傾けることによって、コントローラ７の静的な姿勢に応じた操作情報（具体的には、Ｘ、Ｙ、およびＺ軸方向加速度データ）をゲーム装置本体５に与える。また、プレイヤがコントローラ７を上下や左右に振り動かす動作やコントローラ７の向きを変える動作では、コントローラ７からその振り方向へ加速する際の加速度や遠心力、動作を停止するために減速する際の加速度や遠心力等に応じた動的な操作情報をゲーム装置本体５に与える。このようなコントローラ７に加わる加速度の変化は、加速度センサ７０１によって検出できるため、加速度センサ７０１から出力されるＸ、Ｙ、およびＺ軸方向加速度データに対して追加の処理を行うことによって、コントローラ７の静的な姿勢や動的な振り方向を算出することができる。また、加速度センサ７０１から出力される２軸（例えば、ＸおよびＹ軸）方向の加速度データを用いて追加の処理を行うことによって、２次元方向に対するコントローラ７の静的な姿勢や動的な振り方向を算出することができる。なお、以下の説明において、加速度センサ７０１の特性として、加速度センサ７０１から出力される加速度データは、当該加速度センサ７０１に加えられる加速度（つまり実際に加速する方向や減速する方向）とは真逆方向の加速度を示すデータが出力されるものとする。すなわち、加速度センサ７０１の加速による慣性力に応じた加速度データが出力されるものである。また、コントローラ７静止時に加速度センサ７０１に加わる重力加速度は、重力方向と同じ方向の加速度データとして出力されることになる。
【００８８】
図９〜図１３は、上記振り方向に応じて行われるゲーム処理や情報処理の一例を示す図である。ゲーム処理の一例として、モニタ２に表示されるオブジェクトを上記振り方向に応じて動かす処理（モニタ２に表示された仮想ゲーム空間におけるバレーボールのレシーブ方向を変える、モニタ２に表示された仮想ゲーム空間における剣を振り動かす、仮想ゲーム空間に配置された物体を切断する、仮想ゲーム空間に配置された物を動かす等）や上記振り方向に応じてモニタ２に設けられたスピーカ２ａやコントローラ７に設けられたスピーカ７０６から音を発生させたりする。また、ゲーム処理とは異なった情報処理の一例として、上記振り方向に応じてディスプレイに表示されたブラウザのジェスチャー（ウインドウを移動させる、ウインドウを閉じる、ページをめくる等）を行う。
【００８９】
例えば、図９においては、仮想ゲーム空間に配置されたバレーボールプレイヤの腕オブジェクトＯＢＪが表示されている。そして、プレイヤは、バレーボールにおけるレシーブをするようにコントローラ７を両手で把持して操作する。この場合、両手で把持されたコントローラ７の向きが変わることに応じて、仮想ゲーム空間内においてコントローラ７の向きが変わる方向（振り方向）に相当する方向に、腕オブジェクトＯＢＪの腕の方向を変える。図９においては、仮想ゲーム空間において右方向からボールオブジェクトＢが近づいてきたことに応じて、プレイヤがコントローラ７の向きを左から右へ変えている。このコントローラ７の向きが変わることに応じて、腕オブジェクトＯＢＪの腕の方向が左から右へ変わり、当該腕オブジェクトＯＢＪによってボールオブジェクトＢがレシーブされている。
【００９０】
また、図１０においては、モニタ２に仮想ゲーム空間に配置された剣オブジェクトＯＢＪが表示されている。そして、剣オブジェクトＯＢＪは、コントローラ７が振られることに応じて、仮想ゲーム空間内においてコントローラ７の振り方向に相当する方向に振り動かされる。
【００９１】
また、図１１Ａにおいては、モニタ２に仮想ゲーム空間に配置された丸太オブジェクトＯＢＪが表示されている。そして、図１１Ｂに示すように丸太オブジェクトＯＢＪは、コントローラ７が振られることに応じて、仮想ゲーム空間内におけるコントローラ７の振り方向に相当する方向に切断され、丸太オブジェクトＯＢＪ１およびＯＢＪ２に分離して移動する。このとき、モニタ２には、振り方向に応じて切断する被切断体として丸太オブジェクトＯＢＪ１およびＯＢＪ２が表示されるが、当該被切断体を切断するオブジェクト（例えば、剣、刀、斧等の刃物オブジェクト）は、モニタ２に表示されなくてもかまわない。例えば、図１１Ｂの破線矢印で示すような被切断体を切断するオブジェクトの軌跡のみを表示してもいいし、被切断体の動き変化のみを表示してもかまわない。
【００９２】
また、図１２においては、モニタ２にブラウザ等で用いられるウインドウＷが表示されている。そして、ウインドウＷは、コントローラ７の向きが変わったり、振られたりすることに応じて、表示画面内においてコントローラ７の振り方向に相当する方向に移動する。
【００９３】
さらに、図１３においては、コントローラ７の向きが変わったり、振られたりすることに応じて、モニタ２のスピーカ２ａから音が発生する。スピーカ２ａからは、コントローラ７の振り方向に応じて異なった音が発生したり、振り方向に応じた一方のスピーカ２ａのみから音が発生したりする。
【００９４】
ここで、後述により明らかとなるが、上記振り方向を判定した後の経過時間は、当該振り方向を認識した信頼度として用いることができる。例えば、反応性を重視したいアプリケーションでは、上記経過時間が０に更新された直後（例えば、経過時間が０でなくなった瞬間等）に、判定された振り方向を用いてゲーム処理や情報処理等を行うことが可能である。また、より確実な振り方向を取得したいアプリケーションでは、経過時間がある時間以上経過することを待った後、判定された振り方向を用いてゲーム処理や情報処理等を行うことが可能である。
【００９５】
また、後述より明らかとなるが、本実施形態における振り方向の判定は、コントローラ７の向きを緩やかに変えるような弱い振り動作であっても、その振り方向を判定することができる。したがって、プレイヤがコントローラ７を両手で把持してコントローラ７の方向を変えるような操作等でも、その振り方向を判定することができる。また、コントローラ７を激しく振り動かすことができない子供や女性であっても、その振り方向を正確に判定することが可能である。
【００９６】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。まず、図１４を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図１４は、ゲーム装置本体５の外部メインメモリ１２および／または内部メインメモリ３５（以下、２つのメインメモリを総称して、単にメインメモリと記載する）に記憶される主なデータを示す図である。
【００９７】
図１４に示すように、メインメモリには、加速度データＤａ、重力成分ベクトルデータＤｂ、重力成分除去ベクトルデータＤｃ、各方向の加速大きさデータＤｄ、各方向の減速大きさデータＤｅ、減速ベクトルデータＤｆ、振り方向ベクトルデータＤｇ、認識経過時間データＤｈ、最大スピード記録データＤｉ、姿勢データＤｊ、および画像データＤｋ等が記憶される。なお、メインメモリには、図１４に示す情報に含まれるデータの他、ゲームに登場するオブジェクトＯＢＪや他のオブジェクト等に関するデータ（位置データ等）や仮想ゲーム空間に関するデータ（背景のデータ等）等、ゲーム処理に必要なデータが記憶される。
【００９８】
加速度データＤａは、コントローラ７に生じた加速度を示すデータであり、コントローラ７から送信データとして送信されてくる一連の操作情報に含まれる加速度データが格納される。この加速度データＤａには、加速度センサ７０１がＸ軸成分に対して検出した加速度ｒａｗＸを示すＸ軸方向加速度データＤａ１、およびＹ軸成分に対して検出した加速度ｒａｗＹを示すＹ軸方向加速度データＤａ２が含まれる。なお、ゲーム装置本体５に備える無線コントローラモジュール１９は、コントローラ７から所定周期（例えば、１／２００秒毎）に送信される操作情報に含まれる加速度データを受信し、無線コントローラモジュール１９に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた最新の加速度データがゲーム処理周期である１フレーム毎（例えば、１／６０秒毎）に読み出されて、メインメモリの加速度データＤａが更新される。
【００９９】
なお、上記操作情報には加速度センサ７０１がＺ軸成分に対して検出した加速度データも含まれているが、以降で説明する実施例はＸＹ軸方向でのみ振り方向を判定するために、加速度データＤａには加速度センサ７０１がＺ軸成分に対して検出した加速度ｒａｗＺを示すＺ軸方向加速度データを含ませていない。
【０１００】
また、後述する処理フローでは、加速度データＤａがゲーム処理周期である１フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コントローラ７からの送信周期毎に加速度データＤａを更新し、当該更新された加速度データをゲーム処理周期毎に利用する態様でもかまわない。この場合、加速度データＤａに記憶する加速度データＤａ１およびＤａ２を更新する周期と、ゲーム処理周期とが異なることになる。
【０１０１】
重力成分ベクトルデータＤｂは、コントローラ７に生じている重力成分の加速度をベクトル（重力成分ベクトル）で示すデータが格納される。具体的には、重力成分ベクトルデータＤｂは、重力成分ベクトルのＸ軸方向成分ｇｒａｖｉｔｙＸおよびＹ軸方向成分ｇｒａｖｉｔｙＹをそれぞれ示すデータが格納される。
【０１０２】
重力成分除去ベクトルデータＤｃは、コントローラ７に生じている加速度から当該コントローラ７に生じている重力成分を除いた加速度をベクトル（重力成分除去ベクトル）で示すデータが格納される。具体的には、重力成分除去ベクトルデータＤｃは、重力成分除去ベクトルのＸ軸方向成分ａｃｃＸおよびＹ軸方向成分ａｃｃＹをそれぞれ示すデータが格納される。
【０１０３】
各方向の加速大きさデータＤｄは、コントローラ７が実空間を移動する際の加速の大きさを示すデータが格納される。具体的には、振り方向を分析するためにＸＹ軸平面上にＮ個の方向（第０〜第Ｎ−１方向）が設定され、各方向（第ｎ方向）に対してそれぞれ加速大きさｐｌｕｓ（ｎ）が算出される。そして、第０〜第Ｎ−１方向に対してそれぞれ算出された加速大きさｐｌｕｓ（ｎ）を示すデータが、各方向の加速大きさデータＤｄに含まれる第０方向の加速大きさデータＤｄ（０）〜第Ｎ−１方向の加速大きさデータＤｄ（Ｎ−１）にそれぞれ格納される。
【０１０４】
各方向の減速大きさデータＤｅは、コントローラ７が実空間を移動する際の減速の大きさを示すデータが格納される。具体的には、上記第０〜第Ｎ−１方向が設定され、各方向（第ｎ方向）に対してそれぞれ減速大きさｍｉｎｕｓ（ｎ）が算出される。そして、第０〜第Ｎ−１方向に対してそれぞれ算出された減速大きさｍｉｎｕｓ（ｎ）を示すデータが、各方向の減速大きさデータＤｅに含まれる第０方向の減速大きさデータＤｅ（０）〜第Ｎ−１方向の減速大きさデータＤｅ（Ｎ−１）にそれぞれ格納される。
【０１０５】
減速ベクトルデータＤｆは、コントローラ７が実空間において減速している方向および大きさをベクトル（減速ベクトル）で示すデータが格納される。具体的には、減速ベクトルデータＤｆは、減速ベクトルのＸ軸方向成分ｓｕｍＸおよびＹ軸方向成分ｓｕｍＹをそれぞれ示すデータが格納される。
【０１０６】
振り方向ベクトルデータＤｇは、コントローラ７が動かされている振り方向ｄｉｒを示すデータが格納される。具体的には、振り方向ベクトルデータＤｇは、振り方向ｄｉｒを大きさ１の２次元ベクトルで示すデータが格納される。認識経過時間データＤｈは、振り方向ｄｉｒが算出された後の認識経過時間ｃｏｕｎｔを示すデータが格納される。最大スピード記録データＤｉは、一連の処理において減速ベクトルの大きさの最大値（最大スピード記録ｓｐｅｅｄ＿ｍａｘ）を示すデータが格納される。姿勢データＤｊは、静的な状態におけるコントローラ７の姿勢方向ｐｏｓを示すデータが格納される。具体的には、姿勢データＤｊは、コントローラ７に対してＸＹ軸平面上に作用する重力加速度の方向を姿勢方向ｐｏｓとし、姿勢方向ｐｏｓを大きさ１の２次元ベクトルで示すデータが格納される。
【０１０７】
画像データＤｋは、オブジェクト画像データＤｋ１等を含んでいる。オブジェクト画像データＤｋ１は、仮想ゲーム空間にオブジェクトＯＢＪを配置してゲーム画像を生成するためのデータである。
【０１０８】
次に、図１５〜図１８を参照して、ゲーム装置本体５において行われるゲーム処理の詳細を説明する。なお、図１５は、ゲーム装置本体５において実行されるゲーム処理の流れを示すフローチャートである。図１６は、図１５におけるステップ４４のコントローラの姿勢算出処理の詳細な動作を示すサブルーチンである。図１７は、図１５におけるステップ４７の減速ベクトル算出処理の詳細な動作を示すサブルーチンである。図１８は、図１５におけるステップ４８の振り方向ベクトル算出処理の詳細な動作を示すサブルーチンである。なお、図１５〜図１８に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ７の向きを変えたり振ったりすることに応じて、その振り方向を認識する処理について説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図１５〜図１８では、ＣＰＵ１０が実行する各ステップを「Ｓ」と略称する。
【０１０９】
ゲーム装置本体５の電源が投入されると、ゲーム装置本体５のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリに読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１５〜図１８に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【０１１０】
図１５において、ＣＰＵ１０は、ゲーム処理の初期化を行い（ステップ４１）、次のステップに処理を進める。例えば、上記ステップ４１におけるゲーム処理初期化では、仮想ゲーム空間において腕の方向を変えたり物を動かしたりするゲーム処理のとき、仮想ゲーム空間の設定やゲームオブジェクトの配置等の初期設定を行う。
【０１１１】
次に、ＣＰＵ１０は、認識処理の初期化を行い（ステップ４２）、次のステップに処理を進める。上記ステップ４２における認識処理の初期化処理では、コントローラ７の振り方向を算出するための各パラメータを初期化する。例えば、ＣＰＵ１０は、重力成分ベクトルデータＤｂに格納される重力成分ベクトルのＸ軸方向成分ｇｒａｖｉｔｙＸおよびＹ軸方向成分ｇｒａｖｉｔｙＹをそれぞれ０に設定する。ＣＰＵ１０は、重力成分除去ベクトルデータＤｃに格納されている重力成分除去ベクトルのＸ軸方向成分ａｃｃＸおよびＹ軸方向成分ａｃｃＹをそれぞれ０に設定する。ＣＰＵ１０は、第０方向の加速大きさデータＤｄ０〜第Ｎ−１方向の加速大きさデータＤｄ（Ｎ−１）にそれぞれ格納された加速大きさｐｌｕｓ（ｎ）をそれぞれ０に設定する。ＣＰＵ１０は、第０方向の減速大きさデータＤｅ０〜第Ｎ−１方向の減速大きさデータＤｅ（Ｎ−１）にそれぞれ格納された減速大きさｍｉｎｕｓ（ｎ）をそれぞれ０に設定する。ＣＰＵ１０は、減速ベクトルデータＤｆに格納された減速ベクトルのＸ軸方向成分ｓｕｍＸおよびＹ軸方向成分ｓｕｍＹをそれぞれ０に設定する。ＣＰＵ１０は、振り方向ベクトルデータＤｇおよび姿勢データＤｊに格納される振り方向ｄｉｒおよび姿勢方向ｐｏｓを、それぞれ所定方向に向いた長さ１の２次元ベクトルに設定する。ＣＰＵ１０は、最大スピード記録データＤｉに格納された最大スピード記録ｓｐｅｅｄ＿ｍａｘを０に設定する。そして、ＣＰＵ１０は、認識経過時間データＤｈに格納される認識経過時間ｃｏｕｎｔを０に設定する。
【０１１２】
次に、ＣＰＵ１０は、加速度ｒａｗＸおよびｒａｗＹを取得して（ステップ４３）、次のステップに処理を進める。例えば、ＣＰＵ１０は、コントローラ７から受信した最新の操作情報に含まれる加速度データが示す加速度を加速度ｒａｗＸおよびｒａｗＹとして加速度データＤａに格納する。具体的には、コントローラ７から受信した最新の操作情報に含まれるＸ軸方向の加速度データが示す加速度が、加速度ｒａｗＸとしてＸ軸方向加速度データＤａ１に格納される。また、最新の操作情報に含まれるＹ軸方向の加速度データが示す加速度が、加速度ｒａｗＹとしてＹ軸方向加速度データＤａ２に格納される。
【０１１３】
次に、ＣＰＵ１０は、コントローラ７の姿勢を算出する処理を行って（ステップ４４）、処理を次のステップに進める。以下、図１６を参照して、上記ステップ４４で行うコントローラ７の姿勢算出処理について説明する。
【０１１４】
図１６において、ＣＰＵ１０は、加速度データＤａに格納された加速度ｒａｗＸおよびｒａｗＹを参照して、コントローラ７が静的な状態にあるか否かを判断する（ステップ６１）。一例として、ＣＰＵ１０は、加速度ｒａｗＸおよびｒａｗＹの何れかの値が、重力加速度に相当する値以上を示している場合、コントローラ７が静的な状態にないと判断する。他の例として、ＣＰＵ１０は、加速度ｒａｗＸおよびｒａｗＹのそれぞれの変化量が全て所定値未満である場合、コントローラ７が静的な状態にあると判断する。加速度ｒａｗＸおよびｒａｗＹを参照してコントローラ７の静的な状態にあることを判定する方法は他にも考えられるが、上記ステップ６１においては他の方法を用いてコントローラ７の状態を判定してもかまわない。そして、ＣＰＵ１０は、コントローラ７が静的な状態にある場合、次のステップ６２に処理を進める。一方、ＣＰＵ１０は、コントローラ７が静的な状態にない場合、当該サブルーチンによる処理を終了する。
【０１１５】
ステップ６２において、ＣＰＵ１０は、加速度ｒａｗＸおよびｒａｗＹを用いて姿勢方向ｐｏｓを算出し姿勢データＤｊに格納して、当該サブルーチンによる処理を終了する。コントローラ７が静的な状態で配置されている場合、コントローラ７には重力加速度が作用する。この重力加速度がコントローラ７に作用している方向（姿勢方向ｐｏｓ）は、加速度ｒａｗＸおよびｒａｗＹの値から大きさ１の２次元ベクトルとして算出することが可能である。例えば、加速度ｒａｗＸ＝１Ｇ、ｒａｗＹ＝０の場合、コントローラ７の右側面が上方向に向いた状態でコントローラ７が水平に静置されていると判断することができ、姿勢方向ｐｏｓがＸ軸正方向となるまた、加速度ｒａｗＸ＝０、ｒａｗＹ＝−１Ｇの場合、コントローラ７の上面（十字キー７２ａが設けられている面）が上方向に向いた状態でコントローラ７が水平に静置されている（図３の状態）と判断することができ、姿勢方向ｐｏｓがＹ軸負方向となる。また、加速度ｒａｗＸ＝０、ｒａｗＹ＝０の場合、コントローラ７の前面が上または下方向、すなわちコントローラ７が鉛直方向に立てられた状態で静置されていると判断することができ、姿勢方向ｐｏｓがＺ軸正方向またはＺ軸負方向となる。
【０１１６】
また、加速度データＤａに３次元の加速度データ、すなわち加速度ｒａｗＸ、ｒａｗＹ、およびｒａｗＺが格納されている場合、さらに正確なコントローラ７の姿勢を判定することができる。この場合、コントローラ７に定義されたＸＹＺ軸に対する鉛直方向を示す大きさ１の３次元ベクトルを、姿勢方向ｐｏｓとして取得することが可能となる。例えば、ＣＰＵ１０は、コントローラ７に作用する重力加速度の方向を示す３次元の姿勢方向ｐｏｓを姿勢データＤｊに格納する。
【０１１７】
図１５に戻り、ステップ４４の姿勢算出処理の後、ＣＰＵ１０は、コントローラ７に生じている重力成分を算出し（ステップ４５）、次のステップに処理を進める。例えば、ＣＰＵ１０は、加速度データＤａに格納された加速度ｒａｗＸおよびｒａｗＹと、重力成分ベクトルデータＤｂに格納された重力成分ベクトルのＸ軸方向成分ｇｒａｖｉｔｙＸおよびＹ軸方向成分ｇｒａｖｉｔｙＹとを参照する。そして、ＣＰＵ１０は、新たなＸ軸方向成分ｇｒａｖｉｔｙＸおよびＹ軸方向成分ｇｒａｖｉｔｙＹを、それぞれ
ｇｒａｖｉｔｙＸ←ｇｒａｖｉｔｙＸ＋（ｒａｗＸ−ｇｒａｖｉｔｙＸ）＊Ｋ
ｇｒａｖｉｔｙＹ←ｇｒａｖｉｔｙＹ＋（ｒａｗＹ−ｇｒａｖｉｔｙＹ）＊Ｋ
で算出し、重力成分ベクトルデータＤｂを更新する。ここで、Ｋは追従係数であり、例えばＫ＝０．００７５に設定される。上記算出式によって、重力成分ベクトル（ｇｒａｖｉｔｙＸ，ｇｒａｖｉｔｙＹ）は、コントローラ７に作用している加速度ｒａｗＸおよびｒａｗＹのうち、常にコントローラ７に作用している加速度成分が抽出される。したがって、重力成分ベクトル（ｇｒａｖｉｔｙＸ，ｇｒａｖｉｔｙＹ）は、常にコントローラ７に作用している重力成分を示すパラメータとなる。
【０１１８】
次に、ＣＰＵ１０は、重力成分を除いた加速度成分（重力成分除去ベクトル）を算出し（ステップ４６）、次のステップに処理を進める。例えば、ＣＰＵ１０は、加速度データＤａに格納された加速度ｒａｗＸおよびｒａｗＹと、重力成分ベクトルデータＤｂに格納された重力成分ベクトルのＸ軸方向成分ｇｒａｖｉｔｙＸおよびＹ軸方向成分ｇｒａｖｉｔｙＹとを参照する。そして、ＣＰＵ１０は、新たな重力成分除去ベクトルのＸ軸方向成分ａｃｃＸおよびＹ軸方向成分ａｃｃＹをそれぞれ
ａｃｃＸ＝ｒａｗＸ−ｇｒａｖｉｔｙＸ
ａｃｃＹ＝ｒａｗＹ−ｇｒａｖｉｔｙＹ
で算出し、重力成分除去ベクトルデータＤｃを更新する。上記算出式から明らかなように、重力成分除去ベクトル（ａｃｃＸ，ａｃｃＹ）は、コントローラ７に作用している加速度ｒａｗＸおよびｒａｗＹから重力成分（すなわち、重力成分ベクトル（ｇｒａｖｉｔｙＸ，ｇｒａｖｉｔｙＹ））が除かれた加速度成分となり、例えばプレイヤがコントローラ７を動かすことによって生じる加速度成分を示すパラメータとなる。
【０１１９】
次に、ＣＰＵ１０は、減速ベクトル算出処理を行って（ステップ４７）、処理を次のステップに進める。以下、図１７を参照して、上記ステップ４７で行う減速ベクトル算出処理について説明する。
【０１２０】
図１７において、ＣＰＵ１０は、減速ベクトル算出処理における初期化を行い（ステップ８１）、次のステップに処理を進める。例えば、ＣＰＵ１０は、ループカウンタｎを０に初期化する。また、ＣＰＵ１０は、減速ベクトルデータＤｆに格納されているＸ軸方向成分ｓｕｍＸおよびＹ軸方向成分ｓｕｍＹをそれぞれ０に設定する。
【０１２１】
次に、ＣＰＵ１０は、第ｎ方向に対する加速大きさｐｌｕｓ（ｎ）および減速大きさｍｉｎｕｓ（ｎ）を減衰させ（ステップ８２）、次のステップに処理を進める。ここで、図１９に示すように、振り方向ｄｉｒを判定するためのＸＹ軸平面には、互いに異なるＮ個の方向が同じ角度間隔で設定される。図１９に示した一例では、Ｎ＝１６方向が２２．５°間隔でそれぞれ設定されており、それぞれの方向にｎ＝０〜１５が付番されている。そして、それらの方向のうち、第０方向（ｎ＝０）がＸ軸正方向に設定され、第４方向（ｎ＝４）がＹ軸正方向に設定されている。上記ステップ８２において、ＣＰＵ１０は、新たな第ｎ方向の加速大きさｐｌｕｓ（ｎ）および減速大きさｍｉｎｕｓ（ｎ）をそれぞれ
ｐｌｕｓ（ｎ）←ｐｌｕｓ（ｎ）＊ＤＡＭＰ
ｍｉｎｕｓ（ｎ）←ｍｉｎｕｓ（ｎ）＊ＤＡＭＰ
で算出し、第ｎ方向の加速大きさデータＤｄ（ｎ）および第ｎ方向の減速大きさデータＤｅ（ｎ）を更新する。ここで、ＤＡＭＰは減衰係数であり、例えばＤＡＭＰ＝０．９５で設定される。
【０１２２】
次に、ＣＰＵ１０は、第ｎ方向を示す長さ１の方向ベクトルを算出し（ステップ８３）、次のステップに処理を進める。具体的には、図１９に示すように、Ｘ軸正方向と第ｎ方向とが成す角度ｄｅｇは、
ｄｅｇ＝３６０＊ｎ／Ｎ
で算出される。そして、第ｎ方向を示す方向ベクトルのＸ軸成分ｖｅｃＸおよびＹ軸成分ｖｅｃＹは、それぞれ
ｖｅｃＸ＝ｃｏｓ（ｄｅｇ）
ｖｅｃＹ＝ｓｉｎ（ｄｅｇ）
で算出される。
【０１２３】
次に、ＣＰＵ１０は、重力成分除去ベクトル（ａｃｃＸ，ａｃｃＹ）と方向ベクトル（ｖｅｃＸ，ｖｅｃＹ）との内積ｄｐを算出し（ステップ８４）、次のステップに処理を進める。具体的には、内積ｄｐは、
ｄｐ＝ａｃｃＸ＊ｖｅｃＸ＋ａｃｃＹ＊ｖｅｃＹ
で算出される。この内積ｄｐによって、重力成分除去ベクトル（ａｃｃＸ，ａｃｃＹ）における第ｎ方向成分が算出される。
【０１２４】
次に、ＣＰＵ１０は、内積ｄｐが負の値であるか否かを判断する（ステップ８５）。ここで、上記ステップ８４で算出された内積ｄｐは、重力成分除去ベクトル（ａｃｃＸ，ａｃｃＹ）における第ｎ方向成分を示している。一方、上述したように、加速度センサ７０１から出力される加速度データは、コントローラ７の動きに応じて作用する加速度（つまり実際にコントローラ７が加速する方向や減速する方向）とは真逆方向の加速度を示すデータが出力される。つまり、内積ｄｐが正の値であれば第ｎ方向に負の加速度が作用している（例えば、第ｎ方向に対して減速しながら動いている、または第ｎ方向の逆方向に対して加速しながら動いている）ことになる。また、内積ｄｐが負の値であれば第ｎ方向に正の加速度が作用している（例えば、第ｎ方向に対して加速しながら動いている、または第ｎ方向の逆方向に対して減速しながら動いている）ことになる。そして、ＣＰＵ１０は、内積ｄｐ＜０の場合、次のステップ８９に処理を進める。一方、ＣＰＵ１０は、内積ｄｐ≧０の場合、次のステップ８６に処理を進める。
【０１２５】
ステップ８６において、ＣＰＵ１０は、第ｎ方向の減速大きさｍｉｎｕｓ（ｎ）に内積ｄｐを加算して、次のステップに処理を進める。具体的には、ＣＰＵ１０は、新たな第ｎ方向の減速大きさｍｉｎｕｓ（ｎ）を
ｍｉｎｕｓ（ｎ）←ｍｉｎｕｓ（ｎ）＋ｄｐ
で算出して、第ｎ方向の減速大きさデータＤｅ（ｎ）を更新する。
【０１２６】
次に、ＣＰＵ１０は、第ｎ方向の減速大きさｍｉｎｕｓ（ｎ）が第ｎ方向の加速大きさｐｌｕｓ（ｎ）より大きいか否かを判断する（ステップ８７）。そして、ＣＰＵ１０は、ｍｉｎｕｓ（ｎ）＞ｐｌｕｓ（ｎ）の場合、減速大きさｍｉｎｕｓ（ｎ）と加速大きさｐｌｕｓ（ｎ）とが等しくなるように減速大きさｍｉｎｕｓ（ｎ）を変更し（ステップ８８）、次のステップ９０に処理を進める。具体的には、ステップ８８において、ＣＰＵ１０は、
ｍｉｎｕｓ（ｎ）←ｐｌｕｓ（ｎ）
として、第ｎ方向の減速大きさデータＤｅ（ｎ）を更新する。このステップ８８によって、減速大きさｍｉｎｕｓ（ｎ）は、同じ第ｎ方向の加速大きさｐｌｕｓ（ｎ）を超えないように制限されるため、減速直前に加速があった場合のみ減速大きさｍｉｎｕｓ（ｎ）が加算される、すなわちコントローラ７の所定方向への加速および減速をセットとして処理されていることになる。
【０１２７】
一方、上記ステップ８５において第ｎ方向に加速していると判断されたとき、ＣＰＵ１０は、第ｎ方向の加速大きさｐｌｕｓ（ｎ）から内積ｄｐを減算して（ステップ８９）、次のステップ９０に処理を進める。具体的には、ＣＰＵ１０は、新たな第ｎ方向の加速大きさｐｌｕｓ（ｎ）を
ｐｌｕｓ（ｎ）←ｐｌｕｓ（ｎ）−ｄｐ
で算出して、第ｎ方向の加速大きさデータＤｄ（ｎ）を更新する。ここで、上述したように、第ｎ方向に加速しているときは、内積ｄｐが負の値である。したがって、加速大きさｐｌｕｓ（ｎ）は、結果的に内積ｄｐの絶対値が加算されていくことになる。
【０１２８】
ステップ９０において、減速ベクトルに第ｎ方向の減速大きさｍｉｎｕｓ（ｎ）を加算して、次のステップに処理を進める。例えば、ＣＰＵ１０は、減速ベクトルデータＤｆに格納された減速ベクトルのＸ軸方向成分ｓｕｍＸおよびＹ軸方向成分ｓｕｍＹを参照する。そして、ＣＰＵ１０は、新たなＸ軸方向成分ｓｕｍＸおよびＹ軸方向成分ｓｕｍＹをそれぞれ
ｓｕｍＸ←ｓｕｍＸ＋ｖｅｃＸ＊ｍｉｎｕｓ（ｎ）
ｓｕｍＹ←ｓｕｍＹ＋ｖｅｃＹ＊ｍｉｎｕｓ（ｎ）
で算出し、減速ベクトルデータＤｆを更新する。
【０１２９】
次に、ＣＰＵ１０は、ループカウンタｎに１を加算して（ステップ９１）、全方向に対する処理が終了したか、すなわちｎ＝Ｎか否かを判断する（ステップ９２）。そして、ＣＰＵ１０は、全方向に対する処理が終了した場合、当該サブルーチンによる処理を終了する。一方、ＣＰＵ１０は、全方向に対する処理が終了していない場合、上記ステップ８２に戻って、処理を繰り返す。
【０１３０】
図１５に戻り、上記ステップ４７の減速ベクトル算出処理の後、ＣＰＵ１０は、振り方向ベクトル算出処理を行い（ステップ４８）、次のステップに処理を進める。以下、図１８を参照して、上記ステップ４８で行う振り方向ベクトル算出処理について説明する。
【０１３１】
図１８において、ＣＰＵ１０は、減速ベクトルの大きさｓｐｅｅｄを算出し（ステップ１０１）、処理を次のステップに進める。例えば、ＣＰＵ１０は、減速ベクトルデータＤｆに格納されたＸ軸方向成分ｓｕｍＸおよびＹ軸方向成分ｓｕｍＹを参照して、減速ベクトルの大きさｓｐｅｅｄを
【数１】
2008276615.tif 000003
で算出する。
【０１３２】
次に、ＣＰＵ１０は、振り方向を認識するための認識条件を満たしているか否かを判断する（ステップ１０２）。例えば、ＣＰＵ１０は、上記ステップ１０１で算出された減速ベクトルの大きさｓｐｅｅｄが後述する最大スピード記録ｓｐｅｅｄ＿ｍａｘより大きく、かつ、当該大きさｓｐｅｅｄが所定値以上である場合、認識条件を満たしていると判断する。ここで、上記所定値は、振り方向ｄｉｒを認識するために最低限必要な減速ベクトルの大きさであり、例えば０．５に設定される。そして、ＣＰＵ１０は、認識条件を満たしている場合、次のステップ１０３に処理を進める。一方、ＣＰＵ１０は、認識条件を満たしていない場合、処理を次のステップ１０６に処理を進める。
【０１３３】
ステップ１０３において、ＣＰＵ１０は、現在の減速ベクトルの向きを振り方向ｄｉｒとして算出し、次のステップに処理を進める。例えば、ＣＰＵ１０は、現在減速ベクトルデータＤｆに格納されている減速ベクトル（ｓｕｍＸ，ｓｕｍＹ）を、長さ１に正規化した２次元ベクトルを算出し、当該２次元ベクトルを振り方向ｄｉｒとして、振り方向ベクトルデータＤｇを更新する。
【０１３４】
次に、ＣＰＵ１０は、上記ステップ１０１で算出された減速ベクトルの大きさｓｐｅｅｄを最大スピード記録ｓｐｅｅｄ＿ｍａｘとして、最大スピード記録データＤｉを更新する（ステップ１０４）。そして、ＣＰＵ１０は、認識経過時間ｃを０に初期化して、認識経過時間データＤｈを更新し（ステップ１０５）、当該サブルーチンによる処理を終了する。
【０１３５】
一方、上記ステップ１０２において認識条件を満たしていないと判断された場合、ＣＰＵ１０は、最大スピード記録ｓｐｅｅｄ＿ｍａｘを所定量減衰させて、最大スピード記録データＤｉを更新し（ステップ１０６）、処理を次のステップに進める。例えば、ＣＰＵ１０は、現在最大スピード記録データＤｉに格納されている最大スピード記録ｓｐｅｅｄ＿ｍａｘを参照し、当該最大スピード記録ｓｐｅｅｄ＿ｍａｘに所定の減衰係数（１未満の正の値であり、例えば０．９８）を乗算して新たな最大スピード記録ｓｐｅｅｄ＿ｍａｘを算出して最大スピード記録データＤｉを更新する。
【０１３６】
次に、ＣＰＵ１０は、認識経過時間ｃのカウントを行い（ステップ１０７）、当該サブルーチンによる処理を終了する。例えば、ＣＰＵ１０は、認識経過時間データＤｈに格納されている認識経過時間ｃに１を加算して、認識経過時間ｃを更新する。つまり、認識経過時間ｃは、上記ステップ１０５において振り方向ｄｉｒが算出されると０に初期化され、認識条件を満たさない場合にカウントが更新されるパラメータである。
【０１３７】
図１５に戻り、上記ステップ４８の振り方向ベクトル算出処理の後、ＣＰＵ１０は、ゲームメイン処理を行い（ステップ４９）、処理を次のステップに進める。ＣＰＵ１０は、上記ステップ４１〜ステップ４８における処理で算出された振り方向ｄｉｒ、認識経過時間ｃ、および姿勢方向ｐｏｓを用いて、ゲームメイン処理することが可能である。例えば、ゲームメイン処理において、仮想ゲーム空間におけるオブジェクトを振り方向ｄｉｒに応じて動かす処理（腕の方向を変える、剣を振り動かす、物を動かす等）や、振り方向ｄｉｒに応じてスピーカ２ａやコントローラ７に設けられたスピーカ７０６から音を発生させたりする。
【０１３８】
次に、ＣＰＵ１０は、ゲームを終了するか否かを判断する（ステップ５０）。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。ＣＰＵ１０は、ゲームを終了しない場合に上記ステップ４３に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【０１３９】
ここで、上述した加速度データ処理における基本原理について説明する。図２０に示すように、コントローラ７を静止状態からＸ軸正方向へ動かして再び静止させた場合、当該コントローラ７にはＸ軸正方向への加速度（加速状態）が生じた後、Ｘ軸負方向への加速度（減速状態）が生じる。一方、コントローラ７に内蔵されている加速度センサ７０１は、当該加速度センサ７０１に加えられる加速度とは真逆方向の加速度を示すデータを出力する。したがって、コントローラ７を静止状態からＸ軸正方向へ動かして再び静止させた場合、加速度センサ７０１は、Ｘ軸負方向への加速度を示す加速度データを出力した後、Ｘ軸正方向への加速度を示す加速度データを出力する。なお、コントローラ７には、上述した動きに応じた加速度の他に重力加速度が常に作用しているが、図２０においては説明を簡単にするために重力加速度を省略している。
【０１４０】
ここで、Ｘ軸正方向への加速のみに注目して振り方向ｄｉｒを判断すると、コントローラ７がＸ軸負方向へ動かされたときの加速後の減速との区別が困難となることがあり、振り方向ｄｉｒの検出精度を上げることが困難となる。一方、上述した実施形態では、上記加速のみに注目するのではなく、加速の直後に生じる減速をセットにすることによって減速を特定して振り方向ｄｉｒを認識している。
【０１４１】
例えば、上述した実施形態では、所定方向に生じる正の加速度の大きさおよび負の加速度の大きさをそれぞれ累積する正の変数を設定し、それぞれ一定割合で減衰させている。そして、一方の変数が他方の変数を超えないように制御することによって、加速の直後に生じた減速をセットにして一方の変数が減速を表すものとして特定する。また、所定方向における減速の変数が大きいほど、当該所定方向へコントローラ７を振った可能性が高いと考えることができる。このような減速に注目した判定を複数方向（実施形態では図１９に示す１６方向）に対して行って総和することによって、その時点における減速ベクトルが算出される。例えば、図２０の場合は、Ｘ軸正方向の減速ベクトルが算出されるので、Ｘ軸正方向の振り方向ｄｉｒが認識される。このように加速直後に生じる減速に注目して振り方向ｄｉｒを認識することによって、加減速の区別を正確に行うことができるため、振り方向ｄｉｒの検出精度を上げること可能となる。したがって、上述した振り方向ｄｉｒの認識は、コントローラ７の向きを緩やかに変えるような弱い振り動作であっても、その振り方向ｄｉｒを認識することができる。
【０１４２】
また、減速ベクトルは、常に減衰される架空の２次元ベクトルであり（ステップ８２参照）、減速大きさｍｉｎｕｓ（ｎ）を累積していくことによってその大きさｓｐｅｅｄが大きくなる（ステップ９０参照）。そして、減速ベクトルの大きさｓｐｅｅｄが所定値以上に到達したとき、その減速ベクトルの方向を振り方向ｄｉｒとして認識する。つまり、減速ベクトルが常に減衰されるため、大きさｓｐｅｅｄを上記所定値以上にするためには同じ方向に生じる減速の加速度を継続的に累積することが必要となる。この累積される値が加速度センサ７０１から出力される加速度データから得られるため、加速度センサ７０１が検出する減速の加速度が同じような傾向で続いたときに、振り方向ｄｉｒの認識が行われることになる。このように減速の加速度が同じような傾向となるケースは、加速度センサ７０１（すなわち、コントローラ７）に直線状の動きを与えたときの減速時に発生しやすい。具体的には、加速度センサ７０１に直線状の動きを与えたとき、当該加速度センサ７０１が検出する加速および減速加速度自体も直線方向に変化するため、その減速加速度も同じような傾向が続くことになる。つまり、上述した処理動作では、プレイヤがコントローラ７を直線状に動かす動作を行ったとき、その動作に応じた振り方向ｄｉｒが認識されやすいことになる。
【０１４３】
さらに、上記ステップ１０２およびステップ１０６においては、常時所定割合で減衰する最大スピード記録ｓｐｅｅｄ＿ｍａｘと新たに得られた大きさｓｐｅｅｄとの比較に基づいて、認識条件を設定している。例えば、振り方向ｄｉｒが算出された直後に最大スピード記録ｓｐｅｅｄ＿ｍａｘを極端に小さな値に初期化すると、当該振り方向ｄｉｒの算出後に生じるコントローラ７の小さな動きを認識してしまい、誤認識する可能性が高くなる。例えば、コントローラ７を大きく振り動かした後にコントローラ７の移動を止める動作等を認識することになり、プレイヤがコントローラ７を振り動かした方向とは異なった手ぶれ等の不安定な動きを誤認識することも考えられる。一方、更新された最大スピード記録ｓｐｅｅｄ＿ｍａｘをそのまま長時間維持すると、新たな振り方向ｄｉｒを算出するためには維持されている最大スピード記録ｓｐｅｅｄ＿ｍａｘを超えるような大きさｓｐｅｅｄに達する減速ベクトルを得る必要がある。つまり、前回認識された振りスピード以上の速さでコントローラ７を振り動かして減速させることが必要となり、やがて必要な認識動作が不可能となる。上記ステップ１０６においては、最大スピード記録ｓｐｅｅｄ＿ｍａｘに１未満の１に近い正の値（例えば、０．９８）を減衰率として乗算しているため、上述したように頻繁な認識が生じることなく次の認識動作も可能としており、安定した振り方向の認識を行うことができる。
【０１４４】
また、上記ステップ４９におけるゲームメイン処理においては、上述した加速度データ処理で得られたパラメータを様々な態様で利用することができる。第１の例として、振り方向ｄｉｒを用いれば、コントローラ７に定義された座標軸（図３および図４参照）において、プレイヤがどの方向にコントローラ７を動かしているのかが推定できる。例えば、振り方向ｄｉｒを用いれば、コントローラ７がその本体を基準としたどの方向に動かされているのか（例えば、コントローラ７の上面方向や正面方向など）が推定できる。このようなコントローラ７の本体を基準とした振り方向を、ゲームメイン処理に用いることができる。
【０１４５】
第２の例として、振り方向ｄｉｒおよび認識経過時間ｃを用いれば、算出された振り方向ｄｉｒの信頼度を考慮したゲームメイン処理が可能となる。上記処理動作より明らかなように、認識経過時間ｃは、新たな振り方向ｄｉｒが算出されたときに０に初期化されるパラメータである。つまり、認識経過時間ｃは、プレイヤがコントローラ７を動かす方向が変化する毎に初期化される。一般的に、プレイヤがコントローラ７を第１の方向に振る場合、当該第１の方向の逆方向へその振り動作直前にコントローラ７を動かす傾向がある（いわゆる、振りかぶり動作）。このような振りかぶり動作がコントローラ７に与えられたとき、まず振りかぶり動作中に上記第１の方向とは逆方向の振り方向ｄｉｒが算出された後に、上記第１の方向を示す振り方向ｄｉｒが算出される。このような本来プレイヤが意図していない振りかぶり動作等を認識しないようにする場合は、振り方向ｄｉｒが算出された後にある程度の経過時間を待つことが好ましい。つまり、コントローラ７を動かした際の反応性を重視したいゲームでは、認識経過時間ｃが０でなくなった瞬間等に、算出された振り方向ｄｉｒを用いてゲームメイン処理を行うことが可能である。また、コントローラ７を動かした際により確実な振り方向ｄｉｒを取得したいゲームでは、認識経過時間ｃがあるカウント以上に達したときに算出されている振り方向ｄｉｒを用いてゲームメイン処理を行うことが可能である。
【０１４６】
第３の例として、振り方向ｄｉｒおよび姿勢方向ｐｏｓを用いれば、プレイヤがコントローラ７を操作している実空間において、プレイヤが当該実空間のどの方向にコントローラ７を動かしているのかが推定できる。例えば、上述したように、振り方向ｄｉｒを用いれば、コントローラ７がその本体を基準としたどの方向に動かされているのかが推定できる。一方、姿勢方向ｐｏｓは、プレイヤがコントローラ７を動かす前時点等において、コントローラ７に対して作用する重力加速度の方向を示しており、コントローラ７の本体に対する実空間の鉛直方向を示すデータとなる、したがって、振り方向ｄｉｒおよび姿勢方向ｐｏｓを用いれば、コントローラ７が実空間においてどの方向に動かされているか（例えば、実空間における水平方向や上下方向等）を推定することができる。また、コントローラ７を操作する基本姿勢や方向（コントローラ７でモニタ２を指し示すようにその正面をモニタ２に向ける、コントローラ７を横持ちしてその側面をモニタ２に向ける等）を設定した場合、プレイヤがコントローラ７を上下方向、左右方向、前後方向等のどの方向に動かしているか推定することができる。さらに、認識経過時間ｃを用いれば、上述と同様に振り方向ｄｉｒの信頼度を考慮したゲームメイン処理が可能となることは言うまでもない。また、上記ステップ１０３において振り方向ｄｉｒを算出する際、姿勢方向ｐｏｓを用いてコントローラ７が実空間において動かされる方向を算出（つまり、鉛直方向を基準としたコントローラ７の移動方向を算出）し、当該方向を振り方向ｄｉｒとして、振り方向ベクトルデータＤｇを更新してもかまわない。
【０１４７】
また、上述した姿勢方向ｐｏｓは、重力成分ベクトル（ｇｒａｖｉｔｙＸ，ｇｒａｖｉｔｙＹ）で代用してもかまわない。上述したように重力成分ベクトル（ｇｒａｖｉｔｙＸ，ｇｒａｖｉｔｙＹ）は、コントローラ７に作用している加速度ｒａｗＸおよびｒａｗＹのうち、常にコントローラ７に作用している加速度成分を示すパラメータであり、コントローラ７に作用する重力加速度の方向として用いることができる。一方、姿勢方向ｐｏｓは、静的なコントローラ７に対してＸＹ軸平面上に作用する重力加速度の方向を示す大きさ１の２次元ベクトルでパラメータである。したがって、重力成分ベクトル（ｇｒａｖｉｔｙＸ，ｇｒａｖｉｔｙＹ）の方向を示す大きさ１の２次元ベクトルを算出することによって、当該２次元ベクトルを上述した姿勢方向ｐｏｓと同様に取り扱うことができる。この場合、図１５で示したステップ４４の処理が不要となる。
【０１４８】
このように、上記実施形態に係るゲーム装置３は、加速度センサ７０１を搭載したコントローラ７において、検出された加速度から得られる減速ベクトルを用いることによって、コントローラ７が動く方向や振り方向を認識する応答性を向上させながら高精度で判定することができる。
【０１４９】
なお、上述した加速度データ処理では、コントローラ７の振り方向ｄｉｒおよび姿勢方向ｐｏｓを２次元ベクトルで認識しているが、コントローラ７が振られた振り方向ｄｉｒおよび姿勢方向ｐｏｓを３次元で取得することも可能である。この場合、コントローラ７から得られる操作情報には加速度センサ７０１がＺ軸成分に対して検出した加速度データも含まれており、上記ステップ４３において加速度データＤａにＺ軸成分に対して検出した加速度ｒａｗＺも格納する。また、上述した減速ベクトルを算出するために加減速評価する複数方向（すなわち、第０方向〜第Ｎ−１方向）は、図１９に示したようにＸＹ軸平面上に設定したが、３次元の振り方向ｄｉｒを認識する場合にはＸＹＺ軸空間に対して３次元的に複数方向を設定する。そして、各ステップを２次元処理から３次元処理に変更すれば、上述した認識処理と同様に振り方向ｄｉｒおよび姿勢方向ｐｏｓを３次元で取得することが可能となる。
【０１５０】
また、上述した減速ベクトルを算出するために加減速評価する複数方向は、図１９に示した一例ではＸＹ軸平面上に１６方向設定したが、当該方向の設定数は１６未満でも１７以上でもかまわない。上記複数方向を設定する数に応じて減速ベクトルの方向、すなわち振り方向ｄｉｒの方向を認識可能な精度と処理負荷とが変化する。したがって、上記複数方向の設定数は、希望する振り方向ｄｉｒの認識精度と処理負荷とのバランスを考慮して適切な数に設定すればよい。
【０１５１】
また、上述した減速ベクトルは、図１９に示したＸＹ軸平面上の複数方向毎に算出された減速大きさｍｉｎｕｓ（ｎ）を全て加算して算出されている。この加算処理によって、減速ベクトルの方向が設定された複数方向に限定されずにアナログ的な方向となり、コントローラ７の移動方向に対して最も特徴的な方向が算出される。また、上記複数方向の減速大きさｍｉｎｕｓ（ｎ）のうち、何れか１つにノイズが生じたとしても、そのノイズが生じた方向をコントローラ７の移動方向と誤認することなく減速ベクトルが算出できる。しかしながら、これらの効果を期待しない場合、他の方法を用いて減速ベクトルを算出してもかまわない。例えば、複数方向毎に算出された減速大きさｍｉｎｕｓ（ｎ）において、最も大きな減速大きさｍｉｎｕｓ（ｎ）を示す方向を減速ベクトルの方向として、その減速大きさｍｉｎｕｓ（ｎ）の値を減速ベクトルの大きさとしてもかまわない。
【０１５２】
また、上述した説明では、コントローラ７の向きを変えたり振り動かしたりする動作に応じて処理を行う据置型のゲーム装置本体５に本願発明を適用した例を説明したが、携帯ゲーム装置にも適用することができる。例えば、携帯ゲーム装置の本体に加速度センサを搭載し、当該本体の向きを変えたり振り動かされたりしたときに、当該加速度センサの出力を用いて所定の処理を実行する。このように本願発明を適用することで、携帯ゲーム装置等でゲームを行うには好適である。
【０１５３】
また、上述した説明では、据置型や携帯型のゲーム装置に本願発明を適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置や加速度センサが搭載された本体を有する情報処理装置にも適用することができる。例えば、前者の情報処理装置では、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が表示しているオブジェクトやウインドウの状態や位置を制御する等、入力装置に生じる加速度に基づいて様々な処理を行うことができる。また、後者の情報処理装置は、本体に加わる加速度を検出する加速度センサを搭載し、当該加速度センサから出力される加速度データに応じた処理を実行する情報処理装置であればよく、例えば一般的なパーソナルコンピュータ、携帯電話機、ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）等のデバイスにも適用することができる。
【０１５４】
例えば、他の電話機との間で無線通信する通信部を備えた携帯電話機の場合には、携帯電話機本体に加速度センサが搭載される。そして、携帯電話機の向きを変えたり振り動かされたりしたときに、携帯電話機に搭載された加速度センサからの出力値を用いて所定の処理を実行する。このように本願発明を適用することで、携帯電話機等でゲームを行うには好適である。
【０１５５】
また、上述した説明では、コントローラ７とゲーム装置本体５とが無線通信によって接続された態様を用いたが、コントローラ７とゲーム装置本体５とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ７に接続されたケーブルをゲーム装置本体５の接続端子に接続する。
【０１５６】
また、上述したコントローラ７の形状や、それらに設けられている操作部７２の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した処理で用いられる係数および判定値等は、単なる一例に過ぎず他の値であっても、本発明を実現できることは言うまでもない。
【０１５７】
また、本発明の情報処理プログラムは、光ディスク４等の外部記憶媒体を通じてゲーム装置本体５に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体５に供給されてもよい。また、情報処理プログラムは、ゲーム装置本体５内部の不揮発性記憶装置に予め記録されていてもよい。なお、情報処理プログラムを記憶する情報記憶媒体としては、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【０１５８】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【産業上の利用可能性】
【０１５９】
本発明に係る情報処理プログラムおよび情報処理装置は、ユーザの動作を迅速に処理に反映させることができ、ゲームコントローラ等の入力装置に与えられる動作に応じてゲーム処理や情報処理等を行うプログラムおよび装置や、本体に与えられる動作に応じてゲーム処理や情報処理等を行うプログラムおよび装置として有用である。
【図面の簡単な説明】
【０１６０】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体５の機能ブロック図
【図３】図１のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面前方から見た斜視図
【図５】図３のコントローラ７の上筐体を外した状態を示す斜視図
【図６】図４のコントローラ７の下筐体を外した状態を示す斜視図
【図７】図３のコントローラ７の構成を示すブロック図
【図８】図３のコントローラ７を用いてゲーム操作するときの状態を概説する図解図
【図９】コントローラ７の振り方向に応じて行われるゲーム処理や情報処理の第１の例を示す図
【図１０】コントローラ７の振り方向に応じて行われるゲーム処理や情報処理の第２の例を示す図
【図１１Ａ】コントローラ７の振り方向に応じて行われるゲーム処理や情報処理の第３の例におけるオブジェクト切断前を示す図
【図１１Ｂ】コントローラ７の振り方向に応じて行われるゲーム処理や情報処理の第３の例におけるオブジェクト切断後を示す図
【図１２】コントローラ７の振り方向に応じて行われるゲーム処理や情報処理の第４の例を示す図
【図１３】コントローラ７の振り方向に応じて行われるゲーム処理や情報処理の第５の例を示す図
【図１４】ゲーム装置本体５のメインメモリに記憶される主なデータを示す図
【図１５】ゲーム装置本体５において実行されるゲーム処理の流れを示すフローチャート
【図１６】図１５におけるステップ４４のコントローラの姿勢算出処理の詳細な動作を示すサブルーチン
【図１７】図１５におけるステップ４７の減速ベクトル算出処理の詳細な動作を示すサブルーチン
【図１８】図１５におけるステップ４８の振り方向ベクトル算出処理の詳細な動作を示すサブルーチン
【図１９】振り方向ｄｉｒを判定するために設定されるＮ個の方向の一例を示す図
【図２０】コントローラ７を静止状態からＸ軸正方向へ動かして再び静止させた一例を示す図
【符号の説明】
【０１６１】
１…ゲームシステム
２…モニタ
２ａ、７０６…スピーカ
３…ゲーム装置
４…光ディスク
５…ゲーム装置本体
１０…ＣＰＵ
１１…システムＬＳＩ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２、２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
３１…入出力プロセッサ
３２…ＧＰＵ
３３…ＤＳＰ
３４…ＶＲＡＭ
３５…内部メインメモリ
７…コントローラ
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
８…マーカ
【図１】
2008276615.tif 000004
【図２】
2008276615.tif 000005
【図３】
2008276615.tif 000006
【図４】
2008276615.tif 000007
【図５】
2008276615.tif 000008
【図６】
2008276615.tif 000009
【図７】
2008276615.tif 000010
【図８】
2008276615.tif 000011
【図９】
2008276615.tif 000012
【図１０】
2008276615.tif 000013
【図１１Ａ】
2008276615.tif 000014
【図１１Ｂ】
2008276615.tif 000015
【図１２】
2008276615.tif 000016
【図１３】
2008276615.tif 000017
【図１４】
2008276615.tif 000018
【図１５】
2008276615.tif 000019
【図１６】
2008276615.tif 000020
【図１７】
2008276615.tif 000021
【図１８】
2008276615.tif 000022
【図１９】
2008276615.tif 000023
【図２０】
2008276615.tif 000024