(57)【要約】【課題】より高い現実感をプレイヤに与えるような操作が可能なゲームプログラムおよびゲーム装置を提供すること。【解決手段】ユーザが操作する入力装置の姿勢または動きを検出する所定の検出手段から取得する姿勢動き情報に基づいて、オブジェクトに与えるパワーを示すパラメータであるパワー値データを算出する。また、当該姿勢動き情報に基づき、入力装置に加えられた制動力を示す制動値データも算出する。そして、パワー値データと制動値データとに基づいてオブジェクトを移動させる。【選択図】図５３
2010246613.tif 000002
【特許請求の範囲】
【請求項１】
ユーザが操作する入力装置の姿勢または動きを検出する所定の検出手段から取得する姿勢動き情報に基づいて、仮想空間内のオブジェクトを移動させるゲーム装置のコンピュータに実行させるゲームプログラムであって、
前記コンピュータを、
前記検出手段で検出された姿勢動き情報を繰り返し取得する姿勢動き情報取得手段と、
前記姿勢動き情報に基づき、前記オブジェクトに与えるパワーを示すパラメータであるパワー値データを算出するパワー値算出手段と、
前記姿勢動き情報に基づき、前記入力装置に加えられた制動力を示す制動値データを算出する制動値算出手段と、
前記パワー値データと前記制動値データとに基づいて前記オブジェクトを移動させるオブジェクト移動手段として機能させる、ゲームプログラム。
【請求項２】
前記前記検出手段は、前記入力装置に備えられた動きセンサである、請求項１に記載のゲームプログラム。
【請求項３】
前記ゲームプログラムは、前記コンピュータを、前記制動値算出手段で算出された制動値のうちの最大値である最大制動値を検出する最大制動値検出手段として更に機能させ、
前記オブジェクト移動手段は、前記最大制動値に基づいて前記オブジェクトを移動させる、請求項１に記載のゲームプログラム。
【請求項４】
前記オブジェクト移動手段は、前記最大制動値検出手段によって最大制動値が検出されるまでは、前記パワー値に基づいて前記オブジェクトを移動させ、当該最大制動値検出手段で最大制動値が算出された後は、当該パワー値と当該最大制動値に基づいて当該オブジェクトを移動させる、請求項３に記載のゲームプログラム。
【請求項５】
前記ゲームプログラムは、前記コンピュータを、前記姿勢動き情報に基づいて前記入力装置の姿勢を算出する姿勢算出手段として更に機能させ、
前記パワー値算出手段は、前記姿勢算出手段で算出された入力装置の姿勢に基づいて前記パワー値を算出する、請求項１に記載のゲームプログラム。
【請求項６】
前記制動値算出手段は、
前記オブジェクト移動手段が前記オブジェクトの移動を開始するときにおける前記入力装置の姿勢と、現在の入力装置の姿勢との差が大きいほど前記制動値が小さくなるように当該制動値を補正するための補正係数を算出する補正係数算出手段と、
前記算出された補正係数を用いて、前記制動値を補正する制動値補正手段とを含む、請求項５に記載のゲームプログラム。
【請求項７】
前記制動値算出手段は、前記入力装置を所定の弾性体とみなした際に当該入力装置の姿勢の変化に応じて当該入力装置に生じる仮想的なしなりの角度を前記制動値として算出する、請求項５に記載のゲームプログラム。
【請求項８】
前記オブジェクト移動手段は、前記入力装置の姿勢が所定の条件を満たした時に、前記パワー値データと前記制動値データとに基づいて前記オブジェクトを移動させる、請求項５に記載のゲームプログラム。
【請求項９】
前記姿勢算出手段は、
前記入力装置を所定の弾性体とみなした際に当該入力装置の姿勢の変化に応じて当該入力装置に生じる仮想的なしなりを算出するしなり算出手段と、
前記しなり算出手段で算出された仮想的なしなりに基づいて、前記入力装置の姿勢を補正する姿勢補正手段とを含み、
前記オブジェクト移動手段は、前記姿勢補正手段で補正された入力装置の姿勢が所定の条件を満たした時に、前記パワー値データと前記制動値データとに基づいて前記オブジェクトを移動させる、請求項８に記載のゲームプログラム。
【請求項１０】
前記ゲームプログラムは、前記コンピュータを、所定のタイミングで、前記姿勢動き情報に基づいて所定の平面を基準平面として実空間内に仮想的に設定する基準平面設定手段として更に機能させ、
前記オブジェクト移動手段は、前記基準平面に対する前記姿勢補正手段で補正された入力装置の姿勢が所定の関係になった時に、前記パワー値データと前記制動値データとに基づいて前記オブジェクトを移動させる、請求項９に記載のゲームプロラム。
【請求項１１】
前記動きセンサは角速度センサであり、
前記姿勢動き情報取得手段は、前記角速度センサで検出された角速度情報を姿勢動き情報として取得する、請求項１に記載のゲームプログラム。
【請求項１２】
前記制動値算出手段は、所定の時間間隔における角速度の変化量を前記制動値として算出する、請求項１１に記載のゲームプログラム。
【請求項１３】
前記動きセンサは加速度センサであり、
前記姿勢動き情報取得手段は、前記加速度センサで検出された加速度情報を姿勢動き情報として取得する、請求項１に記載のゲームプログラム。
【請求項１４】
前記制動値算出手段は、所定の時間における加速度を前記制動値として算出する、請求項１３に記載のゲームプログラム。
【請求項１５】
前記ゲームプログラムは、前記入力装置を仮想空間内に存在するゴルフクラブ、前記オブジェクトをゴルフボールと見立てたゴルフゲームプログラムであり、
前記オブジェクト移動手段は、前記パワー値データに基づいたパワーを前記ゴルフボールに与えることで当該ゴルフボールを移動させると共に、当該ゴルフボールに対して、前記制動値データに基づいたバックスピンの変化を与える、請求項１に記載のゲームプログラム。
【請求項１６】
前記オブジェクト移動手段は、
前記仮想空間内において前記ゴルフクラブが前記ゴルフボールと接触したか否かを判定する接触判定手段を含み、
前記接触判定手段によって前記ゴルフクラブが前記ゴルフボールと接触したと判定されたときに、前記パワー値データおよび制動値データに基づいて前記ゴルフボールを移動させる、請求項１５に記載のゲームプログラム。
【請求項１７】
前記接触判定手段は、
前記ゴルフクラブの位置を前記制動値データに基づいて補正する位置補正手段を含み、
当該位置補正手段による補正後のゴルフクラブの位置を用いて前記ゴルフボールとの接触判定を行う、請求項１６に記載のゲームプログラム。
【請求項１８】
ユーザが操作する入力装置の姿勢または動きを検出する所定の検出手段から取得する姿勢動き情報に基づいて、仮想空間内のオブジェクトを移動させるゲーム装置であって、
前記検出手段で検出された姿勢動き情報を繰り返し取得する姿勢動き情報取得手段と、
前記姿勢動き情報に基づき、前記オブジェクトに与えるパワーを示すパラメータであるパワー値データを算出するパワー値算出手段と、
前記姿勢動き情報に基づき、前記入力装置に加えられた制動力を示す制動値データを算出する制動値算出手段と、
前記パワー値データと前記制動値データとに基づいて前記オブジェクトを移動させるオブジェクト移動手段とを備える、ゲーム装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想空間内のオブジェクトを移動させるゲームプログラム、および、ゲーム装置に関し、より特定的には、ユーザが操作する入力装置の姿勢または動きを検出する所定の検出手段から取得する姿勢動き情報に基づいて所定のオブジェクトを移動させるゲームプログラム、およびゲーム装置に関する。
【背景技術】
【０００２】
従来より、いわゆるゴルフゲームにおいて、ワイヤレスのコントローラ自体を振り上げて、振り下ろす操作を行うことで、仮想ゲーム空間内のゴルフクラブを動作（ゴルフスイング）させて楽しむゴルフゲームが開示されている（例えば、非特許文献１）。当該ゴルフゲームでは、スイングを行う際の操作内容として、以下のような流れとなっている。まず、画面には、図５８に示すようなゲージが表示されている。当該ゲージには、リモコンカーソル９０１、クラブヘッドカーソル９０２、インパクトゾーン９０３が表示されている。そして、プレイヤは、コントローラのＡボタンを押しながら当該コントローラを振り上げる。すると、この動きに連動して画面内のリモコンカーソル９０１がゲージに沿って移動する（図５８では右方向に移動）。これに併せて、クラブヘッドカーソル９０２がリモコンカーソル９０１を追うように移動する。その後、クラブヘッドカーソル９０２がリモコンカーソル９０１に追いついて重なると、クラブヘッドカーソル９０２は反転して元の位置に戻っていく。そして、このクラブヘッドカーソル９０２がインパクトゾーン９０３の範囲内に戻ってきたときに、プレイヤがコントローラを振り下ろすことで、ゴルフのショット動作を行うことができる。更に、プレイヤが所定のボタン（上記ゲームでは、１ボタンや２ボタン）を押した状態で当該ショット動作を行うことで、打球にトップスピンやバックスピンをかけることが可能となっている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】「ＷＥ  ＬＯＶＥ  ＧＯＬＦ！」取扱説明書、株式会社ＣＡＰＣＯＭ、Ｐ６〜７、Ｐ１６〜１７、Ｐ２２〜２３
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述したようなゲーム装置においては、以下に示す問題点があった。上述のゴルフゲームでは、プレイヤがコントローラを振り上げて振り下ろすという動作に連動して仮想ゲーム空間内のゴルフクラブを移動させることができ、この点においては、実際のゴルフスイングを仮想的に体感できている。しかしながら、上記バックスピンなどの、ゴルフボールに対して与える変化に関しては、所定のボタンを押下するという操作が必要となり、実際のゴルフとは異なる動作を行う必要があった。そのため、実際のゴルフを仮想的に体感できるという効果が薄れてしまうという問題があった。
【０００５】
それ故に、本発明の目的は、より高い現実感をプレイヤに与えるような操作が可能なゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【０００６】
本発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、本発明の理解を助けるために後述する実施形態との対応関係の一例を示したものであって、本発明を何ら限定するものではない。
【０００７】
第１の発明は、ユーザが操作する入力装置の姿勢または動きを検出する所定の検出手段から取得する姿勢動き情報に基づいて、仮想空間内のオブジェクトを移動させるゲーム装置のコンピュータに実行させるゲームプログラムであって、コンピュータを、姿勢動き情報取得手段（Ｓ２）と、パワー値算出手段（Ｓ５３）と、制動値算出手段（Ｓ１７１）と、オブジェクト移動手段（Ｓ１２４、Ｓ１６３）として機能させる。姿勢動き情報取得手段は、検出手段で検出された姿勢動き情報を繰り返し取得する。パワー値算出手段は、姿勢動き情報に基づき、オブジェクトに与えるパワーを示すパラメータであるパワー値データを算出する。制動値算出手段は、姿勢動き情報に基づき、入力装置に加えられた制動力を示す制動値データを算出する。オブジェクト移動手段は、パワー値データと制動値データとに基づいてオブジェクトを移動させる。
【０００８】
第１の発明によれば、プレイヤの操作によって発生した制動力を反映してオブジェクトの動きを表現することができ、プレイヤが行う操作に関して、より高い現実感をプレイヤに与えることができる。
【０００９】
第２の発明は、第１の発明において、検出手段は、入力装置に備えられた動きセンサである。
【００１０】
第２の発明によれば、入力装置の姿勢をより正確に算出することが可能となる。
【００１１】
第３の発明は、第１の発明において、ゲームプログラムは、コンピュータを、制動値算出手段で算出された制動値のうちの最大値である最大制動値を検出する最大制動値検出手段として更に機能させる。そして、オブジェクト移動手段は、最大制動値に基づいてオブジェクトを移動させる。
【００１２】
第３の発明によれば、違和感のないプレイ感覚を提供する事ができ、ゲームの興趣性を高めることができる。
【００１３】
第４の発明は、第３の発明において、オブジェクト移動手段は、最大制動値検出手段によって最大制動値が検出されるまでは、パワー値に基づいてオブジェクトを移動させ、当該最大制動値検出手段で最大制動値が算出された後は、当該パワー値と当該最大制動値に基づいて当該オブジェクトを移動させる。
【００１４】
第４の発明によれば、オブジェクトの移動が開始した後に、最大制動値に基づく影響を当該オブジェクトに与えることが可能となる。
【００１５】
第５の発明は、第１の発明において、ゲームプログラムは、コンピュータを、姿勢動き情報に基づいて入力装置の姿勢を算出する姿勢算出手段（Ｓ５１）として更に機能させる。そして、パワー値算出手段は、姿勢算出手段で算出された入力装置の姿勢に基づいてパワー値を算出する。
【００１６】
第５の発明によれば、より正確にプレイヤの操作を反映した処理を実行することができる。
【００１７】
第６の発明は、第５の発明において、制動値算出手段は、補正係数算出手段（Ｓ１０１）と制動値補正手段（Ｓ１０２、Ｓ１０３）とを含む。補正係数算出手段は、オブジェクト移動手段がオブジェクトの移動を開始するときにおける入力装置の姿勢と、現在の入力装置の姿勢との差が大きいほど制動値が小さくなるように当該制動値を補正するための補正係数を算出する。制動値補正手段は、補正係数算出手段で算出された補正係数を用いて、制動値を補正する。
【００１８】
第６の発明によれば、操作の現実感をより高めることができ、ゲームの興趣性を高めることができる。
【００１９】
第７の発明は、第５の発明において、制動値算出手段は、入力装置を所定の弾性体とみなした際に当該入力装置の姿勢の変化に応じて当該入力装置に生じる仮想的なしなりの角度を制動値として算出する。
【００２０】
第７の発明によれば、しなりの発生を想定した処理を実行することができ、操作の現実感がより高いゲームを提供することが可能となる。
【００２１】
第８の発明は、第５の発明において、オブジェクト移動手段は、入力装置の姿勢が所定の条件を満たした時に、パワー値データと制動値データとに基づいてオブジェクトを移動させる。
【００２２】
第９の発明は、第８の発明において、姿勢算出手段は、入力装置を所定の弾性体とみなした際に当該入力装置の姿勢の変化に応じて当該入力装置に生じる仮想的なしなりを算出するしなり算出手段と、しなり算出手段で算出された仮想的なしなりに基づいて、入力装置の姿勢を補正する姿勢補正手段とを含む。そして、オブジェクト移動手段は、姿勢補正手段で補正された入力装置の姿勢が所定の条件を満たした時に、パワー値データと制動値データとに基づいてオブジェクトを移動させる。
【００２３】
第１０の発明は、第９の発明において、ゲームプログラムは、コンピュータを、所定のタイミングで、姿勢動き情報に基づいて所定の平面を基準平面として実空間内に仮想的に設定する基準平面設定手段として更に機能させる。そして、オブジェクト移動手段は、基準平面に対する姿勢補正手段で補正された入力装置の姿勢が所定の関係になった時に、パワー値データと制動値データとに基づいてオブジェクトを移動させる。
【００２４】
第８乃至第１０の発明によれば、操作の現実感がより高いゲームを提供することが可能となる。
【００２５】
第１１の発明は、第１の発明において、動きセンサは角速度センサである。また、姿勢動き情報取得手段は、角速度センサで検出された角速度情報を姿勢動き情報として取得する。
【００２６】
第１２の発明は、第１１の発明において、制動値算出手段は、所定の時間間隔における角速度の変化量を制動値として算出する。
【００２７】
第１１乃至１２の発明によれば、角速度の変化を用いることで、処理負荷を高めることのない簡易な処理で制動値を算出することが可能となる。
【００２８】
第１３の発明は、第１の発明において、動きセンサは加速度センサである。そして、姿勢動き情報取得手段は、加速度センサで検出された加速度情報を姿勢動き情報として取得する。
【００２９】
第１４の発明は、第１３の発明において、制動値算出手段は、所定の時間における加速度を制動値として算出する。
【００３０】
第１３乃至１４の発明によれば、加速度の変化を用いることで、処理負荷を高めることのない簡易な処理で制動値を算出することが可能となる。
【００３１】
第１５の発明は、第１の発明において、ゲームプログラムは、入力装置を仮想空間内に存在するゴルフクラブ、オブジェクトをゴルフボールと見立てたゴルフゲームプログラムである。そして、オブジェクト移動手段は、パワー値データに基づいたパワーをゴルフボールに与えることで当該ゴルフボールを移動させると共に、当該ゴルフボールに対して、制動値データに基づいたバックスピンの変化を与える。
【００３２】
第１６の発明は、第１５の発明において、オブジェクト移動手段は、仮想空間内においてゴルフクラブがゴルフボールと接触したか否かを判定する接触判定手段（Ｓ１１１）を含む。そして、オブジェクト移動手段は、接触判定手段によってゴルフクラブがゴルフボールと接触したと判定されたときに、パワー値データおよび制動値データに基づいてゴルフボールを移動させる。
【００３３】
第１５乃至１６の発明によれば、ゴルフゲームにおいて、現実の操作により近い間隔で打球にバックスピンをかけることができ、ゴルフゲームの興趣性をより高めることができる。
【００３４】
第１７の発明は、第１６の発明において、接触判定手段は、ゴルフクラブの位置を制動値データに基づいて補正する位置補正手段（Ｓ１１２）を含む。そして、当該位置補正手段による補正後のゴルフクラブの位置を用いてゴルフボールとの接触判定を行う。
【００３５】
第１７の発明によれば、例えばゴルフクラブのヘッド部分の、打球を打つ方向へのしなりを考慮して、ゴルフクラブとゴルフボールとの接触判定を行うことができ、ゲームの興趣性を高めることができる。
【００３６】
第１８の発明は、ユーザが操作する入力装置の姿勢または動きを検出する所定の検出手段から取得する姿勢動き情報に基づいて、仮想空間内のオブジェクトを移動させるゲーム装置であって、姿勢動き情報取得手段（１０）と、パワー値算出手段（１０）と、制動値算出手段（１０）と、オブジェクト移動手段（１０）とを備える。姿勢動き情報取得手段は、検出手段で検出された姿勢動き情報を繰り返し取得する。パワー値算出手段は、姿勢動き情報に基づき、オブジェクトに与えるパワーを示すパラメータであるパワー値データを算出する。制動値算出手段は、姿勢動き情報に基づき、入力装置に加えられた制動力を示す制動値データを算出する。オブジェクト移動手段は、パワー値データと制動値データとに基づいてオブジェクトを移動させる。
【００３７】
第１８の発明によれば、第１の発明と同様の効果を得ることができる。
【発明の効果】
【００３８】
本発明によれば、より高い現実感をプレイヤに与えることが可能なゲームを提供することができる。
【図面の簡単な説明】
【００３９】
【図１】ゲームシステム１の外観図
【図２】ゲーム装置３の構成を示すブロック図
【図３】入力装置８の外観構成を示す斜視図
【図４】コントローラ５の外観構成を示す斜視図
【図５】コントローラ５の内部構造を示す図
【図６】コントローラ５の内部構造を示す図
【図７】入力装置８の構成を示すブロック図
【図８】本実施形態で想定するゲームの画面の一例
【図９】プレイヤの操作方法について説明するための図
【図１０】本実施形態で想定するゲームの画面の一例
【図１１】基準平面の概念を示す模式図
【図１２】本実施形態で想定するゲームの画面の一例
【図１３】パワーゲージ１０４に関して説明するための図
【図１４】パワーゲージ１０４に関して説明するための図
【図１５】パワーゲージ１０４に関して説明するための図
【図１６】パワーゲージ１０４に関して説明するための図
【図１７】パワーゲージ１０４に関して説明するための図
【図１８】本実施形態で想定するゲームの画面の一例
【図１９】パワーゲージ１０４に関して説明するための図
【図２０】捻り角度に関して説明するための図
【図２１】バックスピン操作について説明するための図
【図２２】バックスピン操作について説明するための図
【図２３】入力装置８と基準平面、および、２つの候補面の関係の一例
【図２４】クラブヘッド部分のしなりの一例を模式的に示した図
【図２５】クラブヘッド部分を「バネ」と「ダンパー」でモデル化した図
【図２６】基準Ｘ角度の概念を示す模式図
【図２７】現在Ｘ角度の概念を示す模式図
【図２８】捻り角度をパワーゲージの湾曲度に変換するグラフの一例
【図２９】振りかぶり量Ｈの算出について説明するための図
【図３０】振りかぶり角度の絶対値を振りかぶり量Ｈに変換するグラフの一例
【図３１】構え直し姿勢の正しさＳｔの算出について説明するための図
【図３２】ゲーム装置３の外部メインメモリ１２のメモリマップを示す図
【図３３】図３２の操作データ１２７のデータ構造の一例を示した図
【図３４】図３２のゲーム処理用データ１２８のデータ構造の一例を示した図
【図３５】本発明の実施形態に係るゲーム処理を示すフローチャート
【図３６】本発明の実施形態に係るゲーム処理を示すフローチャート
【図３７】本発明の実施形態に係るゲーム処理を示すフローチャート
【図３８】図３６のステップＳ８で示した構えなおし処理の詳細を示したフローチャート
【図３９】図３８のステップＳ３２で示した基準平面設定処理の詳細を示したフローチャート
【図４０】図３９のステップＳ４７の処理概要を説明するための図
【図４１】図３７のステップＳ１６で示したスイング関連処理の詳細を示したフローチャート
【図４２】図４１のステップＳ５２で示したパワーゲージ更新処理の詳細を示したフローチャート
【図４３】図４２のステップＳ６１で示した捻り角度算出処理の詳細を示したフローチャート
【図４４】図４２のステップＳ６２で示した振りかぶり角度算出処理の詳細を示したフローチャート
【図４５】図４１のステップＳ５３で示した打球パワー算出処理の詳細を示したフローチャート
【図４６】図４１のステップＳ５４で示したしなり角算出処理の詳細を示したフローチャート
【図４７】図３７のステップＳ１７で示したインパクト関連処理の詳細を示したフローチャート
【図４８】図４７のステップＳ１１５で示したショット処理の詳細を示したフローチャート
【図４９】図３７のステップＳ１８で示した構え直しガイド処理の詳細を示したフローチャート
【図５０】図４９のステップＳ１３４で示したＫｒの算出処理の詳細を示したフローチャート
【図５１】図４９のステップＳ１３５で示したＫｓの算出処理の詳細を示したフローチャート
【図５２】図３５のステップＳ４で示したボール移動処理の詳細を示したフローチャート
【図５３】図５２のステップＳ１６２で示したバックスピン率設定処理の詳細を示したフローチャート
【図５４】パワーゲージ１０４の形状の変化の一例を示す図
【図５５】振りかぶり角度を振りかぶり量Ｈに変換するためのグラフの一例
【図５６】捻り角度をパワーゲージの湾曲度に変換するためのグラフの一例
【図５７】捻り角度をパワーゲージの湾曲度に変換するためのグラフの一例
【図５８】従来のゴルフゲームにおけるゲージの一例
【発明を実施するための形態】
【００４０】
［ゲームシステムの全体構成］
図１を参照して、本発明の一実施形態に係る姿勢算出装置の一例であるゲーム装置を含むゲームシステム１について説明する。図１は、ゲームシステム１の外観図である。以下、据置型のゲーム装置を一例にして、本実施形態のゲーム装置およびゲームプログラムについて説明する。図１において、ゲームシステム１は、テレビジョン受像器（以下、単に「テレビ」と記載する）２、ゲーム装置３、光ディスク４、入力装置８、およびマーカ部６を含む。本システムは、入力装置８を用いたゲーム操作に基づいてゲーム装置３でゲーム処理を実行するものである。
【００４１】
ゲーム装置３には、当該ゲーム装置３に対して交換可能に用いられる情報記憶媒体の一例である光ディスク４が脱着可能に挿入される。光ディスク４には、ゲーム装置３において実行されるためのゲームプログラムが記憶されている。ゲーム装置３の前面には光ディスク４の挿入口が設けられている。ゲーム装置３は、挿入口に挿入された光ディスク４に記憶されているゲームプログラムを読み出して実行することによってゲーム処理を実行する。
【００４２】
ゲーム装置３には、表示装置の一例であるテレビ２が接続コードを介して接続される。テレビ２は、ゲーム装置３において実行されるゲーム処理の結果得られるゲーム画像を表示する。また、テレビ２の画面の周辺（図１では画面の上側）には、マーカ部６が設置される。マーカ部６は、その両端に２つのマーカ６Ｒおよび６Ｌを備えている。マーカ６Ｒ（マーカ６Ｌも同様）は、具体的には１以上の赤外ＬＥＤであり、テレビ２の前方に向かって赤外光を出力する。マーカ部６はゲーム装置３に接続されており、ゲーム装置３はマーカ部６が備える各赤外ＬＥＤの点灯を制御することが可能である。
【００４３】
入力装置８は、自機に対して行われた操作の内容を示す操作データをゲーム装置３に与えるものである。本実施形態では、入力装置８はコントローラ５とジャイロセンサユニット７とを含む。詳細は後述するが、入力装置８は、コントローラ５に対してジャイロセンサユニット７が着脱可能に接続されている構成である。コントローラ５とゲーム装置３とは無線通信によって接続される。本実施形態では、コントローラ５とゲーム装置３との間の無線通信には例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術が用いられる。なお、他の実施形態においてはコントローラ５とゲーム装置３とは有線で接続されてもよい。
【００４４】
［ゲーム装置３の内部構成］
次に、図２を参照して、ゲーム装置３の内部構成について説明する。図２は、ゲーム装置３の構成を示すブロック図である。ゲーム装置３は、ＣＰＵ１０、システムＬＳＩ１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５等を有する。
【００４５】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。システムＬＳＩ１１の内部構成については後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置３の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ：Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ１１ｅまたは外部メインメモリ１２に読み出したデータを書き込む。
【００４６】
また、システムＬＳＩ１１には、入出力プロセッサ（Ｉ／Ｏプロセッサ）１１ａ、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）１１ｂ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１１ｃ、ＶＲＡＭ１１ｄ、および内部メインメモリ１１ｅが設けられる。図示は省略するが、これらの構成要素１１ａ〜１１ｅは内部バスによって互いに接続される。
【００４７】
ＧＰＵ１１ｂは、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ１１ｄは、ＧＰＵ１１ｂがグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ１１ｂは、ＶＲＡＭ１１ｄに記憶されたデータを用いて画像データを作成する。
【００４８】
ＤＳＰ１１ｃは、オーディオプロセッサとして機能し、内部メインメモリ１１ｅや外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００４９】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、読み出した画像データをＡＶコネクタ１６を介してテレビ２に出力するとともに、読み出した音声データを、テレビ２に内蔵されるスピーカ２ａに出力する。これによって、画像がテレビ２に表示されるとともに音がスピーカ２ａから出力される。
【００５０】
入出力プロセッサ１１ａは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ１１ａは、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、およびメモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００５１】
入出力プロセッサ１１ａは、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ１１ａは、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介してネットワークに送信する。また、入出力プロセッサ１１ａは、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０はゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置３と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置３を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００５２】
また、入出力プロセッサ１１ａは、コントローラ５から送信される操作データをアンテナ２３および無線コントローラモジュール１９を介して受信し、内部メインメモリ１１ｅまたは外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。
【００５３】
さらに、入出力プロセッサ１１ａには、拡張コネクタ２０およびメモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ１１ａは、拡張コネクタ２０やメモリカード用コネクタ２１を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
【００５４】
ゲーム装置３には、電源ボタン２４、リセットボタン２５、およびイジェクトボタン２６が設けられる。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置３の各構成要素に対して、図示しないＡＣアダプタを経て電源が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置３の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００５５】
［入力装置８の構成］
次に、図３〜図６を参照して、入力装置８について説明する。図３は、入力装置８の外観構成を示す斜視図である。図４は、コントローラ５の外観構成を示す斜視図である。図３は、コントローラ５の上側後方から見た斜視図であり、図４は、コントローラ５を下側前方から見た斜視図である。
【００５６】
図３および図４において、コントローラ５は、例えばプラスチック成型によって形成されたハウジング３１を有している。ハウジング３１は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。プレイヤは、コントローラ５に設けられたボタンを押下すること、および、コントローラ５自体を動かしてその位置や姿勢を変えることによってゲーム操作を行うことができる。
【００５７】
ハウジング３１には、複数の操作ボタンが設けられる。図３に示すように、ハウジング３１の上面には、十字ボタン３２ａ、１番ボタン３２ｂ、２番ボタン３２ｃ、Ａボタン３２ｄ、マイナスボタン３２ｅ、ホームボタン３２ｆ、プラスボタン３２ｇ、および電源ボタン３２ｈが設けられる。本明細書では、これらのボタン３２ａ〜３２ｈが設けられるハウジング３１の上面を「ボタン面」と呼ぶことがある。一方、図４に示すように、ハウジング３１の下面には凹部が形成されており、当該凹部の後面側傾斜面にはＢボタン３２ｉが設けられる。これらの各操作ボタン３２ａ〜３２ｉには、ゲーム装置３が実行するゲームプログラムに応じた機能が適宜割り当てられる。また、電源ボタン３２ｈは遠隔からゲーム装置３本体の電源をオン／オフするためのものである。ホームボタン３２ｆおよび電源ボタン３２ｈは、その上面がハウジング３１の上面に埋没している。これによって、プレイヤがホームボタン３２ｆまたは電源ボタン３２ｈを誤って押下することを防止することができる。
【００５８】
ハウジング３１の後面にはコネクタ３３が設けられている。コネクタ３３は、コントローラ５に他の機器（例えば、ジャイロセンサユニット７や他のコントローラ）を接続するために利用される。また、ハウジング３１の後面におけるコネクタ３３の両側には、上記他の機器が容易に離脱することを防止するために係止穴３３ａが設けられている。
【００５９】
ハウジング３１上面の後方には複数（図３では４つ）のＬＥＤ３４ａ〜３４ｄが設けられる。ここで、コントローラ５には、他のメインコントローラと区別するためにコントローラ種別（番号）が付与される。各ＬＥＤ３４ａ〜３４ｄは、コントローラ５に現在設定されている上記コントローラ種別をプレイヤに通知したり、コントローラ５の電池残量をプレイヤに通知したりする等の目的で用いられる。具体的には、コントローラ５を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のＬＥＤ３４ａ〜３４ｄのいずれか１つが点灯する。
【００６０】
また、コントローラ５は撮像情報演算部３５（図６）を有しており、図４に示すように、ハウジング３１前面には撮像情報演算部３５の光入射面３５ａが設けられる。光入射面３５ａは、マーカ６Ｒおよび６Ｌからの赤外光を少なくとも透過する材質で構成される。
【００６１】
ハウジング３１上面における１番ボタン３２ｂとホームボタン３２ｆとの間には、コントローラ５に内蔵されるスピーカ４９（図５）からの音を外部に放出するための音抜き孔３１ａが形成されている。
【００６２】
次に、図５および図６を参照して、コントローラ５の内部構造について説明する。図５および図６は、コントローラ５の内部構造を示す図である。なお、図５は、コントローラ５の上筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図６は、コントローラ５の下筐体（ハウジング３１の一部）を外した状態を示す斜視図である。図６に示す斜視図は、図５に示す基板３０を裏面から見た斜視図となっている。
【００６３】
図５において、ハウジング３１の内部には基板３０が固設されており、当該基板３０の上主面上に各操作ボタン３２ａ〜３２ｈ、各ＬＥＤ３４ａ〜３４ｄ、加速度センサ３７、アンテナ４５、およびスピーカ４９等が設けられる。これらは、基板３０等に形成された配線（図示せず）によってマイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）４２（図６参照）に接続される。本実施形態では、加速度センサ３７は、Ｘ軸方向に関してコントローラ５の中心からずれた位置に配置されている。これによって、コントローラ５をＺ軸回りに回転させたときのコントローラ５の動きが算出しやすくなる。また、加速度センサ３７は、長手方向（Ｚ軸方向）に関してコントローラ５の中心よりも前方に配置されている。また、無線モジュール４４（図６）およびアンテナ４５によって、コントローラ５がワイヤレスコントローラとして機能する。
【００６４】
一方、図６において、基板３０の下主面上の前端縁に撮像情報演算部３５が設けられる。撮像情報演算部３５は、コントローラ５の前方から順に赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を備えている。これらの部材３８〜４１はそれぞれ基板３０の下主面に取り付けられる。
【００６５】
さらに、基板３０の下主面上には、上記マイコン４２およびバイブレータ４８が設けられている。バイブレータ４８は、例えば振動モータやソレノイドであり、基板３０等に形成された配線によってマイコン４２と接続される。マイコン４２の指示によりバイブレータ４８が作動することによってコントローラ５に振動が発生する。これによって、コントローラ５を把持しているプレイヤの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ４８は、ハウジング３１のやや前方寄りに配置される。つまり、バイブレータ４８がコントローラ５の中心よりも端側に配置することによって、バイブレータ４８の振動によりコントローラ５全体を大きく振動させることができる。また、コネクタ３３は、基板３０の下主面上の後端縁に取り付けられる。なお、図５および図６に示す他、コントローラ５は、マイコン４２の基本クロックを生成する水晶振動子、スピーカ４９に音声信号を出力するアンプ等を備えている。
【００６６】
また、ジャイロセンサユニット７は、３軸回りの角速度を検知するジャイロセンサ（図７に示すジャイロセンサ５５および５６）を有する。ジャイロセンサユニット７は、コントローラ５のコネクタ３３に着脱可能に装着される。ジャイロセンサユニット７の前端（図３に示すＺ軸正方向側の端部）には、コネクタ３３に接続可能なプラグ（図７に示すプラグ５３）が設けられる。さらに、プラグ５３の両側にはフック（図示せず）が設けられる。ジャイロセンサユニット７がコントローラ５に対して装着される状態では、プラグ５３がコネクタ３３に接続されるとともに、上記フックがコントローラ５の係止穴３３ａに係止する。これによって、コントローラ５とジャイロセンサユニット７とがしっかりと固定される。また、ジャイロセンサユニット７は側面（図３に示すＸ軸方向の面）にボタン５１を有している。ボタン５１は、それを押下すれば上記フックの係止穴３３ａに対する係止状態を解除することができるように構成されている。したがって、ボタン５１を押下しながらプラグ５３をコネクタ３３から抜くことによって、ジャイロセンサユニット７をコントローラ５から離脱することができる。
【００６７】
また、ジャイロセンサユニット７の後端には、上記コネクタ３３と同形状のコネクタが設けられる。したがって、コントローラ５（のコネクタ３３）に対して装着可能な他の機器は、ジャイロセンサユニット７のコネクタに対しても装着可能である。なお、図３においては、当該コネクタに対してカバー５２が着脱可能に装着されている。
【００６８】
なお、図３〜図６に示したコントローラ５およびジャイロセンサユニット７の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であっても、本発明を実現することができる。また、本実施形態では、撮像手段による撮像方向はＺ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ５における撮像情報演算部３５の位置（撮像情報演算部３５の光入射面３５ａ）は、ハウジング３１の前面でなくてもよく、ハウジング３１の外部から光を取り入れることができれば他の面に設けられてもかまわない。
【００６９】
図７は、入力装置８（コントローラ５およびジャイロセンサユニット７）の構成を示すブロック図である。コントローラ５は、操作部３２（各操作ボタン３２ａ〜３２ｉ）、コネクタ３３、撮像情報演算部３５、通信部３６、および加速度センサ３７を備えている。コントローラ５は、自機に対して行われた操作内容を示すデータを操作データとしてゲーム装置３へ送信するものである。
【００７０】
操作部３２は、上述した各操作ボタン３２ａ〜３２ｉを含み、各操作ボタン３２ａ〜３２ｉに対する入力状態（各操作ボタン３２ａ〜３２ｉが押下されたか否か）を示す操作ボタンデータを通信部３６のマイコン４２へ出力する。
【００７１】
撮像情報演算部３５は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部３５は、例えば最大２００フレーム／秒程度のサンプリング周期を有するので、比較的高速なコントローラ５の動きでも追跡して解析することができる。
【００７２】
撮像情報演算部３５は、赤外線フィルタ３８、レンズ３９、撮像素子４０、および画像処理回路４１を含んでいる。赤外線フィルタ３８は、コントローラ５の前方から入射する光から赤外線のみを通過させる。レンズ３９は、赤外線フィルタ３８を透過した赤外線を集光して撮像素子４０へ入射させる。撮像素子４０は、例えばＣＭＯＳセンサやあるいはＣＣＤセンサのような固体撮像素子であり、レンズ３９が集光した赤外線を受光して画像信号を出力する。ここで、テレビ２の表示画面近傍に配置されるマーカ部６のマーカ６Ｒおよび６Ｌは、テレビ２の前方に向かって赤外光を出力する赤外ＬＥＤで構成される。したがって、赤外線フィルタ３８を設けることによって、撮像素子４０は、赤外線フィルタ３８を通過した赤外線だけを受光して画像データを生成するので、マーカ６Ｒおよび６Ｌの画像をより正確に撮像することができる。以下では、撮像素子４０によって撮像された画像を撮像画像と呼ぶ。撮像素子４０によって生成された画像データは、画像処理回路４１で処理される。画像処理回路４１は、撮像画像内における撮像対象（マーカ６Ｒおよび６Ｌ）の位置を算出する。画像処理回路４１は、算出された位置を示す座標を通信部３６のマイコン４２へ出力する。この座標のデータは、マイコン４２によって操作データとしてゲーム装置３に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ５自体の向き（傾斜角度）や位置に対応して変化するので、ゲーム装置３はこのマーカ座標を用いてコントローラ５の向きや位置を算出することができる。
【００７３】
なお、他の実施形態においては、コントローラ５は画像処理回路４１を備えていない構成であってもよく、撮像画像自体がコントローラ５からゲーム装置３へ送信されてもよい。このとき、ゲーム装置３は、画像処理回路４１と同様の機能を有する回路あるいはプログラムを有しており、上記マーカ座標を算出するようにしてもよい。
【００７４】
加速度センサ３７は、コントローラ５の加速度（重力加速度を含む）を検出する、すなわち、コントローラ５に加わる力（重力を含む）を検出する。加速度センサ３７は、当該加速度センサ３７の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度（直線加速度）の値を検出する。例えば、２軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。例えば、３軸または２軸の加速度センサは、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能である種類のものでもよい。なお、加速度センサ３７は、例えば静電容量式の加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
【００７５】
本実施形態では、加速度センサ３７は、コントローラ５を基準とした上下方向（図３に示すＹ軸方向）、左右方向（図３に示すＸ軸方向）および前後方向（図３に示すＺ軸方向）の３軸方向に関してそれぞれ直線加速度を検出する。加速度センサ３７は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ３７からの出力は３軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、入力装置８（コントローラ５）を基準に設定されるＸＹＺ座標系（コントローラ座標系）における３次元のベクトル（ａｘ，ａｙ，ａｚ）として表される。以下では、加速度センサ３７によって検出される３軸に関する各加速度値を各成分とするベクトルを加速度ベクトルと呼ぶ。
【００７６】
加速度センサ３７が検出した加速度を示すデータ（加速度データ）は、通信部３６へ出力される。なお、加速度センサ３７が検出した加速度は、コントローラ５自体の向き（傾斜角度）や動きに対応して変化するので、ゲーム装置３は加速度データを用いてコントローラ５の向きや動きを算出することができる。本実施形態では、ゲーム装置３は、加速度データに基づいてコントローラ５の姿勢を判断する。
【００７７】
加速度センサ３７が検出した加速度（加速度ベクトル）を示すデータ（加速度データ）は、通信部３６へ出力される。本実施形態において、加速度センサ３７は、コントローラ５の傾斜角度を判断するためのデータを出力するセンサとして用いられる。
【００７８】
なお、加速度センサ３７から出力される加速度の信号に基づいて、ゲーム装置３のプロセッサ（例えばＣＰＵ１０）またはコントローラ５のプロセッサ（例えばマイコン４２）等のコンピュータが処理を行うことによって、コントローラ５に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ３７を搭載するコントローラ５が静止状態であることを前提としてコンピュータ側の処理が実行される場合（すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合）、コントローラ５が現実に静止状態であれば、検出された加速度に基づいてコントローラ５の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ３７の検出軸が鉛直下方向を向いている状態を基準としたとき、１Ｇ（重力加速度）がかかっているか否かによって、コントローラ５が基準に対して傾いているか否かを知ることができるし、その大きさによって基準に対してどの程度傾いているかも知ることができる。また、多軸の加速度センサ３７の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ５がどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ３７からの出力に基づいてコントローラ５の傾斜角度を算出してもよいし、当該傾斜角度を算出せずに、コントローラ５の傾斜方向を算出するようにしてもよい。このように、加速度センサ３７をプロセッサと組み合わせて用いることによって、コントローラ５の傾斜角度または姿勢を判定することができる。
【００７９】
一方、コントローラ５が動的な状態（コントローラ５が動かされている状態）であることを前提とする場合には、加速度センサ３７は重力加速度に加えてコントローラ５の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ５の動き方向を知ることができる。また、コントローラ５が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ５の傾きを知ることが可能である。なお、他の実施例では、加速度センサ３７は、内蔵の加速度検出手段で検出された加速度信号をマイコン４２に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ３７が静的な加速度（例えば、重力加速度）を検出するために用いられる場合、加速度信号を傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。
【００８０】
通信部３６は、マイコン４２、メモリ４３、無線モジュール４４、およびアンテナ４５を含んでいる。マイコン４２は、処理を行う際にメモリ４３を記憶領域として用いながら、マイコン４２が取得したデータをゲーム装置３へ無線送信する無線モジュール４４を制御する。また、マイコン４２はコネクタ３３に接続されている。ジャイロセンサユニット７から送信されてくるデータは、コネクタ３３を介してマイコン４２に入力される。以下、ジャイロセンサユニット７の構成について説明する。
【００８１】
ジャイロセンサユニット７は、プラグ５３、マイコン５４、２軸ジャイロセンサ５５、および１軸ジャイロセンサ５６を備えている。上述のように、ジャイロセンサユニット７は、３軸（本実施形態では、ＸＹＺ軸）周りの角速度を検出し、検出した角速度を示すデータ（角速度データ）をコントローラ５へ送信する。
【００８２】
２軸ジャイロセンサ５５は、Ｘ軸周りの角速度およびＹ軸周りの（単位時間あたりの）角速度を検出する。また、１軸ジャイロセンサ５６は、Ｚ軸周りの（単位時間あたりの）角速度を検出する。なお、本明細書では、コントローラ５の撮像方向（Ｚ軸正方向）を基準として、ＸＹＺ軸周りの回転方向を、それぞれ、ロール方向、ピッチ方向、ヨー方向と呼ぶ。すなわち、２軸ジャイロセンサ５５は、ロール方向（Ｘ軸周りの回転方向）およびピッチ方向（Ｙ軸周りの回転方向）の角速度を検出し、１軸ジャイロセンサ５６は、ヨー方向（Ｚ軸周りの回転方向）の角速度を検出する。
【００８３】
なお、本実施形態では、３軸回りの角速度を検出するために、２軸ジャイロセンサ５５と１軸ジャイロセンサ５６とを用いる構成としたが、他の実施形態においては、３軸回りの角速度を検出することができればよく、用いるジャイロセンサの数および組み合わせはどのようなものであってもよい。
【００８４】
また、本実施形態では、後述する姿勢算出処理における計算を容易にする目的で、各ジャイロセンサ５５および５６が角速度を検出する３つの軸は、加速度センサ３７が加速度を検出する３つの軸（ＸＹＺ軸）と一致するように設定される。ただし、他の実施形態においては、各ジャイロセンサ５６および５７が角速度を検出する３つの軸と、加速度センサ３７が加速度を検出する３つの軸とは一致しなくてもよい。
【００８５】
各ジャイロセンサ５６および５７で検出された角速度を示すデータは、マイコン５４に出力される。したがって、マイコン５４には、ＸＹＺ軸の３軸回りの角度速度を示すデータが入力されることになる。マイコン５４は、上記３軸回りの角速度を示すデータを角速度データとしてプラグ５３を介してコントローラ５へ送信する。なお、マイコン５４からコントローラ５への送信は所定の周期毎に逐次行われるが、ゲームの処理は１／６０秒を単位として（１フレーム時間として）行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。
【００８６】
コントローラ５の説明に戻り、操作部３２、撮像情報演算部３５、および加速度センサ３７からマイコン４２へ出力されたデータ、ならびに、ジャイロセンサユニット７からマイコン４２へ送信されてきたデータは、一時的にメモリ４３に格納される。これらのデータは、上記操作データとしてゲーム装置３へ送信される。すなわち、マイコン４２は、ゲーム装置３の無線コントローラモジュール１９への送信タイミングが到来すると、メモリ４３に格納されている操作データを無線モジュール４４へ出力する。無線モジュール４４は、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ４５から放射する。つまり、操作データは、無線モジュール４４で微弱電波信号に変調されてコントローラ５から送信される。微弱電波信号はゲーム装置３側の無線コントローラモジュール１９で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置３は操作データを取得することができる。そして、ゲーム装置３のＣＰＵ１０は、取得した操作データとゲームプログラムとに基づいて、ゲーム処理を行う。なお、通信部３６から無線コントローラモジュール１９への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は１／６０秒を単位として（１フレーム時間として）行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ５の通信部３６は、例えば１／２００秒に１回の割合で各操作データをゲーム装置３の無線コントローラモジュール１９へ出力する。
【００８７】
上記コントローラ５を用いることによって、プレイヤは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ５を任意の傾斜角度に傾ける操作を行うことができる。その他、上記コントローラ５によれば、プレイヤは、コントローラ５によって画面上の任意の位置を指示する操作、および、コントローラ５自体を動かす操作を行うこともできる。
【００８８】
次に、本実施形態で想定するゲームの概要について説明する。図８は、本実施形態で想定するゲームの画面の一例である。本実施形態で想定するゲームはゴルフゲームである。図８において、３次元仮想空間内に構築されたゴルフコースがゲーム画面として表示されており、ゲーム画面には、ゴルフクラブ１０２を持ったプレイヤオブジェクト１０１、ゴルフボールオブジェクト１０３（以下、単にボールと呼ぶ）、パワーゲージ１０４等が表示されている。また、パワーゲージ１０４の中には、スイングバー１０６が表示されている。
【００８９】
次に、本ゲームにおけるプレイヤの操作方法について説明する。本ゲームは、上記入力装置８をゴルフクラブに見立てて操作する。例えば、プレイヤは、図９に示すように、入力装置８の前面（光入射面３５aがある面）を下方向に向けて両手で把持する。そして、プレイヤは、ゴルフのスイングを模した動作を行う。このスイング動作に連動して、仮想空間内のプレイヤオブジェクト１０１もスイング動作を行い、これに伴ってゴルフクラブ１０２も移動する。つまり、プレイヤの腕を振る動作が、プレイヤオブジェクト１０１のスイング動作に反映されることになる。
【００９０】
上記の操作についてより具体的に説明すると、まず、ボールを打つ前（スイングを開始する前）のプレイヤオブジェクトの初期状態としては、図８のように、ボール１０３から少し離れた場所に位置している。この状態のときに、プレイヤが上記のようにスイング動作を行うことで、「素振り」ができる。そして、ボールを打つときは、プレイヤはＡボタン３２ｄを押す。すると、図１０に示すように、プレイヤオブジェクト１０１が前進してボール１０３に近づく。そして、Ａボタン３２ｄを押したまま、プレイヤが上記スイング動作を行うことで、ゴルフクラブ１０２をボール１０３に当てて、ボール１０３を飛ばす、つまり、ショットを行うことができる。このように、本ゲームでは、プレイヤが入力装置８を把持し、Ａボタン３２ｄを押さずにゴルフのスイング動作を行うことで「素振り」を行い、Ａボタン３２ｄを押しながらスイング動作を行うことでボール１０３を打って飛ばすことで、実際のゴルフに近いプレイ感覚のゴルフゲームを楽しむことができる。
【００９１】
また、本ゲームでは、Ａボタン３２ｄを押していない状態で、Ｂボタン３２ｉを押すことで「構え直し」という操作を行うことができる。当該「構え直し」は、現実世界におけるプレイヤの正面方向を定義するための操作である（ゴルフでいう、「アドレス」の姿勢をとることに近い概念となる）。これは、ジャイロセンサでは姿勢の「変化」しか分からないため、プレイヤにＢボタン３２ｉを押してもらうことで、正面方向を定めるものである。そして、この操作で定義された正面方向を基準として、本ゴルフゲームにかかる各種処理が実行されることになる。
【００９２】
より具体的には、Ｂボタン３２ｉを押したときの入力装置８の姿勢に基づき、実空間においてプレイヤの正面方向に伸びるような仮想的な平面を算出し、「基準平面」として設定するような処理を実行する。図１１に、当該基準平面の概念を示す模式図を示す。図１１（ａ）に示すように、基準平面は、実空間におけるプレイヤ自身の正面方向に伸びるような（仮想上の）平面である。同時に、図１１（ｂ）に示すように、プレイヤの位置の対応する仮想空間内の位置、すなわち、プレイヤオブジェクト１０１の正面方向に伸びるような平面に相当する。そして、当該基準平面と、スイング中の入力装置８の姿勢とを比較することで、スイング角度（プレイヤが入力装置８を振りかぶっている量）などのパラメータの算出が実行されたり、また、インパクトが発生したか否か（ゴルフクラブ１０２とボール１０３が当たったか否か）の判定等が実行される。より具体的には、スイング角度（後述の振りかぶり角度）について、基準平面の位置を０°として捉え、ボールを飛ばす側を正の値、振りかぶる側を負の値の角度として考える（本実施形態では、＋１８０°〜−１８０°という範囲で考える）。そして、例えば、スイング角度が負の値から正の値に変化したときに、入力装置８が基準平面と接触、あるいは通過した（インパクトが発生した）という判定を行う。
【００９３】
しかし、一旦正面方向（基準平面）を決めたとしても、その後、プレイヤが入力装置８を振っているうちに、ジャイロセンサの計測誤差や計算誤差の蓄積によって、上記定義した正面方向と、その時々における入力装置８の姿勢との関係が不正確になり得る。また、プレイヤ自身が向きを変えることによって、上記正面方向と定義した方向が、プレイヤの目から見た正面方向ではなくなってしまうこともあり得る。その結果、入力装置８を振っているうちに、現実世界のプレイヤが今、仮想ゲーム空間においてどちらの方向を向いて立っているか分からない（仮想ゲーム空間における正面方向を向いているのかどうかわからない）という問題が発生する。結果的に、プレイヤは「正面」を向いてスイングしているつもりでも、ゲーム処理上は、正面を向いていない状態でスイングしているような扱いで処理され得る。そのために、定期的にＢボタン３２ｉを押すことで、正面方向（基準平面）を再設定する必要がある。また、例えば、入力装置８を一旦振りかぶった後、振り下ろさずにそのままの状態を維持したまま、ある程度時間が経過したような場合も、上記計算誤差の蓄積による影響が発生する可能性がある。そのため、上記Ｂボタン３２ｉを押したときの入力装置８の姿勢（アドレス時の姿勢）と、現在の入力装置８の姿勢との差異が大きい状態であり、入力装置８に動きが発生していない状態がある程度の時間経過したような場合も、上記正面方向（基準平面）を再設定することが好ましい。
【００９４】
ここで、本実施形態では、Ｂボタン３２ｉが押されたときの入力装置８の持ち方の違いによって、正面方向を算出するための計算が不安定となることを回避するために、後述するような処理を行うことで、多角的な基準で正面方向（基準平面）を定めている。
【００９５】
更に、本実施形態では、基準平面の再設定の必要性を推定して、適当だと思われるタイミングで、図１２に示すような、上記「構え直し」操作をプレイヤに促すメッセージ１０５（以下、構え直しガイドと呼ぶ）の表示を行うという処理も実行している。
【００９６】
次に、上記ゲーム画面に表示されているパワーゲージ１０４に関して説明する。パワーゲージ１０４は、棒状の形状で表示されており、ゴルフクラブ１０２の振りかぶり量（プレイヤにとっては、打球パワーの目安となる情報）と、手首の捻り度合い（Ｚ軸回りの角度）という２種類の情報を表示するものである。まず、振りかぶり量については、ゲージ内のスイングバー１０６の位置で示される。このスイングバー１０６は、振りかぶり量に応じてゲージ内を上下する。例えば、図１３に示すように、基本姿勢（アドレスの姿勢）の状態では、スイングバー１０６はパワーゲージ１０４の一番下に位置している。その後、ゴルフクラブ１０２がボール１０３にインパクトするまでの間は、スイングバー１０６は振りかぶり量に応じてリアルタイムにパワーゲージ１０４内を上下する。
【００９７】
具体的には、ゴルフクラブ１０２（実世界では、入力装置８）を振り上げると、図１４に示すように、スイングバー１０６は上方に移動する。振りかぶり量が大きいほど、より上に移動する。その後、クラブを振り下げると、スイングバー１０６は下方に移動する。そして、インパクト時には、図１５に示すように、スイングバー１０６はパワーゲージ１０４の一番下に位置することになる。また、インパクトの時点で、打球のパワーが決定する。打球パワーが決定すると（すなわち、インパクトすると）、スイングバー１０６の表示は消えて、代わりに、図１６に示すような、打球パワーを示すパワーバー１０７が、決定した打球パワーを示す長さまで下から伸びていく。そして、決定した打球パワーに対応する長さまで伸びると、図１７に示すように、パワーバー１０７の伸びはそこで停止し、それ以上は伸びない。
【００９８】
次に、手首の捻り角度（Ｚ軸回りの回転角度）については、図１８に示すように、パワーゲージ１０４の形状自体を湾曲させることで表現している。例えば、手首を右側（時計回り）に捻っていれば、図１９（ａ）に示すように、パワーゲージ１０４の形状が右に湾曲した形状となる。また、手首を左方向（反時計回り）に捻っていれば、図１９（ｂ）示すように、左に湾曲した形状となす。また、捻り具合が大きい程、湾曲具合も大きくなり、捻り具合が小さければ、図１９（ｃ）にように、湾曲具合も小さくなる。なお、本実施形態では、捻り角度（Ｚ軸周りの回転角度）の最大値は、図２０に示すように、入力装置８のＹ軸を中心として、左右それぞれ３５°（−３５°〜＋３５°）までとして扱う（これ以上の角度の捻りは、３５°の捻りとして扱う）。また、捻り角度については、本実施形態では、構え直し操作を行ったときの角度を０°として、右側への捻りを正の値、左側の捻りを負の値として算出されるものとする。
【００９９】
このようにして、本実施形態のパワーゲージ１０４では、振りかぶり量と手首の捻り角度という異なる２つの要素を１つのパワーゲージでまとめて表示している。
【０１００】
次に、本実施形態にかかる処理のうち、特徴的な処理について説明する。本実施形態において特徴的な処理は、大きく以下の３つに大別される。
（１）ショット関連処理
（２）パワーゲージ関連処理
（３）かまえなおしガイド処理
【０１０１】
まず、上記（１）ショット関連については、更に以下のような３つの処理に大別される。
（１−１）基準平面算出処理
（１−２）振り下ろし動作反映処理
（１−３）バックスピン処理
まず、（１−１）基準平面算出処理は、上述のように、Ｂボタン３２ｉが押されたときに上記基準平面を算出・設定するための処理である。上記のように、コントローラの持ち方の違いによって、基準平面を算出するための計算が不安定となることを回避するために、多角的な視点で基準平面を算出する処理である。
【０１０２】
次に、（１−２）振り下ろし動作反映処理は、クラブを振りかぶったときの上記スイングバー１０６の高さをベースにショットパワーを算出する処理である。具体的には、一旦クラブを振り上げ、その後、ゆっくりと下ろした場合は、スイングバー１０６の降下にともない弱いショットパワーが算出される。一方、一旦クラブを振り上げ、ある程度勢いよく振り下ろした場合は、振りかぶったときのスイングバー１０６の高さに近いショットパワーが算出される。また、一旦クラブを振り上げた後、さらに強く振り下ろした場合は、それ以上のショットパワーが算出される。つまり、振り下ろし時の際の動き方をショットパワーに反映させるための処理である。スイング中の振り下ろしにかかる動作をショットに反映させるための処理である。具体的には、上記スイングバー１０６の移動に関して、一旦クラブを振り上げ、その後、ゆっくりと下ろしたときは、スイングバー１０６もその動きに追従して下がるが、一旦振り上げて、勢いよく振り下ろした場合、ほぼ振り上げたときのパワーでショットすることができる。つまり、振り下ろし時の際の動き方をショットパワーに反映させる処理である。
【０１０３】
次に、（１−３）バックスピン処理については、本実施形態では、スイングしてインパクトしたときに、図２１に示すように、最後まで振り切らずに、図２２に示すようにボール１０３のある場所で止めるようなスイング（インパクトの位置で急ブレーキをかけて止めるようなスイング）を行うことで、打球にバックスピンをかけることができる。そして、このような、途中で急ブレーキをかけるようなスイング（制動力がかかったスイング）を検出し、そのときの動きをバックスピンに反映させる処理が、当該（１−３）バックスピン処理である。
【０１０４】
次に、上記（２）パワーゲージ関連処理では、上記のような、振りかぶりの量（スイング角度）と、手首の捻り（Ｚ軸まわりの回転角度）とを算出して、それぞれをパワーゲージ１０４の表示に反映させるための処理が実行される。
【０１０５】
次に、（３）かまえなおしガイド処理とは、本実施形態では、上記のように、定期的にＢボタン３２ｉの押下による「構え直し」（基準平面の再設定）が必要となるが、この基準平面の再設定の必要性を推定して、適当だと思われるタイミングで上記構え直しガイド１０５の表示を行う処理である。
【０１０６】
次に、上記の各処理の概要について説明する。
［基準平面設定処理の概要］
まず、上記（１）ショット関連処理の（１−１）基準平面設定処理にかかる処理の概要を説明する。本処理は、上述したように、Ｂボタン３２ｉが押されたときに基準平面（正面方向）を定義する処理である。そして、Ｂボタン３２ｉが押されたときの、プレイヤの入力装置８の持ち方の違いによる計算結果の不安定さを回避するために、本実施形態では、以下のような処理を行っている。
【０１０７】
まず、現在の入力装置８の姿勢に基づいて、（入力装置８のローカル座標系における）Ｚ軸方向と重力方向を含む平面を算出する。以下、この平面を、第１の候補面と呼ぶ。
【０１０８】
次に、Ｚ軸正方向を重力方向に向けるような回転を、Ｙ軸に対して加えることで、Ｙ'軸を算出する。これは、仮想的に入力装置８を真下に向け直し、この状態のＹ軸方向を求めたものである。そして、当該Ｙ'軸と重力方向とを含む平面を算出する。以下、この平面を第２の候補面と呼ぶ。
【０１０９】
なお、Ｙ軸をそのまま使うのではなく、Ｙ'軸を算出するのは、以下の理由による。一般的に、ゴルフスイングの構えを取った場合、入力装置８は真下を向いた姿勢よりも、斜めになった姿勢（Ｚ軸を持ち上げるような姿勢）となることが多いと考えられる。このＺ軸の持ち上がりの姿勢回転に引きずられて、Ｙ軸方向がプレイヤの正面方向からずれているケースが多い。そのため、Ｙ軸をそのまま使うよりも、入力装置８を一旦真下に向けたと仮定したＹ'軸を用いるほうが、ゴルフゲームの処理を行う際には、より良い算出結果が得られると考えられるためである。そのため、ゲーム処理の内容によっては、Ｙ'軸を使わず、Ｙ軸をそのまま用いてもよい。
【０１１０】
そして、上記２つの候補面と、その時点において算出済みである基準平面（つまり、直近に算出された基準平面）とに基づいて、新たな基準平面を算出する。当該新たな基準平面の算出については、例えば以下のような処理を用いる。まず、上記２つの候補面をブレンドすることで新たは基準平面を求めるという方法がある。このとき、現在の基準平面に近いほうに位置する候補面をより信頼するような重み付けを加えて、２つの平面をブレンドするような処理を行う。
【０１１１】
例えば、入力装置８と基準平面、および、上記２つの候補面との関係が、図２３のような関係とする。図２３は、入力装置８のＺ軸負方向から見た場合を想定した模式図である。この場合、第１の候補面と現在の基準平面との成す角をθＡ、第２の候補面と現在の基準平面との成す角をθＢとすると、例えば、以下のような式で新たな基準平面を算出する。
重みa＝1-cos(θB/2)
重みb＝1-cos(θA/2)
比率a＝重みa / (重みa＋重みb)
比率b＝重みb / (重みa＋重みb)
新たな基準平面＝比率ａ×第１の候補面＋比率ｂ×第２の候補面  ・・・式１
なお、上記の式において、重みaは、第２の候補面が現在の基準平面からずれているほど大きくなり、重みbは、第１の候補面が現在の基準平面からずれているほど大きくなる。
【０１１２】
また、上記比率aおよび比率bについては、以下のような式を用いて算出してもよい。
重みa＝1-cos(θB/2)
重みb＝1-cos(θA/2)
【０１１３】
【数１】
2010246613.tif 000003
【０１１４】
【数２】
2010246613.tif 000004
【０１１５】
新たな基準平面＝比率ａ×第１の候補面＋比率ｂ×第２の候補面
【０１１６】
なお、上記式１については、現在の基準平面と各候補面との「近さ」に着目したものであるが、この他、各候補面と重力方向とのなす角度に着目した手法を用いても良い。すなわち、上記Ｚ軸方向と重力方向のなす角と、上記Ｙ軸方向（あるいはＹ'軸方向）と重力方向のなす角とをそれぞれ算出する。そして、算出した角度が大きいほど、上記式１における加重平均の比率（上記比率aおよび比率b）を高めるようにしてもよい。
【０１１７】
また、別の算出方法として、現在の基準平面により近い方の候補面だけを選び、当該候補面と現在の基準平面とをブレンドすることで新たな基準平面を算出するようにしてもよい。候補面と基準平面との関係が上記図２３のような関係であるとすると、例えば、以下のような式で算出する。
新たな基準平面＝０．９×現在の基準平面＋０．１×選択した候補面・・・式２
なお、上記式２では、加重平均の比率を固定（０．９と０．１）している。この式の場合、現在の基準平面の重み付けが高い、つまり、現在の基準平面の信頼度を高くした式となっている。
【０１１８】
また、上記式２で固定的に設定している加重平均の比率については、固定的にすることに限らない。例えば、上記「現在の基準平面により近い方の候補面」を算出するための用いた軸（Ｚ軸あるいはＹ'軸）と重力方向との成す角度が大きいほど、上記式３における加重平均の比率を高めるようにしてもよい。
【０１１９】
また、上記「現在の基準平面により近い方の候補面」の代わりに、上記Ｚ軸と重力方向との成す角と、Ｙ'軸と重力方向との成す角とをそれぞれ算出し、成す角が大きいほうの平面を選択するようにしてもよい。つまり、入力装置８が、ゴルフスイングの構えのように、下に下がった状態であればＹ'軸を用いて算出された候補面をより信頼し、野球のバッターの構えのように、入力装置８が起き上がっているような状態であれば、Ｚ軸を用いて算出された候補面をより信頼して新たな基準平面を算出するようにしてもよい。
【０１２０】
なお、上記のブレンド方法はあくまで一例であり、これらに限らず、２つの候補平面および現在の基準平面を適切にブレンドできれば、どのような処理方法を用いても良い。
【０１２１】
以上のような算出方法を用いることで、基準平面について、複数の方法で算出した候補面が矛盾する場合は信頼度を考慮しつつゆるやかに補正を行い、一致する場合は大胆に大きく補正するという結果を得ることができる。このように、「重力方向」や「現在の基準平面」との関係に注目することで、プレイヤの入力装置８の持ち方の違いによる計算結果の不安定さ、すなわち、ちょっとした持ち方のぶれでプレイヤの意図しない方向に正面方向（基準平面）が設定される、ということを回避している。
その結果、プレイヤの入力装置８の持ち方に応じて基準平面の位置を補正するような処理が行われていることになる。
【０１２２】
［振り下ろし動作反映処理の概要］
次に、上記（１−２）の振り下ろし動作反映処理の処理概要を説明する。本処理は、振り下ろし時の動きを打球パワーに反映させるための処理であり、例えば、プレイヤが大きく振りかぶり、強く振り下ろせば打球パワーが大きく算出され、弱く、あるいはゆっくりと振り下ろせば、それに連れて打球パワーも低下させて算出するような処理である。具体的には、プレイヤがコントローラ振りかぶることで、スイングバー１０６がパワーゲージ１０４の一番上（打球パワーの目安として、１００％の打球パワーが期待できるような状態）まで上がった場合を想定する。この状態から、プレイヤが素早く振り下ろすようにスイングを行えば、ほぼ１００％のパワーを打球パワーに反映する。一方、スイングバー１０６がパワーゲージ１０４の一番上まで上がっている状態から、プレイヤが思い直して（例えば、これでは強すぎる、と考えた場合等）、例えばパワーゲージ１０４の７５％くらいの位置（パワーゲージ１０４の一番下から３／４程度の距離の位置）まで、ゆっくりと入力装置８（ゴルフクラブ１０２）を下げて（この動きに連動して、スイングバー１０６も下に下がる）、その位置からスイングした場合は、上述したような１００％のパワーではなく、思い直して下ろした後の７５％付近のパワーを打球パワーに反映する。このような、振り下ろし動作にかかる内容を打球パワーに反映させるための処理である。
【０１２３】
上記のような処理内容を実現するために、本実施形態では、以下のような処理を実行している。まず、スイングバー１０６に対応する振りかぶり量Ｈが算出される。振りかぶり量Ｈの算出については、後述の「パワーゲージ関連処理」についての説明等において説明するが、プレイヤが入力装置８を振りかぶっている量（スイングの角度）が振りかぶり量（つまり、パワーゲージ１０４内におけるスイングバー１０６の位置）として算出される。更に、本処理では、この振りかぶり量（スイングバー１０６）に追従するような追従量Ｔ（Ｔは０．０〜１．０）という値を算出する。当該追従量Ｔは、以下のような式で算出される。
Ｈ＜Ｔのときは
Ｔ＝Ｔ＋追従係数Ｋｔ×（Ｈ−Ｔ）  ・・・式３
Ｈ≧Ｔのときは、
Ｔ＝Ｈ
上記の式について説明すると、Ｈ＜Ｔのとき、というのは、振り下げ動作を行っているときを示し、Ｈ≧Ｔのとき、というのは、主に振り上げ動作を行っているときを示している。そして、振り上げ動作が行われているときは、追従量Ｔは振りかぶり量Ｈと同じ値にしておき、振り下げ動作中のみ追従するような値が算出されるようにしている。また、追従係数Ｋｔは、強いスイングのとき（加速度が大きいとき）は追従性を低くし、弱いスイングのとき（加速度が小さいとき）は、追従性を高くするための係数である。当該追従係数Ｋｔは、スイング中の振りの強さを加速度の大きさで捉え、変化させている。具体的には、まず、加速度センサ３７から得られる加速度から、重力成分（１．０Ｇ）を除去し、更にその絶対値をとったものを「加速度の大きさ」とする。本実施形態では、この絶対値は、０．０Ｇ〜１．２Ｇの範囲内の値になるものとする。そして、この加速度の大きさである０．０Ｇ〜１．２Ｇの値を、０．２〜０．０１の範囲内の値に変換して（割り当てて）追従係数Ｋｔとする（つまり、Ｋｔ＝０．２〜０．０１）。
【０１２４】
このような算出を行うことで、プレイヤが入力装置８を振りがぶった後、速く振り下ろしたとき、あるいは、強く振り下ろしたときほど、追従量Ｔは、過去の振りかぶり量の内の最大値（以下、最大振りかぶり量と呼ぶ）に近い値が維持されうる。また、ゆっくり振り下ろす、あるいは弱く振り下ろすと、追従量Ｔは振りかぶり量Ｈと共に下がっていくことになる。
【０１２５】
なお、上記式３において、（Ｈ−Ｔ）としているため、振りかぶり量Ｈと追従量Ｔの差が大きいときほど、Ｔの値をより大きく減少させる（追従させる）ことになる。
【０１２６】
また、上記のＨ≧Ｔのときは、追従量Ｔの値は振りかぶり量Ｈを下限とする。つまり、振り下げの動作中であっても、追従量Ｔの値は振りかぶり量Ｈの値を追い越して下がってしまわないようにしている。
【０１２７】
ここで、打球のパワーの決定に関して、従来のゴルフゲームでは最大振りかぶり量をスイングパワーとしていたが、本実施形態では、ゴルフクラブ１０２とボール１０３がインパクトしたときに最終的な打球のパワー（以下、打球パワーＰ）が決定される。このときに、上記最大振りかぶり量、あるいは、上記振りかぶり量Ｈの値をそのまま打球パワーＰとして用いるのではなく、上記追従量Ｔの値を打球パワーＰとして用いる。つまり、振りかぶり量Ｈを補正した値に相当する追従量Ｔを打球パワーＰとして用いる。これにより、上述のような速く振り下ろしたときと、ゆっくり振り下ろしたときの打球パワーＰの違いを実現することができる。しかし、本実施形態では、更に、打球パワーＰの決定に際して、以下のような処理を行うことで最終的な打球パワーＰを決定している。
【０１２８】
本実施形態では、上記追従量Ｔに加え、更に、「過剰な振り強さＳ」という要素を算出する（Ｓは０．０〜１．０）。これは、例えば「力を込めた強い振り下ろし方」と「力はあまり込めていない軽い振り下ろし方」等のような、スイングにかかる振り下ろしの「強さ」を評価し、打球パワーに反映しようとするものである。上記追従量Ｔの計算方法、特にスイング中の加速度が大きいときほど追従係数Ｋｔを小さくする計算によって、強く振れば振るほど（加速度が大きいほど）、打球パワーＰは大きくなる。しかし、その上限値は振りかぶり量Ｈの最大値に等しいので、逆に言うと、どんなに強く振ってもそれ以上の打球パワーを出すことはできない。そこで、強く振っても打球パワーＰ（追従量Ｔ）に影響しないような過剰なスイング中の加速度を「過剰な振り強さＳ」として評価し、改めて打球パワーＰに上乗せすることを考える。本実施形態では、この「過剰な振り強さ」を一連のスイング動作を通じて評価する方法として、仮想的にスイング中の加速度を目減りさせて計算してみて打球パワーＰがどう変化するかを観察する方法をとる。例えば、上記振りかぶり量Ｈの状態から振り下ろしたときの「振りおろしの強さ」を１００％とした場合に、加速度が２割しか出ていなかったと仮定して（つまり、加速度を８割引いて）上記追従量Ｔを再計算する。このように加速度を小さく見積もって再計算すると、上記追従量Ｔ等の要素もあり、最終的に、例えば、６０％〜８０％の「振りおろしの強さ」が算出されることが予想される。このように加速度を８割引で計算したにも関わらず、元の「振りおろしの強さ」との差が小さい（再計算結果が８０％程度の値）、つまり、あまり元の強さと変化がない場合は、もともとの加速度値が大きすぎると評価することができる。一方、元の「振りおろしの強さ」との差がより大きい（再計算結果が６０％程度の値）であれば、加速度的には無駄がなかったと評価することができる。つまり、加速度の目減りに応じて打球パワーＰが下がれば加速度的に無駄のないスイング、加速度を目減りさせても打球パワーＰがあまり下がらなければ、もともとの加速度値が大きすぎる、即ち、加速度的に過剰なスイングと考える。そこで、この元の「振り下ろしの強さ」と加速度を割り引いて再計算した「振り下ろしの強さ」との算出結果の差を「過剰な振り強さＳ」として評価する。
【０１２９】
具体的には、以下のような処理を行っている。まず、スイング中の加速度が、実際の２割しか出ていなかったと想定して（加速度を８割差し引いて）、上記追従量Ｔの算出と同じ計算を行い、その結果を割引追従量Ｔ'とする（本実施形態では、Ｔ'は０．０〜１．０）。そして、上記追従量Ｔと割引追従量Ｔ'とを比較し、その差をみる。その結果、両者の差が小さい場合は、より力の込められたスイング（加速度的に過剰なスイング）が行われていたとして扱い、両者の差が大きい場合は、実際のスイングの強さは（ゲーム処理上において）適当な強さの振り（加速度的に無駄のないスイング）として扱う。
【０１３０】
より具体的な算出方法について説明する。本実施形態では、まず、Ｔ'／Ｔを計算する。そして、その算出結果のうち０．６〜０．８の範囲内の値を上記過剰な振り強さＳ（０．０〜１．０）に割り当てる。そして、当該過剰な振り強さＳと追従量Ｔとを用いて、以下の式で最終的な打球パワーＰを算出する。
Ｐ＝Ｔ＋係数Ｋｓ×Ｓ  ・・・式４
ここで、係数Ｋｓは、Ｓの重み付けを示しており、本実施形態では０．２５とする。つまり、過剰な振り強さＳの２５％を追従量Ｔに上乗せすることで、打球パワーＰを決定している（なお、係数Ｋｓの値は、ゲームバランス等を考慮して適宜決められる値である）。
【０１３１】
上記のように、追従量Ｔ、および、過剰な振り強さＳという要素を加味して打球パワーＰを算出する処理を行うことで、本実施形態では、振り下ろしのときの動作内容を打球パワーに反映させることが可能となっている。例えば、スイングバー１０６を１００％の度合い（スイングバー１０６がパワーゲージ１０４の一番上まで上がった状態）まで振り上げた後、素早く振り下ろせば、ほぼ１００％の打球パワーが得られるが、ゆっくり振り下ろせば、それに連れてより低下した打球パワーになるという処理を実現することができる。
【０１３２】
［バックスピン処理の概要］
次に、上記（１−３）のバックスピンに関する処理の概要について説明する。上記のように、スイングの動作について、最後まで振り切らずに、途中でゴルフクラブを止めるようなスイングを行うことで、打球にバックスピンをかけることができる。このような動きを実現するため、本実施形態では、ゴルフクラブのヘッド部分の「しなり」を想定して利用する。より具体的には、「スイングによって後方にしなり、スイングが止まるとしなりが戻り、場合によっては惰性でさらに前方にしなる」ような「しなり」のモデルを利用する。
【０１３３】
上記のようなモデルにおける、スイング中のクラブヘッドのしなりを考えると、普通にスイングした場合、ゴルフクラブを振りあげ、振り下ろし始めてクラブヘッドがボールに当たるまでは、クラブヘッド部分は後方にしなる。そして、上記のようにスイングを急に止めたとき、つまり、制動力がかかったとき、クラブヘッド部分は惰性で前方にしなると考えられる。そこで、本実施形態では、この前方へのしなりの最大値を拾い、バックスピン率に反映するという処理を実行している。つまり、スイング（クラブ）が止まった後、惰性でどこまで前方（ボールが飛ぶ方向）にしなるかを測り、そのしなり具合に応じてバックスピン率（バックスピンの強さ）を設定するという処理を行っている。
【０１３４】
図２４に、当該ヘッド部分のしなりの一例を模式的に示す。図２４においては、角度θは上記の振りかぶり角度を示す。角度θｈ（以下、追従角度と呼ぶ）は、しなっているクラブのヘッド部分の角度を示す。そのため、しなり角φは、次の式で算出することができる（図２４では、φ＜０の状態である）。
φ＝θｈ−θ  ・・・式５
そして、当該しなり角φが前方（φ＞０）になったときの変化を監視しておき、前方への変化のうちの最大値を拾い、バックスピン率に反映する。
【０１３５】
上記のようなしなりを、「バネ」と「ダンパー」を用いてモデル化したものを図２５に示す。図２５では、クラブのヘッド部分が、「ばね」Ｋｐと「ダンパー」Ｋｄでクラブの本体部分に接続されているようなモデルを示している。本実施形態では、このようなモデルを用いて、クラブヘッド部分のしなりをシミュレートする。具体的には、まず、以下の式を用いて、ヘッド部分の加速度Ａを算出する。
Ａ＝−Ｋｐ（θｈ−θ）−Ｋｄ（θｈｄ−θｄ）・・・式６
ここで、変数θｈｄは、前フレームのθｈと現在のフレームとのθｈの差分を示す。また、変数θｄは、前フレームにおけるθと現在のフレームとのθの差分を示す。また、上記式６の「−Ｋｐ（θｈ−θ）」におけるθｈは、前フレームにおける追従角度θｈであり、θは現在の振りかぶり角度θである。
【０１３６】
更に、変数Ｋｐ（ばね）およびＫｄ（ダンパー）に関して、本実施形態では、振りかぶり角度θの絶対値に応じて変数ＫｐおよびＫｄを更新している。つまり、しなり特性を振りかぶり角度θに応じて変化させている。これは、インパクト付近ではしなりやすく、遠いときはしなりにくくするためである。その結果、インパクト付近でクラブを止めたほうがバックスピンがかかりやすくなり、最後まで振り切ると、バックスピンがかかりにくくなるようになる。
【０１３７】
そして、上記加速度Ａを用いてクラブヘッド部分の速度を算出し、この速度に基づいて、追従角度、すなわち、ヘッド部分の角度（位置）θｈを算出する。追従角度θｈが算出できれば、上記式５を用いてしなり角φを算出できる。
【０１３８】
その後、前方への最大のしなり角φを用いて、バックスピン率Ｋを更新するという処理を行っている。なお、本実施形態では、このとき、クラブの種類や打球のパワーに応じて、しなり角φをバックスピン率に反映させる割合を変化させる処理も行っている。
【０１３９】
このような処理を行うことで、スイング中に、インパクト付近でクラブを止めればバックスピンをかけることができ、更に、クラブを止める前にスイングの勢いがあれば、（クラブヘッドが惰性でより前方にしなるため）より強いバックスピンをかけることができるという処理が可能となる。
【０１４０】
［パワーゲージ関連処理の概要］
次に、上記（２）パワーゲージ関連処理の概要について説明する。本実施形態では、上記のように、手首の捻り（Ｚ軸回りの回転）と上述したような振りかぶり量Ｈを算出し、振りかぶり量Ｈは、スイングバー１０６として表示すると同時に、捻り具合については、パワーゲージ１０４の形状自体を湾曲させることで、２つの異なる要素を１つのパワーゲージでまとめて表現している。
【０１４１】
本実施形態では、捻り角度については、以下のようにして算出している。具体的には、まず、上述したように、構え直し操作時に、上記基準平面が算出される。このときに、当該基準平面に対する入力装置８のＸ軸の角度を算出して記憶する（以下、この角度を基準Ｘ角度と呼ぶ）。図２６に、当該基準Ｘ角度の概念を示す模式図を示す。図２６は、入力装置８が真下を向いている状況を想定して、Ｚ軸の負方向から見た場合を示している。図２６では、基準平面に対する入力装置８のＸ軸方向の角度は９０°となっている。
【０１４２】
次に、スイング中（基準平面設定後の毎フレームの処理）、その時々の姿勢から、上記基準平面の算出手法と同じ手法を用いて、仮想的な基準平面を算出する（以下、仮想基準面と呼ぶ）。そして、当該仮想基準面に対する、入力装置８のＸ軸方向の角度を算出する。例えば、入力装置８の状態が、Ｚ軸は真下に向いたまま、少し右に傾いたような状態と仮定し、Ｚ軸と重力方向を含む平面である仮想基準面と、当該仮想基準面に対するこのときのＸ軸方向の角度が図２７に示すような状態であるとする（以下、この角度を現在Ｘ角度と呼ぶ）。このときの現在Ｘ角度は、例えば１００°であるとする。そして、上記の基準Ｘ角度と、当該現在Ｘ角度との角度差を算出し、この角度差を捻り角度として扱う。上記の例では、１００°−９０°＝１０°が捻り角度として扱われることになる。そして、このようにして算出された捻り角度に基づいて、パワーゲージ１０４の形状をスイング動作中（ショットするまでの間）にリアルタイムに湾曲させて表示する。例えば、パワーゲージ１０４の湾曲度を−１．０〜１．０の範囲内の値（負の値が左に湾曲することを示し、正の値が右に湾曲することを示す）で定義しておき、図２８に示すように、捻り角度の値をこの範囲内の値に線形のグラフとなるように割り当てることで、パワーゲージ１０４の湾曲度を算出する。そして、当該湾曲度に基づいてパワーゲージ１０４の形状を湾曲させる。
【０１４３】
なお、捻り角度に関しては、Ｚ軸の角速度だけを用いて捻り角度を算出することも考えられるが、実際の振り動作はＺ軸まわりの回転だけでなくＸ軸まわりの回転やＹ軸まわりの回転の組み合わせによって行われる。そのため、例え「Ｚ軸の角速度の積算値」がゼロであっても、手首の捻りがないとは言い切れないことが考えられる。そのため、本実施形態では、上記のように、入力装置８の姿勢に基づく平面を利用して算出する。
【０１４４】
一方、振りかぶり量Ｈについては、基準姿勢を基準とした場合の、ゴルフクラブ１０２（入力装置８）を振りかぶっている角度、すなわち、入力装置８のＺ軸がどのくらい地面から起き上がっているか、を計算する。そして、この振りかぶり角度を振りかぶり量Ｈに変換し、スイングバー１０６の位置に反映させる。これは、ゴルフスイングの場合、入力装置８のＺ軸正方向が下を向いている状態が基本的な姿勢と考えられるため、この状態を基準としてＺ軸の傾きを見ることで、振りかぶっている角度を把握することができる。
【０１４５】
より具体的には、本実施形態では、以下のようにして振りかぶり量Ｈを算出する。まず、上記基準平面を基にして、図２９に示すような、重力上方向をＹ方向、当該平面に対する垂直方向をＸ方向とする座標系｛Ｌ｝を設定する。以下、当該座標系を「｛Ｌ｝座標系」と呼ぶ。
【０１４６】
次に、スイング中の入力装置８のローカル座標系におけるＺ軸正方向を上記｛Ｌ｝座標系に変換したベクトルＤを算出する。
【０１４７】
そして、当該ベクトルＤの３軸成分（Ｄｘ、Ｄｙ、Ｄｚ）に基づき、以下の式を基づいて、振りかぶり角度θを算出する。
θ＝Ａｔａｎ（Ｄｘ，−Ｄｙ＋Ｋ×Ｄｚ）・・・式７
なお、変数Ｋ＞０であるとする。また、上記式においては、水平にスイングされる場合（野球のようなスイング）を考慮して、Ｄｚの要素を加味している。すなわち、ＤｘおよびＤｙが共にゼロに近づいたとき（入力装置８が水平に構えられているような状態）のときに、角度の算出が不安定となることを防いでいる。また、Ｄｚがプラス側にあれば、実際よりも入力装置８を下に向けているのと同じ効果があり、マイナス側では、実際よりも入力装置８を上に向けるのと同じ効果が得られる。つまり、水平に振っていても（野球のようなスイングをしていても）、縦に振っている場合（ゴルフスイング）とある程度同じような効果を得ることができる。
【０１４８】
上記の式を用いた結果、構え直し操作が行われたときの姿勢（Ｂボタン３２ｉが押されたときの姿勢）のときは、θ＝０となる。また、前方（ゴルフボールを飛ばす方向）に入力装置８を振ると、θは正の値として算出される。また、入力装置８を振りかぶると、θは負の値として算出される。このように算出された振りかぶり角度θを振りかぶり量Ｈに変換する。例えば、振りかぶり角度θを−１８０°〜＋１８０°の範囲とし、振りかぶり量Ｈは０．０〜１．０の範囲の値として、図３０に示すような線形のグラフに基づいて振りかぶり角度θの絶対値を振りかぶり量Ｈに変換する。そして、当該振りかぶり量Ｈに応じてスイングバー１０６を上下させることで、振りかぶっている量を表示する。なお、本実施形態では、振りかぶり量Ｈが０．０のときは、スイングバー１０６はパワーゲージ１０４の一番下に来るものとし、振りかぶり量Ｈが１．０のときは、スイングバー１０６はパワーゲージ１０４の一番上に来るものとする。
【０１４９】
このように、本実施形態では、上記のような捻り角度をパワーゲージ１０４の湾曲で示すと同時に、スイングバー１０６をパワーゲージ１０４内で上下させることで、例えば上記図１８に示したような表示を行い、振りかぶり量（打球のパワーの目安）と手首の捻り具合（フェースの開き具合）という２つの要素をまとめて表示している。これにより、ショット時にゴルフボールに与える影響に関してプレイヤに直感的に把握させることが可能となる。
【０１５０】
［構え直しガイド処理の概要］
次に、上記（３）構え直しガイドの表示処理の概要について説明する。上述のように、本実施形態では、上記図１２で示したような、Ｂボタン３２ｉの押下による「構え直し」操作を推奨する、構え直しガイド１０５を適切なタイミングで表示する。構え直しガイド１０５の表示タイミングについては、基本的には、Ｂボタン３２ｉが押されたタイミングで内部的なカウンタ（以下、ガイド表示カウンタと呼ぶ）を用いてカウントアップを開始する。その後、毎フレーム、カウントアップされ、当該ガイド表示カウンタが所定値以上となれば、当該構え直しガイド１０５を表示するという処理を行っている。但し、本実施形態では、上記の「適切なタイミング」を決定するために、「構え直しの必要度」（以下、必要度Ｋｒ）と、「構え姿勢をとっている可能性」（以下、構え姿勢可能性Ｋｓ）を算出し、上記のカウントアップに反映する処理を行っている。更に、所定のタイミングでガイド表示カウンタのリセットも行うことで、「適切なタイミング」をより正確なものとしている。具体的には、以下のタイミングで上記ガイド表示カウンタをリセットしている。
（１）Ｂボタン３２ｉが押されたとき。
（２）入力装置８の姿勢が、「構えなおし」のときに期待される姿勢（アドレスの姿勢）と大きく異なっているとき。例えば、入力装置８のＺ軸正方向が水平より上を向いており、かつ、Ｙ軸正方向が水平より下を向いているような場合（野球のバッターのような構え）。
（３）スイング中の状態の時。これは、角速度や加速度の絶対値が所定値以上か否かで判定する。具体的には、角速度については、その絶対値が３０deg／secより大きいか否か、加速度については、その絶対値が０．２Ｇより大きいか否か。
【０１５１】
次に、上記必要度Ｋｒ、および、構え姿勢可能性Ｋｓの算出方法等について説明する。まず、上記必要度Ｋｒとは、構え直しが必要であると考えられる度合いのことである。また、構え姿勢可能性Ｋｓとは、プレイヤが構えの状態をとっている可能性である。ここでいう「構えの状態」とは、入力装置８の前面をある程度下側に向けているような状態（アドレスに近い状態）を想定するものである。つまり、ゴルフクラブを振りかぶっているような状態は除外される。
【０１５２】
上記必要度Ｋｒの算出について、本実施形態では、以下のようにして算出している。まず、「今この瞬間にＢボタンを押した」と仮定して仮の基準平面を作り、現在の基準平面との角度差の絶対値を算出する（当該２平面のなす角度とは、面法線と面法線のなす角度である）。そして、この角度差が０°であれば、構え直し不要と判定し、１１°以上であれば、構え直しが必要と判定する。
【０１５３】
ここで、必要度Ｋｒは０．０〜１．０の範囲の値をとるとし、０．０が構え直しの必要性がないことを示し、１．０が、構え直しの必要性が高いことを示す。すなわち、上記角度差が０°のときはＫｒ＝０．０、角度差が１１°のときはＫｒ＝１．０とする。そして、０°〜１１°の間のＫｒの値は、線形補間によって算出するものとする。
【０１５４】
次に、構え姿勢可能性Ｋｓの算出については、角速度の安定状態Ｓｗ、加速度の安定状態Ｓａ（つまり、激しい動きが発生していない状態）と、構え直し姿勢の正しさＳｔという要素を用いて算出する。まず、角速度の安定状態Ｓｗについては、スイング中ではないと考えられるときの角速度、すなわち、角速度の絶対値が３０deg／sec以下の場合に、当該角速度の絶対値を０．０〜１．０の値に換算してＳｗに割り当てる。加速度の安定状態Ｓａについても同様に、スイング中の動きではないと考えられる加速度の絶対値０Ｇ〜０．２Ｇを、Ｓａ０．０〜１．０の範囲に割り当てる。
【０１５５】
次に、構え直し姿勢の正しさＳｔという要素は、入力装置８を下に下ろしている度合いを示す要素である。これは、入力装置８のＸ軸がどの程度水平状態に近いかによって示される。図３１に、構え直し姿勢の正しさＳｔの概念を示す。図３１（ａ）に示すように、入力装置８の前面を下方に下げている状態であれば、入力装置８のローカル座標系におけるＸ軸は、水平状態（図３１（ｄ）参照）となる。この状態を、理想的な構え直し姿勢とすれば、その時々において算出される入力装置８の姿勢のＸ軸が水平か否かを見ることで（図３１（ｂ）、（ｃ）参照）、構え直し姿勢の正しさＳｔを算出することが可能となる。より具体的には、Ｘ軸の重力方向成分の絶対値を算出し、０．０〜１．０の範囲の値で示すことで、構え直し姿勢の正しさＳｔとする。
【０１５６】
そして、上記の要素を用いて、構え姿勢可能性Ｋｓを以下の式で算出する。
Ｋｓ＝Ｓｗ×Ｓａ×Ｓｔ  ・・・式８
【０１５７】
上記のようにして必要度Ｋｒ、および、構え姿勢可能性Ｋｓが算出できれば、これに基づき、以下の式を用いてガイド表示カウンタＣをカウントアップしていく。
Ｃ＝Ｃ＋Ｋｒ×Ｋｓ  ・・・式９
そして、ガイド表示カウンタの値が３０を越えれば、上記図１２に示したような構え直しガイド１０５を表示する処理を実行する。これにより、「構え直し」が必要で効果的なタイミングを測って構え直しガイド１０５を表示することができ、プレイヤによる構え直し操作がより適切なタイミングで行われることが期待できる。
【０１５８】
次に、ゲーム装置本体３によって実行されるゲーム処理の詳細を説明する。まず、ゲーム処理の際に外部メインメモリ１２に記憶されるデータについて説明する。図３２は、ゲーム装置３の外部メインメモリ１２のメモリマップを示す図である。図３２において、外部メインメモリ１２は、プログラム記憶領域１２１およびデータ記憶領域１２６を含む。プログラム記憶領域１２１およびデータ記憶領域１２６のデータは、光ディスク４に記憶され、ゲームプログラム実行時には外部メインメモリ１２に転送されて記憶される。
【０１５９】
プログラム記憶領域１２１は、ＣＰＵ１０によって実行されるゲームプログラムを記憶し、このゲームプログラムは、メイン処理プログラム１２２と、スイング関連処理プログラム１２３と、インパクト関連処理プログラム１２４などによって構成される。メイン処理プログラム１２２は、後述する図３５のフローチャートの処理に対応するプログラムである。スイング関連処理プログラム１２３は、プレイヤが行うスイング動作に関する各種処理をＣＰＵ１０に実行させるためのプログラムであり、インパクト関連処理プログラム１２４は、インパクトが発生したか否かを判定するための処理等をＣＰＵ１０に実行させるためのプログラムである。また、ボール移動処理プログラム１２５は、打球を移動させるための処理をＣＰＵ１０に実行させるためのプログラムである。
【０１６０】
データ記憶領域１２６には、操作データ１２７やゲーム処理用データ１２８などのデータが記憶されるとともに、ゲーム処理中に一時的に用いられる各種フラグや変数も記憶される。
【０１６１】
操作データ１２７は、コントローラ５からゲーム装置３へ送信されてくる操作データである。上述したように、コントローラ５からゲーム装置３へ１／２００秒に１回の割合で操作データが送信されるので、外部メインメモリ１２に記憶される操作データ１２７はこの割合で更新される。本実施形態においては、外部メインメモリ１２には、最新の（最後に取得された）操作データのみが記憶されればよい。
【０１６２】
操作データ１２７には、図３３に示すように、角速度データ１３１、加速度データ１３２、マーカ座標データ１３３、および操作ボタンデータ１３４が含まれる。角速度データ１３１は、ジャイロセンサユニット７のジャイロセンサ５５および５６によって検出された角速度を示すデータである。ここでは、角速度データ１３１は、図３に示すＸＹＺの３軸回りのそれぞれの角速度を示す。また、加速度データ１３２は、加速度センサ３７によって検出された加速度（加速度ベクトル）を示すデータである。ここでは、加速度データ１３２は、図３に示すＸＹＺの３軸の方向に関する加速度を各成分とする３次元の加速度ベクトルを示す。また、本実施形態においては、コントローラ５が静止している状態で加速度センサ３７が検出する加速度ベクトルの大きさを"１"とする。つまり、加速度センサ３７によって検出される重力加速度の大きさは"１"である。
【０１６３】
マーカ座標データ１３３は、撮像情報演算部３５の画像処理回路４１によって算出される座標、すなわち上記マーカ座標を示すデータである。マーカ座標は、撮像画像に対応する平面上の位置を表すための２次元座標系で表現される。なお、撮像素子４０によって２つのマーカ６Ｒおよび６Ｌが撮像される場合には、２つのマーカ座標が算出される。一方、撮像素子４０の撮像可能な範囲内にマーカ６Ｒおよび６Ｌのいずれか一方が位置しない場合には、撮像素子４０によって１つのマーカのみが撮像され、１つのマーカ座標のみが算出される。また、撮像素子４０の撮像可能な範囲内にマーカ６Ｒおよび６Ｌの両方が位置しない場合には、撮像素子４０によってマーカが撮像されず、マーカ座標は算出されない。したがって、マーカ座標データ１３３は、２つのマーカ座標を示す場合もあるし、１つのマーカ座標を示す場合もあるし、マーカ座標がないことを示す場合もある。
【０１６４】
操作ボタンデータ１３４は、各操作ボタン３２ａ〜３２ｉに対する入力状態を示すデータである。
【０１６５】
ゲーム処理用データ１２８は、図３４に示すように、入力装置姿勢データ１４１と、基準平面データ１４２と、基準Ｘ角度データ１４３と、仮想基準面データ１４４と、現在Ｘ角度データ１４５と、捻り角度データ１４６と、振りかぶり量データ１４７と、｛Ｌ｝座標系データ１４８と、ベクトルＤのデータ１４９と、第１の候補面データ１５０と、第２の候補面データ１５１と、前回振りかぶり角度データ１５２と、前回追従角度データ１５３と、前回しなり角データ１５４と、ガイド表示カウンタ１５５と、打球パワーデータ１５６と、バックスピン率データ１５７と、打球パラメータ１５８と、現在状態データ１５９と、画像データ１６０と、ショットフラグ１６１と、飛球中フラグ１６２と、バックスピンフラグ１６３と、終了フラグ１６４等が記憶される。
【０１６６】
入力装置姿勢データ１４１は、入力装置８の姿勢を示すデータである。ここで、本実施形態では、入力装置８の姿勢を、互いに直交する３つのベクトルの組（すなわち、Ｘ軸、Ｙ軸、Ｚ軸）で表す。そして、本実施形態では、電源投入時、あるいは、ゲーム処理の開始時に、初期値として、ワールド座標系における入力装置８の姿勢（すなわち、入力装置８のローカル座標系でみた姿勢）をＸ軸＝（１，０，０）、Ｙ軸＝（０，１，０）、Ｚ軸＝（０，０，１）と設定する。そして、ゲーム処理の開始後は、入力装置姿勢データ１４１で示される姿勢は、ジャイロセンサユニット７から取得した値に基づき、ワールド座標系に対する姿勢として算出されるものとする。
【０１６７】
基準平面データ１４２、基準Ｘ角度データ１４３は、上述したような基準平面、基準Ｘ角度を示すデータである。なお、本実施形態における各種平面を示すデータの保存形式については、各種平面が重力方向を含む（平行である）ため、平面を定めるという意味で、重力方向を軸とする回転の角度データを保存すればよい。また、冗長ではあるが、後述するような処理において利用しやすいという利点から、平面に含まれる水平ベクトル(重力方向と垂直なベクトル)１軸をデータとして保存するようにしても良い。更に、重力上方向のベクトル１軸と面の法線ベクトル１軸を加えて、３軸のベクトルデータとして保存しても良い。
【０１６８】
仮想基準面データ１４４、現在Ｘ角度データ１４５は、上述したような捻り角度の算出等のために用いる仮想基準面、現在Ｘ角度を示すデータである。また、捻り角度データ１４６は、算出された上記捻り角度を示すデータである。
【０１６９】
振りかぶり量データ１４７は、上記振りかぶり量Ｈに対応するデータであり、｛Ｌ｝座標系データ１４８は、上記｛Ｌ｝座標系（上記図２９参照）を示すデータである。また、ベクトルＤのデータ１４９は、図２９で示したベクトルＤを示すデータである。
【０１７０】
第１の候補面データ１５０および第２の候補面データ１５１は、基準平面を算出するために用いられる上記第１の候補面と第２の候補面を示すデータである。
【０１７１】
前回振りかぶり角度データ１５２、前回追従角度データ１５３、前回しなり角データ１５４は、インパクトの発生の判定等に用いられるデータであり、直前の処理ループにおいて算出された振りかぶり角度等の値を記憶したものである。
【０１７２】
ガイド表示カウンタ１５５は、上記図１２で示したような構え直しガイド１０５を表示するタイミングを測るためのカウンタである。
【０１７３】
打球パワーデータ１５６は、打球のパワーを示すデータである（上記打球パワーＰに対応するデータである）。バックスピン率データ１５７は、上記バックスピン率を示すデータである。また、打球パラメータ１５８は、打球を移動させるために用いる各種パラメータであり、打球が移動する軌道（弾道）や移動速度等のパラメータが含まれる。
【０１７４】
現在状態データ１５９は、現在選択しているゴルフクラブの種類や、現在の場所に関するデータ（フェアウェイかラフか等）、風の向きや風の強さ等、仮想ゲーム空間内におけるプレイヤオブジェクトを取り巻く環境に関するデータが含まれる。
【０１７５】
画像データ１６０は、ゲーム画像として表示される各種画像のデータである。上記構え直しガイド１０５の画像もこれに含まれる。
【０１７６】
ショットフラグ１６１は、スイングの際にＡボタン３２ｄが押されているか否か、つまり、プレイヤが行うスイングが素振りか否かを判定するためのフラグであり、Ａボタン３２ｄが押されているときはオンに設定される。
【０１７７】
飛球中フラグ１６２は、インパクトが発生する前（ボールが打たれる前）か、インパクトの発生後（ボールが打たれた後）かを判定するためのフラグである。当該フラグは、インパクト発生前はオフに設定され、インパクトが発生すれば、オンに設定される。
【０１７８】
バックスピンフラグ１６３は、バックスピン率の算出処理を実行する必要があるか否かを示すフラグである。当該フラグは、インパクト発生と共にオンに設定され、その後、バックスピン率の算出が終わればオフに設定される（本実施形態では、インパクトの発生後、打球が着地するまでの間にバックスピン率の算出処理が実行されるため）。
【０１７９】
終了フラグ１６４は、一打分に係る処理が終了したか否かを示すためのフラグである。
【０１８０】
次に、図３５〜図５３を参照して、ゲーム装置３によって実行されるゲーム処理について説明する。ゲーム装置３の電源が投入されると、ゲーム装置３のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動プログラムを実行し、これによってメインメモリ３３等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムが外部メインメモリ１２に読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。なお、図３５〜図３７に示すフローチャートは、ゴルフにおける一打分の処理を示したものであり、プレイヤによる一打分の動作毎に、図３５〜図３７のフローチャートの処理が実行される。また、図３５〜図３７に示すステップＳ１〜ステップＳ２１の処理ループは、１フレーム毎に繰り返し実行される。
【０１８１】
図３５において、まず、ＣＰＵ１０は、初期化処理を実行する（ステップＳ１）。この処理では、各種フラグや変数の初期化が実行される。
【０１８２】
次に、ＣＰＵ１０は、操作データ１２７を取得する（ステップＳ２）。続いて、ＣＰＵ１０は、飛球中フラグ１６２がオンか否かを判定する（ステップＳ３）。これは、インパクト前か後かを示すフラグである。当該判定の結果、移動中フラグがオンのとき、すなわち、インパクト後の状態であれば（ステップＳ３でＹＥＳ）、ステップＳ４の処理に進む。このときの処理については後述する。
【０１８３】
一方、飛球中フラグ１６２がオフのときは（ステップＳ３でＮＯ）、ボール１０３のインパクト前であるため、ＣＰＵ１０は、次に、環境設定処理を実行する（図３６のステップＳ５）。この処理では、ショットに関連する環境の設定がなされる。例えば、プレイヤオブジェクト１０１の現在位置がフェアウェイかラフ、あるいはバンカーか等を判定し、打球パワーの上限を制限するような設定や、ボールの射出方向を地形等に応じて変更する処理が実行される。また、ここで設定された内容を示すデータは、現在状態データ１５９として外部メインメモリ１２に記憶される。なお、当処理は、本発明の内容とは直接関連しないため、詳細な説明は省略する。
【０１８４】
次に、ＣＰＵ１０は、上記ステップＳ２で取得した操作データ１２７で示される操作内容が、スイング操作以外の操作にかかる内容であるか否かを判定する（ステップＳ６）。スイング操作以外の操作とは、例えば、ゴルフクラブを選択するための操作や、ショットする方向を変化させる（仮想カメラの向きを変える）ための操作等、本発明の内容に関わること以外の操作である。なお、ゴルフクラブの選択操作が行われたときは、選択したゴルフクラブの種類（ドライバやアイアン等）を示すデータは現在状態データ１５９の一部として外部メインメモリ１２に記憶される。
【０１８５】
当該判定の結果、スイング操作以外の操作が行われていたときは（ステップＳ６でＹＥＳ）、ＣＰＵ１０は、後述するステップＳ１９の処理に進む。一方、スイング操作以外の操作ではないときは（ステップＳ６でＮＯ）、次に、ＣＰＵ１０は、操作データ１２７で示される操作内容がＢボタン３２ｉの押下であるか否かを判定する（ステップＳ７）。当該判定の結果、Ｂボタン３２ｉが押されていたときは（ステップＳ７でＹＥＳ）、ＣＰＵ１０は、構え直し処理を実行する（ステップＳ８）。当該構え直し処理においては、上述したような基準平面を算出する処理等が実行される。
【０１８６】
図３８は、上記ステップＳ８で示した構え直し処理の詳細を示すフローチャートである。図３８において、まず、ＣＰＵ１０は、上記操作データ１２７に含まれる加速度データ１３２および角速度データ１３１に基づいて入力装置８の姿勢を算出する処理を実行する（ステップＳ３１）。本処理は、どのような処理方法であっても良いが、本実施形態では、上記のように、まず、ジャイロセンサユニット７で検出された角速度に基づいて入力装置８の姿勢を算出する。角速度から姿勢を算出する方法は、例えば、初期姿勢に（単位時間あたりの）角速度を逐次加算する方法がある。すなわち、ジャイロセンサユニット７から逐次出力される角速度に基づいて、初期状態から開始して、前回算出された姿勢に逐次変化を加えて更新していくことによって、現在の姿勢を算出することができる。次に、加速度センサ３７で検出された加速度データに基づいて上記角速度から算出された姿勢を補正する。本実施形態では、上記角速度から算出された姿勢を加速度データから決まる姿勢へと近づける補正を行う。次に角速度による姿勢の更新を行うときには、当該補正された姿勢にたいして角速度を加えることになる。加速度データから決まる姿勢とは、具体的には、加速度データが示す加速度の向きが鉛直下向きであると想定する場合における入力装置８の姿勢を指す。すなわち、加速度データが示す加速度が重力加速度であると仮定して算出された姿勢である。加速度によって決められる姿勢は、センサが静止しているときには正確だが、動いているときには誤差があるという性質がある。一方、ジャイロセンサは、センサ出力に誤差が含まれる場合に、算出された姿勢には時間と共に誤差が蓄積していくという性質がある。したがって、常に補正を加えながら姿勢を更新していくことによって、誤差の少ない姿勢が算出される。このようにして補正された姿勢が、入力装置姿勢データ１４１として外部メインメモリ１２に記憶される。以下（この姿勢のことを、現在姿勢と呼ぶ）。なお、加速度データを反映させない場合は、角速度の積分結果を初期姿勢に反映させた姿勢としてもよい。
【０１８７】
次に、ＣＰＵ１０は、基準平面設定処理を実行する（ステップＳ３２）。図３９は、当該基準平面設定処理の詳細を示すフローチャートである。図３９において、まず、ＣＰＵ１０は、現在の入力装置８のローカル座標系でのＺ軸（以下、ローカルＺ軸と呼ぶ）方向と、重力方向とを含む平面を第１の候補面として算出し、第１の候補面データ１５０として外部メインメモリ１２に記憶する（ステップＳ４１）。
【０１８８】
次に、ＣＰＵ１０は、現在姿勢におけるローカルＺ軸を重力方向に向けるような回転行列を算出する。そして、現在の入力装置８のローカル座標系におけるＹ軸（以下、ローカルＹ軸と呼ぶ）に対して、上記算出した回転行列を適用することで、Ｙ'軸を算出する（ステップＳ４２）。
【０１８９】
次に、ＣＰＵ１０は、当該Ｙ'軸と重力方向とを含む平面を第２の候補面として算出し、第２の候補面データ１５１として外部メインメモリ１２に記憶する（ステップＳ４３）。
【０１９０】
次に、現在の基準平面（直近に算出された基準平面）と、上記第１の候補面、第２の候補面と現在の判定面とのなす角（上記図２３のθＡ、θＢ）をそれぞれ算出する（ステップＳ４４）。次に、上記の角度に基づき、上述した式１（式２や式３でもよい）を用いて、新たな基準平面を算出し、基準平面データ１４２として外部メインメモリ１２に記憶する（ステップＳ４５）。
【０１９１】
ここで、ゲーム処理の開始後、当該処理が初めて実行されるときは、まだ基準平面が算出されていない状態である。そのため、初回実行時のみ、基準平面を以下のようにして算出する。すなわち、ＣＰＵ１０は、上記第１の候補面と第２の候補面とがなす角（θＡ＋θＢ）を２分割するような平面を算出し（つまり、２つの角の平均をとる）、この平面を新たな基準平面とする。
【０１９２】
なお、初回実行時における基準平面の算出にすいては、上記のような方法の他、次のような方法を用いて算出しても良い。すなわち、Ｚ軸方向と重力方向との角度差を第１の候補面の重みとし上記Ｙ'軸方向と重力方向との角度差を、第２の候補面の重みとする。そして、第１の候補面と第２の候補面の加重平均をとることで、新たな基準平面としてもよい。
【０１９３】
次に、ＣＰＵ１０は、（新たな）基準平面に基づいて、上述したような｛Ｌ｝座標系（上記図２９参照）を設定する（ステップＳ４６）。
【０１９４】
次に、ＣＰＵ１０は、上記ローカルＺ軸が基準平面に平行になるような仮想的な回転を、現在の入力装置８のＸ軸（以下、ローカルＸ軸と呼ぶ）に適用することで、Ｘ'軸を算出する（ステップＳ４７）。図４０は、当該処理の概要を示す図である。図４０（ａ）は、実際の入力装置８の姿勢を示し、図４０（ｂ）は、上記のような回転を加えたことによる、入力装置８の仮想的な姿勢の状態を示している。
【０１９５】
次に、ＣＰＵ１０は、上記基準平面に対する上記Ｘ'軸の角度を算出し、基準Ｘ角度データ１４３として外部メインメモリ１２に記憶する（ステップＳ４８）。以上で、基準平面設定処理は終了する。
【０１９６】
図３７に戻り、基準平面設定処理が終了すれば、次に、ＣＰＵ１０は、プレイヤオブジェクト１０１の姿勢制御等を行う（ステップＳ３３）。すなわち、ＣＰＵ１０は、上記算出した現在姿勢に基づいてゴルフクラブ１０２等の位置を移動したり、プレイヤオブジェクト１０１に、構え直しを行っている様子を取らせる（例えば、ゴルフクラブを握り直すようなそぶりを行わせる）処理を実行したりする。
【０１９７】
次に、ＣＰＵ１０は、構え直しガイド１０５の表示（上記図１２参照）のために用いるガイド表示カウンタ１５５をリセットする（ステップＳ３４）。
【０１９８】
次に、ＣＰＵ１０は、パワーゲージ１０４の表示内容を初期化する（ステップＳ３５）。具体的には、パワーゲージ１０４の形状を、上記図８や図１２で示したように真っ直ぐな状態とし、スイングバー１０６の位置をパワーゲージ１０４の一番下に設定する。以上で、構え直し処理は終了する。
【０１９９】
図３６に戻り、構え直し処理が終了すれば、次に、ＣＰＵ１０は、描画処理を行う（ステップＳ２０）。すなわち、仮想カメラで仮想ゲーム空間を撮影した画像をゲーム画像としてテレビ２に表示する処理が実行される。ステップＳ２０の後、ＣＰＵ１０は、終了フラグ１６４がオンか否かでゲーム終了か否かを判断し（ステップＳ２１）、ＹＥＳの場合、ゲーム処理を終了し、ＮＯの場合、ステップＳ２に戻って、ゲーム処理を繰り返す。
【０２００】
次に、上記ステップＳ７で、Ｂボタン３２ｉが押されていないと判定されたときの処理（ステップＳ７でＮＯ）について説明する。このときは、次に、ＣＰＵ１０は、操作データ１２７の操作内容がＡボタンの押下であるか否か、つまり、Ａボタン３２ｄが押されているか否かを判定する（ステップＳ９）。
【０２０１】
当該判定の結果、Ａボタン３２ｄが押されているときは（ステップＳ９でＹＥＳ）、プレイヤが行うスイングが、「素振り」ではなく、ボールを打ちに行く「ショット」動作として扱うための設定処理が行われる。まず、ＣＰＵ１０は、ショットフラグ１６１がオンか否かを判定する（ステップＳ１３）。その結果、ショットフラグ１６１がオンでないときは（ステップＳ１３でＮＯ）、Ａボタン３２ｄが押された直後の状態と考えられるため、ＣＰＵ１０は、ショットフラグ１６１をオンに設定する（ステップＳ１４）。次に、プレイヤオブジェクト１０１をボール１０３の位置に向けて前進させる（近づける）ような制御（上記図８から図１０の状態にするような制御）を実行する（ステップＳ１５）。その後、ＣＰＵ１０は後述するステップＳ１６の処理に進む。
【０２０２】
一方、ステップＳ１３の判定の結果、ショットフラグ１６１がオンに設定されていれば（ステップＳ１３でＹＥＳ）。Ａボタン３２ｄが押され続けている状態と考えられるため、ＣＰＵ１０は後述のステップＳ１６の処理に進む。
【０２０３】
一方、上記ステップＳ９の判定の結果、Ａボタン３２ｄが押されていないときは（ステップＳ９でＮＯ）、プレイヤが行うスイングを「素振り」として扱うための設定処理を行うことになる。まず、ＣＰＵ１０は、ショットフラグ１６１がオンか否かを判定する（ステップＳ１０）。その結果、ショットフラグ１６１がオンであれば（ステップＳ１０でＹＥＳ）、Ａボタン３２ｄを押し続けていた状態からＡボタン３２ｄを離した直後の状態と考えられるため、ＣＰＵ１０は、ショットフラグ１６１をオフに設定する（ステップＳ１１）。次に、ＣＰＵ１０は、プレイヤオブジェクト１０１をボール１０３の位置から後退させるような制御（上記図１０から図８の状態に戻す）を行う（ステップＳ１２）。その後、ＣＰＵ１０は、後述のステップＳ１６の処理に進む。
【０２０４】
一方、ステップＳ１０の判定でショットフラグ１６１がオフと判定されたときは（ステップＳ１０でＮＯ）、ＣＰＵ１０は、上記ステップＳ１１〜Ｓ１２の処理は実行せずに、後述のステップＳ１６の処理に進む。
【０２０５】
次に、ＣＰＵ１０は、スイング関連処理を実行する（図３７のステップＳ１６）。図４１は、当該スイング関連処理の詳細を示すフローチャートである。図４１において、まず、ＣＰＵ１０は、操作データ１２７に基づいて、入力装置の現在姿勢を算出する（ステップＳ５１）。
【０２０６】
次に、ＣＰＵ１０は、パワーゲージ更新処理を実行する（ステップＳ５２）。この処理は、上述したようなパワーゲージ１０４の表示内容を決定（更新）するための処理である（処理概要の説明で上述した（２）パワーゲージ関連処理に相当）。
【０２０７】
図４２は、当該パワーゲージ更新処理の詳細を示すフローチャートである。図４２において、まず、ＣＰＵ１０は、捻り角度算出処理を実行する（ステップＳ６１）。この処理は、上述したような捻り角度を求めるための処理である。図４３は、当該捻り角度算出処理の詳細を示すフローチャートである。図４３において、まず、ＣＰＵ１０は、現在の入力装置の姿勢に基づいて、仮想的に基準平面を生成する（ステップＳ７１）。つまり、仮に今Ｂボタン３２ｉが押されたものと仮想して、上述したような基準平面を生成する。以下、当該仮想的な基準平面を、仮想基準面と呼ぶ。仮想基準面生成のための処理としては、図３９を用いて説明したステップＳ４１〜Ｓ４５の処理と同じ処理が実行され、生成された平面が仮想基準面データ１４４として外部メインメモリ１２に記憶される。
【０２０８】
次に、ＣＰＵ１０は、入力装置８のローカルＺ軸を当該仮想基準面に対して平行にするような回転を、ローカルＸ軸に適用し、仮想Ｘ'軸を算出する（ステップＳ７２）。次に、仮想基準面に対する仮想Ｘ'軸の角度を算出し、現在Ｘ角度データ１４５として外部メインメモリ１２に記憶する（ステップＳ７３）。当該ステップＳ７２およびＳ７３の処理は、仮想基準面を対象とする点を除けば、図３９を用いて上述したステップＳ４７およびＳ４８の処理と同様となるため、詳細な説明は省略する。
【０２０９】
次に、ＣＰＵ１０は、以下の式で捻り角度を算出し、捻り角度データ１４６として記憶する（ステップＳ７４）。
捻り角度＝現在Ｘ角度−基準Ｘ角度  ・・・式１０
以上で、捻り角度算出処理は終了する。
【０２１０】
図４２に戻り、捻り角度算出処理の次に、ＣＰＵ１０は、振りかぶり角度算出処理を実行する（ステップＳ６２）。図４４は、当該振りかぶり角度算出処理の詳細を示すフローチャートである。図４４において、まず、ＣＰＵ１０は、上記（スイング角度算出の図Ａ）を用いて示したように、現在姿勢におけるローカルＺ軸を、上述したような｛Ｌ｝座標系に変換することで、ベクトルＤを算出する（ステップＳ８１）。
【０２１１】
次に、ＣＰＵ１０は、上述した式７（θ＝Ａｔａｎ（Ｄｘ，−Ｄｙ＋Ｋ×Ｄｚ））を用いて、振りかぶり角度θを算出する（ステップＳ８２）。なお、振りかぶり角度θは、上述したように、構え直し操作を行ったときの姿勢で０、前方に振ると正の値、振りかぶると負の値が算出される。以上で、振りかぶり角度算出処理は終了する。
【０２１２】
図４２に戻り、振りかぶり角度θが算出できれば、次に、ＣＰＵ１０は、当該振りかぶり角度θの絶対値に基づいて、捻り角度をパワーゲージ１０４の湾曲に反映させる度合い（反映度）を決定するための処理を実行する（ステップＳ６３）。この処理は、振りかぶり角度が大きいときほど（大きく振りかぶっているときほど）、捻り角度の影響を小さくし、振りかぶり角度が小さいほど（ゴルフクラブ１０２のヘッドがボール１０３に近いほど）、捻り角度の影響を大きくするための処理である。つまり、仮に手首の捻り角度が同じとして、大きく振りかぶっているときは、パワーゲージ１０４はあまり湾曲しないが、ボール１０３に近づくほど、捻り角度がパワーゲージ１０４の湾曲に反映される度合いが高くなり、より湾曲して表示されるような処理を実行する。例えば、反映度を０．０（反映度弱）〜１．０（反映度強）とすると、振りかぶり角度が０度のときを反映度１．０とし、振りかぶり角度の絶対値が１８０°を反映度０．０として、この間の値が線形のグラフとなるように割り当てるようにする（もちろん、非線形で割り当てるようにしても良い）。
【０２１３】
次に、ＣＰＵ１０は、上記捻り角度と反映度に基づいて、パワーゲージ１０４の形状を湾曲させる（ステップＳ６４）。例えば、ＣＰＵ１０は、上記図２８で示したようなグラフに相当する関数を用いて、捻り角度−３５°〜＋３５°を、湾曲度−１．０〜１．０の範囲の値に変換する処理を実行する。そして、この変換の際に、上記反映度を係数として用いる。例えば、捻り角度を１０°とすると、反映度１．０（アドレスに近い状態）であれば、１０°がそのまま湾曲度に反映されるが、反映度が０．５（半分くらいまで振りかぶっている状態）であれば、当該０．５を乗じた値を湾曲度として算出する。
【０２１４】
続いて、ＣＰＵ１０は、振りかぶり角度θを振りかぶり量Ｈに換算する（ステップＳ６５）。具体的には、ＣＰＵ１０は、上記図３０で示したようなグラフに相当する関数を用いて、振りかぶり角度θ（−１８０°〜＋１８０°）の絶対値を振りかぶり量Ｈ（０．０〜１．０）に変換する。
【０２１５】
次に、ＣＰＵ１０は、上記振りかぶり量Ｈに基づいて、スイングバー１０６を移動させる（ステップＳ６６）。以上で、パワーゲージ更新処理は終了する。
【０２１６】
図４１に戻り、パワーゲージ更新処理の次に、ＣＰＵ１０は、打球パワー算出処理を実行する（ステップＳ５３）。図４５は、当該打球パワー算出処理の詳細を示すフローチャートである。図４５において、まず、ＣＰＵ１０は、上記の「振り下ろし動作反映処理の概要」において説明したような、追従係数Ｋｔの設定、および、これを用いた追従量Ｔの算出を実行する（ステップＳ９１）。
【０２１７】
次に、ＣＰＵ１０は、上述した過剰な振り強さＳを算出する（ステップＳ９２）。すなわち、加速度を８割減と仮定して、上記追従量Ｔと同様の計算を行うことで過剰な振り強さＳを算出する。
【０２１８】
次に、ＣＰＵ１０は、上述したような式４を用いて打球パワーＰを算出し、打球パワーデータ１５６として外部メインメモリ１２に記憶する（ステップＳ９３）。以上で、打球パワー算出処理は終了する。
【０２１９】
図４１に戻り、打球パワー算出処理が終われば、次に、ＣＰＵ１０は、しなり角算出処理を実行する（ステップＳ５４）。この処理は、上述したようなバックスピン率を算出するために用いる、ゴルフクラブ１０２のヘッド部分のしなりを算出するための処理である。図４６は、当該しなり角算出処理の詳細を示すフローチャートである。図４６において、まず、ＣＰＵ１０は、しなり特性の設定を行う（ステップＳ１０１）。すなわち、ＣＰＵ１０は、上記変数Ｋｐ（ばね）およびＫｄ（ダンパー）を、振りかぶり角度θの絶対値に応じて設定する。具体的には、振りかぶり角度の絶対値｜θ｜である０°〜１８０°のうち、０°〜９０°の範囲の値に対して、Ｋｐについては、０．０１〜０．０１５の値を割り当てる（９０°以上については、Ｋｐは一律に０．０１５とする）。また、Ｋｄについては、同じく０°〜９０°に対して、０．００１〜０．３の値を割り当てる（９０°以上については、Ｋｄは一律に０．３とする）。これにより、インパクト付近ではしなりやすく、遠いときはしなりにくいという、しなりについての特性をもたせることができる。
【０２２０】
次に、ＣＰＵ１０は、上記式６を用いてクラブヘッド部分の加速度Ａを算出し、更に、上述したような追従角度θｈ（上記図２５参照）を算出する（ステップＳ１０２）。
【０２２１】
次に、ＣＰＵ１０は、上記式５（φ＝θｈ−θ）を用いて、しなり角φを算出する（ステップＳ１０３）。以上で、しなり角算出処理は終了する。
【０２２２】
図４１に戻り、しなり角算出処理が終了すれば、次に、ＣＰＵ１０は、入力装置８の現在姿勢に基づいてプレイヤオブジェクト１０１やゴルフクラブ１０２等の姿勢を更新する（ステップＳ５５）。以上で、スイング関連処理は終了する。
【０２２３】
図３７に戻り、スイング関連処理が終われば、次に、ＣＰＵ１０は、インパクト関連処理を実行する（ステップＳ１７）。本処理では、インパクトが発生したか否かの判定や、インパクトが発生したときの打球に関するパラメータを決めるための処理が実行される。
【０２２４】
図４７は、当該インパクト関連処理の詳細を示すフローチャートである。図４７において、まず、ＣＰＵ１０は、ゴルフクラブ１０２が上記基準平面を通過したか否かを判定する（ステップＳ１１１）。より具体的には、ＣＰＵ１０は、前回振りかぶり角度データ１５２を参照し、直前のフレーム（直前の処理ループ）で算出された振りかぶり角度θの値を取得する。そして、当該値と、現在のフレームでの処理で算出された振りかぶり角度θとを比較して、当該振りかぶり角度θの値がマイナス値からプラス値に変化したか否かを判定することで、基準平面を通過したか否かを判定する。なお、この判定は、主にバックスピン動作を行っていない、通常のスイングが行われた場合を想定した判定である。
【０２２５】
当該判定の結果、ゴルフクラブ１０２が基準平面を通過したと判定されたときは（ステップＳ１１１でＹＥＳ）、ＣＰＵ１０は、後述のステップＳ１１３の処理に進む。一方、ステップＳ１１１の判定の結果、ゴルフクラブ１０２が基準平面を通過していないと判定されたときは（ステップＳ１１１でＮＯ）、ＣＰＵ１０は、バックスピン動作が行われたときのゴルフクラブ１０２のヘッド部のしなりを考慮して、基準平面を通過したか否かの判定を行う（ステップＳ１１２）。つまり、上述したようなバックスピン動作が行われたとき、プレイヤはボールをインパクトしたつもりであっても、上記振りかぶり角度θで判定した場合、仮想ゲーム空間内においては、ぎりぎりでゴルフクラブ１０２がボール１０３に当たっておらず（基準平面を通過していない）、直前で止められた結果になっているという場合がある。このような場合を想定して、バックスピン動作を行ったときに発生すると考えられる、ゴルフクラブ１０２のヘッド部の前方へのしなりを考慮して、前方にしなったヘッド部分が基準平面を通過したか否か、すなわち、ボール１０３にインパクトしたか否かを判定するものである。そのため、ＣＰＵ１０は、上記追従角度θｈの値がマイナス値からプラス値に変化したか否かを判定することで、基準平面を通過したか否かを判定する。そして、基準平面を通過していれば（ステップＳ１１２でＹＥＳ）、ステップＳ１１３の処理に進み、基準平面を通過していないときは（ステップＳ１１２でＮＯ）、ＣＰＵ１０は、インパクト関連処理を終了する。
【０２２６】
次に、ＣＰＵ１０は、ショットフラグ１６１がオンか否かを判定する（ステップＳ１１３）。つまり、今回行われたスイングが、「素振り」か否かを判定している。その結果、ショットフラグ１６１がオフのときは（ステップＳ１１３でＮＯ）、「素振り」が行われているため、ＣＰＵ１０は、打球パワーデータ１５６を読み出し、打球パワーＰをパワーバー１０７（図１６等参照）に変換して表示する（ステップＳ１１４）。このとき、パワーゲージ１０４の形状が湾曲していれば、その湾曲に沿ってパワーバー１０７も湾曲した形状として表示する。
【０２２７】
一方、上記ステップＳ１１３の判定の結果、ショットフラグ１６１がオンのときは（ステップＳ１１３でＹＥＳ）、ＣＰＵ１０は、打球を飛ばすためのショット処理を実行する（ステップＳ１１５）。図４８は、上記ショット処理の詳細を示すフローチャートである。図４８において、まず、ＣＰＵ１０は、バックスピンフラグ１６３にオンを設定する（ステップＳ１２１）。更に、ＣＰＵ１０は、飛球中フラグ１６２をオンに設定する（ステップＳ１２２）。
【０２２８】
次に、ＣＰＵ１０は、打球パワーデータ１５６を読み出し、上記打球パワーＰをパワーバー１０７に変換して表示する（ステップＳ１２３）。続いて、ＣＰＵ１０は、上記打球パワーＰや捻り角度、更には、（現在状態データ１５９を参照して得られる、現在選択されているゴルフクラブの種類や打った場所（フェアウェイやラフ等）、風向き等のデータに基づいて、打球の弾道や移動速度等の打球のパラメータを算出する（ステップＳ１２４）。算出されたパラメータは、打球パラメータ１５８として外部メインメモリ１２に記憶される。以上で、ショット処理は終了する。
【０２２９】
図４１に戻り、ショット処理が終了すれば、次に、ＣＰＵ１０は、上記振りかぶり角度θを前回振りかぶり角度データ１５２として外部メインメモリ１２に記憶する（ステップＳ１１６）。更に、ＣＰＵ１０は、上記追従角度θｈを前回追従角度データ１５３として外部メインメモリ１２に記憶する（ステップＳ１１７）。また、ＣＰＵ１０は、上記スイング関連処理において算出されたしなり角を前回しなり角データ１５４として外部メインメモリ１２に記憶する（ステップＳ１１８）。以上で、インパクト関連処理は終了する。
【０２３０】
図３７に戻り、インパクト関連処理が終了すれば、次に、ＣＰＵ１０は、構え直しガイド処理を実行する（ステップＳ１８）。本処理は、上記図１２に示したような構え直しガイド１０５の表示タイミングを測り、当該ガイドメッセージを表示するための処理である（上述した処理概要の説明における（３）ガイドメッセージ表示関連処理に相当）。
【０２３１】
図４９は、上記ステップＳ１８で示した構え直しガイド処理の詳細を示すフローチャートである。図４９において、まず、ＣＰＵ１０は、ガイド表示カウンタ１５５をリセットする条件が満たされているか否かの判定を行う（ステップＳ１３１）。すなわち、上述したような、入力装置８の姿勢が、「構えなおし」のときに期待される姿勢（アドレスに近い姿勢）と大きく異なっているか否かという条件と、スイング中の状態か否かという条件である。（なお、Ｂボタンが押されたか否かという条件については、上記図３８のステップＳ３４の処理で対応している）。
より具体的には、
（１）入力装置のローカルＺ軸が水平よりも上を向いていて、ローカルＹ軸が水平より下を向いているか（例えば、野球のバットを持ったときの構えなど）。
（２）角速度の絶対値が３０deg／secより大きいか
（３）加速度の絶対値が０．２Ｇより大きいか。
という３つの条件について、それぞれ満たされているか否かを判定する。
【０２３２】
次に、ＣＰＵ１０は、上記３つの条件のうち、一つでも条件が満たされているか否かを判定する（ステップＳ１３２）。その結果、１つでも条件が満たされていれば（ステップＳ１３２でＹＥＳ）、リセット条件が満たされたとして、ＣＰＵ１０は、ガイド表示カウンタ１５５をリセットし（ステップＳ１３３）、構え直しガイド処理を終了する。
【０２３３】
一方、上記３つの条件のいずれも満たされていないときは（ステップＳ１３２でＮＯ）、ＣＰＵ１０は、ガイド表示カウンタをカウントアップするための処理を実行する。具体的には、まず、ＣＰＵ１０は、上述したような、（構え直しの）必要度Ｋｒの算出処理を実行する（ステップＳ１３４）。図５０は、必要度Ｋｒの算出処理の詳細を示すフローチャートである。図５０において、まず、ＣＰＵ１０は、上述したような仮想基準面を算出し、外部メインメモリ１２に記憶する（ステップＳ１４１）。この処理は、図４２を用いて上述したステップＳ７１の処理と同様の処理である。
【０２３４】
次に、ＣＰＵ１０は、現在の基準平面と上記仮想基準面との角度差（面法線と面法線のなす角度）の絶対値を算出する（ステップＳ１４２）。
【０２３５】
次に、ＣＰＵ１０は、上記ステップＳ１４２で算出した角度差を必要度Ｋｒに変換する（ステップＳ１４３）。具体的には、角度差が１１°以上のときは構え直し不要、角度差が０°であれば、構え直し不要と定義し、この間の０°〜１１°までの角度差を、線形補間を用いて０．０〜１．０の範囲内の値に変換して、必要度Ｋｒとする。以上で、必要度Ｋｒの算出処理は終了する。
【０２３６】
図４９に戻り、次に、ＣＰＵ１０は、構え姿勢可能性Ｋｓの算出処理を実行する（ステップＳ１３５）。図５１は、上記ステップＳ１３５で示した構え姿勢可能性Ｋｓの算出処理の詳細を示すフローチャートである。図５１において、まず、操作データ１２７に含まれる角速度データに基づき、現在の角速度を角速度の安定状態を示す変数Ｓｗに変換する（ステップＳ１５１）。具体的には、角速度の絶対値０deg/sec〜３０deg/secを、線形補間を用いて０．０〜１．０の範囲内の値に変換し、変数Ｓｗとする。
【０２３７】
次に、ＣＰＵ１０は、操作データ１２７に含まれる加速度データに基づき、現在の加速度を加速度の安定状態を示す変数Ｓａに変換する（ステップＳ１５２）。具体的には、加速度の絶対値０Ｇ〜０．２Ｇを、線形補間を用いて０．０〜１．０の範囲内の値に変換し、変数Ｓａとする。
【０２３８】
次に、ＣＰＵ１０は、ローカルＸ軸の重力方向成分を、構え直し姿勢の正しさを示す変数Ｓｔに変換する（ステップＳ１５３）。すなわち、図３１を用いて上述したような、Ｘ軸の水平度合いを０．０（Ｘ軸が垂直な状態）〜１．０（Ｘ軸が水平な状態）の範囲の値に換算して変数Ｓｔとする。
【０２３９】
次に、ＣＰＵ１０は、上述した式８（Ｋｓ＝Ｓｗ×Ｓａ×Ｓｔ）を用いて、構え姿勢可能性Ｋｓを算出する（ステップＳ１５４）。以上で、構え姿勢可能性Ｋｓの算出処理は終了する。
【０２４０】
図４９に戻り、次に、ＣＰＵ１０は、必要度Ｋｒおよび構え姿勢可能性Ｋに基づき、上記の式９（Ｃ＝Ｃ＋Ｋｒ×Ｋｓ）を用いてかまえ表示カウンタＣをカウントアップする（ステップＳ１３６）。
【０２４１】
次に、ＣＰＵ１０は、構え表示カウンタＣが３０を越えたか否かを判定する（ステップＳ１３７）。その結果、３０を越えていれば（ステップＳ１３７でＹＥＳ）、上記図１０で示したような構え直しガイド１０５を表示するための処理を実行する（ステップＳ１３８）。一方、３０を越えていないときは（ステップＳ１３７でＮＯ）、ＣＰＵ１０は、そのまま構え直しガイド処理を終了する。
【０２４２】
図３７に戻り、構え直しガイド処理が終了すれば、次に、ＣＰＵ１０は、その他のゲーム処理を実行する（ステップＳ１９）。すなわち、本発明に関すること以外のゴルフゲームにかかる処理を実行する。その後、上述したステップＳ２０以降の処理が実行される。
【０２４３】
次に、上記図３５のステップＳ３の判定の結果、飛球中フラグ１６２がオンのときの処理（ステップＳ３でＹＥＳ）を説明する。このときは、インパクトが発生した後、つまり、ショットした後ということになるため、ＣＰＵ１０は、ボール移動処理を実行する（ステップＳ４）。この処理では、打球を移動させるための処理、および、バックスピンに関する処理が実行される。
【０２４４】
図５２は、上記ボール移動処理の詳細を示すフローチャートである。図５２において、まず、ＣＰＵ１０は、バックスピンフラグがオンか否かを判定する（ステップＳ１６１）。その結果、オンのときは（ステップＳ１６１でＹＥＳ）、ＣＰＵはバックスピン率設定処理（ステップＳ１６２）を実行してからステップＳ１６３の処理に進み、オフのときは（ステップＳ１６１でＮＯ）、ステップＳ１６２の処理は実行せずにステップＳ１６３の処理に進む。
【０２４５】
図５３は、上記ステップＳ１６２で示したバックスピン率設定処理の詳細を示すフローチャートである。この処理では、クラブヘッド部分の前方へのしなり角の最大値を検出してバックスピン率に反映するための処理が実行される。図５３において、まず、ＣＰＵ１０は、上記しなり角φを算出するためのしなり角算出処理を実行する（ステップＳ１７１）。本処理は、図４０を用いて説明したステップＳ５４の処理と同じであるため、説明は省略する。
【０２４６】
次に、ＣＰＵ１０は、算出されたしなり角φの値が、正の値であるか否かを判定する（ステップＳ１７２）。当該判定の結果、正の値でないときは（ステップＳ１７２でＮＯ）、ＣＰＵ１０は、算出されたしなり角で前回しなり角データ１５４を更新し（ステップＳ１７７）、バックスピン率設定処理を終了する。
【０２４７】
一方、算出されたしなり角φの値が、正の値のときは（ステップＳ１７２でＹＥＳ）、次に、ＣＰＵ１０は、しなりの折り返しが発生したか否かを判定する（ステップＳ１７３）。しなりの折り返しとは、バックスピンをかけるようなスイングによってゴルフクラブのヘッド部分が前方へしなった後、反発してまた後方へ戻り始めたときのことである。例えば、ＣＰＵ１０は、前回しなり角データ１５４で示されるしなり角が上記ステップＳ１７１で算出されたしなり角φより大きければ、折り返しが発生したと判定する。そして、当該判定の結果、折り返しが発生していないときは（ステップＳ１７３でＮＯ）、まだ前方へ向かってのしなりが継続している状態と考えられるため、ＣＰＵ１０は、上記ステップＳ１７７の処理を実行してから、バックスピン率設定処理を終了する。
【０２４８】
一方、折り返しが発生したときは（ステップＳ１７３でＹＥＳ）、次に、ＣＰＵ１０は、そのときに選択されているゴルフクラブの種類等に基づいて、しなり角のバックスピンへの反映率を決定する処理を実行する（ステップＳ１７４）。例えば、クラブの種類がドライバであれば、バックスピンがかかりにくくなるよう、反映率としては低い値を設定する。
【０２４９】
次に、ＣＰＵ１０は、上記決定された反映率と、前回しなり角データ１５４で示されるしなり角（すなわち、前方へのしなりの最大値となる）に基づき、バックスピン率を決定する（ステップＳ１７５）。決定されたバックスピン率は、バックスピン率データ１５７として外部メインメモリ１２に記憶される。
【０２５０】
次に、ＣＰＵ１０は、バックスピンフラグ１６３をオフに設定する（ステップＳ１７６）。以上で、バックスピン率設定処理は終了する。
【０２５１】
図５２に戻り、バックスピン率設定処理の後、ＣＰＵ１０は、打球パラメータ１５８に基づいて、打球（ボール１０３）を移動する。また、バックスピン率が決定した後は、当該バックスピン率にも基づいて打球を移動させる（ステップＳ１６３）。つまり、ショットの直後は、まだバックスピン率は未決定の状態であるため、打球パラメータ１５８のみに基づいて（バックスピンがかかっていない状態で）打球が移動される。その後、バックスピン率が決定した後（バックスピンフラグ１６３がオフになった後）は、打球パラメータ１５８に加えてバックスピン率データ１５７も用いて打球を移動させる。一般的に、バックスピンのかかった打球は、高く上がるような弾道となる。そのため、上記のように途中からバックスピン率を適用して打球を移動させることで、打球が途中から急上昇するような弾道になり得る。また、このとき、例えば、打球を追いかけるようなカメラワークを行うための仮想カメラの設定等も適宜行われる。
【０２５２】
なお、バックスピンによる打球の挙動については、上記の方法の他、例えば、上記のバックスピン率が決定しても、打球が着地するまでは打球パラメータ１５８のみに基づいて打球を移動させ、打球が一旦着地してから、上記バックスピン率を打球の挙動に反映するようにしてもよい。例えば、打球が着地したタイミングで、当該バックスピン率を適用した状態のインパクト時からの打球の軌道を再計算する。これにより、バックスピンを考慮した最終的な打球の位置が算出されるため、この位置にボールが来るように着地後の打球の挙動を制御するようにしてもよい。
【０２５３】
次に、ＣＰＵ１０は、打球の移動が終了したか否かを判定する（ステップＳ１６４）。その結果、打球の移動が終了していないときは（ステップＳ１６４でＮＯ）、ＣＰＵ１０は、ボール移動処理を終了する。一方、打球の移動が終了すれば（ステップＳ１６４でＹＥＳ）、ＣＰＵ１０は、飛球中フラグ１６２にオフを設定し（ステップＳ１６５）、ショット終了後におけるその他のゲーム処理を実行する（ステップＳ１６６）。これは、例えば、スコアの計算等の処理である。その後、ＣＰＵ１０は、終了フラグ１６４にオンを設定する（ステップＳ１６７）。以上で、ボール移動処理は終了する。
【０２５４】
図３５に戻り、ボール移動処理が終了すれば、上記ステップＳ２０の描画処理以降の処理が実行される。上記ボール移動処理において終了フラグ１６４にオンが設定されていれば、ステップＳ２０の判定の結果、本実施形態にかかる処理、つまり、一打分の処理が終了する。以上で、本実施形態にかかる処理の詳細説明を終了する。
【０２５５】
このように、本実施形態では、パワーゲージ１０４について、上記捻り角度と振りかぶり量（打球のパワーの目安）という、異なる２つの要素についての情報を１つのパワーゲージ１０４でプレイヤに提示している。これにより、プレイヤに、フェースの開き具合や、どの程度強い打球を打つことができるか等を直感的に把握させることが可能となる。
【０２５６】
また、本実施形態では、上記のような「構え直し」の際の基準平面の算出について、Ｂボタン３２ｉが押されたときの、プレイヤの個人差による入力装置８の持ち方の違いによって、基準平面を算出するための計算が不安定となることを回避している。そのため、より適切に基準平面を算出でき、その結果、インパクトの判定についてもより適切な判定を実行することが可能となる。
【０２５７】
また、「構え直し」の操作を行うべきタイミングについて、上記のような構え直しの必要度Ｋｒ、および、構え姿勢可能性Ｋｓを用いて、より適切なタイミングを測っている。これにより、プレイヤに、無駄に構え直し操作を行わせることを防ぐ事ができる。また、必要なときに構え直し操作を行わせることもできる。
【０２５８】
更に、スイング動作のうちの振り下ろしにかかる動作の内容（振り下ろしの強さ）を打球パワーに反映する処理を行っているため、入力装置８自体を動かすことによる操作の一体感をより高めることができ、ゲームの興趣性を高めることができる。また、加速度を利用して打球パワーＰの決定を行っているため、プレイヤが入力装置８を振りかぶった後、単純に速い速度でスイングした場合はもちろんのこと、例えば、腕のリーチが長いプレイヤが大きなスイングを行った場合等、スイングの角度の時間的変化はゆっくりではあるが、加速度としては大きな加速度（つまり、遠心力）が発生するようなスイングについても強いスイングとして捉えることができ、打球パワーに反映することが可能となる。
【０２５９】
また、ボタン操作ではなく、スイングの仕方によって打球にバックスピンをかけることができるため、よりリアリティの高い操作感を有するゴルフゲームをプレイヤに提供することができる。
【０２６０】
なお、上記「構え直し」の操作に関しては、上述した実施形態では、Ｂボタン３２ｉが押されたときに実行するようにしていたが、この他、ボタン入力が無くても、入力装置８の姿勢が「構え直し」で期待されるような姿勢のまま、所定時間以上静止しているような状態であれば、Ｂボタン３２ｉが押されたものとみなして、上記構え直しに係る処理を実行するようにしてもよい。
【０２６１】
また、上記実施形態では、構え直し操作をプレイヤが行うことを推奨するために、構え直しガイド１０５を表示するという処理を行っていた。これに限らず、例えば、構え直しガイド１０５を表示する代わりに、所定の音声案内を出力することで、構え直し操作を行うことを推奨するようにしてもよい。
【０２６２】
また、パワーゲージ１０４に関して、捻り角度に応じて湾曲させていたが、更に、ボール１０３を打つ場所（地形）による要素を加えて、パワーゲージの形状を変化させてもよい。つまり、ボールを打つ場所によるボールの射出方向や軌道（弾道）の変化についての情報も、パワーゲージ１０４の形状の変化で提示するようにしてもよい。図５４に、ボール１０３を打つ場所によるパワーゲージ１０４の形状の違いの例を示す。図５４（ａ）は、フェアウェイで打つ場合を示し、図５４（ｂ）は、例えば、バンカーで打つ場合を示している。図５４（ａ）のパワーゲージ１０４では、射出方向は前方に真っ直ぐの方向であることが示されている（つまり、ボールは、真っ直ぐの方向射出された後、右曲がりにスライスするような飛び方）。一方、図５４（ｂ）のパワーゲージ１０４の場合は、パワーゲージ１０４の根本部分からやや右に傾斜するような変化となっており、射出方向が右斜め前となっていること（打球は最初から右斜め前に飛んでいき、更に右にスライスする）が示されている。また、図５４では、フェアウェイではパワーゲージを根本から傾斜させず、バンカーでは、パワーゲージを根本から傾斜させていることも示されている。すなわち、特定の地形でボールを打つときのみ根本から傾斜させるような処理を行っても良い。
【０２６３】
また、上記実施形態では、パワーゲージ１０４の形状を湾曲させる場合を例に挙げたが、この他、パワーゲージ１０４の表示色を変えて表示するようにしてもよい。例えば、通常はパワーゲージ１０４の枠の色を白色で表示しておき、湾曲度が所定値以上の場合は、パワーゲージ１０４の枠線を赤色で表示するようにしてもよい。同様に、スイングバー１０６やパワーバー１０７に表示色についても、振りかぶり量Ｈや捻り角度、打球パワーＰ等の大きさに応じて変化させるようにしてもよい。
【０２６４】
また、上記実施形態では、結果的に、インパクト発生時に打球パワーＰと捻り角度が同時に決定するという形になっているが、これに限らず、必ずしも同時に決定する必要はない。いずれか一方が先に決定され、その後、他方を決定するようにしてもよい。例えば、捻り角度を打球パワーＰよりも先に決定するようにした場合は、捻り角度が決定するまでは、スイングバー１０６に移動とパワーゲージ１０４の湾曲を共に行い、捻り角度が決定した後は、パワーゲージの湾曲状態を固定し、スイングバー１０６のみ移動させるようにしてもよい。また、打球パワーＰと捻り角度のいずれか一方が決定された時点で、パワーゲージ１０４の湾曲状態とスイングバー１０６の位置（つまり、表示状態のみ）を固定させるようにしてもよい。例えば、ショットした瞬間に、パワーゲージ１０４の湾曲状態とスイングバー１０６の位置が固定されて（表示状態は同時に固定する）、かつ湾曲状態に関連した打球の曲がり具合も決定するが（パラメータの片方が決定する）、打球パワーについては、プレイヤが入力装置８を振り切ってから確定する（もう一方のパラメータは後のタイミングで決定される）ようにしてもよい。
【０２６５】
また、上記基準平面算出処理において、上述の例では、現在の基準面を新たに算出した基準平面で置き換えるような処理によって基準平面を更新していた。この他、例えば、基準平面自体はその位置を固定しておき、ゴルフクラブ１０２の姿勢のほうを調整するようにしてもよい。つまり、基準平面は重力方向を含む（平行である）ため、基準平面の補正は、現在の基準平面を重力方向まわり回転させる操作に相当する。従って、逆の考え方として、現在の基準平面を固定して、ゴルフクラブ（入力装置８の姿勢）の方を重力方向まわりに逆回転させたとしても、同様の効果が得られる。例えば、上記第１の候補面とその時点における基準平面との角度差を算出する。この差が例えば３０°あったとする。この場合は、ゴルフクラブ１０２の姿勢を３０°回転させるという処理を行うようにしても良い。
【０２６６】
また、上述した振りかぶり角度θを振りかぶり量Ｈに変換することに関し、上記の実施形態では、線形のグラフになるような（図３０参照）変換を行う場合を例として挙げた。これに限らず、例えば図５５に示すように、非線形のグラフとなるように振りかぶり角度θを振りかぶり量Ｈに変換するようにしてもよい。図５５は、横軸右方向をθの正の値、縦軸上方向をＨの正の値とするグラフである。図５５（ａ）では、上に膨らむような曲線のグラフとなっており、この場合は、プレイヤが大きく振りかぶっているときほど（Ｈが１．０に近いほど）細かい調整を行いやすくすることができる。また、図５５（ｂ）は、下に膨らむような曲線のグラフとなっており、この場合は、プレイヤがあまり振りかぶっていないときほど（Ｈが０．０に近いほど）細かい調整を行いやすくすることができる。
【０２６７】
また、捻り角度とパワーゲージ１０４の湾曲度についても、同様に非線形のグラフとなるように対応付けても良い。また、ゲームの難度設定として、線形、非線形のグラフを使い分けるようにしても良い。設定操作については、プレイヤがゲームの難度を選択できるような設定画面を用意しておけばよい。そして、例えば、難度について「簡単」「普通」「難しい」の３つを用意しておく。「簡単」が選択されたときは、図５６に示すような、下向きの曲線となるグラフになるような湾曲度の変換を行う。また、「普通」が選択されたときは、上記図２８に示したような線形のグラフとなるような変換を行う。また、「難しい」が選択されたときは、図５７に示すような、上向きに膨らむ曲線となるグラフになるような変換を行う。また、上記振りかぶり量Ｈの変換についても、このような難度設定に応じたグラフの使い分けをおこなってもよい。
【０２６８】
更に、打球パワーＰの算出に関して、上述の実施形態で説明した算出方法に加えて、更に、プレイヤが入力装置８を振り上げてから振り下ろす（インパクトが発生する）までにかかった時間を計測し、当該時間に応じて打球パワーＰを補正するようにしてもよい。すなわち、速く振り下ろしたとき（振り上げてから振り下ろしてボールにインパクトするまでの時間が相対的に短いとき）は、ゆっくり振り下ろしたときよりも打球パワーＰが相対的に高くなるような処理を実行するようにしてもよい。例えば、上記打球パワー算出処理（ステップＳ５３）において、上記追従量Ｔは用いずに、一旦、上記振りかぶり量Ｈのみに基づいて打球パワーＰを仮決定する。その後、上記ショット処理（ステップＳ１１５）において、振り下ろしにかかった時間に応じて、当該打球パワーＰを増減させるような補正を加える処理を実行しても良い（振り下ろしにかかった時間が相対的に短ければ、打球パワーＰを増加させる補正を行い、当該時間が長ければ、打球パワーＰを減少させる補正を行う等）。
【０２６９】
また、打球パワーＰの決定に関して、「力を入れすぎたショット（力みすぎたショット）」を反映するようにしてもよい。例えば、打球パワーについて、所定の値を「上限値」として予め設定しておく。そして、上記算出された打球パワーＰが当該「上限値」を越えるような値のときは、「力を入れすぎたショット」であるとして、例えば打球の飛ぶ方向をランダムに変化させるようにしてもよい。例えば、「上限値」以下の打球パワーであれば、真っ直ぐ前方に飛んでいくような打球の弾道を、少し右にスライスさせる、あるいは左前方に射出される等の変化を加える処理を行う。また、このとき、パワーバー１０７の色を変え、左右に揺らすようなエフェクトを表示し、「力を入れすぎたショット」であることを視覚的にプレイヤに提示するようにしてもよい。
【０２７０】
また、打球パワーＰの決定に関しては、上述したような追従量Ｔや過剰な振り強さＳを用いずに、単純に、振りかぶり量の最大値（最大振りかぶり量）を打球パワーＰとして用いてもよい。すなわち、最大振りかぶり量を外部メインメモリに記憶しておき、インパクト発生時に、当該最大振りかぶり量に基づいて打球パワーＰを決定して、パワーバー１０７として表示するようにしても良い。振り下ろし時にかかる動作は打球パワーには反映されないが、処理負荷を軽減できる点で有利である。また、この場合でも、スイングバー１０６とパワーゲージ１０４自体の湾曲によって、フェースの開き具合と打球パワーに関する情報を直感的にプレイヤに提供する事は可能である。
【０２７１】
また、上記バックスピン率の算出処理に関して、上述の実施形態の例では、バネとダンパーを想定したモデルに基づいて「しなり」をシミュレートするような処理を行っていた。このようなモデルを利用することに限らず、例えば、毎フレームの角速度の変化を監視するようにし、角速度が急激に減少していれば、スイングに急ブレーキがかけられた（制動力がかけられた）、つまり、図２２で示したような、バックスピンがかかるようなスイングが行われたと判定して、バックスピン率を決定するような処理を実行するように構成しても良い。
【０２７２】
更に、上記バックスピン率の算出処理に関し、上述したような角速度の変化を利用する処理だけに限らず、加速度を利用して上記制動力の発生を判定するようにしてもよい。例えば、上記のような、スイングを急に止めるような操作を行うと、急にスイングを止めた反動で、それまでとは逆方向への加速度が発生する。そこで、当該逆方向への加速度の変化（上記前方へのしなりの相当する）を監視するようにし、これに基づいてバックスピン率を決定する処理を実行しても良い。
【０２７３】
また、図４７を用いて上述したインパクト関連処理に関し、本実施形態では、振りかぶり角度θを利用してインパクトの発生を判定しており、その一例として、上述したように、振りかぶり角度θの符号が反転したか否かを判定すること（ステップＳ１１１）でインパクトの発生を判定していた。振りかぶり角度θを利用したインパクトの発生の判定方法については、この他、入力装置８のＺ軸方向についての姿勢と上記基準平面とが水平になったか否かを角度θに基づいて判定することでインパクトの発生を判定するようにしても良い。両者が水平であれば（振りかぶり角度θが０°であれば）、インパクトが発生したと判定すればよい。
【０２７４】
更に、上記実施形態では、入力装置８の姿勢の検出について、上記ジャイロセンサユニット７や加速度センサ３７を用いていた。これに限らず、入力装置８の姿勢の検出については、所定のカメラで入力装置８を撮像し、当該撮像データに基づいて入力装置８の姿勢を算出するようにしてもよい。例えば、所定のカメラで入力装置８を撮像し、当該撮像画像のデータをゲーム装置３に取得させる。そして、ＣＰＵ１０は、撮像画像に写っている入力装置８を識別し、その姿勢を判別して入力装置８の動きを検出する等の処理を実行すればよい。
【産業上の利用可能性】
【０２７５】
本発明にかかるゲームプログラムおよびゲーム装置は、より高い現実感をプレイヤに与えることが可能なゲームを提供することができ、動きセンサを備えた入力装置を利用するゲーム装置や当該入力装置を利用したゲーム処理が実行されるおよびパーソナルコンピュータ等に有用である。
【符号の説明】
【０２７６】
１…ゲームシステム
２…モニタ
２ａ…スピーカ
３…ゲーム装置
４…光ディスク
５…コントローラ
７…ジャイロセンサユニット
８…入力装置
１０…ＣＰＵ
１１…システムＬＳＩ
１１ａ…入出力プロセッサ
１１ｂ…ＧＰＵ
１１ｃ…ＤＳＰ
１１ｄ…ＶＲＡＭ
１１ｅ…内部メインメモリ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２…アンテナ
２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
３０…基板
３１…ハウジング
３２…操作部
３３…コネクタ
３４…ＬＥＤ
３５…撮像情報演算部
３６…通信部
３７…加速度センサ
３８…赤外線フィルタ
３９…レンズ
４０…撮像素子
４１…画像処理回路
４２…マイコン
４３…メモリ
４４…無線モジュール
４５…アンテナ
４８…バイブレータ
４９…スピーカ
５３…プラグ
５４…マイコン
５５…２軸ジャイロセンサ
５６…１軸ジャイロセンサ
【図１】
2010246613.tif 000005
【図２】
2010246613.tif 000006
【図３】
2010246613.tif 000007
【図４】
2010246613.tif 000008
【図５】
2010246613.tif 000009
【図６】
2010246613.tif 000010
【図７】
2010246613.tif 000011
【図８】
2010246613.tif 000012
【図９】
2010246613.tif 000013
【図１０】
2010246613.tif 000014
【図１１】
2010246613.tif 000015
【図１２】
2010246613.tif 000016
【図１３】
2010246613.tif 000017
【図１４】
2010246613.tif 000018
【図１５】
2010246613.tif 000019
【図１６】
2010246613.tif 000020
【図１７】
2010246613.tif 000021
【図１８】
2010246613.tif 000022
【図１９】
2010246613.tif 000023
【図２０】
2010246613.tif 000024
【図２１】
2010246613.tif 000025
【図２２】
2010246613.tif 000026
【図２３】
2010246613.tif 000027
【図２４】
2010246613.tif 000028
【図２５】
2010246613.tif 000029
【図２６】
2010246613.tif 000030
【図２７】
2010246613.tif 000031
【図２８】
2010246613.tif 000032
【図２９】
2010246613.tif 000033
【図３０】
2010246613.tif 000034
【図３１】
2010246613.tif 000035
【図３２】
2010246613.tif 000036
【図３３】
2010246613.tif 000037
【図３４】
2010246613.tif 000038
【図３５】
2010246613.tif 000039
【図３６】
2010246613.tif 000040
【図３７】
2010246613.tif 000041
【図３８】
2010246613.tif 000042
【図３９】
2010246613.tif 000043
【図４０】
2010246613.tif 000044
【図４１】
2010246613.tif 000045
【図４２】
2010246613.tif 000046
【図４３】
2010246613.tif 000047
【図４４】
2010246613.tif 000048
【図４５】
2010246613.tif 000049
【図４６】
2010246613.tif 000050
【図４７】
2010246613.tif 000051
【図４８】
2010246613.tif 000052
【図４９】
2010246613.tif 000053
【図５０】
2010246613.tif 000054
【図５１】
2010246613.tif 000055
【図５２】
2010246613.tif 000056
【図５３】
2010246613.tif 000057
【図５４】
2010246613.tif 000058
【図５５】
2010246613.tif 000059
【図５６】
2010246613.tif 000060
【図５７】
2010246613.tif 000061
【図５８】
2010246613.tif 000062