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