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