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