(57)【要約】【課題】操作装置を多様に振動させることが可能となる情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供する。【解決手段】操作装置の振動子を振動させるための所定の振動データを生成して、操作装置へ出力する。そして、振動データが出力されている期間において、操作装置の動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データを生成して出力する。【選択図】図１６
2018110649.tif 000002
【特許請求の範囲】
【請求項１】
振動子と動きまたは姿勢を検出するセンサとを有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
前記振動子を振動させるための所定の振動データを生成する振動データ生成手段と、
前記振動データを前記操作装置へ出力する振動データ出力手段と、
前記操作装置から前記センサの検出結果に基づいた動き姿勢データを取得する動き姿勢データ取得手段と、
前記動き姿勢データに基づいて、所定の情報処理を行う情報処理手段として機能させ、
前記振動データ生成手段は、前記振動子を振動させる前記所定の振動データが出力されている期間において前記動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データを生成する、情報処理プログラム。
【請求項２】
前記振動データ生成手段は、前記動き姿勢データが所定の条件を満たした場合、前記振動子の振動の振幅を一時的に変化させる振動データを生成する、請求項１に記載の情報処理プログラム。
【請求項３】
前記振動データ生成手段は、前記動き姿勢データが所定の条件を満たした場合、前記振動子の振動の周波数を一時的に変化させる振動データを生成する、請求項１に記載の情報処理プログラム。
【請求項４】
前記振動データ生成手段は、前記動き姿勢データが所定の条件を満たした場合、前記振動子の振動の振幅および周波数を一時的に変化させる振動データを生成する、請求項１乃至３の何れか１つに記載の情報処理プログラム。
【請求項５】
前記振動データ生成手段は、前記動き姿勢データが示す前記操作装置の動きまたは姿勢の変化量に応じて前記一時的に変化させる振幅の変化量を設定することによって、前記一時的に変化させる振動データを生成する、請求項２または４に記載の情報処理プログラム。
【請求項６】
前記振動データ生成手段は、前記動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に前記所定の振動データが示す振動に戻した振動データを生成する、請求項１乃至５の何れか１つに記載の情報処理プログラム。
【請求項７】
前記振動データ生成手段は、前記操作装置に対する操作に応じて、前記所定の振動データを生成する、請求項１乃至６の何れか１つに記載の情報処理プログラム。
【請求項８】
前記振動データ生成手段は、前記動き姿勢データに応じて、前記所定の振動データを生成する、請求項７に記載の情報処理プログラム。
【請求項９】
前記センサは、前記操作装置の動きまたは姿勢に応じた複数のパラメータの検出が可能であり、
前記動き姿勢データ取得手段は、前記センサにおける前記複数のパラメータに関する検出結果を前記動き姿勢データとして取得し、
前記振動データ生成手段は、前記動き姿勢データが示す所定のパラメータに応じて前記所定の振動データを生成し、前記動き姿勢データが示す当該パラメータとは異なるパラメータが前記所定の条件を満たした場合、前記振動子の振動を一時的に変化させる振動データを生成する、請求項８に記載の情報処理プログラム。
【請求項１０】
前記センサは、前記操作装置の動きまたは姿勢に応じて当該操作装置に生じる加速度および角速度の検出が可能であり、
前記動き姿勢データ取得手段は、前記センサが検出した前記加速度および前記角速度に関する検出結果を前記動き姿勢データとして取得し、
前記振動データ生成手段は、前記動き姿勢データが示す加速度に応じて前記所定の振動データを生成し、前記動き姿勢データが示す前記角速度が前記所定の条件を満たした場合、前記振動子の振動を一時的に変化させる振動データを生成する、請求項９に記載の情報処理プログラム。
【請求項１１】
前記情報処理手段は、前記動き姿勢データに基づいて、仮想世界においてオブジェクトを移動させるオブジェクト移動手段を含み、
前記情報処理プログラムは、前記オブジェクトが移動している仮想世界を表示画面に表示する表示制御手段として、さらに前記コンピュータを機能させ、
前記オブジェクト移動手段は、前記オブジェクトが仮想世界を移動している間に前記動き姿勢データが前記所定の条件を満たした場合、前記オブジェクトの移動方向を変化させる、請求項１乃至１０の何れか１つに記載の情報処理プログラム。
【請求項１２】
前記表示制御手段は、前記動き姿勢データが前記所定の条件を満たしたことに応じて前記オブジェクトの移動方向が変化する際、当該移動方向の変化に応じた所定のエフェクト画像を当該オブジェクトに付与して前記表示画面に表示する、請求項１１に記載の情報処理プログラム。
【請求項１３】
前記振動データ生成手段は、前記動き姿勢データの変化量に応じて、前記一時的に振動を変化させる振動データを生成する、請求項１乃至１２の何れか１つに記載の情報処理プログラム。
【請求項１４】
前記振動データ生成手段は、前記動き姿勢データ取得手段が前回取得した前記動き姿勢データと今回取得した前記動き姿勢データとの差分に応じた変化量に応じて、前記一時的に振動を変化させる振動データを生成する、請求項１３に記載の情報処理プログラム。
【請求項１５】
前記振動データ生成手段は、前記振動子を振動させる前記所定の振動データが出力されている期間において前記動き姿勢データが前記所定の条件を再度満たした場合、当該振動子の振動を再度一時的に変化させた後に当該振動子の振動を継続させる振動データを生成する、請求項１乃至１４の何れか１つに記載の情報処理プログラム。
【請求項１６】
音声を出力する音声出力手段として、さらに前記コンピュータを機能させ、
前記振動データ生成手段は、前記音声出力手段が出力する音声に関連して、前記所定の振動データを生成する、請求項１乃至６の何れか１つに記載の情報処理プログラム。
【請求項１７】
振動子と動きまたは姿勢を検出するセンサとを有する操作装置に対する操作に基づいた情報処理を行う情報処理装置であって、
前記振動子を振動させるための所定の振動データを生成する振動データ生成手段と、
前記振動データを前記操作装置へ出力する振動データ出力手段と、
前記操作装置から前記センサの検出結果に基づいた動き姿勢データを取得する動き姿勢データ取得手段と、
前記動き姿勢データに基づいて、所定の情報処理を行う情報処理手段とを備え、
前記振動データ生成手段は、前記振動子を振動させる前記所定の振動データが出力されている期間において前記動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データを生成する、情報処理装置。
【請求項１８】
振動子と動きまたは姿勢を検出するセンサとを有する操作装置および当該操作装置に対する操作に基づいた情報処理を行う情報処理装置を含む情報処理システムであって、
前記振動子を振動させるための所定の振動データを生成する振動データ生成手段と、
前記振動データを前記操作装置へ出力する振動データ出力手段と、
前記操作装置から前記センサの検出結果に基づいた動き姿勢データを取得する動き姿勢データ取得手段と、
前記動き姿勢データに基づいて、所定の情報処理を行う情報処理手段とを備え、
前記振動データ生成手段は、前記振動子を振動させる前記所定の振動データが出力されている期間において前記動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データを生成する、情報処理システム。
【請求項１９】
振動子と動きまたは姿勢を検出するセンサとを有する操作装置に対する操作に基づいて情報処理を行う情報処理方法であって、
前記振動子を振動させるための所定の振動データを生成する振動データ生成ステップと、
前記振動データを前記操作装置へ出力する振動データ出力ステップと、
前記操作装置から前記センサの検出結果に基づいた動き姿勢データを取得する動き姿勢データ取得ステップと、
前記動き姿勢データに基づいて、所定の情報処理を行う情報処理ステップとを含み、
前記振動データ生成ステップでは、前記振動子を振動させる前記所定の振動データが出力されている期間において前記動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データが生成される、情報処理方法。
【請求項２０】
振動子と加速度センサと角速度センサとを有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
前記加速度センサの検出結果に基づいた加速度データと前記角速度センサの検出結果に基づいた角速度データとを前記操作装置から取得するデータ取得手段と、
前記加速度データが所定の条件を満たした場合に、前記振動子を振動させるための所定の振動データを生成する振動データ生成手段と、
前記振動データを前記操作装置へ出力する振動データ出力手段と、
前記加速度データおよび前記角速度データの少なくとも一方に基づいて所定の情報処理を行う情報処理手段として機能させ、
前記振動データ生成手段は、前記角速度データが所定の条件を満たした場合には、前記所定の振動データのパラメータを変化させる、情報処理プログラム。
【請求項２１】
振動子を有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
前記操作装置に対する操作データを取得する操作データ取得手段と、
仮想世界においてオブジェクトを移動させるオブジェクト移動手段と、
前記オブジェクトが移動している仮想世界を表示画面に表示する表示制御手段と、
前記オブジェクトの移動に関連して、前記振動子を振動させるための所定の振動データを生成する振動データ生成手段と、
前記振動データを前記操作装置へ出力する振動データ出力手段として機能させ、
前記振動データ生成手段は、前記オブジェクトの移動に関連して前記振動子を振動させる前記所定の振動データが出力されている当該オブジェクトの移動中において前記操作データが所定の条件を満たした場合、当該振動子の振動を変化させる振動データを生成し、
前記オブジェクト移動手段は、前記オブジェクトの移動中において前記操作データが前記所定の条件を満たした場合、前記オブジェクトの仮想世界における移動方向を変化させる、情報処理プログラム。
【請求項２２】
振動子とアナログ操作入力が可能な操作手段とを有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される情報処理プログラムであって、
前記コンピュータを、
前記振動子を振動させるための所定の振動データを生成する振動データ生成手段と、
前記振動データを前記操作装置へ出力する振動データ出力手段と、
前記操作装置から前記操作手段の検出結果に基づいたアナログ操作データを取得する操作データ取得手段と、
前記操作データに基づいて、所定の情報処理を行う情報処理手段として機能させ、
前記振動データ生成手段は、前記振動子を振動させる前記所定の振動データが出力されている期間において前記アナログ操作データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データを生成する、情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、操作装置に対する操作に基づいた情報処理を行う情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法に関する。
【背景技術】
【０００２】
従来、振動子が設けられたコントローラを用いて操作するゲームシステムがある（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１２−１１０６７０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記特許文献１で開示されたゲームシステムにおいて用いられるコントローラは、ゲーム状況によって所定の振動データに応じて振動するだけであり、コントローラを多様に振動させることについて改善の余地があった。
【０００５】
それ故、本発明の目的は、操作装置を多様に振動させることが可能となる情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法を提供することである。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、本発明は例えば以下のような構成を採用し得る。なお、特許請求の範囲の記載を解釈する際に、特許請求の範囲の記載によってのみその範囲が解釈されるべきであることが理解され、特許請求の範囲の記載と本欄の記載とが矛盾する場合には、特許請求の範囲の記載が優先する。
【０００７】
本発明の情報処理プログラムの第１の構成例は、振動子と動きまたは姿勢を検出するセンサとを有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される。情報処理プログラムは、振動データ生成手段、振動データ出力手段、動き姿勢データ取得手段、および情報処理手段として、コンピュータを機能させる。振動データ生成手段は、振動子を振動させるための所定の振動データを生成する。振動データ出力手段は、振動データを操作装置へ出力する。動き姿勢データ取得手段は、操作装置からセンサの検出結果に基づいた動き姿勢データを取得する。情報処理手段は、動き姿勢データに基づいて、所定の情報処理を行う。振動データ生成手段は、振動子を振動させる所定の振動データが出力されている期間において動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データを生成する。
【０００８】
上記によれば、操作装置の動きまたは姿勢に応じて、操作装置を多様に振動させることが可能となる。
【０００９】
また、上記振動データ生成手段は、動き姿勢データが所定の条件を満たした場合、振動子の振動の振幅を一時的に変化させる振動データを生成してもよい。
【００１０】
上記によれば、操作装置の動きまたは姿勢に応じて、振幅が一時的に変化する振動を与えることができる。
【００１１】
また、上記振動データ生成手段は、動き姿勢データが所定の条件を満たした場合、振動子の振動の周波数を一時的に変化させる振動データを生成してもよい。
【００１２】
上記によれば、操作装置の動きまたは姿勢に応じて、周波数が一時的に変化する振動を与えることができる。
【００１３】
また、上記振動データ生成手段は、動き姿勢データが所定の条件を満たした場合、振動子の振動の振幅および周波数を一時的に変化させる振動データを生成してもよい。
【００１４】
上記によれば、操作装置の動きまたは姿勢に応じて、振幅および周波数がともに一時的に変化する振動を与えることができる。
【００１５】
また、上記振動データ生成手段は、動き姿勢データが示す操作装置の動きまたは姿勢の変化量に応じて一時的に変化させる振幅の変化量を設定することによって、一時的に変化させる振動データを生成してもよい。
【００１６】
上記によれば、操作装置の動きの変化量または姿勢の変化量に応じた変化量で振幅が一時的に変化する振動を与えることができる。
【００１７】
また、上記振動データ生成手段は、動き姿勢データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に所定の振動データが示す振動に戻した振動データを生成してもよい。
【００１８】
上記によれば、振動している操作装置の動きまたは姿勢が所定の条件を満たした場合に一時的に変化する振動を操作装置に与えた後、当該操作装置の振動に元に戻すことができる。
【００１９】
また、上記振動データ生成手段は、操作装置に対する操作に応じて、所定の振動データを生成してもよい。
【００２０】
上記によれば、操作装置を用いた所定の操作に応じて与えられた当該操作装置の振動を、当該操作装置の動きまたは姿勢に応じて一時的に変化させることができる。
【００２１】
また、上記振動データ生成手段は、動き姿勢データに応じて、所定の振動データを生成してもよい。
【００２２】
上記によれば、操作装置の動きまたは姿勢に応じて与えられた当該操作装置の振動を、当該操作装置の動きまたは姿勢に応じて一時的に変化させることができる。
【００２３】
また、上記センサは、操作装置の動きまたは姿勢に応じた複数のパラメータの検出が可能でもよい。上記動き姿勢データ取得手段は、センサにおける複数のパラメータに関する検出結果を動き姿勢データとして取得してもよい。上記振動データ生成手段は、動き姿勢データが示す所定のパラメータに応じて所定の振動データを生成し、動き姿勢データが示す当該パラメータとは異なるパラメータが所定の条件を満たした場合、振動子の振動を一時的に変化させる振動データを生成してもよい。
【００２４】
上記によれば、操作装置の動きまたは姿勢に応じて与えられた当該操作装置の振動を、当該操作装置の動きまたは姿勢に基づいた異なるパラメータに応じて一時的に変化させることができる。
【００２５】
また、上記センサは、操作装置の動きまたは姿勢に応じて当該操作装置に生じる加速度および角速度の検出が可能でもよい。上記動き姿勢データ取得手段は、センサが検出した加速度および角速度に関する検出結果を動き姿勢データとして取得してもよい。上記振動データ生成手段は、動き姿勢データが示す加速度に応じて所定の振動データを生成し、動き姿勢データが示す角速度が所定の条件を満たした場合、振動子の振動を一時的に変化させる振動データを生成してもよい。
【００２６】
上記によれば、操作装置の動きまたは姿勢に応じて生じる加速度によって与えられた当該操作装置の振動を、当該操作装置の動きまたは姿勢に応じて生じる角速度に応じて一時的に変化させることができる。
【００２７】
また、上記情報処理手段は、オブジェクト移動手段を含んでもよい。オブジェクト移動手段は、動き姿勢データに基づいて、仮想世界においてオブジェクトを移動させる。上記情報処理プログラムは、表示制御手段として、さらにコンピュータを機能させてもよい。表示制御手段は、オブジェクトが移動している仮想世界を表示画面に表示する。この場合、上記オブジェクト移動手段は、オブジェクトが仮想世界を移動している間に動き姿勢データが所定の条件を満たした場合、オブジェクトの移動方向を変化させてもよい。
【００２８】
上記によれば、オブジェクトの移動方向の変化と操作装置の振動の変化とを同期させることができる。
【００２９】
また、上記表示制御手段は、動き姿勢データが所定の条件を満たしたことに応じてオブジェクトの移動方向が変化する際、当該移動方向の変化に応じた所定のエフェクト画像を当該オブジェクトに付与して表示画面に表示してもよい。
【００３０】
上記によれば、オブジェクトの移動方向に応じて付与されるエフェクト画像と操作装置の振動の変化とを同期させることができる。
【００３１】
また、上記振動データ生成手段は、動き姿勢データの変化量に応じて、一時的に振動を変化させる振動データを生成してもよい。
【００３２】
上記によれば、操作装置の動きや姿勢の変化量に応じて、当該操作装置の振動を一時的に変化させることができる。
【００３３】
また、上記振動データ生成手段は、動き姿勢データ取得手段が前回取得した動き姿勢データと今回取得した動き姿勢データとの差分に応じた変化量に応じて、一時的に振動を変化させる振動データを生成してもよい。
【００３４】
上記によれば、操作装置の動きや姿勢の変化量に応じて、当該操作装置の振動を一時的に変化させることができる。
【００３５】
また、上記振動データ生成手段は、振動子を振動させる所定の振動データが出力されている期間において動き姿勢データが所定の条件を再度満たした場合、当該振動子の振動を再度一時的に変化させた後に当該振動子の振動を継続させる振動データを生成してもよい。
【００３６】
上記によれば、操作装置の動きまたは姿勢が所定の条件を複数回満たした場合、それぞれの回において振動を一時的に変化させることができる。
【００３７】
また、上記情報処理プログラムは、音声を出力する音声出力手段として、さらにコンピュータを機能させてもよい。上記振動データ生成手段は、音声出力手段が出力する音声に関連して、所定の振動データを生成してもよい。
【００３８】
上記によれば、音声に応じて与えられた当該操作装置の振動を、当該操作装置の動きまたは姿勢に応じて一時的に変化させることができる。
【００３９】
また、本発明の情報処理プログラムの第２の構成例は、振動子と加速度センサと角速度センサとを有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される。情報処理プログラムは、データ取得手段、振動データ生成手段、振動データ出力手段、および情報処理手段として、コンピュータを機能させる。データ取得手段は、加速度センサの検出結果に基づいた加速度データと角速度センサの検出結果に基づいた角速度データとを操作装置から取得する。振動データ生成手段は、加速度データが所定の条件を満たした場合に、振動子を振動させるための所定の振動データを生成する。振動データ出力手段は、振動データを操作装置へ出力する。情報処理手段は、加速度データおよび角速度データの少なくとも一方に基づいて所定の情報処理を行う。振動データ生成手段は、角速度データが所定の条件を満たした場合には、所定の振動データのパラメータを変化させる。
【００４０】
上記によれば、操作装置の動きまたは姿勢に応じて生じる加速度によって与えられた当該操作装置の振動を、当該操作装置の動きまたは姿勢に応じて生じる角速度に応じて一時的に変化させることができる。
【００４１】
また、本発明の情報処理プログラムの第３の構成例は、振動子を有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される。情報処理プログラムは、操作データ取得手段、オブジェクト移動手段、表示制御手段、振動データ生成手段、および振動データ出力手段としてコンピュータを機能させる。操作データ取得手段は、操作装置に対する操作データを取得する。オブジェクト移動手段は、仮想世界においてオブジェクトを移動させる。表示制御手段は、オブジェクトが移動している仮想世界を表示画面に表示する。振動データ生成手段は、オブジェクトの移動に関連して、振動子を振動させるための所定の振動データを生成する。振動データ出力手段は、振動データを操作装置へ出力する。振動データ生成手段は、オブジェクトの移動に関連して振動子を振動させる所定の振動データが出力されている当該オブジェクトの移動中において操作データが所定の条件を満たした場合、当該振動子の振動を変化させる振動データを生成する。オブジェクト移動手段は、オブジェクトの移動中において操作データが所定の条件を満たした場合、オブジェクトの仮想世界における移動方向を変化させる。
【００４２】
上記によれば、表示画面に表示されるオブジェクトの移動に関連して与えられた当該操作装置の振動を、当該オブジェクトの移動方向の変化に応じて一時的に変化させることができる。
【００４３】
また、本発明の情報処理プログラムの第４の構成例は、振動子とアナログ操作入力が可能な操作手段とを有する操作装置に対する操作に基づいた情報処理を行う情報処理装置に含まれるコンピュータで実行される。情報処理プログラムは、振動データ生成手段、振動データ出力手段、操作データ取得手段、および情報処理手段として、コンピュータを機能させる。振動データ生成手段は、振動子を振動させるための所定の振動データを生成する。振動データ出力手段は、振動データを操作装置へ出力する。操作データ取得手段は、操作装置から操作手段の検出結果に基づいたアナログ操作データを取得する。情報処理手段は、操作データに基づいて、所定の情報処理を行う。振動データ生成手段は、振動子を振動させる所定の振動データが出力されている期間においてアナログ操作データが所定の条件を満たした場合、当該振動子の振動を一時的に変化させた後に当該振動子の振動を継続させる振動データを生成する。
【００４４】
上記によれば、操作装置に対するアナログ操作に応じて、操作装置を多様に振動させることが可能となる。
【００４５】
また、本発明は、上記各手段を備える情報処理装置および情報処理システムや上記各手段で行われる動作を含む情報処理方法の形態で実施されてもよい。
【発明の効果】
【００４６】
本発明によれば、操作装置の動きまたは姿勢や当該操作装置に対する操作に応じて、操作装置を多様に振動させることが可能となる。
【図面の簡単な説明】
【００４７】
【図１】本実施形態における情報処理システム１の一例において、本体装置２に左コントローラ３および右コントローラ４を装着した状態を示す図
【図２】本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図
【図３】本体装置２の一例を示す六面図
【図４】左コントローラ３の一例を示す六面図
【図５】右コントローラ４の一例を示す六面図
【図６】本実施形態における情報処理システムの他の例の全体構成を示す図
【図７】クレードル５の一例の外観構成を示す図
【図８】本体装置２の内部構成の一例を示すブロック図
【図９】情報処理システム１の内部構成の一例を示すブロック図
【図１０】クレードル５の内部構成の一例を示すブロック図
【図１１】離脱状態において、１人のユーザが左コントローラ３および右コントローラ４の組を把持して情報処理システム１を利用する様子の一例を示す図
【図１２】離脱状態において、１人のユーザが左コントローラ３および右コントローラ４の組を把持して情報処理システム１を利用する様子の一例を示す図
【図１３】離脱状態において、１人のユーザが左コントローラ３および右コントローラ４の組を把持して情報処理システム１を利用する様子の一例を示す図
【図１４】左コントローラ３および右コントローラ４を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図
【図１５】左コントローラ３および右コントローラ４を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図
【図１６】左コントローラ３および右コントローラ４を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図
【図１７】左コントローラ３および右コントローラ４を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図
【図１８】左コントローラ３および右コントローラ４を装着可能な付属機器の一例を示す図
【図１９】本実施形態において本体装置２のＤＲＡＭ８５に設定されるデータ領域の一例を示す図
【図２０】情報処理システム１で実行されるゲーム処理の一例を示すフローチャート
【図２１】図２０におけるステップＳ１４４およびステップＳ１４５において行われるコントローラ振り認識処理の詳細の一例を示すサブルーチン
【図２２】図２０におけるステップＳ１４４およびステップＳ１４５において行われるコントローラ振り認識処理の詳細の一例を示すサブルーチン
【図２３】図２０におけるステップＳ１４６およびステップＳ１４７において行われるオブジェクト軌道変化処理の詳細の一例を示すサブルーチン
【図２４】図２０におけるステップＳ１４６およびステップＳ１４７において行われるオブジェクト軌道変化処理の詳細の一例を示すサブルーチン
【図２５】図２０におけるステップＳ１４６およびステップＳ１４７において行われるオブジェクト軌道変化処理の詳細の一例を示すサブルーチン
【図２６】図２０におけるステップＳ１４８において行われるプレイヤオブジェクト移動処理の詳細の一例を示すサブルーチン
【図２７】回転速度Ｖに応じて往路振動波形の振幅を変化させる変化パターンの一例を示す図
【発明を実施するための形態】
【００４８】
以下、本実施形態の一例に係る情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法について説明する。本実施形態におけるゲームシステムの一例となる情報処理システム１は、本体装置（情報処理装置；本実施形態ではゲーム装置本体として機能する）２と左コントローラ３および右コントローラ４とによって構成される。また、上記情報処理システムの他の態様は、上記構成にクレードル５（図５、図７等参照）を加えて構成されることもある。本実施形態における情報処理システム１は、本体装置２に対して左コントローラ３および右コントローラ４が着脱可能であり、左コントローラ３および右コントローラ４をそれぞれ本体装置２に装着して一体化された装置として利用でき、また、本体装置２と左コントローラ３および右コントローラ４とを別体として利用することもできる（図２参照）。また、情報処理システム１は、本体装置２に画像を表示する態様での利用と、テレビ等の他の表示装置に画像を表示させる態様での利用が可能である。前者の態様において、情報処理システム１は、携帯型装置（例えば、携帯ゲーム機）として利用することができる。また、後者の態様において、情報処理システム１は、据置型装置（例えば、据置型ゲーム機）として利用することができる。
【００４９】
図１は、本実施形態における情報処理システム１の一例において、本体装置２に左コントローラ３および右コントローラ４を装着した状態を示す図である。図１に示すように、情報処理システム１は、本体装置２と、左コントローラ３と、右コントローラ４とを含む。左コントローラ３および右コントローラ４は、それぞれ本体装置２に装着されて一体化されている。本体装置２は、情報処理システム１における各種の処理（例えば、ゲーム処理）を実行する装置である。本体装置２は、ディスプレイ１２を備える。左コントローラ３および右コントローラ４は、ユーザが入力を行うための操作部を備える装置である。
【００５０】
図２は、本体装置２から左コントローラ３および右コントローラ４をそれぞれ外した状態の一例を示す図である。図１および図２に示すように、左コントローラ３および右コントローラ４は、本体装置２に着脱可能である。なお、以下において、左コントローラ３および右コントローラ４の総称として「コントローラ」と記載することがある。なお、本実施形態において、１人のユーザが操作する「操作装置」は、１つのコントローラ（例えば、左コントローラ３および右コントローラ４の一方）でも複数のコントローラ（例えば、左コントローラ３および右コントローラ４の両方、またはさらに他のコントローラを含んでもよい）でもよく、当該「操作装置」は、１以上のコントローラによって構成可能となる。以下、本体装置２と左コントローラ３および右コントローラ４との具体的な構成の一例について説明する。
【００５１】
図３は、本体装置２の一例を示す六面図である。図３に示すように、本体装置２は、略板状のハウジング１１を備える。本実施形態において、ハウジング１１の主面（換言すれば、表側の面、すなわち、ディスプレイ１２が設けられる面）は、大略的には矩形形状である。本実施形態においては、ハウジング１１は、横長の形状であるものとする。つまり、本実施形態においては、ハウジング１１の主面の長手方向（すなわち、図１に示すｘ軸方向）を横方向（左右方向とも言う）と呼び、当該主面の短手方向（すなわち、図１に示すｙ軸方向）を縦方向（上下方向とも言う）と呼び、主面に垂直な方向（すなわち、図１に示すｚ軸方向）を奥行方向（前後方向とも言う）と呼ぶこととする。本体装置２は、本体装置２が横長となる向きで利用されることが可能である。また、本体装置２が縦長となる向きで利用されることも可能である。その場合には、ハウジング１１を縦長の形状であるものと見なしてもよい。
【００５２】
なお、ハウジング１１の形状および大きさは、任意である。一例として、ハウジング１１は、携帯可能な大きさであってよい。また、本体装置２単体または本体装置２に左コントローラ３および右コントローラ４が装着された一体型装置は、携帯型装置となってもよい。また、本体装置２または一体型装置が手持ち型の装置となってもよい。また、本体装置２または一体型装置が可搬型装置となってもよい。
【００５３】
図３に示すように、本体装置２は、ハウジング１１の主面に設けられるディスプレイ１２を備える。ディスプレイ１２は、本体装置２が取得または生成した画像（静止画であってもよいし、動画であってもよい）を表示する。本実施形態においては、ディスプレイ１２は、液晶表示装置（ＬＣＤ）とする。ただし、ディスプレイ１２は任意の種類の表示装置であってよい。
【００５４】
また、本体装置２は、ディスプレイ１２の画面上にタッチパネル１３を備える。本実施形態においては、タッチパネル１３は、マルチタッチ入力が可能な方式（例えば、静電容量方式）のものである。ただし、タッチパネル１３は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式（例えば、抵抗膜方式）のものであってもよい。
【００５５】
本体装置２は、ハウジング１１の内部においてスピーカ（すなわち、図８に示すスピーカ８８）を備えている。図３に示すように、ハウジング１１の主面には、スピーカ孔１１ａおよび１１ｂが形成される。そして、スピーカ８８の出力音は、これらのスピーカ孔１１ａおよび１１ｂからそれぞれ出力される。
【００５６】
また、本体装置２は、本体装置２が左コントローラ３と有線通信を行うための左側端子１７と、本体装置２が右コントローラ４と有線通信を行うための右側端子２１とを備える。
【００５７】
図３に示すように、本体装置２は、スロット２３を備える。スロット２３は、ハウジング１１の上側面に設けられる。スロット２３は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、情報処理システム１およびそれと同種の情報処理装置に専用の記憶媒体（例えば、専用メモリカード）である。所定の種類の記憶媒体は、例えば、本体装置２で利用されるデータ（例えば、アプリケーションのセーブデータ等）、および／または、本体装置２で実行されるプログラム（例えば、アプリケーションのプログラム等）を記憶するために用いられる。また、本体装置２は、電源ボタン２８と音量ボタン２６ａおよび２６ｂとを備える。
【００５８】
本体装置２は、下側端子２７を備える。下側端子２７は、本体装置２が、後述するクレードル５と通信を行うための端子である。本実施形態において、下側端子２７は、ＵＳＢコネクタ（より具体的には、メス側コネクタ）である。
【００５９】
図４は、左コントローラ３の一例を示す六面図である。図４に示すように、左コントローラ３は、ハウジング３１を備える。本実施形態において、ハウジング３１は、略板状である。また、本実施形態においては、ハウジング３１は、縦長の形状、すなわち、上下方向（すなわち、図１に示すｙ軸方向）に長い形状である。左コントローラ３は、本体装置２から外された状態において、縦長となる向きで把持されることも可能である。ハウジング３１は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ３は、横長となる向きで把持されることも可能である。左コントローラ３が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【００６０】
左コントローラ３は、アナログスティック３２を備える。図４に示すように、アナログスティック３２が、ハウジング３１の主面に設けられる。アナログスティック３２は、方向を入力することが可能な方向入力部の一例である。ユーザは、アナログスティック３２を傾倒することによって傾倒方向に応じた方向の入力（および、傾倒した角度に応じた大きさの入力）が可能である。なお、左コントローラ３は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック３２を押下する入力が可能である。
【００６１】
左コントローラ３は、各種操作ボタンを備える。まず、左コントローラ３は、ハウジング３１の主面上に４つの操作ボタン３３〜３６（具体的には、右方向ボタン３３、下方向ボタン３４、上方向ボタン３５、および、左方向ボタン３６）を備える。さらに、左コントローラ３は、録画ボタン３７、−（マイナス）ボタン４７を備える。左コントローラ３は、ハウジング３１の側面の左上に第１Ｌボタン３８およびＺＬボタン３９を備える。また、左コントローラ３は、ハウジング３１の側面の、本体装置２に装着される際に装着される側の面に第２Ｌボタン４３および第２Ｒボタン４４を備える。これらの操作ボタンは、本体装置２で実行される各種プログラム（例えば、ＯＳプログラムやアプリケーションプログラム）に応じた指示を行うために用いられる。
【００６２】
また、左コントローラ３は、左コントローラ３が本体装置２と有線通信を行うための端子４２を備える。
【００６３】
図５は、右コントローラ４の一例を示す六面図である。図５に示すように、右コントローラ４は、ハウジング５１を備える。本実施形態においては、ハウジング５１は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ４は、本体装置２から外された状態において、縦長となる向きで把持されることも可能である。ハウジング５１は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、右コントローラ４は、横長となる向きで把持されることも可能である。右コントローラ４が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【００６４】
右コントローラ４は、左コントローラ３と同様、方向入力部としてアナログスティック５２を備える。本実施形態においては、アナログスティック５２は、左コントローラ３のアナログスティック３２と同じ構成である。また、右コントローラ４は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ４は、左コントローラ３と同様、ハウジング５１の主面上に４つの操作ボタン５３〜５６（具体的には、Ａボタン５３、Ｂボタン５４、Ｘボタン５５、および、Ｙボタン５６）を備える。さらに、右コントローラ４は、＋（プラス）ボタン５７およびホームボタン５８を備える。また、右コントローラ４は、ハウジング５１の側面の右上に第１Ｒボタン６０およびＺＲボタン６１を備える。また、左コントローラ３と同様、第２Ｌボタン６５および第２Ｒボタン６６を備える。
【００６５】
また、右コントローラ４は、右コントローラ４が本体装置２と有線通信を行うための端子６４を備える。
【００６６】
図６は、本実施形態における情報処理システムの他の例の全体構成を示す図である。図６に示すように、一例として、クレードル５は、左コントローラ３および右コントローラ４を本体装置２から取り外した状態で本体装置２のみを載置することが可能である。また、さらに他の例として、クレードル５は、左コントローラ３および右コントローラ４が本体装置２に装着された一体型装置を載置することも可能である。また、クレードル５は、ディスプレイ１２とは別体の外部表示装置の一例である据置型モニタ６（例えば、据置型テレビ）と通信可能である（有線通信であってもよいし、無線通信であってもよい）。詳細は後述するが、上記一体型装置または本体装置２単体をクレードル５に載置した場合、情報処理システムは、本体装置２が取得または生成した画像を据置型モニタ６に表示することができる。また、本実施形態においては、クレードル５は、載置された上記一体型装置または本体装置２単体を充電する機能を有する。また、クレードル５は、ハブ装置（具体的には、ＵＳＢハブ）の機能を有する。
【００６７】
図７は、クレードル５の一例の外観構成を示す図である。クレードル５は、上記一体型装置または本体装置２のみを着脱可能に載置する（装着するとも言える）ことが可能なハウジングを有する。本実施形態においては、図７に示すように、ハウジングは、溝７１ａが形成される第１支持部７１と、略平面状の第２支持部７２とを有する。
【００６８】
図７に示すように、第１支持部７１に形成される溝７１ａは、上記一体型装置の下側部分の形状に応じた形状を有する。具体的には、溝７１ａは、上記一体型装置の下側部分を挿入可能な形状であり、より具体的には、上記本体装置２の下側部分と略一致する形状である。したがって、上記一体型装置の下側部分を溝７１ａに挿入することによって、上記一体型装置をクレードル５に載置することができる。また、第２支持部７２は、その下側部分が溝７１ａに挿入された上記一体型装置の表面（すなわち、ディスプレイ１２が設けられる面）を支持する。この第２支持部７２によって、クレードル５は、上記一体型装置をより安定的に支持することができる。なお、図７に示すハウジングの形状は一例であり、他の実施形態においては、クレードル５のハウジングは、上記本体装置２を載置することが可能な任意の形状であってよい。
【００６９】
図７に示すように、また、クレードル５は、クレードル５が上記一体型装置と通信を行うための本体端子７３を備える。図７に示すように、本体端子７３は、第１支持部７１に形成される溝７１ａの底面に設けられる。より具体的には、本体端子７３は、上記一体型装置がクレードル５に装着される場合に、本体装置２の下側端子２７が接触する位置に設けられる。本実施形態においては、本体端子７３は、ＵＳＢコネクタ（より具体的には、オス側コネクタ）である。
【００７０】
図７では図示しないが、クレードル５は、ハウジングの背面に端子（本実施形態においては、複数の端子を有する。具体的には、クレードル５は、図１０に示すモニタ用端子１３２、電源端子１３４、および拡張用端子１３７）を有する。これらの端子の詳細については後述する。
【００７１】
図８は、本体装置２の内部構成の一例を示すブロック図である。本体装置２は、図３に示す構成の他、図８に示す各構成要素８１〜９８を備える。これらの構成要素８１〜９８のいくつかは、電子部品として電子回路基板上に実装されてハウジング１１内に収納されてもよい。
【００７２】
本体装置２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）８１を備える。ＣＰＵ８１は、本体装置２において実行される各種の情報処理を実行する情報処理部である。ＣＰＵ８１は、記憶部（具体的には、フラッシュメモリ８４等の内部記憶媒体、あるいは、各スロット２３および２４に装着される外部記憶媒体等）に記憶される情報処理プログラム（例えば、ゲームプログラム）を実行することによって、各種の情報処理を実行する。
【００７３】
本体装置２は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ８４およびＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８５を備える。フラッシュメモリ８４およびＤＲＡＭ８５は、ＣＰＵ８１に接続される。フラッシュメモリ８４は、主に、本体装置２に保存される各種のデータ（プログラムであってもよい）を記憶するために用いられるメモリである。ＤＲＡＭ８５は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【００７４】
本体装置２は、スロットインターフェース（以下、「Ｉ／Ｆ」と略記する。）９１を備える。スロットＩ／Ｆ９１は、ＣＰＵ８１に接続される。スロットＩ／Ｆ９１は、スロット２３に接続され、スロット２３に装着された所定の種類の記憶媒体（例えば、専用メモリカード）に対するデータの読み出しおよび書き込みを、ＣＰＵ８１の指示に応じて行う。
【００７５】
ＣＰＵ８１は、フラッシュメモリ８４およびＤＲＡＭ８５、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【００７６】
本体装置２は、ネットワーク通信部８２を備える。ネットワーク通信部８２は、ＣＰＵ８１に接続される。ネットワーク通信部８２は、ネットワークを介して外部の装置と通信（具体的には、無線通信）を行う。本実施形態においては、ネットワーク通信部８２は、第１の通信態様としてＷｉ−Ｆｉの規格に準拠した方式により、無線ＬＡＮに接続して外部装置と通信を行う。また、ネットワーク通信部８２は、第２の通信態様として所定の通信方式（例えば、独自プロトコルによる通信や、赤外線通信）により、同種の他の本体装置２との間で無線通信を行う。なお、上記第２の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置２との間で無線通信可能であり、複数の本体装置２の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【００７７】
本体装置２は、コントローラ通信部８３を備える。コントローラ通信部８３は、ＣＰＵ８１に接続される。コントローラ通信部８３は、左コントローラ３および／または右コントローラ４と無線通信を行う。本体装置２と左コントローラ３および右コントローラ４との通信方式は任意であるが、本実施形態においては、コントローラ通信部８３は、左コントローラ３との間および右コントローラ４との間で、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った通信を行う。
【００７８】
ＣＰＵ８１は、上述の左側端子１７、右側端子２１、および、下側端子２７に接続される。ＣＰＵ８１は、左コントローラ３と有線通信を行う場合、左側端子１７を介して左コントローラ３へデータを送信するとともに、左側端子１７を介して左コントローラ３から操作データを受信する。また、ＣＰＵ８１は、右コントローラ４と有線通信を行う場合、右側端子２１を介して右コントローラ４へデータを送信するとともに、右側端子２１を介して右コントローラ４から操作データを受信する。また、ＣＰＵ８１は、クレードル５と通信を行う場合、下側端子２７を介してクレードル５へデータを送信する。このように、本実施形態においては、本体装置２は、左コントローラ３および右コントローラ４との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ３および右コントローラ４が本体装置２に装着された一体型装置または本体装置２単体がクレードル５に装着された場合、本体装置２は、クレードル５を介してデータ（例えば、画像データや音声データ）を据置型モニタ６に出力することができる。
【００７９】
ここで、本体装置２は、複数の左コントローラ３と同時に（換言すれば、並行して）通信を行うことができる。また、本体装置２は、複数の右コントローラ４と同時に（換言すれば、並行して）通信を行うことができる。したがって、ユーザは、複数の左コントローラ３および複数の右コントローラ４を用いて本体装置２に対する入力を行うことができる。
【００８０】
本体装置２は、タッチパネル１３の制御を行う回路であるタッチパネルコントローラ８６を備える。タッチパネルコントローラ８６は、タッチパネル１３とＣＰＵ８１との間に接続される。タッチパネルコントローラ８６は、タッチパネル１３からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、ＣＰＵ８１へ出力する。
【００８１】
また、ディスプレイ１２は、ＣＰＵ８１に接続される。ＣＰＵ８１は、（例えば、上記の情報処理の実行によって）生成した画像および／または外部から取得した画像をディスプレイ１２に表示する。
【００８２】
本体装置２は、コーデック回路８７およびスピーカ（具体的には、左スピーカおよび右スピーカ）８８を備える。コーデック回路８７は、スピーカ８８および音声入出力端子２５に接続されるとともに、ＣＰＵ８１に接続される。コーデック回路８７は、スピーカ８８および音声入出力端子２５に対する音声データの入出力を制御する回路である。すなわち、コーデック回路８７は、ＣＰＵ８１から音声データを受け取った場合、当該音声データに対してＤ／Ａ変換を行って得られる音声信号をスピーカ８８または音声入出力端子２５へ出力する。これによって、スピーカ８８あるいは音声入出力端子２５に接続された音声出力部（例えば、イヤホン）から音が出力される。また、コーデック回路８７は、音声入出力端子２５から音声信号を受け取った場合、音声信号に対してＡ／Ｄ変換を行い、所定の形式の音声データをＣＰＵ８１へ出力する。また、音量ボタン２６は、ＣＰＵ８１に接続される。ＣＰＵ８１は、音量ボタン２６に対する入力に基づいて、スピーカ８８または上記音声出力部から出力される音量を制御する。
【００８３】
本体装置２は、電力制御部９７およびバッテリ９８を備える。電力制御部９７は、バッテリ９８およびＣＰＵ８１に接続される。また、図示しないが、電力制御部９７は、本体装置２の各部（具体的には、バッテリ９８の電力の給電を受ける各部、左側端子１７、および右側端子２１）に接続される。電力制御部９７は、ＣＰＵ８１からの指令に基づいて、バッテリ９８から上記各部への電力供給を制御する。
【００８４】
また、バッテリ９８は、下側端子２７に接続される。外部の充電装置（例えば、クレードル５）が下側端子２７に接続され、下側端子２７を介して本体装置２に電力が供給される場合、供給された電力がバッテリ９８に充電される。
【００８５】
図９は、情報処理システム１の内部構成の一例を示すブロック図である。なお、情報処理システム１のうちの本体装置２に関する内部構成の詳細については、図８で示しているため図９では省略している。
【００８６】
左コントローラ３は、本体装置２との間で通信を行う通信制御部１０１を備える。図９に示すように、通信制御部１０１は、端子４２を含む各構成要素に接続される。本実施形態においては、通信制御部１０１は、端子４２を介した有線通信と、端子４２を介さない無線通信との両方で本体装置２と通信を行うことが可能である。通信制御部１０１は、左コントローラ３が本体装置２に対して行う通信方法を制御する。すなわち、左コントローラ３が本体装置２に装着されている場合、通信制御部１０１は、端子４２を介して本体装置２と通信を行う。また、左コントローラ３が本体装置２から外されている場合、通信制御部１０１は、本体装置２（具体的には、コントローラ通信部８３）との間で無線通信を行う。コントローラ通信部８３と通信制御部１０１との間の無線通信は、例えばＢｌｕｅｔｏｏｔｈ（登録商標）の規格に従って行われる。
【００８７】
また、左コントローラ３は、例えばフラッシュメモリ等のメモリ１０２を備える。通信制御部１０１は、例えばマイコン（マイクロプロセッサとも言う）で構成され、メモリ１０２に記憶されるファームウェアを実行することによって各種の処理を実行する。
【００８８】
左コントローラ３は、各ボタン１０３（具体的には、ボタン３３〜３９，４３，および４４）を備える。また、左コントローラ３は、アナログスティック（図９では「スティック」と記載する）３２を備える。各ボタン１０３およびアナログスティック３２は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部１０１へ出力する。
【００８９】
左コントローラ３は、加速度センサ１０４を備える。本実施形態においては、加速度センサ１０４は、所定の３軸（例えば、図１１に示すＸＹＺ軸）方向に沿った直線加速度の大きさを検出する。なお、加速度センサ１０４は、１軸方向あるいは２軸方向の加速度を検出するものであってもよい。また、左コントローラ３は、角速度センサ１０５を備える。本実施形態においては、角速度センサ１０５は、所定の３軸（例えば、図１１に示すＸＹＺ軸）回りの角速度を検出する。なお、角速度センサ１０５は、１軸回りあるいは２軸回りの角速度を検出するものであってもよい。加速度センサ１０４および角速度センサ１０５は、それぞれ通信制御部１０１に接続される。そして、加速度センサ１０４および角速度センサ１０５の検出結果は、適宜のタイミングで繰り返し通信制御部１０１へ出力される。
【００９０】
通信制御部１０１は、各入力部（具体的には、各ボタン１０３、アナログスティック３２、各センサ１０４および１０５）から、入力に関する情報（具体的には、操作に関する情報、または、センサによる検出結果）を取得する。通信制御部１０１は、取得した情報（または取得した情報に所定の加工を行った情報）を含む操作データを本体装置２へ送信する。なお、操作データは、所定時間に１回の割合で繰り返し送信される。なお、入力に関する情報が本体装置２へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【００９１】
上記操作データが本体装置２へ送信されることによって、本体装置２は、左コントローラ３に対して行われた入力を得ることができる。すなわち、本体装置２は、各ボタン１０３およびアナログスティック３２に対する操作を、操作データに基づいて判別することができる。また、本体装置２は、左コントローラ３の動きおよび／または姿勢に関する情報を、操作データ（具体的には、加速度センサ１０４および角速度センサ１０５の検出結果）に基づいて算出することができる。
【００９２】
左コントローラ３は、振動によってユーザに通知を行うための振動子１０７を備える。本実施形態においては、振動子１０７は、本体装置２からの指令によって制御される。すなわち、通信制御部１０１は、本体装置２からの上記指令を受け取ると、当該指令に従って振動子１０７を駆動させる。ここで、左コントローラ３は、コーデック１０６を備える。通信制御部１０１は、上記指令を受け取ると、指令に応じた制御信号をコーデック１０６へ出力する。コーデック１０６は、通信制御部１０１からの制御信号を増幅して、振動子１０７を駆動させるための駆動信号を生成して振動子１０７へ与える。これによって振動子１０７が動作する。
【００９３】
振動子１０７は、より具体的にはリニア振動モータである。リニア振動モータは、回転運動をする通常のモータと異なり、入力される電圧に応じて所定方向に駆動されるため、入力される電圧の波形に応じた振幅、周波数で振動をさせることができる。本実施形態において、本体装置２から左コントローラ３に送信される振動制御信号は、単位時間ごとに周波数と振幅とを表すデジタル信号であってよい。別の実施形態においては、波形そのものを示す情報を送信するようにしてもよいが、振幅と周波数とだけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅と周波数との数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部１０６は、通信制御部１０１から取得される振幅と周波数との値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動子１０７を駆動させる。したがって、本体装置２は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動子１０７を振動させる振幅と周波数とを制御することができる。なお、本体装置２から左コントローラ３に送信される振幅と周波数とは、１つに限らず、２つ以上送信するようにしてもよい。その場合、コーデック部１０６は、受信された複数の振幅および周波数それぞれが示す波形を合成することで、振動子１０７を制御する電圧の波形を生成することができる。
【００９４】
左コントローラ３は、電力供給部１０８を備える。本実施形態において、電力供給部１０８は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ３の各部（具体的には、バッテリの電力の給電を受ける各部）に接続される。
【００９５】
図９に示すように、右コントローラ４は、本体装置２との間で通信を行う通信制御部１１１を備える。また、右コントローラ４は、通信制御部１１１に接続されるメモリ１１２を備える。通信制御部１１１は、端子６４を含む各構成要素に接続される。通信制御部１１１およびメモリ１１２は、左コントローラ３の通信制御部１０１およびメモリ１０２と同様の機能を有する。したがって、通信制御部１１１は、端子６４を介した有線通信と、端子６４を介さない無線通信（具体的には、Ｂｌｕｅｔｏｏｔｈ（登録商標）の規格に従った通信）との両方で本体装置２と通信を行うことが可能であり、右コントローラ４が本体装置２に対して行う通信方法を制御する。
【００９６】
右コントローラ４は、左コントローラ３の各入力部と同様の各入力部（具体的には、各ボタン１１３、アナログスティック５２、加速度センサ１１４、および、角速度センサ１１５）を備える。これらの各入力部については、左コントローラ３の各入力部と同様の機能を有し、同様に動作する。
【００９７】
また、右コントローラ４は、振動子１１７およびコーデック１１６を備える。振動子１１７およびコーデック１１６は、左コントローラ３の振動子１０７およびコーデック１０６と同様に動作する。すなわち、通信制御部１１１は、本体装置２からの指令に従って、コーデック１１６を用いて振動子１１７を動作させる。
【００９８】
右コントローラ４は、電力供給部１１８を備える。電力供給部１１８は、左コントローラ３の電力供給部１０８と同様の機能を有し、同様に動作する。
【００９９】
図１０は、クレードル５の内部構成の一例を示すブロック図である。なお、図１０において、本体装置２に関する内部構成の詳細については、図８で示しているので省略している。
【０１００】
図１０に示すように、クレードル５は、変換部１３１およびモニタ用端子１３２を備える。変換部１３１は、本体端子７３およびモニタ用端子１３２と接続される。変換部１３１は、本体装置２から受信した画像（映像とも言える）および音声に関する信号の形式を、据置型モニタ６へ出力する形式へと変換する。ここで、本実施形態においては、本体装置２は、ディスプレイポート信号（すなわち、ＤｉｓｐｌａｙＰｏｒｔの規格に従った信号）として画像および音声の信号をクレードル５へ出力する。また、本実施形態においては、クレードル５と据置型モニタ６との間の通信は、ＨＤＭＩ（登録商標）の規格に基づく通信が用いられる。すなわち、モニタ用端子１３２は、ＨＤＭＩ端子であり、クレードル５と据置型モニタ６とがＨＤＭＩケーブルによって接続される。そして、変換部１３１は、本体装置２から本体端子７３を介して受信されるディスプレイポート信号（具体的には、映像および音声を表す信号）を、ＨＤＭＩ信号へ変換する。変換されたＨＤＭＩ信号は、モニタ用端子１３２を介して据置型モニタ６へ出力される。
【０１０１】
クレードル５は、電力制御部１３３および電源端子１３４を備える。電源端子１３４は、図示しない充電装置（例えば、ＡＣアダプタ等）を接続するための端子である。本実施形態においては、電源端子１３４にＡＣアダプタが接続されており、クレードル５には商用電源が供給されているものとする。電力制御部１３３は、クレードル５に対して本体装置２が装着された場合、本体端子７３を介して電源端子１３４からの電力を本体装置２へ供給する。これによって、本体装置２のバッテリ９８が充電される。
【０１０２】
また、クレードル５は、接続処理部１３６および拡張用端子１３７を備える。拡張用端子１３７は、他の装置を接続するための端子である。本実施形態においては、クレードル５は、拡張用端子１３７として、複数（より具体的には３つ）のＵＳＢ端子を備える。接続処理部１３６は、本体端子７３および各拡張用端子１３７に接続される。接続処理部１３６は、ＵＳＢハブとしての機能を有し、例えば、拡張用端子１３７に接続された装置と、本体端子７３に接続された本体装置２との間の通信を管理する（すなわち、ある装置からの信号を他の装置へ適宜分配して送信する）。上記のように、本実施形態においては、情報処理システム１は、クレードル５を介して他の装置との通信を行うことが可能である。なお、接続処理部１３６は、通信速度を変換したり、拡張用端子１３７に接続された装置に対する電力供給を行ったりすることが可能であってもよい。
【０１０３】
以上に説明したように、本実施形態における情報処理システム１については左コントローラ３および右コントローラ４が本体装置２から着脱可能である。また、クレードル５に左コントローラ３および右コントローラ４が本体装置２に装着された一体型装置や本体装置２単体を装着することによって据置型モニタ６に画像（および音声）を出力可能である。以下、左コントローラ３および右コントローラ４を本体装置２から取り外した状態で、クレードル５に本体装置２単体を装着することによって据置型モニタ６に画像（および音声）を出力する利用態様における情報処理システムを用いて説明する。
【０１０４】
上述のように、本実施形態においては、左コントローラ３および右コントローラ４を本体装置２から外した状態（「離脱状態」と呼ぶ）で情報処理システム１を利用することも可能である。離脱状態で情報処理システム１を利用して同じアプリケーション（例えば、ゲームアプリケーション）に対する操作を行う場合の態様としては、１人のユーザが左コントローラ３および右コントローラ４の両方を用いる態様が考えられる。なお、当該利用態様によって複数のユーザが同じアプリケーションを用いて操作する場合は、左コントローラ３および右コントローラ４の組を複数組用意して、それぞれのユーザが当該複数組のうちの１組を用いる態様が考えられる。
【０１０５】
図１１〜図１３は、離脱状態において、１人のユーザが左コントローラ３および右コントローラ４の組を把持して情報処理システム１を利用する様子の一例を示す図である。図１１〜図１３に示すように、離脱状態において、ユーザは、左コントローラ３を左手で把持し、右コントローラ４を右手で把持して操作を行いながら、据置型モニタ６に表示された画像を見ることができる。
【０１０６】
例えば、本実施例では、ユーザは、縦長の略板状である左コントローラ３の長手方向の下方向（図１に示す下方向（ｙ軸負方向））が鉛直方向になるとともに、本体装置２に装着された際に当該本体装置２と接する側面（スライダ４０が設けられている側面）が前方に向き、かつ、左コントローラ３の主面（アナログスティック３２等が設けられる面）が右に向くように左コントローラ３を左手で把持する。また、ユーザは、縦長の略板状である右コントローラ４の長手方向の下方向（図１に示す上下方向（ｙ軸負方向））が鉛直方向になるとともに、本体装置２に装着された際に当該本体装置２と接する側面（スライダ６２が設けられている側面）が前方に向き、かつ、右コントローラ４の主面（アナログスティック５２等が設けられる面）が左に向くように右コントローラ４を右手で把持する。このように左手で左コントローラ３を把持し右手で右コントローラ４を把持した状態（以下、当該方向に把持された左コントローラ３および右コントローラ４の姿勢を基本姿勢と記載することがある）から、各コントローラを上下左右前後に動かしたり、各コントローラを回転させたり、各コントローラを振り動かしたりすることによって、各コントローラの動きや姿勢に応じてゲームプレイが行われる。
【０１０７】
なお、左コントローラ３に生じる加速度や角速度の方向をわかりやすくするために、上記把持状態における前方向（丸みを帯びた側面から本体装置２と接する側面に向かう方向であり、図１に示すｘ軸負方向）をＸ軸正方向とし、上記把持状態における右方向（背面から主面に向かう方向であり、図１に示すｚ軸負方向）をＹ軸正方向とし、上記把持状態における上方向（長手方向の上に向かう方向であり、図１に示すｙ軸正方向）をＺ軸正方向とする。そして、左コントローラ３の加速度センサ１０４は、上記ＸＹＺ軸方向の加速度をそれぞれ検出可能であり、角速度センサ１０５は、上記ＸＹＺ軸方向周りの角速度をそれぞれ検出可能であるとする。また、右コントローラ４に生じる加速度や角速度の方向をわかりやすくするために、上記把持状態における前方向（丸みを帯びた側面から本体装置２と接する側面に向かう方向であり、図１に示すｘ軸正方向）をＸ軸正方向とし、上記把持状態における右方向（主面から背面に向かう方向であり、図１に示すｚ軸正方向）をＹ軸正方向とし、上記把持状態における上方向（長手方向の上に向かう方向であり、図１に示すｙ軸正方向）をＺ軸正方向とする。そして、右コントローラ４の加速度センサ１１４は、上記ＸＹＺ軸方向の加速度をそれぞれ検出可能であり、角速度センサ１１５は、上記ＸＹＺ軸方向周りの角速度をそれぞれ検出可能であるとする。
【０１０８】
次に、図１４〜図１７は、左コントローラ３および右コントローラ４を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図である。図１４に示すように、本ゲーム例では、プレイヤオブジェクトＰＯと敵オブジェクトＥＯとが対戦するゲーム（例えば、ボクシングゲーム）の画像が据置型モニタ６に表示される。そして、左コントローラ３および右コントローラ４を操作するユーザは、左コントローラ３本体および／または右コントローラ４本体を振り動かしたり、左コントローラ３本体および／または右コントローラ４本体の姿勢を変化させたりすることによって、プレイヤオブジェクトＰＯを操作することができる。例えば、左コントローラ３を振り動かすことによってプレイヤオブジェクトＰＯの左グラブ（左拳）を模した第１オブジェクトＧ１の動作を制御することができ、右コントローラ４を振り動かすことによってプレイヤオブジェクトＰＯの右グラブ（右拳）を模した第２オブジェクトＧ２の動作を制御することができる。具体的には、ユーザが左コントローラ３を把持している左手を用いて左パンチを繰り出すように振る操作を行った場合、敵オブジェクトＥＯが配置されている場所に向かってプレイヤオブジェクトＰＯの左グラブを模した第１オブジェクトＧ１が移動する。また、ユーザが右コントローラ４を把持している右手を用いて右パンチを繰り出すように振る操作を行った場合、敵オブジェクトＥＯが配置されている場所に向かってプレイヤオブジェクトＰＯの右グラブを模した第２オブジェクトＧ２が移動する。
【０１０９】
例えば、左コントローラ３および右コントローラ４の何れも動かしていない状態（図１４に示す状態）から、右コントローラ４を前方（右コントローラ４のＸ軸正方向）に押し出すように振り動かした場合、図１５に示すように右コントローラ４の動きに応じてプレイヤオブジェクトＰＯの第２オブジェクトＧ２が敵オブジェクトＥＯに向かってエフェクト画像Ｉｅ１が付与された状態で移動する。これによって、敵オブジェクトＥＯに対してプレイヤオブジェクトＰＯが右パンチを繰り出したようなゲーム画像が表示される。
【０１１０】
ここで、第１オブジェクトＧ１が移動開始する際の移動方向は、左コントローラ３を押し出すように振り動かした際の左コントローラ３の姿勢によって設定される。また、第２オブジェクトＧ２が移動開始する際の移動方向は、右コントローラ４を押し出すように動かした際の右コントローラ４の姿勢によって設定される。例えば、図１５に示したように、右コントローラ４がＸ軸正方向に移動した場合、当該移動における右コントローラ４のロール方向の姿勢に応じて第２オブジェクトＧ２の移動方向Ｄ１が設定される。一例として、本実施例では、上記右コントローラ４が移動している期間において、実空間において重力加速度が作用している方向を基準とした右コントローラ４のＹ軸方向の傾きを算出し、当該Ｙ軸方向の傾きに基づいて第２オブジェクトＧ２の移動方向Ｄ１を算出している。具体的には、右コントローラ４が上記基準姿勢に対して右方向にロール回転した姿勢であることを上記Ｙ軸方向の傾きが示す場合、仮想空間の右方向に向かって第２オブジェクトＧ２が移動する。また、右コントローラ４が上記基準姿勢に対して左方向にロール回転した姿勢であることを上記Ｙ軸方向の傾きが示す場合、仮想空間の左方向に向かって第２オブジェクトＧ２が移動する。そして、それぞれ右方向または左方向に移動方向がずれる角度については、上記Ｙ軸方向の傾き角度に応じてそれぞれ算出される。
【０１１１】
また、本ゲーム例では、仮想空間においてプレイヤオブジェクトＰＯと敵オブジェクトＥＯとの距離が相対的に遠い場合であってもパンチを繰り出すことが可能であり、プレイヤオブジェクトＰＯの腕が伸びることによって、第１オブジェクトＧ１および第２オブジェクトＧ２が相対的に長い距離を移動することができる。そして、第１オブジェクトＧ１または第２オブジェクトＧ２は、他のオブジェクト（例えば、敵オブジェクトＥＯ）と衝突するか所定の距離移動した後に移動を終了し、当該第１オブジェクトＧ１および第２オブジェクトＧ２がそれぞれ移動開始した移動開始位置（例えば、図１４に示すプレイヤオブジェクトＰＯの手元）まで戻る。第１オブジェクトＧ１および第２オブジェクトＧ２が移動開始位置まで戻ることによって、敵オブジェクトＥＯに向かう次の移動が可能となる。言い換えると、次のパンチを出すことができるようになる。したがって、上記移動開始位置から第１オブジェクトＧ１または第２オブジェクトＧ２が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなる。
【０１１２】
また、本ゲーム例では、仮想空間において第１オブジェクトＧ１および／または第２オブジェクトＧ２が移動する際、当該オブジェクトを操作するコントローラが振動する。例えば、左コントローラ３を押し出すように振り動かすことに応じて第１オブジェクトＧ１が移動する場合、第１オブジェクトＧ１が仮想空間を移動することに応じて左コントローラ３が振動する。また、右ントローラ４を押し出すように振り動かすことに応じて第２オブジェクトＧ２が移動する場合、第２オブジェクトＧ２が仮想空間を移動することに応じて右コントローラ４が振動する（図１５の状態）。具体的には、本体装置２は、左コントローラ３および／または右コントローラ４が押し出すように振り動かされた場合、仮想空間を移動する第１オブジェクトＧ１および／または第２オブジェクトＧ２の種類、移動速度、移動方向等に応じて往路振動データを生成して、左コントローラ３および／または右コントローラ４に送信する。また、本体装置２は、第１オブジェクトＧ１および／または第２オブジェクトＧ２が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ３および／または右コントローラ４に送信する。さらに、本体装置２は、第１オブジェクトＧ１および／または第２オブジェクトＧ２が上記移動開始位置へ戻る復路を移動する場合、復路を移動する第１オブジェクトＧ１および／または第２オブジェクトＧ２の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ３および／または右コントローラ４に送信する。これによって、各種振動データを受信した左コントローラ３および／または右コントローラ４は、当該振動データに基づいて振動する。
【０１１３】
また、本ゲーム例では、第１オブジェクトＧ１または第２オブジェクトＧ２の移動時間を利用して、第１オブジェクトＧ１または第２オブジェクトＧ２が移動中（典型的には、敵オブジェクトＥＯの方向へ移動している期間）であっても、左コントローラ３または右コントローラ４の姿勢や動きに応じて移動する軌道を変化させることができる。例えば、上述した第１オブジェクトＧ１または第２オブジェクトＧ２の移動開始時の左コントローラ３または右コントローラ４の姿勢から左コントローラ３または右コントローラ４がロール方向に回転した場合やヨー方向に回転した場合、当該回転に応じて第１オブジェクトＧ１または第２オブジェクトＧ２の軌道を変化させる。例えば、図１６に示した一例では、右コントローラ４がＸ軸正方向に押し出すように振り動かされた後、第２オブジェクトＧ２の移動中に右コントローラ４が左ロール方向に回転移動（図示θｘ）することに応じて、第２オブジェクトＧ２の移動方向がＤ２に変化している。また、第２オブジェクトＧ２の移動方向が変化する際、第２オブジェクトＧ２にエフェクト画像Ｉｅ２が付与された状態となる。
【０１１４】
一例として、本実施例では、第１オブジェクトＧ１または第２オブジェクトＧ２の移動開始後の左コントローラ３または右コントローラ４のＸ軸周りの回転速度（角速度）を上記ロール方向の回転として、当該Ｘ軸周りの回転速度に基づいて移動中の第１オブジェクトＧ１または第２オブジェクトＧ２の軌道を変化させる。具体的には、第１オブジェクトＧ１が移動中に左コントローラ３がＸ軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第１オブジェクトＧ１の軌道を変化させ、左コントローラ３がＸ軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第１オブジェクトＧ１の軌道を変化させる。また、第２オブジェクトＧ２が移動中に右コントローラ４がＸ軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第２オブジェクトＧ２の軌道を変化させ、右コントローラ４がＸ軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第２オブジェクトＧ２の軌道を変化させる。
【０１１５】
他の例として、本実施例では、第１オブジェクトＧ１または第２オブジェクトＧ２の移動開始後の実空間の重力方向を基準とする左コントローラ３または右コントローラ４の回転速度（角速度）を上記ヨー方向の回転として、当該重力方向周りの回転速度に基づいて移動中の第１オブジェクトＧ１または第２オブジェクトＧ２の軌道を変化させる。具体的には、第１オブジェクトＧ１が移動中に左コントローラ３が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第１オブジェクトＧ１の軌道を変化させ、左コントローラ３が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第１オブジェクトＧ１の軌道を変化させる。また、第２オブジェクトＧ２が移動中に右コントローラ４が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第２オブジェクトＧ２の軌道を変化させ、右コントローラ４が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第２オブジェクトＧ２の軌道を変化させる。
【０１１６】
上述したように第１オブジェクトＧ１および／または第２オブジェクトＧ２の軌道が変化した場合、左コントローラ３および／または右コントローラ４の振動も変化する。例えば、本体装置２は、第１オブジェクトＧ１および／または第２オブジェクトＧ２の往路軌道が変化した場合、左コントローラ３および／または右コントローラ４の動きや姿勢の変化（例えば、ロール方向やヨー方向の角速度）に応じて振動の振幅および／または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記往路振動データを一時的に変化させた後、再度往路振動データに戻す。これによって、一時的に変化する往路振動データを受信した左コントローラ３および／または右コントローラ４は、当該往路振動データに基づいて振動の振幅および／または周波数を変化させる。
【０１１７】
また、本ゲーム例では、左コントローラ３または右コントローラ４が振り動かされたか否かの判定を、左コントローラ３または右コントローラ４に生じた加速度の大きさを用いて行う。そして、第１オブジェクトＧ１が上記移動開始位置に配置されている状態（以下、第１移動開始可能状態と称する）において左コントローラ３が上記Ｘ軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトＥＯに向かって第１オブジェクトＧ１が移動を開始する。また、第２オブジェクトＧ２が上記移動開始位置に配置されている状態（以下、第２移動開始可能状態と称する）において右コントローラ４が上記Ｘ軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトＥＯに向かって第２オブジェクトＧ２が移動を開始する。しかしながら、本実施例では、上記第１移動開始可能状態でない場合であっても、左コントローラ３が上記Ｘ軸正方向に振り動かされたと判定されてから所定時間以内に上記第１移動開始可能状態になった場合は、当該左コントローラ３の振り操作に応じて上記移動開始位置から敵オブジェクトＥＯに向かって第１オブジェクトＧ１の移動を開始させることができる。また、上記第２移動開始可能状態でない場合であっても、右コントローラ４が上記Ｘ軸正方向に振り動かされたと判定されてから所定時間以内に上記第２移動開始可能状態になった場合は、当該右コントローラ４の振り操作に応じて上記移動開始位置から敵オブジェクトＥＯに向かって第２オブジェクトＧ２の移動を開始させることができる。このように、本実施例では、上記第１移動開始可能状態および／または上記第２移動開始可能状態でない場合であっても、左コントローラ３および／または右コントローラ４を振り動かすことによって第１オブジェクトＧ１および／または第２オブジェクトＧ２を移動開始させる指示を行うことができるため、操作指示可能な状態が断続的に生じるゲームであっても操作を容易にすることが可能となる。つまり、上述したように、上記ゲーム例では、移動開始位置から第１オブジェクトＧ１または第２オブジェクトＧ２が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなるため、上記第１移動開始可能状態や上記第２移動開始可能状態になるのを待ちきれずに左コントローラ３または右コントローラ４を振り動かす操作が先行してしまうことが考えられるが、このような先行操作が行われた場合であっても当該先行操作を無効にせずに救済してゲーム操作に生かすことが可能となる。
【０１１８】
また、本ゲーム例では、図１７に示すように、第１オブジェクトＧ１および第２オブジェクトＧ２を上記移動開始位置から同時に移動開始させることによって、所定のアクションが行われる。例えば、第１オブジェクトＧ１および第２オブジェクトＧ２の一方が移動開始した時点から所定期間以内に他方が移動開始する場合、第１オブジェクトＧ１および第２オブジェクトＧ２が組となった「両手パンチアクション」が開始される。ここで、「両手パンチアクション」は、仮想空間を移動する第１オブジェクトＧ１および第２オブジェクトＧ２の間に衝突領域Ａが形成された様子がゲーム画像で表現され、当該衝突領域Ａが形成された状態で第１オブジェクトＧ１および第２オブジェクトＧ２が敵オブジェクトＥＯに向かって移動する。そして、敵オブジェクトＥＯには移動中の第１オブジェクトＧ１または第２オブジェクトＧ２や衝突領域Ａが衝突した場合に、第１オブジェクトＧ１または第２オブジェクトＧ２が単独で衝突する場合より大きなダメージが敵オブジェクトＥＯに与えられる所定のアクションが行われる。一例として、「両手パンチアクション」では、敵オブジェクトＥＯと衝突した場合に当該敵オブジェクトＥＯを投げ飛ばすアクションが行われたり、当該敵オブジェクトＥＯを動けなくするようなアクションが行われたりしてもよい。なお、「両手パンチアクション」実行中であっても、上述した左コントローラ３および／または右コントローラ４の姿勢や動きに応じて第１オブジェクトＧ１および／または第２オブジェクトＧ２が移動する軌道を変化させることができる。したがって、第１オブジェクトＧ１および／または第２オブジェクトＧ２が移動する軌道を変化させることによって、衝突領域Ａの範囲も変化させることができるため、敵オブジェクトＥＯに対してより戦略的な攻撃も可能となる。
【０１１９】
このようなアクションが行われた状態で第１オブジェクトＧ１および第２オブジェクトＧ２が移動する場合であっても、当該オブジェクトの移動に応じて左コントローラ３および／または右コントローラ４が振動する。具体的には、本体装置２は、第１オブジェクトＧ１および第２オブジェクトＧ２が両手パンチアクションによって移動する場合、仮想空間を移動する第１オブジェクトＧ１および第２オブジェクトＧ２の種類、移動速度、移動方向等に応じてアクション往路振動データを生成して、左コントローラ３および右コントローラ４に送信する。また、本体装置２は、衝突領域Ａ、第１オブジェクトＧ１、または第２オブジェクトＧ２が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ３および右コントローラ４に送信する。さらに、本体装置２は、第１オブジェクトＧ１および第２オブジェクトＧ２が上記移動開始位置へ戻る復路を移動する場合、復路を移動する第１オブジェクトＧ１および第２オブジェクトＧ２の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ３および右コントローラ４に送信する。これによって、両手パンチアクションが行われる場合であっても、各種振動データを受信した左コントローラ３および右コントローラ４は、当該振動データに基づいて振動する。
【０１２０】
また、両手パンチアクション実行中に第１オブジェクトＧ１および第２オブジェクトＧ２の軌道が変化した場合、左コントローラ３および右コントローラ４の振動も変化する。例えば、本体装置２は、両手パンチアクション実行中に第１オブジェクトＧ１および第２オブジェクトＧ２の往路軌道が変化した場合、左コントローラ３および／または右コントローラ４の動きや姿勢の変化に応じて振動の振幅および／または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記アクション往路振動データを一時的に変化させた後、再度アクション往路振動データに戻す。これによって、一時的に変化するアクション往路振動データを受信した左コントローラ３および右コントローラ４は、当該アクション往路振動データに基づいて振動の振幅および／または周波数を変化させる。
【０１２１】
また、本ゲーム例では、左コントローラ３および右コントローラ４の両方の動きや姿勢に応じて、仮想空間内でプレイヤオブジェクトＰＯを移動させることができる。例えば、左コントローラ３および右コントローラ４の両方が実空間のピッチ方向に回転した場合やロール方向に回転した場合、当該回転した傾きに応じてプレイヤオブジェクトＰＯを移動させる。具体的には、実空間の重力方向を基準とする左コントローラ３のＸ軸方向およびＹ軸方向と右コントローラ４のＸ軸方向およびＹ軸方向の傾きをそれぞれ算出する。そして、上記傾きに基づいて、左コントローラ３および右コントローラ４の両方が前方に傾く姿勢になっていると判定された場合、左コントローラ３および右コントローラ４の両方が当該前方へ傾いている角度（例えば、当該角度の平均値）に応じた移動量でプレイヤオブジェクトＰＯを仮想空間の前方へ移動させる。また、上記傾きに基づいて、左コントローラ３および右コントローラ４の両方が後方に傾く姿勢になっていると判定された場合、左コントローラ３および右コントローラ４の両方が当該後方へ傾いている角度（例えば、当該角度の平均値）に応じた移動量でプレイヤオブジェクトＰＯを仮想空間の後方へ移動させる。また、上記傾きに基づいて、左コントローラ３および右コントローラ４の両方が左に傾く姿勢になっていると判定された場合、左コントローラ３および右コントローラ４の両方が当該左へ傾いている角度（例えば、当該角度の平均値）に応じた移動量でプレイヤオブジェクトＰＯを仮想空間の左へ移動させる。また、上記傾きに基づいて、左コントローラ３および右コントローラ４の両方が右に傾く姿勢になっていると判定された場合、左コントローラ３および右コントローラ４の両方が当該右へ傾いている角度（例えば、当該角度の平均値）に応じた移動量でプレイヤオブジェクトＰＯを仮想空間の右へ移動させる。
【０１２２】
また、本実施例では、左コントローラ３と右コントローラ４とを接合して１つの操作装置として機能させるアタッチメント（付属機器）を用いて上記ゲームをプレイすることも可能である。
【０１２３】
図１８は、左コントローラ３および右コントローラ４を装着可能な付属機器の一例を示す図である。図１８に示すように、付属機器の一例である拡張グリップ２１０は、ユーザがそれを用いて操作を行うための付属機器である。拡張グリップ２１０は、左コントローラ３を装着可能であり、また、右コントローラ４を装着可能である。したがって、拡張グリップ２１０によって、ユーザは、本体装置２から外した２つのコントローラ３および４を一体として把持して操作を行うことができる。
【０１２４】
拡張グリップ２１０は、左コントローラ３および右コントローラ４をそれぞれ装着するための機構として、本体装置２が有する機構（具体的には、左レール部材１５および右レール部材１９等）と同様の機構を有している。したがって、本体装置２に装着する場合と同様にして、左コントローラ３および右コントローラ４を拡張グリップ２１０に装着することができる。具体的には、拡張グリップ２１０は、所定幅の本体部を挟んで左右両側に左コントローラ３および右コントローラ４をそれぞれ装着するための機構が設けられており、左コントローラ３および右コントローラ４を装着するレール部材がそれぞれ平行に設けられている。これによって、左コントローラ３および右コントローラ４は、それぞれのｘｙｚ軸方向が平行となるように拡張グリップ２１０に取り付けられることになる。そして、ユーザは、拡張グリップ２１０に装着されて一体となった左コントローラ３および右コントローラ４を両手で把持する。これによって、ユーザは、本体装置２から外した２つの左コントローラ３および右コントローラ４を一体として把持することができる。
【０１２５】
このような拡張グリップ２１０によって一体となった左コントローラ３および右コントローラ４を用いて上記ゲームをプレイする場合、左コントローラ３および右コントローラ４に設けられた各操作ボタンやスティックが用いられて操作される。例えば、右コントローラ４のＢボタン５４が押下操作された場合、プレイヤオブジェクトＰＯが左パンチを繰り出して第１オブジェクトＧ１が移動開始する。右コントローラ４のＡボタン５３が押下操作された場合、プレイヤオブジェクトＰＯが右パンチを繰り出して第２オブジェクトＧ２が移動開始する。仮想ゲーム世界において第１オブジェクトＧ１および／または第２オブジェクトＧ２が移動中に左コントローラ３のアナログスティック３２が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の第１オブジェクトＧ１および／または第２オブジェクトＧ２の移動方向が変化する。第１オブジェクトＧ１および第２オブジェクトＧ２が何れも移動開始位置に配置されている場合に左コントローラ３のアナログスティック３２が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界においてプレイヤオブジェクトＰＯが移動する。また、第１オブジェクトＧ１および第２オブジェクトＧ２が何れも移動開始位置に配置されている場合に左コントローラ３のアナログスティック３２が押し込まれる操作が行われた場合、仮想ゲーム世界においてプレイヤオブジェクトＰＯが敵オブジェクトＥＯからの攻撃を防御する。右コントローラ４のＸボタン５５が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトＰＯがジャンプする動作を行う。そして、右コントローラ４のＹボタン５６が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトＰＯがダッシュ（高速移動）する。
【０１２６】
拡張グリップ２１０を用いてゲームプレイする場合であっても、仮想ゲーム世界における第１オブジェクトＧ１および／または第２オブジェクトＧ２の状況に応じて、拡張グリップ２１０に装着された左コントローラ３および／または右コントローラ４に振動が与えられる。一例として、本体装置２は、拡張グリップ２１０を用いてゲームプレイする場合も、第１オブジェクトＧ１が仮想空間を移動することに応じて、第１オブジェクトＧ１の種類、移動速度、移動方向等に応じて往路振動データを生成して、左コントローラ３に送信する。また、本体装置２は、第２オブジェクトＧ２が仮想空間を移動することに応じて、第２オブジェクトＧ２の種類、移動速度、移動方向等に応じて往路振動データを生成して、右コントローラ４に送信する。また、本体装置２は、拡張グリップ２１０を用いてゲームプレイする場合も、第１オブジェクトＧ１および／または第２オブジェクトＧ２が他のオブジェクトと衝突した場合は、当該衝突に応じた振動を示す振動データを生成して、左コントローラ３および／または右コントローラ４に送信する。さらに、本体装置２は、拡張グリップ２１０を用いてゲームプレイする場合も、第１オブジェクトＧ１および／または第２オブジェクトＧ２が上記移動開始位置へ戻る復路を移動する場合、復路を移動する第１オブジェクトＧ１および／または第２オブジェクトＧ２の種類、移動速度、移動方向等に応じて復路振動データを生成して、左コントローラ３および／または右コントローラ４に送信する。これによって、拡張グリップ２１０を用いてゲームプレイする場合も、各種振動データを受信した左コントローラ３および／または右コントローラ４は、当該振動データに基づいて振動する。
【０１２７】
また、拡張グリップ２１０を用いてゲームプレイする場合であっても、アナログスティック３２が傾倒操作されることによって第１オブジェクトＧ１および／または第２オブジェクトＧ２の軌道が変化した場合、左コントローラ３および／または右コントローラ４の振動も変化する。例えば、本体装置２は、第１オブジェクトＧ１および／または第２オブジェクトＧ２の往路軌道が変化した場合、アナログスティック３２に対する傾倒操作角度（アナログ入力値）に応じて振動の振幅および／または周波数の変化パラメータを算出し、当該変化パラメータを用いて上記往路振動データを一時的に変化させた後、再度往路振動データに戻す。これによって、一時的に変化する往路振動データを受信した左コントローラ３および／または右コントローラ４は、当該往路振動データに基づいて振動の振幅および／または周波数を変化させる。
【０１２８】
なお、左コントローラ３および右コントローラ４を装着可能な付属機器を用いて操作する場合、左コントローラ３のアナログスティック３２だけでなく、右コントローラ４のアナログスティック５２を用いた操作を可能にしてもよい。この場合、一対のアナログスティックを用いた操作が可能となるため、アナログスティック３２によって第１オブジェクトＧ１の軌道を変化させ、アナログスティック５２によって第２オブジェクトＧ２の軌道を変化させるような、独立した方向指示を可能としてもよい。
【０１２９】
なお、図１４〜図１８では、据置型モニタ６を用いて１人プレイ（例えば、敵オブジェクトＥＯがＣＰＵ８１によって自動制御される）するゲーム例を用いたが、複数のユーザによってプレイしてもよい。例えば、２人のユーザによってゲームプレイされる場合、ユーザがそれぞれ左コントローラ３および右コントローラ４の組を把持して、別のプレイヤオブジェクトを操作する。そして、据置型モニタ６の表示領域を２つに分割して、それぞれの分割表示領域に各ユーザ用の画像（ユーザが操作するプレイヤオブジェクトから他のユーザが操作するプレイヤオブジェクトを見た画像）を表示する。このような操作環境において、ユーザがそれぞれ相手プレイヤオブジェクトにパンチを繰り出すような操作を行うことによって、それぞれのユーザが相手プレイヤオブジェクトと対戦するゲームが可能となる。
【０１３０】
複数のユーザによってゲームプレイされる場合、他の装置（例えば、他の情報処理システム１）との間で通信することによって、当該ゲームプレイに必要なゲームデータを送受信してもよい。例えば、他の装置との間で通信する場合、上述したネットワーク通信部８２を介して、インターネット（広域ネットワーク）に接続された他の装置との間でデータを送受信してもよいし、閉ざされたローカルネットワークエリア内に配置された他の装置との間で直接通信する、いわゆる「ローカル通信」を用いてデータを送受信してもよい。
【０１３１】
次に、図１９〜図２６を参照して、本実施形態において情報処理システム１で実行される具体的な処理の一例について説明する。図１９は、本実施形態において本体装置２のＤＲＡＭ８５に設定されるデータ領域の一例を示す図である。なお、ＤＲＡＭ８５には、図１９に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
【０１３２】
ＤＲＡＭ８５のプログラム記憶領域には、情報処理システム１で実行される各種プログラムＰａが記憶される。本実施形態においては、各種プログラムＰａは、上述した左コントローラ３および右コントローラ４との間で無線通信するための通信プログラムや、左コントローラ３および／または右コントローラ４から取得したデータに基づいた情報処理（例えば、ゲーム処理）を行うためのアプリケーションプログラム、クレードル５に対する本体装置２の着脱に応じて画像を表示する表示装置を切り替えるプログラム等が記憶される。なお、各種プログラムＰａは、フラッシュメモリ８４に予め記憶されていてもよいし、情報処理システム１に着脱可能な記憶媒体（例えば、第１スロット２３に装着された第１の種類の記憶媒体、第２スロット２４に装着された第２の種類の記憶媒体）から取得されてＤＲＡＭ８５に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてＤＲＡＭ８５に記憶されてもよい。ＣＰＵ８１は、ＤＲＡＭ８５に記憶された各種プログラムＰａを実行する。
【０１３３】
また、ＤＲＡＭ８５のデータ記憶領域には、情報処理システム１において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、ＤＲＡＭ８５には、操作データＤａ、姿勢データＤｂ、角速度データＤｃ、加速度データＤｄ、閾値データＤｅ、カーブ値データＤｆ、回転速度データＤｇ、振りフラグデータＤｈ、移動フラグデータＤｉ、アクションフラグデータＤｊ、戻りフラグデータＤｋ、移動開始可能フラグデータＤｌ、プレイヤオブジェクト位置データＤｍ、衝突領域データＤｎ、敵オブジェクト位置データＤｏ、左コントローラ振動データＤｐ、右コントローラ振動データＤｑ、および画像データＤｒ等が記憶される。
【０１３４】
操作データＤａは、左コントローラ３および右コントローラ４からそれぞれ適宜取得した操作データである。上述したように、左コントローラ３および右コントローラ４からそれぞれ送信される操作データには、各入力部（具体的には、各ボタン、アナログスティック、各センサ）からの入力に関する情報（具体的には、操作に関する情報、または、センサによる検出結果）が含まれている。本実施形態では、無線通信によって左コントローラ３および右コントローラ４からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データＤａが適宜更新される。なお、操作データＤａの更新周期は、後述する情報処理システム１で実行される処理の周期である１フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
【０１３５】
姿勢データＤｂは、実空間における重力加速度の方向を基準とした左コントローラ３および右コントローラ４それぞれの姿勢を示すデータである。例えば、姿勢データＤｂは、左コントローラ３および右コントローラ４それぞれに作用している重力加速度の方向を示すデータや、当該重力加速度方向に対するＸＹＺ軸方向を示すデータ等を含んでいる。
【０１３６】
角速度データＤｃは、左コントローラ３および右コントローラ４それぞれに生じている角速度を示すデータである。例えば、角速度データＤｃは、左コントローラ３および右コントローラ４それぞれに生じているＸＹＺ軸周りの角速度を示すデータ等を含んでいる。
【０１３７】
加速度データＤｄは、左コントローラ３および右コントローラ４それぞれに生じている加速度を示すデータである。例えば、加速度データＤｄは、左コントローラ３および右コントローラ４それぞれに生じている重力加速度を除いて、ＸＹＺ軸方向に生じている加速度を示すデータ等を含んでいる。
【０１３８】
閾値データＤｅは、左コントローラ３および右コントローラ４に対してそれぞれ行われた振り動作を判定するための閾値を示すデータである。カーブ値データＤｆは、第１オブジェクトＧ１および第２オブジェクトＧ２それぞれの移動方向や軌道を算出するためのカーブ値Ｃを示すデータである。回転速度データＤｇは、第１オブジェクトＧ１または第２オブジェクトＧ２が移動中における左コントローラ３および右コントローラ４の動き（回転速度Ｖ）を示すデータである。
【０１３９】
振りフラグデータＤｈは、左コントローラ３および右コントローラ４それぞれが振り動かされたと判定された際にオンに設定される振りフラグを示すデータである。移動フラグデータＤｉは、第１オブジェクトＧ１および第２オブジェクトＧ２それぞれが仮想空間内を移動中である場合にオンに設定される移動フラグを示すデータである。アクションフラグデータＤｊは、第１オブジェクトＧ１および第２オブジェクトＧ２が組となったアクションが行われている場合にオンに設定されるアクションフラグを示すデータである。戻りフラグデータＤｋは、第１オブジェクトＧ１および第２オブジェクトＧ２それぞれが移動開始位置に戻る仮想空間内の復路を移動している場合にオンに設定される戻りフラグを示すデータである。移動開始可能フラグデータＤｌは、第１オブジェクトＧ１が第１移動開始可能状態となった場合および第２オブジェクトＧ２が第２移動開始可能状態となった場合にそれぞれオンに設定される移動開始可能フラグを示すデータである。
【０１４０】
プレイヤオブジェクト位置データＤｍは、第１オブジェクトＧ１、第２オブジェクトＧ２、およびプレイヤオブジェクトＰＯの仮想空間における位置および方向（移動方向）をそれぞれ示すデータである。衝突領域データＤｎは、衝突領域Ａの仮想空間における位置、形状、および範囲を示すデータである。敵オブジェクト位置データＤｏは、敵オブジェクトＥＯの仮想空間における位置および方向を示すデータや当該敵オブジェクトＥＯから放たれるオブジェクト（例えば、左グラブ（左拳）および右グラブ（右拳）を模したオブジェクト）の仮想空間における位置および方向を示すデータである。
【０１４１】
左コントローラ振動データＤｐは、左コントローラ３を振動させるための振動を示すデータである。右コントローラ振動データＤｑは、右コントローラ４を振動させるための振動を示すデータである。
【０１４２】
画像データＤｒは、ゲームの際に本体装置２のディスプレイ１２や据置型モニタ６の表示画面に画像（例えば、仮想オブジェクトの画像、フィールド画像、背景画像）を表示するためのデータである。
【０１４３】
次に、本実施形態における情報処理（ゲーム処理）の詳細な一例を説明する。図２０は、情報処理システム１で実行されるゲーム処理の一例を示すフローチャートである。図２１〜図２２は、図２０におけるステップＳ１４４およびステップＳ１４５において行われるコントローラ振り認識処理の詳細の一例を示すサブルーチンである。図２３〜図２５は、図２０におけるステップＳ１４６およびステップＳ１４７において行われるオブジェクト軌道変化処理の詳細の一例を示すサブルーチンである。図２６は、図２０におけるステップＳ１４８において行われるプレイヤオブジェクト移動処理の詳細の一例を示すサブルーチンである。本実施形態においては、図２０〜図２６に示す一連の処理は、ＣＰＵ８１が各種プログラムＰａに含まれる通信プログラムや所定のアプリケーションプログラム（ゲームプログラム）を実行することによって行われる。また、図２０〜図２６に示すゲーム処理が開始されるタイミングは任意である。
【０１４４】
なお、図２０〜図２６に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて（または代えて）別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をＣＰＵ８１が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、ＣＰＵ８１以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置２において実行される処理の一部は、本体装置２と通信可能な他の情報処理装置（例えば、本体装置２とネットワークを介して通信可能なサーバ）によって実行されてもよい。すなわち、図２０〜図２６に示す各処理は、本体装置２を含む複数の情報処理装置が協働することによって実行されてもよい。
【０１４５】
図２０において、ＣＰＵ８１は、ゲーム処理における初期設定を行い（ステップＳ１４１）、次のステップに処理を進める。例えば、上記初期設定では、ＣＰＵ８１は、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定では、ＣＰＵ８１は、ゲームプレイを行うためのゲームフィールドを設定し、当該ゲームフィールド上のプレイヤオブジェクトＰＯや敵オブジェクトＥＯの初期位置を設定してプレイヤオブジェクト位置データＤｍおよび敵オブジェクト位置データＤｏを更新する。また、ＣＰＵ８１は、第１オブジェクトＧ１および第２オブジェクトＧ２の移動方向をデフォルト値（例えば、正面方向）に初期設定してプレイヤオブジェクト位置データＤｍを更新する。また、ＣＰＵ８１は、移動開始可能フラグデータＤｌが示す移動開始可能フラグをオンに初期設定する。
【０１４６】
次に、ＣＰＵ８１は、左コントローラ３および右コントローラ４から操作データを取得して操作データＤａを更新し（ステップＳ１４２）、次のステップに処理を進める。
【０１４７】
次に、ＣＰＵ８１は、左コントローラ３および右コントローラ４それぞれの姿勢、角速度、加速度を算出し（ステップＳ１４３）、次のステップに処理を進める。例えば、ＣＰＵ８１は、左コントローラ３および右コントローラ４それぞれに生じている加速度を示すデータを操作データＤａから取得し、左コントローラ３および右コントローラ４それぞれに作用している重力加速度の方向を算出して、当該方向を示すデータを用いて姿勢データＤｂを更新する。重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ３および右コントローラ４それぞれに平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。そして、ＣＰＵ８１は、左コントローラ３に対して算出された重力加速度の方向を基準とした左コントローラ３のＸＹＺ軸方向を左コントローラ３の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データＤｂを更新する。また、ＣＰＵ８１は、右コントローラ４に対して算出された重力加速度の方向を基準とした右コントローラ４のＸＹＺ軸方向を右コントローラ４の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データＤｂを更新する。また、ＣＰＵ８１は、左コントローラ３および右コントローラ４それぞれに生じている角速度を示すデータを操作データＤａから取得し、左コントローラ３および右コントローラ４それぞれのＸＹＺ軸周りの角速度を算出して、当該角速度を示すデータを用いて角速度データＤｃを更新する。さらに、ＣＰＵ８１は、左コントローラ３および右コントローラ４それぞれに生じている加速度を示すデータを操作データＤａから取得し、左コントローラ３および右コントローラ４それぞれに生じているＸＹＺ軸方向の加速度から上記重力加速度成分を除去して、当該除去後の加速度を示すデータを用いて加速度データＤｄを更新する。
【０１４８】
なお、左コントローラ３や右コントローラ４の姿勢については、重力加速度を基準としたＸＹＺ軸方向が算出された以降は、ＸＹＺ各軸周りの角速度のみに応じて更新してもよい。しかしながら、左コントローラ３や右コントローラ４の姿勢と重力加速度の方向との関係が誤差の累積によってずれていくことを防止するために、所定周期毎に重力加速度の方向に対するＸＹＺ軸方向を算出して左コントローラ３や右コントローラ４の姿勢を修正してもよい。
【０１４９】
次に、ＣＰＵ８１は、左コントローラ振り認識処理を行い（ステップＳ１４４）、次のステップに処理を進める。以下、図２１〜図２２を参照して、上記ステップＳ１４４において行う左コントローラ振り認識処理について説明する。
【０１５０】
図２１において、ＣＰＵ８１は、左コントローラ３の処理に対して設定されている振りフラグをオフに設定して振りフラグデータＤｈを更新し、次のステップに処理を進める。
【０１５１】
次に、ＣＰＵ８１は、左コントローラ３に対する振り判定を除外するか否かを判定する（ステップＳ１６２）。例えば、ＣＰＵ８１は、左コントローラ３が振り戻されている状態である場合、振り判定を除外する。そして、ＣＰＵ８１は、左コントローラ３の振り判定を除外する場合、ステップＳ１６３に処理を進める。一方、ＣＰＵ８１は、左コントローラ３が振り判定を行う場合、ステップＳ１６４に処理を進める。
【０１５２】
左コントローラ３が振り戻されている状態であると判定する方法の第１の例として、ＣＰＵ８１は、姿勢データＤｂを参照して左コントローラ３のＹ軸周りの角速度を取得し、左コントローラ３が手前側への回転（例えば、Ｚ軸正方向が手前側に向く回転）をしている場合、上記ステップＳ１６２において肯定判定する。左コントローラ３が振り戻されている状態であると判定する方法の第２の例として、ＣＰＵ８１は、姿勢データＤｂを参照して左コントローラ３の姿勢を取得し、当該左コントローラ３が重力加速度の方向に対して後傾している姿勢（例えば、左コントローラ３のＸ軸正方向が実空間に対して水平方向より上を向いている姿勢）となっている場合、ＣＰＵ８１は、上記ステップＳ１６２において肯定判定する。左コントローラ３が振り戻されている状態であると判定する方法の第３の例として、ＣＰＵ８１は、加速度データＤｄを参照して左コントローラ３に生じている加速度を取得し、当該左コントローラ３がプレイヤへの方向に移動している（例えば、左コントローラ３に生じている加速度に左コントローラ３のＸ軸負方向成分が含まれている）場合、ＣＰＵ８１は、上記ステップＳ１６２において肯定判定する。
【０１５３】
ステップＳ１６３において、ＣＰＵ８１は、現時点において左コントローラ３に生じている加速度の大きさが左コントローラ３の振り判定をするための閾値より大きい場合、現時点において左コントローラ３に生じている加速度の大きさを当該閾値として設定して閾値データＤｅを更新し、ステップＳ１６４に処理を進める。ここで、後述により明らかとなるが、本実施例では、左コントローラ３に生じている加速度のうち、Ｙ軸方向成分を除いた加速度（以下、ＸＺ加速度と記載する）の大きさが閾値を越えた場合に、左コントローラ３が振り動かされたと判定している。上記ステップＳ１６３では、現時点において左コントローラ３に生じている加速度の大きさ（すなわち、現時点において左コントローラ３に生じている加速度からＹ軸方向成分の加速度を除いた大きさ）が後述する所定値より大きい場合に、当該加速度の大きさを上記振り判定で用いる閾値として設定することによって、上記振り判定において否定判定されることになる。つまり、上記ステップＳ１６３は、左コントローラ３が振り戻されている状態となっている場合に実行される処理であり、左コントローラ３がパンチを繰り出す動作の前後で振り戻されているような場合に左コントローラ３がパンチを繰り出すように振られていると誤判定することを防止することができる。
【０１５４】
ステップＳ１６４において、ＣＰＵ８１は、左コントローラ３に生じているＸＺ加速度の大きさが上記閾値より大きいか否かを判定する。そして、ＣＰＵ８１は、左コントローラ３に生じているＸＺ加速度の大きさが上記閾値より大きい場合、ステップＳ１６５に処理を進める。一方、ＣＰＵ８１は、左コントローラ３に生じているＸＺ加速度の大きさが上記閾値以下である場合、ステップＳ１６８に処理を進める。ここで、本実施例では、左コントローラ３がパンチを繰り出すように、すなわち左コントローラ３がＸ軸正方向へ移動するように振り動かされたか否かを判定するために、左コントローラ３に生じている加速度のうち、Ｙ軸方向成分を除いたＸＺ加速度の大きさと所定値（上記ステップＳ１６３や後述するステップＳ１６７またはステップＳ１６８において設定される閾値）とが比較される。したがって、上記ステップＳ１６４においては、ＣＰＵ８１は、加速度データＤｄを参照して左コントローラ３のＸ軸方向およびＺ軸方向それぞれに生じている加速度を取得し、当該加速度を用いて左コントローラ３に生じているＸＺ加速度の大きさを算出する。そして、左コントローラ３が振り戻されている状態ではない場合、ＸＺ加速度の大きさが所定値または当該所定値に近づいた閾値を越えていれば、左コントローラ３がパンチを繰り出すように振られたと判定する。
【０１５５】
ステップＳ１６５において、ＣＰＵ８１は、一時変数Ｂが０であるか否かを判定する。そして、ＣＰＵ８１は、一時変数Ｂが０である場合、ステップＳ１６６に処理を進める。一方、ＣＰＵ８１は、一時変数Ｂが０でない場合、ステップＳ１６７に処理を進める。
【０１５６】
ステップＳ１６６において、ＣＰＵ８１は、左コントローラ３の処理に対して設定されている振りフラグをオンに設定して振りフラグデータＤｈを更新し、一時変数Ｂとして所定フレーム数を設定して、ステップＳ１６７に処理を進める。このように、左コントローラ３の処理に対して設定されている振りフラグは、左コントローラ３がパンチを繰り出すように振られたと判定され、かつ一時変数Ｂが０である場合にオンに設定される。
【０１５７】
ここで、上記ステップＳ１６６において、一時変数Ｂとして設定する所定フレーム数は、左コントローラ３がパンチを繰り出すように振られたと判定された直後に次の振り判定を除外する期間（振りフラグをオンに設定できない期間）を一時的に設定するものであり、本実施例では一例として１２フレームに設定する。例えば、左コントローラ３が振り動かされていると判定された後であっても、左コントローラ３に生じている加速度の上昇が継続することがあり得る。このような場合、上記ステップＳ１６４における振り判定では肯定判定が連続することになるが、このような肯定判定を全て左コントローラ３がパンチを繰り出すように振られたと見なすと意図しているパンチの判定ができなくなる。したがって、本実施例では、左コントローラ３がパンチを繰り出すように振られたと判定された後の所定期間（例えば、１２フレーム）は、当該判定されることを除外している。なお、他の例として、左コントローラ３がパンチを繰り出すように振られたと判定されて振りフラグがオンに設定されてから、左コントローラ３に生じている加速度の上昇（具体的には、ＸＺ加速度の上昇）が継続している期間を、振りフラグが再度オンに設定できない期間として設定してもよい。
【０１５８】
ステップＳ１６７において、ＣＰＵ８１は、左コントローラ３の振り判定をするための閾値として、現時点において左コントローラ３に生じている加速度の大きさを設定して閾値データＤｅを更新し、ステップＳ１６９に処理を進める。
【０１５９】
一方、上記ステップＳ１６４において左コントローラ３に生じているＸＺ加速度の大きさが上記閾値以下であると判定された場合、ＣＰＵ８１は、左コントローラ３の振り判定をするための閾値を予め定められた所定値に近づけて閾値データＤｅを更新し、ステップＳ１６９に処理を進める。一例として、ＣＰＵ８１は、閾値データＤｅが示す閾値を所定量だけ上記所定値に近づけて新たな閾値を設定し、当該閾値を用いて閾値データＤｅを更新する。他の例として、ＣＰＵ８１は、閾値データＤｅが示す閾値を所定割合だけ上記所定値に近づけて新たな閾値を設定し、当該閾値を用いて閾値データＤｅを更新する。このように左コントローラ３の振り判定をするための閾値を予め定められた所定値に近づけることによって、上記ステップＳ１６３やステップＳ１６７が実行されることによって上記閾値が上昇したとしても、所定時間経過後には意図している所定値を用いてコントローラの振り判定を行うことができる。
【０１６０】
ステップＳ１６９において、ＣＰＵ８１は、一時変数Ｂが０より大きいか否かを判定する。そして、ＣＰＵ８１は、一時変数Ｂが０より大きい場合、ステップＳ１７０に処理を進める。一方、ＣＰＵ８１は、一時変数Ｂが０である場合、ステップＳ１７１（図２２参照）に処理を進める。
【０１６１】
ステップＳ１７０において、ＣＰＵ８１は、一時変数Ｂから１減算して新たな一時変数Ｂを設定し、ステップＳ１７１（図２２参照）に処理を進める。
【０１６２】
図２２に進み、ステップＳ１７１において、ＣＰＵ８１は、振りフラグデータＤｈを参照して左コントローラ３の処理に対して設定されている振りフラグがオンに設定されているか否かを判定する。そして、ＣＰＵ８１は、左コントローラ３の処理に対して設定されている振りフラグがオンに設定されている場合、ステップＳ１７２に処理を進める。一方、ＣＰＵ８１は、左コントローラ３の処理に対して設定されている振りフラグがオフに設定されている場合、ステップＳ１７３に処理を進める。
【０１６３】
ステップＳ１７２において、ＣＰＵ８１は、左コントローラ３がパンチを繰り出すように振られたと判定された後の処理フレーム数をカウントするための一時変数Ｓとして所定フレーム数を設定し、ステップＳ１７５に処理を進める。ここで、一時変数Ｓとして設定する所定フレーム数は、左コントローラ３がパンチを繰り出すように振られたと判定されてから所定時間以内に第１移動開始可能状態になった場合に第１オブジェクトＧ１の移動を開始するための処理を行うための当該所定時間に相当するパラメータであり、本実施例では一例として１５フレームに設定する。したがって、上記第１移動開始可能状態でない場合であっても、左コントローラ３がパンチを繰り出すように振られたと判定されてから１５フレーム以内に上記第１移動開始可能状態になった場合は、第１オブジェクトＧ１の移動を開始するための処理が行われることになる。
【０１６４】
一方、上記ステップＳ１７１において、振りフラグがオフに設定されていると判定された場合、ＣＰＵ８１は、一時変数Ｓが０より大きいか否かを判定する。そして、ＣＰＵ８１は、一時変数Ｓが０より大きい場合、ステップＳ１７４に処理を進める。一方、ＣＰＵ８１は、一時変数Ｓが０である場合、ステップＳ１７５に処理を進める。
【０１６５】
ステップＳ１７４において、ＣＰＵ８１は、一時変数Ｓから１減算して新たな一時変数Ｓを設定し、ステップＳ１７５に処理を進める。
【０１６６】
ステップＳ１７５において、ＣＰＵ８１は、一時変数Ｓが０より大きいか否かを判定する。そして、ＣＰＵ８１は、一時変数Ｓが０より大きい場合、ステップＳ１７６に処理を進める。一方、ＣＰＵ８１は、一時変数Ｓが０である場合、当該サブルーチンによる処理を終了する。
【０１６７】
ステップＳ１７６において、ＣＰＵ８１は、移動開始可能フラグデータＤｌを参照して第１オブジェクトＧ１の処理に対して設定されている移動開始可能フラグがオンに設定されているか否かを判定する。そして、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動開始可能フラグがオンに設定されている場合、ステップＳ１７７に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動開始可能フラグがオフに設定されている場合、当該サブルーチンを用いた処理を終了する。
【０１６８】
ステップＳ１７７において、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動フラグをオンに設定して移動フラグデータＤｉを更新し、次のステップに処理を進める。このように、左コントローラ３がパンチを繰り出すように振られたと判定されたときだけではなく、当該判定後であっても所定フレーム数（例えば、１５フレーム）が経過する前に、移動開始可能フラグがオン（すなわち、第１移動開始可能状態）になれば、第１オブジェクトＧ１の処理に対して設定されている移動フラグがオンに設定される。
【０１６９】
次に、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動開始可能フラグをオフに設定して移動開始可能フラグデータＤｌを更新して（ステップＳ１７８）、次のステップに処理を進める。このように、第１オブジェクトＧ１が仮想空間内を移動することを示す移動フラグがオンに設定された場合、第１移動開始可能状態ではなくなるため第１オブジェクトＧ１の移動開始可能フラグがオフに設定される。なお、プレイヤオブジェクトＰＯが敵オブジェクトＥＯに対して攻撃できない状態（例えば、プレイヤオブジェクトＰＯがダメージを受けて一時的にダウンしている状態）である場合、移動開始可能フラグを適宜オフに設定して移動開始可能フラグデータＤｌを設定してもよい。この場合、プレイヤオブジェクトＰＯが上記攻撃できない状態から回復した場合に、移動開始可能フラグがオンに設定される。
【０１７０】
次に、ＣＰＵ８１は、現時点が第２オブジェクトＧ２を移動開始してから所定フレーム数（例えば、４フレーム数）以内か否かを判定する（ステップＳ１７９）。例えば、ＣＰＵ８１は、後述するステップＳ１４５において左コントローラ振り認識処理と同様の処理を右コントローラ４に対しても行っており、現時点が当該ステップＳ１４５において右コントローラ４の処理に対して設定されている移動フラグがオンされてから所定フレーム数以内であれば、上記ステップＳ１７９において肯定判定する。そして、ＣＰＵ８１は、現時点が第２オブジェクトＧ２を移動開始してから所定フレーム数以内である場合、ステップＳ１８０に処理を進める。一方、ＣＰＵ８１は、現時点が第２オブジェクトＧ２を移動開始してから所定フレーム数以内でない場合、当該サブルーチンを用いた処理を終了する。
【０１７１】
ステップＳ１８０において、ＣＰＵ８１は、アクションフラグをオンに設定してアクションフラグデータＤｊを更新し、当該サブルーチンを用いた処理を終了する。このように、第１オブジェクトＧ１および第２オブジェクトＧ２の一方のオブジェクトが移動開始してから所定フレーム数以内に、他方のオブジェクトが移動開始した場合、アクションフラグがオンに設定される。
【０１７２】
図２０に戻り、上記ステップＳ１４４における左コントローラ振り認識処理の後、ＣＰＵ８１は、右コントローラ振り認識処理を行い（ステップＳ１４５）、次のステップに処理を進める。なお、図２１および図２２を用いて説明したコントローラ振り認識処理は、上記ステップＳ１４５の右コントローラ振り認識処理においても用いられるサブルーチンである。すなわち、上記左コントローラ振り認識処理において処理対象としていた左コントローラ３および第１オブジェクトＧ１を右コントローラ４および第２オブジェクトＧ２にすることによって、同じサブルーチンを用いて同様の処理が可能となる。したがって、上記ステップＳ１４５の右コントローラ振り認識処理の詳細な説明については省略する。
【０１７３】
次に、ＣＰＵ８１は、第１オブジェクト軌道変化処理を行い（ステップＳ１４６）、次のステップに処理を進める。以下、図２３〜図２５を参照して、上記ステップＳ１４６において行う第１オブジェクト軌道変化処理について説明する。
【０１７４】
図２３において、ＣＰＵ８１は、移動フラグデータＤｉを参照して第１オブジェクトＧ１の処理に対して設定されている移動フラグがオンに設定されているか否かを判定する（ステップＳ１９１）。そして、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動フラグがオンに設定されている場合、ステップＳ１９２に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動フラグがオフに設定されている場合、当該サブルーチンを用いた処理を終了する。
【０１７５】
ステップＳ１９２において、ＣＰＵ８１は、一時変数Ｓが所定数以上か否かを判定する。そして、ＣＰＵ８１は、一時変数Ｓが所定数以上である場合、ステップＳ１９３に処理を進める。一方、ＣＰＵ８１は、一時変数Ｓが所定数未満である場合、ステップＳ２１１（図２４参照）に処理を進める。ここで、上記ステップＳ１９２では、左コントローラ３がパンチを繰り出すように振られたと判定されてから当該パンチ操作が終わるまでの期間であるか否かを判定しており、パンチ操作中であると判定される場合とパンチ操作が終わったと判定される場合とによって異なる軌道設定を行っている。したがって、上記ステップＳ１９２で用いる所定数は、上記期間を判別可能なフレーム数に設定すればよく、例えば所定数＝７に設定される。
【０１７６】
ステップＳ１９３において、ＣＰＵ８１は、重力加速度の方向に対する左コントローラ３のＹ軸方向の傾きを算出し、次のステップに処理を進める。例えば、ＣＰＵ８１は、姿勢データＤｂを参照して左コントローラ３の姿勢を取得し、重力加速度の方向に対する当該左コントローラ３のＹ軸方向の傾きを算出する。
【０１７７】
次に、ＣＰＵ８１は、左コントローラ３のＹ軸方向の傾き角度に応じて、第１オブジェクトＧ１のカーブ値Ｃを算出してカーブ値データＤｆを更新し（ステップＳ１９４）、次のステップに処理を進める。ここで、第１オブジェクトＧ１のカーブ値Ｃは、第１オブジェクトＧ１の軌道を左右に変化させるための係数であり、例えば−１≦Ｃ≦１となるように設定される。そして、上記ステップＳ１９４では、左コントローラ３のＹ軸方向がＸ軸正方向に向かって右に傾いている場合にカーブ値Ｃを正の値に設定し、当該Ｙ軸方向が水平方向に対して右に４０°傾いている場合にＣ＝１に設定され、当該Ｙ軸方向が水平方向に対して右に４０°以上傾いたとしてもＣが上限値である１に設定される。また、左コントローラ３のＹ軸方向がＸ軸正方向に向かって左に傾いている場合にカーブ値Ｃを負の値に設定し、当該Ｙ軸方向が水平方向に対して左に４０°傾いている場合にＣ＝−１に設定され、当該Ｙ軸方向が水平方向に対して左に４０°以上傾いたとしてもＣが下限値である−１に設定される。
【０１７８】
次に、ＣＰＵ８１は、左コントローラ３を振動させるための往路振動データを作成して（ステップＳ１９５）、ステップＳ１９６に処理を進める。例えば、ＣＰＵ８１は、第１オブジェクトＧ１の種類に応じて第１オブジェクトＧ１が往路を移動する際の往路振動波形を生成し、往路振動波形に基づいて左コントローラ３を振動させるための往路振動データを生成して、左コントローラ振動データＤｐを更新する。なお、ＣＰＵ８１は、第１オブジェクトＧ１の移動速度や移動方向（カーブ値Ｃ）に応じて上記往路振動波形を調整してもよいし、当該移動速度や移動方向とは関わらずに上記往路移動波形を生成してもよい。また、ＣＰＵ８１は、第１オブジェクトＧ１以外の仮想空間の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトＰＯの動作やプレイヤオブジェクトＰＯに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、ＢＧＭや効果音に応じた振動等を、上記往路振動波形に加えてもかまわない。また、ＣＰＵ８１は、アクションフラグデータＤｊが示すアクションフラグがオンに設定されている場合、「両手パンチアクション」用の往路振動データ（アクション往路振動データ）を生成して、左コントローラ振動データＤｐを更新してもよい。
【０１７９】
一方、図２４に示すように、一時変数Ｓが所定数未満である場合、ＣＰＵ８１は、重力加速度方向周りの左コントローラ３の回転速度Ｖを算出し（ステップＳ２１１）、次のステップに処理を進める。例えば、ＣＰＵ８１は、姿勢データＤｂを参照して左コントローラ３に作用している重力加速度の方向を取得する。また、ＣＰＵ８１は、角速度データＤｃを参照して左コントローラ３に生じているＸＹＺ軸周りの角速度を取得する。そして、ＣＰＵ８１は、ＸＹＺ各軸周り角速度および重力加速度の方向を用いて重力加速度方向周りの左コントローラ３の角速度を算出し、当該角速度に応じた左コントローラ３の回転速度Ｖを算出して回転速度データＤｇを更新する。
【０１８０】
次に、ＣＰＵ８１は、左コントローラ３に生じている角速度から上記回転速度Ｖに相当する角速度を除いた成分の大きさより、回転速度Ｖの大きさの方が大きいか否かを判定する（ステップＳ２１２）。そして、ＣＰＵ８１は、回転速度Ｖの大きさの方が大きい場合、ステップＳ２１３に処理を進める。一方、ＣＰＵ８１は、回転速度Ｖの大きさの方が小さいまたは同じである場合、ステップＳ２１６に処理を進める。ここで、上記ステップＳ２１２の処理は、左コントローラ３に生じている角速度がどの方向周りを主体として生じているのか判定するためのものであり、実空間における左コントローラ３の動きが重力加速度周りに回転するヨー方向の動きが主体なのか、他の方向周りに回転する動きが主体なのかを判定している。
【０１８１】
ステップＳ２１３において、ＣＰＵ８１は、重力加速度方向周りの左コントローラ３の角速度に基づいて、左コントローラ３が重力加速度の方向を中心に左ヨー方向に回転しているか否かを判定する。そして、ＣＰＵ８１は、左コントローラ３が重力加速度の方向を中心に左ヨー方向に回転している場合、左コントローラ３の回転速度Ｖを１．１５倍して回転速度データＤｇを更新し（ステップＳ２１５）、ステップＳ２１７に処理を進める。一方、ＣＰＵ８１は、左コントローラ３が重力加速度の方向を中心に左ヨー方向に回転していない場合、そのままステップＳ２１７に処理を進める。一般的に、人間の手首が曲がる方向を考えた場合、ユーザが左手で把持する左コントローラ３を右ヨー方向に回転させる操作と比べて左ヨー方向に回転させる操作がやりにくくなる。上記ステップＳ２１３およびステップＳ２１５の処理は、このような操作の難易を考慮したものであり、やりにくい方向にコントローラを動かす操作であっても、他の操作と同様にオブジェクトを制御することができる。
【０１８２】
なお、当該サブルーチンを第２オブジェクトＧ２の軌道変化処理を行うために用いる場合、上記ステップＳ２１３では右コントローラ４が重力加速度の方向を中心に右ヨー方向に回転しているか否かを判定する。そして、右コントローラ４が重力加速度の方向を中心に右ヨー方向に回転している場合、右コントローラ４の回転速度Ｖを１．１５倍して回転速度データＤｇを更新することになる。
【０１８３】
一方、回転速度Ｖに相当する角速度の方が小さいまたは同じである場合、ＣＰＵ８１は、左コントローラ３のＸ軸方向周りの角速度に応じて回転速度Ｖを算出し（ステップＳ２１６）、ステップＳ２１７に処理を進める。例えば、ＣＰＵ８１は、角速度データＤｃを参照して左コントローラ３のＸ軸方向周りの角速度を取得し、当該角速度に応じた左コントローラ３の回転速度Ｖを算出して回転速度データＤｇを更新する。
【０１８４】
ステップＳ２１７において、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃに左コントローラ３の回転速度Ｖに関する値を加算して新たなカーブ値Ｃを算出して、次のステップに処理を進める。例えば、ＣＰＵ８１は、カーブ値データＤｆおよび回転速度データＤｇを参照して第１オブジェクトＧ１のカーブ値Ｃおよび左コントローラ３の回転速度Ｖを取得し、カーブ値Ｃに回転速度Ｖに応じた値を加算することによって得られる第１オブジェクトＧ１の新たなカーブ値Ｃを用いて、カーブ値データＤｆを更新する。
【０１８５】
次に、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃが所定の上限値Ｃｍａｘ（例えば、Ｃｍａｘ＝１）を超えているか否かを判定する（ステップＳ２１８）。そして、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃが上限値Ｃｍａｘを超えている場合、第１オブジェクトＧ１のカーブ値Ｃとして上限値Ｃｍａｘを設定してカーブ値データＤｆを更新し（ステップＳ２１９）、ステップＳ２２０に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃが上限値Ｃｍａｘを超えていない場合、そのままステップＳ２２０に処理を進める。
【０１８６】
ステップＳ２２０において、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃが所定の下限値Ｃｍｉｎ（例えば、Ｃｍｉｎ＝−１）より小さいか否かを判定する。そして、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃが下限値Ｃｍｉｎより小さい場合、第１オブジェクトＧ１のカーブ値Ｃとして下限値Ｃｍｉｎを設定してカーブ値データＤｆを更新し（ステップＳ２２１）、ステップＳ２２２に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃが下限値Ｃｍｉｎ以上である場合、そのままステップＳ２２２に処理を進める。
【０１８７】
ステップＳ２２２において、ＣＰＵ８１は、回転速度Ｖに基づいて左コントローラ３を振動させるための往路振動データを変更して、ステップＳ１９６（図２３参照）に処理を進める。例えば、ＣＰＵ８１は、左コントローラ３に生じている角速度に基づいて算出された回転速度Ｖに応じて、振動の振幅および／または周波数を変化させる変化パラメータを算出し、当該変化パラメータを用いて往路振動データを変化させて、左コントローラ振動データＤｐを更新する。
【０１８８】
例えば、図２７に示すように、回転速度Ｖに応じて往路振動波形の振幅を変化させる場合、様々な変化パターンが考えられる。例えば、変化パターン１は、回転速度Ｖの０からＶａへの変化に対して振幅変化率が１．０からＭＡＸ１（ＭＡＸ１＞１．０）まで線形変換され、回転速度Ｖａ以上では振幅変化率ＭＡＸ１で一定となる振幅の変化パターンである。変化パターン２は、回転速度Ｖの０からＶａへの変化に対して振幅変化率が１．０からＭＡＸ２（ＭＡＸ１＞ＭＡＸ２＞１．０）まで線形変換され、回転速度Ｖａ以上では振幅変化率ＭＡＸ２で一定となる振幅の変化パターンである。変化パターン３は、回転速度Ｖの０からＶａへの一定範囲ごとに振幅変化率が段階的に１．０からＭＡＸ３（ＭＡＸ３＞１．０）まで高くなるテーブルに基づいて変換され、回転速度Ｖａ以上では振幅変化率ＭＡＸ３で一定となる振幅の変化パターンである。
【０１８９】
上記変化パターンを用いて振幅変化率１．０が算出された場合、往路振動波形の振幅を変化させない、すなわち上記ステップＳ１９５で作成された往路振動データがそのまま左コントローラ振動データＤｐに設定されることになる。また、上述から明らかなように、回転速度Ｖは、重力加速度方向周りの左コントローラ３の角速度（ヨー方向の角速度）または左コントローラ３のＸ軸方向周りの角速度（ロール方向の角速度）に応じて算出されており、左コントローラ３の動きや姿勢の変化に基づくパラメータである。つまり、ヨー方向またはロール方向への左コントローラ３の動きや姿勢の変化がない場合、回転速度Ｖも０となるため振幅変化率も１．０となる。すなわち、左コントローラ３の動きや姿勢の変化によって回転速度Ｖが生じたことによって往路振動波形の振幅が変化したとしても、当該動きや姿勢の変化が止まることによって振幅変化率が１．０となって元の往路振動波形に戻ることになる。したがって、上記ステップＳ２２２における往路振動データの変更は、上記ステップＳ１９５で生成された往路振動波形を一時的に変化させるものであって、左コントローラ３の動きや姿勢の変化が止まることにより元の往路振動波形に戻るものである。
【０１９０】
上記ステップＳ２２２においては、回転速度Ｖに基づいて様々な変化パターンを用いて往路振動データを変化させてもよく、第１オブジェクトＧ１の種類に応じて選択される変化パターンを設定してもよい。また、図２７では、回転速度Ｖに対応して変化させる振幅変化率を例示しているが、同じ変化パターンを用いて振動の周波数を変化させてもよいし、振幅とは異なる変化パターンで振動の周波数を変化させてもよい。
【０１９１】
また、上記ステップＳ２２２においては、回転速度Ｖに基づいて往路振動データを変化させているが、他のパラメータに基づいて往路振動データを変化させてもよい。例えば、カーブ値Ｃの変化量に基づいて往路振動データを変化させてもよいし、カーブ値Ｃそのものの値に基づいて往路振動データを変化させてもよい。前者の場合、上記ステップＳ２１８〜ステップＳ２２１の処理を経たカーブ値Ｃの変化量、すなわち下限値Ｃｍｉｎおよび上限値Ｃｍａｘに制限されたカーブ値Ｃの変化量に基づいて、往路振動データを変化させることが考えられる。
【０１９２】
図２３に戻り、ステップＳ１９６において、ＣＰＵ８１は、第１オブジェクトＧ１のカーブ値Ｃを用いて第１オブジェクトＧ１の移動方向を算出し、次のステップに処理を進める。例えば、ＣＰＵ８１は、カーブ値データＤｆを参照して第１オブジェクトＧ１のカーブ値Ｃを取得し、プレイヤオブジェクト位置データＤｍを参照して第１オブジェクトＧ１の移動方向を取得する。そして、ＣＰＵ８１は、取得した第１オブジェクトＧ１のカーブ値Ｃが正の値の場合、取得した第１オブジェクトＧ１の移動方向をカーブ値の大きさに応じて右に変更し、当該変更後の第１オブジェクトＧ１の移動方向を用いてプレイヤオブジェクト位置データＤｍを更新する。また、ＣＰＵ８１は、取得した第１オブジェクトＧ１のカーブ値Ｃが負の値の場合、取得した第１オブジェクトＧ１の移動方向をカーブ値の大きさに応じて左に変更し、当該変更後の第１オブジェクトＧ１の移動方向を用いてプレイヤオブジェクト位置データＤｍを更新する。
【０１９３】
なお、第１オブジェクトＧ１が移動開始位置に戻る仮想空間内の復路を移動している場合、第１オブジェクトＧ１のカーブ値Ｃによって移動方向を変更することなく、現在の第１オブジェクトＧ１の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。第１オブジェクトＧ１が復路を移動しているか否かについては、後述する戻りフラグがオンに設定されているか否かによって判別することができる。
【０１９４】
次に、ＣＰＵ８１は、第１オブジェクトＧ１の移動方向に基づいて、第１オブジェクトＧ１を移動させ（ステップＳ１９７）、次のステップに処理を進める。例えば、ＣＰＵ８１は、プレイヤオブジェクト位置データＤｍを参照して第１オブジェクトＧ１の位置および移動方向を取得し、当該第１オブジェクトＧ１の位置から当該移動方向に基づいて第１オブジェクトＧ１を移動させ、当該移動後の第１オブジェクトＧ１の位置を用いてプレイヤオブジェクト位置データＤｍを更新する。
【０１９５】
なお、上記ステップＳ１９７において第１オブジェクトＧ１を移動させる移動速度（移動量）は、一例として、第１オブジェクトＧ１の移動速度については、第１オブジェクトＧ１の種類に応じた速度に応じて設定されてもよい。他の例として、第１オブジェクトＧ１の移動速度については、左コントローラ３がパンチを繰り出すように振られたと判定された際の加速度の大きさに応じて設定されてもよい。この場合、振りフラグがオンされた時点のＸＺ加速度の大きさに基づいて第１オブジェクトＧ１が移動開始する初速度を設定し、その後の移動速度を仮想空間の状況、移動方向の変化、所定のアルゴリズム、第１オブジェクトＧ１に設定された移動特性等に基づいて適宜変化させてもよい。
【０１９６】
次に、ＣＰＵ８１は、アクションフラグデータＤｊを参照して、アクションフラグがオンに設定されているか否かを判定する（ステップＳ１９８）。そして、ＣＰＵ８１は、アクションフラグがオンに設定されている場合、ステップＳ１９９に処理を進める。一方、ＣＰＵ８１は、アクションフラグがオフに設定されている場合、ステップＳ２３０（図２５参照）に処理を進める。
【０１９７】
ステップＳ１９９において、ＣＰＵ８１は、第１オブジェクトＧ１と第２オブジェクトＧ２との間に衝突領域Ａを設定し、ステップＳ２３０（図２５参照）に処理を進める。例えば、ＣＰＵ８１は、プレイヤオブジェクト位置データＤｍを参照して第１オブジェクトＧ１の位置および第２オブジェクトＧ２の位置を取得し、当該位置に基づいて衝突領域Ａの仮想空間における位置、形状、および範囲を設定して、衝突領域データＤｎを更新する。このようにアクションフラグがオンに設定された状態で第１オブジェクトＧ１（および第２オブジェクトＧ２）の移動方向および移動後の位置が設定される場合は、当該第１オブジェクトＧ１と第２オブジェクトＧ２との間に衝突領域Ａを設定される。
【０１９８】
図２５に進み、ＣＰＵ８１は、衝突判定処理を行い（ステップＳ２３０）、次のステップに処理を進める。例えば、ＣＰＵ８１は、プレイヤオブジェクト位置データＤｍ、衝突領域データＤｎ、および敵オブジェクト位置データＤｏを参照して、第１オブジェクトＧ１および衝突領域Ａと、仮想空間における他のオブジェクト（例えば、敵オブジェクトＥＯ）とにおける、仮想空間における衝突を判定する。
【０１９９】
次に、ＣＰＵ８１は、第１オブジェクトＧ１および衝突領域Ａの少なくとも１つと他のオブジェクトとが、仮想空間において衝突したか否かを判定する（ステップＳ２３１）。そして、ＣＰＵ８１は、第１オブジェクトＧ１および衝突領域Ａの少なくとも１つと他のオブジェクトとが衝突した場合、ステップＳ２３２に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１および衝突領域Ａの何れも他のオブジェクトと衝突していない場合、ステップＳ２３５に処理を進める。
【０２００】
ステップＳ２３２において、ＣＰＵ８１は、他のオブジェクトに対する衝突アクション処理を行い、次のステップに処理を進める。例えば、ＣＰＵ８１は、第１オブジェクトＧ１と敵オブジェクトＥＯとが衝突した場合、当該衝突に応じたダメージを敵オブジェクトＥＯに与えるとともに、当該ダメージに応じた所定のアクションを設定する。また、ＣＰＵ８１は、衝突領域Ａと敵オブジェクトＥＯとが衝突した場合、当該衝突に応じたダメージを敵オブジェクトＥＯに与えるとともに、第１オブジェクトＧ１および第２オブジェクトＧ２が組となった「両手パンチアクション」を設定する。
【０２０１】
なお、本実施例では、第１オブジェクトＧ１が敵オブジェクトＥＯに向かって移動している期間だけでなく、第１オブジェクトＧ１がプレイヤオブジェクトＰＯに向かって戻る期間においても、当該第１オブジェクトＧ１が他のオブジェクトと衝突した場合に衝突アクション処理が行われる。しかしながら、第１オブジェクトＧ１が敵オブジェクトＥＯに向かって移動している期間に限って他のオブジェクトに対する衝突アクション処理を行う場合は、第１オブジェクトＧ１がプレイヤオブジェクトＰＯに向かって戻る期間（戻りフラグがオンとなった状態）においては、上記ステップＳ２３１において第１オブジェクトＧ１と他のオブジェクトとが衝突していないと常に判定して当該衝突アクション処理を行わなくてもかまわない。
【０２０２】
次に、ＣＰＵ８１は、衝突振動を追加して（ステップＳ２３３）、次のステップに処理を進める。例えば、ＣＰＵ８１は、第１オブジェクトＧ１と他のオブジェクトとが衝突した状況に応じた衝突振動波形を生成する。そして、ＣＰＵ８１は、左コントローラ振動データＤｐが示す振動波形に上記衝突振動波形を合成して新たな振動波形を生成し、当該振動波形を用いて左コントローラ振動データＤｐを更新する。
【０２０３】
次に、ＣＰＵ８１は、アクションフラグをオフに設定してアクションフラグデータＤｊを更新するとともに、衝突領域データＤｎを衝突領域なし（例えば、Ｎｕｌｌ）に設定して（ステップＳ２３４）、ステップＳ２３５に処理を進める。このように、第１オブジェクトＧ１、第２オブジェクトＧ２、または衝突領域Ａのいずれかが他のオブジェクトと衝突するアクションが設定された場合、アクションフラグがオフに設定されるとともに、衝突領域に関する設定データが消去される。
【０２０４】
ステップＳ２３５において、ＣＰＵ８１は、戻りフラグデータＤｋを参照して第１オブジェクトＧ１の処理に対して設定されている戻りフラグがオンに設定されているか否かを判定する。そして、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている戻りフラグがオフに設定されている場合、ステップＳ２３６に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている戻りフラグがオンに設定されている場合、ステップＳ２４０に処理を進める。
【０２０５】
ステップＳ２３６において、ＣＰＵ８１は、第１オブジェクトＧ１が移動開始位置に戻る仮想空間内の復路を移動する動作を行うか否かを判定する。例えば、ＣＰＵ８１は、第１オブジェクトＧ１が移動開始位置から所定距離離れた位置に到達した場合、第１オブジェクトＧ１が敵オブジェクトＥＯの位置を通過した後に所定時間経過した場合、第１オブジェクトＧ１または衝突領域Ａが他のオブジェクトに衝突した後に所定時間経過した場合等の条件を満たす場合、第１オブジェクトＧ１が復路を移動する動作を行うと判定する。そして、ＣＰＵ８１は、第１オブジェクトＧ１が復路を移動する動作を行う場合、ステップＳ２３７に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１が復路を移動する動作を行なわない場合、当該サブルーチンによる処理を終了する。
【０２０６】
ステップＳ２３７において、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている戻りフラグをオンに設定して戻りフラグデータＤｋを更新し、次のステップに処理を進める。このように、第１オブジェクトＧ１が復路を移動する動作が設定された場合、第１オブジェクトＧ１の処理に対して設定されている戻りフラグがオンに設定される。
【０２０７】
次に、ＣＰＵ８１は、第１オブジェクトＧ１の移動方向として、移動開始位置に向かう方向を設定して（ステップＳ２３８）、次のステップに処理を進める。例えば、ＣＰＵ８１は、プレイヤオブジェクト位置データＤｍを参照して第１オブジェクトＧ１の現在位置から移動開始位置へ向かう方向を第１オブジェクトＧ１の移動方向として算出し、当該移動方向を用いてプレイヤオブジェクト位置データＤｍを更新する。なお、上記ステップＳ２３８において設定する第１オブジェクトＧ１の移動方向は、第１オブジェクトＧ１が連結されているオブジェクト（例えば、プレイヤオブジェクトＰＯの伸びた腕オブジェクト）に沿った方向に設定してもよいし、第１オブジェクトＧ１が移動開始位置から移動した際の軌道を逆に戻るように設定してもよい。
【０２０８】
次に、ＣＰＵ８１は、左コントローラ３を振動させるための復路振動データを作成して（ステップＳ２３９）、当該サブルーチンによる処理を終了する。例えば、ＣＰＵ８１は、第１オブジェクトＧ１の種類に応じて第１オブジェクトＧ１が復路を移動する際の復路振動波形を生成し、復路振動波形に基づいて左コントローラ３を振動させるための復路振動データを生成して、左コントローラ振動データＤｐを更新する。なお、ＣＰＵ８１は、第１オブジェクトＧ１の移動速度や移動方向に応じて上記復路振動波形を調整してもよいし、当該移動速度や移動方向とは関わらずに上記復路移動波形を生成してもよい。また、ＣＰＵ８１は、第１オブジェクトＧ１以外の仮想空間の状況に応じた振動を、上記振動波形に加えてもかまわない。例えば、プレイヤオブジェクトＰＯの動作やプレイヤオブジェクトＰＯに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、ＢＧＭや効果音に応じた振動等を、上記復路振動波形に加えてもかまわない。また、ＣＰＵ８１は、第１オブジェクトＧ１が復路を移動する際に左コントローラ３に振動を与えない場合は、振幅０を示す振動データまたは振動させないことを示す振動データを左コントローラ振動データＤｐに設定してもよい。
【０２０９】
一方、戻りフラグがオンに設定されている場合、ＣＰＵ８１は、第１オブジェクトＧ１が移動開始位置まで戻ったか否かを判定する（ステップＳ２４０）。例えば、ＣＰＵ８１は、プレイヤオブジェクト位置データＤｍを参照して、第１オブジェクトＧ１の位置が移動開始位置に設定されている場合、上記ステップＳ２４０において肯定判定する。そして、ＣＰＵ８１は、第１オブジェクトＧ１が移動開始位置まで戻った場合、ステップＳ２４１に処理を進める。一方、ＣＰＵ８１は、第１オブジェクトＧ１が移動開始位置まで戻っていない場合、当該サブルーチンによる処理を終了する。
【０２１０】
ステップＳ２４１において、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動開始可能フラグをオンに設定して移動開始可能フラグデータＤｌを更新し、次のステップに処理を進める。このように、第１オブジェクトＧ１が仮想空間内を再度移動可能な状態となった場合、第１移動開始可能状態となるため第１オブジェクトＧ１の移動開始可能フラグがオンに設定される。なお、上記ステップＳ２４１では、第１オブジェクトＧ１が移動開始位置まで戻った場合に即時に第１オブジェクトＧ１の移動開始可能フラグをオンに設定して第１移動開始可能状態としているが、他のタイミングで第１移動開始可能状態を開始してもよい。例えば、第１オブジェクトＧ１が移動開始位置まで戻ってから所定時間（例えば、８フレーム数）経過したタイミングで第１移動開始可能状態が開始されてもよい。
【０２１１】
次に、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動フラグおよび戻りフラグをオフに設定し、アクションフラグをオフに設定し、衝突領域や第１オブジェクトＧ１の移動方向に関するデータをデフォルト値に設定して（ステップＳ２４２）、次のステップに処理を進める。例えば、ＣＰＵ８１は、第１オブジェクトＧ１の処理に対して設定されている移動フラグおよび戻りフラグをそれぞれオフに設定して、移動フラグデータＤｉおよび戻りフラグデータＤｋをそれぞれ更新する。また、ＣＰＵ８１は、アクションフラグをオフに設定して、アクションフラグデータＤｊを更新する。また、ＣＰＵ８１は、衝突領域に関する設定データを衝突領域なし（例えば、Ｎｕｌｌ）に設定して、衝突領域データＤｎを更新する。また、ＣＰＵ８１は、第１オブジェクトＧ１の移動方向をデフォルト値（例えば、正面方向）に設定して、プレイヤオブジェクト位置データＤｍを更新する。
【０２１２】
次に、ＣＰＵ８１は、左コントローラ３の振動を停止させる処理を行い（ステップＳ２４３）、当該サブルーチンによる処理を終了する。例えば、ＣＰＵ８１は、第１オブジェクトＧ１の種類に応じて第１オブジェクトＧ１が移動開始位置に戻った際に生じる振動および当該振動の後に振動を停止させる振動波形を生成し、当該振動波形に基づいて左コントローラ３を振動させるための振動データを生成して、左コントローラ振動データＤｐを更新する。なお、ＣＰＵ８１は、第１オブジェクトＧ１の移動が停止した後も、第１オブジェクトＧ１の移動以外の仮想空間の状況に応じた振動を与える場合は、当該振動（プレイヤオブジェクトＰＯの動作やプレイヤオブジェクトＰＯに与えられた衝撃に応じた振動、ゲームフィールドの状況に応じた振動、ＢＧＭや効果音に応じた振動等）を加えて、引き続き振動させてもかまわない。
【０２１３】
図２０に戻り、上記ステップＳ１４６における第１オブジェクト軌道変化処理の後、ＣＰＵ８１は、第２オブジェクト軌道変化処理を行い（ステップＳ１４７）、次のステップに処理を進める。なお、図２３〜図２５を用いて説明したオブジェクト軌道変化処理は、上記ステップＳ１４７の第２オブジェクト軌道変化処理においても用いられるサブルーチンである。すなわち、上記第１オブジェクト軌道変化処理において処理対象としていた左コントローラ３および第１オブジェクトＧ１を右コントローラ４および第２オブジェクトＧ２にすることによって、同じサブルーチンを用いることによって同様の処理が可能となる。したがって、上記ステップＳ１４７の第２オブジェクト軌道変化処理の詳細な説明については省略する。
【０２１４】
次に、ＣＰＵ８１は、プレイヤオブジェクト移動処理を行い（ステップＳ１４８）、次のステップに処理を進める。以下、図２６を参照して、上記ステップＳ１４８において行うプレイヤオブジェクト移動処理について説明する。
【０２１５】
図２６において、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるピッチ方向に対する傾きが同じ方向であるか否かを判定する（ステップＳ２５１）。例えば、ＣＰＵ８１は、姿勢データＤｂを参照して左コントローラ３のＸ軸正方向と右コントローラ４のＸ軸正方向とが実空間の水平方向に対してともに仰角方向にある、またはともに俯角方向にある場合、上記ステップＳ２５１において肯定判定する。そして、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるピッチ方向に対する傾きが同じ方向である場合、ステップＳ２５２に処理を進める。一方、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるピッチ方向に対する傾きが同じ方向にない場合、ステップＳ２５３に処理を進める。
【０２１６】
ステップＳ２５２において、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるピッチ方向に対する傾き角度の平均値Ｐを算出し、ステップＳ２５４に処理を進める。例えば、ＣＰＵ８１は、姿勢データＤｂを参照して、左コントローラ３のＸ軸正方向と実空間の水平方向との差角と右コントローラ４のＸ軸正方向と実空間の水平方向との差角とを算出し、当該差角の平均値Ｐを算出する。例えば、上記差角は、Ｘ軸正方向が俯角方向である場合に正の値となり、Ｘ軸正方向が仰角方向である場合に負の値となるように算出する。
【０２１７】
一方、上記ステップ２５１において左コントローラ３および右コントローラ４の実空間におけるピッチ方向に対する傾きが同じ方向にないと判定された場合、ＣＰＵ８１は、平均値Ｐを０に設定し（ステップＳ２５３）、ステップＳ２５４に処理を進める。
【０２１８】
ステップＳ２５４において、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるロール方向に対する傾きが同じ方向であるか否かを判定する。例えば、ＣＰＵ８１は、姿勢データＤｂを参照して左コントローラ３のＹ軸正方向と右コントローラ４のＹ軸正方向とが実空間の水平方向に対してともに仰角方向にある、またはともに俯角方向にある場合、上記ステップＳ２５４において肯定判定する。そして、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるロール方向に対する傾きが同じ方向である場合、ステップＳ２５５に処理を進める。一方、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるロール方向に対する傾きが同じ方向にない場合、ステップＳ２５６に処理を進める。
【０２１９】
ステップＳ２５５において、ＣＰＵ８１は、左コントローラ３および右コントローラ４の実空間におけるロール方向に対する傾き角度の平均値Ｒを算出し、ステップＳ２５７に処理を進める。例えば、ＣＰＵ８１は、姿勢データＤｂを参照して、左コントローラ３のＹ軸正方向と実空間の水平方向との差角と右コントローラ４のＹ軸正方向と実空間の水平方向との差角とを算出し、当該差角の平均値Ｒを算出する。例えば、上記差角は、Ｙ軸正方向が俯角方向である場合に正の値となり、Ｙ軸正方向が仰角方向である場合に負の値となるように算出する。
【０２２０】
一方、上記ステップ２５４において左コントローラ３および右コントローラ４の実空間におけるロール方向に対する傾きが同じ方向にないと判定された場合、ＣＰＵ８１は、平均値Ｒを０に設定し（ステップＳ２５６）、ステップＳ２５７に処理を進める。
【０２２１】
ステップＳ２５７において、ＣＰＵ８１は、平均値Ｐに応じた前後移動量と平均値Ｒに応じた左右移動量とを合成して移動量Ｍを算出し、次のステップに処理を進める。例えば、ＣＰＵ８１は、平均値Ｐが正の値である場合に仮想空間における前方へ移動し、平均値Ｐが負の値である場合に仮想空間における後方へ移動する前後移動量を、当該平均値Ｐの値に応じて算出する。また、ＣＰＵ８１は、平均値Ｒが正の値である場合に仮想空間における右へ移動し、平均値Ｒが負の値である場合に仮想空間における左へ移動する左右移動量を、当該平均値Ｒの値に応じて算出する。そして、上記前後移動量および上記左右移動量を合成することによって、仮想空間に対する移動量Ｍを算出する。
【０２２２】
次に、ＣＰＵ８１は、移動フラグの設定状況に応じて移動量Ｍをスケーリングし（ステップＳ２５８）、次のステップに処理を進める。例えば、ＣＰＵ８１は、移動フラグデータＤｉを参照して第１オブジェクトＧ１および第２オブジェクトＧ２の処理に対してそれぞれ設定されている移動フラグが両方オフに設定されている場合、移動量Ｍはそのままの値とする。また、ＣＰＵ８１は第１オブジェクトＧ１および第２オブジェクトＧ２の処理に対してそれぞれ設定されている移動フラグの一方のみオンに設定されている場合、移動量Ｍを所定倍率によって縮小（例えば、０．９倍して縮小）する。また、ＣＰＵ８１は第１オブジェクトＧ１および第２オブジェクトＧ２の処理に対してそれぞれ設定されている移動フラグの両方がオンに設定されている場合、移動量Ｍを０に設定する。
【０２２３】
次に、ＣＰＵ８１は、上記ステップＳ２５８においてスケーリングされた移動量Ｍに応じて、プレイヤオブジェクトＰＯを仮想空間において移動させ（ステップＳ２５９）、当該サブルーチンによる処理を終了する。例えば、ＣＰＵ８１は、プレイヤオブジェクト位置データＤｍが示す仮想空間におけるプレイヤオブジェクトＰＯの位置を移動量Ｍに応じて移動させ、移動後のプレイヤオブジェクトＰＯの位置を用いてプレイヤオブジェクト位置データＤｍを更新する。
【０２２４】
図２０に戻り、上記ステップＳ１４８におけるプレイヤオブジェクト移動処理の後、ＣＰＵ８１は、表示制御処理を行い（ステップＳ１４９）、次のステップに処理を進める。例えば、ＣＰＵ８１は、プレイヤオブジェクト位置データＤｍ、および敵オブジェクト位置データＤｏを用いて、ゲームフィールド上にプレイヤオブジェクトＰＯ、第１オブジェクトＧ１、第２オブジェクトＧ２、敵オブジェクトＥＯを配置する。また、ＣＰＵ８１は、アクションフラグデータＤｊが示すアクションフラグがオンに設定されており、衝突領域データＤｎに衝突領域Ａに関する設定データが設定されている場合は、第１オブジェクトＧ１および第２オブジェクトＧ２の間に衝突領域Ａに対応するオブジェクトを配置する。さらに、ＣＰＵ８１は、上記ステップＳ２３３において衝突アクションが設定されている場合は、当該設定内容に応じて各仮想オブジェクトを動作させる。そして、ＣＰＵ８１は、所定の位置（例えば、プレイヤオブジェクトＰＯの背後）に配置された仮想カメラからゲームフィールドを見た仮想空間画像を生成し、当該仮想空間画像を表示装置（例えば、据置型モニタ６）の表示画面に表示する処理を行う。
【０２２５】
次に、ＣＰＵ８１は、振動データを送信する周期毎に当該周期に対応する振動データを、左コントローラ３および右コントローラ４へ送信する処理を行い（ステップＳ１５０）、次のステップに処理を進める。例えば、ＣＰＵ８１は、左コントローラ振動データＤｐを参照して、上記送信周期に対応する振動長さ分の振動データを左コントローラ３へ送信する。また、ＣＰＵ８１は、右コントローラ振動データＤｑを参照して、上記送信周期に対応する振動長さ分の振動データを右コントローラ４へ送信する。このように２つのコントローラを振動させるための振動データがそれぞれ左コントローラ３および右コントローラ４へ送信されることによって、当該振動データを受信した左コントローラ３および右コントローラ４は、それぞれ振動データに応じた振動波形で振動する。
【０２２６】
次に、ＣＰＵ８１は、ゲームを終了するか否かを判定する（ステップＳ１５１）。上記ステップＳ１５１においてゲームを終了する条件としては、例えば、上記ゲームの結果が確定したことや、ユーザがゲームを終了する操作を行ったこと等がある。ＣＰＵ８１は、ゲームを終了しない場合に上記ステップＳ１４２に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップＳ１４２〜ステップＳ１５１の一連の処理は、ステップＳ１５１でゲームを終了すると判定されるまで繰り返し実行される。
【０２２７】
このように、左コントローラ３および右コントローラ４を振動させるために、一時変数Ｓが７以上である場合にステップＳ１９５において往路振動データが生成され、一時変数Ｓが７未満である場合にステップＳ２２２において回転速度Ｖに基づいて往路振動データが変更される。ここで、一時変数Ｓは、左コントローラ３または右コントローラ４がパンチを繰り出すように振られたと判定された際に所定数に設定（ステップＳ１７２）された後、処理が進行されることに応じて１減算される変数である。つまり、左コントローラ３および右コントローラ４は、パンチを繰り出すように振られたと加速度に基づいて判定された直後は往路振動データに基づいて振動し、その後は回転速度Ｖに基づいて変化する振動データに基づいて振動することになる。したがって、本実施例においては、左コントローラ３および／または右コントローラ４を多様に振動させることが可能となり、リアリティがあるゲームプレイも可能となる。また、左コントローラ３および右コントローラ４を振動させるための振動データは、左コントローラ３および／または右コントローラ４の動作や姿勢に応じて変化させることができるとともに、アナログスティックの傾倒操作等におけるアナログ出力に応じて変化させることもできるため、操作態様に応じたフレキシブルな制御が可能となる。
【０２２８】
なお、上述した実施例では、コントローラに生じた加速度が所定の条件を満たした場合に所定の往路振動データが生成され、当該往路振動データが出力されている期間においてコントローラに生じた角速度が所定の条件を満たした場合に、振動の振幅および／または周波数を一時的に変化させる振動データが生成されて出力する例を用いたが、他の態様によって振動データが生成されてもよい。例えば、コントローラを用いてパンチを繰り出すような操作がされたか否かを判定するパラメータは、当該コントローラに生じる加速度でなくてもよく、当該コントローラに生じる角速度や当該コントローラに生じる加速度と角速度の両方を用いて判定されてもよい。また、振動データを一時的に変化させるか否かを判定するための条件は、当該コントローラに生じる角速度に基づく条件でなくてもよく、当該コントローラに生じる加速度に基づく条件や当該コントローラに生じる加速度と角速度の両方に基づく条件でもよい。また、上記判定は、コントローラに設けられた操作ボタンや方向指示部に対する操作によって判定されてもよい。
【０２２９】
また、回転速度Ｖに応じた振動データの一時的変化は、複数回生じてもよい。例えば、上述したフローチャートからも明らかであるが、第１オブジェクトＧ１や第２オブジェクトＧ２の往路移動中に回転速度Ｖが複数回生じた場合、回転速度Ｖが生じる毎に往路振動データが一時的に変化することになり、上記フローチャートによる処理を行えば、往路振動データを一時的に複数回変化させることが可能となる。
【０２３０】
また、上述した実施例では、所定の往路振動データが出力されている期間においてコントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、振動の振幅および／または周波数を一時的に変化させる振動データを出力する例を用いたが、他の態様によって一時的に変化させる振動パラメータを設定してもよい。第１の例として、コントローラが所定の周期で断続的に振動している場合に、コントローラの動きまたは姿勢の変化が所定の条件を満たしたことに応じて、当該周期や振動が途切れる期間および／または振動が加わる時間が変化する振動データを出力してもよい。第２の例として、所定の往路振動データが出力されている期間においてコントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、当該往路振動データによる振動波形より振幅が大きい単発的な振動を所定回数加えることによって、一時的に変化させる振動データを出力してもよい。第３の例として、所定の往路振動データの出力対象となっているオブジェクトが特定種類のオブジェクトの場合、コントローラの動きまたは姿勢の変化が所定の条件を満たした場合であっても、振動を変化させずに当該往路振動データの出力を継続してもよい。
【０２３１】
また、上述した実施例では、左コントローラ３や右コントローラ４の動きに応じて移動開始する第１オブジェクトＧ１や第２オブジェクトＧ２の移動に伴って往路振動データが生成される例を用いたが、他の操作に応じて第１オブジェクトＧ１や第２オブジェクトＧ２が移動開始してもよい。例えば、左コントローラ３や右コントローラ４に設けられた所定の操作部（例えば、操作ボタンや方向指示部）に対するユーザ操作に応じて、第１オブジェクトＧ１や第２オブジェクトＧ２が移動開始し、当該第１オブジェクトＧ１や第２オブジェクトＧ２の移動に伴って往路振動データが生成されてもよい。
【０２３２】
また、上述した実施例では、第１オブジェクトＧ１および第２オブジェクトＧ２は、それぞれ移動中であっても左コントローラ３や右コントローラ４を用いた操作によって軌道が変化するため、結果的に第１移動開始可能状態が終了してから次の第１移動開始可能状態となるまでの時間や第２移動開始可能状態が終了してから次の第２移動開始可能状態となるまでの時間が長いものであることが前提となっている。このように、次の移動が開始可能となるまでの時間が長くなるゲームにおいては、先行して移動開始する操作（振り操作）を受け付けるゲーム仕様が効果的となるが、他の仕様によって次の移動が開始可能となるまでの時間が長くなるゲームであってもよいことは言うまでない。例えば、上述したゲーム例では、プレイヤオブジェクトＰＯの腕が伸びることによって移動中の動きを制御可能にしているが、プレイヤオブジェクトの他の五体（例えば、脚）が伸びるゲームやプレイヤオブジェクトが所持している物体（鞭オブジェクト、蛇腹オブジェクト等）が伸びるゲームに本発明を適用してもよい。また、プレイヤオブジェクトが遠隔操作可能なオブジェクト（例えば、ラジコン、ロボット、ロケットパンチ等）を移動中に操作し、再びプレイヤオブジェクトの手元に帰った場合に次の移動が可能となるゲームに本発明を適用してもよい。また、一旦放ったオブジェクト（鳥、ブーメラン、ボーリングの球等）が戻ってくるゲームに本発明を適用してもよい。
【０２３３】
また、上述した「両手パンチアクション」は、第１オブジェクトＧ１および第２オブジェクトＧ２が組となって所定のアクションを行う例として記載したが、単に第１オブジェクトＧ１および第２オブジェクトＧ２が組となって移動するものであってもよい。この場合、ゲーム画像として表現される第１オブジェクトＧ１および第２オブジェクトＧ２の移動形態は、単に第１オブジェクトＧ１および第２オブジェクトＧ２が組となって移動するものとなるが、第１オブジェクトＧ１および第２オブジェクトＧ２の少なくとも一方が敵オブジェクトＥＯと衝突した場合に、単独で衝突する場合と比べて与えるダメージが大きくてもよい。
【０２３４】
また、上述した実施例では、左コントローラ３や右コントローラ４を用いた操作に応じて、第１オブジェクトＧ１および第２オブジェクトＧ２における仮想空間の左右方向の位置が制御され、当該操作に応じて振動が一時的に変化する例を用いたが、第１オブジェクトＧ１および第２オブジェクトＧ２における仮想空間の上下方向の位置および／または前後方向の位置が制御可能に構成されてもよい。この場合、左コントローラ３および／または右コントローラ４の実空間における上下方向の動作および／またはピッチ方向の姿勢に応じて、第１オブジェクトＧ１および／または第２オブジェクトＧ２における仮想空間の上下方向の位置が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ３および／または右コントローラ４の実空間における前後方向の動作および／またはピッチ方向の姿勢に応じて、第１オブジェクトＧ１および／または第２オブジェクトＧ２における仮想空間の前後方向の位置が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ３や右コントローラ４を用いた操作に応じて、第１オブジェクトＧ１および第２オブジェクトＧ２における仮想空間における姿勢が制御可能に構成されてもよい。この場合、左コントローラ３および／または右コントローラ４の実空間におけるロール方向の姿勢に応じて、第１オブジェクトＧ１および／または第２オブジェクトＧ２における仮想空間のロール方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ３および／または右コントローラ４の実空間におけるピッチ方向の姿勢に応じて、第１オブジェクトＧ１および／または第２オブジェクトＧ２における仮想空間のピッチ方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。また、左コントローラ３および／または右コントローラ４の実空間におけるヨー方向の姿勢に応じて、第１オブジェクトＧ１および／または第２オブジェクトＧ２における仮想空間のヨー方向に対する姿勢が制御可能に構成され、当該操作に応じて振動が一時的に変化してもよい。
【０２３５】
また、上述した実施例において、左コントローラ３や右コントローラ４の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて左コントローラ３や右コントローラ４の動きや姿勢を検出してもよい。例えば、上述した実施例における加速度センサ１０４および１１４や角速度センサ１０５および１１５は、左コントローラ３や右コントローラ４の動きや姿勢を算出するための姿勢センサの一例である。例えば他の実施形態においては、左コントローラ３や右コントローラ４は、加速度センサや角速度センサに加えて（または代えて）磁気センサを備えていてもよく、磁気によって左コントローラ３や右コントローラ４の動きや姿勢を算出してもよい。また、例えば他の実施形態においては、本体装置２は、左コントローラ３や右コントローラ４を撮像装置によって撮像し、撮影された画像を用いて左コントローラ３や右コントローラ４の動きや姿勢を算出してもよい。また、上述した実施例では、左コントローラ３や右コントローラ４を用いた操作に応じたゲーム画像を据置型モニタ６に表示しているが、本体装置２のディスプレイ１２に表示してもよい。また、第１オブジェクトＧ１および／または第２オブジェクトＧ２の動作を制御するためのコントローラは、左コントローラ３および右コントローラ４のセットだけでなく、他のコントローラが組み合わせられたり、他のコントローラ同士が組み合わせられたりしてもよい。
【０２３６】
また、上述した実施例では、一対の左コントローラ３および右コントローラ４を用いて複数のオブジェクトを操作するゲームを用いたが、１つのコントローラを用いて単一のオブジェクトを操作するゲームでもよい。この場合、上記単一のオブジェクトの移動に応じて１つのコントローラを振動させるための往路振動データが出力されている期間において、当該コントローラの動きまたは姿勢の変化が所定の条件を満たした場合に、振動の振幅および／または周波数を一時的に変化させる振動データが出力される。これによって、１つのコントローラによって単一のオブジェクトを操作するゲームであっても、当該１つのコントローラの振動を一時的に変化させることが可能となる。
【０２３７】
また、他の実施形態においては、本体装置２は、据置型モニタ６と直接通信可能であってもよい。例えば、本体装置２と据置型モニタ６とが直接有線通信または直接無線通信を行うことが可能であってもよい。この場合、本体装置２は、本体装置２と据置型モニタ６とが直接通信可能か否かに基づいて画像の表示先を決定してもよい。
【０２３８】
また、アナログスティック３２および５２は、操作検出結果をアナログ値で取得し、当該アナログ値を示すアナログ操作データを出力できる操作装置の一例であるが、アナログ値を取得できる他の操作装置が左コントローラ３や右コントローラ４に設けられてもよい。例えば、ユーザがボタンを押下する押下量に応じたアナログ値を取得可能な押下ボタンやユーザがタッチする位置に応じたアナログ値を取得可能なタッチパネルやタッチパッドが左コントローラ３や右コントローラ４に設けられてもよい。
【０２３９】
また、付加装置（例えば、クレードル）は、本体装置２を着脱可能な任意の付加装置であってよい。付加装置は、本実施形態のように、本体装置２に対する充電を行う機能を有していてもよいし、有していなくてもよい。
【０２４０】
また、情報処理システム１は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器（ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、携帯電話、パーソナルコンピュータ、カメラ、タブレット等）等であってもよい。また、左コントローラ３および／または右コントローラ４も、どのような装置であってもよく、任意の携帯型電子機器（ＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔ）、携帯電話、パーソナルコンピュータ、カメラ、タブレット、携帯ゲーム装置等）等であってもよい。
【０２４１】
また、上述した説明では情報処理（ゲーム処理）を情報処理システム１でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、情報処理システム１がさらに他の装置（例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末）と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理（ゲーム処理）は、少なくとも１つの情報処理装置により構成される情報処理システムに含まれる１つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、情報処理システム１のＣＰＵ８１が所定のプログラムを実行することによって情報処理を行うことが可能であるが、情報処理システム１が備える専用回路によって上記処理の一部または全部が行われてもよい。
【０２４２】
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置（据置型のゲーム装置）と携帯型の情報処理装置（携帯型のゲーム装置）との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
【０２４３】
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
【０２４４】
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じて情報処理システム１に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
【０２４５】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書（定義を含めて）が優先する。
【産業上の利用可能性】
【０２４６】
以上のように、本発明は、操作装置を多様に振動させることが可能な情報処理プログラム、情報処理装置、情報処理システム、および情報処理方法等として利用することができる。
【符号の説明】
【０２４７】
１…情報処理システム
２…本体装置
３…左コントローラ
４…右コントローラ
５…クレードル
６…据置型モニタ
１１…ハウジング
１２…ディスプレイ
２７…下側端子
４２，６４…端子
７３…本体端子
８１…ＣＰＵ
８２…ネットワーク通信部
８３…コントローラ通信部
８５…ＤＲＡＭ
１０７、１１７…振動子
２１０…拡張グリップ
【図１】
2018110649.tif 000003
【図２】
2018110649.tif 000004
【図３】
2018110649.tif 000005
【図４】
2018110649.tif 000006
【図５】
2018110649.tif 000007
【図６】
2018110649.tif 000008
【図７】
2018110649.tif 000009
【図８】
2018110649.tif 000010
【図９】
2018110649.tif 000011
【図１０】
2018110649.tif 000012
【図１１】
2018110649.tif 000013
【図１２】
2018110649.tif 000014
【図１３】
2018110649.tif 000015
【図１４】
2018110649.tif 000016
【図１５】
2018110649.tif 000017
【図１６】
2018110649.tif 000018
【図１７】
2018110649.tif 000019
【図１８】
2018110649.tif 000020
【図１９】
2018110649.tif 000021
【図２０】
2018110649.tif 000022
【図２１】
2018110649.tif 000023
【図２２】
2018110649.tif 000024
【図２３】
2018110649.tif 000025
【図２４】
2018110649.tif 000026
【図２５】
2018110649.tif 000027
【図２６】
2018110649.tif 000028
【図２７】
2018110649.tif 000029