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