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