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