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