(57)【要約】【課題】プレイヤが入力装置等に衝撃を加える動作を正確に検出してゲームに反映させることができるゲームプログラムおよびゲーム装置を提供すること。【解決手段】加速度取得ステップ（Ｓ２）で、入力装置の状態に応じて増減する加速度値を入力値として逐次取得する。増減方向反転検出ステップ（Ｓ３、Ｓ１７）で、加速度値の増減方向が反転したことを検出する。加速度差算出ステップ（Ｓ４１〜Ｓ４４）で、増減方向が反転したとき、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する。そして、ゲーム処理ステップ（Ｓ１２〜Ｓ１５）で、算出された差が所定値以上であれば第１のゲーム処理を実行し、所定値未満であるときは第１のゲーム処理とは異なる第２のゲーム処理を実行する。【選択図】図１６
2008036167.tif 000002
【特許請求の範囲】
【請求項１】
入力装置自体の動きに応じて変化する入力値に基づいたゲーム処理をゲーム装置のコンピュータに実行させるゲームプログラムであって、
前記入力装置に設けられた加速度センサの出力に基づいて、前記入力装置の状態に応じて増減する加速度値を前記入力値として逐次取得して記憶部に格納する加速度取得ステップと、
前記記憶部に格納されている加速度値に基づいて、前記加速度値の増減方向が反転したことを検出する増減方向反転検出ステップと、
前記増減方向が反転したとき、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する加速度差算出ステップと、
前記算出された差が所定値以上であれば第１のゲーム処理を実行し、所定値未満であるときは第１のゲーム処理とは異なる第２のゲーム処理を実行するゲーム処理ステップとを前記コンピュータに実行させる、ゲームプログラム。
【請求項２】
前記増減方向反転検出ステップは、
前記加速度値の増減方向が第１の方向から第２の方向に反転したことを検出する第１の反転検出ステップと、
前記第１の反転検出ステップにおける検出の後に、前記加速度値の増減方向が第２の方向から第１の方向に反転したことを検出する第２の反転検出ステップとを含み、
前記加速度差算出ステップにおいては、前記コンピュータは、前記第２の反転検出ステップにおいて増減方向の反転が検出されたときに、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する、請求項１に記載のゲームプログラム。
【請求項３】
前記加速度差算出ステップは、
前記第２の反転検知ステップにおいて検出された反転の直前に第１の時間間隔で取得された２つの加速度値の差である第１の差を算出する第１差算出ステップと、
前記第２の反転検出ステップにおいて検出された反転の直前に前記第１の時間間隔とは異なった時間間隔である第２の時間間隔で取得された２つの加速度値の差である第２の差を算出する第２差算出ステップとを含み、
前記ゲーム処理ステップにおいては、前記コンピュータは、前記第１差および第２差の少なくとも一方が所定値以上であれば前記第１のゲーム処理を実行し、前記第１の差および第２の差のいずれもが所定値未満であれば、前記第２のゲーム処理を行う、請求項２に記載のゲームプログラム。
【請求項４】
前記ゲームプログラムは、
前記第１の反転検出ステップによる検出から第２の反転検出ステップによる検出までの間に前記加速度取得ステップによって取得された加速度の取得数を計測する第１の取得数計測ステップと、
前記第２の反転検出ステップにおける検出の後、第１の反転検出ステップにおいて反転が検出されるまでの間に取得された加速度の取得数を計測する第２の取得数計測ステップとを更に前記コンピュータに実行させ、
前記ゲーム処理ステップにおいては、前記コンピュータは、前記第１の取得数と第２の取得数との合計値が所定値以上であり、かつ、当該第１の取得数が第２の取得数未満のときにのみ、前記第１のゲーム処理を行う、請求項２に記載のゲームプログラム。
【請求項５】
前記加速度差算出ステップにおいては、前記コンピュータは、前記第１の反転検出ステップにおいて反転が検出された際の加速度値が所定値以上のときにのみ、前記加速度値の差を算出する、請求項２に記載のゲームプログラム。
【請求項６】
前記ゲームプログラムは、前記第２の反転検出ステップにおいて反転が検出されたとき、当該反転の直前に取得された加速度値が所定値以上か否かを判定する加速力判定ステップを更に前記コンピュータに実行させ、
前記ゲーム処理ステップにおいては、前記コンピュータは、前記加速力判定ステップにおいて所定値以上と判定されたときは前記第１のゲーム処理を行い、所定値より小さいと判定されたときは前記第２のゲーム処理を行う、請求項２に記載のゲームプログラム。
【請求項７】
入力装置自体の動きに応じて変化する入力値に基づいたゲーム処理を行うゲーム装置であって、
前記入力装置に設けられた加速度センサの出力に基づいて、前記入力装置の状態に応じて増減する加速度値を前記入力値として逐次取得して記憶部に格納する加速度取得部と、
前記記憶部に格納されている加速度値に基づいて、前記加速度値の増減方向が反転したことを検出する増減方向反転検出部と、
前記増減方向が反転したとき、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する加速度差算出部と、
前記算出された差が所定値以上であれば第１のゲーム処理を実行し、所定値未満であるときは第１のゲーム処理とは異なる第２のゲーム処理を実行するゲーム処理部とを備える、ゲーム装置。
【請求項８】
前記増減方向反転検出部は、
前記加速度値の増減方向が第１の方向から第２の方向に反転したことを検出する第１の反転検出部と、
前記第１の反転検出部が前記増減方向の反転を検出した後に、前記加速度値の増減方向が第２の方向から第１の方向に反転したことを検出する第２の反転検出部とを含み、
前記加速度差算出部は、前記第２の反転検出部が増減方向の反転を検出したときに、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する、請求項７に記載のゲーム装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力装置自体の動きに応じて変化する入力値に基づいたゲーム処理をゲーム装置のコンピュータに実行させるゲームプログラムおよびゲーム装置に関し、より特定的には、入力装置自体の動作の検出に関する。
【背景技術】
【０００２】
従来から、加速度センサ等を用いて、入力装置（コントローラ）自体を動かして楽しむゲームシステムが提案されている。例えば、加速度センサを内蔵したガン型コントローラを使った射撃ゲームがある（例えば特許文献１）。この射撃ゲームでは、ガン型コントローラの移動方向を加速度センサによって検出している。そして、プレイヤがガンのリボルバーを開く動作を真似て上記ガン型コントローラを右方向に移動させると、モニタに弾丸の表示がされ、残弾数を確認できる。また、この状態でガン型コントローラを上下方向に移動させると、弾丸の補充ができる。そして、リボルバーを閉じる動作を真似てガン型コントローラを左方向に移動させると、上記弾丸表示が消える。このように、加速度センサを用いて、ガン型コントローラの移動方向を判別し、各移動方向に応じたゲーム処理を行っている。
【０００３】
また、同じく加速度センサを用いて、携帯型ゲーム装置自体への衝撃入力を判別するゲームも提案されている（例えば、特許文献２）。このようなゲームでは、ゲーム装置（ハウジング）に加えられた加速度の変化量や変化方向を検出し、どの軸方向にどの程度の出力があったかを判別する。例えば、ゲーム装置をＸ軸方向にスライド移動させると加速度が生じる。そのため、加速度センサのＸ軸出力に基づいて、Ｘ軸方向の移動（スライド移動）が判別される。また、このとき、当該Ｘ軸出力が一定値以上の場合は、衝撃入力があったと判定する。例えば、Ｘ軸方向の＋方向に一定値以上の加速度が検出されたときは、左からの衝撃入力があったと判定し、−方向に一定値以上の加速度が検出されたときは、右からの衝撃入力があったと判定する。
【特許文献１】特開２０００−３００８４３号公報
【特許文献２】特開２００１−１７０３５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述したような上記特許文献に開示されたゲーム装置においては、従来から以下に示す問題点があった。まず、上記特許文献１に開示されたゲームでは、ガン型コントローラ本体をどの方向にどの程度の強さで動かしたかを判断している。しかし、実際にプレイヤが行っている動作、例えばガン型コントローラ本体を振っている動作なのか、ガン型コントローラ本体に衝撃を加えている動作なのかを正確に判別することはできなかった。
【０００５】
また、上記特許文献２に開示されたゲーム装置では、加速度の大きさが一定値以上かどうかを判別することで、衝撃入力があったかどうかを判別している。しかし、ゲーム装置を移動させる動作であっても、ゲーム装置を強く振るような動作をプレイヤが行った場合は、上記一定値以上の加速度が検出される。その結果、衝撃動作と誤認識されることもあり、一定値以上の加速度が検出された際に、これが移動させる動作（強く振っている）であるのか、衝撃を与えている動作であるのかを厳密に判別することが困難であるという問題があった。
【０００６】
それ故に、本発明の目的は、プレイヤが入力装置等に衝撃を加える動作を正確に検出してゲームに反映させることができるゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【０００７】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係の一例を示したものであって、本発明を何ら限定するものではない。
【０００８】
第１の発明は、入力装置自体の動きに応じて変化する入力値に基づいたゲーム処理をゲーム装置のコンピュータに実行させるゲームプログラムであって、加速度取得ステップ（Ｓ２）と、増減方向反転検出ステップ（Ｓ３、Ｓ１７）と、加速度差算出ステップ（Ｓ４１〜Ｓ４４）と、ゲーム処理ステップ（Ｓ１２〜Ｓ１５）とをコンピュータに実行させる。加速度取得ステップでは、入力装置に設けられた加速度センサ（７０１）の出力に基づいて、入力装置の状態に応じて増減する加速度値を入力値として逐次取得して記憶部（３３）に格納する。増減方向反転検出ステップでは、記憶部に格納されている加速度値に基づいて、加速度値の増減方向が反転したことを検出する。加速度差算出ステップでは、増減方向が反転したとき、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する。ゲーム処理ステップでは、算出された差が所定値以上であれば第１のゲーム処理を実行し、所定値未満であるときは第１のゲーム処理とは異なる第２のゲーム処理を実行する。
【０００９】
第２の発明は、第１の発明において、増減方向反転検出ステップは、第１の反転検出ステップ（Ｓ１７）と、第２の反転検出ステップ（Ｓ３）とを含む。第１の反転検出ステップでは、加速度値の増減方向が第１の方向から第２の方向に反転したことを検出する。第２の反転検出ステップでは、第１の反転検出ステップにおける検出の後に、加速度値の増減方向が第２の方向から第１の方向に反転したことを検出する。また、加速度差算出ステップでは、第２の反転検出ステップにおいて増減方向の反転が検出されたときに、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する。
【００１０】
第３の発明は、第２の発明において、前記加速度差算出ステップは、第１差算出ステップ（Ｓ４１，Ｓ４２）と、第２差算出ステップ（Ｓ４３、Ｓ４４）とを含む。第１差算出ステップでは、第２の反転検出ステップにおいて検出された反転の直前に第１の時間間隔で取得された２つの加速度値の差である第１の差を算出する。第２差算出ステップでは、第２の反転検出ステップにおいて検出された反転の直前に第１の時間間隔とは異なった時間間隔である第２の時間間隔で取得された２つの加速度値の差である第２の差を算出する。また、ゲーム処理ステップでは、第１差および第２差の少なくとも一方が所定値以上であれば第１のゲーム処理を実行し、第１の差および第２の差のいずれもが所定値未満であれば、第２のゲーム処理を行う、請求項２に記載のゲームプログラム。
【００１１】
第４の発明は、第２の発明において、ゲームプログラムは、第１の取得数計測ステップ（Ｓ４６）と、第２の取得数計測ステップ（Ｓ３１）とを更に備える。第１の取得数計測ステップでは、第１の反転検出から第２の反転検出までの間に加速度取得ステップによって取得された加速度の取得数を計測する。第２の取得数計測ステップでは、第２の反転検出の後、第１の反転検出までの間に取得された加速度の取得数を計測する。ゲーム処理ステップでは、第１の取得数と第２の取得数との合計値が所定値以上であり、かつ、当該第１の取得数が第２の取得数未満のときにのみ、第１のゲーム処理を行う、請求項２に記載のゲームプログラム。
【００１２】
第５の発明は、第２の発明において、加速度差算出ステップは、第１の反転検出ステップにおいて反転が検出された際の加速度値が所定値以上のときにのみ、加速度値の差を算出する。
【００１３】
第６の発明は、第２の発明において、ゲームプログラムは、第２の反転検出ステップにおいて反転が検出されたとき、当該反転の直前に取得された加速度値が所定値以上か否かを判定する加速力判定ステップを更に備える。また、ゲーム処理ステップでは、加速力判定ステップにおいて所定値以上と判定されたときは第１のゲーム処理を行い、所定値より小さいと判定されたときは第２のゲーム処理を行う。
【００１４】
第７の発明は、入力装置自体の動きに応じて変化する入力値に基づいたゲーム処理を行うゲーム装置（３）であって、加速度取得部（３０）と、増減方向反転検出部（３０）と、加速度差算出部（３０）と、ゲーム処理部（３０）とを備える。加速度取得部は、入力装置に設けられた加速度センサ（７０１）の出力に基づいて、入力装置の状態に応じて増減する加速度値を入力値として逐次取得する。増減方向反転検出部は、加速度値の増減方向が反転したことを検出する。加速度差算出部は、増減方向が反転したとき、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する。ゲーム処理部は、算出された差が所定値以上であれば第１のゲーム処理を実行し、所定値未満であるときは第１のゲーム処理とは異なる第２のゲーム処理を実行する。
【００１５】
第８の発明は、第７の発明において、増減方向反転検出部は、加速度値の増減方向が第１の方向から第２の方向に反転したことを検出する第１の反転検出部（３０）と、第１の反転検出部が増減方向の反転を検出した後に、加速度値の増減方向が第２の方向から第１の方向に反転したことを検出する第２の反転検出部（３０）とを含む。また、加速度差算出部は、第２の反転検出部が増減方向の反転を検出したときに、当該反転の直前に取得された少なくとも２つの加速度値の差を算出する。
【発明の効果】
【００１６】
上記第１の発明によれば、加速度値の増減方向が反転したタイミングにおける加速度値の差に基づいて、入力装置に衝撃を加える操作であるか否かを判定している。そのため、入力装置に衝撃を加える操作を正確に検出することができる。
【００１７】
上記第２の発明によれば、上記第１の発明と同様に、入力装置に衝撃を加える操作を正確に検出することができる。
【００１８】
上記第３の発明によれば、増減方向が反転したときの加速度値の差の算出について、異なる時間間隔を用いて差を算出している。これにより、入力装置に衝撃を加える操作であるか否かをより正確に検出することが可能となる。
【００１９】
上記第４乃至第５の発明によれば、入力装置を動かす動作が、ある程度大きな動きであるときのみ、衝撃を加える操作として検出できる。
【００２０】
上記第６の発明によれば、衝撃を加えた際の衝撃の強さを、加速度の大きさに基づいて判別している。これにより、衝撃を加えるという操作であっても、その衝撃の強さに応じて異なったゲーム処理を行わせることができる。
【００２１】
また、本発明のゲーム装置によれば、上述した本発明のゲームプログラムと同様の効果を得ることができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施の形態について、図面を参照して説明する。尚、この実施例により本発明が限定されるものではない。
【００２３】
まず、図１を参照して、本発明の一実施形態に係るゲーム装置について説明する。以下、説明を具体的にするために、当該ゲーム装置を用いたゲームシステム１を一例として説明する。なお、図１は、当該ゲームシステム１を説明するための外観図である。以下、据置型ゲーム装置を一例にして、当該ゲームシステム１について説明する。
【００２４】
図１において、当該ゲームシステム１は、家庭用テレビジョン受像機等のスピーカ２ａを備えたディスプレイ（以下、モニタと記載する）２に、接続コードを介して接続される据置型ゲーム装置（以下、単にゲーム装置と記載する）３および当該ゲーム装置３に操作情報を与えるコントローラ７によって構成される。ゲーム装置３は、接続端子を介して受信ユニット６が接続される。受信ユニット６は、コントローラ７から無線送信される送信データを受信し、コントローラ７とゲーム装置３とは無線通信によって接続される。また、ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。ゲーム装置３の上部主面には、当該ゲーム装置３の電源ＯＮ／ＯＦＦスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置３上部の蓋を開くＯＰＥＮスイッチが設けられている。ここで、プレイヤがＯＰＥＮスイッチを押下することによって上記蓋が開き、光ディスク４の脱着が可能となる。
【００２５】
また、ゲーム装置３には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード５が必要に応じて着脱自在に装着される。ゲーム装置３は、光ディスク４に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ２に表示する。さらに、ゲーム装置３は、外部メモリカード５に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００２６】
コントローラ７は、その内部に備える通信部７５（後述）から受信ユニット６が接続されたゲーム装置３へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて送信データを無線送信する。コントローラ７は、主にモニタ２に表示されるゲーム空間に登場するプレイヤオブジェクトを操作するための操作手段である。コントローラ７は、複数の操作ボタン、キー、およびスティック等の操作部が設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像する撮像情報演算部７４を備えている。また、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。マーカ８Ｌおよび８Ｒは、コントローラ７の位置を示すためのものである。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって赤外光を出力する。
【００２７】
次に、図２を参照して、ゲーム装置３の構成について説明する。なお、図２は、ゲーム装置３の機能ブロック図である。
【００２８】
図２において、ゲーム装置３は、各種プログラムを実行する例えばリスク（ＲＩＳＣ）ＣＰＵ（セントラルプロセッシングユニット）３０を備える。ＣＰＵ３０は、図示しないブートＲＯＭに記憶された起動プログラムを実行し、メインメモリ３３等のメモリの初期化等を行った後、光ディスク４に記憶されているゲームプログラムを実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。ＣＰＵ３０には、メモリコントローラ３１を介して、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）３２、メインメモリ３３、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３４、およびＡＲＡＭ（Ａｕｄｉｏ  ＲＡＭ）３５が接続される。また、メモリコントローラ３１には、所定のバスを介して、コントローラＩ／Ｆ（インターフェース）３６、ビデオＩ／Ｆ３７、外部メモリＩ／Ｆ３８、オーディオＩ／Ｆ３９、およびディスクＩ／Ｆ４１が接続され、それぞれ受信ユニット６、モニタ２、外部メモリカード５、スピーカ２ａ、およびディスクドライブ４０が接続されている。
【００２９】
ＧＰＵ３２は、ＣＰＵ３０の命令に基づいて画像処理を行うものあり、例えば、３Ｄグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。ＧＰＵ３２は、図示しない画像処理専用のメモリやメインメモリ３３の一部の記憶領域を用いて画像処理を行う。ＧＰＵ３２は、これらを用いてモニタ２に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ３１およびビデオＩ／Ｆ３７を介してモニタ２に出力する。
【００３０】
メインメモリ３３は、ＣＰＵ３０で使用される記憶領域であって、ＣＰＵ３０の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ３３は、ＣＰＵ３０によって光ディスク４から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ３３に記憶されたゲームプログラムや各種データ等がＣＰＵ３０によって実行される。
【００３１】
ＤＳＰ３４は、ゲームプログラム実行時にＣＰＵ３０において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのＡＲＡＭ３５が接続される。ＡＲＡＭ３５は、ＤＳＰ３４が所定の処理（例えば、先読みしておいたゲームプログラムやサウンドデータの記憶）を行う際に用いられる。ＤＳＰ３４は、ＡＲＡＭ３５に記憶されたサウンドデータを読み出し、メモリコントローラ３１およびオーディオＩ／Ｆ３９を介してモニタ２に備えるスピーカ２ａに出力させる。
【００３２】
メモリコントローラ３１は、データ転送を統括的に制御するものであり、上述した各種Ｉ／Ｆが接続される。コントローラＩ／Ｆ３６は、例えば４つのコントローラＩ／Ｆ３６ａ〜３６ｄで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置３とを通信可能に接続する。例えば、受信ユニット６は、上記コネクタと嵌合し、コントローラＩ／Ｆ３６を介してゲーム装置３と接続される。上述したように受信ユニット６は、コントローラ７からの送信データを受信し、コントローラＩ／Ｆ３６を介して当該送信データをＣＰＵ３０へ出力する。ビデオＩ／Ｆ３７には、モニタ２が接続される。外部メモリＩ／Ｆ３８には、外部メモリカード５が接続され、その外部メモリカード５に設けられたバックアップメモリ等とアクセス可能となる。オーディオＩ／Ｆ３９にはモニタ２に内蔵されるスピーカ２ａが接続され、ＤＳＰ３４がＡＲＡＭ３５から読み出したサウンドデータやディスクドライブ４０から直接出力されるサウンドデータをスピーカ２ａから出力可能に接続される。ディスクＩ／Ｆ４１には、ディスクドライブ４０が接続される。ディスクドライブ４０は、所定の読み出し位置に配置された光ディスク４に記憶されたデータを読み出し、ゲーム装置３のバスやオーディオＩ／Ｆ３９に出力する。
【００３３】
図３および図４を参照して、本発明の入力装置の一例であるコントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面後方から見た斜視図である。
【００３４】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００３５】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、矢印で示す４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
【００３６】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、リング状に４方向の操作部分を備えたプッシュスイッチとその中央に設けられたセンタスイッチとを複合した複合スイッチを上記十字キー７２ａの代わりに設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー７２ａの代わりに設けてもかまわない。また、少なくとも４つの方向（前後左右）をそれぞれ示すスイッチに対して、プレイヤによって押下されたスイッチに応じて操作信号を出力する操作部を上記十字キー７２ａの代わりに設けてもかまわない。
【００３７】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、Ｘボタン、Ｙボタン、およびＢボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、セレクトスイッチ、メニュースイッチ、およびスタートスイッチ等としての機能が割り当てられる。これら操作ボタン７２ｂ〜７２ｇは、ゲーム装置３が実行するゲームプログラムに応じてそれぞれの機能が割り当てられるが、本発明の説明とは直接関連しないため詳細な説明を省略する。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００３８】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置３本体の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００３９】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ７から受信ユニット６へ送信データを送信する際、上記コントローラ種別に応じて複数のＬＥＤ７０２のうち、種別に対応するＬＥＤが点灯する。
【００４０】
一方、ハウジング７１下面には、凹部が形成されている。後述で明らかとなるが、ハウジング７１下面の凹部は、プレイヤがコントローラ７を把持したときに当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＡボタンとして機能する操作部であり、シューティングゲームにおけるトリガスイッチや、プレイヤオブジェクトを所定オブジェクトに対して注目させる操作等に用いられる。
【００４１】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えば３２ピンのエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００４２】
ここで、説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の上面（十字キー７２ａ等が設けられた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の左側面（図３では表されずに図４で表されている側面）方向をＸ軸正方向とする。
【００４３】
次に、図５を参照して、コントローラ７の内部構造について説明する。なお、図５（ａ）は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を示す斜視図である。図５（ｂ）は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を示す斜視図である。ここで、図５（ｂ）に示す基板７００は、図５（ａ）に示す基板７００の裏面から見た斜視図となっている。
【００４４】
図５（ａ）において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、水晶振動子７０３、無線モジュール７５３、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１（図６参照）に接続される。加速度センサ７０１は、コントローラ７が配置された３次元空間における傾きや振動等の算出に用いることができる加速度を検出して出力する。
【００４５】
より詳細には、図６に示すように、コントローラ７は３軸の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、Ｘ軸とＹ軸（または他の対になった軸）のそれぞれに沿った直線加速度のみを検知する２軸の加速度検出手段を使用してもよい。例えば、この３軸または２軸の加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて３軸または２軸の加速度センサ７０１が提供されてもよい。
【００４６】
当業者には公知であるように、加速度センサ７０１に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、その２軸または３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００４７】
しかしながら、加速度センサ７０１から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度（重力加速度）が検知されると、加速度センサ７０１からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象（コントローラ７）の傾きを判定することができる。このように、加速度センサ７０１をマイコン７５１（または他のプロセッサ）と組み合わせて用いることによって、コントローラ７の傾き、姿勢または位置を判定することができる。同様に、加速度センサ７０１を備えるコントローラ７が例えば後述するようにユーザの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７のさまざまな動きおよび／または位置を算出することができる。他の実施例では、加速度センサ７０１は、信号をマイコン４２に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００４８】
また、無線モジュール７５３およびアンテナ７５４を有する通信部７５によって、コントローラ７がワイヤレスコントローラとして機能する。なお、水晶振動子７０３は、後述するマイコン７５１の基本クロックを生成する。
【００４９】
一方、図５（ｂ）において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。そして、操作ボタン７２ｉが撮像情報演算部７４の後方の基板７００の下主面上に取り付けられていて、それよりさらに後方に、電池７０５が収容される。電池７０５とコネクタ７３との間の基板７００の下主面上には、バイブレータ７０４が取り付けられる。このバイブレータ７０４は、例えば振動モータやソレノイドであってよい。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。
【００５０】
次に、図６を参照して、コントローラ７の内部構成について説明する。なお、図６は、コントローラ７の構成を示すブロック図である。
【００５１】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。ここで、モニタ２の表示画面近傍に配置されるマーカ８Ｌおよび８Ｒは、モニタ２の前方に向かって赤外光を出力する赤外ＬＥＤである。したがって、赤外線フィルタ７４１を設けることによってマーカ８Ｌおよび８Ｒの画像をより正確に撮像することができる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データ（マーカ８Ｌおよび８Ｒの撮像画像）を処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。この撮像情報演算部７４から出力される処理結果データに基づいて、コントローラ７の位置や動きに応じた信号を得ることができ、当該信号に基づいてモニタ２の画面座標系に基づいた入力座標を得ることができる。つまり、コントローラ７は、撮像情報演算部７４から出力される処理結果データによってポインティングデバイスとして機能する。
【００５２】
加速度センサ７０１は、上述したようにコントローラ７の上下方向（Ｙ軸方向）、左右方向（Ｘ軸方向）、および前後方向（Ｚ軸方向）の３軸成分に分けてそれぞれ加速度を検知して出力するセンサである。加速度センサ７０１が検知した３軸成分の加速度を示すデータは、それぞれ通信部７５へ出力される。この加速度センサ７０１から出力される加速度データに基づいて、コントローラ７の動きを判定することができる。なお、加速度センサ７０１は、特定のアプリケーションで必要なデータに応じて何れか２軸に対してそれぞれ加速度を検出する加速度センサが用いられてもかまわない。
【００５３】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。
【００５４】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ）を受信ユニット６へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から受信ユニット６への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、受信ユニット６への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置３の受信ユニット６でその電波信号を受信し、ゲーム装置３で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、および処理結果データ）を取得する。そして、ゲーム装置３のＣＰＵ３０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Ｂｌｕｅｔｏｏｔｈ（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００５５】
次に、図７〜図１４を用いて、本実施形態で想定するゲームの概要について説明する。図７〜図９は、本実施形態で想定するゲームの画面の一例である。図７において、モニタ２には、数枚の原稿用紙１０１と机オブジェクト１０２が表示されている。本実施形態で想定するゲームは、この原稿用紙１０１を制限時間内に揃えるゲームである。そして、プレイヤは、揃えるための操作として、図１０〜図１２に示すように、コントローラ７を縦に握り、当該コントローラ７の先で手のひら（または机など）の上を軽くトントンと叩くという操作（コントローラ７に衝撃を与える操作）を行う（図１０〜図１２の一連の動きを繰り返す）。すると、この動きに連動して、原稿用紙１０１が机オブジェクト１０２にトントンと叩かれる様子が画面に表示され、徐々に用紙が揃っていき、最終的に、図８に示すように用紙が揃う。このように、本実施形態で想定するゲームは、コントローラ７で手のひらで数回トントンと叩くことで、制限時間内に用紙を揃えていくゲームである。
【００５６】
次に、本実施形態で行われる処理について、特に、上記コントローラ７を手のひらの上でトントンと叩く操作（以下、トントン操作と呼ぶ）を検出する処理の原理を説明する。上記のように、コントローラ７には加速度センサ７０１が設けられている。本発明は、上記トントン操作の際の加速度値の変化の特性に着目して、当該トントン操作を検出する。なお、本実施形態では加速度センサ７０１のＺ軸方向の加速度値を利用してゲーム処理が行われる。したがって、以下の説明における「加速度値」は「Ｚ軸方向の加速度値」を意味する。図１３は、上記トントン操作における加速度値の変化の一例を示すグラフである。また、図１４は、コントローラ７を手のひらに当てるのではなく、単に空中で上下に振ったときの加速度値の変化の一例を示すグラフである。図１３および図１４では、横軸で時間（フレーム数）を表し、縦軸は加速度値を表す。
【００５７】
ここで、コントローラ７の加速方向と加速度値の変化方向との関係については、次のような関係であるとする。まず、コントローラ７が自由落下している状態では、加速度センサ７０１によって検出される加速度値は０になる。コントローラ７が図１０の状態（すなわち撮像素子７４３が設けられた面が上を向いた状態）で静止している状態では、加速度センサ７０１によって検出される加速度値は−１となる。コントローラ７が鉛直上方（すなわちＺ軸の正方向）に向かって加速している状態（鉛直下方に向かって移動しているコントローラ７が減速している状態も含む）では、加速度値は−１よりも小さな値となる（鉛直上方への加速度が大きいほど、より小さい値となる）。逆に、コントローラ７が鉛直下方（すなわちＺ軸の負方向）に向かって加速している状態（鉛直上方に向かって移動しているコントローラ７が減速している状態も含む）では、加速度値は−１よりも大きな値となる（鉛直下方への加速度が大きいほど、より大きい値となる）。例えば、図１３では、まず、トントン操作の前の、コントローラ７を持った状態（初期状態）では、重力加速度がかかるため、加速度値は−１前後の値で落ち着いている。この状態から、プレイヤがコントローラ７を手の平に向けて振り降ろすと、コントローラ７は鉛直下方に向かって加速するため、加速度値は−１よりも大きな値となる。そして、コントローラ７が手の平に当たると、鉛直下方に向かって移動していたコントローラ７が手のひらに衝突して停止ないし跳ね返る（すなわち鉛直上方に向かって急激に加速する）ため、加速度値は−１よりも小さな値となる。
【００５８】
本発明は、上記の加速度値の一連の変化について、加速度値が変化（増減）する方向が反転するときにかかる加速度値に着目したものである。上記グラフにおいて、加速度値の変化方向が負方向（すなわち加速度値が小さくなる方向）から正方向（すなわち加速度値が大きくなる方向）へと反転したとき（図１３の円１３５や図１４の円１４１）、トントン操作（円１３５）のほうは衝撃の影響を受けて鋭角なグラフを描いているのに対し、空中で振っている場合（円１４１）は、比較的緩やかなカーブを描くように変化している。そこで、この増減方向反転のタイミングにかかる加速度値の変化の仕方の違いに着目し、加速度値の増減方向が反転したときの加速度値（図１３の点１３１）と、その直前の加速度値（図１３の点１３２）との差を算出し、当該差が所定値以上であれば、トントン操作（より正確には、トントン操作１回分）であると判定する。
【００５９】
次に、本実施形態で用いられる各種データについて説明する。図１５は、図２に示したメインメモリ３３のメモリマップを示す図解図である。図１５において、メインメモリ３３は、ゲームプログラム記憶領域３３０およびデータ記憶領域３３４を含む。
【００６０】
ゲームプログラム記憶領域３３０は、ＣＰＵ３０によって実行されるゲームプログラムを記憶し、このゲームプログラムは、ゲームメイン処理プログラム３３１と、正加速フレーム計算プログラム３３２と、負加速フレーム計算プログラム３３３などによって構成される。
【００６１】
ゲームメイン処理プログラム３３１は、本実施形態に係る処理全体を制御するためのプログラムである。正加速フレーム計算プログラム３３２は、上記ゲームメイン処理プログラム３３１から呼び出されるサブルーチンであり、正方向へ向いた加速値の一連の変化にかかったフレーム数（以下、正加速フレーム数と呼ぶ）を計算するためのプログラムである。負加速フレーム計算プログラム３３３は、上記ゲームメイン処理プログラム３３１から呼び出されるサブルーチンであり、負方向へ向いた加速値の一連の変化にかかったフレーム数（以下、負加速フレーム数）を計算するためのプログラムである。
【００６２】
データ記憶領域３３４には、加速度データ３３５、正加速フレーム数３３６、負加速フレーム数３３７、加速状態３３８、揃え開始フラグ３３９、成功フラグ３４０、および画像データ３４１等が記憶される。なお、メインメモリ３３には、図１５に示す情報に含まれるデータの他、ゲームに登場する各種オブジェクトに関するデータ（位置データ等）や仮想ゲーム空間に関するデータ（地形データ等）等、ゲーム処理に必要なデータが記憶される。
【００６３】
加速度データ３３５は、コントローラ７から送信データとして送信されてくる一連の操作情報に含まれる加速度データである。加速度データ３３５には、加速度センサ７０１がＸ、Ｙ、およびＺ軸の３軸成分に分けてそれぞれ検出したＸ軸方向加速度３３５１、Ｙ軸方向加速度３３５２、およびＺ軸方向加速度３３５３が含まれる。また、加速度データ３３５としては、直近（最新）の２０フレーム分の加速度データが格納される（図１５の３３５１ａ〜３３５１ｔ、３３５２ａ〜３３５２ｔ、３３５３ａ〜３３５３ｔ）。また、加速度データの格納順は、例えば、加速度データ３３５３ａが古いデータで、加速度データ３３５３ｔに近づくほど新しいデータが格納されるものとする。なお、ゲーム装置３に備える受信ユニット６は、コントローラ７から所定間隔、例えば５ｍｓごとに送信される操作情報に含まれる加速度データ３３５を受信し、受信ユニット６に備える図示しないバッファに蓄えられる。その後、ゲーム処理間隔である１フレーム毎に読み出されて上記のようにメインメモリ３３に記憶される。また、加速度データ３３５は、−２Ｇ〜＋２Ｇの範囲の値をとる。
【００６４】
正加速フレーム数３３６は、上記正加速フレーム計算プログラム３３２によって算出される。正加速フレーム数３３６は、加速度値が正の方向に向かって変化していく一連の変化にかかったフレーム数を示す。すなわちこれは、プレイヤがコントローラ７を手の平に向けて下げていく動作にかかったフレーム数を示すものである（厳密には、加速度値が正の方向に向かって変化していく期間と、プレイヤがコントローラ７を手の平に向けて下げていく動作を行っている期間とは一致せず、それらの期間の長さも一致しないが、説明を分かり易くするため、以下ではそれらの期間が一致するものと仮定して説明する。）。
【００６５】
負加速フレーム数３３７は、上記負加速フレーム計算プログラム３３３によって算出される。負加速フレーム数３３７は、加速度値が減少していく（すなわち負の方向に向かって変化していく）一連の変化にかかったフレーム数を示す。これはすなわち、プレイヤがコントローラ７を上げる（手の平から遠ざけていく）動作にかかったフレーム数を示すものである（厳密には、加速度値が減少していく期間と、プレイヤがコントローラ７を手の平から遠ざけていく動作を行っている期間とは一致せず、それらの期間の長さも一致しないが、説明を分かり易くするため、以下ではそれらの期間が一致するものと仮定して説明する。）。
【００６６】
加速状態３３８は、コントローラ７の加速状態に関する状態を示すデータである。本実施形態では、以下の３つの状態が加速状態３３８によって示される。すなわち、加速状態３３８は、初期状態である「加速無し状態」と、プレイヤがコントローラ７を下に振り終えたことを示す「正加速終了」と、コントローラ７を上に振り上げ終えたことを示す「負加速終了」との３つの状態を示す。
【００６７】
揃え開始フラグ３３９は、上記トントン操作が開始されたかどうかを示すためのフラグである。これは、手ぶれ等によるコントローラ７の微少な動きを検出しても、ゲームには反映させないようにする、いわば誤検出防止のために用いられるフラグである。
【００６８】
成功フラグ３４０は、上記トントン操作が成功したかどうかを示すためのフラグである。つまり、適切な力でコントローラ７が手の平に当てられたか（原稿用紙１０１を揃えるために適切な衝撃が加わったか）どうかを示すフラグである。
【００６９】
画像データ３４５は、原稿用紙１０１や机オブジェクト１０２等の、仮想ゲーム空間内に登場する各種オブジェクトの画像データである。
【００７０】
次に、図１６〜図１９を参照して、ゲーム装置３によって実行されるゲーム処理について説明する。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ３０は、図示しないブートＲＯＭに記憶されている起動プログラムを実行し、これによってメインメモリ３３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリ３３に読み込まれ、ＣＰＵ３０によって当該ゲームプログラムの実行が開始される。図１６〜図１７に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。また、図１６〜図１７に示すステップ１〜ステップ１９の処理ループは、１フレーム毎に繰り返し実行される。
【００７１】
図１６において、まず、ＣＰＵ３０は、各種変数の初期化処理を行う（ステップＳ１）。具体的には、ＣＰＵ３０は、加速状態３３８を「加速無し」にする。また、揃え開始フラグ３３９、成功フラグ３４０をＯＦＦに設定する。更に、ＣＰＵ３０は、加速度データ３３５と、正加速フレーム数３３６と、負加速フレーム数３３７とをクリアする。
【００７２】
次に、ＣＰＵ３０は、コントローラ７から送信データとして送信されてくる一連の操作情報から、Ｚ軸方向の加速度値（以下、Ｚ軸加速度と呼ぶ）を取得する（ステップＳ２）。
【００７３】
次に、ＣＰＵ３０は、取得した加速度に基づいて、負方向への加速（加速度の負方向への一連の変化）が終了したかどうかを判定する（ステップＳ３）。換言すれば、加速度値の変化の方向が、負方向から正方向へ変化（反転）したか否か（コントローラ７を振る方向が正方向から負方向へ変化したか否か）を判定する。上述の図１３のグラフでいうと、例えば、点１３４が本条件を満たすことになる。つまり、点１３４（今回フレームの加速度値）のほうが、点１３１（前回フレームの加速度値）よりも大きい値であるため、加速度値の変化方向が反転したことを判定できる。本ステップでは、具体的には、以下の条件が満たされるか否かを判定する。
（加速状態３３８≠負加速終了）  ＡＮＤ  （今回フレームの加速度値＞前回フレームの加速度値）  ＡＮＤ  （前回フレームの加速度値＜所定の定数）
ここで、当該所定の定数としては、−１を用いる。この値はゲームの難易度と関係する。つまり、この値を−２に近づけるほど、トントン操作が検出されにくくなり、ゲームの難度が上がることになる。ここでは、ゲームの難易度を適度なものとするため、−１という値を用いている。
【００７４】
上記判定の結果、上記条件が満たされていないときは（ステップＳ３でＮＯ）、ＣＰＵ３０は、正方向への加速（加速度値の正方向への変化）が終了したかどうかを判定する（ステップＳ１７）。換言すれば、加速度値の変化の方向が、正方向から負方向へ反転したか否かを判定する。上述の図１３のグラフでいうと、例えば、点１３６が本条件を満たすことになる。つまり、点１３６（今回フレームの加速度値）のほうが、その前のフレームの加速度値よりも小さい値であるため、加速度値の変化方向が正方向から負方向へと反転したことを判定できる。本ステップでは、具体的には、以下の条件が満たされるか否かを判定する。
（加速状態３３８≠正加速終了）  ＡＮＤ  （今回フレームの加速度値＜前回フレームの加速度値）  ＡＮＤ  （前回フレームの加速度値＞所定の定数）
ここで、当該所定の定数としては、−０．４を用いるものとする。ここで、この定数は、例えば図１３のグラフの円１３７で示される部分のような、正方向への加速の途中の微少な変化（コントローラ７がまだ下降しきってないにもかかわらず、何らかの原因で検出された微少な変化）について、手の平に当たったとして誤検出しないようにするために設けられている。換言すれば、実際には加速度値の変化方向が一瞬、反転してはいるが、これをまだ反転しておらず、正方向へ向けて加速中であるとみなして扱おうとするものである。そのため、例えば図１３のグラフにおいて、仮に円１３７のところで加速度が−０．６になったときに反転し、そのまま−２近くまで下がったとしても、そのときの操作はトントン操作としては判定されないことになる。つまり、コントローラ７で手の平を叩いていても、手の動きが小さいような操作は、トントン操作としては検出されないことになる。
【００７５】
上記判定の結果、正方向への加速が終了していないときは（ステップＳ１７でＮＯ）、処理を後述するステップＳ１１へと進める。一方、正方向への加速が終了したときは（ステップＳ１７でＹＥＳ）、ＣＰＵ３０は、加速状態３３８に「正加速終了」を設定する（ステップＳ１８）。次に、ＣＰＵ３０は、上記終了した一連の正方向への加速にかかったフレーム数を計算するため、正加速フレーム数計算処理を行う（ステップＳ１９）。
【００７６】
図１８は、上記ステップＳ１９で示した正加速フレーム数計算処理の詳細を示すフローチャートである。図１８において、まず、ＣＰＵ３０は、正加速フレーム数３３６に、上記２０個のＺ軸加速度データ（図１５のＺ軸の加速度データ３３５３ａ〜３３５３ｔ）のうち、現在、加速度値が格納されているデータの数（有効要素数）を設定する（ステップＳ３１）。例えば、Ｚ軸の加速度データ３３５３ａ〜３３５３ｐまで加速度値が入っていて、３３５３ｑ〜３３５３ｔまでは空であれば、１６という値が正加速フレーム数３３６設定される。この値が、正方向への加速にかかったフレーム数（時間）を示すことになる。続いて、ＣＰＵ３０は、加速度データ３３５をクリアする（ステップＳ３２）。以上で、正加速フレーム数計算処理は終了する。その後、ＣＰＵ３０は、処理を後述するステップＳ１１へと進める。
【００７７】
図１６に戻り、ステップＳ３の判定の結果、負方向への加速が終了したときは（ステップＳ３でＹＥＳ）、ＣＰＵ３０は、加速状態３３８に「負加速終了」を設定する（ステップＳ４）。次に、ＣＰＵ３０は、上記終了した一連の負方向への加速にかかったフレーム数を計算するため、負加速フレーム数計算処理を行う（ステップＳ５）。
【００７８】
図１９は、上記ステップＳ５で示した負加速フレーム数計算処理の詳細を示すフローチャートである。図１９において、ＣＰＵ３０は、まず、各種変数を設定する（ステップＳ４１）。具体的には、変数Ｃｎｔに、上記２０個のＺ軸加速度データのうち、現在加速度値が入っている数（有効要素数）を設定する。例えば、Ｚ軸の加速度データ３３５３ａ〜３３５３ｇまで加速度値が入っていて、３３５３ｈ〜３３５３ｔまでは空であれば、７という値が変数Ｃｎｔに設定される。更に、ＣＰＵ３０は、変数Ｎｅｘｔに、（Ｃｎｔ−１）番目の加速度データを設定する。上記図１３のグラフでいうと、点１３１の加速度データが設定される。更に、変数Ｂａｃｋに、（Ｃｎｔ−２）番目の加速度データを設定する。上記図１３のグラフでいうと、点１３２の加速度データが設定される。
【００７９】
次に、ＣＰＵ３０は、変数Ｂａｃｋ−変数Ｎｅｘｔの式で算出される値が所定の定数より小さいか否かを判定する（ステップＳ４２）。つまり、図１３のグラフでいうと、点１３１と点１３２との加速度値の差が定数より小さいか否かを判定することになる。この差が、ある程度大きければ、上記トントン操作と判定でき、小さければ、トントン操作ではないと判定できるからである。つまり、図１３および図１４を用いて上述したように、トントン操作の場合は、鉛直下方への移動が終わったときにかかる加速度値の変化（図１３の点１３１と点１３２）が、空中で振ったときの動作（図１４の点１４２と点１４３）に比べると、急な変化となって上記差が大きくなるため、この差を見ることでトントン操作か否かを判別できる。上記判定の結果、上記差が所定の定数より小さくないときは（ステップＳ４２でＮＯ）、ある程度の差がある、つまりトントン操作であると考えられるため、処理を後述のステップＳ４６へと進める。
【００８０】
一方、上記判定の結果、上記差が所定の定数より小さいときは（ステップＳ４２でＹＥＳ）、ＣＰＵ３０は、変数Ｂａｃｋに（Ｃｎｔ−３）番目のＺ軸の加速度データを設定する（ステップＳ４３）。上記図１３のグラフでいうと、点１３３の加速度値を設定することになる。そして、ＣＰＵ３０は、ステップＳ４２と同様に、ＢａｃｋとＮｅｘｔの差が所定の定数より小さいか否かを判定する（ステップＳ４４）。このように、加速度値の差の判定を２度行うのは、トントン操作をより正確に検知するためである。つまり、仮に上記図１３の点１３１と点１３２との差が小さかった場合であっても、更にその前のフレームにおける加速度値との差（点１３１と点１３３との差）が大きいものであれば、この場合もトントン操作であると考えられるため、このように、２度判定を行って、トントン操作の検出漏れを防ごうとするものである。
【００８１】
当該２度目の判定の結果、差が所定の定数より小さいときは（ステップＳ４４でＹＥＳ）、トントン操作ではないとして、ＣＰＵ３０は、変数Ｃｎｔに、上記Ｚ軸の加速度データ３３５３に格納できるデータの最大数である２０を設定する（ステップＳ４５）。一方、差が所定の定数より大きければ（ステップＳ４４でＮＯ）、トントン操作と考えられるため、ステップＳ４６の処理に進む。
【００８２】
次に、ＣＰＵ３０は、加速度データ３３５をクリアする。更に、負加速フレーム数３３７に変数Ｃｎｔの値を設定する（ステップＳ４６）。例えば、上記の判定でトントン操作と判定されていれば、負加速フレーム数には７という値が設定され（つまり、負方向の加速に７フレーム分の時間がかかったことを示す）、トントン操作でないと判定されていれば、２０という値が設定されることになる（つまり、負方向の加速に２０フレーム分の時間がかかったことを示す）。以上で、負加速フレーム数計算処理が終了する。
【００８３】
図１６に戻り、負加速フレーム数計算処理の次に、ＣＰＵ３０は、原稿用紙１０１を揃えることができるか否かを判定する（ステップＳ６）。具体的には、ＣＰＵ３０は、次の条件が満たされているか否かを判定する。
（正加速フレーム数＋負加速フレーム数＞定数）  ＡＮＤ  （負加速フレーム数≦正加速フレーム数）
ここで、定数としては例えば１０を用いる。この定数は、コントローラ７を細かく（小さく）振るような動作をトントン操作として誤検出しないようにするために用いられる。つまり、トントン操作における下降〜上昇にかかった総フレーム数がこの定数より小さいということは、コントローラ７を細かく振るような動作であると考えられるためである。また、（負加速フレーム数≦正加速フレーム数）としているのは、トントン操作の場合は、正加速フレーム数より負方向への加速にかかるフレーム数のほうが小さくなるからである。空中でコントローラ７を振った場合は、上昇時にかかるフレーム数と下降時にかかるフレーム数とがほぼ等しくなる。そのため、前述のステップＳ５においてトントン操作でないと判断された場合（ステップＳ４４でＹＥＳ）は、負加速フレーム数を最大値（２０）に設定することにより、 (負加速フレーム数≦正加速フレーム数）と検出されないようにして、トントン操作として誤検出されないようにしている。なお、本実施形態では、ゲームの難度を下げるため、フレーム数が同じ場合でもトントン操作として扱っているが、これを、（負加速フレーム数＜正加速フレーム数）とすれば、トントン操作検出の正確性を高めることが可能である。
【００８４】
上記判定の結果、条件を満たしていれば（ステップＳ６でＹＥＳ）、成功フラグ３４０をオンに設定する（ステップＳ７）。一方、満たされてなければ（ステップＳ６でＮＯ）、成功フラグ３４０をオフに設定する（ステップＳ８）。
【００８５】
次に、ＣＰＵ３０は、正加速フレーム数が０より大きいか否かを判定する（ステップＳ９）。これは、トントン操作が開始されているかどうかを判定するためである。つまり、正方向への変化が開始してない状態で検出された負方向への変化（例えば、図１３の円１３８で示される部分）については、上述したようなトントン操作の判定対象から外すためのものである。当該判定の結果、正加速フレーム数が０より大きければ、揃え開始フラグ３３９をオンに設定し（ステップＳ１０）、処理を次のステップＳ１１に進める。一方、０より大きくないときは（ステップＳ９でＮＯ）、ＣＰＵ３０は、そのままステップＳ１１に処理を進める。
【００８６】
次に、ＣＰＵ３０は、加速度データ３３５を更新する（ステップＳ１１）。つまり、今回フレームにおける加速度値を加速度データ３３５に格納する。
【００８７】
次に、ＣＰＵ３０は、揃え開始フラグ３３９がオンか否かを判定する（ステップＳ１２）。その結果、オンであれば（ステップＳ１２でＹＥＳ）、続いてＣＰＵ３０は、成功フラグ３４０がオンか否かを判定する（ステップＳ１３）。当該判定の結果、成功フラグ３４０がオンであれば（ステップＳ１３でＹＥＳ）、原稿用紙１０１が揃うアニメを表示する（ステップＳ１４）。例えば、原稿用紙１０１が徐々に揃うアニメーションを４コマで表現している場合は、１コマ分表示する（つまり、トントン操作１回分のアニメーションを表示）。一方、成功フラグ３４０がオフであれば、原稿用紙１０１がばらけるアニメを表示する（ステップＳ１５）。この場合も、１コマ分表示する。
【００８８】
次に、ＣＰＵ３０は、ゲーム終了条件を満たしたか否かを判定する（ステップＳ１６）。具体的には、クリア条件を満たしたか、あるいは、制限時間を経過したかどうかを判定する。クリア条件の判定は、例えば、上記のように用紙が徐々に揃うアニメーションを４コマで表現している場合は、成功フラグ３４０がオンになったループが４回続いたか（つまり、コントローラ７を手の平に４回叩いたか）を判定する。その結果、ゲーム終了条件が満たされていないときは（ステップＳ１６でＮＯ）、ＣＰＵ３０は、上記ステップＳ２に戻って処理を繰り返す。一方、ゲーム終了条件が満たされた場合（ステップＳ１６でＹＥＳ）は、ＣＰＵ３０は、当該ゲーム処理を終了する。以上で、本実施形態にかかるゲーム処理は終了する。
【００８９】
このように、本実施形態では、加速度値の増減方向が反転したタイミングにおける加速度値の差に基づいて、入力装置に衝撃を加える操作（トントン操作）を正確に検出することができる。つまり、コントローラ７を単に空中で振る操作と、コントローラ７で手の平を叩く操作とを区別して識別することが可能となる。また、反転したときの加速度値の差について、２種類の時間間隔で差を算出して判定しているため、トントン操作の検出漏れを防ぎ、より正確に検出することができる。また、トントン操作１回分に対応する加速度の増減にかかったフレーム数（時間）をみて、トントン操作であるか否かを判定するため、入力装置を動かした操作がトントン操作かどうかを、より正確に検出することができる。
【００９０】
また、図１３の円１３７で示されるような、実際は正方向から負方向に反転していても、そのときの加速度値がある程度大きくないときは、反転していないものとして扱うため、コントローラ７で手の平を叩く操作について、加速度値の増減の幅が小さい、いわば手の動きが小さいような場合は、トントン操作として検出しない。そのため、より正確にトントン操作を判別することが可能となる。
【００９１】
なお、上記実施形態では、加速度値の増減方向が反転したタイミングで衝撃を与えている操作か否かを検出していたが、このとき更に、衝撃の強さを判定するようにしてもよい。例えば、上述のように、増減方向が負方向から正方向へ反転したと判定されたときの直前の加速度値（図１３の点１３１）が所定値以上か否かを判定する。そして、当該加速度値が所定値以上であるときとないときとで、異なるゲーム処理（例えば成功フラグ３４０のオン／オフの設定等）を実行させるようにしてもよい。つまり、この加速度値が所定値より大きいときは、衝撃が弱いと判定し、所定値より小さいときは衝撃が強いと判定して、衝撃の強さに応じたゲーム処理を行うようにしてもよい。更には、所定値以上か否かという二者択一な判定ではなく、加速度値（衝撃の強さ）に応じて、実行するゲーム処理をより細かく分けるようにしても良い。つまり、加速度値が−２Ｇのとき、−１．９Ｇのとき、−１．８Ｇのとき・・・のように、−０．１Ｇ単位でそれぞれ異なるゲーム処理を実行するようにしてもよい。これにより、ゲームの内容やゲーム展開をより広げることができ、ゲームの興趣をより高めることができる。
【産業上の利用可能性】
【００９２】
本発明にかかるゲームプログラムおよびゲーム装置は、入力装置に衝撃を与える操作を正確に検出することができ、ゲームコントローラの動きに応じてゲームオブジェクトが操作されるゲームや入力装置の動きに応じて表示情報等が移動する情報処理等の用途に有用である。
【図面の簡単な説明】
【００９３】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置３の機能ブロック図
【図３】図３のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面後方から見た斜視図
【図５】図３のコントローラ７の上筐体を外した状態を示す斜視図
【図６】図３のコントローラ７の構成を示すブロック図
【図７】本実施形態で想定するゲームの画面の一例
【図８】本実施形態で想定するゲームの画面の一例
【図９】本実施形態で想定するゲームの画面の一例
【図１０】本実施形態で想定するゲームの操作方法を説明するための図
【図１１】本実施形態で想定するゲームの操作方法を説明するための図
【図１２】本実施形態で想定するゲームの操作方法を説明するための図
【図１３】トントン操作における加速度値の変化の一例を示すグラフ
【図１４】コントローラ７を単に空中で上下に振ったときの加速度値の変化の一例を示すグラフ
【図１５】メインメモリ３３のメモリマップを示す図解図
【図１６】本発明の実施形態に係るゲーム処理を示すフローチャート
【図１７】本発明の実施形態に係るゲーム処理を示すフローチャート
【図１８】図１６のステップＳ１９で示した正加速フレーム数計算処理の詳細を示したフローチャート
【図１９】図１６のステップＳ５で示した負加速フレーム数計算処理の詳細を示したフローチャート
【符号の説明】
【００９４】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置
３０…ＣＰＵ
３１…メモリコントローラ
３２…ＧＰＵ
３３…メインメモリ
３４…ＤＳＰ
３５…ＡＲＡＭ
３６…コントローラＩ／Ｆ
３７…ビデオＩ／Ｆ
３８…外部メモリＩ／Ｆ
３９…オーディオＩ／Ｆ
４０…ディスクドライブ
４１…ディスクＩ／Ｆ
４…光ディスク
５…外部メモリカード
６…受信ユニット
７…コントローラ
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０３…水晶振動子
７０４…バイブレータ
７０５…電池
【図１】
2008036167.tif 000003
【図２】
2008036167.tif 000004
【図３】
2008036167.tif 000005
【図４】
2008036167.tif 000006
【図５】
2008036167.tif 000007
【図６】
2008036167.tif 000008
【図７】
2008036167.tif 000009
【図８】
2008036167.tif 000010
【図９】
2008036167.tif 000011
【図１０】
2008036167.tif 000012
【図１１】
2008036167.tif 000013
【図１２】
2008036167.tif 000014
【図１３】
2008036167.tif 000015
【図１４】
2008036167.tif 000016
【図１５】
2008036167.tif 000017
【図１６】
2008036167.tif 000018
【図１７】
2008036167.tif 000019
【図１８】
2008036167.tif 000020
【図１９】
2008036167.tif 000021