(58)【調査した分野】(Int.Cl.,DB名)
前記判定手段は、前記第1姿勢と前記第2姿勢との差が前記所定範囲内である状態が所定時間以上継続する場合、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されていると判定する、請求項1に記載のゲームシステム。
前記第1のゲームコントローラは、前記第1動き姿勢センサとは異なり、当該第1のゲームコントローラの動きおよび姿勢の少なくとも一方に応じた第3データを出力する第3動き姿勢センサを、さらに含み、
前記第1送信手段は、前記第3動き姿勢センサから出力される第3データを、さらに前記ゲーム装置に送信し、
前記第2のゲームコントローラは、前記第2動き姿勢センサとは異なり、当該第2のゲームコントローラの動きおよび姿勢の少なくとも一方に応じた第4データを出力する第4動き姿勢センサを、さらに含み、
前記第2送信手段は、前記第4動き姿勢センサから出力される第4データを、さらに前記ゲーム装置に送信し、
前記受信手段は、前記第3データおよび前記第4データを、さらに受信し、
前記判定手段は、前記第1データおよび前記第2データに加えて、前記第3データおよび前記第4データに基づいて、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されているか否かを判定する、請求項1乃至4の何れか1つに記載のゲームシステム。
前記判定手段は、前記第3データによって示される前記第1のゲームコントローラの動きおよび姿勢の少なくとも一方と前記第4データによって示される前記第2のゲームコントローラの動きおよび姿勢の少なくとも一方との少なくともいずれかが所定の条件を満たす場合、当該条件を満たす前の判定結果を維持する、請求項5または6に記載のゲームシステム。
前記判定手段は、少なくとも前記ゲーム処理手段が前記ゲーム処理を行っている期間中において、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されているか否かを判定する判定処理を繰り返し行う、請求項1乃至7の何れか1つに記載のゲームシステム。
前記ゲーム処理手段は、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されていないと前記判定手段が判定している場合に第1操作モードに基づいて前記ゲーム処理を行い、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されていると前記判定手段が判定している場合に第2操作モードに基づいて前記ゲーム処理を行い、
前記判定手段は、前記第1操作モードで前記ゲーム処理が行われている状態において、前記第1のゲームコントローラおよび前記第2のゲームコントローラの少なくとも一方の動きまたは姿勢が、当該第1操作モードにおいて用いられるコントローラの動きまたは姿勢であると判定される条件を満たす場合、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されていないとする判定結果を維持する、請求項8に記載のゲームシステム。
前記ゲーム処理手段は、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されていないと前記判定手段が判定している場合に第1操作モードに基づいて前記ゲーム処理を行い、前記第1のゲームコントローラと前記第2のゲームコントローラとが前記アタッチメントに装着されていると前記判定手段が判定している場合に第2操作モードに基づいて前記ゲーム処理を行う、請求項1乃至9の何れか1つに記載のゲームシステム。
前記ゲーム処理手段は、前記第1操作モードが設定されている場合に前記第1のゲームコントローラおよび/または前記第2のゲームコントローラに対して行われた所定の操作に応じて所定のゲーム処理を行うとともに、前記第2操作モードが設定されている場合に前記第1のゲームコントローラおよび/または前記第2のゲームコントローラに対して行われた当該所定の操作とは異なる操作に応じて当該所定のゲーム処理と同じゲーム処理を行う、請求項10に記載のゲームシステム。
前記ゲーム処理手段は、前記第1操作モードが設定されている場合に前記第1のゲームコントローラおよび/または前記第2のゲームコントローラに対して行われた所定の操作に応じて所定のゲーム処理を行うとともに、前記第2操作モードが設定されている場合に前記第1のゲームコントローラおよび/または前記第2のゲームコントローラに対して行われた当該所定の操作と同じ操作に応じて当該所定のゲーム処理と異なるゲーム処理を行う、請求項10に記載のゲームシステム。
【発明を実施するための形態】
【0048】
以下、本実施形態の一例に係るゲームシステムについて説明する。本実施形態におけるゲームシステム1の一例は、本体装置(情報処理装置;本実施形態ではゲーム装置本体として機能する)2と左コントローラ3および右コントローラ4とを含む。本体装置2は、左コントローラ3および右コントローラ4がそれぞれ着脱可能である。つまり、ゲームシステム1は、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として利用できる。また、ゲームシステム1は、本体装置2と左コントローラ3および右コントローラ4とを別体として利用することもできる(
図2参照)。以下では、本実施形態のゲームシステム1のハードウェア構成について説明し、その後に本実施形態のゲームシステム1の制御について説明する。
【0049】
図1は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。
図1に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
【0050】
図2は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。
図1および
図2に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
【0051】
図3は、本体装置2の一例を示す六面図である。
図3に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
【0052】
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
【0053】
図3に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
【0054】
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
【0055】
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、
図6に示すスピーカ88)を備えている。
図3に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
【0056】
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
【0057】
図3に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
【0058】
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
【0059】
図4は、左コントローラ3の一例を示す六面図である。
図4に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、
図1および
図4に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0060】
左コントローラ3は、アナログスティック32を備える。
図4に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
【0061】
左コントローラ3は、各種操作ボタンを備える。左コントローラ3は、ハウジング31の主面上に4つの操作ボタン33〜36(具体的には、右方向ボタン33、下方向ボタン34、上方向ボタン35、および左方向ボタン36)を備える。さらに、左コントローラ3は、録画ボタン37および−(マイナス)ボタン47を備える。左コントローラ3は、ハウジング31の側面の左上に第1Lボタン38およびZLボタン39を備える。また、左コントローラ3は、ハウジング31の側面の、本体装置2に装着される際に装着される側の面に第2Lボタン43および第2Rボタン44を備える。これらの操作ボタンは、本体装置2で実行される各種プログラム(例えば、OSプログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
【0062】
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
【0063】
図5は、右コントローラ4の一例を示す六面図である。
図5に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
【0064】
右コントローラ4は、左コントローラ3と同様、方向入力部としてアナログスティック52を備える。本実施形態においては、アナログスティック52は、左コントローラ3のアナログスティック32と同じ構成である。また、右コントローラ4は、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、右コントローラ4は、左コントローラ3と同様、ハウジング51の主面上に4つの操作ボタン53〜56(具体的には、Aボタン53、Bボタン54、Xボタン55、およびYボタン56)を備える。さらに、右コントローラ4は、+(プラス)ボタン57およびホームボタン58を備える。また、右コントローラ4は、ハウジング51の側面の右上に第1Rボタン60およびZRボタン61を備える。また、右コントローラ4は、左コントローラ3と同様、第2Lボタン65および第2Rボタン66を備える。
【0065】
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
【0066】
図6は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、
図3に示す構成の他、
図6に示す各構成要素81〜91、97、および98を備える。これらの構成要素81〜91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
【0067】
本体装置2は、CPU(Central Processing Unit)81を備える。CPU81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、厳密にはCPU機能、GPU機能等の複数の機能を含むSoC(System−on−a−chip)である。CPU81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
【0068】
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、CPU81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
【0069】
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、CPU81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、CPU81の指示に応じて行う。
【0070】
CPU81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
【0071】
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、CPU81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi−Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
【0072】
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、CPU81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
【0073】
CPU81は、上述の左側端子17、右側端子21、および下側端子27に接続される。CPU81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、CPU81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、CPU81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
【0074】
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、ユーザは、複数の左コントローラ3および複数の右コントローラ4を用いて本体装置2に対する入力を行うことができる。
【0075】
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とCPU81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、CPU81へ出力する。
【0076】
また、ディスプレイ12は、CPU81に接続される。CPU81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
【0077】
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、CPU81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
【0078】
また、本体装置2は、加速度センサ89を備える。本実施形態においては、加速度センサ89は、所定の3軸(例えば、
図1に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ89は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。
【0079】
また、本体装置2は、角速度センサ90を備える。本実施形態においては、角速度センサ90は、所定の3軸(例えば、
図1に示すxyz軸)回りの角速度を検出する。なお、角速度センサ90は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。
【0080】
加速度センサ89および角速度センサ90は、CPU81に接続され、加速度センサ89および角速度センサ90の検出結果は、CPU81へ出力される。CPU81は、上記の加速度センサ89および角速度センサ90の検出結果に基づいて、本体装置2の動きおよび/または姿勢に関する情報を算出することが可能である。
【0081】
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびCPU81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、CPU81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
【0082】
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
【0083】
図7は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、
図6で示しているため
図7では省略している。
【0084】
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。
図7に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
【0085】
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
【0086】
左コントローラ3は、各ボタン103(具体的には、ボタン33〜39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(
図7では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
【0087】
左コントローラ3は、慣性センサを備える。具体的には、左コントローラ3は、加速度センサ104を備える。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、
図4に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ105は、所定の3軸(例えば、
図4に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。
【0088】
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
【0089】
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
【0090】
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
【0091】
図7に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
【0092】
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
【0093】
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
【0094】
以上に説明したように、本実施形態におけるゲームシステム1については左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、クレードルに左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置や本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードルに本体装置2単体を装着することによって据置型モニタ6に画像(および音声)を出力する利用態様におけるゲームシステムを用いて説明する。
【0095】
上述のように、本実施形態においては、左コントローラ3および右コントローラ4を本体装置2から外した状態(「離脱状態」と呼ぶ)でゲームシステム1を利用することも可能である。離脱状態でゲームシステム1を利用してアプリケーション(例えば、ゲームアプリケーション)に対する操作を行う場合の態様としては、1人のユーザが左コントローラ3および右コントローラ4の両方を用いる態様が考えられる。なお、1人のユーザが左コントローラ3および右コントローラ4の両方を用いる場合、左コントローラ3と右コントローラ4とを接合して1つの操作装置として機能させる付属機器(例えば、後述する拡張グリップ350)を用いることも可能である。なお、複数のユーザが同じアプリケーションを用いて操作する場合は、左コントローラ3および右コントローラ4の組を複数組用意して、それぞれのユーザが当該複数組のうちの1組を用いる態様等が考えられる。
【0096】
図8〜
図10は、離脱状態において、1人のユーザが左コントローラ3および右コントローラ4の組を把持してゲームシステム1を利用する様子の一例を示す図である。
図8〜
図10に示すように、離脱状態において、ユーザは、左コントローラ3を左手で把持し、右コントローラ4を右手で把持して操作を行いながら、据置型モニタ6に表示された画像を見ることができる。
【0097】
例えば、本実施例では、ユーザは、縦長の略板状である左コントローラ3の長手方向の下方向(
図1に示す下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ40が設けられている側面)が前方に向き、かつ、左コントローラ3の主面(アナログスティック32等が設けられる面)が右に向くように左コントローラ3を左手で把持する。つまり、ユーザの左手によって把持されている左コントローラ3は、x軸負方向がユーザの前方を向き、z軸正方向が左を向いた状態となる。また、ユーザは、縦長の略板状である右コントローラ4の長手方向の下方向(
図1に示す上下方向(y軸負方向))が鉛直方向になるとともに、本体装置2に装着された際に当該本体装置2と接する側面(スライダ62が設けられている側面)が前方に向き、かつ、右コントローラ4の主面(アナログスティック52等が設けられる面)が左に向くように右コントローラ4を右手で把持する。つまり、ユーザの右手によって把持されている右コントローラ4は、x軸正方向がユーザの前方を向き、z軸正方向が右を向いた状態となる。
【0098】
このように、左手で左コントローラ3を把持し右手で右コントローラ4を把持した状態(以下、このような操作方式を両手持ち操作方式として、当該方向に把持された左コントローラ3および右コントローラ4の姿勢を基本姿勢と記載することがある)から、各コントローラを上下左右前後に動かしたり、各コントローラを回転させたり、各コントローラを振り動かしたりすることによって、各コントローラの動きや姿勢に応じてゲームプレイが行われる。そして、上記ゲームプレイにおいて、左コントローラ3の加速度センサ104は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ105は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。また、右コントローラ4の加速度センサ114は、上記xyz軸方向の加速度をそれぞれ操作入力として検出可能であり、角速度センサ115は、上記xyz軸方向周りの角速度をそれぞれ操作入力として検出可能である。さらに、上記両手持ち操作では、ユーザの左手の親指によって第1Lボタン38を押下する操作が可能となり、ユーザの右手の親指によって第1Rボタン60を押下する操作が可能となり、当該ボタン操作によるゲームプレイも行われる(
図9参照)。
【0099】
また、左コントローラ3および右コントローラ4を把持してゲームプレイする場合、当該ゲーム状況に応じて、左コントローラ3および/または右コントローラ4に振動が与えられる。上述したように、左コントローラ3は、振動子107を有しており、右コントローラ4は、振動子117を有している。本体装置2のCPU81は、実行しているゲーム状況に応じて振動データを左コントローラ3および/または右コントローラ4に送信することによって、当該振動データに応じた振幅および周波数で振動子107および/または振動子117を振動させることができる。
【0100】
次に、
図11〜
図13は、左コントローラ3および右コントローラ4を動かすことによってプレイするゲームにおいて表示されるゲーム画像例を示す図である。
図11に示すように、本ゲーム例では、プレイヤオブジェクトPOと敵オブジェクトEOとが対戦するゲーム(例えば、ボクシングゲーム)の画像が据置型モニタ6に表示される。そして、左コントローラ3および右コントローラ4を操作するユーザは、左コントローラ3本体および/または右コントローラ4本体を振り動かしたり、左コントローラ3本体および/または右コントローラ4本体の姿勢を変化させたり、操作ボタン(例えば、第1Lボタン38や第1Rボタン60)を押下したりすることによって、プレイヤオブジェクトPOを操作することができる。
【0101】
例えば、左コントローラ3を振り動かすことによってプレイヤオブジェクトPOの左グラブ(左拳)を模した第1オブジェクトG1の動作を制御することができ、右コントローラ4を振り動かすことによってプレイヤオブジェクトPOの右グラブ(右拳)を模した第2オブジェクトG2の動作を制御することができる。具体的には、ユーザが左コントローラ3を把持している左手を用いて左パンチを繰り出すように振る操作を行った場合、敵オブジェクトEOが配置されている場所に向かってプレイヤオブジェクトPOの左グラブを模した第1オブジェクトG1が移動する。また、ユーザが右コントローラ4を把持している右手を用いて右パンチを繰り出すように振る操作を行った場合、敵オブジェクトEOが配置されている場所に向かってプレイヤオブジェクトPOの右グラブを模した第2オブジェクトG2が移動する。
【0102】
具体的には、左コントローラ3および右コントローラ4の何れも動かしていない状態(
図11に示す状態)から、右コントローラ4を前方(右コントローラ4のx軸正方向)に押し出すように振り動かした場合、
図12に示すように右コントローラ4の動きに応じてプレイヤオブジェクトPOの第2オブジェクトG2が敵オブジェクトEOに向かって移動する。これによって、敵オブジェクトEOに対してプレイヤオブジェクトPOが右パンチを繰り出したようなゲーム画像が表示される。また、左コントローラ3および右コントローラ4の何れも動かしていない状態から、左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かした場合、左コントローラ3の動きに応じてプレイヤオブジェクトPOの第1オブジェクトG1が敵オブジェクトEOに向かって移動する。これによって、敵オブジェクトEOに対してプレイヤオブジェクトPOが左パンチを繰り出したようなゲーム画像が表示される。
【0103】
ここで、第1オブジェクトG1が移動開始する際の移動方向は、左コントローラ3を押し出すように振り動かした際の左コントローラ3の姿勢によって設定される。また、第2オブジェクトG2が移動開始する際の移動方向は、右コントローラ4を押し出すように動かした際の右コントローラ4の姿勢によって設定される。例えば、
図12に示したように、右コントローラ4がx軸正方向に移動した場合、当該移動における右コントローラ4のロール方向の姿勢に応じて第2オブジェクトG2の移動方向が設定される。一例として、本実施例では、右コントローラ4が移動している期間において、実空間において重力加速度が作用している方向を基準とした右コントローラ4のy軸方向の傾きを算出し、当該y軸方向の傾きに基づいて第2オブジェクトG2の移動方向を算出している。具体的には、右コントローラ4が上記基準姿勢に対して右方向にロール回転した姿勢であることを上記y軸方向の傾きが示す場合、仮想空間の右方向に向かって第2オブジェクトG2が移動する。また、右コントローラ4が上記基準姿勢に対して左方向にロール回転した姿勢であることを上記y軸方向の傾きが示す場合、仮想空間の左方向に向かって第2オブジェクトG2が移動する。そして、それぞれ右方向または左方向に移動方向がずれる角度については、上記y軸方向の傾き角度に応じてそれぞれ算出される。
【0104】
また、本ゲーム例では、仮想空間においてプレイヤオブジェクトPOと敵オブジェクトEOとの距離が相対的に遠い場合であってもパンチを繰り出すことが可能であり、プレイヤオブジェクトPOの腕が伸びることによって、第1オブジェクトG1および第2オブジェクトG2が相対的に長い距離を移動することができる。そして、第1オブジェクトG1または第2オブジェクトG2は、他のオブジェクト(例えば、敵オブジェクトEO)と衝突するか所定の距離移動した後に移動を終了し、当該第1オブジェクトG1および第2オブジェクトG2がそれぞれ移動開始した移動開始位置(例えば、
図11に示すプレイヤオブジェクトPOの手元)まで戻る。第1オブジェクトG1および第2オブジェクトG2が移動開始位置まで戻ることによって、敵オブジェクトEOに向かう次の移動が可能となる。言い換えると、次のパンチを出すことができるようになる。したがって、上記移動開始位置から第1オブジェクトG1または第2オブジェクトG2が移動を開始してから再び当該移動開始位置まで戻るまでの時間が一般的なボクシングゲームより相対的に長くなる。
【0105】
本ゲーム例では、このような移動時間を利用して、第1オブジェクトG1または第2オブジェクトG2が移動中(典型的には、敵オブジェクトEOの方向へ移動している期間)であっても、左コントローラ3または右コントローラ4の姿勢や動きに応じて移動する軌道を変化させることができる。例えば、上述した第1オブジェクトG1または第2オブジェクトG2の移動開始時の左コントローラ3または右コントローラ4の姿勢から左コントローラ3または右コントローラ4がロール方向に回転した場合やヨー方向に回転した場合、当該回転に応じて第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。
【0106】
一例として、本実施例では、第1オブジェクトG1または第2オブジェクトG2の移動開始後の左コントローラ3または右コントローラ4のx軸周りの回転速度(角速度)を上記ロール方向の回転として、当該x軸周りの回転速度に基づいて移動中の第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。具体的には、第1オブジェクトG1が移動中に左コントローラ3がx軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第1オブジェクトG1の軌道を変化させ、左コントローラ3がx軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第1オブジェクトG1の軌道を変化させる。また、第2オブジェクトG2が移動中に右コントローラ4がx軸を中心として右方向にロール回転した回転速度が得られた場合、仮想空間の右方向に第2オブジェクトG2の軌道を変化させ、右コントローラ4がx軸を中心として左方向にロール回転した回転速度が得られた場合、仮想空間の左方向に第2オブジェクトG2の軌道を変化させる。
【0107】
他の例として、本実施例では、第1オブジェクトG1または第2オブジェクトG2の移動開始後の左コントローラ3または右コントローラ4の実空間の重力方向周りの回転速度(角速度)を上記ヨー方向の回転として、当該回転速度に基づいて移動中の第1オブジェクトG1または第2オブジェクトG2の軌道を変化させる。具体的には、第1オブジェクトG1が移動中に左コントローラ3が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第1オブジェクトG1の軌道を変化させ、左コントローラ3が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第1オブジェクトG1の軌道を変化させる。また、第2オブジェクトG2が移動中に右コントローラ4が重力方向を中心として右方向にヨー回転した回転速度が得られた場合、仮想空間の右方向に第2オブジェクトG2の軌道を変化させ、右コントローラ4が重力方向を中心として左方向にヨー回転した回転速度が得られた場合、仮想空間の左方向に第2オブジェクトG2の軌道を変化させる。
【0108】
また、本ゲーム例では、左コントローラ3または右コントローラ4が振り動かされたか否かの判定を、左コントローラ3または右コントローラ4に生じた加速度の大きさを用いて行う。そして、第1オブジェクトG1が上記移動開始位置に配置されている状態において左コントローラ3が上記x軸負方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第1オブジェクトG1が移動を開始する。また、第2オブジェクトG2が上記移動開始位置に配置されている状態において右コントローラ4が上記x軸正方向に振り動かされたと判定された場合、当該移動開始位置から敵オブジェクトEOに向かって第2オブジェクトG2が移動を開始する。
【0109】
また、本ゲーム例では、第1オブジェクトG1および第2オブジェクトG2の一方が上記移動開始位置から移動開始して移動中であっても、第1オブジェクトG1および第2オブジェクトG2の他方も上記移動開始位置から移動開始させることができる。例えば、
図13に示すように、ユーザが右コントローラ4を前方(右コントローラ4のx軸正方向)に押し出すように振り動かすことによって、第2オブジェクトG2が敵オブジェクトEOに向かって移動開始する。その後、第2オブジェクトG2の移動中に、ユーザが左コントローラ3を前方(左コントローラ3のx軸負方向)に押し出すように振り動かすことによって、第1オブジェクトG1も敵オブジェクトEOに向かって移動開始する。したがって、
図13に例示した据置型モニタ6には、第1オブジェクトG1および第2オブジェクトG2の両方が敵オブジェクトEOに向かって移動するゲーム画像が表示されている。また、
図13には、先行して移動開始した第2オブジェクトG2が敵オブジェクトEOに衝突(ヒット)しているゲーム画像が例示されている。
【0110】
ここで、本ゲーム例では、仮想ゲーム世界における第1オブジェクトG1および/または第2オブジェクトG2の状況に応じて、左コントローラ3および/または右コントローラ4に振動が与えられる。一例として、本ゲーム例では、第1オブジェクトG1が仮想ゲーム世界を移動する場合、第1オブジェクトG1の種類、移動速度、移動方向、衝突状況等に応じた振動が左コントローラ3に与えられる。また、第2オブジェクトG2が仮想ゲーム世界を移動する場合、第2オブジェクトG2の種類、移動速度、移動方向、衝突状況等に応じた振動が右コントローラ4に与えられる。
【0111】
また、本ゲーム例では、左コントローラ3および右コントローラ4の両方の動きや姿勢に応じて、仮想空間内でプレイヤオブジェクトPOを移動させたり、動作させたりすることができる。例えば、左コントローラ3および右コントローラ4の両方が実空間のピッチ方向に回転した場合やロール方向に回転した場合、当該回転した傾きに応じてプレイヤオブジェクトPOを移動させる。具体的には、実空間の重力方向を基準とする左コントローラ3のx軸方向およびy軸方向の傾きと右コントローラ4のx軸方向およびy軸方向の傾きとをそれぞれ算出する。そして、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が前方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該前方へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の前方へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が後方に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該後方へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の後方へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が左に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該左へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の左へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が右に傾く姿勢になっていると判定された場合、左コントローラ3および右コントローラ4の両方が当該右へ傾いている角度(例えば、当該角度の平均値)に応じた移動量でプレイヤオブジェクトPOを仮想ゲーム世界の右へ移動させる。また、上記傾きに基づいて、左コントローラ3および右コントローラ4の両方が内側へ傾く姿勢になっていると判定された場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する動作を行う。
【0112】
また、本ゲーム例では、左コントローラ3および右コントローラ4の操作ボタンに対する操作に応じて、仮想空間内でプレイヤオブジェクトPOを移動させたり、動作させたりすることができる。例えば、左コントローラ3の第1Lボタン38が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュして移動(高速移動)する。また、右コントローラ4の第1Rボタン60が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする。
【0113】
また、本実施例では、左コントローラ3と右コントローラ4とを装着して1つの操作装置として機能させるアタッチメント(付属機器)を用いて上記ゲームをプレイすることも可能である。
【0114】
図14および
図15は、左コントローラ3および右コントローラ4を装着可能な付属機器の一例を示す図である。
図14および
図15に示すように、付属機器の一例である拡張グリップ350は、ユーザがそれを用いて操作を行うための付属機器である。拡張グリップ350は、左コントローラ3を装着可能であり、また、右コントローラ4を装着可能である。したがって、拡張グリップ350によって、ユーザは、本体装置2から外した2つのコントローラ3および4を一体として把持して操作(以下、このような操作方式を拡張グリップ操作方式と記載することがある)を行うことができる。
【0115】
拡張グリップ350は、本体部351と、支持部352とを備える。本体部351は、ユーザが左手で把持するための左グリップ部353、および、ユーザが右手で把持するための右グリップ部354を有する。そのため、本体部351は、把持部と言うこともできる。また、本体部351は、接続部355を有する。
【0116】
接続部355は、左グリップ部353と右グリップ部354とを接続する。接続部355は、例えば横方向(すなわち、
図14および
図15に示すx軸方向)に延びる部材であって、接続部355の左端部分に左グリップ部353が設けられ、接続部355の右端部分に右グリップ部354が設けられる。左グリップ部353は、上下方向(すなわち、
図14および
図15に示すy軸方向)に延びる形状を有する。右グリップ部354も左グリップ部353と同様、上下方向に延びる形状を有する。なお、正確には、左グリップ部353および右グリップ部354は、上下方向よりもやや斜めに傾いた方向に延びる形状を有する。具体的には、左グリップ部353および右グリップ部354は、接続部355に接続される部分から、下方につれて互いに離れる向きに傾いている。各グリップ部353および354をこのような形状にすることによって、ユーザは、各グリップ部353および354を快適に把持することができ、拡張グリップ350に装着された各コントローラ3および4を快適に操作することができる。
【0117】
本実施形態では、本体部351は、1つの(換言すれば、一体的に形成された)ハウジングによって構成されている。本実施形態において、本体部351のハウジングは、樹脂で構成される。なお、他の実施形態においては、本体部351は、複数のハウジング(例えば、各部353〜355毎のハウジング)が接続された構成であってもよい。
【0118】
支持部352は、各コントローラ3および4を支持するための部材である。
図14および
図15に示すように、支持部352は、本体部351(具体的には、本体部351の接続部355)に接合される。支持部352(換言すれば、支持部352のハウジング)は、略直方体の外形形状を有しており、その裏面(すなわち、z軸正方向側の面)が、接続部355の正面(すなわち、z軸負方向側の面)に接合される。なお、本実施形態においては、支持部352のハウジングは、樹脂で構成される。また、本体部351と支持部352とが一体的に形成されてもよく、本体部351と支持部352とが1つのハウジングによって構成されていてもよい。
【0119】
拡張グリップ350は、左コントローラ3および右コントローラ4を同時に装着することが可能である。具体的には、拡張グリップ350は、左コントローラ3を左側面に装着するための本体装置2の機構と同じ機構を、支持部352の左側面(すなわち、x軸正方向側の面)に備えている。また、拡張グリップ350は、右コントローラ4を右側面に装着するための本体装置2の機構と同じ機構を、支持部352の右側面(すなわち、x軸負方向側の面)に備えている。そして、
図15に示すように、左コントローラ3および右コントローラ4が拡張グリップ350に装着された場合、左コントローラ3が右コントローラ4に対して左側となり、それぞれ同じ向き(すなわち、左コントローラ3および右コントローラ4のy軸正方向が実質的に平行で同じ方向となる)となるように、拡張グリップ350によって支持される。また、拡張グリップ350に装着された左コントローラ3の左側に左グリップ部353が配置され、拡張グリップ350に装着された右コントローラ4の右側に右グリップ部354が配置される。これによって、ユーザは、拡張グリップ350とそれに装着された左コントローラ3および右コントローラ4とを、1つのコントローラのようにして把持することができる。また、ユーザは、左コントローラ3および右コントローラ4の外側に直接接続された左グリップ部353および右グリップ部354を把持するような感覚で、左コントローラ3および右コントローラ4を把持することができる。
【0120】
なお、本実施例における拡張グリップ350は、左コントローラ3および右コントローラ4との間で電気的接続されない状態で、左コントローラ3および右コントローラ4を装着することができる。ここで、左コントローラ3の装着面(x軸負方向側の右側面)や右コントローラ4の装着面(x軸正方向側の左側面)に、ユーザ通知用LEDが設けられていることがある。このような場合であっても、拡張グリップ350は、左コントローラ3および右コントローラ4との間で電気的接続することなく、上記通知用LEDによる光をユーザが視認可能にするための構成を備えている。
【0121】
例えば、
図14に示すように、支持部352の左側面(すなわち、x軸正方向側の面)および右側面(すなわち、x軸負方向側の面)に、通知用LEDによる光をそれぞれ導光する導光路358の入射面が、通知用LEDの配置位置にそれぞれ対応して設けられる。そして、それぞれの導光路358の出射面を支持部352の外面(例えば、支持部352の前面(すなわち、z軸負方向側の面)に設ける。これによって、拡張グリップ350に装着された状態で左コントローラ3および右コントローラ4の通知用LEDによる光をユーザが視認することができ、拡張グリップ350と左コントローラ3および右コントローラ4との間で電気的接続がない状態であっても、通知用LEDによって通知される情報を報知することができる。
【0122】
図16に示すように、拡張グリップ350によって一体となった左コントローラ3および右コントローラ4を用いて上記ゲームをプレイする場合、左コントローラ3および右コントローラ4に設けられた各操作ボタンやスティックが用いられて操作される。例えば、右コントローラ4のBボタン54が押下操作された場合、プレイヤオブジェクトPOが左パンチを繰り出して第1オブジェクトG1が移動開始する。右コントローラ4のAボタン53が押下操作された場合、プレイヤオブジェクトPOが右パンチを繰り出して第2オブジェクトG2が移動開始する。仮想ゲーム世界において第1オブジェクトG1および/または第2オブジェクトG2が移動中に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、移動中の第1オブジェクトG1および/または第2オブジェクトG2の移動方向が変化する。第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が傾倒操作された場合、傾倒操作された方向および傾倒角度に応じて、仮想ゲーム世界においてプレイヤオブジェクトPOが移動する。また、第1オブジェクトG1および第2オブジェクトG2が何れも移動開始位置に配置されている場合に左コントローラ3のアナログスティック32が押し込まれる操作が行われた場合、仮想ゲーム世界においてプレイヤオブジェクトPOが敵オブジェクトEOからの攻撃を防御する。右コントローラ4のXボタン55が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがジャンプする動作を行う。そして、右コントローラ4のYボタン56が押下操作された場合、仮想ゲーム世界においてプレイヤオブジェクトPOがダッシュ(高速移動)する。また、拡張グリップ350を用いてゲームプレイする場合であっても、仮想ゲーム世界における第1オブジェクトG1および/または第2オブジェクトG2の状況に応じて、拡張グリップ350に装着された左コントローラ3および/または右コントローラ4に振動が与えられる。
【0123】
図17は、上述した操作方式(両手持ち操作方式、拡張グリップ操作方式)毎の操作内容に対するプレイヤオブジェクトPOの動作を示す操作対応テーブルの一例である。
【0124】
図17から明らかなように、プレイヤオブジェクトPOに同じ動作を行わせたい場合であっても、操作方式が異なることによって異なる操作が必要とされる場合がある。例えば、プレイヤオブジェクトPOを前後左右に移動させたい場合、両手持ち操作方式では左コントローラ3および右コントローラ4を移動させたい方向に傾ける操作が必要となるが、拡張グリップ操作方式ではスティックの傾倒操作が必要となる。また、これらの操作内容は、第1オブジェクトG1および/または第2オブジェクトG2の移動方向を変化させたり、プレイヤオブジェクトPOに防御動作をさせたりする場合も類似した相違がある。
【0125】
また、プレイヤオブジェクトPOに左パンチまたは右パンチを繰り出す動作をさせる場合、両手持ち操作方式では左コントローラ3または右コントローラ4を振る操作が必要となるが、拡張グリップ操作方式では上述したように割り当てられた操作ボタンを押下する操作が必要となる。さらに、プレイヤオブジェクトPOにジャンプまたはダッシュする動作をさせる場合、各操作方式において割り当てられた操作ボタンがそれぞれ異なっている。
【0126】
なお、左コントローラ3および/または右コントローラ4を用いて同じ操作を行ったとしても、操作方式が異なることによって対応するゲーム処理が異なるように設定してもよい。一例として、左コントローラ3および/または右コントローラ4によってポインティングする操作に対応する処理を異なるように設定することが考えられる。
【0127】
例えば、両手持ち操作方式では、左コントローラ3または右コントローラ4によって指し示された位置に応じて、所定のオブジェクト画像(例えば、カーソル画像)が据置型モニタ6に表示される。具体的には、左コントローラ3に生じている角速度に応じて、左コントローラ3の長手方向(y軸正方向)が指し示している方向を算出し、当該方向に応じた表示画面上の位置をポインティング位置としてオブジェクト画像を表示する。そして、左コントローラ3の長手方向の方向が変化した場合、当該変化によって生じた角速度に応じてポインティング位置を移動させる。
【0128】
一方、拡張グリップ操作方式では、拡張グリップ350に装着された左コントローラ3および右コントローラ4によって指し示す操作を行った場合、同様に指し示された位置に応じて、所定のオブジェクト画像(例えば、カーソル画像)が据置型モニタ6に表示されるが、指し示す方向変化に応じてポインティング位置を移動させる移動量が相対的に大きくなる。具体的には、拡張グリップ操作方式では、左コントローラ3(または右コントローラ4)の長手方向の方向が変化した場合、当該変化によって生じた角速度に応じてポインティング位置を移動させる移動量を、両手持ち操作方式の移動量に1以上の係数を乗算した大きさとする。したがって、拡張グリップ操作方式では、両手持ち操作方式と同じ角速度で指し示す方向を変化させる同じ操作を行ったとしても、ポインティング位置が移動する距離が相対的に大きくなる補正処理が行われる。一般的に、片手に1つの操作装置を把持して当該操作装置の方向を変える操作より、両手で1つの操作装置を把持して当該操作装置の方向を変える操作が難しいが、上記補正処理によって操作の難易度に応じた適切な処理を行うことができる。
【0129】
ここで、本実施例では、拡張グリップ350と左コントローラ3および右コントローラ4との間で電気的接続がないため、ユーザが用いている操作方式(例えば、両手持ち操作方式または拡張グリップ操作方式)を左コントローラ3および右コントローラ4の動きおよび/または姿勢に基づいて判定する。例えば、左コントローラ3に備えられている動き姿勢センサ(例えば、加速度センサ104や角速度センサ105)によって検出された左コントローラ3の動きおよび/または姿勢に基づいたデータと、右コントローラ4に備えられている動き姿勢センサ(例えば、加速度センサ114や角速度センサ115)によって検出された右コントローラ4の動きおよび/または姿勢に基づいたデータとをそれぞれ用いて、本体装置2において上記操作方式が判定される。なお、上記操作方式の判定は、上述したゲーム開始前だけでなく、ゲームプレイ中も行われるため、ユーザがゲーム中に操作方式を変更した場合であっても当該変更が検出されて操作方式に応じたゲーム処理が行われる。
【0130】
ユーザが用いている操作方式を判定する第1の例は、左コントローラ3および右コントローラ4の姿勢の差が所定範囲内である第1条件と左コントローラ3および右コントローラ4の姿勢変化量の差が所定範囲内である第2条件とを満たすか否かに基づいて、本体装置2が判定を行う。そして、上記第1条件および第2条件ともに肯定判定される場合に、ユーザが拡張グリップ操作方式を用いて操作していると判定し、上記第1条件および第2条件の少なくとも一方が否定判定される場合に、ユーザが両手持ち操作方式を用いて操作していると判定する。
【0131】
例えば、上記第1条件による判定は、左コントローラ3および右コントローラ4に作用している重力加速度方向を基準とする姿勢をそれぞれ算出し、当該姿勢の差が所定範囲内であった場合に肯定判定される。ここで、上記重力加速度方向周りの方向となる実空間の左右方向に対する姿勢については、一方のコントローラの姿勢に他方のコントローラの姿勢を常に合わせるように補正してもよい。本実施例では、左コントローラ3および右コントローラ4の左方向(x軸正方向)が、上記重力加速度方向周りの左右方向に対して常に一致するように左コントローラ3および右コントローラ4の姿勢が補正された状態で、当該姿勢の一致度が判定される。そして、左コントローラ3および右コントローラ4の姿勢の差が所定範囲内である状態が所定時間継続した場合に第1条件による判定が肯定判定され、左コントローラ3および右コントローラ4の姿勢の差が所定範囲を越えた場合に即時に第1条件による判定が否定判定される。
【0132】
また、上記第2条件による判定は、左コントローラ3および右コントローラ4に作用している各軸(例えば、xyz軸)周りの角速度を累積することによって当該各軸の方向を算出し、当該各軸方向の変化量の差が所定範囲内であった場合に肯定判定される。ここで、上記各軸方向の変化量は、概念的には各軸の角速度を表すものであり、上記第2条件による判定は、角速度の差が所定範囲内であった場合に肯定判定されるものとして考えることもできる。なお、本実施例は、左コントローラ3および右コントローラ4に定義されているxyz軸のうち、長手方向(y軸方向)の変化量の差および左右方向(x軸方向)の変化量の差を用いて、上記第2条件を判定する。そして、左コントローラ3および右コントローラ4の各軸方向の変化量の差が所定範囲内である状態が所定時間継続した場合に第2条件による判定が肯定判定され、左コントローラ3および右コントローラ4の各軸方向の変化量の差が所定範囲を越えた状態が所定時間継続した場合に第2条件による判定が否定判定される。
【0133】
なお、ユーザが用いている操作方式を判定する第1の例は、第1条件および第2条件の両方を満たす場合と少なくとも一方を満たす場合とによって、両手持ち操作方式または拡張グリップ操作方式を用いた操作を判定している。このように2つの条件を用いて操作方式を判定することによって、様々な操作に対して正確な判定が可能となる。例えば、一方のコントローラを重力加速度周りに回転させるように動かした場合、双方のコントローラの姿勢が一致した状態となって上記第1条件が肯定判定される可能性があるが、上記第2条件では必ず否定判定される。つまり、上記第1条件だけを用いた判定では拡張グリップ操作方式を用いた操作であると誤判定される恐れがあるが、上記第2条件による判定も行うことによって上記状態でも両手持ち操作方式であると正確に判定することが可能となる。また、両手持ち操作方法で操作している場合であっても両方のコントローラが同じ動きをしている状態では上記第2条件が肯定判定される可能性があるが、当該コントローラの姿勢が一致していなければ上記第1条件では必ず否定判定される。つまり、上記第2条件だけを用いた判定では拡張グリップ操作方式を用いた操作であると誤判定される恐れがあるが、上記第1条件による判定も行うことによって上記状態でも両手持ち操作方式であると正確に判定することが可能となる。このような効果を期待しない場合、上記第1条件および上記第2条件の一方を用いて、ユーザが用いている操作方式の判定を行ってもかまわない。また、上記第1条件および上記第2条件に後述する他の条件も加えて、ユーザが用いている操作方式の判定を行ってもかまわない。
【0134】
ユーザが用いている操作方式を判定する第2の例は、左コントローラ3に備えられている動き姿勢センサの検出結果に基づいたデータの値(例えば、角速度センサ105が検出した角速度データの値)と右コントローラ4に備えられている動き姿勢センサの検出結果に基づいたデータの値(例えば、角速度センサ115が検出した角速度データの値)との差が所定範囲内である第3条件を満たすか否かに基づいて、本体装置2が判定を行う。そして、上記第3条件を用いた判定が肯定判定される場合に、ユーザが拡張グリップ操作方式を用いて操作していると判定し、上記第3条件を用いた判定が否定判定される場合に、ユーザが両手持ち操作方式を用いて操作していると判定する。そして、左コントローラ3および右コントローラ4からそれぞれ出力される上記データの値の差が所定範囲内である状態が所定時間継続した場合に第3条件による判定が肯定判定され、左コントローラ3および右コントローラ4からそれぞれ出力される上記データの値の差が所定範囲を越えた状態が所定時間継続した場合に第3条件による判定が否定判定される。
【0135】
なお、上述した操作方式を判定する第1の例および第2の例は、左コントローラ3および右コントローラ4の動きおよび/または姿勢に基づいて操作方式を判定する単なる例であって、他のパラメータを用いて操作方式を判定してもよい。第3の例として、左コントローラ3および右コントローラ4が動いている場合に限って(すなわち、静止している場合を除外して)操作方式を判定する処理を行ってもよい。この場合、左コントローラ3および右コントローラ4が動いている状態においてそれぞれのコントローラに生じる角速度の値の差が所定範囲内である場合にユーザが拡張グリップ操作方式を用いて操作していると判定し、左コントローラ3および右コントローラ4が動いている状態においてそれぞれのコントローラに生じる角速度の値の差が所定範囲を越える場合にユーザが両手持ち操作方式を用いて操作していると判定することができる。
【0136】
第4の例として、左コントローラ3および右コントローラ4に生じる加速度の値を用いて、操作方式を判定する処理を行ってもよい。この場合、左コントローラ3および右コントローラ4に生じる重力加速度の方向や左コントローラ3および/または右コントローラ4の動きに応じて生じる加速度の方向に応じて、左コントローラ3および右コントローラ4が同じ姿勢および/または同じ動きをしている場合にユーザが拡張グリップ操作方式を用いて操作していると判定し、左コントローラ3および右コントローラ4が異なる姿勢および/または異なる動きをしている場合にユーザが両手持ち操作方式を用いて操作していると判定することができる。
【0137】
第5の例として、左コントローラ3の動きおよび姿勢の少なくとも一方を検出する他の動き姿勢センサによって検出された左コントローラ3の動きおよび/または姿勢に基づいたデータと、右コントローラ4の動きおよび姿勢の少なくとも一方を検出する他の動き姿勢センサによって検出された右コントローラ4の動きおよび/または姿勢に基づいたデータとに基づいて、操作方式を判定する処理を行ってもよい。他の動き姿勢センサとしては、コントローラに生じる磁気の方向を検出する磁気センサ、コントローラから所定方向を撮像する撮像装置等が考えられる。この場合、左コントローラ3および右コントローラ4に生じる磁気の方向や左コントローラ3および/または右コントローラ4の撮像方向に応じて、左コントローラ3および右コントローラ4が同じ姿勢および/または同じ動きをしている場合にユーザが拡張グリップ操作方式を用いて操作していると判定し、左コントローラ3および右コントローラ4が異なる姿勢および/または異なる動きをしている場合にユーザが両手持ち操作方式を用いて操作していると判定することができる。
【0138】
また、上述した操作方式を判定する処理は、左コントローラ3および/または右コントローラ4が所定の動きをしている場合や所定の姿勢にある場合に、判定を行わずにその時点で設定されている過去の操作方式の判定結果を維持してもよい。例えば、上記ゲームの操作を行う場合に両手持ち操作方式を用いた操作で多用されるコントローラの動きや姿勢であると推定される場合、両手持ち操作方式から拡張グリップ操作方式へ操作方式を変更するための処理(例えば、操作方式を判定する処理)を行わなくてもよい。また、上記ゲームの操作を行う場合に拡張グリップ操作方式を用いた操作で多用されるコントローラの動きや姿勢であると推定される場合、拡張グリップ操作方式から両手持ち操作方式へ操作方式を変更するための処理(例えば、操作方式を判定する処理)を行わなくてもよい。一例として、上述したゲーム例では、両手持ち操作方式を用いた操作において左コントローラ3および/または右コントローラ4を振り動かす操作が多用されるため、左コントローラ3および/または右コントローラ4に閾値を越える加速度が生じている場合は、操作方式を判定する処理を行わなくてもよい。また、上述したゲーム例では、両手持ち操作方式を用いた操作において左コントローラ3および/または右コントローラ4の長手方向を鉛直方向にする操作(すなわち、y軸負方向が鉛直方向に向く操作)が多用されるため、左コントローラ3および/または右コントローラ4のy軸負方向が鉛直方向付近を向いている場合は、操作方式を判定する処理を行わなくてもよい。
【0139】
次に、
図18〜
図23を参照して、本実施形態においてゲームシステム1で実行される具体的な処理の一例について説明する。
図18は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、
図18に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
【0140】
DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および右コントローラ4との間で無線通信するための通信プログラムや、左コントローラ3および/または右コントローラ4から取得したデータに基づいた情報処理(例えば、ゲーム処理)を行うためのアプリケーションプログラム、左コントローラ3および/または右コントローラ4を用いた操作方式を判定するための判定プログラム等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。CPU81は、DRAM85に記憶された各種プログラムPaを実行する。
【0141】
また、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDa、角速度データDb、加速度データDc、軸方向データDd、姿勢データDe、操作方式フラグデータDf、判定可能フラグデータDg、操作対応テーブルデータDh、プレイヤオブジェクト位置データDi、敵オブジェクト位置データDj、および画像データDkが記憶される。
【0142】
操作データDaは、左コントローラ3および/または右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、左コントローラ3および/または右コントローラ4からそれぞれ送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)が含まれている。本実施形態では、無線通信によって左コントローラ3および/または右コントローラ4からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaが適宜更新される。なお、操作データDaの更新周期は、後述するゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
【0143】
角速度データDbは、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータである。例えば、角速度データDbは、左コントローラ3および右コントローラ4それぞれに生じているxyz軸周りの角速度を示すデータ等を含んでいる。
【0144】
加速度データDcは、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータである。例えば、加速度データDcは、左コントローラ3および右コントローラ4それぞれに生じている重力加速度を除いて、xyz軸方向に生じている加速度を示すデータ等を含んでいる。
【0145】
軸方向データDdは、左コントローラ3および右コントローラ4それぞれの軸方向を示すデータである。例えば、軸方向データDdは、左コントローラ3および右コントローラ4それぞれのxyz軸周りの角速度を累積することによって得られるxyz軸各方向を示すデータ等を含んでいる。
【0146】
姿勢データDeは、実空間における重力加速度の方向を基準とした左コントローラ3および右コントローラ4それぞれの姿勢を示すデータである。例えば、姿勢データDeは、左コントローラ3および右コントローラ4それぞれに作用している重力加速度の方向を示すデータや、当該重力加速度方向に対するxyz軸方向を示すデータ等を含んでいる。
【0147】
操作方式フラグデータDfは、判定されて設定された操作方式(例えば、両手持ち操作方式、拡張グリップ操作方式)を示す操作方式フラグを示すデータであり、拡張グリップ操作方式が設定されている場合にオンに設定される。
【0148】
判定可能フラグデータDgは、操作方式を判定する処理が可能な状態である場合にオンに設定される判定可能フラグを示すデータである。
【0149】
操作対応テーブルデータDhは、操作に対応して行われる指示内容が操作方式毎に記述された操作対応テーブル(
図17参照)を示すデータである。
【0150】
プレイヤオブジェクト位置データDiは、第1オブジェクトG1、第2オブジェクトG2、およびプレイヤオブジェクトPOの仮想空間における位置および方向(移動方向)をそれぞれ示すデータである。敵オブジェクト位置データDjは、敵オブジェクトEOの仮想空間における位置および方向を示すデータや当該敵オブジェクトEOから放たれるオブジェクト(例えば、左グラブ(左拳)および右グラブ(右拳)を模したオブジェクト)の仮想空間における位置および方向を示すデータである。
【0151】
画像データDkは、ゲームの際に本体装置2のディスプレイ12や据置型モニタ6の表示画面に画像(例えば、仮想オブジェクトの画像、フィールド画像、背景画像)を表示するためのデータである。
【0152】
次に、
図19〜
図23を参照して、本実施形態における情報処理(ゲーム処理)の詳細な一例を説明する。
図19は、ゲームシステム1で実行されるゲーム処理の一例を示すフローチャートである。
図20は、
図19におけるステップS143において行われる操作方式判定処理の詳細の一例を示すサブルーチンである。
図21は、
図20におけるステップS162において行われる可否判定処理の詳細の一例を示すサブルーチンである。
図22は、
図19におけるステップS146において行われる両手持ちゲーム処理の詳細の一例を示すサブルーチンである。
図23は、
図19におけるステップS147において行われる拡張グリップゲーム処理の詳細の一例を示すサブルーチンである。本実施形態においては、
図19〜
図23に示す一連の処理は、CPU81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、
図19〜
図23に示すゲーム処理が開始されるタイミングは任意である。
【0153】
なお、
図19〜
図23に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち、
図19〜
図23に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
【0154】
図19において、CPU81は、ゲーム処理における初期設定を行い(ステップS141)、次のステップに処理を進める。例えば、上記初期設定では、CPU81は、以下に説明する処理を行うためのパラメータを初期化する。また、上記初期設定では、CPU81は、ゲームプレイを行うためのゲームフィールドを設定し、当該ゲームフィールド上のプレイヤオブジェクトPOや敵オブジェクトEOの初期位置を設定してプレイヤオブジェクト位置データDiおよび敵オブジェクト位置データDjを更新する。また、CPU81は、第1オブジェクトG1および第2オブジェクトG2の移動方向をデフォルト値(例えば、正面方向)に初期設定してプレイヤオブジェクト位置データDiを更新する。
【0155】
次に、CPU81は、左コントローラ3および/または右コントローラ4から操作データを取得して操作データDaを更新し(ステップS142)、次のステップに処理を進める。
【0156】
次に、CPU81は、操作方式判定処理を行い(ステップS143)、次のステップに処理を進める。以下、
図20を参照して、操作方式判定処理について説明する。
【0157】
図20において、CPU81は、左コントローラ3および右コントローラ4それぞれの加速度、軸方向、姿勢を算出し(ステップS161)、次のステップに処理を進める。
【0158】
例えば、上記ステップS161において、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれに生じているxyz軸方向の加速度から重力加速度成分を除去して、当該除去後の加速度を示すデータを用いて加速度データDcを更新する。重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ3および右コントローラ4それぞれに平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。
【0159】
また、上記ステップS161において、CPU81は、左コントローラ3および右コントローラ4それぞれに生じている角速度を累積することによって左コントローラ3および右コントローラ4それぞれの軸方向を算出し、当該軸方向を示すデータを用いて軸方向データDdを更新する。CPU81は、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータを操作データDaから取得し、左コントローラ3および右コントローラ4それぞれのxyz軸周りの角速度を算出して、当該角速度を累積することによって、左コントローラ3および右コントローラ4それぞれのxyz軸各方向を算出する。なお、後述により明らかとなるが、CPU81は、xyz軸各方向の変化量を算出するために、前回の処理において算出されている軸方向データも維持しておく。
【0160】
さらに、上記ステップS161において、CPU81は、左コントローラ3に対して算出された重力加速度の方向を基準とした左コントローラ3のxyz軸方向を左コントローラ3の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDeを更新する。また、CPU81は、右コントローラ4に対して算出された重力加速度の方向を基準とした右コントローラ4のxyz軸方向を右コントローラ4の姿勢として算出し、当該姿勢を示すデータを用いて姿勢データDeを更新する。ここで、CPU81は、重力加速度の方向周りにおける左コントローラ3および右コントローラ4の所定軸方向(例えば、x軸正方向)が一致するように、上記姿勢を補正して姿勢データDeを更新する。具体的には、CPU81は、左コントローラ3および右コントローラ4のx軸正方向の水平方向成分を算出し、当該水平方向成分の方向が一致するように左コントローラ3および右コントローラ4の姿勢の一方を重力加速度方向周りに回転させて補正する。
【0161】
なお、左コントローラ3や右コントローラ4の姿勢については、重力加速度を基準としたxyz軸方向が算出された以降は、xyz各軸周りの角速度のみに応じて更新してもよい。しかしながら、左コントローラ3や右コントローラ4の姿勢と重力加速度の方向との関係が誤差の累積によってずれていくことを防止するために、所定周期毎に重力加速度の方向に対するxyz軸方向を算出および上記補正を行って左コントローラ3や右コントローラ4の姿勢を修正してもよい。
【0162】
次に、CPU81は、可否判定処理を行い(ステップS162)、次のステップに処理を進める。以下、
図21を参照して、可否判定処理について説明する。
【0163】
図21において、CPU81は、操作方式判定処理を行うことを除外する除外姿勢か否かを判定する(ステップS181)。例えば、CPU81は、姿勢データDeを参照して左コントローラ3および右コントローラ4の姿勢を取得し、当該姿勢が上記除外姿勢に含まれるか否かを判定する。具体的には、左コントローラ3および/または右コントローラ4の長手方向が鉛直方向となる姿勢(すなわち、y軸負方向が鉛直方向に向いた姿勢)が除外姿勢に設定されている場合、CPU81は、姿勢データDeが示すy軸負方向が当該除外姿勢と認識される範囲に含まれているか否かによって上記ステップS181の判定処理を行う。そして、CPU81は、上記除外姿勢でない場合、ステップS182に処理を進める。一方、CPU81は、上記除外姿勢である場合、ステップS187に処理を進める。
【0164】
ステップS182において、CPU81は、左コントローラ3または右コントローラ4に生じている加速度が所定値以上であるか否かを判定する。例えば、CPU81は、加速度データDcを参照して左コントローラ3および右コントローラ4に生じている加速度の大きさを取得し、当該加速度の大きさの少なくとも一方が所定値より大きい場合に上記ステップS182において肯定判定する。ここで、例えば、上記所定値は、ユーザが左コントローラ3および/または右コントローラ4を動かした際に、左コントローラ3および/または右コントローラ4に生じる加速度を判別可能な閾値として設定される。そして、CPU81は、左コントローラ3および右コントローラ4に生じている加速度が何れも所定値未満である場合、ステップS183に処理を進める。一方、CPU81は、左コントローラ3および右コントローラ4に生じている加速度の少なくとも一方が所定値以上である場合、ステップS187に処理を進める。
【0165】
ステップS183において、CPU81は、判定可能フラグがオフに設定されているか否かを判定する。例えば、CPU81は、判定可能フラグデータDgを参照して、判定可能フラグがオフに設定されているか否かを判定する。そして、CPU81は、判定可能フラグがオフに設定されている場合、ステップS184に処理を進める。一方、CPU81は、判定可能フラグがオンに設定されている場合、当該サブルーチンによる処理を終了する。
【0166】
ステップS184において、CPU81は、一時変数T3に1を加算して、次のステップに処理を進める。ここで、一時変数T3は、操作方式判定処理を行うための左コントローラ3および右コントローラ4の安定時間を示すパラメータであり、上記ステップS184が実行される毎に1が加算されて当該安定時間が計測される。
【0167】
次に、CPU81は、一時変数T3が閾値A3に到達したか否かを判定する(ステップS185)。ここで、閾値A3は、左コントローラ3および右コントローラ4がともに安定状態であると判定するための時間(例えば、20フレーム)を示す値であり、例えばA3=20に設定される。そして、CPU81は、一時変数T3が閾値A3に到達した場合、ステップS186に処理を進める。一方、CPU81は、一時変数T3が閾値A3に到達していない場合、当該サブルーチンによる処理を終了する。
【0168】
ステップS186において、CPU81は、判定可能フラグをオンに設定して、当該サブルーチンによる処理を終了する。例えば、CPU81は、判定可能フラグがオンに設定して判定可能フラグデータDgを更新する。このように、CPU81は、上記除外姿勢でなく(ステップS181で否定判定)左コントローラ3および右コントローラ4が安定している(ステップS182で否定判定)状態が所定時間継続した場合(ステップS185で肯定判定)、判定可能フラグをオンに設定することによって、操作方式判定処理を実行可能な状態にする。
【0169】
一方、左コントローラ3または右コントローラ4が除外姿勢である場合(ステップS181で肯定判定)、または左コントローラ3および右コントローラ4に生じている加速度の少なくとも一方が所定値以上である場合(ステップS182で肯定判定)、CPU81は、一時変数T1、T2、およびT3を全て0に初期化して(ステップS187)、次のステップに処理を進める。ここで、後述により明らかとなるが、一時変数T1は、軸方向の変化量の差が所定範囲内にある時間を示すパラメータであり、一時変数T2は、変化量の差が所定範囲を越えている時間を示すパラメータである。
【0170】
次に、CPU81は、判定可能フラグをオフに設定して、当該サブルーチンによる処理を終了する。例えば、CPU81は、判定可能フラグをオフに設定して判定可能フラグデータDgを更新する。このように、CPU81は、上記除外姿勢である場合(ステップS181で肯定判定)、または左コントローラ3および右コントローラ4が安定していない場合(ステップS182で肯定判定)、判定可能フラグをオフに設定することによって、操作方式判定処理が実行できない状態にする。
【0171】
図20に戻り、上記ステップS162における可否判定処理の後、CPU81は、判定可能フラグがオンに設定されているか否かを判定する(ステップS163)。そして、CPU81は、判定可能フラグがオンに設定されている場合、ステップS164に処理を進める。一方、CPU81は、判定可能フラグがオフに設定されている場合、後述する操作方式判定処理を行わずに当該サブルーチンによる処理を終了する。
【0172】
ステップS164において、CPU81は、左コントローラ3の姿勢と右コントローラ4の姿勢とが一致しているか否かを判定する。そして、CPU81は、左コントローラ3の姿勢と右コントローラ4の姿勢とが一致している場合、ステップS165に処理を進める。一方、CPU81は、左コントローラ3の姿勢と右コントローラ4の姿勢とが一致していない場合、ステップS172に処理を進める。例えば、CPU81は、姿勢データDeを参照して左コントローラ3および右コントローラ4の姿勢を取得し、当該姿勢の差が所定範囲内である場合、上記ステップS164において肯定判定する。ここで、上記所定範囲は、実空間において左コントローラ3の姿勢と右コントローラ4の姿勢とが一致していると判定される各軸方向のズレ許容量である。本実施例では、xyz軸のうち、2軸(例えば、x軸とy軸)の一致度を判定するため、CPU81は、実空間における各コントローラのx軸方向同士のズレおよびy軸方向同士のズレの両方が上記所定範囲内である場合、上記ステップS164において肯定判定する。
【0173】
ステップS165において、CPU81は、軸方向の変化量が一致しているか否かを判定する。そして、CPU81は、軸方向の変化量が一致している場合、ステップS166に処理を進める。一方、CPU81は、軸方向の変化量が一致していない場合、ステップS173に処理を進める。例えば、CPU81は、軸方向データDdを参照して、左コントローラ3における軸方向の変化量と右コントローラ4における軸方向の変化量との差が所定範囲内である場合、上記ステップS165において肯定判定する。具体的には、CPU81は、前回の処理において設定されている左コントローラ3のx軸正方向と今回の処理において設定されている左コントローラ3のx軸正方向との角度差(変化量)と、前回の処理において設定されている右コントローラ4のx軸正方向と今回の処理において設定されている右コントローラ4のx軸正方向との角度差(変化量)とを比較して、所定範囲内であればx軸方向の変化量が一致しているとする。また、CPU81は、前回の処理において設定されている左コントローラ3のy軸正方向と今回の処理において設定されている左コントローラ3のy軸正方向との角度差(変化量)と、前回の処理において設定されている右コントローラ4のy軸正方向と今回の処理において設定されている右コントローラ4のy軸正方向との角度差(変化量)とを比較して、所定範囲内であればy軸方向の変化量が一致しているとする。そして、CPU81は、x軸方向の変化量およびy軸方向の変化量がどちらも一致していると判定された場合に、上記ステップS165において肯定判定する。
【0174】
ステップS166において、CPU81は、一時変数T2を0に初期化して、次のステップに処理を進める。
【0175】
次に、CPU81は、操作方式フラグがオフに設定されているか否かを判定する(ステップS167)。例えば、CPU81は、操作方式フラグデータDfを参照して、操作方式フラグがオフに設定されているか否かを判定する。そして、CPU81は、操作方式フラグがオフに設定されている場合、ステップS168に処理を進める。一方、CPU81は、操作方式フラグがオンに設定されている場合、当該サブルーチンによる処理を終了する。
【0176】
ステップS168において、CPU81は、一時変数T1に1を加算して、次のステップに処理を進める。ここで、一時変数T1は、軸方向の変化量の差が所定範囲内に維持されている時間を示すパラメータであり、上記ステップS168が実行される毎に1が加算されて当該時間が計測される。
【0177】
次に、CPU81は、一時変数T1が閾値A1に到達しているか否かを判定する(ステップS169)。ここで、閾値A1は、軸方向の変化量の差が所定範囲内にある状態が所定時間(例えば、30フレーム)連続して維持されたことを判定するための時間を示す値であり、例えばA1=30に設定される。そして、CPU81は、一時変数T1が閾値A1以上である場合、ステップS170に処理を進める。一方、CPU81は、一時変数T1が閾値A1に到達していない場合、当該サブルーチンによる処理を終了する。
【0178】
ステップS170において、CPU81は、所定の入力が行われたか否かを判定する。そして、CPU81は、所定の入力が行われた場合、ステップS171に処理を進める。一方、CPU81は、所定の入力が行われていない場合、当該サブルーチンによる処理を終了する。例えば、CPU81は、操作データDaを参照して、操作方式フラグがオンになると設定される操作方式、すなわち拡張グリップ操作方式において用いられる操作入力の何れかをユーザが行った場合、所定の入力が行われたと判定する。一例として、上述したゲーム例の場合、スティック32を傾倒したり押し込んだりする操作入力、Aボタン53、Bボタン54、Xボタン55、またはYボタン56を押下する操作入力が行われた場合、CPU81は、所定の入力が行われたと判定する。
【0179】
ステップS171において、CPU81は、操作方式フラグをオンに設定して、当該サブルーチンによる処理を終了する。例えば、CPU81は、操作方式フラグをオンに設定して操作方式フラグデータDfを更新する。このように、CPU81は、左コントローラ3および右コントローラ4の姿勢が一致して(ステップS164で肯定判定)、軸方向の変化量が一致している(ステップS165で肯定判定)時間(一時変数T1)が所定時間(閾値A1)継続した場合(ステップS169で肯定判定)、所定の入力が行われたことを契機として操作方式を拡張グリップ操作方式に切り替える(ステップS171で操作方式フラグをオン)。
【0180】
一方、上記ステップS164において左コントローラ3の姿勢と右コントローラ4の姿勢とが一致していないと判定された場合、CPU81は、一時変数T1およびT2を0に初期化して(ステップS172)、ステップS177に処理を進める。
【0181】
また、上記ステップS165において軸方向の変化量が一致していないと判定された場合、CPU81は、一時変数T1を0に初期化して(ステップS173)、次のステップに処理を進める。
【0182】
次に、CPU81は、操作方式フラグがオンに設定されているか否かを判定する(ステップS174)。例えば、CPU81は、操作方式フラグデータDfを参照して、操作方式フラグがオンに設定されているか否かを判定する。そして、CPU81は、操作方式フラグがオンに設定されている場合、ステップS175に処理を進める。一方、CPU81は、操作方式フラグがオフに設定されている場合、当該サブルーチンによる処理を終了する。
【0183】
ステップS175において、CPU81は、一時変数T2に1を加算して、次のステップに処理を進める。ここで、一時変数T2は、軸方向の変化量の差が所定範囲を越えた状態となっている時間を示すパラメータであり、上記ステップS174が実行される毎に1が加算されて当該時間が計測される。
【0184】
次に、CPU81は、一時変数T2が閾値A2に到達したか否かを判定する(ステップS176)。ここで、閾値A2は、軸方向の変化量の差が所定範囲を越えている状態が所定時間(例えば、5フレーム)連続する状態となったことを判定するための時間を示す値であり、例えばA2=5に設定される。そして、CPU81は、一時変数T2が閾値A2に到達した場合、ステップS177に処理を進める。一方、CPU81は、一時変数T2が閾値A2に到達していない場合、当該サブルーチンによる処理を終了する。
【0185】
ステップS177において、CPU81は、操作方式フラグをオフに設定して、当該サブルーチンによる処理を終了する。例えば、CPU81は、操作方式フラグをオフに設定して操作方式フラグデータDfを更新する。このように、CPU81は、左コントローラ3および右コントローラ4の姿勢が一致していない(ステップS164で否定判定)場合、即時に操作方式を両手持ち操作方式に切り替える(ステップS177で操作方式フラグをオフ)。また、CPU81は、軸方向の変化量が一致していない(ステップS165で否定判定)時間(一時変数T2)が所定時間(閾値A2)継続した場合(ステップS176で肯定判定)、操作方式を両手持ち操作方式に切り替える(ステップS177で操作方式フラグをオフ)。
【0186】
図19に戻り、上記ステップS143の操作方式判定処理の後、CPU81は、操作方式を設定し(ステップS144)、次のステップに処理を進める。例えば、CPU81は、操作方式フラグデータDfが示す操作方式フラグに応じて、ゲーム処理に用いる操作モードを設定する。例えば、ゲーム処理に用いる操作モードが設定されることによって、CPU81は、操作対応テーブルデータDhの記述内容から当該操作モードに応じた操作方式を以降のゲーム処理において選択して用いる設定を行う。
【0187】
次に、CPU81は、両手持ち操作方式が選択されているか否かを判定する(ステップS145)。そして、CPU81は、両手持ち操作方式が選択されている場合、ステップS146に処理を進める。一方、CPU81は、拡張グリップ操作方式が選択されている場合、ステップS147に処理を進める。
【0188】
ステップS146において、CPU81は、両手持ち操作モードによるゲーム処理を行い、ステップS148に処理を進める。以下、
図22を参照して、両手持ち操作モードによるゲーム処理について説明する。
【0189】
図22において、CPU81は、左コントローラ振り認識処理を行い(ステップS193)、次のステップに処理を進める。例えば、CPU81は、加速度データDcを参照して、現時点において左コントローラ3に生じているxy加速度の大きさが左コントローラ3の振り判定をするための閾値より大きい場合、左コントローラ3が振り動かされたと判定する。ここで、xy加速度は、左コントローラ3に生じている加速度のうち、z軸方向成分(つまり、
図8〜
図13を用いて説明した両手持ち操作方式による操作において、左コントローラ3の横方向成分)を除いた加速度である。
【0190】
次に、CPU81は、右コントローラ振り認識処理を行い(ステップS194)、次のステップに処理を進める。例えば、CPU81は、加速度データDcを参照して、現時点において右コントローラ4に生じているxy加速度の大きさが右コントローラ4の振り判定をするための閾値より大きい場合、右コントローラ4が振り動かされたと判定する。ここで、xy加速度は、右コントローラ4に生じている加速度のうち、z軸方向成分(つまり、
図8〜
図13を用いて説明した両手持ち操作方式による操作において、右コントローラ4の横方向成分)を除いた加速度である。
【0191】
次に、CPU81は、第1オブジェクト動作処理を行い(ステップS195)、次のステップに処理を進める。例えば、CPU81は、上記ステップS193において左コントローラ3が振り動かされたと判定されたことに応じて、移動開始位置からの第1オブジェクトG1の移動を開始し、重力加速度の方向に対する左コントローラ3のz軸方向の傾きに応じて、第1オブジェクトG1の移動方向を変化させる。具体的には、CPU81は、姿勢データDeを参照して左コントローラ3の姿勢を取得し、重力加速度の方向に対する当該左コントローラ3のz軸方向の傾きを算出する。さらに、CPU81は、重力加速度の方向周りの左コントローラ3の角速度に応じて、第1オブジェクトG1の移動方向を変化させる。具体的には、CPU81は、角速度データDbを参照して左コントローラ3に生じているxyz軸周りの角速度を取得し、当該角速度に基づいて重力加速度方向周りの左コントローラ3の角速度を算出する。そして、CPU81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDiを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDiを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
【0192】
次に、CPU81は、第2オブジェクト動作処理を行い(ステップS196)、次のステップに処理を進める。例えば、CPU81は、上記ステップS194において右コントローラ4が振り動かされたと判定されたことに応じて、移動開始位置からの第2オブジェクトG2の移動を開始し、重力加速度の方向に対する右コントローラ4のz軸方向の傾きに応じて、第2オブジェクトG2の移動方向を変化させる。具体的には、CPU81は、姿勢データDeを参照して右コントローラ4の姿勢を取得し、重力加速度の方向に対する当該右コントローラ4のz軸方向の傾きを算出する。さらに、CPU81は、重力加速度の方向周りの右コントローラ4の角速度に応じて、第2オブジェクトG2の移動方向を変化させる。具体的には、CPU81は、角速度データDbを参照して右コントローラ4に生じているxyz軸周りの角速度を取得し、当該角速度に基づいて重力加速度方向周りの右コントローラ4の角速度を算出する。そして、CPU81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDiを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDiを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
【0193】
次に、CPU81は、プレイヤオブジェクト動作処理を行い(ステップS197)、当該サブルーチンによる処理を終了する。例えば、CPU81は、操作対応テーブルデータDhが示す操作対応テーブルの両手持ち操作モードに対応する記述内容に基づいて、上記ステップS142において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDiを更新する。すなわち、CPU81は、姿勢データDeを参照して、左コントローラ3および右コントローラ4の両方が左に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDiを更新する。CPU81は、姿勢データDeを参照して、左コントローラ3および右コントローラ4の両方が右に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDiを更新する。CPU81は、姿勢データDeを参照して、左コントローラ3および右コントローラ4の両方が前方に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDiを更新する。CPU81は、姿勢データDeを参照して、左コントローラ3および右コントローラ4の両方が後方に傾けられている場合、当該傾斜角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDiを更新する。そして、CPU81は、姿勢データDeを参照して、左コントローラ3および右コントローラ4の両方が内側に傾けられている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、第1Lボタン38が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDiを更新する。また、操作データDaを参照して、第1Rボタン60が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDiを更新する。
【0194】
図19に戻り、上記ステップS145において両手持ち操作方式が選択されていないと判定した場合、CPU81は、拡張グリップ操作モードによるゲーム処理を行い(ステップS147)、ステップS148に処理を進める。以下、
図23を参照して、拡張グリップ操作モードによるゲーム処理について説明する。
【0195】
図23において、CPU81は、第1オブジェクト動作処理を行い(ステップS202)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDhが示す操作対応テーブルの拡張グリップ操作モードに対応する記述内容に基づいて、上記ステップS142において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第1オブジェクトG1を動作させて、プレイヤオブジェクト位置データDiを更新する。
【0196】
例えば、CPU81は、上記ステップS142において取得した操作データがBボタン54の押下操作を示している場合、移動開始位置から所定方向への第1オブジェクトG1の移動を開始して、プレイヤオブジェクト位置データDiを更新する。また、CPU81は、上記ステップS142において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第1オブジェクトG1が移動中であればアナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第1オブジェクトG1の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDiを更新する。そして、CPU81は、第1オブジェクトG1の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第1オブジェクトG1の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDiを参照して第1オブジェクトG1の位置および移動方向を取得し、当該第1オブジェクトG1の位置から当該移動方向および移動アルゴリズムに基づいて第1オブジェクトG1を移動させ、当該移動後の第1オブジェクトG1の位置を用いてプレイヤオブジェクト位置データDiを更新する。なお、第1オブジェクトG1が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第1オブジェクトG1の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第1オブジェクトG1が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第1オブジェクトG1の位置が設定される。また、プレイヤオブジェクトPOが左パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第1オブジェクトG1の位置が設定される。
【0197】
次に、CPU81は、第2オブジェクト動作処理を行い(ステップS203)、次のステップに処理を進める。例えば、CPU81は、操作対応テーブルデータDhが示す操作対応テーブルの拡張グリップ操作モードに対応する記述内容に基づいて、上記ステップS142において取得した操作データが示す指示内容を設定し、当該指示内容に応じて第2オブジェクトG2を動作させて、プレイヤオブジェクト位置データDiを更新する。
【0198】
例えば、CPU81は、上記ステップS142において取得した操作データがAボタン53の押下操作を示している場合、移動開始位置から所定方向への第2オブジェクトG2の移動を開始して、プレイヤオブジェクト位置データDiを更新する。また、CPU81は、上記ステップS142において取得した操作データがアナログスティック32の傾倒操作を示している場合、移動開始位置から離れて仮想ゲーム世界を第2オブジェクトG2が移動中であればアナログスティック32が傾倒操作されている方向および傾倒角度に応じて、第2オブジェクトG2の移動方向や移動速度を変化させて、プレイヤオブジェクト位置データDiを更新する。そして、CPU81は、第2オブジェクトG2の移動方向および移動アルゴリズムに基づいて、移動開始位置に戻るまで第2オブジェクトG2の移動を継続する。例えば、CPU81は、プレイヤオブジェクト位置データDiを参照して第2オブジェクトG2の位置および移動方向を取得し、当該第2オブジェクトG2の位置から当該移動方向および移動アルゴリズムに基づいて第2オブジェクトG2を移動させ、当該移動後の第2オブジェクトG2の位置を用いてプレイヤオブジェクト位置データDiを更新する。なお、第2オブジェクトG2が移動開始位置に戻る仮想空間内の復路を移動している場合、現在の第2オブジェクトG2の位置から移動開始位置に戻る方向に移動方向を固定して設定してもよい。また、第2オブジェクトG2が他のオブジェクトと衝突した場合、当該衝突状況に応じた位置に第2オブジェクトG2の位置が設定される。また、プレイヤオブジェクトPOが右パンチを繰り出す動作をしていない場合、プレイヤオブジェクトPOの位置に基づいた移動開始位置に第2オブジェクトG2の位置が設定される。
【0199】
次に、CPU81は、プレイヤオブジェクト動作処理を行い(ステップS204)、当該サブルーチンによる処理を終了する。例えば、CPU81は、操作対応テーブルデータDhが示す操作対応テーブルの拡張グリップ操作モードに対応する記述内容に基づいて、上記ステップS142において取得した操作データが示す指示内容を設定し、当該指示内容に応じてプレイヤオブジェクトPOを動作させて、プレイヤオブジェクト位置データDiを更新する。すなわち、CPU81は、操作データDaを参照して、アナログスティック32がx軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを左に移動させて、プレイヤオブジェクト位置データDiを更新する。CPU81は、操作データDaを参照して、アナログスティック32がx軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを右に移動させて、プレイヤオブジェクト位置データDiを更新する。CPU81は、操作データDaを参照して、アナログスティック32がy軸正方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを前方に移動させて、プレイヤオブジェクト位置データDiを更新する。CPU81は、操作データDaを参照して、アナログスティック32がy軸負方向へ傾倒操作されている場合、当該傾倒角度に応じた移動速度でプレイヤオブジェクトPOを後方に移動させて、プレイヤオブジェクト位置データDiを更新する。そして、CPU81は、操作データDaを参照して、アナログスティック32を押し込む操作が行われている場合、第1オブジェクトG1および第2オブジェクトG2が移動開始位置に配置されていれば、プレイヤオブジェクトPOに防御動作させる。また、操作データDaを参照して、Yボタン56が押下されている場合、プレイヤオブジェクトPOをダッシュで移動させて、プレイヤオブジェクト位置データDiを更新する。また、操作データDaを参照して、Xボタン55が押下されている場合、プレイヤオブジェクトPOをジャンプさせて、プレイヤオブジェクト位置データDiを更新する。
【0200】
図19に戻り、ステップS148において、CPU81は、表示制御処理を行い、次のステップに処理を進める。例えば、CPU81は、プレイヤオブジェクト位置データDi、および敵オブジェクト位置データDjを用いて、ゲームフィールド上にプレイヤオブジェクトPO、第1オブジェクトG1、第2オブジェクトG2、敵オブジェクトEOを配置する。そして、CPU81は、所定の位置(例えば、プレイヤオブジェクトPOの背後)に配置された仮想カメラからゲームフィールドを見た仮想空間画像を生成し、当該仮想空間画像を表示装置(例えば、据置型モニタ6)の表示画面に表示する処理を行う。
【0201】
次に、CPU81は、ゲームを終了するか否かを判定する(ステップS149)。上記ステップS149においてゲームを終了する条件としては、例えば、上記ゲームの結果が確定したことや、ユーザがゲームを終了する操作を行ったこと等がある。CPU81は、ゲームを終了しない場合に上記ステップS142に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップS142〜ステップS149の一連の処理は、ステップS149でゲームを終了すると判定されるまで繰り返し実行される。なお、繰り返し実行されるステップS142〜ステップS149の一連の処理から明らかなように、上記ステップS143における操作方式判定処理がゲーム開始後であっても繰り返し実行される。すなわち、本実施例では、ゲーム中にユーザが操作方式を変更した場合、当該変更後の操作方式に基づいたゲームモードでゲームを継続することができる。
【0202】
このように、本実施例においては、左コントローラ3および右コントローラ4の両方を用いて操作する場合、それぞれの動きや姿勢に基づいて、どのような操作方式(両手持ち操作方式または拡張グリップ操作方式)で操作されているのか判定することができる。また、左コントローラ3および右コントローラ4の動きや姿勢に基づいた操作方式の判定が可能であるため、拡張グリップ350と左コントローラ3および右コントローラ4との間で電気的接続がない場合であっても、左コントローラ3および右コントローラ4が拡張グリップ350に装着されているか否かを判定することが可能となる。
【0203】
なお、上述した実施例では、所定の操作入力を契機として両手持ち操作方式から拡張グリップ操作方式へ切り替えており、拡張グリップ操作方式から両手持ち操作方式への切り替える際は操作入力を必要としていない。これはゲーム内容に応じてそれぞれの操作モードで用いる操作入力に応じて適宜設定すればよく、操作入力がない場合であっても両手持ち操作方式から拡張グリップ操作方式へ切り替えてもかまわないし、所定の操作入力を契機として拡張グリップ操作方式から両手持ち操作方式へ切り替えてもかまわない。
【0204】
また、上述した実施例では、左コントローラ3および右コントローラ4に定義されているxyz軸のうち、長手方向(y軸方向)の変化量の差および左右方向(x軸方向)の変化量の差を用いて、軸方向の変化量の差を判定しているが、他の2軸の変化量を用いてもよい。また、高い判定精度が要求されない場合、左コントローラ3および右コントローラ4に定義されているxyz軸方向のうち、1軸のみを用いて軸方向の変化量を判定してもよい。この場合、xyz軸のうち、判定に用いる1軸は、ゲーム内容に応じて多用される左コントローラ3および右コントローラ4の姿勢や動きに基づいて選択すればよい。
【0205】
また、上述した実施例では、左コントローラ3および右コントローラ4の姿勢を算出する際、x軸正方向の水平方向成分の方向が一致するように左コントローラ3および右コントローラ4の姿勢の一方を重力加速度方向周りに回転させて常時補正を行っているが、当該補正処理を行わなくてもよい。例えば、所定の条件が満たされた場合(例えば、左コントローラ3および右コントローラ4が拡張グリップ350に装着された場合)に左コントローラ3および右コントローラ4の各軸方向を一致させ、その後の軸方向は、検出された各速度に応じて変化させる。このように、各軸方向の関係が固定される状態において当該各軸方向の位置関係を設定することによって、上述した常時補正する処理を行わなくても同様の判定が可能となるだけでなく、左コントローラ3および右コントローラ4の左右方向に対する向きを考慮した判定も可能となる。
【0206】
また、上述した実施例では、左コントローラ3および右コントローラ4が装着可能なアタッチメントの一例として、左コントローラ3および右コントローラ4が同じ向きに装着される拡張グリップ350を用いたが、左コントローラ3および右コントローラ4が異なる向きに装着されるアタッチメントに対する装着を判定してもよい。一例として、銃身部分に左コントローラ3および右コントローラ4の一方を装着し、銃把部分に左コントローラ3および右コントローラ4の他方を装着する銃型アタッチメントでもよい。この場合、長手方向が銃身部分の弾丸発射方向となるように一方のコントローラが銃身部分に装着され、左右方向が把持されるように他方のコントローラが銃把部分に装着されることによって、左コントローラ3および右コントローラ4が異なる向きで銃型アタッチメントに装着されることになる。このような銃型アタッチメントであっても、装着された際の左コントローラ3および右コントローラ4の姿勢を予め設定して、上述した姿勢の一致判定を当該設定された姿勢となっているか否かの判定に代えることによって、左コントローラ3および右コントローラ4の動きや姿勢に基づいて、銃型アタッチメントに装着された状態で操作されているか否かを判定することができる。
【0207】
また、上述した説明では、操作方式判定処理を本体装置2側で行う例を用いたが、当該操作方式判定処理の少なくとも一部を左コントローラ3および/または右コントローラ4において行ってもよい。例えば、左コントローラ3の姿勢を算出する処理、左コントローラ3の軸方向や軸方向の変化量を算出する処理、左コントローラ3に生じている加速度(重力加速度)を算出する処理等を左コントローラ3内で行ってもよいし、右コントローラ4の姿勢を算出する処理、右コントローラ4の軸方向や軸方向の変化量を算出する処理、右コントローラ4に生じている加速度(重力加速度)を算出する処理等を右コントローラ4内で行ってもよい。一例として、左コントローラ3および右コントローラ4において、それぞれの姿勢を算出する処理を行う場合、当該コントローラ内にそれぞれ設けられた処理部において当該処理を行う。上記処理部は、コントローラに設けられた加速度センサが検出した加速度データに基づいて当該コントローラに生じる重力加速度の方向を算出し、当該重力加速度の方向を基準とした当該コントローラのxyz軸の方向を算出する。そして、上記処理部は、コントローラに設けられた角速度センサが検出した各軸周りの角速度を用いて上記重力加速度の方向を基準としたxyz軸方向を変化させることによって、当該コントローラの姿勢を逐次算出し、本体装置2へ当該姿勢を示すデータを送信する。これによって、本体装置2は、左コントローラ3および右コントローラ4の姿勢を取得して、当該姿勢算出以降の処理を行うことによって、上述した操作方式判定処理を行うことが可能となる。
【0208】
また、上述した実施例では、1人のユーザが両手持ち操作方式または拡張グリップ操作方式によって左コントローラ3および右コントローラ4を用いてゲームプレイする例を用いたが、複数のユーザがゲームプレイすることも考えられる。この場合、それぞれのユーザが用いる左コントローラ3および右コントローラ4の組に対して、それぞれの操作方式を判定し当該操作方式に応じたゲーム処理を行えばよい。
【0209】
また、上述した実施例では、左コントローラ3および右コントローラ4がアタッチメントの一例である拡張グリップ350に装着された状態で操作(拡張グリップ操作方式)されているか、本体装置2および拡張グリップ350から離脱した状態で操作(両手持ち操作方式)されているかを判定する例を用いたが、アタッチメントとは異なる装置に対する装着有無を判定するものであってもよい。例えば、上述したゲーム処理や操作方式の判定を行う情報処理装置(上記実施例では、本体装置2)に装着された状態で左コントローラ3および右コントローラ4が操作されているか、当該情報処理装置から離脱した状態で操作されているかを、左コントローラ3および右コントローラ4の動きや姿勢に基づいて判定してもよい。上述した実施例では、左コントローラ3および右コントローラ4が本体装置2に装着された場合に左コントローラ3および右コントローラ4と本体装置2とが電気的接続されて有線通信が可能となり、当該有線通信が可能か否かによって本体装置2への装着有無が判定可能である。しかしながら、左コントローラ3および右コントローラ4が上記情報処理装置に装着されたとしても電気的接続がなく、これらの装置の間で有線通信する機能がない場合、上記情報処理装置に装着されているか否かに関わらず左コントローラ3および右コントローラ4と上記情報処理装置との間で常に無線通信が行われる場合が考えられる。このような態様であっても、上記情報処理装置は、左コントローラ3および右コントローラ4が当該情報処理装置に装着された状態で操作されているのか、左コントローラ3および右コントローラ4が当該情報処理装置から離脱した状態で操作されているのか、左コントローラ3および右コントローラ4の動きや姿勢に基づいて上記操作方式判定処理を用いて判定可能となるため、同様に操作方法の判定が可能となる。
【0210】
また、上述した実施例では、アタッチメント(拡張グリップ350)に対して複数のコントローラ(左コントローラ3および右コントローラ4)が装着されているか否かを判定する例を用いたが、一方のコントローラがアタッチメントに装着されているか否かを判定してもよい。一例として、右コントローラ4が既に装着されているまたは固定されている拡張グリップ350に対して、左コントローラ3が装着されているか否かを判定する場合であっても、左コントローラ3および右コントローラ4から送信されるが動き姿勢センサの検出結果(例えば、加速度データおよび/または角速度データ)を本体装置2が受信することによって、本体装置2側において左コントローラ3が拡張グリップ350に装着されているか否かを判定することが可能となる。この場合、左コントローラ3の装着判定が行われた後においては、右コントローラ3から送信される操作データを用いなくてもかまわない。他の例として、右コントローラ4に含まれている動き姿勢センサ(例えば、加速度センサ114および/または角速度センサ115)と同様のセンサを設けた拡張グリップ350に対して、左コントローラ3が装着されているか否かを判定する場合が考えられる。この場合、左コントローラ3および拡張グリップ350から動き姿勢センサの検出結果(例えば、加速度データおよび/または角速度データ)を本体装置2に送信することによって、当該検出結果を受信した本体装置2側において左コントローラ3が拡張グリップ350に装着されているか否かを判定することが可能となる。
【0211】
また、上述した実施例において、左コントローラ3や右コントローラ4の動きや姿勢を検出する方法については、単なる一例であって、他の方法や他のデータを用いて左コントローラ3や右コントローラ4の動きや姿勢を検出してもよい。また、上述した実施例では、左コントローラ3や右コントローラ4を用いた操作に応じたゲーム画像を据置型モニタ6に表示しているが、本体装置2のディスプレイ12に表示してもよい。また、第1オブジェクトG1および/または第2オブジェクトG2の動作を制御するためのコントローラは、左コントローラ3および右コントローラ4のセットだけでなく、他のコントローラが組み合わせられたり、他のコントローラ同士が組み合わせられたりしてもよい。
【0212】
また、他の実施形態においては、本体装置2は、据置型モニタ6と直接通信可能であってもよい。例えば、本体装置2と据置型モニタ6とが直接有線通信または直接無線通信を行うことが可能であってもよい。この場合、本体装置2は、本体装置2と据置型モニタ6とが直接通信可能か否かに基づいて画像の表示先を決定してもよい。
【0213】
また、付加装置(例えば、クレードル)は、本体装置2を着脱可能な任意の付加装置であってよい。付加装置は、本実施形態のように、本体装置2に対する充電を行う機能を有していてもよいし、有していなくてもよい。
【0214】
また、ゲームシステム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。
【0215】
また、上述した説明では情報処理(ゲーム処理)をゲームシステム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理(ゲーム処理)は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、ゲームシステム1のCPU81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
【0216】
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
【0217】
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
【0218】
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
【0219】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。