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