以下、本実施形態の一例に係る情報処理システムについて説明する。本実施形態における情報処理システムは、一例としてゲームシステム1を用いている。図1は、ゲームシステム1に含まれる各装置の一例を示す図である。図1に示すように、ゲームシステム1は、本体装置2と、左コントローラ3および右コントローラ4と、リング型拡張装置5と、ベルト型拡張装置6とを含む。
本体装置2は、情報処理装置の一例であり、本実施形態ではゲーム機本体として機能する。本体装置2には、左コントローラ3および右コントローラ4がそれぞれ着脱可能である(図1および図3参照)。つまり、ユーザは、左コントローラ3および右コントローラ4をそれぞれ本体装置2に装着して一体化された装置として使用することができる(図2参照)。また、ユーザは、本体装置2と左コントローラ3および右コントローラ4とを別体として使用することもできる(図3参照)。なお、以下においては、本体装置2と各コントローラ3および4とをまとめて、「ゲーム装置」と呼ぶことがある。
リング型拡張装置5は、右コントローラ4に用いられる拡張装置の一例である。リング型拡張装置5は、右コントローラ4をリング型拡張装置5に装着した状態で使用される。また、ベルト型拡張装置6は、左コントローラ3に用いられる拡張装置の一例である。ベルト型拡張装置6は、左コントローラ3をベルト型拡張装置6に装着した状態で使用される。このように、本実施形態においては、ユーザは、各コントローラ3および4を各拡張装置に装着した状態で使用することもできる(図12参照)。なお、リング型拡張装置5は、右コントローラ4に限らず、左コントローラ3を自身に装着することが可能であってもよい。ベルト型拡張装置6は、左コントローラ3に限らず、右コントローラ4を自身に装着することが可能であってもよい。なお、後述するように、リング型拡張装置5およびベルト型拡張装置6は、右コントローラ4および左コントローラ3それぞれの機能や使用態様を拡張または変更することが可能となる拡張装置として機能するが、それぞれ単に周辺機器として呼称してもかまわない。
図2は、本体装置2に左コントローラ3および右コントローラ4を装着した状態の一例を示す図である。図2に示すように、左コントローラ3および右コントローラ4は、それぞれ本体装置2に装着されて一体化されている。本体装置2は、ゲームシステム1における各種の処理(例えば、ゲーム処理)を実行する装置である。本体装置2は、ディスプレイ12を備える。左コントローラ3および右コントローラ4は、ユーザが入力を行うための操作部を備える装置である。
図3は、本体装置2から左コントローラ3および右コントローラ4をそれぞれ外した状態の一例を示す図である。図2および図3に示すように、左コントローラ3および右コントローラ4は、本体装置2に着脱可能である。なお、以下において、左コントローラ3および右コントローラ4の総称として「コントローラ」と記載することがある。
図4は、本体装置2の一例を示す六面図である。図4に示すように、本体装置2は、略板状のハウジング11を備える。本実施形態において、ハウジング11の主面(換言すれば、表側の面、すなわち、ディスプレイ12が設けられる面)は、大略的には矩形形状である。
なお、ハウジング11の形状および大きさは、任意である。一例として、ハウジング11は、携帯可能な大きさであってよい。また、本体装置2単体または本体装置2に左コントローラ3および右コントローラ4が装着された一体型装置は、携帯型装置となってもよい。また、本体装置2または一体型装置が手持ち型の装置となってもよい。また、本体装置2または一体型装置が可搬型装置となってもよい。
図4に示すように、本体装置2は、ハウジング11の主面に設けられるディスプレイ12を備える。ディスプレイ12は、本体装置2が生成した画像を表示する。本実施形態においては、ディスプレイ12は、液晶表示装置(LCD)とする。ただし、ディスプレイ12は任意の種類の表示装置であってよい。
また、本体装置2は、ディスプレイ12の画面上にタッチパネル13を備える。本実施形態においては、タッチパネル13は、マルチタッチ入力が可能な方式(例えば、静電容量方式)のものである。ただし、タッチパネル13は、任意の種類のものであってよく、例えば、シングルタッチ入力が可能な方式(例えば、抵抗膜方式)のものであってもよい。
本体装置2は、ハウジング11の内部においてスピーカ(すなわち、図7に示すスピーカ88)を備えている。図4に示すように、ハウジング11の主面には、スピーカ孔11aおよび11bが形成される。そして、スピーカ88の出力音は、これらのスピーカ孔11aおよび11bからそれぞれ出力される。
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
図4に示すように、本体装置2は、スロット23を備える。スロット23は、ハウジング11の上側面に設けられる。スロット23は、所定の種類の記憶媒体を装着可能な形状を有する。所定の種類の記憶媒体は、例えば、ゲームシステム1およびそれと同種の情報処理装置に専用の記憶媒体(例えば、専用メモリカード)である。所定の種類の記憶媒体は、例えば、本体装置2で利用されるデータ(例えば、アプリケーションのセーブデータ等)、および/または、本体装置2で実行されるプログラム(例えば、アプリケーションのプログラム等)を記憶するために用いられる。また、本体装置2は、電源ボタン28を備える。
本体装置2は、下側端子27を備える。下側端子27は、本体装置2がクレードルと通信を行うための端子である。本実施形態において、下側端子27は、USBコネクタ(より具体的には、メス側コネクタ)である。上記一体型装置または本体装置2単体をクレードルに載置した場合、ゲームシステム1は、本体装置2が生成して出力する画像を据置型モニタに表示することができる。また、本実施形態においては、クレードルは、載置された上記一体型装置または本体装置2単体を充電する機能を有する。また、クレードルは、ハブ装置(具体的には、USBハブ)の機能を有する。
図5は、左コントローラ3の一例を示す六面図である。図5に示すように、左コントローラ3は、ハウジング31を備える。本実施形態においては、ハウジング31は、縦長の形状、すなわち、上下方向(すなわち、図2および図5に示すy軸方向)に長い形状である。左コントローラ3は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング31は、縦長となる向きで把持される場合に片手、特に左手で把持可能な形状および大きさをしている。また、左コントローラ3は、横長となる向きで把持されることも可能である。左コントローラ3が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
左コントローラ3は、アナログスティック32を備える。図5に示すように、アナログスティック32は、ハウジング31の主面に設けられる。アナログスティック32は、方向を入力することが可能な方向入力部として用いることができる。ユーザは、アナログスティック32を傾倒することによって傾倒方向に応じた方向の入力(および、傾倒した角度に応じた大きさの入力)が可能である。なお、左コントローラ3は、方向入力部として、アナログスティックに代えて、十字キーまたはスライド入力が可能なスライドスティック等を備えるようにしてもよい。また、本実施形態においては、アナログスティック32を押下する入力が可能である。
左コントローラ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プログラムやアプリケーションプログラム)に応じた指示を行うために用いられる。
また、左コントローラ3は、左コントローラ3が本体装置2と有線通信を行うための端子42を備える。
図6は、右コントローラ4の一例を示す六面図である。図6に示すように、右コントローラ4は、ハウジング51を備える。本実施形態においては、ハウジング51は、縦長の形状、すなわち、上下方向に長い形状である。右コントローラ4は、本体装置2から外された状態において、縦長となる向きで把持されることも可能である。ハウジング51は、縦長となる向きで把持される場合に片手、特に右手で把持可能な形状および大きさをしている。また、右コントローラ4は、横長となる向きで把持されることも可能である。右コントローラ4が横長となる向きで把持される場合には、両手で把持されるようにしてもよい。
右コントローラ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を備える。
また、ハウジング51の下側面には、窓部68が設けられる。詳細は後述するが、右コントローラ4は、ハウジング51の内部に配置される赤外撮像部123および赤外発光部124を備えている。赤外撮像部123は、右コントローラ4の下方向(図6に示すy軸負方向)を撮像方向として、窓部68を介して右コントローラ4の周囲を撮像する。赤外発光部124は、右コントローラ4の下方向(図6に示すy軸負方向)を中心とする所定範囲を照射範囲として、赤外撮像部123が撮像する撮像対象に窓部68を介して赤外光を照射する。窓部68は、赤外撮像部123のカメラのレンズや赤外発光部124の発光体等を保護するためのものであり、当該カメラが検知する波長の光や当該発光体が照射する光を透過する材質(例えば、透明な材質)で構成される。なお、窓部68は、ハウジング51に形成された孔であってもよい。なお、本実施形態においては、カメラが検知する光(本実施形態においては、赤外光)以外の波長の光の透過を抑制するフィルタ部材を赤外撮像部123自身が有する。ただし、他の実施形態においては、窓部68がフィルタの機能を有していてもよい。
また、右コントローラ4は、右コントローラ4が本体装置2と有線通信を行うための端子64を備える。
図7は、本体装置2の内部構成の一例を示すブロック図である。本体装置2は、図4に示す構成の他、図7に示す各構成要素81〜91、97、および98を備える。これらの構成要素81〜91、97、および98のいくつかは、電子部品として電子回路基板上に実装されてハウジング11内に収納されてもよい。
本体装置2は、プロセッサ81を備える。プロセッサ81は、本体装置2において実行される各種の情報処理を実行する情報処理部であって、例えば、CPU(Central Processing Unit)のみから構成されてもよいし、CPU機能、GPU(Graphics Processing Unit)機能等の複数の機能を含むSoC(System−on−a−chip)から構成されてもよい。プロセッサ81は、記憶部(具体的には、フラッシュメモリ84等の内部記憶媒体、あるいは、スロット23に装着される外部記憶媒体等)に記憶される情報処理プログラム(例えば、ゲームプログラム)を実行することによって、各種の情報処理を実行する。
本体装置2は、自身に内蔵される内部記憶媒体の一例として、フラッシュメモリ84およびDRAM(Dynamic Random Access Memory)85を備える。フラッシュメモリ84およびDRAM85は、プロセッサ81に接続される。フラッシュメモリ84は、主に、本体装置2に保存される各種のデータ(プログラムであってもよい)を記憶するために用いられるメモリである。DRAM85は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
本体装置2は、スロットインターフェース(以下、「I/F」と略記する。)91を備える。スロットI/F91は、プロセッサ81に接続される。スロットI/F91は、スロット23に接続され、スロット23に装着された所定の種類の記憶媒体(例えば、専用メモリカード)に対するデータの読み出しおよび書き込みを、プロセッサ81の指示に応じて行う。
プロセッサ81は、フラッシュメモリ84およびDRAM85、ならびに上記各記憶媒体との間でデータを適宜読み出したり書き込んだりして、上記の情報処理を実行する。
本体装置2は、ネットワーク通信部82を備える。ネットワーク通信部82は、プロセッサ81に接続される。ネットワーク通信部82は、ネットワークを介して外部の装置と通信(具体的には、無線通信)を行う。本実施形態においては、ネットワーク通信部82は、第1の通信態様としてWi−Fiの規格に準拠した方式により、無線LANに接続して外部装置と通信を行う。また、ネットワーク通信部82は、第2の通信態様として所定の通信方式(例えば、独自プロトコルによる通信や、赤外線通信)により、同種の他の本体装置2との間で無線通信を行う。なお、上記第2の通信態様による無線通信は、閉ざされたローカルネットワークエリア内に配置された他の本体装置2との間で無線通信可能であり、複数の本体装置2の間で直接通信することによってデータが送受信される、いわゆる「ローカル通信」を可能とする機能を実現する。
本体装置2は、コントローラ通信部83を備える。コントローラ通信部83は、プロセッサ81に接続される。コントローラ通信部83は、左コントローラ3および/または右コントローラ4と無線通信を行う。本体装置2と左コントローラ3および右コントローラ4との通信方式は任意であるが、本実施形態においては、コントローラ通信部83は、左コントローラ3との間および右コントローラ4との間で、Bluetooth(登録商標)の規格に従った通信を行う。
プロセッサ81は、上述の左側端子17、右側端子21、および下側端子27に接続される。プロセッサ81は、左コントローラ3と有線通信を行う場合、左側端子17を介して左コントローラ3へデータを送信するとともに、左側端子17を介して左コントローラ3から操作データを受信する。また、プロセッサ81は、右コントローラ4と有線通信を行う場合、右側端子21を介して右コントローラ4へデータを送信するとともに、右側端子21を介して右コントローラ4から操作データを受信する。また、プロセッサ81は、クレードルと通信を行う場合、下側端子27を介してクレードルへデータを送信する。このように、本実施形態においては、本体装置2は、左コントローラ3および右コントローラ4との間で、それぞれ有線通信と無線通信との両方を行うことができる。また、左コントローラ3および右コントローラ4が本体装置2に装着された一体型装置または本体装置2単体がクレードルに装着された場合、本体装置2は、クレードルを介してデータ(例えば、画像データや音声データ)を据置型モニタ等に出力することができる。
ここで、本体装置2は、複数の左コントローラ3と同時に(換言すれば、並行して)通信を行うことができる。また、本体装置2は、複数の右コントローラ4と同時に(換言すれば、並行して)通信を行うことができる。したがって、複数のユーザは、左コントローラ3および右コントローラ4のセットをそれぞれ用いて、本体装置2に対する入力を同時に行うことができる。一例として、第1ユーザが左コントローラ3および右コントローラ4の第1セットを用いて本体装置2に対して入力を行うと同時に、第2ユーザが左コントローラ3および右コントローラ4の第2セットを用いて本体装置2に対して入力を行うことが可能となる。
本体装置2は、タッチパネル13の制御を行う回路であるタッチパネルコントローラ86を備える。タッチパネルコントローラ86は、タッチパネル13とプロセッサ81との間に接続される。タッチパネルコントローラ86は、タッチパネル13からの信号に基づいて、例えばタッチ入力が行われた位置を示すデータを生成して、プロセッサ81へ出力する。
また、ディスプレイ12は、プロセッサ81に接続される。プロセッサ81は、(例えば、上記の情報処理の実行によって)生成した画像および/または外部から取得した画像をディスプレイ12に表示する。
本体装置2は、コーデック回路87およびスピーカ(具体的には、左スピーカおよび右スピーカ)88を備える。コーデック回路87は、スピーカ88および音声入出力端子25に接続されるとともに、プロセッサ81に接続される。コーデック回路87は、スピーカ88および音声入出力端子25に対する音声データの入出力を制御する回路である。
また、本体装置2は、加速度センサ89を備える。本実施形態においては、加速度センサ89は、所定の3軸(例えば、図2に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ89は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。
また、本体装置2は、角速度センサ90を備える。本実施形態においては、角速度センサ90は、所定の3軸(例えば、図2に示すxyz軸)回りの角速度を検出する。なお、角速度センサ90は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。
加速度センサ89および角速度センサ90は、プロセッサ81に接続され、加速度センサ89および角速度センサ90の検出結果は、プロセッサ81へ出力される。プロセッサ81は、上記の加速度センサ89および角速度センサ90の検出結果に基づいて、本体装置2の動きおよび/または姿勢に関する情報を算出することが可能である。
本体装置2は、電力制御部97およびバッテリ98を備える。電力制御部97は、バッテリ98およびプロセッサ81に接続される。また、図示しないが、電力制御部97は、本体装置2の各部(具体的には、バッテリ98の電力の給電を受ける各部、左側端子17、および右側端子21)に接続される。電力制御部97は、プロセッサ81からの指令に基づいて、バッテリ98から上記各部への電力供給を制御する。
また、バッテリ98は、下側端子27に接続される。外部の充電装置(例えば、クレードル)が下側端子27に接続され、下側端子27を介して本体装置2に電力が供給される場合、供給された電力がバッテリ98に充電される。
図8は、本体装置2と左コントローラ3および右コントローラ4との内部構成の一例を示すブロック図である。なお、本体装置2に関する内部構成の詳細については、図7で示しているため図8では省略している。
左コントローラ3は、本体装置2との間で通信を行う通信制御部101を備える。図8に示すように、通信制御部101は、端子42を含む各構成要素に接続される。本実施形態においては、通信制御部101は、端子42を介した有線通信と、端子42を介さない無線通信との両方で本体装置2と通信を行うことが可能である。通信制御部101は、左コントローラ3が本体装置2に対して行う通信方法を制御する。すなわち、左コントローラ3が本体装置2に装着されている場合、通信制御部101は、端子42を介して本体装置2と通信を行う。また、左コントローラ3が本体装置2から外されている場合、通信制御部101は、本体装置2(具体的には、コントローラ通信部83)との間で無線通信を行う。コントローラ通信部83と通信制御部101との間の無線通信は、例えばBluetooth(登録商標)の規格に従って行われる。
また、左コントローラ3は、例えばフラッシュメモリ等のメモリ102を備える。通信制御部101は、例えばマイコン(マイクロプロセッサとも言う)で構成され、メモリ102に記憶されるファームウェアを実行することによって各種の処理を実行する。
左コントローラ3は、各ボタン103(具体的には、ボタン33〜39、43、44、および47)を備える。また、左コントローラ3は、アナログスティック(図8では「スティック」と記載する)32を備える。各ボタン103およびアナログスティック32は、自身に対して行われた操作に関する情報を、適宜のタイミングで繰り返し通信制御部101へ出力する。
左コントローラ3は、慣性センサを備える。具体的には、左コントローラ3は、加速度センサ104を備える。また、左コントローラ3は、角速度センサ105を備える。本実施形態においては、加速度センサ104は、所定の3軸(例えば、図5に示すxyz軸)方向に沿った加速度の大きさを検出する。なお、加速度センサ104は、1軸方向あるいは2軸方向の加速度を検出するものであってもよい。本実施形態においては、角速度センサ105は、所定の3軸(例えば、図5に示すxyz軸)回りの角速度を検出する。なお、角速度センサ105は、1軸回りあるいは2軸回りの角速度を検出するものであってもよい。加速度センサ104および角速度センサ105は、それぞれ通信制御部101に接続される。そして、加速度センサ104および角速度センサ105の検出結果は、適宜のタイミングで繰り返し通信制御部101へ出力される。なお、左コントローラ3に備えられる慣性センサ(例えば、加速度センサ104や角速度センサ105)が第2入力装置の動きセンサの一例に相当する。
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
左コントローラ3は、振動によってユーザに通知を行うための振動子107を備える。本実施形態においては、振動子107は、本体装置2からの指令によって制御される。すなわち、通信制御部101は、本体装置2からの上記指令を受け取ると、当該指令に従って振動子107を駆動させる。ここで、左コントローラ3は、コーデック部106を備える。通信制御部101は、上記指令を受け取ると、指令に応じた制御信号をコーデック部106へ出力する。コーデック部106は、通信制御部101からの制御信号から振動子107を駆動させるための駆動信号を生成して振動子107へ与える。これによって振動子107が動作する。
振動子107は、より具体的にはリニア振動モータである。リニア振動モータは、回転運動をする通常のモータと異なり、入力される電圧に応じて所定方向に駆動されるため、入力される電圧の波形に応じた振幅および周波数で振動をさせることができる。本実施形態において、本体装置2から左コントローラ3に送信される振動制御信号は、単位時間ごとに周波数と振幅とを表すデジタル信号であってよい。別の実施形態においては、本体装置2から波形そのものを示す情報を送信するようにしてもよいが、振幅および周波数だけを送信することで通信データ量を削減することができる。また、さらにデータ量を削減するため、そのときの振幅および周波数の数値に替えて、前回の値からの差分だけを送信するようにしてもよい。この場合、コーデック部106は、通信制御部101から取得される振幅および周波数の値を示すデジタル信号をアナログの電圧の波形に変換し、当該波形に合わせて電圧を入力することで振動子107を駆動させる。したがって、本体装置2は、単位時間ごとに送信する振幅および周波数を変えることによって、そのときに振動子107を振動させる振幅および周波数を制御することができる。なお、本体装置2から左コントローラ3に送信される振幅および周波数は、1つに限らず、2つ以上送信するようにしてもよい。その場合、コーデック部106は、受信された複数の振幅および周波数それぞれが示す波形を合成することで、振動子107を制御する電圧の波形を生成することができる。
左コントローラ3は、電力供給部108を備える。本実施形態において、電力供給部108は、バッテリおよび電力制御回路を有する。図示しないが、電力制御回路は、バッテリに接続されるとともに、左コントローラ3の各部(具体的には、バッテリの電力の給電を受ける各部)に接続される。
図8に示すように、右コントローラ4は、本体装置2との間で通信を行う通信制御部111を備える。また、右コントローラ4は、通信制御部111に接続されるメモリ112を備える。通信制御部111は、端子64を含む各構成要素に接続される。通信制御部111およびメモリ112は、左コントローラ3の通信制御部101およびメモリ102と同様の機能を有する。したがって、通信制御部111は、端子64を介した有線通信と、端子64を介さない無線通信(具体的には、Bluetooth(登録商標)の規格に従った通信)との両方で本体装置2と通信を行うことが可能であり、右コントローラ4が本体装置2に対して行う通信方法を制御する。
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。なお、右コントローラ4に備えられる慣性センサ(例えば、加速度センサ114や角速度センサ115)が第1入力装置の動きセンサの一例に相当する。
また、右コントローラ4は、振動子117およびコーデック部116を備える。振動子117およびコーデック部116は、左コントローラ3の振動子107およびコーデック部106と同様に動作する。すなわち、通信制御部111は、本体装置2からの指令に従って、コーデック部116を用いて振動子117を動作させる。
また、右コントローラ4は、赤外撮像部123を備える。赤外撮像部123は、右コントローラ4の周囲を撮像する赤外線カメラを有する。一例として、本体装置2および/または右コントローラ4は、撮像された情報(例えば、撮像された撮像画像における少なくとも一部の領域全体を分割した複数のブロックの輝度に関連する情報等)を算出し、当該情報に基づいて、右コントローラ4の周囲変化を判別する。また、赤外撮像部123は、環境光によって撮像を行ってもよいが、本実施形態においては、赤外線を照射する赤外発光部124を有する。赤外発光部124は、例えば、赤外線カメラが画像を撮像するタイミングと同期して、赤外線を照射する。そして、赤外発光部124によって照射された赤外線が撮像対象によって反射され、当該反射された赤外線が赤外線カメラによって受光されることで、赤外線の画像が取得される。これによって、赤外撮像部123は、より鮮明な赤外線画像を得ることができる。なお、赤外撮像部123と赤外発光部124とは、それぞれ別のデバイスとして右コントローラ4内に設けられてもよいし、同じパッケージ内に設けられた単一のデバイスとして右コントローラ4内に設けられてもよい。また、本実施形態においては、赤外線カメラを有する赤外撮像部123が用いられるが、他の実施形態においては、撮像手段として、赤外線カメラに代えて可視光カメラ(可視光イメージセンサを用いたカメラ)が用いられてもよい。
右コントローラ4は、処理部121を備える。処理部121は、通信制御部111に接続される。また、処理部121は、赤外撮像部123、および赤外発光部124に接続される。
また、処理部121は、CPUやメモリ等を含み、右コントローラ4に備えられた図示しない記憶装置(例えば、不揮発性メモリ等)に記憶された所定のプログラム(例えば、画像処理や各種演算を行うためのアプリケーションプログラム)に基づいて、本体装置2からの指令に応じて赤外撮像部123に対する管理処理を実行する。例えば、処理部121は、赤外撮像部123に撮像動作を行わせたり、撮像結果に基づく情報(撮像画像の情報、あるいは、当該情報から算出される情報等)を取得および/または算出して通信制御部111を介して本体装置2へ送信したりする。また、処理部121は、本体装置2からの指令に応じて赤外発光部124に対する管理処理を実行する。例えば、処理部121は、本体装置2からの指令に応じて赤外発光部124の発光を制御する。なお、処理部121が処理を行う際に用いるメモリは、処理部121内に設けられてもいいし、メモリ112であってもよい。
右コントローラ4は、電力供給部118を備える。電力供給部118は、左コントローラ3の電力供給部108と同様の機能を有し、同様に動作する。
図9は、リング型拡張装置の一例を示す図である。なお、図9は、右コントローラ4が装着された状態のリング型拡張装置5を示している。本実施形態においては、リング型拡張装置5は、右コントローラ4を装着可能な拡張装置である。詳細は後述するが、本実施形態においては、ユーザは、リング型拡張装置5に力を加えて変形させるという新規な操作を行う。ユーザは、例えばエクササイズを行う感覚でリング型拡張装置5を用いたフィットネス動作を行うことによって、リング型拡張装置5に対する操作を行うことができる。なお、リング型拡張装置5が第1入力装置の一例に相当する。
図9に示すように、リング型拡張装置5は、環状部201と、本体部202とを備える。環状部201は、環状の形状を有する。なお、本実施形態においては、環状部201は、後述する弾性部材および台座部によって環状に形成される。本実施形態においては、環状部201は円環状である。なお、他の実施形態においては、環状部201の形状は任意であり、例えば楕円環状であってもよい。
本体部202は、環状部201に設けられる。本体部202は、図示しないレール部を有する。レール部は、右コントローラ4を装着可能な装着部の一例である。本実施形態においては、レール部は、右コントローラ4のスライダ62(図6参照)に対してスライド可能に係合する。スライダ62がレール部材に対して所定の直線方向(すなわち、スライド方向)に挿入されることで、レール部材に対してスライダ62が当該直線方向にスライド移動が可能な状態でレール部材がスライダ62と係合する。なお、レール部は、コントローラのスライダに対してスライド可能に係合することが可能である点で、本体装置2が有するレール部と同様である。そのため、レール部は、本体装置2が有するレール部と同様の構成であってもよい。
本実施形態においては、右コントローラ4は、係止部63を有する(図6参照)。係止部63は、スライダ62から側方(すなわち、図6に示すz軸正方向)に突出して設けられる。係止部63は、スライダ62の内部の方向へ移動可能であるとともに、上記側方へ突出した状態となる向きに(例えばバネによって)付勢されている。また、レール部には、切欠きが設けられる。スライダ62がレール部の奥まで挿入された状態において、係止部63は切欠きに係止する。レール部にスライダ62が係合した状態で係止部63が切欠きに係止することによって、本体部202に右コントローラ4が装着される。
なお、右コントローラ4は、押下可能な解除ボタン69を備える(図6参照)。上記係止部63は、解除ボタン69が押下されることに応じて、スライダ62の内部の方向へ移動し、スライダ62に対して突出しない(あるいは、ほとんど突出しない)状態となる。したがって、リング型拡張装置5の本体部202に右コントローラ4が装着された状態において、解除ボタン69が押下されると、係止部63は切欠きに係止しなくなる(あるいは、ほとんど係止しなくなる)。以上より、リング型拡張装置5の本体部202に右コントローラ4が装着される状態において、ユーザは、解除ボタン69を押下することによって右コントローラ4をリング型拡張装置5から容易に取り外すことができる。
図9に示すように、リング型拡張装置5は、グリップカバー203および204を有する。グリップカバー203および204は、ユーザが把持するための部品である。本実施形態においては、グリップカバー203および204は、環状部201に対して取り外し可能である。本実施形態においては、環状部201の左端付近の左把持部分に左グリップカバー203が設けられ、環状部201の右端付近の右把持部分に右グリップカバー204が設けられる。なお、把持部分の数は任意であり、想定される操作方法に応じて、3箇所以上に把持部分が設けられてもよいし、1箇所のみに把持部分が設けられてもよい。また、ゲームの内容(あるいは、ゲームにおいてユーザが行うフィットネス動作の内容)によっては、複数の把持部のうちの特定の把持部のみが片手または両手で把持されることがあってもよい。
図10は、リング型拡張装置5が備える構成要素の電気的な接続関係を示すブロック図である。図10に示すように、リング型拡張装置5は、歪み検出部211を備える。歪み検出部211は、環状部201が変形したことを検出する検出部の一例である。本実施形態においては、歪み検出部211は、歪みゲージを含む。歪み検出部211は、後述する弾性部材の変形に応じた台座部の歪みを示す信号(換言すれば、弾性部材の変形の大きさおよび変形の向きを示す信号)を出力する。
ここで、本実施形態においては、環状部201は、弾性変形可能な弾性部と、台座部とを有する。台座部は、当該台座部と弾性部材とによって環が形成されるように当該弾性部材の両端部を保持する。なお、台座部は、本体部202の内部に設けられるので、図9において図示されていない。台座部は、弾性部材よりも剛性が高い材質で構成される。例えば、弾性部材は、樹脂(具体的には、FRP(Fiber Reinforced Plastics))で構成され、台座部は、金属で構成される。上記歪みゲージは、台座部に設けられ、当該台座部の歪みを検出する。環状部201が定常状態から変形した場合、変形によって台座部に歪みが生じるので、歪みゲージによって台座部の歪みが検出される。検出された歪みに基づいて、環状部201が変形する向き(すなわち、2つのグリップカバー203および204が近づく向き、または、離れる向き)と、変形量とを算出することができる。ここで、環状部201の定常状態とは、上記台座部と弾性部材とによって環が形成されるように当該弾性部材を環形状に成形し、上記台座部が当該弾性部材の両端部を保持した状態において、環状部201に対して外部から(例えば、ユーザから)弾性部材を当該環形状から変形させる力が加わっていない状態を示している。そして、環状部201の変形状態とは、外部から力が加えられることによって、加えられた力に応じて定常状態から変形している状態を指すものとする。環状部201を上記歪みゲージは、当該環形状を初期値として当該環形状から変形した際の歪みを検出することになる。
なお、他の実施形態においては、歪み検出部211は、歪みゲージに代えて、環状部201が定常状態から変形したことを検出可能な任意のセンサを含んでもよい。例えば、検出部211は、環状部201が変形した場合に加わる圧力を検出する感圧センサを含んでもよいし、環状部201が曲げられた量を検出する曲げセンサを含んでもよい。
リング型拡張装置5は、信号変換部212を備える。本実施形態においては、信号変換部212は、アンプと、ADコンバータとを含む。信号変換部212は、歪み検出部211に電気的に接続され、歪み検出部211の出力信号をアンプによって増幅し、ADコンバータによってAD変換を行う。信号変換部212は、歪み検出部211によって検出された歪み値を示すデジタル信号を出力する。なお、他の実施形態においては、信号変換部212はADコンバータを含まず、後述する処理部213がADコンバータを含んでいてもよい。
リング型拡張装置5は、処理部213を備える。処理部213は、プロセッサとメモリとを備える処理回路であり、例えばMCU(Micro Controller Unit)である。処理部213は、信号変換部212に電気的に接続され、信号変換部212の出力信号が処理部213に入力される。また、リング型拡張装置5は、端子214を備える。端子214は、処理部213に電気的に接続される。リング型拡張装置5に右コントローラ4が装着されている場合、処理部213は、信号変換部212の出力信号が示す歪み値を示す情報(換言すれば、後述するリング操作データ)を、端子214を介して右コントローラ4へ送信する。
リング型拡張装置5は、電力変換部215を備える。電力変換部215は、上記各部211〜214に電気的に接続される。電力変換部215は、端子214を介して外部(すなわち、右コントローラ4)から供給される電力を、上記各部211〜214に供給する。電力変換部215は、供給される電力について電圧等の調整を行って上記各部211〜214に供給してもよい。
なお、リング型拡張装置5が他の装置へ送信する「歪み検出部の検出結果に関するデータ」は、当該検出結果(本実施形態においては、台座部の歪みを示す、歪み検出部211の出力信号)そのものを示すデータであってもよいし、当該検出結果に対して何らかの処理(例えば、データ形式の変換、および/または、歪み値に対する計算処理等)が行われることによって得られるデータであってもよい。例えば、処理部213は、上記検出結果である歪み値に基づいて弾性部材の変形量を算出する処理を行ってもよく、このとき、「歪み検出部の検出結果に関するデータ」は、当該変形量を示すデータであってもよい。
なお、他の実施形態においては、リング型拡張装置5は、電池を備え、当該電池の電力によって動作してもよい。また、リング型拡張装置5が備える電池は、右コントローラ4から供給される電力によって充電可能な充電池であってもよい。
図11は、ベルト型拡張装置の一例を示す図である。ベルト型拡張装置6は、自身に左コントローラ3が装着された状態で、ユーザの足に締着して使用する(図12参照)。図11に示すように、ベルト型拡張装置6は、収容部301と、ベルト部302とを備える。収容部301は、平面状の形状であり、左コントローラ3を収容可能である。具体的には、収容部301は、ポケット部303を有する。ポケット部303は、左コントローラ3を収容可能な大きさの袋状に形成される。本実施形態においては、収容部301が左コントローラを収容することで、左コントローラ3がベルト型拡張装置6に装着される。なお、他の実施形態においては、ベルト型拡張装置6に左コントローラ3を装着させるための構成は任意である。なお、ベルト型拡張装置6が第2入力装置の一例に相当する。
収容部301には、ポケット部303の側方に通し孔304が設けられる。ベルト部302は、収容部301のうち、ポケット部303の側方であって、ポケット部303を基準に通し孔304の反対側に設けられる。ベルト部302は、帯状の形状であり、その一端が収容部301に固定される。本実施形態においては、ベルト部302は、伸縮性を有する材質(例えば、織ゴム)で構成される。
ベルト部302のうち、収容部301においてポケット部303が設けられる側の面と同じ側の面には、第1面ファスナー305および第2面ファスナー306が設けられる。第1面ファスナー305は、収容部301に固定される側と反対側の端部付近に設けられる。また、第2面ファスナー306は、第1面ファスナー305と同じ面において、第1面ファスナー305と比べて収容部301に近い側に設けられる。第1面ファスナー305と第2面ファスナー306とは、互いに着脱可能である。例えば、第1面ファスナー305は、フック面の面ファスナーであり、第2面ファスナー306は、ループ面の面ファスナーである。
ベルト型拡張装置6を締着する際、ユーザは、ベルト部302を足に一周させた状態でベルト部302を通し孔304に通して、第1面ファスナー305と第2面ファスナー306とを接着させる。これによって、ユーザは、左コントローラ3が装着されたベルト型拡張装置6を足に締着することができる(図12参照)。
図12は、リング型拡張装置5およびベルト型拡張装置6をユーザが使用する様子の一例を示す図である。図12に示すように、ユーザは、ゲーム装置(すなわち、本体装置2ならびに各コントローラ3および4)に加えて、2つの拡張装置5および6を用いてゲームを行うことができる。例えば、ユーザは、リング型拡張装置5とベルト型拡張装置6とをセットで使用することができる。
例えば図12に示すように、ユーザは、右コントローラ4が装着されたリング型拡張装置5を両手で把持し、左コントローラ3が装着されたベルト型拡張装置6を足に締着する。このとき、ユーザは、リング型拡張装置5に対する操作(例えば、リング型拡張装置5を曲げる操作、および、リング型拡張装置5を動かす操作)と、ベルト型拡張装置6を締着した足を動かす操作とによって、ゲームを行うことができる。
なお、図12においては、ユーザがグリップカバー203および204を把持してリング型拡張装置5を曲げる動作を行う様子を例示している。この動作によって、ユーザは、両腕を鍛えるフィットネス動作をゲーム操作として行うことができる。なお、ユーザはリング型拡張装置5に対する種々の動作でゲーム操作を行うことができる。例えば、ユーザは、一方のグリップカバーを両手で把持し、他方のグリップカバーを腹部に当てた状態で、リング型拡張装置5を曲げる動作を行うこともできる。この動作によって、ユーザは、腕と腹筋を鍛えるフィットネス動作をゲーム操作として行うことができる。また、ユーザは、両足の内股にグリップカバー203および204を当ててリング型拡張装置5を足で挟んだ状態で、リング型拡張装置5を曲げる動作を行うこともできる。この動作によって、ユーザは、足の筋肉を鍛えるフィットネス動作をゲーム操作として行うことができる。
本体装置2においてゲーム処理が実行される場合、右コントローラ4は、リング型拡張装置5からリング操作データを受信する。リング操作データは、上記歪み値を示す情報を含む。具体的には、リング型拡張装置5の処理部213は、端子214を介してリング操作データを右コントローラ4へ送信する。例えば、処理部213は、所定時間に1回の割合でリング操作データを繰り返し送信する。
上記の場合、右コントローラ4の通信制御部111は、リング型拡張装置5から端子64を介して受信したリング操作データを本体装置2へ送信する。また、通信制御部111は、右コントローラ4に含まれる各入力部(具体的には、各ボタン113、アナログスティック52、各センサ114および115)から取得された情報を含む右コントローラ操作データを本体装置2へ送信する。なお、右コントローラ4がリング型拡張装置5に装着される状態では、右コントローラ4から本体装置2への通信は、無線通信によって行われる。通信制御部111は、右コントローラ操作データとリング操作データとをまとめて本体装置2へ送信してもよいし、別個に本体装置2へ送信してもよい。また、通信制御部111は、受信したリング操作データをそのまま本体装置2へ送信してもよいし、受信したリング操作データに何らかの加工(例えば、データ形式の変換、および/または、歪み値に対する計算処理等)を行って本体装置2へ送信してもよい。
一方、本体装置2においてゲーム処理が実行される場合、左コントローラ3の通信制御部101は、左コントローラ3に含まれる各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から取得された情報を含む左コントローラ操作データを本体装置2へ送信する。左コントローラ3がベルト型拡張装置6に装着される状態では、左コントローラ3から本体装置2への通信は、無線通信によって行われる。
(第1のゲーム例)
次に、本体装置2が行う第1のゲーム例における具体的な処理を説明する前に、図13〜図15を用いて、本体装置2で行う第1のゲーム例の概要について説明する。なお、図13は、第1のゲーム例において、ユーザがリング型拡張装置5を操作する様子の一例を示す図である。図14は、ユーザ操作に応じて据置型モニタ9に表示される第1のゲーム例におけるゲーム画像の第1の例を示す図である。図15は、ユーザ操作に応じて据置型モニタ9に表示される第1のゲーム例におけるゲーム画像の第2の例を示す図である。
図13に示すように、第1のゲーム例では、ユーザがリング型拡張装置5における両方のグリップカバー203および204をそれぞれ両手で把持した状態で、リング型拡張装置5における2つのグリップカバー203および204が近づくようにリング型拡張装置5を両手で変形させるユーザ操作や、両膝を曲げたり伸ばしたりするように動かすユーザ操作が行われる。このような膝の曲げ伸ばし操作によって、ユーザの左腿に締着されたベルト型拡張装置6も動かされることになる。ここで、リング型拡張装置5における2つのグリップカバー203および204が近づくように変形させながら両膝を曲げたり伸ばしたりすると、ユーザは両手に力を加えながら把持するリング型拡張装置5を上下に移動させるような動作を行うゲーム操作を行うことになる。
上述したように、本実施形態におけるゲームシステム1については、左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、図14および図15に示すように、クレードル8に本体装置2単体を装着することによって据置型モニタ9に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードル8に本体装置2単体を装着して、クレードル8に接続された据置型モニタ9から画像(および音声)を出力する利用態様におけるゲームシステムを用いて説明する。そして、ユーザは、リング型拡張装置5に装着された右コントローラ4およびベルト型拡張装置6に装着された左コントローラ3を用いて、ゲーム操作を行う例を用いる。また、第1のゲーム例におけるゲーム処理の一例として、据置型モニタ9に表示される移動オブジェクトOBJ2aおよびOBJ2bがユーザ操作に応じて、上下左右に移動することによって、仮想ゲーム空間内において回転している対象オブジェクトOBJ1を変形させる処理を用いる。なお、図14および図15に示す対象オブジェクトOBJ1の例では、円柱状の物体を一例として用いているが、回転する他の形状または回転しない他の形状の物体でもかまわない。
例えば、図14においては、仮想ゲーム空間内に対象オブジェクトOBJ1が配置されている。対象オブジェクトOBJ1の左右には一対の移動オブジェクトOBJ2aおよびOBJ2bが配置されており、回転する対象オブジェクトOBJ1に当接しながら対象オブジェクトOBJ1内に押し込まれるように移動することによって、対象オブジェクトOBJ1を任意の形状に変形させることができる。移動オブジェクトOBJ2aおよびOBJ2bは、ユーザが膝を曲げ伸ばしする操作に応じて、対象オブジェクトOBJ1の表面に沿って上下に移動可能である。また、リング型拡張装置5の環状部201の変形量に応じて、対象オブジェクトOBJ1の表面から対象オブジェクトOBJ1の内部に押し込まれるように移動可能である。図14に示すようなリング型拡張装置5の環状部201が変形していない定常状態であり、ユーザが膝を伸ばした状態(左コントローラ3が直立、すなわち左コントローラ3のy軸負方向が鉛直方向となった状態)においては、移動オブジェクトOBJ2aおよびOBJ2bは、対象オブジェクトOBJ1の最上位置の外周面上に沿った位置に配置された状態とされる。なお、移動オブジェクトOBJ2aおよびOBJ2bが仮想空間に配置されるオブジェクトの一例に相当する。また、移動オブジェクトOBJ2aおよびOBJ2bを対象オブジェクトOBJ1の表面に沿って上下に移動させる方向がオブジェクトを移動させる第2方向の一例に相当し、移動オブジェクトOBJ2aおよびOBJ2bを対象オブジェクトOBJ1の表面から対象オブジェクトOBJ1の内部に押し込まれるように移動させる方向がオブジェクトを移動させる第1方向の一例に相当する。
一方、図15に示すように、グリップカバー203および204が互いに近づくように環状部201を定常状態からリング型拡張装置5を変形させる操作(図示B方向に変形させる押込操作)が行われた場合、当該変形量に応じて一対の移動オブジェクトOBJ2aおよびOBJ2bが対象オブジェクトOBJ1の内部に押し込まれるようにそれぞれ移動する。具体的には、対象オブジェクトOBJ1の外周側面に沿った左側に配置されている移動オブジェクトOBJ2aが、上記変形量に応じた移動量で対象オブジェクトOBJ1の内部に押し込まれるように右(図示j方向)に移動する。また、対象オブジェクトOBJ1の外周側面に沿った右側に配置されている移動オブジェクトOBJ2bが、上記変形量に応じた移動量で対象オブジェクトOBJ1の内部に押し込まれるように左(図示j方向)に移動する。このように対象オブジェクトOBJ1の外周側面から対象オブジェクトOBJ1の内部に押し込まれるように一対の移動オブジェクトOBJ2aおよびOBJ2bが移動することによって、対象オブジェクトOBJ1の外周側面が削られるように変形する。つまり、対象オブジェクトOBJ1は、リング型拡張装置5の変形量に応じた削り量で、一対の移動オブジェクトOBJ2aおよびOBJ2bが接している場所が削られて変形することになる。なお、対象オブジェクトOBJ1は、移動オブジェクトOBJ2aおよびOBJ2bによって削られる剛体であってもよいし、移動オブジェクトOBJ2aおよびOBJ2bによって凹む塑性流体のような流体や弾性の固体であってもよい。後者の場合、対象オブジェクトOBJ1は、移動オブジェクトOBJ2aおよびOBJ2bが対象オブジェクトOBJ1の外面から内部へ押し込まれるように移動することによって当該押し込まれた部位が凹み、凹んだ部位の一部が上下に押しやられるように変形してもよい。この場合、対象オブジェクトOBJ1は、移動オブジェクトOBJ2aおよびOBJ2bによって押し込まれたように変形することになる。
このようなリング型拡張装置5を変形させる押込操作は、リング型拡張装置5に設けられた歪みゲージが検出する歪みに基づいて検出される。リング型拡張装置5の環状部201が定常状態から変形した場合、上記歪みゲージによって台座部の歪みが検出され、検出された歪みに基づいて、環状部201が変形する向き(すなわち、2つのグリップカバー203および204が離れる向き、または、近づく向き)と変形量とを算出することができる。そして、環状部201が変形する向きが2つのグリップカバー203および204が近づく向きである場合、算出された変形量に応じて一対の移動オブジェクトOBJ2aおよびOBJ2bを左右に移動させて対象オブジェクトOBJ1の一部を削って変形させることができる。なお、上記押込操作が解除された場合、一対の移動オブジェクトOBJ2aおよびOBJ2bは、対象オブジェクトOBJ1を削る動作を終了して対象オブジェクトOBJ1の外周側面に接する位置に配置される。なお、移動オブジェクトOBJ2aおよびOBJ2bが対象オブジェクトOBJ1を削る量は、対象オブジェクトOBJ1の外側に対して内側が相対的に大きくなるように算出されてもかまわない。
また、ユーザが膝の曲げ伸ばしする動作を行った場合、当該ユーザの左腿に締着されたベルト型拡張装置6も動かされる。例えば、ユーザの左股の前部に締着されたベルト型拡張装置6に装着される左コントローラ3は、ユーザの膝の曲げ伸ばしする動作に応じて、実空間における重力方向(鉛直方向)に垂直なユーザの左右水平方向を軸として起立状態(左コントローラ3の長軸方向が鉛直方向に向いた状態)と仰角状態(左コントローラ3の当該長軸方向が当該起立状態からユーザの前後水平方向へ近づいた状態)との間を揺動(図示M方向の揺れであり、前後揺れと記載することがある)するように動かされる。一例として、ユーザが左足を床面につけて静止して立っている状態において左コントローラ3のy軸負方向が実空間の鉛直方向となるように(すなわち、左コントローラ3のy軸正方向が実空間の直上方向となるように)、ベルト型拡張装置6に左コントローラ3が装着される場合、ユーザが膝を曲げることに応じて、左コントローラ3のy軸負方向が鉛直方向に向いた起立状態から左コントローラ3のy軸負方向が当該起立状態から水平方向へ近づいた仰角状態に、ユーザの左右水平方向(左コントローラ3のx軸方向)を軸として回転するように左コントローラ3本体が動かされる。
このような、上記ユーザの膝の曲げ伸ばしする動作における曲げ角度を算出するためには、重力加速度を基準とする当該ユーザの股(例えば左股)の角度を算出すればよい。ユーザの股の角度の算出については、左コントローラ3に生じる角速度および加速度の少なくとも一方を用いて任意の方法を用いればよいが、一例として、左コントローラ3に生じる角速度および加速度の両方を用いて算出してもよい。第1の例として、左コントローラ3に生じるx軸方向周りの角速度を累積することによって、重力加速度を基準とする左コントローラ3の姿勢、すなわちユーザの膝の曲げ伸ばしする動作における曲げ角度を算出することができる。第2の例として、左コントローラ3に生じる重力加速度の方向を検出し、左コントローラ3の長軸方向(y軸方向)と当該重力加速度の方向との角度差を算出することによって、ユーザの膝の曲げ伸ばしする動作における曲げ角度を算出することができる。
図15に示すように、左股の前部にベルト型拡張装置6を締着した状態でユーザが膝を曲げ伸ばしする動作を行った場合、膝の曲げ角度に応じて一対の移動オブジェクトOBJ2aおよびOBJ2bが上下(図示i方向)に移動する。具体的には、移動オブジェクトOBJ2aおよびOBJ2bは、ユーザの膝が最も伸びた状態(左コントローラ3の長軸方向が起立した状態)において対象オブジェクトOBJ1の外周側面における最上位置にそれぞれ接する位置に配置される。そして、移動オブジェクトOBJ2aおよびOBJ2bは、ユーザの膝の曲げ角度が大きくなる程、対象オブジェクトOBJ1の外周側面に沿って下方に移動する。ここで、移動オブジェクトOBJ2aおよびOBJ2bは、対象オブジェクトOBJ1の外周側面に接する位置が維持されるため、膝の曲げ角度に応じて上下に移動する場合においても、対象オブジェクトOBJ1の外周側面と接するように移動する。つまり、対象オブジェクトOBJ1の外周側面の一部が削れている場合であっても、移動オブジェクトOBJ2aおよびOBJ2bは、当該削れている外周側面の形状に沿って移動することになる。
このように、ユーザの膝の曲げ伸ばしする動作における膝の曲げ角度によって、一対の移動オブジェクトOBJ2aおよびOBJ2bの上下位置を制御することができるため、移動オブジェクトOBJ2aおよびOBJ2bの上下位置を調整しながらリング型拡張装置5の押込操作における変形量を調整することによって、ユーザは、対象オブジェクトOBJ1の外周側面における任意の位置を任意の削り量で削ることによって、対象オブジェクトOBJ1を変形させることが可能となる。第1の例におけるゲーム例では、対象オブジェクトOBJ1を変形させる目標となるサンプル画像SPが表示されており、変形後の対象オブジェクトOBJ1とサンプル画像SPとの類似度に基づいて、ゲームスコアが算出される。
なお、ユーザの膝の曲げ伸ばしするユーザ操作は、左コントローラ3(ベルト型拡張装置6)における動きセンサの出力に加えて、右コントローラ4や他の入力装置からの出力を用いて判定されてもかまわない。
また、第1のゲーム例においては、リング型拡張装置5を変形させる押込操作が行われて対象オブジェクトOBJ1を変形させている期間中において、移動オブジェクトOBJ2aおよびOBJ2bを上下に移動させる操作が同時に行われた場合、一例として、移動オブジェクトOBJ2aおよびOBJ2bを上下に移動させながら対象オブジェクトOBJ1を変形させる動作を継続させてもよい。また、リング型拡張装置5を変形させる押込操作が行われて対象オブジェクトOBJ1を変形させている期間中において、移動オブジェクトOBJ2aおよびOBJ2bを上下に移動させる操作が同時に行われた場合、他の例として、いずれかの操作が優先されてもよい。例えば、リング型拡張装置5を変形させる押込操作が行われて対象オブジェクトOBJ1を変形させている期間中において、移動オブジェクトOBJ2aおよびOBJ2bを上下に移動させる操作が同時に行われた場合、対象オブジェクトOBJ1を変形させる動作を一旦停止して移動オブジェクトOBJ2aおよびOBJ2bの上下移動を優先し、当該上下移動の終了後にリング型拡張装置5の押込操作が一旦解除されて再度押込操作が行われた場合に対象オブジェクトOBJ1を変形させる動作が再開されてもよい。
次に、図16〜図19を参照して、第1のゲーム例においてゲームシステム1で実行される具体的な処理の一例について説明する。図16は、第1のゲーム例において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図16に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
第1のゲーム例において、DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した右コントローラ4との間で無線通信するための通信プログラムや、右コントローラ4から取得したデータに基づいた情報処理を行うためのアプリケーションプログラム(例えば、ゲームプログラム)等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。プロセッサ81は、DRAM85に記憶された各種プログラムPaを実行する。
また、第1のゲーム例において、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDaa、角速度データDab、加速度データDac、姿勢データDad、重力方向データDae、リング変形量データDag、膝曲げ角度データDah、削り量データDai、スコアデータDaj、移動オブジェクト動作データDak、対象オブジェクト形状データDam、および画像データDan等が記憶される。
操作データDaaは、左コントローラ3および右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、左コントローラ3および右コントローラ4から送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)やリング型拡張装置5における環状部201の変形状態を示す歪み値が含まれている。本実施形態では、無線通信によって左コントローラ3および右コントローラ4からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaaが適宜更新される。なお、操作データDaaの更新周期は、ゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
角速度データDabは、左コントローラ3および右コントローラ4から取得した操作データのうち、現時点から所定時間前までにそれぞれ取得された左コントローラ3および右コントローラ4に生じている角速度の履歴を示すデータである。例えば、角速度データDabは、左コントローラ3および右コントローラ4にそれぞれ生じているxyz軸周りの角速度を示すデータの履歴等を含んでいる。
加速度データDacは、左コントローラ3および右コントローラ4から取得した操作データのうち、現時点から所定時間前までにそれぞれ取得された左コントローラ3および右コントローラ4に生じている加速度の履歴を示すデータである。例えば、加速度データDacは、左コントローラ3および右コントローラ4にそれぞれ生じているxyz軸方向の加速度を示すデータの履歴等を含んでいる。
姿勢データDadは、実空間における左コントローラ3および右コントローラ4の姿勢を示すデータである。一例として、姿勢データDadは、実空間における左コントローラ3および右コントローラ4のxyz軸方向(例えば、実空間におけるXYZ軸に対する角度)をそれぞれ示すデータである。
重力方向データDaeは、左コントローラ3および右コントローラ4にそれぞれ作用している重力加速度の方向を示すデータである。
リング変形量データDagは、リング型拡張装置5の変形方向および変形量を示すデータである。
膝曲げ角度データDahは、ユーザが膝を曲げ伸ばしする膝の曲げ角度を示すデータである。
削り量データDaiは、対象オブジェクトOBJ1を削って変形させる量を示すデータである。
スコアデータDajは、現時点のゲームスコアを示すデータである。
移動オブジェクト動作データDakは、仮想ゲーム空間に配置されている移動オブジェクトOBJ2aおよびOBJ2bの位置、状態、姿勢、動作等を示すデータである。対象オブジェクト形状データDamは、対象オブジェクトOBJ1の形状を示すデータである。
画像データDanは、表示画面に画像(例えば、対象オブジェクトOBJ1の画像、移動オブジェクトOBJ2aおよびOBJ2の画像、フィールド画像、背景画像等)を表示するためのデータである。
次に、図17〜図19を参照して、第1のゲーム例における情報処理の詳細な一例を説明する。図17は、第1のゲーム例においてゲームシステム1で実行される情報処理の一例を示すフローチャートである。図18は、図17におけるステップS505において行われる上下移動処理の詳細な一例を示すサブルーチンである。図19は、図17におけるステップS506において行われる削り処理の詳細な一例を示すサブルーチンである。第1のゲーム例においては、図17〜図19に示す一連の処理は、プロセッサ81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図17〜図19に示す情報処理が開始されるタイミングは任意である。
なお、図17〜図19に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち図17〜図19に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図17において、プロセッサ81は、情報処理における初期設定を行い(ステップS501)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。例えば、プロセッサ81は、仮想ゲーム空間において各オブジェクト(対象オブジェクトOBJ1、移動オブジェクトOBJ2aおよびOBJ2を含む)を初期配置して仮想ゲーム空間の初期状態を生成し、移動オブジェクトOBJ2aおよびOBJ2の位置、方向、状態、および姿勢等を用いて移動オブジェクト動作データDakを更新する。また、プロセッサ81は、対象オブジェクトOBJ1の初期形状を用いて、対象オブジェクト形状データDamを更新する。また、プロセッサ81は、以降のゲームにおいて目標とされる形状を示すサンプル画像SPを設定する。
次に、プロセッサ81は、左コントローラ3および右コントローラ4から操作データをそれぞれ取得して操作データDaaを更新し(ステップS502)、次のステップに処理を進める。なお、プロセッサ81は、上記ステップS502において左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、左コントローラ3および右コントローラ4にそれぞれ生じている角速度を示すデータを、角速度データDabに格納する。また、プロセッサ81は、上記ステップS502において左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、左コントローラ3および右コントローラ4にそれぞれ生じている加速度を示すデータを、加速度データDacに格納する。なお、データ取得部は、歪データと動きデータとを取得する処理を行うものであり、一例として左コントローラ3および右コントローラ4からそれぞれ操作データを取得して操作データDaaを更新する処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、左コントローラ3の姿勢を算出し(ステップS503)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDabに格納されている角速度データを用いて、左コントローラ3のxyz軸周りの角速度を取得する。そして、プロセッサ81は、姿勢データDadが示す左コントローラ3の姿勢における重力加速度方向を基準としたxyz軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後の重力加速度方向を基準としたxyz軸の方向を左コントローラ3の姿勢を示す最新のデータとして、姿勢データDadに格納する。また、プロセッサ81は、加速度データDacに格納されている加速度データを用いて、左コントローラ3に作用している重力加速度の方向を算出して、重力方向データDaeに格納する。なお、重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ3に平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。また、プロセッサ81は、重力方向データDaeが示す左コントローラ3に生じている重力加速度の方向を用いて、姿勢データDadが示す左コントローラ3の最新の姿勢を適時補正してもかまわない。
次に、プロセッサ81は、リング型拡張装置5の変形量を算出し(ステップS504)、次のステップに処理を進める。例えば、プロセッサ81は、操作データDaaが示す歪み値を用いて、リング型拡張装置5における環状部201の変形量および変形方向を算出し、当該算出結果を用いてリング変形量データDagを更新する。
次に、プロセッサ81は、上下移動処理を行い(ステップS505)、ステップS506に処理を進める。以下、図18を参照して、上記ステップS505において行われる上下移動処理について説明する。なお、第2制御は、動きデータに応じてオブジェクトに実行される処理であり、一例としてプロセッサ81が行う上下移動処理に相当する。
図18において、プロセッサ81は、膝曲げ角度を算出して(ステップS521)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS503において算出された左コントローラ3の姿勢を用いて膝曲げ角度を算出し、算出された膝曲げ角度を用いて膝曲げ角度データDahを更新する。一例として、プロセッサ81は、重力方向データDaeが示す重力加速度を基準とする左コントローラ3の姿勢を用いて、重力加速度方向とy軸負方向との角度差を算出し、当該角度差を膝曲げ角度とする。
次に、プロセッサ81は、上記ステップS521において算出された膝曲げ角度に応じた移動オブジェクトの上下位置を算出し(ステップS522)、次のステップに処理を進める。例えば、プロセッサ81は、上記膝曲げ角度が0度の場合に対象オブジェクトOBJ1の最上位置となり、ユーザの膝の曲げ角度が大きくなる程、対象オブジェクトOBJ1の最下位置となるように移動オブジェクトの上下位置を算出する。
次に、プロセッサ81は、移動オブジェクトOBJ2aおよびOBJ2bの位置をそれぞれ算出し(ステップS523)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、上記ステップS521において算出された上下位置における対象オブジェクトOBJ1の外周側面に移動オブジェクトOBJ2aおよびOBJ2bがそれぞれ接する左右両側の位置を算出し、当該位置を用いて移動オブジェクト動作データDakを更新する。
図17に戻り、上記ステップS505における上下移動処理の後、プロセッサ81は、削り処理を行い(ステップS506)、ステップS507に処理を進める。以下、図19を参照して、上記ステップS506において行われる削り処理について説明する。なお、第1制御は、歪データに応じてオブジェクトに実行される処理であり、一例としてプロセッサ81が行う削り処理に相当する。
図19において、プロセッサ81は、削り量を算出し(ステップS531)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS504において算出された変形量に基づいて、移動オブジェクトOBJ2aおよびOBJ2bが対象オブジェクトOBJ1を削る削り量を算出し、当該削り量を用いて削り量データDaiを更新する。一例として、プロセッサ81は、上記変形量が多いほど上記削り量を大きく算出する。なお、上記削り量は、上記ステップS523において算出された移動オブジェクトOBJ2aおよびOBJ2bの位置が対象オブジェクトOBJ1の中心軸に近いほど、相対的に大きく算出されてもよい。なお、上述した対象オブジェクトOBJ1を変形させる方法は一例であり、他の方法によって対象オブジェクトOBJ1を変形させてもかまわない。例えば、塑性流体または弾性の固体で構成される対象オブジェクトOBJ1の場合、対象オブジェクトOBJ1と剛体の移動オブジェクトOBJ2aおよびOBJ2bとの間の物理シミュレーションによって、より複雑な方式を用いて対象オブジェクトOBJ1を変形させてもよい。
次に、プロセッサ81は、上記削り量に応じて移動オブジェクトOBJ2aおよびOBJ2bを左右に移動させ(ステップS532)、次のステップに処理を進める。例えば、プロセッサ81は、移動オブジェクトOBJ2aおよびOBJ2bの位置を、上記削り量の分だけ対象オブジェクトOBJ1の中心軸に向かって左右に移動させ、移動後の移動オブジェクトOBJ2aおよびOBJ2bの位置を用いて移動オブジェクト動作データDakを更新する。
次に、プロセッサ81は、対象オブジェクトOBJ1を変形させる処理を行い(ステップS533)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、対象オブジェクト形状データDamが示す対象オブジェクトOBJ1の外周側面の一部が、上記ステップS532において算出された位置まで移動オブジェクトOBJ2aおよびOBJ2bが対象オブジェクトOBJ1内にそれぞれ押し込まれるように移動することによって削れる形状を算出し、当該算出後の形状を用いて対象オブジェクト形状データDamを更新する。
図17に戻り、ステップS506における削り処理の後、プロセッサ81は、オブジェクト(移動オブジェクトOBJ2aおよびOBJ2b等)の動作制御処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、移動オブジェクト動作データDakが示す移動オブジェクトOBJ2aおよびOBJ2bの位置、状態、姿勢、動作等に基づいて、仮想ゲーム空間において移動オブジェクトOBJ2aおよびOBJ2bを配置する。
次に、プロセッサ81は、対象オブジェクトOBJ1を削って形状を変化させる処理を終了するか否かを判定する(ステップS508)。上記ステップS508において削り処理を終了する条件としては、例えば、対象オブジェクトOBJ1の形状を変化させる予め定められた制限時間が経過したことや、ユーザが対象オブジェクトOBJ1の形状を変化させることを終了する操作を行ったこと等がある。そして、プロセッサ81は、削り処理を終了する場合、ステップS509に処理を進める。一方、プロセッサ81は、削り処理を終了しない場合、ステップS510に処理を進める。
ステップS509において、プロセッサ81は、判定処理を行い、ステップS510に処理を進める。例えば、プロセッサ81は、対象オブジェクト形状データDamが示す対象オブジェクトOBJ1の形状と、当該ゲームにおいて目標とされている形状(例えば、サンプル画像SPとして示されている画像の形状)とを比較することによる形状の一致度に基づいてゲームスコアを算出し、当該ゲームスコアを用いてスコアデータDajを更新する。なお、評価部は、所定の制限時間終了時における対象オブジェクトの形状を評価する処理を行うものであり、一例として判定処理を行うプロセッサ81に相当する。
ステップS510において、プロセッサ81は、画像生成表示制御処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、移動オブジェクトOBJ2aおよびOBJ2bが配置された仮想ゲーム空間内に、対象オブジェクト形状データDamが示す形状の対象オブジェクトOBJ1を配置する。そして、プロセッサ81は、仮想ゲーム空間に仮想カメラを配置し、当該仮想カメラから見た仮想ゲーム空間画像を生成して、当該仮想ゲーム空間画像を据置型モニタ9に出力する。また、プロセッサ81は、上記ステップS501において設定されているサンプル画像SPを上記仮想ゲーム空間画像の適所に配置して据置型モニタ9に出力する。さらに、プロセッサ81は、スコアデータDajが示すゲームスコアを示す画像を上記仮想ゲーム空間画像の適所に重畳して据置型モニタ9に出力する。なお、ゲーム処理部は、歪データに基づいて、仮想空間に配置されるオブジェクトに対する第1制御を実行し、動きデータに基づいて、オブジェクトに対する当該第1制御とは異なる第2制御を実行する処理を行うものであり、一例として上記ステップS503−ステップS510における処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、ゲーム処理を終了するか否かを判定する(ステップS511)。上記ステップS511においてゲーム処理を終了する条件としては、例えば、ゲーム処理が終了される条件が満たされたことや、ユーザがゲーム処理を終了する操作を行ったこと等がある。プロセッサ81は、ゲーム処理を終了しない場合に上記ステップS502に戻って処理を繰り返し、ゲーム処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップS502〜ステップS511の一連の処理は、ステップS511でゲーム処理を終了すると判定されるまで繰り返し実行される。
このように、第1のゲーム例においては、リング型拡張装置5の変形させる押込操作に応じて移動オブジェクトOBJ2aおよびOBJ2bが対象オブジェクトOBJ1を削って変形させる制御が行われ、膝を曲げ伸ばしすることによるベルト型拡張装置6の動きに応じて移動オブジェクトOBJ2aおよびOBJ2bが上下移動する制御が行われるため、リング型拡張装置5およびベルト型拡張装置6の両方を用いたユーザ入力の方法を豊富にすることができる。
(第2のゲーム例)
次に、本体装置2が行う第2のゲーム例における具体的な処理を説明する前に、図20〜図23を用いて、本体装置2で行う第2のゲーム例の概要について説明する。なお、図20は、第2のゲーム例において、ユーザがリング型拡張装置5を操作する様子の一例を示す図である。図21は、ユーザ操作に応じて据置型モニタ9に表示される第2のゲーム例におけるゲーム画像の第1の例を示す図である。図22は、ユーザ操作に応じて据置型モニタ9に表示される第2のゲーム例におけるゲーム画像の第2の例を示す図である。図23は、ユーザ操作に応じて据置型モニタ9に表示される第2のゲーム例におけるゲーム画像の第3の例を示す図である。
図20に示すように、第2のゲーム例では、ユーザがリング型拡張装置5における一方のグリップカバー(例えば、グリップカバー203)を両手で把持した状態で、他方のグリップカバー(例えば、グリップカバー204)をユーザの腹部に当接させることによって、ユーザの両手と腹部との間にリング型拡張装置5を挟むような状態で操作が行われる。そして、両手と腹部との間に挟んだリング型拡張装置5における2つのグリップカバー203および204が近づくようにリング型拡張装置5を変形させながら、リング型拡張装置5を左右に傾けるように動かすユーザ操作が行われる。ここで、ユーザの両手と腹部との間にリング型拡張装置5を挟むような状態でリング型拡張装置5を左右に傾けるためには、ユーザの上半身を左右に傾けることとなり、第2のゲーム例では、両手を腹部に近づけるように力を加えながら身体全体を左右に傾けるゲーム操作が必要となる。また、第2のゲーム例では、腿にベルト型拡張装置6が締着された状態でユーザが足踏みするユーザ操作も行われる。つまり、第2のゲーム例では、リング型拡張装置5を変形させるユーザ操作およびリング型拡張装置5を左右に傾けるユーザ操作が行われながら、ユーザが足踏みする動作を行うことによって、ユーザの腿に締着されたベルト型拡張装置6も動かされるユーザ操作も行われることになる。
上述したように、本実施形態におけるゲームシステム1については、左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、図21〜図23に示すように、クレードル8に本体装置2単体を装着することによって据置型モニタ9に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードル8に本体装置2単体を装着して、クレードル8に接続された据置型モニタ9から画像(および音声)を出力する利用態様におけるゲームシステムを用いて説明する。そして、ユーザは、リング型拡張装置5に装着された右コントローラ4およびベルト型拡張装置6に装着された左コントローラ3を用いて、ゲーム操作を行う例を用いる。また、第2のゲーム例におけるゲーム処理の一例として、据置型モニタ9に表示されるプレイヤキャラクタPCがユーザ操作に応じて、左右端にオブジェクトOBJLおよびOBJRが設けられたバランス棒を用いてバランスを取りながら、仮想ゲーム空間内を歩行して移動する処理を用いる。なお、プレイヤキャラクタPCが仮想空間に配置されるオブジェクトの他の例に相当する。
例えば、図21においては、仮想ゲーム空間内にプレイヤキャラクタPCが配置されている。プレイヤキャラクタPCは、左端のオブジェクトOBJLおよび右端のオブジェクトOBJRを有するバランス棒の中央を持った状態で静止している。上記バランス棒は、左端のオブジェクトOBJLから右端のオブジェクトOBJRまでの長さが短い短縮状態と、左端のオブジェクトOBJLから右端のオブジェクトOBJRまでの長さが長い伸張状態とに変化可能である。図21に示すようなリング型拡張装置5の環状部201が変形していない定常状態においては、バランス棒は、短縮状態とされる。なお、伸張状態のバランス棒を持つプレイヤキャラクタPCは、ユーザの足踏み操作に応じて歩行移動が可能な動作モードとなるが、短縮状態のバランス棒を持つプレイヤキャラクタPCは、足踏み操作が行われても歩行移動ができない動作モードとなる。図21の例では、ユーザが静止して起立した状態(左コントローラ3が直立、すなわち左コントローラ3のy軸負方向が鉛直方向となった状態)であり、足踏み操作も身体を左右に傾ける操作も行われていない状態を示している。
一方、図22に示すように、グリップカバー203および204が互いに近づくように環状部201を定常状態から所定の状態以上までリング型拡張装置5を変形させる操作(図示B方向に変形させる押込操作)が行われた場合、左端のオブジェクトOBJLから右端のオブジェクトOBJRまでの長さが長い伸張状態にバランス棒が変化して、プレイヤキャラクタPCが歩行可能な動作モードとなる。このような押込操作は、リング型拡張装置5に設けられた歪みゲージが検出する歪みに基づいて検出される。リング型拡張装置5の環状部201が定常状態から変形した場合、上記歪みゲージによって台座部の歪みが検出され、検出された歪みに基づいて、環状部201が変形する向き(すなわち、2つのグリップカバー203および204が離れる向き、または、近づく向き)と変形量とを算出することができる。そして、環状部201が変形する向きが2つのグリップカバー203および204が近づく向きであり、予め設定された閾値以上の変形量である場合、左右のオブジェクトOBJLおよびOBJRを開いた状態とするための押込操作が行われたと判定される。なお、上記押込操作が解除された場合、バランス棒が上記短縮状態に変化して、プレイヤキャラクタPCが歩行できない動作モードとなる。なお、図22の例でも、ユーザが静止して起立した状態(左コントローラ3が直立、すなわち左コントローラ3のy軸負方向が鉛直方向となった状態)であり、足踏み操作も身体を左右に傾ける操作も行われていない状態を示している。なお、リング型拡張装置5の押込操作が行われたか否かの判定方法については、算出した変形量が予め設定された閾値以上であるか否か以外の方法で判定されてもよい。例えば、閾値に関わらず、単にリング型拡張装置5の歪センサによって歪みが検出されたか否かによって、上記押込操作の有無が判定されてもよい。
図23に示すように、ユーザが足踏み動作を行った場合、当該ユーザの左腿に締着されたベルト型拡張装置6も動かされる。例えば、ユーザの左股の前部に締着されたベルト型拡張装置6に装着される左コントローラ3は、ユーザの足踏み動作に応じて、実空間における重力方向(鉛直方向)に垂直なユーザの左右水平方向を軸として起立状態(左コントローラ3の長軸方向が鉛直方向に向いた状態)と仰角状態(左コントローラ3の当該長軸方向が当該起立状態からユーザの前後水平方向へ近づいた状態)との間を揺動(図示M方向の揺れ)するように動かされる。一例として、ユーザが左足を床面につけて静止して立っている状態において左コントローラ3のy軸負方向が実空間の鉛直方向となるように(すなわち、左コントローラ3のy軸正方向が実空間の直上方向となるように)、ベルト型拡張装置6に左コントローラ3が装着される場合、ユーザが左股を上げることに応じて、左コントローラ3のy軸負方向が鉛直方向に向いた起立状態から左コントローラ3のy軸負方向が当該起立状態から水平方向へ近づいた仰角状態に、ユーザの左右水平方向(左コントローラ3のx軸方向)を軸として回転するように左コントローラ3本体が動かされる。
このようなベルト型拡張装置6に装着された左コントローラ3を用いて、ユーザが停止状態から動き出した(すなわち、足踏み操作を開始した)状態を検出する方法について説明する。一例として、左コントローラ3において生じる重力加速度を省いた実空間の直上方向の加速度の値が所定の閾値以上、すなわち実空間の直上方向へ加速していると判定される場合や、左コントローラ3が上記揺動動作する角度変化が所定の閾値以上であると判定される場合、ユーザが足踏み動作を開始したと判定することができる。また、ユーザが足踏み動作を開始した後に、所定期間における左コントローラ3の角度変化や加速度変化が所定の閾値以下であると判定された場合や、所定期間における左コントローラ3の角速度変位量や角速度平均値が所定の閾値以下であると判定された場合、ユーザが足踏み動作を停止したと判定することができる。
また、ユーザが足踏み動作をしている期間中における周期(足踏み周期であり、ベルト型拡張装置6が締着されたユーザの左股を上げ下げする周期)を算出するためには、当該ユーザが股(例えば左股)を上げ下げする動作を検出することが必要となる。ユーザが股を上げ下げする動作を検出するための股の上げ下げ判定については、左コントローラ3に生じる角速度および加速度の少なくとも一方を用いて任意の方法を用いればよいが、一例として、左コントローラ3に生じる角速度および加速度の両方を用いて判定してもよい。具体的には、所定期間における左コントローラ3のx軸方向周りの角度(膝曲げ角度が大きくなるほど当該角度が大きくなる)の最大値および最小値を取得し、当該最小値が得られた時点より当該最大値が得られた時点が直近であり、左コントローラ3の鉛直方向の加速度が所定の閾値以下、すなわち実空間の直上方向に加速している場合、股上げ状態にあると判定することができる。また、所定期間における左コントローラ3のx軸方向周りの角度の最大値および最小値を取得し、当該最大値が得られた時点より当該最小値が得られた時点が直近であり、所定期間における左コントローラ3の鉛直方向の加速度が所定の閾値以上、すなわち実空間の鉛直方向に加速している場合、股下げ状態にあると判定することができる。
上述したようにユーザの足踏み動作が判定されることによって、プレイヤキャラクタPCが移動可能な動作モードである場合は、ユーザの足踏み動作に応じた動作および速度で仮想ゲーム空間内を歩行して移動するプレイヤキャラクタPCが表示される。例えば、上述したユーザの足踏み動作の判定や股の上げ下げ判定の結果に基づいて、ユーザの動きとプレイヤキャラクタPCの動きとを一致させるようにプレイヤキャラクタPCの動作を制御して移動速度を変化させてもよい。具体的には、上記股の上げ下げ判定の結果に応じて、ユーザが左足を上げているタイミングと同期させてプレイヤキャラクタPCの左足を上げ、ユーザが右足を上げているタイミングと同期させてプレイヤキャラクタPCの右足を上げるように、プレイヤキャラクタPCの歩行または走行動作を制御することによって、ユーザ操作に対する違和感(ズレ)を軽減することができる。
また、図23に示すように、上記押込操作された状態でリング型拡張装置5を左右に傾ける操作(図示N方向に回転させるロール操作)が行われた場合、プレイヤキャラクタPCは、伸張状態のバランス棒を当該ロール操作に応じた方向に傾けるような動作を行う。ここで、リング型拡張装置5を左に傾ける操作とは、実空間において、リング型拡張装置5における環状部201の円環軸が鉛直方向となった状態(すなわち、環状部201が水平に配置されている状態)で押込操作されている場合、当該円環軸が左に傾くようにユーザの前後方向周り(例えば、右コントローラ4のy軸方向周り)に回転するようにリング型拡張装置5がロールするような操作である。そして、上記押込操作された状態でリング型拡張装置5を左に傾けるロール操作が行われた場合、プレイヤキャラクタPCは、伸張状態のバランス棒を左に傾ける(すなわち、平衡状態に対して左端のオブジェクトOBJLが下降し右端のオブジェクトOBJRが上昇した状態)ような動作を行う。
このようにリング型拡張装置5を左右に傾けるロール操作が行われた場合、リング型拡張装置5に装着されている右コントローラ4には、ユーザの前後方向周り(例えば、右コントローラ4のy軸方向周り)の角速度が生じるとともに、右コントローラ4に作用する重力加速度の方向が変化することになる。したがって、右コントローラ4における加速度センサ114によって検出される加速度および/または角速度センサ115によって検出される角速度を用いることによって、リング型拡張装置5を左右に傾けるロール操作の操作方向および操作角度等を算出することができる。そして、第2のゲーム例では、上記押込操作された状態でリング型拡張装置5を左右に傾けるロール操作が行われた場合、当該操作方向に当該操作角度だけバランス棒を傾ける動作が行われる。なお、現実には、リング型拡張装置5を左右に傾けるロール操作は、リング型拡張装置5のピッチ操作およびヨー操作が混ざった操作となることがあるため、ロール操作、ピッチ操作、およびヨー操作によってそれぞれ変化するリング型拡張装置5の操作方向および操作角度を合成することによって、最終的な操作方向や操作角度が算出されてもよい。
ここで、仮想ゲーム空間には、プレイヤキャラクタPCの歩行移動を妨害する障害オブジェクトH等が複数配置されている。障害オブジェクトHは、プレイヤキャラクタPCが歩行移動する経路の左右に配置されており、バランス棒の傾斜角度によっては左端のオブジェクトOBJLまたは右端のオブジェクトOBJRが衝突することがある。つまり、障害オブジェクトHとの衝突をさけるためには、障害オブジェクトHに左端のオブジェクトOBJLまたは右端のオブジェクトOBJRが衝突しないようにバランス棒の傾斜角度を調整しながら、プレイヤキャラクタPCの歩行移動を行うことが必要となる。したがって、ユーザは、リング型拡張装置5を押込操作しながら、ベルト型拡張装置6を締着した足で足踏み操作することによってプレイヤキャラクタPCを歩行移動させながら、リング型拡張装置5を左右に傾けるロール操作を行うことによって障害オブジェクトHとの衝突を避けながらプレイヤキャラクタPCの歩行移動を続けるような操作を必要とされる。
なお、プレイヤキャラクタPCが歩行移動する経路の左右には、さらにゲームスコアを得ることができる獲得オブジェクトが配置されてもよい。獲得オブジェクトは、左端のオブジェクトOBJLまたは右端のオブジェクトOBJRが衝突することによって、当該獲得オブジェクトに設定されているゲームスコアを得ることができるため、積極的に左端のオブジェクトOBJLまたは右端のオブジェクトOBJRと衝突させることによってゲームスコアを稼ぐことができる。この場合、ユーザは、リング型拡張装置5を押込操作しながら、ベルト型拡張装置6を締着した足で足踏み操作することによってプレイヤキャラクタPCを歩行移動させながら、リング型拡張装置5を左右に傾けるロール操作を行うことによって獲得オブジェクトと積極的に衝突させてプレイヤキャラクタPCの歩行移動を続けるような操作を必要とされる。
このように、上記第2のゲーム例においては、リング型拡張装置5の動きに応じて、プレイヤキャラクタPCの姿勢を変更する処理が行われ、プレイヤキャラクタPCが障害オブジェクトHと衝突する姿勢で移動している場合に当該移動が阻害されたりゲームスコアが減点されたりし、プレイヤキャラクタPCが獲得オブジェクトと衝突する姿勢で移動している場合にゲームスコアが加点されたりする。つまり、上記第2のゲーム例においては、仮想ゲーム空間内の所定の位置において、プレイヤキャラクタPCが所定の姿勢である場合、ユーザにゲーム内メリットを付与されることになる。なお、上記ゲーム内メリットとしては、ゲームスコアの加点/減点や移動の阻害有無の他、移動速度の加速/減速、ゲーム難易度の上昇/下降、ゲームアイテムの獲得成功/失敗等、種々のメリットがユーザに与えられてもかまわない。また、上記ゲーム内メリットを付与する際の判定においては、プレイヤキャラクタPCの位置ではなく、スタート位置からの距離や歩数を用いてもよい。また、上記ゲーム内メリットを付与する際の判定においては、プレイヤキャラクタPCの姿勢ではなく、リング型拡張装置5の動きを示すデータ、すなわち右コントローラ4の慣性センサによって検出されたデータそのものを用いてもよい。
なお、プレイヤキャラクタPCの歩行移動およびバランス棒を傾ける動作は、リング型拡張装置5が押込操作されている場合に限って可能であってもよい。この場合、リング型拡張装置5の押込操作が解除されれば、リング型拡張装置5の環状部201の押込操作を再度行うことによって行って、プレイヤキャラクタPCの歩行移動およびバランス棒を傾ける動作が可能となる。
また、上記押込操作が行われていない状態から上記押込操作が有効となったと判定するためにリング型拡張装置5の環状部201の変形量を判定するための閾値(伸張閾値)と、上記押込操作が行われている状態から上記押込操作を無効と判定するための閾値(短縮閾値)とは、異なる値に設定してもよい。例えば、上記伸張閾値に対して上記短縮閾値を相対的に小さく設定することによって、上記押込操作が行われた後にリング型拡張装置5をロール操作したり足踏み操作したりすることによって当該押込操作に対する力が緩んでしまうような状態となっても、バランス棒が短縮状態に戻ってプレイヤキャラクタPCの歩行移動および/またはバランス棒を傾ける動作が停止してしまうような状況をある程度防止することができる。なお、上記伸張閾値が第1閾値の一例に相当し、上記短縮閾値が第2閾値の一例に相当する。
また、ユーザの足踏み操作は、ベルト型拡張装置6(左コントローラ3)の動きだけでなく、リング型拡張装置5(右コントローラ4)の動きや他の入力装置からの出力も用いて判定されてもかまわない。例えば、ユーザが足踏み操作の開始判定、足踏み操作の停止判定、および足踏み操作中の股上げ/股下げ判定の少なくとも1つの判定は、リング型拡張装置5(右コントローラ4)に生じる加速度および/または角速度も用いて行われてもよい。また、リング型拡張装置5を用いたロール操作は、右コントローラ4(リング型拡張装置5)における動きセンサの出力に加えて、左コントローラ3や他の入力装置からの出力を用いて判定されてもかまわない。また、ユーザの足踏み操作は、ベルト型拡張装置6(左コントローラ3)の動きに代えて、リング型拡張装置5(右コントローラ4)の動きや他の入力装置からの出力も用いて判定されてもかまわない。前者の場合、第2のゲーム例においては、ベルト型拡張装置6のみを用いたゲーム操作によってゲームプレイされてもよい。
次に、図24〜図28を参照して、第2のゲーム例においてゲームシステム1で実行される具体的な処理の一例について説明する。図24は、第2のゲーム例において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図24に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
第2のゲーム例において、DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムPbが記憶される。本実施形態においては、各種プログラムPbは、上述した右コントローラ4との間で無線通信するための通信プログラムや、右コントローラ4から取得したデータに基づいた情報処理を行うためのアプリケーションプログラム(例えば、ゲームプログラム)等が記憶される。なお、各種プログラムPbは、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。プロセッサ81は、DRAM85に記憶された各種プログラムPbを実行する。
また、第2のゲーム例において、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDba、角速度データDbb、加速度データDbc、姿勢データDbd、重力方向データDbe、リング変形量データDbg、伸縮状態データDbh、歩行動作データDbi、股上げ/股下げ動作データDbj、スコアデータDbk、プレイヤキャラクタ動作データDbm、障害オブジェクト動作データDbn、および画像データDbp等が記憶される。
操作データDaaは、左コントローラ3および右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、左コントローラ3および右コントローラ4から送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)やリング型拡張装置5における環状部201の変形状態を示す歪み値が含まれている。本実施形態では、無線通信によって左コントローラ3および右コントローラ4からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaaが適宜更新される。なお、操作データDaaの更新周期は、ゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
角速度データDabは、左コントローラ3および右コントローラ4から取得した操作データのうち、現時点から所定時間前までにそれぞれ取得された左コントローラ3および右コントローラ4に生じている角速度の履歴を示すデータである。例えば、角速度データDabは、左コントローラ3および右コントローラ4にそれぞれ生じているxyz軸周りの角速度を示すデータの履歴等を含んでいる。
加速度データDacは、左コントローラ3および右コントローラ4から取得した操作データのうち、現時点から所定時間前までにそれぞれ取得された左コントローラ3および右コントローラ4に生じている加速度の履歴を示すデータである。例えば、加速度データDacは、左コントローラ3および右コントローラ4にそれぞれ生じているxyz軸方向の加速度を示すデータの履歴等を含んでいる。
姿勢データDbdは、実空間における左コントローラ3および右コントローラ4のそれぞれの姿勢を示すデータであり、現時点から所定時間前までにおけるそれぞれの姿勢の履歴を示すデータである。一例として、姿勢データDbdは、実空間における左コントローラ3および右コントローラ4のxyz軸方向(例えば、実空間におけるXYZ軸に対する角度)のそれぞれの履歴を示すデータである。
重力方向データDbeは、左コントローラ3および右コントローラ4にそれぞれ作用している重力加速度の方向を示すデータである。
リング変形量データDbgは、リング型拡張装置5の変形方向および変形量を示すデータである。
伸縮状態データDbhは、バランス棒の状態(例えば、伸張状態または短縮状態)を示すデータである。歩行動作データDbiは、プレイヤキャラクタPCの歩行状態(例えば、停止状態または歩行状態)を示すデータである。股上げ/股下げ動作データDbjは、ユーザの足踏み操作における股上げ時点および股下げ時点を示すデータである。
スコアデータDbkは、現時点のゲームスコアを示すデータである。
プレイヤキャラクタ動作データDbmは、仮想ゲーム空間に配置されているプレイヤキャラクタPCの位置、状態、姿勢、動作等を示すデータである。障害オブジェクト動作データDbnは、仮想ゲーム空間に配置されている障害オブジェクトHの位置、状態、姿勢、動作等を示すデータである。
画像データDbpは、表示画面に画像(例えば、プレイヤキャラクタPCの画像、バランス棒の画像、障害オブジェクトHの画像、フィールド画像、背景画像等)を表示するためのデータである。
次に、図25〜図28を参照して、第2のゲーム例における情報処理の詳細な一例を説明する。図25は、第2のゲーム例においてゲームシステム1で実行される情報処理の一例を示すフローチャートである。図26は、図25におけるステップS605において行われる伸縮処理の詳細な一例を示すサブルーチンである。図27は、図25におけるステップS606において行われる傾斜処理の詳細な一例を示すサブルーチンである。図28は、図25におけるステップS607において行われる歩行処理の詳細な一例を示すサブルーチンである。第2のゲーム例においては、図25〜図28に示す一連の処理は、プロセッサ81が各種プログラムPbに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図25〜図28に示す情報処理が開始されるタイミングは任意である。
なお、図25〜図28に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち図25〜図28に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図25において、プロセッサ81は、情報処理における初期設定を行い(ステップS601)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。例えば、プロセッサ81は、仮想ゲーム空間において各オブジェクト(バランス棒を把持するプレイヤキャラクタPCを含む)を初期配置して仮想ゲーム空間の初期状態を生成し、各オブジェクトの位置、方向、状態、および姿勢等を用いて伸縮状態データDbh、歩行動作データDbi、プレイヤキャラクタ動作データDbm、および障害オブジェクト動作データDbnを更新する。なお、プロセッサ81は、プレイヤキャラクタPCの状態を、短縮状態のバランス棒を把持して停止状態に初期設定する。
次に、プロセッサ81は、左コントローラ3および右コントローラ4からそれぞれ操作データを取得して操作データDbaを更新し(ステップS602)、次のステップに処理を進める。なお、プロセッサ81は、上記ステップS602において左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、左コントローラ3および右コントローラ4にそれぞれ生じている角速度を示すデータを、角速度データDbbに格納する。また、プロセッサ81は、上記ステップS602において左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、左コントローラ3および右コントローラ4にそれぞれ生じている加速度を示すデータを、加速度データDbcに格納する。なお、データ取得部は、歪データと動きデータとを取得する処理を行うものであり、他の例として左コントローラ3および右コントローラ4からそれぞれ操作データを取得して操作データDbaを更新する処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、左コントローラ3および右コントローラ4の姿勢をそれぞれ算出し(ステップS603)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbbに格納されている角速度データを用いて、左コントローラ3および右コントローラ4それぞれのxyz軸周りの角速度を取得する。そして、プロセッサ81は、姿勢データDbdが示す左コントローラ3および右コントローラ4のそれぞれ姿勢における重力加速度方向を基準としたxyz軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後の重力加速度方向を基準としたxyz軸の方向を左コントローラ3および右コントローラ4のそれぞれの姿勢を示す最新のデータとして、姿勢データDbdに格納する。また、プロセッサ81は、加速度データDbcに格納されている加速度データを用いて、左コントローラ3および右コントローラ4にそれぞれ作用している重力加速度の方向を算出して、重力方向データDbeに格納する。なお、重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ3および右コントローラ4それぞれに平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。また、プロセッサ81は、重力方向データDbeが示す左コントローラ3および右コントローラ4にそれぞれ生じている重力加速度の方向を用いて、姿勢データDbdが示す左コントローラ3および右コントローラ4それぞれの最新の姿勢を適時補正してもかまわない。
次に、プロセッサ81は、リング型拡張装置5の変形量を算出し(ステップS604)、次のステップに処理を進める。例えば、プロセッサ81は、操作データDbaが示す歪み値を用いて、リング型拡張装置5における環状部201の変形量および変形方向を算出し、当該算出結果を用いてリング変形量データDbgを更新する。
次に、プロセッサ81は、伸縮処理を行い(ステップS605)、ステップS606に処理を進める。以下、図26を参照して、上記ステップS605において行われる伸縮処理について説明する。なお、第1制御は、歪データに応じてオブジェクトに実行される処理であり、他の例としてプロセッサ81が行う伸縮処理に相当する。
図26において、プロセッサ81は、バランス棒が短縮状態か否かを判定する(ステップS521)。例えば、プロセッサ81は、伸縮状態データDbhを参照して、バランス棒が短縮状態か否かを判定する。そして、プロセッサ81は、バランス棒が短縮状態である場合、ステップS622に処理を進める。一方、プロセッサ81は、バランス棒が伸張状態である場合、ステップS624に処理を進める。
ステップS622において、プロセッサ81は、上記ステップS604において算出された変形量が伸張閾値以上であるか否かを判定する。そして、プロセッサ81は、上記変形量が伸張閾値以上である場合、ステップS623に処理を進める。一方、プロセッサ81は、上記変形量が伸張閾値未満である場合、当該サブルーチンによる処理を終了する。ここで、上記伸張閾値は、リング型拡張装置5に対する押込操作が開始されたことを検出するために、リング型拡張装置5の変形量を判定するための閾値であり、リング型拡張装置5の変形量が当該伸張閾値以上に到達した場合に押込操作が開始されたと判定される。
ステップS623において、プロセッサ81は、バランス棒の状態を伸張状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、バランス棒の状態を伸張状態に設定して、伸縮状態データDbhを更新する。
一方、上記ステップS621においてバランス棒の状態が伸張状態にあると判定された場合、プロセッサ81は、上記ステップS604において算出された変形量が短縮閾値以上であるか否かを判定する。そして、プロセッサ81は、上記変形量が短縮閾値以上である場合、上記ステップS623に処理を進める。一方、プロセッサ81は、上記変形量が短縮閾値未満である場合、ステップS625に処理を進める。ここで、上記短縮閾値は、リング型拡張装置5に対する押込操作が開始された後にリング型拡張装置5に対する押込力が緩んだ場合であっても、当該押込操作が継続していると判定するための閾値であり、上記伸張閾値より小さな値に設定される。
ステップS625において、プロセッサ81は、バランス棒の状態を短縮状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、バランス棒の状態を短縮状態に設定して、伸縮状態データDbhを更新する。
図25に戻り、上記ステップS605における伸縮処理の後、プロセッサ81は、傾斜処理を行い(ステップS606)、ステップS607に処理を進める。以下、図27を参照して、上記ステップS606において行われる傾斜処理について説明する。なお、第3制御は、第1入力装置から出力される動きデータに応じてオブジェクトの姿勢を変更する処理であり、一例としてプロセッサ81が行う傾斜処理に相当する。
図27において、プロセッサ81は、バランス棒が伸張状態か否かを判定する(ステップS631)。例えば、プロセッサ81は、伸縮状態データDbhを参照して、バランス棒が伸張状態か否かを判定する。そして、プロセッサ81は、バランス棒が伸張状態である場合、ステップS632に処理を進める。一方、プロセッサ81は、バランス棒が短縮状態である場合、ステップS634に処理を進める。
ステップS632において、プロセッサ81は、実空間におけるリング型拡張装置5の傾斜角度(操作角度)を算出し、次のステップに処理を進める。例えば、プロセッサ81は、姿勢データDbdが示す右コントローラ4の姿勢を用いて、重力加速度の方向に対してリング型拡張装置5を左右に傾けているロール操作の操作方向および操作角度(例えば、重力加速度の方向とx軸方向またはz軸方向との角度差)を算出する。
次に、プロセッサ81は、バランス棒の傾斜角度を算出し(ステップS633)、ステップS635に処理を進める。例えば、プロセッサ81は、上記ステップS632において算出されたリング型拡張装置5のロール操作の操作方向および操作角度に対応するバランス棒の傾斜角度(例えば、リング型拡張装置5のロール操作の操作方向と同じ方向に当該ロール操作の操作角度と同じ角度でバランス棒が傾く傾斜角度)を算出し、当該バランス棒の傾斜角度を用いてプレイヤキャラクタ動作データDbmを更新する。
一方、ステップS631において、バランス棒が短縮状態であると判定された場合、プロセッサ81は、バランス棒を平衡状態に設定し、ステップS635に処理を進める。例えば、プロセッサ81は、設定されたバランス棒の平衡状態を用いて、プレイヤキャラクタ動作データDbmを更新する。
ステップS635において、プロセッサ81は、プレイヤキャラクタPCの姿勢を設定し、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、上記ステップS633または上記ステップS634において設定されたバランス棒の状態(傾斜角度)に基づいて、プレイヤキャラクタPCの姿勢を設定し、当該設定された姿勢を用いてプレイヤキャラクタ動作データDbmを更新する。
図25に戻り、上記ステップS606における傾斜処理の後、プロセッサ81は、歩行処理を行い(ステップS607)、ステップS608に処理を進める。以下、図28を参照して、上記ステップS607において行われる歩行処理について説明する。なお、第2制御は、動きデータに応じてオブジェクトに実行される処理であり、他の例としてプロセッサ81が行う歩行処理に相当する。
図28において、プロセッサ81は、バランス棒が伸張状態か否かを判定する(ステップS641)。例えば、プロセッサ81は、伸縮状態データDbhを参照して、バランス棒が伸張状態か否かを判定する。そして、プロセッサ81は、バランス棒が伸張状態である場合、ステップS642に処理を進める。一方、プロセッサ81は、バランス棒が短縮状態である場合、ステップS648に処理を進める。
ステップS642において、プロセッサ81は、プレイヤキャラクタPCが停止状態か否かを判定する。例えば、プロセッサ81は、歩行動作データDbiが示す状態が停止状態に設定されている場合、上記ステップS642において肯定判定する。そして、プロセッサ81は、プレイヤキャラクタPCが停止状態に設定されている場合、ステップS643に処理を進める。一方、プレイヤキャラクタPCが歩行状態に設定されている場合、ステップS646に処理を進める。
ステップS643において、プロセッサ81は、左コントローラ3において生じている重力加速度を省いた実空間の直上方向の加速度を算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDbcおよび重力方向データDbeを用いて、左コントローラ3において生じている実空間の直上方向の加速度(重力加速度とは反対方向の加速度)を取得し、当該直上方向の加速度からそれぞれ重力加速度を減算する。
次に、プロセッサ81は、ユーザが歩き出す(足踏み操作を開始する)動作を行ったか否かを判定する(ステップS644)。例えば、プロセッサ81は、上記ステップS643において算出された左コントローラ3の直上方向の加速度が歩き出したことを示す所定の閾値以上の大きさである場合、上記ステップS644において肯定判定する。そして、プロセッサ81は、ユーザが歩き出す(足踏み操作を開始する)動作を行った場合、ステップS645に処理を進める。一方、プロセッサ81は、ユーザが歩き出す(足踏み操作を開始する)動作を行っていない場合、ステップS657に処理を進める。
ステップS645において、プロセッサ81は、プレイヤキャラクタPCを歩行状態に設定し、ステップS649に処理を進める。例えば、プロセッサ81は、歩行動作データDbiが示す状態を歩行状態に設定して、歩行動作データDbiを更新する。
一方、上記ステップS642においてプレイヤキャラクタPCが歩行状態にあると判定された場合、プロセッサ81は、直近の所定期間における左コントローラ3の角度変化および/または角速度変位量を算出し(ステップS646)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbbを用いて、左コントローラ3において直前の所定期間内で生じている角速度を取得し、当該角速度を用いて、当該所定期間における左コントローラ3の角度変化および/または当該所定期間における左コントローラ3の角速度変位量を算出する。
次に、プロセッサ81は、ユーザが足踏み操作を停止する動作を行ったか否かを判定する(ステップS647)。例えば、プロセッサ81は、上記ステップS646において算出した角度変化が足踏み動作を停止したことを示す所定の閾値以下である場合、および/または上記ステップS646において算出した角速度変位量が足踏み動作を停止したことを示す所定の閾値以下である場合、上記ステップS647において肯定判定する。そして、プロセッサ81は、ユーザが足踏み操作を停止する動作を行った場合、ステップS648に処理を進める。一方、プロセッサ81は、ユーザが足踏み操作を停止する動作を行っていない場合、上記ステップS645に処理を進める。
ステップS648において、プロセッサ81は、プレイヤキャラクタPCを停止状態に設定し、ステップS657に処理を進める。例えば、プロセッサ81は、歩行動作データDbiが示す状態を停止状態に設定して、歩行動作データDbiを更新する。なお、上述したように、上記ステップS641においてバランス棒が短縮状態であると判定された場合、上記ステップS648の処理が行われるため、バランス棒が短縮状態となった場合、プレイヤキャラクタPCが停止状態に設定されてプレイヤキャラクタPCが移動できない動作モードに設定されることになる。
プレイヤキャラクタPCが歩行状態である場合、ユーザの足踏み状態が判定される。上記ステップS645における処理の後、プロセッサ81は、直近の所定期間における左コントローラ3の前後方向(例えば、x軸方向周り)の角度の最大値および最小値を取得して(ステップS649)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbbを用いて、左コントローラ3において直前の所定期間において生じているユーザの前後方向(例えば、左コントローラ3のx軸周り)の角速度を取得し、当該角速度から算出された当該前後方向の角度(膝曲げ角度が大きくなるほど大きくなる角度)の最大値および最小値を取得する。
次に、プロセッサ81は、上記ステップS649において取得された最小値が得られた時点より最大値が得られた時点が直近か否かを判定する(ステップS650)。そして、プロセッサ81は、最大値が得られた時点が直近である場合、ステップS651に処理を進める。一方、プロセッサ81は、最小値が得られた時点が直近である場合、ステップS654に処理を進める。
ステップS651において、プロセッサ81は、直近の所定期間における左コントローラ3の鉛直方向の加速度を取得し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDbcを用いて、直近の所定期間における左コントローラ3の鉛直方向の加速度を取得する。
次に、プロセッサ81は、上記ステップS651において取得された加速度が、実空間の直上方向に加速していると判定するための股上げ閾値以下であるか否かを判定する(ステップS652)。そして、プロセッサ81は、上記ステップS651において取得された加速度が股上げ閾値以下である場合、左コントローラ3が実空間の直上方向に加速していると判定して、ステップS653に処理を進める。一方、プロセッサ81は、上記ステップS651において取得された加速度が股上げ閾値より大きい場合、左コントローラ3が実空間の直上方向に加速していないと判定して、ステップS657に処理を進める。
ステップS653において、プロセッサ81は、左コントローラ3の前後方向(例えば、x軸方向周り)の角度の最大値が得られた時点を股上げ時点として設定し、ステップS657に処理を進める。例えば、プロセッサ81は、上記ステップS649において取得された最大値が得られた時点を今回の股上げ時点として、当該股上げ時点が新たな時点である場合に当該股上げ時点を用いて股上げ/股下げ動作データDbnを更新する。
一方、ステップS654において、プロセッサ81は、直近の所定期間における左コントローラ3の鉛直方向の加速度を取得し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDbcを用いて、直近の所定期間における左コントローラ3の鉛直方向の加速度を取得する。
次に、プロセッサ81は、上記ステップS654において取得された加速度が実空間の鉛直方向に加速していると判定するための股下げ閾値以上であるか否かを判定する(ステップS655)。そして、プロセッサ81は、上記ステップS654において取得された加速度が股下げ閾値以上である場合、左コントローラ3が実空間の鉛直方向に加速していると判定して、ステップS656に処理を進める。一方、プロセッサ81は、上記ステップS654において取得された加速度が股下げ閾値より小さい場合、左コントローラ3が実空間の鉛直方向に加速していないと判定して、ステップS657に処理を進める。
ステップS656において、プロセッサ81は、左コントローラ3の前後方向(例えば、x軸方向周り)の角度の最小値が得られた時点を股下げ時点として設定し、ステップS657に処理を進める。例えば、プロセッサ81は、上記ステップS649において取得された最小値が得られた時点を今回の股下げ時点として、当該股下げ時点が新たな時点である場合に当該股下げ時点を用いて股上げ/股下げ動作データDbnを更新する。
ステップS657において、プロセッサ81は、プレイヤキャラクタPCにおける歩行動作を設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、歩行動作データDbiが示す状態に基づいて、プレイヤキャラクタPCを歩行状態または停止状態に設定して、プレイヤキャラクタ動作データDbmを更新する。また、プロセッサ81は、プレイヤキャラクタPCを歩行状態である場合、股上げ/股下げ動作データDbnが示す股上げ時点および股下げ時点のタイミングに基づいて、現時点のプレイヤキャラクタPCが歩行する足の状態を設定して、プレイヤキャラクタ動作データDbmを更新する。
図25に戻り、上記ステップS607における歩行処理の後、プロセッサ81は、プレイヤキャラクタPCの動作制御処理を行い(ステップS608)、次のステップに処理を進める。例えば、プロセッサ81は、プレイヤキャラクタ動作データDbmが示すプレイヤキャラクタPCおよびバランス棒の位置、状態、姿勢、動作等に基づいて、仮想ゲーム空間においてプレイヤキャラクタPCを配置する。
次に、プロセッサ81は、オブジェクトの動作制御処理を行い(ステップS609)、次のステップに処理を進める。例えば、プロセッサ81は、障害オブジェクト動作データDbpが示す障害オブジェクトHの位置およびプレイヤキャラクタ動作データDbmが示すバランス棒(左端のオブジェクトOBJLおよび右端のオブジェクトOBJR)の位置に基づいて、障害オブジェクトHとバランス棒とが衝突した場合、仮想ゲーム空間において当該障害オブジェクトHによる攻撃が行われて当該障害オブジェクトHを消滅させる演出を行うように障害オブジェクト動作データDbpを更新し、当該攻撃によるゲームスコアを変化させてスコアデータDbkを更新する。また、プロセッサ81は、所定のアルゴリズム(出現パターン)に基づいて、仮想ゲーム空間に障害オブジェクトHを出現させ、当該出現後の位置に基づいて障害オブジェクト動作データDbpを更新する。そして、プロセッサ81は、障害オブジェクト動作データDbpが示す障害オブジェクトHの位置、状態、姿勢、動作等に基づいて、仮想ゲーム空間において障害オブジェクトHを配置する。
次に、プロセッサ81は、画像生成表示制御処理を行い(ステップS610)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS608およびステップS609の処理においてプレイヤキャラクタPCおよび障害オブジェクトH等が配置された仮想ゲーム空間に仮想カメラを配置し、当該仮想カメラから見た仮想ゲーム空間画像を生成して、当該仮想ゲーム空間画像を据置型モニタ9に出力する。また、プロセッサ81は、スコアデータDbkが示すゲームスコアを示す画像を上記仮想ゲーム空間画像の適所に重畳して据置型モニタ9に出力する。なお、ゲーム処理部は、歪データに基づいて、仮想空間に配置されるオブジェクトに対する第1制御を実行し、動きデータに基づいて、オブジェクトに対する当該第1制御とは異なる第2制御を実行する処理を行うものであり、他の例として上記ステップS603−ステップS610における処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、ゲーム処理を終了するか否かを判定する(ステップS611)。上記ステップS611においてゲーム処理を終了する条件としては、例えば、ゲーム処理が終了される条件が満たされたことや、ユーザがゲーム処理を終了する操作を行ったこと等がある。プロセッサ81は、ゲーム処理を終了しない場合に上記ステップS602に戻って処理を繰り返し、ゲーム処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップS602〜ステップS611の一連の処理は、ステップS611でゲーム処理を終了すると判定されるまで繰り返し実行される。
このように、第2のゲーム例においては、リング型拡張装置5の変形させる押込操作に応じてプレイヤキャラクタPCが移動可能な動作モードと移動できない動作モードとを切り替える制御や、バランス棒の状態を変化させる制御が行われ、足踏み動作によるベルト型拡張装置6の動きに応じてプレイヤキャラクタPCを歩行移動させる制御が行われるため、リング型拡張装置5およびベルト型拡張装置6の両方を用いたユーザ入力の方法を豊富にすることができる。
(第3のゲーム例)
次に、本体装置2が行う第3のゲーム例における具体的な処理を説明する前に、図29〜図32を用いて、本体装置2で行う第3のゲーム例の概要について説明する。なお、図29は、第3のゲーム例において、ユーザがリング型拡張装置5を操作する様子の一例を示す図である。図30は、ユーザ操作に応じて据置型モニタ9に表示される第3のゲーム例におけるゲーム画像の第1の例を示す図である。図31は、ユーザ操作に応じて据置型モニタ9に表示される第3のゲーム例におけるゲーム画像の第2の例を示す図である。図32は、ユーザ操作に応じて据置型モニタ9に表示される第3のゲーム例におけるゲーム画像の第3の例を示す図である。
図29に示すように、第3のゲーム例では、ユーザがリング型拡張装置5における一方のグリップカバー(例えば、グリップカバー203)を両手で把持した状態で、他方のグリップカバー(例えば、グリップカバー204)をユーザの腹部に当接させることによって、ユーザの両手と腹部との間にリング型拡張装置5を挟むような状態で操作が行われる。そして、両手と腹部との間に挟んだリング型拡張装置5における2つのグリップカバー203および204が近づくようにリング型拡張装置5を変形させながら、リング型拡張装置5を左右に振るように動かすユーザ操作が行われる。ここで、ユーザの両手と腹部との間にリング型拡張装置5を挟むような状態でリング型拡張装置5を左右に振るためには、ユーザの腹部全体、すなわちユーザの腰を左右に回転するように振ることとなり、第3のゲーム例では、両手を腹部に近づけるように力を加えながら腰をツイストさせるようなゲーム操作が必要となる。
上述したように、本実施形態におけるゲームシステム1については、左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、図30〜図32に示すように、クレードル8に本体装置2単体を装着することによって据置型モニタ9に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードル8に本体装置2単体を装着して、クレードル8に接続された据置型モニタ9から画像(および音声)を出力する利用態様におけるゲームシステムを用いて説明する。そして、ユーザは、リング型拡張装置5に装着された右コントローラ4を用いて、ゲーム操作を行う例を用いる。また、第3のゲーム例におけるゲーム処理の一例として、据置型モニタ9に表示されるプレイヤキャラクタPCがユーザ操作に応じて、左右のオブジェクトOBJLおよびOBJRを振り動かすことによって、仮想ゲーム空間内の標的オブジェクトTを倒す(攻撃する)処理を用いる。
例えば、図30においては、仮想ゲーム空間内にプレイヤキャラクタPCが配置されている。プレイヤキャラクタPCの左方にはオブジェクトOBJLが備えられており、プレイヤキャラクタPCの右方にはオブジェクトOBJRが備えられている。左右のオブジェクトOBJLおよびOBJRは、標的オブジェクトTを倒すことが可能な開いた状態と標的オブジェクトTを倒すことができない閉じた状態とに変化可能であり、図30に示すようなリング型拡張装置5の環状部201が変形していない定常状態においては閉じた状態とされる。
一方、図31に示すように、グリップカバー203および204が互いに近づくように環状部201を定常状態から所定の状態以上までリング型拡張装置5を変形させる操作(図示B方向に変形させる押込操作)が行われた場合、左右のオブジェクトOBJLおよびOBJRは、プレイヤキャラクタPCの左右にそれぞれ開くように移動することによって標的オブジェクトTを倒すことが可能な開いた状態に変化する。このような押込操作は、リング型拡張装置5に設けられた歪みゲージが検出する歪みに基づいて検出される。リング型拡張装置5の環状部201が定常状態から変形した場合、上記歪みゲージによって台座部の歪みが検出され、検出された歪みに基づいて、環状部201が変形する向き(すなわち、2つのグリップカバー203および204が離れる向き、または、近づく向き)と変形量とを算出することができる。そして、環状部201が変形する向きが2つのグリップカバー203および204が近づく向きであり、予め設定された閾値以上の変形量である場合、左右のオブジェクトOBJLおよびOBJRを開いた状態とするための押込操作が行われたと判定される。なお、上記押込操作が解除された場合、左右のオブジェクトOBJLおよびOBJRは、プレイヤキャラクタPCの後方にそれぞれ閉じるように移動することによって標的オブジェクトTを倒すことができない閉じた状態に変化する。この場合、標的オブジェクトTを倒すことによって得られるゲームスコアを得ることができず、ゲーム達成度合いを更新することができなくなる。したがって、左右のオブジェクトOBJLおよびOBJRが閉じられた状態である場合、一例として、ユーザにリング型拡張装置5を変形させる操作を促すために、所定の画像や音声によってユーザに報知(例えば、文字画像「押し込んでください」を表示する、音声「押し込んでください」を生じさせる)してもかまわない。他の例として、左右のオブジェクトOBJLおよびOBJRが閉じられた状態である場合、リング型拡張装置5が左右に振られる操作が行われたとしても、左右のオブジェクトOBJLおよびOBJRが空振りして標的オブジェクトTを倒せない演出が行われることによって、ユーザにリング型拡張装置5を変形させる操作を促してもかまわない。
図32に示すように、プレイヤキャラクタPCの攻撃対象となる複数の標的オブジェクトT(図32においては標的オブジェクトT1およびT2)が、プレイヤキャラクタPCの前方から近づくように移動する。そして、プレイヤキャラクタPCは、左右のオブジェクトOBJLおよびOBJRの一方を標的オブジェクトTに衝突させることによって、当該標的オブジェクトTを倒して消滅させる攻撃が可能となり、標的オブジェクトTを倒すことによって所定のゲームスコアを得ることができる。
例えば、図32に示すように、上記押込操作された状態でリング型拡張装置5が右に振られる操作が行われた場合、プレイヤキャラクタPCは、開いた状態の左のオブジェクトOBJLを前方に回しながら右のオブジェクトOBJRを後方に回すように左右のオブジェクトOBJLおよびOBJRの両方を回転させるような動作を行う。ここで、リング型拡張装置5が右に振られる操作とは、実空間において、リング型拡張装置5における環状部201の円環軸が鉛直方向となった状態(すなわち、環状部201が水平に配置されている状態)で押込操作されている場合、当該円環軸が鉛直状態を維持した状態で右に移動しながら円環軸周りに右(図示C方向)に回転するようにリング型拡張装置5が移動するような操作である。また、上記押込操作された状態でリング型拡張装置5が左に振られる操作が行われた場合、プレイヤキャラクタPCは、開いた状態の右のオブジェクトOBJRを前方に回しながら左のオブジェクトOBJLを後方に回すように左右のオブジェクトOBJLおよびOBJRの両方を回転させるような動作を行う。ここで、リング型拡張装置5が左に振られる操作とは、実空間において、リング型拡張装置5における環状部201の円環軸が鉛直方向となった状態で押込操作されている場合、当該円環軸が鉛直状態を維持した状態で左に移動しながら円環軸周りに左に回転するようにリング型拡張装置5が移動するような操作である。
このようにリング型拡張装置5が左または右に振られる操作が行われた場合、リング型拡張装置5に装着されている右コントローラ4には、実空間の水平方向への加速度が生じるとともに、z軸方向周り(図6参照)の角速度が生じることになる。したがって、右コントローラ4における加速度センサ114によって検出される加速度および/または角速度センサ115によって検出される角速度を用いることによって、リング型拡張装置5が左または右に振られた操作の操作方向、操作角度、および操作速度等を算出することができる。そして、第3のゲーム例では、上記押込操作された状態でリング型拡張装置5が所定の操作角度以上に振られた場合、当該方向に振られる操作が行われたと判定される。なお、現実には、リング型拡張装置5が左または右に振られる操作は、リング型拡張装置5のロール操作、ピッチ操作、ヨー操作が混ざった操作となることがあるため、ロール操作、ピッチ操作、およびヨー操作によってそれぞれ変化するリング型拡張装置5の方向を合成することによって、最終的な操作角度や操作速度が算出されてもよい。
ここで、振られる操作が行われたことを判定するための操作角度は、上記押込操作された時点におけるリング型拡張装置5の姿勢を基準姿勢、すなわち操作角度を0として、当該基準姿勢から変化したリング型拡張装置5の円環軸周りの回転角度を操作角度としてもよい。すなわち、ユーザは、リング型拡張装置5を定常状態に戻した後に押込操作を行うことによって、上記操作角度を0に戻すことが可能となる。なお、上記押込操作された時点とリング型拡張装置5の基準姿勢、すなわち操作角度を0に設定する時点とは、ある程度、時間差があってもかまわない。例えば、上記押込操作された時点から所定時間経過後のリング型拡張装置5の姿勢を基準姿勢、すなわち操作角度を0に設定してもかまわない。また、リング型拡張装置5に装着される右コントローラ4内の角速度センサ115の性質として、検出を続けることによってノイズが加算されて、正確な角速度が検出できなくなる、いわゆる検出値がドリフトすることがある。このように角速度センサ115の検出値に誤差が累積する状態になったとしても、リング型拡張装置5を定常状態に戻した状態において操作角度を0に初期化することによって、当該誤差を除去しながら操作角度が0の方向(例えば、正面方向)を再設定することが可能となる。
また、左右のオブジェクトOBJLおよびOBJRの両方を回転させる操作は、1回の押込操作に対して1回のみ可能としてもよい。一例として、左右のオブジェクトOBJLおよびOBJRが振り出される動作が行われた後は、上記押込操作が継続されている場合であっても、左右のオブジェクトOBJLおよびOBJRがプレイヤキャラクタPCの後方にそれぞれ閉じるように移動することによって標的オブジェクトTを倒すことができない閉じた状態に変化してもよい。この場合、ユーザは、左右のオブジェクトOBJLおよびOBJRを開いた状態にして複数回動かすためには、リング型拡張装置5の環状部201を定常状態に一旦戻した後に再度押込操作を行って、リング型拡張装置5を振り動かす操作が必要となる。
なお、左右のオブジェクトOBJLおよびOBJRの両方を回転させる指示を行う操作は、プレイヤキャラクタPCの演出に対して先行して入力可能であってもよい。例えば、プレイヤキャラクタPCが左右のオブジェクトOBJLおよびOBJRを振り動かすアクション中に、リング型拡張装置5の押込操作が一旦解除されて再度押込操作が新たに行われた場合、上記演出中であっても新たな押込操作に応じて左右のオブジェクトOBJLおよびOBJRの両方を回転させる指示を行う操作を先行して入力可能としてもよい。また、アクション中に先行入力可能な上記操作の回数は、制限(例えば、先行入力可能な回数を1回に制限)が設けられてもよい。
また、上記押込操作が行われていない状態から上記押込操作が有効となったと判定するためにリング型拡張装置5の環状部201の変形量を判定するための閾値(第1閾値)と、上記押込操作が行われている状態から上記押込操作を無効と判定するための閾値(第2閾値)とは、異なる値に設定してもよい。例えば、上記第1閾値に対して上記第2閾値を相対的に小さく設定することによって、上記押込操作が行われた後にリング型拡張装置5を振り動かす操作によって当該押込操作に対する力が緩んでしまうような状態となっても、左右のオブジェクトOBJLおよびOBJRが閉じた状態に戻ってしまうような状況をある程度防止することができる。一例として、上記第2閾値は、リング型拡張装置5が定常状態からの最大変形可能量を10割とした場合に、当該定常状態から2割程度変形する状態に押込操作された変形量に設定される。
また、標的オブジェクトTは、左右のオブジェクトOBJLおよびOBJRの何れがプレイヤキャラクタPC前方に振り出される場合であっても倒して消滅させることが可能としてもよいし、左右のオブジェクトOBJLおよびOBJRの何れか一方がプレイヤキャラクタPC前方に振り出される場合に限って倒して消滅させることが可能としてもよい。第1の例として、出現する標的オブジェクトT毎に、左右のオブジェクトOBJLおよびOBJRの両方によって倒すことが可能な特性、左のオブジェクトOBJLのみによって倒すことが可能な特性、右のオブジェクトOBJRのみによって倒すことが可能な特性を設定し、それぞれの特性がユーザによって視認可能に表示してもかまわない。第2の例として、標的オブジェクトTの位置に応じて、倒すことが可能なオブジェクトOBJLおよびOBJRが区別されてもよい。例えば、プレイヤキャラクタPCの正面から近づく標的オブジェクトTを左右のオブジェクトOBJLおよびOBJRの両方によって倒すことが可能とし、プレイヤキャラクタPCの左方から近づく標的オブジェクトTを左のオブジェクトOBJLのみによって倒すことが可能とし、プレイヤキャラクタPCの右方から近づく標的オブジェクトTを右のオブジェクトOBJRのみによって倒すことが可能としてもよい。
このように、左右のオブジェクトOBJLおよびOBJRの何れか一方がプレイヤキャラクタPC前方に振り出される場合に限って倒して消滅させる標的オブジェクトTが設定されている場合、標的オブジェクトTを倒すためにはリング型拡張装置5を振る方向が限定されることになる。すなわち、図29に示したようにリング型拡張装置5を操作するユーザは、一方向だけにリング型拡張装置5を振るだけでなく、標的オブジェクトTのタイプや位置に応じて両方向にリング型拡張装置5を振ることが必要となる。なお、標的オブジェクトTを倒すためのリング型拡張装置5を振る方向が限定されている場合、リング型拡張装置5が振られたと判定するための判定角度をそれぞれの方向において異なる角度に設定してもよい。例えば、標的オブジェクトTを倒すことが可能な方向(正方向)にリング型拡張装置5が振られたと判定するための判定角度に対して、標的オブジェクトTを倒すことができない方向(誤方向)にリング型拡張装置5が振られたと判定するための判定角度を大きく設定してもかまわない。この場合、左右のオブジェクトOBJLおよびOBJRが標的オブジェクトTを倒すことができない誤方向に振り出されるような、ユーザが意図しないユーザ操作を少なくすることができる。
なお、リング型拡張装置5を用いた操作は、右コントローラ4(リング型拡張装置5)における動きセンサの出力に加えて、左コントローラ3や他の入力装置からの出力を用いて判定されてもかまわない。
また、上述した説明では、リング型拡張装置5が振られたことを判定するために、リング型拡張装置5の操作角度を用いているが、他のパラメータを用いて当該判定が行われてもよい。例えば、リング型拡張装置5が実空間において左右に振られる速度や加速度を用いて、これらのパラメータが所定の閾値を越える場合にリング型拡張装置5が振られたと判定されてもよい。
次に、図33〜図36を参照して、第3のゲーム例においてゲームシステム1で実行される具体的な処理の一例について説明する。図33は、第3のゲーム例において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図33に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
第3のゲーム例において、DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムP1が記憶される。本実施形態においては、各種プログラムP1は、上述した右コントローラ4との間で無線通信するための通信プログラムや、右コントローラ4から取得したデータに基づいた情報処理を行うためのアプリケーションプログラム(例えば、ゲームプログラム)等が記憶される。なお、各種プログラムP1は、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。プロセッサ81は、DRAM85に記憶された各種プログラムP1を実行する。
また、第3のゲーム例において、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データD1a、角速度データD1b、加速度データD1c、姿勢データD1d、重力方向データD1e、リング変形量データD1g、リング回転速度データD1h、リング回転角度データD1i、スイング動作データD1j、変形フラグデータD1k、スイング設定フラグデータD1m、スイング演出フラグデータD1n、スコアデータD1p、プレイヤキャラクタ動作データD1q、標的オブジェクト動作データD1r、および画像データD1s等が記憶される。
操作データD1aは、右コントローラ4から適宜取得した操作データである。上述したように、右コントローラ4から送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)やリング型拡張装置5における環状部201の変形状態を示す歪み値が含まれている。本実施形態では、無線通信によって右コントローラ4から所定周期で操作データが送信されており、当該受信した操作データを用いて操作データD1aが適宜更新される。なお、操作データD1aの更新周期は、ゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
角速度データD1bは、右コントローラ4から取得した操作データのうち、現時点から所定時間前までに取得された右コントローラ4に生じている角速度の履歴を示すデータである。例えば、角速度データD1bは、右コントローラ4に生じているxyz軸周りの角速度を示すデータの履歴等を含んでいる。
加速度データD1cは、右コントローラ4から取得した操作データのうち、現時点から所定時間前までに取得された右コントローラ4に生じている加速度の履歴を示すデータである。例えば、加速度データD1cは、右コントローラ4に生じているxyz軸方向の加速度を示すデータの履歴等を含んでいる。
姿勢データD1dは、実空間における右コントローラ4の姿勢を示すデータであり、現時点から所定時間前までにおける姿勢の履歴を示すデータである。一例として、姿勢データD1dは、実空間における右コントローラ4のxyz軸方向(例えば、実空間におけるXYZ軸に対する角度)の履歴を示すデータである。
重力方向データD1eは、右コントローラ4に作用している重力加速度の方向を示すデータである。
リング変形量データD1gは、リング型拡張装置5の変形方向および変形量を示すデータである。リング回転速度データD1hは、リング型拡張装置5が振られて回転する速度(操作速度)を示すデータである。リング回転角度データD1iは、リング型拡張装置5が振られて回転した角度(操作角度)を示すデータである。
スイング動作データD1jは、リング型拡張装置5を用いた操作に応じて設定された、プレイヤキャラクタPCを動作させるスイング動作を示すデータである。
変形フラグデータD1kは、リング型拡張装置5が押込操作されている場合にオンに設定される変形フラグを示すデータである。スイング設定フラグデータD1mは、リング型拡張装置5を用いた操作によってスイング動作が設定されている場合にオンに設定されるスイング設定フラグを示すデータである。スイング演出フラグデータD1nは、プレイヤキャラクタPCがスイング動作をしている場合にオンに設定されるスイング演出フラグを示すデータである。
スコアデータD1pは、現時点のゲームスコアを示すデータである。
プレイヤキャラクタ動作データD1qは、仮想ゲーム空間に配置されているプレイヤキャラクタPCの位置、状態、姿勢、動作等を示すデータである。標的オブジェクト動作データD1rは、標的オブジェクトTの位置、状態、姿勢、動作等を示すデータである。
画像データD1sは、表示画面に画像(例えば、プレイヤキャラクタPCの画像、標的オブジェクトTの画像、フィールド画像、背景画像等)を表示するためのデータである。
次に、図34〜図36を参照して、第3のゲーム例における情報処理の詳細な一例を説明する。図34は、第3のゲーム例においてゲームシステム1で実行される情報処理の一例を示すフローチャートである。図35は、図34におけるステップS307において行われるスイング設定処理の詳細な一例を示すサブルーチンである。図36は、図34におけるステップS311において行われるスイング演出処理の詳細な一例を示すサブルーチンである。第3のゲーム例においては、図34〜図36に示す一連の処理は、プロセッサ81が各種プログラムP1に含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図34〜図36に示す情報処理が開始されるタイミングは任意である。
なお、図34〜図36に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち図34〜図36に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図34において、プロセッサ81は、情報処理における初期設定を行い(ステップS301)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。例えば、プロセッサ81は、仮想ゲーム空間において各オブジェクト(オブジェクトOBJLおよびOBJRを備えるプレイヤキャラクタPCを含む)を初期配置して仮想ゲーム空間の初期状態を生成し、プレイヤキャラクタPCの位置、方向、状態(左右のオブジェクトOBJLおよびOBJRを閉じた状態)、および姿勢等を用いてプレイヤキャラクタ動作データD1qを更新する。
次に、プロセッサ81は、右コントローラ4から操作データを取得して操作データD1aを更新し(ステップS302)、次のステップに処理を進める。なお、プロセッサ81は、上記ステップS302において右コントローラ4から取得した操作データのうち、右コントローラ4に生じている角速度を示すデータを、角速度データD1bに格納する。また、プロセッサ81は、上記ステップS302において右コントローラ4から取得した操作データのうち、右コントローラ4に生じている加速度を示すデータを、加速度データD1cに格納する。
次に、プロセッサ81は、右コントローラ4の姿勢を算出し(ステップS303)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データD1bに格納されている角速度データを用いて、右コントローラ4のxyz軸周りの角速度を取得する。そして、プロセッサ81は、姿勢データD1dが示す右コントローラ4の姿勢における重力加速度方向を基準としたxyz軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後の重力加速度方向を基準としたxyz軸の方向を右コントローラ4の姿勢を示す最新のデータとして、姿勢データD1dに格納する。また、プロセッサ81は、加速度データD1cに格納されている加速度データを用いて、右コントローラ4に作用している重力加速度の方向を算出して、重力方向データD1eに格納する。なお、重力加速度を抽出する方法については任意の方法を用いればよく、例えば右コントローラ4に平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。また、プロセッサ81は、重力方向データD1eが示す右コントローラ4に生じている重力加速度の方向を用いて、姿勢データD1dが示す右コントローラ4の最新の姿勢を適時補正してもかまわない。
次に、プロセッサ81は、リング型拡張装置5の変形量を算出し(ステップS304)、次のステップに処理を進める。例えば、プロセッサ81は、操作データD1aが示す歪み値を用いて、リング型拡張装置5における環状部201の変形量および変形方向を算出し、当該算出結果を用いてリング変形量データD1gを更新する。
次に、プロセッサ81は、変形フラグがオフであるか否かを判定する(ステップS305)。例えば、プロセッサ81は、変形フラグデータD1kが示す変形フラグがオフに設定されている場合、上記ステップS305において肯定判定する。そして、プロセッサ81は、変形フラグがオフである場合、ステップS306に処理を進める。一方、プロセッサ81は、変形フラグがオンである場合、ステップS308に処理を進める。
ステップS306において、プロセッサ81は、上記ステップS304において算出された変形量が第1閾値以上であるか否かを判定する。そして、プロセッサ81は、上記変形量が第1閾値以上である場合、ステップS307に処理を進める。一方、プロセッサ81は、上記変形量が第1閾値未満である場合、ステップS310に処理を進める。ここで、上記第1閾値は、リング型拡張装置5に対する押込操作が開始されたことを検出するために、リング型拡張装置5の変形量を判定するための閾値であり、リング型拡張装置5の変形量が当該第1閾値以上に到達した場合に押込操作が開始されたと判定される。
ステップS307において、プロセッサ81は、スイング設定処理を行い、ステップS310に処理を進める。以下、図35を参照して、上記ステップS307において行われるスイング設定処理について説明する。
図35において、プロセッサ81は、変形フラグをオンに設定して(ステップS321)、次のステップに処理を進める。例えば、プロセッサ81は、変形フラグデータD1kが示す変形フラグをオンに設定して、変形フラグデータD1kを更新する。
次に、プロセッサ81は、スイング設定フラグがオフであるか否かを判定する(ステップS322)。例えば、プロセッサ81は、スイング設定フラグデータD1mが示すスイング設定フラグがオフに設定されている場合、上記ステップS322において肯定判定する。そして、プロセッサ81は、スイング設定フラグがオフである場合、ステップS323に処理を進める。一方、プロセッサ81は、スイング設定フラグがオンである場合、当該サブルーチンによる処理を終了する。
ステップS323において、プロセッサ81は、実空間においてリング型拡張装置5が振られて回転移動する速度(操作速度)を算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データD1cを参照して、上記操作速度を算出して、リング回転速度データD1hを更新する。なお、上記操作速度は、姿勢データD1dが示す最新の姿勢に基づいて算出される実空間における水平方向へリング型拡張装置5(右コントローラ4)が移動する速度としてもよいし、リング型拡張装置5の環状部201の円環軸に垂直な方向(すなわち、右コントローラ4のz軸方向に垂直な方向)へリング型拡張装置5(右コントローラ4)が移動する速度としてもよい。
次に、プロセッサ81は、実空間においてリング型拡張装置5が振られて回転した角度(操作角度)および操作方向を算出し、次のステップに処理を進める。例えば、プロセッサ81は、角速度データD1cおよび姿勢データD1dを参照して、変形フラグがオフからオンに変化した時点のリング型拡張装置5を基準姿勢として、当該基準姿勢から回転したリング型拡張装置5の角度を上記操作角度およびとして算出して、当該操作角度および操作方向を用いてリング回転角度データD1iを更新する。なお、上記操作角度は、上記基準姿勢における実空間の鉛直方向周りにリング型拡張装置5(右コントローラ4)が回転する角度としてもよいし、リング型拡張装置5の環状部201の円環軸周り(すなわち、右コントローラ4のz軸方向周り)にリング型拡張装置5(右コントローラ4)が回転する角度としてもよい。
次に、プロセッサ81は、正方向/誤方向を設定し(ステップS325)、次のステップに処理を進める。ここで、上述したように、正方向は、左右のオブジェクトOBJLまたはOBJRによって標的オブジェクトTを倒すことが可能な方向であり、誤方向は、左右のオブジェクトOBJLまたはOBJRによって標的オブジェクトTを倒すことができない方向である。そして、プロセッサ81は、現時点における仮想ゲーム空間においてプレイヤキャラクタPCに最も接近している標的オブジェクトTのタイプに基づいて、正方向/誤方向を設定する。
次に、プロセッサ81は、上記ステップS324において算出された操作方向に対応して左右のオブジェクトOBJLまたはOBJRが振り出される仮想ゲーム空間における方向が、正方向であるか否かを判定する(ステップS326)。そして、プロセッサ81は、上記振り出される方向が正方向である場合、ステップS327に処理を進める。一方、プロセッサ81は、上記振り出される方向が誤方向である場合、ステップS329に処理を進める。なお、プロセッサ81は、上記ステップS325において正方向/誤方向が設定されていない場合や上記ステップS324において操作方向が算出されていない(すなわち、操作角度が0)である場合、上記ステップS326において肯定判定する。
ステップS327において、プロセッサ81は、上記ステップS324において算出された操作角度が第3閾値以上であるか否かを判定する。そして、プロセッサ81は、上記操作角度が第3閾値以上である場合、ステップS328に処理を進める。一方、プロセッサ81は、上記操作角度が第3閾値未満である場合、当該サブルーチンによる処理を終了する。ここで、上記第3閾値は、正方向にリング型拡張装置5が振られたことを検出するために、リング型拡張装置5の操作角度を判定するための閾値であり、例えば、45度に設定される。そして、正方向へのリング型拡張装置5の操作角度が当該第3閾値以上に到達した場合に正方向にリング型拡張装置5が振られる操作が行われたと判定される。
ステップS328において、プロセッサ81は、プレイヤキャラクタPCにおける正方向へのスイング動作を設定し、ステップS331に処理を進める。例えば、プロセッサ81は、プレイヤキャラクタPCが左右のオブジェクトOBJLまたはOBJRを正方向に予め定められた速度で予め定められた角度まで振り出すように左右のオブジェクトOBJLおよびOBJRをスイングする動作を設定し、当該設定された動作を用いてスイング動作データD1jを更新する。なお、設定されるスイング動作は、上記ステップS323において算出された操作速度が速いほどスイング速度が速くなるように設定してもよい。
一方、ステップS329において、プロセッサ81は、上記ステップS324において算出された操作角度が第4閾値以上であるか否かを判定する。そして、プロセッサ81は、上記操作角度が第4閾値以上である場合、ステップS330に処理を進める。一方、プロセッサ81は、上記操作角度が第4閾値未満である場合、当該サブルーチンによる処理を終了する。ここで、上記第4閾値は、誤方向にリング型拡張装置5が振られたことを検出するために、リング型拡張装置5の操作角度を判定するための閾値であり、上記第3閾値より大きな値(例えば、60度)に設定されてもよい。
ステップS330において、プロセッサ81は、プレイヤキャラクタPCにおける誤方向へのスイング動作を設定し、ステップS331に処理を進める。例えば、プロセッサ81は、プレイヤキャラクタPCが左右のオブジェクトOBJLまたはOBJRを誤方向に予め定められた速度で予め定められた角度まで振り出すように左右のオブジェクトOBJLおよびOBJRをスイングする動作を設定し、当該設定された動作を用いてスイング動作データD1jを更新する。
ステップS331において、プロセッサ81は、スイング演出フラグをオンに設定して、次のステップに処理を進める。例えば、プロセッサ81は、スイング演出フラグデータD1nが示すスイング演出フラグをオンに設定して、スイング演出フラグデータD1nを更新する。
次に、プロセッサ81は、スイング設定フラグをオンに設定して(ステップS332)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、スイング設定フラグデータD1mが示すスイング設定フラグをオンに設定して、スイング設定フラグデータD1mを更新する。このように、リング型拡張装置5の操作に応じて正方向または誤方向へのスイング動作が設定された場合、スイング設定フラグがオンに設定されるため、スイング動作が設定された後もリング型拡張装置5の押込操作が続いたとしても上記ステップS322において否定判定され、新たなスイング動作が設定されることはない。
図34に戻り、上記ステップS305において変形フラグがオンされていると判定された場合、プロセッサ81は、上記ステップS308において算出された変形量が第2閾値以上であるか否かを判定する。そして、プロセッサ81は、上記変形量が第2閾値以上である場合、上記ステップS307に処理を進める。一方、プロセッサ81は、上記変形量が第2閾値未満である場合、ステップS309に処理を進める。ここで、上記第2閾値は、リング型拡張装置5に対する押込操作が開始された後にリング型拡張装置5に対する押込力が緩んだ場合であっても、当該押込操作が継続していると判定するための閾値であり、上記第1閾値より小さな値に設定される。
ステップS309において、プロセッサ81は、変形フラグおよびスイング設定フラグをオフに設定して、ステップS310に処理を進める。例えば、プロセッサ81は、変形フラグデータD1kが示す変形フラグおよびスイング設定フラグデータD1mが示すスイング設定フラグをそれぞれオフに設定して、変形フラグデータD1kおよびスイング設定フラグデータD1mをそれぞれ更新する。このようにリング型拡張装置5に対する押込操作が上記第2閾値未満の変形量まで緩んだ場合、当該押込操作が解除されたと判定されて変形フラグがオフに設定され、スイング設定フラグがオフに設定されることによって新たなスイング動作を設定することが可能となる。
ステップS310において、プロセッサ81は、スイング演出フラグがオンであるか否かを判定する。例えば、プロセッサ81は、スイング演出フラグデータD1nが示すスイング演出フラグがオンに設定されている場合、上記ステップS310において肯定判定する。そして、プロセッサ81は、スイング演出フラグがオンである場合、ステップS311に処理を進める。一方、プロセッサ81は、スイング演出フラグがオフである場合、ステップS312に処理を進める。
ステップS311において、プロセッサ81は、スイング演出処理を行い、ステップS312に処理を進める。以下、図36を参照して、上記ステップS311において行われるスイング演出処理について説明する。
図36において、プロセッサ81は、プレイヤキャラクタPCのスイング状態を設定し(ステップS341)、次のステップに処理を進める。例えば、プロセッサ81は、スイング動作データD1jが示すスイング動作に基づいて、プレイヤキャラクタPCが左右のオブジェクトOBJLおよびOBJRを振る現時点の姿勢(例えば、左右のオブジェクトOBJLおよびOBJRを振る現時点の角度やそのプレイヤキャラクタPCの姿勢)を設定し、プレイヤキャラクタ動作データD1qを更新する。
次に、プロセッサ81は、プレイヤキャラクタPCによる標的オブジェクトTに対する攻撃が成功したか否かを判定する(ステップS342)。例えば、プロセッサ81は、上記ステップS341におけるスイング状態が標的オブジェクトTと衝突する状態であり、プレイヤキャラクタPCが正方向に左右のオブジェクトOBJLおよびOBJRをスイングしている場合、当該標的オブジェクトTに対する攻撃が成功したと判定する。そして、プロセッサ81は、プレイヤキャラクタPCによる標的オブジェクトTに対する攻撃が成功した場合、ステップS343に処理を進める。一方、プロセッサ81は、プレイヤキャラクタPCによる標的オブジェクトTに対する攻撃が成功していない場合、ステップS345に処理を進める。
ステップS343において、プロセッサ81は、速度パラメータに応じてゲームスコアを算出し、次のステップに処理を進める。例えば、プロセッサ81は、スイングが開始された時点においてリング型拡張装置5に作用している速度パラメータ(速度、加速度、角速度等)に基づいた攻撃力によって、標的オブジェクトTに対する攻撃が成功したことによるゲームスコアを算出し、当該ゲームスコアを加算してスコアデータD1pを更新する。具体的には、プロセッサ81は、スイングが開始された時点においてリング型拡張装置5が左右に振られている加速度や角速度、リング回転速度データD1hが示す速度等に基づいて、上記ゲームスコアを算出してもよい。一例として、上記速度パラメータを複数段階に分類し、当該分類に応じてゲームパラメータを算出することが考えられる。なお、ゲームスコアは、標的オブジェクトTに対する攻撃が成功したことによって予め定められた一定のゲームスコアが得られてもよく、この場合、上記速度パラメータとは無関係にゲームスコアが加算されることになる。
次に、プロセッサ81は、攻撃された標的オブジェクトTの状態を設定し(ステップS344)、ステップS347に処理を進める。例えば、プロセッサ81は、攻撃された標的オブジェクトTが当該攻撃によって倒される状態に設定するとともに、仮想ゲーム空間から当該標的オブジェクトTを消滅させる演出を行い、当該演出に基づいて標的オブジェクト動作データD1rを更新する。
一方、上記ステップS342において標的オブジェクトTに対する攻撃が成功していないと判定された場合、プロセッサ81は、プレイヤキャラクタPCによる標的オブジェクトTに対する攻撃が失敗したことが確定したか否かを判定する(ステップS345)。例えば、プロセッサ81は、上記ステップS341におけるスイング状態が標的オブジェクトTと衝突する状態であるが、プレイヤキャラクタPCが誤方向に左右のオブジェクトOBJLおよびOBJRをスイングしている場合や、左右のオブジェクトOBJLおよびOBJRが標的オブジェクトTと衝突せずにスイングが振り切った状態となった場合、当該標的オブジェクトTに対する攻撃が失敗したことが確定したと判定する。そして、プロセッサ81は、プレイヤキャラクタPCによる標的オブジェクトTに対する攻撃が失敗したことが確定した場合、ステップS346に処理を進める。一方、プロセッサ81は、プレイヤキャラクタPCによる標的オブジェクトTに対する攻撃が失敗したことが確定していない場合、ステップS348に処理を進める。
ステップS346において、プロセッサ81は、攻撃に失敗した標的オブジェクトTの状態を設定し(ステップS346)、ステップS347に処理を進める。例えば、プロセッサ81は、攻撃に失敗した標的オブジェクトTがプレイヤキャラクタPCに勝利した演出を行った後に、仮想ゲーム空間から当該標的オブジェクトTを消滅させる演出を行い、当該演出に基づいて標的オブジェクト動作データD1rを更新する。
ステップS347において、プロセッサ81は、スイング演出フラグをオフに設定して、ステップS348に処理を進める。例えば、プロセッサ81は、スイング演出フラグデータD1nが示すスイング演出フラグをオフに設定して、スイング演出フラグデータD1nを更新する。
ステップS348において、プロセッサ81は、上記ステップS304において算出された変形量が第2閾値未満であるか否かを判定する。そして、プロセッサ81は、上記変形量が第2閾値未満である場合、上記ステップS349に処理を進める。一方、プロセッサ81は、上記変形量が第2閾値以上である場合、当該サブルーチンによる処理を終了する。
ステップS349において、プロセッサ81は、変形フラグおよびスイング設定フラグをオフに設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、変形フラグデータD1kが示す変形フラグおよびスイング設定フラグデータD1mが示すスイング設定フラグをそれぞれオフに設定して、変形フラグデータD1kおよびスイング設定フラグデータD1mをそれぞれ更新する。このようにスイング演出処理中、すなわちプレイヤキャラクタPCが左右のオブジェクトOBJLおよびOBJRをスイングする演出中であっても、リング型拡張装置5に対する押込操作が上記第2閾値未満の変形量まで緩んだ場合、当該押込操作が解除されたと判定されて変形フラグがオフに設定され、スイング設定フラグがオフに設定されることによって新たなスイング動作を設定することが可能となる。なお、スイング演出中に変形フラグおよびスイング設定フラグがオフに変更される処理は、制限が設けられてもよい。例えば、1回のスイング演出中に変形フラグおよびスイング設定フラグがオフに変更される処理は、1回以内に制限が設けられてもよい。
図34に戻り、上記ステップS312において、プロセッサ81は、オブジェクト(プレイヤキャラクタPCや標的オブジェクトT等)の動作制御処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、プレイヤキャラクタ動作データD1qが示すプレイヤキャラクタPCの位置、状態、姿勢、動作等に基づいて、仮想ゲーム空間においてプレイヤキャラクタPCを配置する。また、プロセッサ81は、所定のアルゴリズム(出現パターン)に基づいて、仮想ゲーム空間に標的オブジェクトTを出現させるとともに、プレイヤキャラクタPCに向かって移動させ、当該出現後および移動後の位置に基づいて標的オブジェクト動作データD1rを更新する。
次に、プロセッサ81は、画像生成表示制御処理を行い(ステップS313)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS311およびステップS312の処理による設定に基づいて、仮想ゲーム空間に複数のオブジェクト(オブジェクトOBJLおよびOBJRを備えるプレイヤキャラクタPC、標的オブジェクトT等)を配置して、仮想ゲーム空間を生成する。そして、プロセッサ81は、仮想ゲーム空間に仮想カメラを配置し、当該仮想カメラから見た仮想ゲーム空間画像を生成して、当該仮想ゲーム空間画像を据置型モニタ9に出力する。また、プロセッサ81は、スコアデータD1pが示すゲームスコアを示す画像を上記仮想ゲーム空間画像の適所に重畳して据置型モニタ9に出力する。
次に、プロセッサ81は、ゲーム処理を終了するか否かを判定する(ステップS314)。上記ステップS314においてゲーム処理を終了する条件としては、例えば、ゲーム処理が終了される条件が満たされたことや、ユーザがゲーム処理を終了する操作を行ったこと等がある。プロセッサ81は、ゲーム処理を終了しない場合に上記ステップS302に戻って処理を繰り返し、ゲーム処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップS302〜ステップS314の一連の処理は、ステップS314でゲーム処理を終了すると判定されるまで繰り返し実行される。
このように、第3のゲーム例においては、リング型拡張装置5を変形させながら振り動かすことによって所定のゲーム処理が行われるため、リング型拡張装置5を用いた操作におけるユーザ体感を向上させることができる。また、第3のゲーム例においては、リング型拡張装置5が変形していない、またはリング型拡張装置5を変形させながら振り動かされていない場合に所定のゲーム処理の実行が制限されるため、当該所定のゲーム処理が特定のユーザ操作による限定的なものとなる。
なお、上述した第3のゲーム例においては、リング型拡張装置5を用いたユーザ操作が行われる例を用いたが、上述した第1のゲーム例および第2のゲーム例のように、リング型拡張装置5に加えて、さらに左コントローラ3が装着されたベルト型拡張装置6を用いたユーザ操作が行われてもよい。この場合、リング型拡張装置5の動きセンサ(右コントローラ4の加速度センサ114および/または角速度センサ115)の出力を用いた処理を、ベルト型拡張装置6の動きセンサ(左コントローラ3の加速度センサ104および/または角速度センサ105)の出力を用いた処理としてもよい。このように、さらに左コントローラ3が装着されたベルト型拡張装置6を用いたユーザ操作が行われることによって、第3のゲーム例においては、リング型拡張装置5の変形させる押込操作に応じてプレイヤキャラクタPCが標的オブジェクトTを攻撃可能な動作モードと攻撃できない動作モードとを切り替える制御や、左右のオブジェクトOBJLおよびOBJRの状態を変化させる制御が行われ、ユーザの足の動きによるベルト型拡張装置6の動きに応じて左右のオブジェクトOBJLおよびOBJRを左右に振り動かす動作制御が行われるため、リング型拡張装置5およびベルト型拡張装置6の両方を用いたユーザ入力の方法を豊富にすることができる。
(第4のゲーム例)
次に、本体装置2が行う第4のゲーム例における具体的な処理を説明する前に、図37〜図40を用いて、本体装置2で行う第4のゲーム例の概要について説明する。なお、図37は、第4のゲーム例において、ユーザがリング型拡張装置5を操作する様子の一例を示す図である。図38は、ユーザ操作に応じて据置型モニタ9に表示される第4のゲーム例におけるゲーム画像の第1の例を示す図である。図39は、ユーザ操作に応じて据置型モニタ9に表示される第4のゲーム例におけるゲーム画像の第2の例を示す図である。図40は、ユーザ操作に応じて据置型モニタ9に表示される第4のゲーム例におけるゲーム画像の第3の例を示す図である。
図37に示すように、第4のゲーム例では、ユーザがリング型拡張装置5における両方のグリップカバー203および204をそれぞれ両手で把持した状態で、リング型拡張装置5における2つのグリップカバー203および204が近づくようにリング型拡張装置5を両手で変形させながら、リング型拡張装置5を上からユーザの腹部付近まで振り下ろすように動かすユーザ操作が行われる。ここで、リング型拡張装置5における2つのグリップカバー203および204が近づくように変形させながらリング型拡張装置5を上から振り下ろすためには、ユーザは両手に力を加えながらジャンプするときの上半身の動きを模した動作を行うこととなり、あたかもジャンプするようなゲーム操作が必要となる。
第4のゲーム例においても、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードル8に本体装置2単体を装着して、クレードル8に接続された据置型モニタ9から画像(および音声)を出力する利用態様におけるゲームシステムを用いて説明する。そして、ユーザは、リング型拡張装置5に装着された右コントローラ4を用いて、ゲーム操作を行う例を用いる。また、第4のゲーム例におけるゲーム処理の一例として、据置型モニタ9に表示されるプレイヤキャラクタPCがユーザ操作に応じて、仮想ゲーム空間内を移動(ジャンプ)する処理を用いる。
例えば、図38においては、仮想ゲーム空間内にプレイヤキャラクタPCが配置されている。プレイヤキャラクタPCは、仮想ゲーム空間における上方へ延びる壁に沿って配置されており、図38に示すようなリング型拡張装置5の環状部201が変形していない定常状態においては、当該壁に沿って静止した状態とされる。
一方、図39に示すように、グリップカバー203および204が互いに近づくように環状部201を定常状態から所定の状態以上までリング型拡張装置5を変形させる操作(図示B方向に変形させる押込操作)が行われた場合、プレイヤキャラクタPCがジャンプ移動した場合に到達可能な高さを示す標識Mが、上記壁に沿ったプレイヤキャラクタPCの上方に表示される。このような押込操作は、上記第3のゲーム例と同様に、リング型拡張装置5に設けられた歪みゲージが検出する歪みに基づいて検出される。また、リング型拡張装置5の環状部201が定常状態から変形した場合、上記歪みゲージによって台座部の歪みが検出され、検出された歪みに基づいて、環状部201が変形する向き(すなわち、2つのグリップカバー203および204が離れる向き、または、近づく向き)と変形量とを算出することができる。そして、環状部201が変形する向きが2つのグリップカバー203および204が近づく向きである場合、算出された変形量に応じた到達高さの標識Mが表示される。上記押込操作が解除された場合、標識Mが示す到達高さが漸減的に減少して表示され、最終的に標識Mが消滅する。なお、標識Mが第1入力装置の変形量を示す画像の一例に相当する。
そして、図40に示すように、上記押込操作された状態でリング型拡張装置5が実空間における下方向(図示D方向)に振られる操作が行われた場合、プレイヤキャラクタPCは、振られる操作が行われる直前に標識Mが示していた到達可能高さを目標として、壁に沿ってジャンプする動作を行う。ここで、リング型拡張装置5がした方向に振られる操作とは、実空間において、リング型拡張装置5が押込操作された状態で鉛直方向へ移動するピッチ操作である。そして、上記押込操作された状態でリング型拡張装置5が下方向に振られる操作が行われた場合、プレイヤキャラクタPCは、壁に沿ってジャンプするように仮想ゲーム空間を移動するような動作を行う。そして、プレイヤキャラクタPCが到達した位置にそれぞれ設定されているゲームポイントに基づいて、所定のゲームスコアを得ることができる。具体的には、高く飛び過ぎることによってゲームポイントが得られないこともあるため、ユーザは、適切なジャンプ力でプレイヤキャラクタPCをジャンプさせて移動させることが必要となる。
このように、リング型拡張装置5が下方向に振られるピッチ操作が行われた場合、リング型拡張装置5に装着されている右コントローラ4には、実空間の鉛直方向への加速度が生じるとともに、y軸方向周り(図6参照)の角速度が生じることになる。したがって、右コントローラ4における加速度センサ114によって検出される加速度および/または角速度センサ115によって検出される角速度を用いることによって、リング型拡張装置5が下方向に振られるピッチ操作の操作方向、操作角度、および操作速度等を算出することができる。そして、第4のゲーム例では、上記押込操作された状態でリング型拡張装置5が下方向へのピッチ操作が行われた場合、上記押込操作が行われている変形量に応じた到達可能高さまでプレイヤキャラクタPCをジャンプさせて移動させる処理が行われる。なお、現実には、リング型拡張装置5が下方向に振られるピッチ操作は、リング型拡張装置5のロール操作やヨー操作が混ざった操作となることがあるため、ロール操作、ピッチ操作、およびヨー操作によってそれぞれ変化するリング型拡張装置5の方向を合成することによって、最終的に下方向に振られるピッチ操作の有無が判定されてもよい。
なお、プレイヤキャラクタPCをジャンプ移動させる操作は、1回の押込操作に対して1回のみ可能としてもよい。一例として、プレイヤキャラクタPCをジャンプ移動した後は、上記押込操作が継続されている場合であっても、標識Mが表示されないようにしてもよい。この場合、ユーザは、再度標識Mを表示させてプレイヤキャラクタPCを再度ジャンプ移動させるためには、リング型拡張装置5の環状部201を定常状態に一旦戻した後に再度押込操作を行って、リング型拡張装置5を振り動かす操作が必要となる。
また、上記押込操作を行った状態でリング型拡張装置5を下方向に振るピッチ操作を行う場合、当該ピッチ操作を行うことによって当該押込操作を行う力が緩んでしまうことが考えられる。この場合、上記ピッチ操作前に表示していた標識Mが示す到達可能高さまでプレイヤキャラクタPCがジャンプできない状態となるため、このような押込操作を行う力が緩むことによるジャンプ力の意図しない低下を防ぐために、上記ピッチ操作が行われた直前の所定時間前(例えば、5フレーム前)におけるリング型拡張装置5の変形量や現時点から所定時間前までの期間におけるリング型拡張装置5の変形量の最大値に基づいて、プレイヤキャラクタPCの到達高さを算出してもかまわない。
また、上記押込操作を行っていない状態でリング型拡張装置5を下方向に振るピッチ操作が行われた場合、ジャンプ力が算出されないためにプレイヤキャラクタPCがジャンプしない演出が行われてもよい。この場合、プレイヤキャラクタPCがジャンプすることによって得られるゲームスコアを得ることができず、ゲーム達成度合いを更新することができなくなる。したがって、リング型拡張装置5の押込操作が行われずにリング型拡張装置5を下方向に振るピッチ操作が行われた場合、一例として、ユーザにリング型拡張装置5を変形させる操作を促すために、所定の画像や音声によってユーザに報知(例えば、文字画像「押し込んでください」を表示する、音声「押し込んでください」を生じさせる)してもかまわない。
また、プレイヤキャラクタPCがジャンプするジャンプ力は、リング型拡張装置5の変形量だけでなく、他のパラメータが加えられてもかまわない。例えば、ジャンプを行う際にリング型拡張装置5が下方向に振られる速度パラメータ(速度、加速度、角速度等)と上記変形量との両方を用いて、上記ジャンプ力が算出されてもよい。
また、ユーザがリング型拡張装置5を正規な姿勢で把持していない状態で操作していない場合、リング型拡張装置5を変形させて下方向に振る操作を行ったとしても、プレイヤキャラクタPCをジャンプする演出が行われないようにしてもよい。ここで、リング型拡張装置5を把持する正規な姿勢とは、図37に示すように、右コントローラ4が装着されている位置が最上位置となって2つのグリップカバー203および204を結ぶ方向が略水平となるようにユーザが両手でグリップカバー203および204を把持して、環状部201の円環軸が略水平になった状態で、リング型拡張装置5を押込操作および下方向に振る操作を行うものである。このような正規な姿勢で操作が行われているか否かについては、リング型拡張装置5が下方向に振られたと判定された時点におけるリング型拡張装置5の姿勢を分析することによって可能となる。
次に、図41〜図43を参照して、第4のゲーム例においてゲームシステム1で実行される具体的な処理の一例について説明する。図41は、第4のゲーム例において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図41に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
第4のゲーム例において、DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムP2が記憶される。本実施形態においては、各種プログラムP2は、上述した右コントローラ4との間で無線通信するための通信プログラムや、右コントローラ4から取得したデータに基づいた情報処理を行うためのアプリケーションプログラム(例えば、ゲームプログラム)等が記憶される。なお、各種プログラムP2は、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。プロセッサ81は、DRAM85に記憶された各種プログラムP2を実行する。
また、第4のゲーム例において、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データD2a、角速度データD2b、加速度データD2c、姿勢データD2d、重力方向データD2e、リング変形量データD2g、ジャンプ力データD2h、ジャンプフラグデータD2i、スコアデータD2j、プレイヤキャラクタ動作データD2k、および画像データD2m等が記憶される。
操作データD2aは、右コントローラ4から適宜取得した操作データである。上述したように、右コントローラ4から送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)やリング型拡張装置5における環状部201の変形状態を示す歪み値が含まれている。本実施形態では、無線通信によって右コントローラ4から所定周期で操作データが送信されており、当該受信した操作データを用いて操作データD2aが適宜更新される。なお、操作データD2aの更新周期は、ゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
角速度データD2bは、右コントローラ4から取得した操作データのうち、現時点から所定時間前までに取得された右コントローラ4に生じている角速度の履歴を示すデータである。例えば、角速度データD2bは、右コントローラ4に生じているxyz軸周りの角速度を示すデータの履歴等を含んでいる。
加速度データD2cは、右コントローラ4から取得した操作データのうち、現時点から所定時間前までに取得された右コントローラ4に生じている加速度の履歴を示すデータである。例えば、加速度データD2cは、右コントローラ4に生じているxyz軸方向の加速度を示すデータの履歴等を含んでいる。
姿勢データD2dは、実空間における右コントローラ4の姿勢を示すデータであり、現時点から所定時間前までにおける姿勢の履歴を示すデータである。一例として、姿勢データD2dは、実空間における右コントローラ4のxyz軸方向(例えば、実空間におけるXYZ軸に対する角度)の履歴を示すデータである。
重力方向データD2eは、右コントローラ4に作用している重力加速度の方向を示すデータである。
リング変形量データD2gは、現時点から所定時間前までに算出されたリング型拡張装置5の変形方向および変形量の履歴を示すデータである。
ジャンプ力データD2hは、リング型拡張装置5を用いた操作に応じて設定された、プレイヤキャラクタPCを動作させるジャンプ力を示すデータである。
ジャンプフラグデータD2iは、プレイヤキャラクタPCがジャンプする演出を行う場合にオンに設定されるジャンプフラグを示すデータである。
スコアデータD2jは、現時点のゲームスコアを示すデータである。
プレイヤキャラクタ動作データD2kは、仮想ゲーム空間に配置されているプレイヤキャラクタPCの位置、状態、姿勢、動作等を示すデータである。
画像データD2mは、表示画面に画像(例えば、プレイヤキャラクタPCの画像、フィールド画像、背景画像等)を表示するためのデータである。
次に、図42および図43を参照して、第4のゲーム例における情報処理の詳細な一例を説明する。図42は、第4のゲーム例においてゲームシステム1で実行される情報処理の一例を示すフローチャートである。図43は、図42におけるステップS410において行われるジャンプ演出処理の詳細な一例を示すサブルーチンである。第4のゲーム例においては、図42および図43に示す一連の処理は、プロセッサ81が各種プログラムP2に含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図42および図43に示す情報処理が開始されるタイミングは任意である。
なお、図42および図43に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち図42および図43に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図42において、プロセッサ81は、情報処理における初期設定を行い(ステップS401)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。例えば、プロセッサ81は、仮想ゲーム空間においてプレイヤキャラクタPCを初期配置して仮想ゲーム空間の初期状態を生成し、プレイヤキャラクタPCの位置、方向、状態、および姿勢等を用いてプレイヤキャラクタ動作データD2kを更新する。
次に、プロセッサ81は、右コントローラ4から操作データを取得して操作データD2aを更新し(ステップS402)、次のステップに処理を進める。なお、プロセッサ81は、上記ステップS402において右コントローラ4から取得した操作データのうち、右コントローラ4に生じている角速度を示すデータを、角速度データD2bに格納する。また、プロセッサ81は、上記ステップS402において右コントローラ4から取得した操作データのうち、右コントローラ4に生じている加速度を示すデータを、加速度データD2cに格納する。
次に、プロセッサ81は、右コントローラ4の姿勢を算出し(ステップS403)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データD2bに格納されている角速度データを用いて、右コントローラ4のxyz軸周りの角速度を取得する。そして、プロセッサ81は、姿勢データD2dが示す右コントローラ4の姿勢における重力加速度方向を基準としたxyz軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後の重力加速度方向を基準としたxyz軸の方向を右コントローラ4の姿勢を示す最新のデータとして、姿勢データD2dに格納する。また、プロセッサ81は、加速度データD2cに格納されている加速度データを用いて、右コントローラ4に作用している重力加速度の方向を算出して、重力方向データD2eに格納する。なお、重力加速度を抽出する方法については任意の方法を用いればよく、例えば右コントローラ4に平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。また、プロセッサ81は、重力方向データD2eが示す右コントローラ4に生じている重力加速度の方向を用いて、姿勢データD2dが示す右コントローラ4の最新の姿勢を適時補正してもかまわない。
次に、プロセッサ81は、リング型拡張装置5の変形量を算出し(ステップS404)、次のステップに処理を進める。例えば、プロセッサ81は、操作データD2aが示す歪み値を用いて、リング型拡張装置5における環状部201の変形量および変形方向を算出し、当該算出結果を用いてリング変形量データD2gが示す変形量の履歴に追加する。
次に、プロセッサ81は、ジャンプフラグがオフであるか否かを判定する(ステップS405)。例えば、プロセッサ81は、ジャンプフラグデータD2iが示すジャンプフラグがオフに設定されている場合、上記ステップS405において肯定判定する。そして、プロセッサ81は、ジャンプフラグがオフである場合、ステップS406に処理を進める。一方、プロセッサ81は、ジャンプフラグがオンである場合、ステップS408に処理を進める。
ステップS406において、プロセッサ81は、上記ステップS404において算出された変形量に基づいて、ジャンプ力を算出し、次のステップに処理を進める。例えば、プロセッサ81は、リング変形量データD2gが示す変形量の履歴における最新の変形量に基づいてジャンプ力を算出し、当該ジャンプ力を用いてジャンプ力データD2hを更新する。
次に、プロセッサ81は、上記ステップS406において算出されたジャンプ力に応じた到達予測高さに応じた標識Mを設定し(ステップS407)、ステップS408に処理を進める。例えば、プロセッサ81は、ジャンプ力データD2hが示すジャンプ力によってプレイヤキャラクタPCがジャンプした場合に到達可能な高さを算出し、当該到達可能な高さに応じた標識Mを設定する。
ステップS408において、プロセッサ81は、実空間においてリング型拡張装置5が下方向に移動する速度パラメータ(例えば、加速度、速度、角速度)を算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データD2cを参照して、実空間における下方向に移動するリング型拡張装置5の加速度、速度、または角速度を速度パラメータとして算出する。第1の例として、速度パラメータは、姿勢データD2dが示す最新の姿勢に基づいて算出される実空間における下方向へリング型拡張装置5(右コントローラ4)が移動する加速度または速度やリング型拡張装置5が水平方向周りにピッチ操作される角速度としてもよい。第2の例として、速度パラメータは、リング型拡張装置5において右コントローラ4から環状部201の円環軸に向かう方向(すなわち、右コントローラ4のz軸方向に垂直な方向)x軸負方向)へ移動する加速度または速度やピッチ操作(すなわち、右コントローラ4のy軸方向周りに回転する方向への操作)される角速度としてもよい。
次に、プロセッサ81は、プレイヤキャラクタPCがジャンプする演出を行うか否かについて判定する(ステップS409)。例えば、プロセッサ81は、上記ステップS408において算出された速度パラメータが、リング型拡張装置5が下方向に振り動かされる操作が開始されたと判定するための所定の閾値以上であることを示す場合、上記ステップS409において肯定判定する。また、プロセッサ81は、ジャンプフラグデータD2iが示すジャンプフラグがオンに設定されている場合、上記ステップS409において肯定判定する。そして、プロセッサ81は、上記ステップS409において肯定判定された場合、ステップS410に処理を進める。一方、プロセッサ81は、上記ステップS409において否定判定された場合、ステップS411に処理を進める。
なお、ユーザがリング型拡張装置5を正規な姿勢で把持していない状態で操作していないと判定される場合、上記ステップS409においては否定判定されてもかまわない。ここで、リング型拡張装置5を把持する正規な姿勢とは、図37に例示したように、右コントローラ4が装着されている位置が最上位置となって2つのグリップカバー203および204を結ぶ方向が略水平となるようにユーザが両手でグリップカバー203および204を把持して、環状部201の円環軸が略水平になった状態で、リング型拡張装置5を押込操作および下方向に振る操作が行われるものである。このような正規な姿勢で操作が行われているか否かについては、姿勢データD2dが示すリング型拡張装置5の姿勢を分析することによって可能となる。
ステップS410において、プロセッサ81は、ジャンプ演出処理を行い、ステップS411に処理を進める。以下、図43を参照して、上記ステップS410において行われるジャンプ演出処理について説明する。
図43において、プロセッサ81は、ジャンプフラグデータD2iが示すジャンプフラグがオフであるか否かを判定する(ステップS420)。そして、プロセッサ81は、ジャンプフラグがオフである場合、ステップS421に処理を進める。一方、プロセッサ81は、ジャンプフラグがオンである場合、ステップS424に処理を進める。
ステップS421において、プロセッサ81は、ジャンプフラグをオンに設定して、次のステップに処理を進める。例えば、プロセッサ81は、ジャンプフラグデータD2iが示すジャンプフラグをオンに設定して、ジャンプフラグデータD2iを更新する。また、プロセッサ81は、上記ステップS407において設定されている標識Mの設定を解除する。
次に、プロセッサ81は、リング型拡張装置5の変形量が漸減的に減少している状態にあるか否かを判定する(ステップS422)。例えば、プロセッサ81は、リング変形量データD2gが示す変形量の履歴を参照して、当該変形量が漸減的に減少している状態にあるか否かを判定する。そして、プロセッサ81は、リング型拡張装置5の変形量が漸減的に減少している状態にある場合、ステップS423に処理を進める。一方、プロセッサ81は、リング型拡張装置5の変形量が漸減的に減少している状態にない場合、ステップS424に処理を進める。
ステップS423において、プロセッサ81は、所定時間前のリング型拡張装置5の変形量を用いて、新たにジャンプ力を算出し、ステップS424に処理を進める。一例として、プロセッサ81は、リング変形量データD2gが示す変形量の履歴における所定時間前(例えば、5フレーム前)の変形量に基づいて新たなジャンプ力を算出し、当該新たなジャンプ力を用いてジャンプ力データD2hを更新する。他の例として、プロセッサ81は、リング変形量データD2gが示す変形量の履歴における所定時間前までの変形量の最大値に基づいて新たなジャンプ力を算出し、当該新たなジャンプ力を用いてジャンプ力データD2hを更新する。
ステップS424において、プロセッサ81は、設定されているジャンプ力に応じて、プレイヤキャラクタPCを移動させる処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、ジャンプ力データD2hが示すジャンプ力に基づいて、プレイヤキャラクタPCを仮想ゲーム空間において上昇するように移動させ、移動後のプレイヤキャラクタPCの位置および状態に基づいて、プレイヤキャラクタ動作データD2kを更新する。
次に、プロセッサ81は、プレイヤキャラクタPCをジャンプさせる演出を終了するか否かを判定する(ステップS425)。例えば、プロセッサ81は、プレイヤキャラクタPCがジャンプを終了する位置まで到達した場合(ジャンプの到達目標高さまで到達した場合、他のオブジェクト等と衝突することによってジャンプが終了する場合等)、上記ステップS425において肯定判定する。そして、プロセッサ81は、ジャンプさせる演出を終了する場合、ステップS426に処理を進める。一方、プロセッサ81は、ジャンプさせる演出を終了しない場合、当該サブルーチンによる処理を終了する。
ステップS426において、プロセッサ81は、ジャンプによってプレイヤキャラクタPCを移動させる処理を停止する処理を行って、次のステップに処理を進める。例えば、プロセッサ81は、ジャンプを停止して現時点の位置に止まる状態にプレイヤキャラクタPCの状態を設定して、プレイヤキャラクタ動作データD2kを更新する。また、プロセッサ81は、ジャンプフラグデータD2iが示すジャンプフラグをオフに設定して、ジャンプフラグデータD2iを更新する。
次に、プロセッサ81は、ゲームスコアを算出し、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ジャンプによってプレイヤキャラクタPCが到達した位置に基づいてゲームスコアを算出し、当該ゲームスコアを加算してスコアデータD2jを更新する。
図42に戻り、ステップS411において、プロセッサ81は、プレイヤキャラクタPCの動作制御処理を行い、次のステップに処理を進める。例えば、プロセッサ81は、プレイヤキャラクタ動作データD2kが示すプレイヤキャラクタPCの位置、状態、姿勢、動作等に基づいて、仮想ゲーム空間においてプレイヤキャラクタPCを配置する。
次に、プロセッサ81は、画像生成表示制御処理を行い(ステップS412)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS411の処理による設定に基づいて、仮想ゲーム空間にプレイヤキャラクタPCを配置する。また、プロセッサ81は、上記ステップS407において標識Mが設定されている場合、当該標識Mを示す画像を仮想ゲーム空間に配置する。そして、プロセッサ81は、仮想ゲーム空間に仮想カメラを配置し、当該仮想カメラから見た仮想ゲーム空間画像を生成して、当該仮想ゲーム空間画像を据置型モニタ9に出力する。また、プロセッサ81は、スコアデータD2jが示すゲームスコアを示す画像を上記仮想ゲーム空間画像の適所に重畳して据置型モニタ9に出力する。なお、変形量画像生成部は、第1入力装置が変形している間、当該第1入力装置の変形量を示す画像を表示する処理を行うものであり、一例として標識Mを設定する上記ステップS407および/または標識Mを表示する上記ステップS412の処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、ゲーム処理を終了するか否かを判定する(ステップS413)。上記ステップS413においてゲーム処理を終了する条件としては、例えば、ゲーム処理が終了される条件が満たされたことや、ユーザがゲーム処理を終了する操作を行ったこと等がある。プロセッサ81は、ゲーム処理を終了しない場合に上記ステップS402に戻って処理を繰り返し、ゲーム処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップS402〜ステップS413の一連の処理は、ステップS413でゲーム処理を終了すると判定されるまで繰り返し実行される。
このように、第4のゲーム例においては、リング型拡張装置5を変形させながら振り動かすことによって所定のゲーム処理が行われるため、リング型拡張装置5を用いた操作におけるユーザ体感を向上させることができる。また、第4のゲーム例においては、リング型拡張装置5が変形していない、またはリング型拡張装置5を変形させながら振り動かされていない場合に所定のゲーム処理の実行が制限されるため、当該所定のゲーム処理が特定のユーザ操作による限定的なものとなる。
なお、上述した第4のゲーム例においては、リング型拡張装置5を用いたユーザ操作が行われる例を用いたが、上述した第1のゲーム例および第2のゲーム例のように、リング型拡張装置5に加えて、さらに左コントローラ3が装着されたベルト型拡張装置6を用いたユーザ操作が行われてもよい。この場合、リング型拡張装置5の動きセンサ(右コントローラ4の加速度センサ114および/または角速度センサ115)の出力を用いた処理を、ベルト型拡張装置6の動きセンサ(左コントローラ3の加速度センサ104および/または角速度センサ105)の出力を用いた処理としてもよい。このように、さらに左コントローラ3が装着されたベルト型拡張装置6を用いたユーザ操作が行われることによって、第3のゲーム例においては、リング型拡張装置5の変形させる押込操作に応じてプレイヤキャラクタPCのジャンプ力の制御が行われ、ユーザの足の動きによるベルト型拡張装置6の動きに応じてプレイヤキャラクタPCをジャンプさせる動作制御が行われるため、リング型拡張装置5およびベルト型拡張装置6の両方を用いたユーザ入力の方法を豊富にすることができる。
なお、上述した実施例では、弾性変形可能な材質で構成された環状部201をリング型拡張装置5が備えており、環状部201を弾性変形させることによる操作に応じた処理が行われている。このように入力装置の主部を弾性変形させる操作が可能であることによって、連続でユーザが押込操作を行うことが容易となる、押込操作に弾性変形が伴うことによってユーザの操作感覚が向上する、押込操作に弾性変形が伴うことによってプレイヤオブジェクトOBJが動く感覚をユーザが体感しやすくなる、押込操作を必要とすることによってユーザの身体を動かす運動(例えば、腕を動かす運動)を促すことができる等、様々な効果を期待することができる。
また、上記実施例では、リング型拡張装置5を変形させる操作例として、グリップカバー203および204が互いに近づくように環状部201を定常状態からリング型拡張装置5を変形させる押込操作を用いたが、他の態様によってリング型拡張装置5を変形させる操作が行われてもよい。例えば、リング型拡張装置5のグリップカバー203および204が互いに離れるように環状部201を定常状態からリング型拡張装置5を変形させる引張操作であってもよい。
また、上述した実施例におけるリング型拡張装置5を変形させる操作は、様々な態様を含んでいる。例えば、リング型拡張装置5の環状部201の形状に定常状態から微少な変化が生じた場合に、リング型拡張装置5を変形させる操作が行われていると定義してもよい。他の例として、リング型拡張装置5の環状部201の形状に定常状態から各ゲームにおいて設定される閾値以上の変形量の変形が生じた場合に、リング型拡張装置5を変形させる操作が行われていると定義してもよい。
また、上記実施例では、リング型拡張装置5の変形させる操作に応じてオブジェクトに対する第1制御が行われる例を用いているが、リング型拡張装置5に対する他の操作に応じて当該第1制御が行われてもかまわない。例えば、リング型拡張装置5のグリップカバー203および204が互いに近づくまたは離れるように操作力が加えられたとしても、環状部201が定常状態から変形するまでの操作力ではない場合に、当該操作力に応じて第1制御が行われてもかまわない。このように環状部201が変形していない場合であっても、右コントローラ4から取得する歪み値を用いて、リング型拡張装置5に加えられた力の量を算出することが可能であり、上述した変形量に代えてリング型拡張装置5に加えられた力の量を用いた処理が可能となる。
また、上述した実施例では、本体装置2と右コントローラ4とが無線通信を行うことによって、右コントローラ4の操作データが本体装置2へ送信される例を用いたが、他の態様によって上記操作データが本体装置2へ送信されてもよい。例えば、右コントローラ4のコントローラの操作データが左コントローラ3へ送信された後、左コントローラ3から両方の操作データ(または加工された操作データ)が本体装置2へ合わせて送信されてもかまわない。
また、上述した実施例において、右コントローラ4の姿勢や動き(リング型拡張装置5の姿勢や動き)を検出する方法については、単なる一例であって、他の方法や他のデータを用いて当該姿勢や当該動きを検出してもよい。上述した加速度センサおよび/または角速度センサは、右コントローラ4の姿勢や動きを算出するためのデータを出力するセンサの一例である。例えば、他の実施例においては、右コントローラ4は、加速度センサおよび/または角速度センサに代えてまたは加えて磁気センサを備えていてもよく、当該磁気センサによって検出された磁気を用いて右コントローラ4の姿勢や動きが算出されてもよい。また、右コントローラ4の姿勢や動きを算出する方法は任意であり、例えば他の実施例においては、本体装置2は、右コントローラ4(リング型拡張装置5)を撮像装置によって撮像し、撮影された画像を用いて右コントローラ4(リング型拡張装置5)の姿勢を算出してもよい。また、右コントローラ4に備えられた加速度センサおよび/または角速度センサにおいて検出されたデータを用いて、右コントローラ4内部において右コントローラ4の姿勢や動きを算出してもよい。この場合、右コントローラ4内部で算出された右コントローラ4の姿勢や動きを示すデータが加えられた操作データが、右コントローラ4から本体装置2へ送信されることになる。
また、ゲームシステム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。この場合、オブジェクトを移動する操作を行うための入力装置は、左コントローラ3や右コントローラ4でなくてもよく、別のコントローラ、マウス、タッチパッド、タッチパネル、トラックボール、キーボード、十字キー、スライドパッド等であってもよい。
また、上述した例では、リング型拡張装置5は、右コントローラ4が装着されることによって慣性センサ(例えば、加速度センサや角速度センサ)が搭載された入力装置として機能する例を用いたが、他の態様によって当該機能が搭載されてもよい。例えば、リング型拡張装置5自体に慣性センサの機能が搭載されていてもよい。一例として、リング型拡張装置5に生じる1軸以上の方向に沿った加速度を検出する加速度センサおよび/またはリング型拡張装置5に生じる1軸以上の軸方向周りの角速度を検出する角速度センサが、本体部202内部に設けられていてもよい。
また、上述した説明では情報処理をゲームシステム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、ゲームシステム1のプロセッサ81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。