以下、本実施形態の一例に係る情報処理システムについて説明する。本実施形態における情報処理システムは、一例としてゲームシステム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が設けられる面)は、大略的には矩形形状である。
また、本体装置2は、本体装置2が左コントローラ3と有線通信を行うための端子である左側端子17と、本体装置2が右コントローラ4と有線通信を行うための右側端子21を備える。
図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は、情報処理において用いられる各種のデータを一時的に記憶するために用いられるメモリである。
プロセッサ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(登録商標)の規格に従った通信を行う。なお、コントローラ通信部83が、受信部の一例に相当する。
図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へ出力される。
通信制御部101は、各入力部(具体的には、各ボタン103、アナログスティック32、各センサ104および105)から、入力に関する情報(具体的には、操作に関する情報、またはセンサによる検出結果)を取得する。通信制御部101は、取得した情報(または取得した情報に所定の加工を行った情報)を含む操作データを本体装置2へ送信する。なお、操作データは、所定時間に1回の割合で繰り返し送信される。なお、入力に関する情報が本体装置2へ送信される間隔は、各入力部について同じであってもよいし、同じでなくてもよい。
上記操作データが本体装置2へ送信されることによって、本体装置2は、左コントローラ3に対して行われた入力を得ることができる。すなわち、本体装置2は、各ボタン103およびアナログスティック32に対する操作を、操作データに基づいて判別することができる。また、本体装置2は、左コントローラ3の動きおよび/または姿勢に関する情報を、操作データ(具体的には、加速度センサ104および角速度センサ105の検出結果)に基づいて算出することができる。
左コントローラ3は、振動によってユーザに通知を行うための振動子107を備える。本実施形態においては、振動子107は、本体装置2からの指令によって制御される。
左コントローラ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に対して行う通信方法を制御する。なお、通信制御部111が、第2送信部の一例に相当する。
右コントローラ4は、左コントローラ3の各入力部と同様の各入力部を備える。具体的には、各ボタン113、アナログスティック52、慣性センサ(加速度センサ114および角速度センサ115)を備える。これらの各入力部については、左コントローラ3の各入力部と同様の機能を有し、同様に動作する。
また、右コントローラ4は、左コントローラ3と同様、振動子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を両手で把持した状態で足踏みしたり屈伸したりする動作を行うことによって、リング型拡張装置5に対する操作を行うことができる。さらに、ユーザは、例えばリング型拡張装置5を両手で把持した状態で所望の方向にリング型拡張装置5を向ける動作を行うことによって、リング型拡張装置5に対する操作を行うことができる。なお、ユーザによって把持されるリング型拡張装置5が、第2装置の一例に相当する。また、右コントローラ4に設けられている加速度センサ114および/または角速度センサ115が、第2センサの一例に相当する。
図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が近づく向き、または、離れる向き)と、変形量とを算出することができる。
なお、他の実施例においては、歪み検出部211は、歪みゲージに代えて、環状部201が定常状態から変形したことを検出可能な任意のセンサを含んでもよい。例えば、歪み検出部211は、環状部201が変形した場合に加わる圧力を検出する感圧センサを含んでもよいし、環状部201が曲げられた量を検出する曲げセンサを含んでもよい。
リング型拡張装置5は、信号変換部212を備える。本実施形態においては、信号変換部212は、アンプとADコンバータとを含む。信号変換部212は、歪み検出部211に電気的に接続され、歪み検出部211の出力信号をアンプによって増幅し、ADコンバータによってAD変換を行う。信号変換部212は、上記歪み値を示すデジタル信号を出力する。なお、他の実施形態においては、信号変換部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を装着させるための構成は任意である。
収容部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参照)。なお、ユーザの足に締着されるベルト型拡張装置6が、第1装置の一例に相当する。また、左コントローラ3に設けられている加速度センサ104および/または角速度センサ105が、第1センサの一例に相当する。なお、ベルト型拡張装置6に装着されることなく左コントローラ3そのものをユーザの下半身に取り付けて使用する(例えば、ユーザの下半身に着ける衣服のポケット等に収容して使用する、ユーザのベルトに挟んで使用する等)場合、左コントローラ3そのものが、第1装置の一例に相当する。
図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を変形させる動作の一例として、ユーザは、グリップカバー203および204が互いに離れる方向(図示A方向)にリング型拡張装置5を変形させる操作(引張操作)を行うことができる。リング型拡張装置5を変形させる動作の他の例として、ユーザは、グリップカバー203および204が互いに引き寄せる方向(図示B方向)にリング型拡張装置5を変形させる操作(押す操作)を行うことができる。なお、ユーザはリング型拡張装置5に対する種々の動作でゲーム操作を行うことができる。例えば、ユーザは、一方のグリップカバーを両手で把持し、他方のグリップカバーを腹部に当てた状態で、リング型拡張装置5を変形させる動作を行うこともできる。この動作によって、ユーザは、腕と腹筋を鍛えるフィットネス動作をゲーム操作として行うことができる。また、ユーザは、両足の内股にグリップカバー203および204を当ててリング型拡張装置5を足で挟んだ状態で、リング型拡張装置5を変形させる動作を行うこともできる。この動作によって、ユーザは、足の筋肉を鍛えるフィットネス動作をゲーム操作として行うことができる。
なお、図12においては、ユーザがグリップカバー203および204を両手で把持し、ベルト型拡張装置6を左股に装着した状態で足踏みしたり屈伸したりする動作による操作を例示している。この動作によって、ユーザは、歩いたり走ったりする動作をゲーム操作として行うことができる。この動作によって、ユーザは、足の筋肉を鍛えるフィットネス動作をゲーム操作として行うことができる。また、ユーザが歩いたり走ったりしながら両手で把持しているリング型拡張装置5の方向を上下左右に向けて動かす動作をゲーム操作として行うことができる。なお、ユーザは、リング型拡張装置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への通信は、無線通信によって行われる。なお、通信制御部101が、第1送信部の一例に相当する。
次に、本体装置2が行う具体的な処理を説明する前に、図13〜図16を用いて、本体装置2で行うゲームの概要について説明する。なお、図13は、ユーザの足踏み操作に応じて据置型モニタ9に表示されるゲーム画像の一例を示す図である。図14は、ユーザの足踏み操作に応じた左コントローラ3本体および右コントローラ4本体の動作の一例を示す図である。図15は、ユーザがリング型拡張装置5の向き(リング方向)による操作を行う一例を示す図である。図16は、リング型拡張装置5の向きによる操作が行われる際のリング型拡張装置5の動きの一例を示す図である。
以上に説明したように、本実施形態におけるゲームシステム1については左コントローラ3および右コントローラ4が本体装置2から着脱可能である。また、図13に示すように、クレードル8に本体装置2単体を装着することによって据置型モニタ9に画像(および音声)を出力可能である。以下、左コントローラ3および右コントローラ4を本体装置2から取り外した状態で、クレードル8に本体装置2単体を装着して、クレードル8に接続された据置型モニタ9から画像(および音声)を出力する利用態様におけるゲームシステムを用いて説明する。そして、ユーザは、リング型拡張装置5に装着された右コントローラ4とベルト型拡張装置6に装着された左コントローラ3との両方を用いて、ゲーム操作を行う例を用いる。また、ゲーム処理の一例として、据置型モニタ9に表示される仮想オブジェクトPOがユーザの足踏み操作に応じて、仮想ゲーム空間内を移動する処理を用いる。
例えば、図13においては、仮想ゲーム空間内において、停止したり、歩く(ウォーキング)、ジョギング、または走る(ランニング)ことによって仮想ゲーム空間内を移動したり、所定の目標物に向かって攻撃したりする仮想オブジェクトPOが表示されている。そして、ユーザは、左コントローラ3が装着されたベルト型拡張装置6を締着するとともに、右コントローラ4が装着されたリング型拡張装置5を把持して、ウォーキング、ジョギング、またはランニングするように足踏みする。この場合、ユーザの足踏み動作に応じた動作および速度で、仮想オブジェクトPOが仮想ゲーム空間内を移動する。また、仮想オブジェクトPOは、両手で1つのリングオブジェクトRを把持しており、実空間においてリング型拡張装置5の方向(リング方向)が変化することに応じて、仮想ゲーム空間におけるリングオブジェクトRの方向が変化する。
具体的には、図14に示すように、ユーザがベルト型拡張装置6を左股に締着した状態で、リング型拡張装置5を両手で把持しながら足踏みするユーザ操作が行われる。そして、ユーザがウォーキング、ジョギング、およびランニング等を模した足踏みをしたり、足踏み状態を停止させたりすることによって、その足踏み操作に応じた操作入力が本体装置2に与えられる。
例えば、ユーザの左股の前部に締着されたベルト型拡張装置6に装着される左コントローラ3は、ユーザの足踏み操作に応じて、実空間における重力方向(鉛直方向)に垂直なユーザの左右水平方向を軸として起立状態(左コントローラ3の長軸方向が鉛直方向に向いた状態)と仰角状態(左コントローラ3の当該長軸方向が当該起立状態からユーザの前後水平方向へ近づいた状態)との間を揺動(図示M1方向の揺れであり、前後揺れと記載することがある)するように動かされる。一例として、ユーザが左足を床面につけて静止して立っている状態において左コントローラ3のy軸負方向が実空間の鉛直方向となるように(すなわち、左コントローラ3のy軸正方向が実空間の直上方向となるように)、ベルト型拡張装置6に左コントローラ3が装着される場合、ユーザの足踏み操作に応じて、左コントローラ3のy軸負方向が鉛直方向に向いた起立状態と左コントローラ3のy軸負方向が当該起立状態から水平方向へ近づいた仰角状態との間を、ユーザの左右水平方向(左コントローラ3のx軸方向)を軸として前後揺れするように左コントローラ3本体が動かされる。
また、例えば、ユーザが両手で把持するリング型拡張装置5に装着される右コントローラ4には、ユーザの足踏み操作に応じて、実空間における重力方向の揺れ(図示M2方向の揺れであり、縦揺れと記載することがある)が主に生じる。一例として、右コントローラ4のx軸負方向が実空間の鉛直方向となるように(すなわち、右コントローラ4のx軸正方向が実空間の直上方向となるように)ユーザがリング型拡張装置5を把持して足踏み操作する場合、ユーザの足踏み操作に応じて、右コントローラ4のx軸正方向とx軸負方向とを往復するように右コントローラ4本体が縦揺れする。
このようなベルト型拡張装置6に装着された左コントローラ3およびリング型拡張装置5に装着された右コントローラ4を用いて、ユーザが停止状態から動き出した(すなわち、足踏み操作を開始した)状態を検出する方法(動き出し検出処理)について説明する。一例として、後述する第1動き出し条件および第2動き出し条件を何れも満たす場合、または後述する第1動き出し条件および第3動き出し条件を何れも満たす場合、ユーザが「歩き」または「ジョギング」で動き出したと判定する。当該例の場合、第1動き出し条件および第2動き出し条件の組と第1動き出し条件および第3動き出し条件の組との一方の組を満たさない場合であっても、他方の組を満たすことによってユーザが停止状態から動き出したことを判定できるため、ユーザの意図に沿った判定が可能となる。なお、後述される「フレーム」は、ゲームシステム1で実行される処理の周期であり、例えば、1フレーム=1/60秒である。
(第1動き出し条件)右コントローラ4において生じる加速度の変化量の所定期間(例えば、5フレーム)分の合算値が第1閾値(例えば、1.5G)を越えている
(第2動き出し条件)左コントローラ3および右コントローラ4においてそれぞれ生じる重力加速度を省いた実空間の直上方向の加速度の値が何れも第2閾値(例えば、0.2G)以上、すなわち実空間の直上方向へ加速している
(第3動き出し条件)左コントローラ3において生じる重力加速度を省いた実空間の直上方向の加速度の値が第3閾値(第3閾値<第2閾値であり、例えば、0.1G)以上、かつ、左コントローラ3が前後揺れする一定期間中の角度変化が第4閾値(例えば、15°)以上
このように、上記動き出し判定によれば、ユーザが静止状態から動き出したことを素早く検出することが可能となる。なお、静止状態において生じる値に近い閾値を設定するともに判定に要する期間を相対的に短く設定することによって、より素早く検出可能となる。なお、実空間における直上方向(鉛直方向)については、左コントローラ3および右コントローラ4が静止状態においては左コントローラ3および右コントローラ4にそれぞれ作用する重力加速度の方向に基づいて算出することが可能である。また、ユーザが動き出しを開始した状態では、左コントローラ3および右コントローラ4の姿勢の変化や移動が生じている場合であっても、左コントローラ3および右コントローラ4にそれぞれ生じる角速度に基づいて、左コントローラ3および右コントローラ4の姿勢変化を算出することが可能である。したがって、ユーザが動き出しを開始した状態では、上記角速度を用いた当該姿勢変化に基づいて算出された左コントローラ3および右コントローラ4それぞれの重力加速度の方向を用いて、実空間における直上方向(鉛直方向)を算出してもかまわない。なお、ユーザが停止状態から動き出したことを判定として、第1動き出し条件および第2動き出し条件の組だけで判定してもよいし、第1動き出し条件および第3動き出し条件の組だけで判定してもよい。
次に、上述した動き出し検出処理において、ユーザが動き出したことが判定された際に、ユーザが「歩き」で動き出したのか、または「ジョギング」で動き出したのかを判別する方法について説明する。一例として、後述する動き出し時動作判別条件を満たす場合、ユーザが「歩き」で動き出したと判別する。
(動き出し時動作判別条件)上記動き出しが判定された時点の直前の期間となる所定期間(上記第1動き出し条件の判定で用いられる所定期間より長い期間であり例えば、15フレーム、すなわち当該所定期間の開始時点から例えば10フレーム遡った時点から上記動き出しが判定された時点までの期間)において、右コントローラ4において生じる直上方向の加速度の変化量が第5閾値(例えば、1.2G)以下
このように、上記動き出し判定によれば、「歩き判定」や「ジョギング判定」のみで、歩きやジョギングで動き出すのではなく、動作の種別とは別に「動き出し」のみを判定する処理が別途に設けられている。これによって、動き出しをより正確に判定することが可能になるとともに、動き出しを素早く判定することが可能となる。例えば、動き出し判定を別に設けることなく、俊敏な動きに基づいてジョギング判定、緩慢な動きに基づいて歩き判定をした場合、ユーザは静止しているつもりであっても緩慢な動作に対応する出力があると、誤って「歩き」で動き出したと判定してしまう恐れがある。この点、まずユーザの動き出しを判定したうえで、その動きの種別を判別することによって、ユーザの意図に反して動き出したと判定してしまうことを抑制できる。さらに、動きの種別の判定に用いるデータを、動き出しが判定された後ではなく動き出しが判定される前の期間から抽出することで、素早く動きの種別判定を行うことができる。また、後述により明らかとなるが、「動き出し」後の動作種別の判定については、相対的に長いデータ取得期間を用いた別の判別方法を「動き出し後の動作判定」として別途設けることによって、さらに一連の動作判定を正確にすることができる。
次に、ユーザが「歩き」または「ジョギング」によって動き出したと判定された後において、移動が継続しているときに、ユーザが「歩き」で動いているのか、または「ジョギング」で動いているのかを判別する方法について説明する。一例として、後述する第1動き出し後動作判別条件、第2動き出し後動作判別条件、および第3動き出し後動作判別条件の全てを満たす場合、ユーザが「歩き」で動作していると判別する。また、後述する第1動き出し後動作判別条件、第2動き出し後動作判別条件、および第3動き出し後動作判別条件の少なくとも1つを満たさない場合、ユーザが「ジョギング」で動作していると判別する。
(第1動き出し後動作判別条件)ユーザの足踏み周期(具体的には、ベルト型拡張装置6が締着されたユーザの左股を上げ下げする周期)が第8閾値(例えば、60フレーム)以上
(第2動き出し後動作判別条件)ユーザの片足の股(具体的には、ベルト型拡張装置6が締着されたユーザの左股)が最上位置まで上がってから最下位置まで下がるまでの時間が第9閾値(例えば、20フレーム)以上
(第3動き出し後動作判別条件)上記動き出しが判定された時点の直前の期間となる所定期間(上記第1動き出し条件の判定で用いられる所定期間より長い期間であり、例えば、15フレーム、すなわち当該所定期間の開始時点から例えば10フレーム遡った時点から上記動き出しが判定された時点までの期間)において、右コントローラ4において生じる直上方向の加速度の変化量が第5閾値(例えば、1.2G)以下
このように、ユーザが動き出したと判定された後において、ユーザの動作種別(例えば、「歩き」、「ジョギング」)を判定する方法は、ユーザが停止状態から動き出した際に動作種別を判定する方法とは異なる。具体的には、ユーザが動き出したと判定された後において、ユーザの動作種別を判定するためのデータを取得する期間(第8閾値および第9閾値)は、ユーザが停止状態から動き出した際に動作種別を判定するためのデータを取得する期間よりも長い。
なお、上述した実施例では、第1動き出し後動作判別条件、第2動き出し後動作判別条件、および第3動き出し後動作判別条件の全てを満たす場合、ユーザが「歩き」で動作していると判別する例を用いたが、他の条件によってユーザが「歩き」で動作していると判別してもかまわない。例えば、第1動き出し後動作判別条件および第2動き出し後動作判別条件の少なくとも1つを満たす場合、ユーザが「歩き」で動作していると判別し、第1動き出し後動作判別条件および第2動き出し後動作判別条件の何れも満たさない場合、ユーザが「ジョギング」で動作していると判別してもよい。
また、上述したように、表示画面(例えば、据置型モニタ9)には、ユーザの足踏み動作に応じた動作および速度で仮想ゲーム空間内を移動する仮想オブジェクトPOが表示される。例えば、ユーザが実空間において「静止している」と判定されたことに応じて仮想ゲーム空間内において「停止」した状態で仮想オブジェクトPOが表示され、ユーザが実空間において「歩き」で足踏みしていると判定されたことに応じて仮想ゲーム空間内において歩いて移動するように仮想オブジェクトPOが表示され、ユーザが実空間において「ジョギング」で足踏みしていると判定されたことに応じて仮想ゲーム空間内においてジョギングで移動するように仮想オブジェクトPOが表示される。しかしながら、ユーザの足踏み動作が変化することに応じて仮想オブジェクトPOが異なる動作に移行する場合、予め定められた動作を経て次の動作に移行してもかまわない。一例として、ユーザの足踏み動作が「ジョギング」から「歩き」に変化した場合、仮想オブジェクトPOの動作が「ジョギング」による移動から一旦「停止」する動作を挟んで、「歩き」による移動に移行してもよい。例えば、仮想オブジェクトPOが登場するゲームにおいて、仮想ゲーム空間内において停止する動作が重要な要素となっている場合、ユーザが「ジョギング」する足踏み動作から足踏み動作を停止して静止したにも拘わらず、短時間の間、仮想オブジェクトPOが「停止」せずに「歩き」で動作してしまうようなことを防止することができ、仮想オブジェクトPOを停止させる操作の応答性を向上させることができる。
また、上記ユーザの足踏み周期(例えば、ベルト型拡張装置6が締着されたユーザの左股を上げ下げする周期)を算出するためには、当該ユーザが股(例えば左股)を上げ下げする動作を検出することが必要となる。ユーザが股を上げ下げする動作を検出するための股の上げ下げ判定については、左コントローラ3に生じる角速度および加速度の少なくとも一方を用いて任意の方法を用いればよいが、一例として、左コントローラ3に生じる角速度および加速度の両方を用いて判定してもよい。具体的には、後述する第1股上げ判定条件および第2股上げ判定条件を何れも満たす場合に股上げ状態であると判定してもよい。
(第1股上げ判定条件)直近の所定期間(例えば、15フレーム)における左コントローラ3のx軸方向周りの角度(膝曲げ角度が大きくなるほど当該角度が大きくなる)の最大値および最小値を取得し、当該最小値が得られた時点より当該最大値が得られた時点が直近である
(第2股上げ判定条件)直近の所定期間(例えば、15フレーム)における左コントローラ3の鉛直方向の加速度が第6閾値(例えば、0.8G)以下、すなわち実空間の直上方向に加速している
また、後述する第1股下げ判定条件および第2股下げ判定条件を何れも満たす場合に股下げ状態であると判定してもよい。
(第1股下げ判定条件)直近の所定期間(例えば、15フレーム)における左コントローラ3のx軸方向周りの角度の最大値および最小値を取得し、当該最大値が得られた時点より当該最小値が得られた時点が直近である
(第2股下げ判定条件)直近の所定期間(例えば、15フレーム)における左コントローラ3の鉛直方向の加速度が第7閾値(例えば、1.2G)以上、すなわち実空間の鉛直方向に加速している
また、ユーザの足踏み動作の種別として、「歩き」および「ジョギング」に加えて、「ジョギング」より足踏み周期が短い「走り」による足踏み動作を区別してもかまわない。一例として、左コントローラ3において生じた加速度変化量を直前の所定時間分(例えば、60フレーム分)合算し、当該合算値が算出された所定処理回数分(例えば、30フレーム分)の平均値とユーザ毎に設定された閾値(ユーザ閾値)との比較によって、「ジョギング」による足踏み動作と「走り」による足踏み動作とを判別してもよい。具体的には、上記平均値が上記ユーザ閾値以上である場合にユーザが「走り」によって足踏み動作していると判定し、上記平均値が上記ユーザ閾値未満である場合(ただし、「ジョギング」の判定条件を満たすとき)にユーザが「ジョギング」によって足踏み動作していると判定する。ここで、上記ユーザ閾値は、ゲーム開始前に予めユーザに「ジョギング」の足踏み動作と「走り」の足踏み動作とを行うように促し、当該足踏み動作から得られる加速度変化量の上記平均値に基づいて、当該ゲーム開始前にユーザ毎に設定される。
なお、ユーザ毎に設定される上記ユーザ閾値は、当該ユーザ閾値が用いられる場面前であれば、どのようなタイミングで設定されてもよいし、様々な演出に応じて設定されてもよい。第1の例として、上記ユーザ閾値が用いられるゲームが開始される前に、「ジョギング」の足踏み動作と「走り」の足踏み動作とを行うようにそれぞれ明確にユーザに指示し、当該指示に応じて行われた足踏み動作の結果に基づいて当該ユーザのユーザ閾値が設定されてもよい。第2の例として、上記ユーザ閾値が用いられるゲーム中(好ましくは、ゲームの序盤)において、「ジョギング」の足踏み動作を行うユーザ操作が求められる場面と「走り」の足踏み動作を行うユーザ操作が求められる場面とを用意し、当該場面における足踏み動作の結果に基づいて当該ユーザ操作を行ったユーザのユーザ閾値が設定されてもよい。
また、ユーザ毎に設定される上記ユーザ閾値が「ジョギング」による足踏み動作と「走り」による足踏み動作とを判別するために用いられる例を用いたが、ユーザ閾値が他の判別に用いられてもよい。一例として、ユーザ毎に設定される上記ユーザ閾値は、同様に足踏み速度に応じて区別される「歩き」と「ジョギング」との区別に用いることができることは明らかであり、ゲーム開始前に予めユーザに「歩き」の足踏み動作と「ジョギング」の足踏み動作とを行うように促すことによって、異なる状況下におけるユーザ閾値として設定可能となる。この場合、上記ユーザ閾値は、「歩き」による足踏み動作と「ジョギング」による足踏み動作とを判別するために用いることができる。
なお、「ジョギング」による足踏み動作と「走り」による足踏み動作とを判別するためのユーザ閾値と、「歩き」による足踏み動作と「ジョギング」による足踏み動作とを判別するためのユーザ閾値との2つのユーザ閾値が設定される場合、当該2つのユーザ閾値は、当該2つのユーザ閾値間の足踏み動作に対する仮想オブジェクトPOの移動速度の評価に用いられてもよい。例えば、ユーザが「ジョギング」による足踏み動作を行っていると判定されている状態においては、「ジョギング」による足踏み動作と「走り」による足踏み動作とを判別するためのユーザ閾値に近い速度(周期)で足踏み動作が行われるほど、「走り」による足踏み動作による仮想オブジェクトPOの移動速度に近い移動速度となるように線形補間されて、仮想オブジェクトPOの移動速度が設定されてもよい。つまり、上記2つのユーザ閾値のうち、「ジョギング」による足踏み動作と「走り」による足踏み動作とを判別するためのユーザ閾値が足踏み動作の判別に用いられ、上記2つのユーザ閾値間の関係が当該閾値間の移動速度の線形補間に用いられてもよい。
また、上記ユーザ閾値は、ゲームの進行に応じて変化してもかまわない。一例として、上記ユーザ閾値は、ゲームの進行状況(例えば、仮想ゲーム空間における移動距離やクリアしたゲームステージ数や内容)に応じて、段階的に変化してもよい。
また、上述した実施例では、ユーザの足踏み動作の種別として、「歩き」および「ジョギング」に加えて、「走り」による足踏み動作を区別しているが、「走り」による足踏み動作の区別がなくてもよい。この場合、「ジョギング」による足踏み動作において、ユーザの動作速度(例えば、足踏み周期や足踏み速度)が速くなることに応じて、「ジョギング」する速度(具体的には、ユーザの足踏み動作に応じた動作および速度で仮想ゲーム空間内を移動する仮想オブジェクトPOが「ジョギング」で移動する速度)が速くなるように制御してもよい。
このように、ユーザが「歩き」で足踏み動作しているか「ジョギング」で足踏み動作しているかの判別については、第1動き出し後動作判別条件および第2動き出し後動作判別条件を用いた判別、すなわちジャイロセンサによって検出される角速度に基づいて行われる。これに対して、ユーザが「ジョギング」で足踏み動作している状態において、「ジョギング」よりも足踏み周期が短い「走り」で足踏み動作している状態に変化したことを判定する際には、加速度センサによって検出された加速度が用いられる。したがって、「歩き」による足踏み動作と「ジョギング」による足踏み動作との判別が角速度によって行われ、「ジョギング」による足踏み動作中に加速度が大きい場合に当該足踏み周期が短くなったと判定されることになる。これは、ユーザの足踏み動作の周期に応じて、適切なパラメータを選択しているためであり、「歩き」による足踏み動作と「ジョギング」による足踏み動作との判別が加速度では見分けにくい場合等に有効な方法となる。
また、ユーザが「歩き」または「ジョギング」によって動き出したと判定された後において、ユーザが「歩き」、「ジョギング」、または「走り」で動いているのかの判別は、ベルト型拡張装置6に装着された左コントローラ3の動きセンサ(例えば、加速度センサや角速度センサ)からの出力のみを用いて行われている。ここで、本実施例においては、ユーザが「歩き」、「ジョギング」、および「走り」の何れの状態で動いているかによって、仮想ゲーム空間内を移動する仮想オブジェクトPOの移動速度も変化するため、仮想オブジェクトPOの移動中においては左コントローラ3の動きセンサの出力のみに基づいて、仮想オブジェクトPOの移動速度を制御していることになる。なお、他の実施例においては、左コントローラ3の動きセンサの出力だけでなく、リング型拡張装置5に装着された右コントローラ4の動きセンサ(例えば、加速度センサや角速度センサ)からの出力も用いて、仮想オブジェクトPOの移動中における移動速度を制御してもかまわない。一例として、仮想ゲーム空間において仮想オブジェクトPOの向きを変更できないような場面では、リング型拡張装置5に装着された右コントローラ4の動きセンサの出力を用いて、仮想オブジェクトPOの移動中における移動速度を制御することが考えられる。
次に、ユーザが「歩き」による足踏み動作から停止して静止したことを判定する方法について説明する。一例として、後述する第1停止動作判定条件および第2停止動作判定条件の少なくとも1つを満たす場合、ユーザが「歩き」による足踏み動作から停止して静止したと判定する。
(第1停止動作判定条件)右コントローラ4に生じる角速度が0である
(第2停止動作判定条件)直近の所定期間(例えば、90フレーム)における左コントローラ3の角度変化が第10閾値(例えば、10°)以下、かつ、直近の所定期間(例えば、10フレーム)における左コントローラ3の角速度変位量が第11閾値(例えば、0.01)以下
ここで、ユーザが足踏み動作を「停止」したと判定されることなく「歩き」による足踏み動作が行われていると判定される状態を継続するためには、上記第1停止動作判定条件および第2停止動作判定条件が何れも成立しないように、右コントローラ4において角速度を継続して生じさせるとともに、所定時間において第10閾値より大きい左コントローラ3の角度変化を生じさせるまたは第11閾値以上の左コントローラ3の角速度変化を生じさせることが必要となる。したがって、ユーザが足踏み動作を「停止」したと判定されることなく「歩き」による足踏み動作が行われていると判定される状態を継続するためには、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方を継続して動かすことが必要となり、ユーザの下半身の動きだけでなくユーザの上半身の動きも必要となるため、ユーザの全身を使った操作を促進することができる。また、上記第1停止動作判定条件および上記第2停止動作判定条件は、ユーザの「歩き」継続判定条件、すなわちユーザの動作継続判定条件としても機能していることになる。
また、上述したように、ユーザが足踏み動作を「停止」したと判定されることなく「歩き」による足踏み動作が行われていると判定される状態を継続するためには、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方が継続して動いていることが必要となるが、これは所定期間においてそれぞれの動きセンサ(例えば、角速度センサ)の出力変化量が所定量であることが必要となる。これは、左コントローラ3および右コントローラ4それぞれの動きセンサの出力が、少なくとも一方のコントローラの動きの停止を示す場合には、ユーザが足踏み動作を「停止」したと判定されることになる。
次に、ユーザが「ジョギング」または「走り」による足踏み動作から停止して静止したことを判定する方法について説明する。一例として、後述する第3停止動作判定条件〜第5停止動作判定条件の少なくとも1つを満たす場合、ユーザが「ジョギング」または「走り」による足踏み動作から停止して静止したと判定する。
(第3停止動作判定条件)右コントローラ4に生じる角速度が0である
(第4停止動作判定条件)直近の所定期間(例えば、10フレーム)における左コントローラ3または右コントローラ4の加速度変化が第12閾値以下
(第5停止動作判定条件)直近の所定期間(例えば、10フレーム)における左コントローラ3の角速度の平均値が第13閾値以下
ここで、ユーザが足踏み動作を「停止」したと判定されることなく「ジョギング」または「走り」による足踏み動作が行われていると判定される状態を継続するためには、上記第3停止動作判定条件〜上記第5停止動作判定条件が何れも成立しないように、右コントローラ4において角速度を継続して生じさせ、所定時間において第12閾値より大きい加速度を左コントローラ3および右コントローラ4の両方に生じさせ、所定時間において第13閾値より大きい角速度平均値となるように左コントローラ3を動かすことが必要となる。したがって、ユーザが足踏み動作を「停止」したと判定されることなく「ジョギング」または「走り」による足踏み動作が行われていると判定される状態を継続するためには、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方を継続して動かすことが必要となり、ユーザの下半身の動きだけでなくユーザの上半身の動きも必要となるため、ユーザの全身を使った操作を促進することができる。また、上記第3停止動作判定条件〜上記第5停止動作判定条件は、ユーザの「ジョギング」または「走り」継続判定条件、すなわちユーザの動作継続判定条件としても機能していることになる。
また、上述したように、ユーザが足踏み動作を「停止」したと判定されることなく「ジョギング」または「走り」による足踏み動作が行われていると判定される状態を継続するためには、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方が継続して動いていることが必要となるが、これは所定期間においてそれぞれの動きセンサ(例えば、加速度センサや角速度センサ)の出力変化量が所定量であることが必要となる。これは、左コントローラ3および右コントローラ4それぞれの動きセンサの出力が、少なくとも一方のコントローラの動きの停止を示す場合には、ユーザが足踏み動作を「停止」したと判定されることになる。
また、ユーザが停止状態から足踏み動作を開始して「動き出し」を判定された後に、「停止」したと判定されることなく「歩き」、「ジョギング」、または「走り」による足踏み動作が行われていると判定されるユーザの動作継続判定条件は、上述したユーザが停止状態から動き出した(すなわち、足踏み動作を開始した)と判定される動き出し条件とは異なっており、ユーザの足踏み状態に適した判定条件がそれぞれ設定されている。例えば、ユーザが停止状態から動き出したと判定される動き出し条件は、ユーザが動き出しを開始した状態では検出される左コントローラ3の角速度の信頼性が相対的に高いことから、左コントローラ3に生じる角速度を用いて算出される左コントローラ3の姿勢変化が用いられている。これに対して、ユーザが停止状態から足踏み動作を開始した後に「停止」したと判定されることなく「歩き」、「ジョギング」、または「走り」による足踏み動作が行われていると判定されるユーザの動作継続判定条件は、左コントローラ3に生じる角速度そのものが判定に用いられることはなく、当該角速度を用いずに判定される、または当該角速度の差分を用いた判定が行われている。なお、ユーザが停止状態から足踏み動作を開始した後に「停止」したと判定されることなく「歩き」、「ジョギング」、または「走り」による足踏み動作が行われていると判定されるユーザの動作継続判定条件を満たしている場合、当該判定に対応して仮想ゲーム空間内における仮想オブジェクトPOもユーザの足踏み動作に応じて移動を継続し、当該動作継続判定条件を満たしている間において仮想オブジェクトPOの移動を継続する動作が、第1の所定動作の一例に相当する。
なお、上述したように、表示画面(例えば、据置型モニタ9)には、ユーザの足踏み動作に応じた動作および速度で仮想ゲーム空間内を移動する仮想オブジェクトPOが表示される。例えば、上述したユーザの足踏み動作の判定や股の上げ下げ判定の結果に基づいて、ユーザの動きと仮想オブジェクトPOの動きとを一致させるように仮想オブジェクトPOの動作を制御して移動速度を変化させてもよい。具体的には、上記股の上げ下げ判定の結果に応じて、ユーザが左足を上げているタイミングと同期させて仮想オブジェクトPOの左足を上げ、ユーザが右足を上げているタイミングと同期させて仮想オブジェクトPOの右足を上げるように、仮想オブジェクトPOの歩行または走行動作を制御することによって、ユーザ操作に対する違和感(ズレ)を軽減することができる。
また、上述した例では、ユーザが左足/右足を上げているタイミングと同期させて仮想オブジェクトPOの左足/右足を上げるように、仮想オブジェクトPOの歩行または走行動作を制御する例を用いたが、ユーザの足踏み動作と他の仮想オブジェクトPOの動作を同期させてもかまわない。一例として、ユーザが左足/右足を上げているタイミングと同期させて仮想オブジェクトPOの右手/左手が動くように、仮想オブジェクトPOの動作(例えば、泳ぐ動作や両手で回転物を回転させる動作)を制御してもよい。
このように、ユーザが動き出したと判定された後における仮想オブジェクトPOが仮想ゲーム空間内を移動する移動速度は、ベルト型拡張装置6に装着された左コントローラ3の動きセンサ(例えば、加速度センサや角速度センサ)からの出力のみを用いて行われている。なお、他の実施例においては、左コントローラ3の動きセンサの出力だけでなく、リング型拡張装置5に装着された右コントローラ4の動きセンサ(例えば、加速度センサや角速度センサ)からの出力も用いて、仮想オブジェクトPOの移動中における移動速度を制御してもかまわない。
また、本実施例においては、図15に示すように、ユーザがベルト型拡張装置6を左股に締着した状態で、リング型拡張装置5を両手で把持しながらリング型拡張装置5の方向を実空間における上下左右に変化させるユーザ操作が行われる。そして、ユーザが実空間において停止して静止した状態または足踏みしている状態でリング型拡張装置5の方向を変化させることによって、その方向に応じた操作入力が本体装置2に与えられる。
例えば、図15に示すように、本実施例においては、リング型拡張装置5における環状部201の円環軸に沿って、当該リング型拡張装置5を両手で把持するユーザから離れる方向がリング型拡張装置5のリング方向として定義される。そして、ユーザが実空間において停止して静止した状態または足踏みしている状態において、両手で把持しているリング型拡張装置5のリング方向を変化させることによって、仮想ゲーム空間内における仮想オブジェクトPOが把持しているリングオブジェクトRの方向も変化する。そして、ユーザがリング型拡張装置5を用いて所定の操作(例えば、リング型拡張装置5におけるグリップカバー203および204が互いに近づくように環状部201を定常状態から変形させる操作)を行うことによって、例えば仮想オブジェクトPOが把持しているリングオブジェクトRのリング方向(リングオブジェクトRの円輪軸に沿った仮想オブジェクトPOから離れる方向)に配置されているオブジェクトT(図13参照)を攻撃する(例えば、破壊する)ことができる。
図16に示すように、リング型拡張装置5の姿勢(向き)による操作としては、グリップカバー203および204を両手で把持するリング型拡張装置5の環状部201を当該環状部201の円環軸を中心に回転させる操作(図示M3方向に回転させるロール操作)、リング型拡張装置5のリング方向を仰角(上方向)または俯角(下方向)に変化させる操作(図示M4方向のピッチ操作)、リング型拡張装置5のリング方向を左右に変化させる操作(図示M5方向のヨー操作)が考えられる。ここで、ロール操作およびピッチ操作においては、リング型拡張装置5に作用する重力加速度の方向が変化するため、リング型拡張装置5に装着された右コントローラ4に作用する加速度および/または角速度を用いて、右コントローラ4に作用する重力加速度の方向を算出することによって検出することができる。また、ヨー操作においては、リング型拡張装置5に作用する重力加速度の方向が変化しないため、リング型拡張装置5に装着された右コントローラ4に作用する角速度を用いて、初期状態からの右コントローラ4の姿勢変化を算出することによって検出することができる。なお、現実には、ロール操作、ピッチ操作、およびヨー操作が混ざった操作が行われることが一般的であるため、ロール操作、ピッチ操作、およびヨー操作によってそれぞれ変化するリング方向を合成することによって、最終的なリング方向がユーザ操作として算出される。
例えば、図16に示すように、リング型拡張装置5に装着された右コントローラ4のy軸方向が実空間における水平方向(図示X軸方向)となり、x軸正方向が実空間における直上方向(図示Y軸正方向)となるようにユーザがリング型拡張装置5を把持している初期状態から、リング型拡張装置5のリング方向を変化させる操作を行う場合を考える。上記初期状態においては、リング型拡張装置5に装着された右コントローラ4の鉛直方向に重力加速度が作用するため、右コントローラ4のx軸負方向の加速度1Gとなり、y軸(左右方向)およびz軸方向(前後方向)の加速度が0となる。この初期状態から、リング型拡張装置5がピッチ操作された場合、当該ピッチ操作された角度は、z軸方向に作用する加速度によって算出することができる。また、この初期状態から、リング型拡張装置5がロール操作された場合、当該ロール操作された角度は、y軸方向に作用する加速度によって算出することができる。したがって、z軸方向(前後方向)およびy軸方向(左右方向)に作用する加速度を検出することによって、リング型拡張装置5がピッチ操作された角度およびロール操作された角度をそれぞれ算出することができる。
ここで、リング型拡張装置5が素早く動かされる操作が行われたり、リング型拡張装置5を把持しながら足踏みする操作が行われたりする場合、当該操作による加速度が加わったり、誤差が累積することが考えられる。このような場合、加速度から算出される角度と角速度から算出される角度とを用いて、リング型拡張装置5(右コントローラ4)の姿勢を算出してもよい。一例として、第1取得時間(例えば、30フレーム)において得られた加速度の平均値に基づいて算出される角度に第2取得期間(<第1取得期間;例えば、15フレーム)において得られた角速度に基づいて算出された角度変位量を加算することによって、リング型拡張装置5(右コントローラ4)の姿勢を算出してもよい。このように、異なるパラメータを用いてリング型拡張装置5(右コントローラ4)の姿勢を算出することによって、瞬時のプレや誤差などを相殺することができるとともに、相対的に短時間の取得期間で算出される角速度を用いることによって、検出における応答性を向上させることができる。
また、上記初期状態から、リング型拡張装置5がヨー操作された場合、リング型拡張装置5に作用する重力加速度の方向が変化しないため、当該ヨー操作された角度は、鉛直方向周りに作用する角速度、すなわち右コントローラ4のx軸方向(上下方向)周りに作用する角速度を用いて算出することができる。
ユーザがリング型拡張装置5のリング方向を所望の方向に向けた後、リング型拡張装置5を用いた所定の操作を行うことによって、当該リング方向に対応する仮想ゲーム空間内に所定の変化を与えることができる。例えば、上記所定の操作は、リング型拡張装置5におけるグリップカバー203および204が互いに近づくように環状部201を定常状態から所定の状態以上まで変形させる操作であり、リング型拡張装置5に設けられた歪みゲージが検出する歪みに基づいて当該操作が検出される。一例として、リング型拡張装置5の環状部201が定常状態から変形した場合、上記歪みゲージによって台座部の歪みが検出され、検出された歪みに基づいて、環状部201が変形する向き(すなわち、2つのグリップ203および204が近づく向き、または、離れる向き)と変形量とを算出することができる。そして、環状部201が変形する向きが2つのグリップ203および204が近づく向きであり、予め設定された閾値以上の変形量である場合、上記所定の操作が行われたと判定される。
このように、本実施例においては、足踏みする操作が行われながら把持しているリング型拡張装置5の向きを変える異なる操作が可能となる。具体的には、上述したようにユーザが足踏み動作を「停止」したと判定されることなく「歩き」、「ジョギング」、または「走り」による足踏み動作が行われていると判定される状態を継続するために、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方が継続して動いていると判定される条件が満たされつつ、当該判定とは別に右コントローラ4(リング型拡張装置5)における動きセンサ(例えば、加速度センサまたは角速度センサ)の出力を用いてリング型拡張装置5の向きを変える操作が判定されることによって、上記2つの操作を両立している。また、左コントローラ3および右コントローラ4の両方が継続して動いていると判定される条件が必要となる足踏み操作に対して、リング型拡張装置5の向きを変える操作は、右コントローラ4(リング型拡張装置5)における動きセンサのみの出力に基づいて判定されるため、足踏み操作と比較して単純な制御で実現可能となる。また、ユーザが操作するリング型拡張装置5のリング方向を検出して、当該リング方向に基づいてリングオブジェクトRの方向(すなわち、仮想オブジェクトPOの向き)を変化させる処理は、リング型拡張装置5に装着された右コントローラ4によって検出された角速度だけでなく加速度も用いられるため、ユーザの操作状態に応じた適切なパラメータを用いることができる。なお、リング型拡張装置5の向きを変える操作は、右コントローラ4(リング型拡張装置5)における動きセンサの出力に加えて、左コントローラ3の動きセンサとは別のセンサや入力装置からの出力を用いて判定されてもかまわない。
また、上述したように、表示画面(例えば、据置型モニタ9)には、ユーザ操作に応じて仮想ゲーム空間内において動作する仮想オブジェクトPOが表示される。ここで、仮想オブジェクトPOは、リングオブジェクトRを把持しており、ユーザのベルト型拡張装置6を用いた股上げ/股下げ操作に応じた動作および速度で仮想ゲーム空間内を移動するとともに、リング型拡張装置5を用いたユーザ操作に応じて仮想ゲーム空間内におけるリングオブジェクトRのリング方向を変化させる。つまり、ユーザの下半身に締着されたベルト型拡張装置6に装着された左コントローラ3の操作データに基づいて仮想オブジェクトPOの足の動作制御が行われ、ユーザの上半身の腕で把持されたリング型拡張装置5に装着された右コントローラ4の操作データに基づいて仮想オブジェクトPOの腕の動作制御が行われることになる。
なお、上述した説明では、説明を具体的にするために、左コントローラ3および右コントローラ4にそれぞれ定義されているxyz軸を用いて処理をする例を用いているが、実際には、上記状態とは異なる実空間における方向にxyz軸が配置されることもあり得るし、ベルト型拡張装置6やリング型拡張装置5の姿勢が変化することに応じて、異なる方向を基準とした姿勢検出が必要となる。例えば、実際のベルト型拡張装置6やリング型拡張装置5の姿勢検出においては、実空間において互いに直交する3軸を基準として算出してもよく、実空間における左右方向(図示X軸方向)、上下方向(図示Y軸方向)、および前後方向(図示Z軸方向)を基準として算出してもよい。この場合、上述した説明のおける左コントローラ3のx軸(左右方向)を実空間における左右方向(図示X軸方向)とし、左コントローラ3のy軸(上下方向)を実空間における上下方向(図示Y軸方向)とし、左コントローラ3のz軸(前後方向)を実空間における前後方向(図示Z軸方向)としてそれぞれ置き換えることによって、同様にベルト型拡張装置6の姿勢の検出が可能となる。また、上述した説明のおける右コントローラ4のy軸(左右方向)を実空間における左右方向(図示X軸方向)とし、右コントローラ4のx軸(上下方向)を実空間における上下方向(図示Y軸方向)とし、右コントローラ4のz軸(前後方向)を実空間における前後方向(図示Z軸方向)としてそれぞれ置き換えることによって、同様にリング型拡張装置5の姿勢の検出が可能となる。
また、上述した説明において処理に用いているパラメータ(加速度、角速度、角度、周期、変化量、合算値、平均値、期間、閾値等)やそれらの数値は、一例に過ぎず、他のパラメータや数値であってもよい。また、ゲームを行う際に重視されるパラメータが異なるプレイモードを設定し、当該プレイモードの選択がユーザ操作に応じてゲーム開始前に行われてもよい。例えば、加速度の大きさや変化が重視されるプレイモードと、角速度の大きさや変化が重視されるプレイモードが設定されてもよい。一例として、上述した実施例における処理例が加速度の大きさや変化が重視されるプレイモードとして用いられ、当該加速度の大きさや変化が重視されるプレイモードにおいて加速度が用いられている処理の少なくとも1つを角速度または角度を用いた処理に変更する、または加速度が用いられている処理の全てを角速度または角度を用いた処理に変更することによって、角速度の大きさや変化が重視されるプレイモードが設定されてもよい。具体的には、「ジョギング」によるユーザの足踏み動作と「走り」によるユーザの足踏み動作とを判別する処理が、加速度に代えて角速度(例えば角速度の合算値における所定処理回数分の平均値)を用いて行われてもよい。この場合、上記足踏み動作の判別を行うためのユーザ閾値においても、角速度に基づいて予め設定される。したがって、加速度の大きさや変化が重視されるプレイモードは、ベルト型拡張装置6に装着された左コントローラ3に含まれている加速度センサの出力が大きい場合に小さい場合よりも仮想オブジェクトPOの移動速度が速くなるモードとして機能する。これに対して、角速度の大きさや変化が重視されるプレイモードは、ベルト型拡張装置6に装着された左コントローラ3に含まれている角速度センサの出力が大きい場合に小さい場合よりも仮想オブジェクトPOの移動速度が速くなるモードとして機能する。また、「ジョギング」によるユーザの足踏み動作と「走り」によるユーザの足踏み動作とを加速度を用いて判別するプレイモードと角速度を用いて判別するプレイモードとの切り替えが可能である場合、後者のプレイモードでは相対的に床面への衝撃が小さいユーザ動作で操作(例えば、足踏みに代えて足を屈伸する操作)することが可能となる。したがって、前者のプレイモードを通常プレイモードとして、後者のプレイモードをサイレントモードとして機能させることができる。
次に、図17〜図24を参照して、本実施形態においてゲームシステム1で実行される具体的な処理の一例について説明する。図17は、本実施形態において本体装置2のDRAM85に設定されるデータ領域の一例を示す図である。なお、DRAM85には、図17に示すデータの他、他の処理で用いられるデータも記憶されるが、詳細な説明を省略する。
DRAM85のプログラム記憶領域には、ゲームシステム1で実行される各種プログラムPaが記憶される。本実施形態においては、各種プログラムPaは、上述した左コントローラ3および右コントローラ4それぞれとの間で無線通信するための通信プログラムや、左コントローラ3および右コントローラ4それぞれから取得したデータや本体装置2の姿勢に基づいた情報処理を行うためのアプリケーションプログラム(例えば、ゲームプログラム)等が記憶される。なお、各種プログラムPaは、フラッシュメモリ84に予め記憶されていてもよいし、ゲームシステム1に着脱可能な記憶媒体(例えば、スロット23に装着された所定の種類の記憶媒体)から取得されてDRAM85に記憶されてもよいし、インターネット等のネットワークを介して他の装置から取得されてDRAM85に記憶されてもよい。プロセッサ81は、DRAM85に記憶された各種プログラムPaを実行する。
また、DRAM85のデータ記憶領域には、ゲームシステム1において実行される通信処理や情報処理等の処理において用いられる各種のデータが記憶される。本実施形態においては、DRAM85には、操作データDa、角速度データDb、加速度データDc、姿勢データDd、重力方向データDe、股上げ時点データDf、股下げ時点データDg、足踏み周期データDh、加速度変化累積値データDi、リング方向データDj、状態データDk、仮想オブジェクトデータDm、ユーザ閾値データDn、および画像データDo等が記憶される。
操作データDaは、左コントローラ3および右コントローラ4からそれぞれ適宜取得した操作データである。上述したように、左コントローラ3および右コントローラ4からそれぞれ送信される操作データには、各入力部(具体的には、各ボタン、アナログスティック、各センサ)からの入力に関する情報(具体的には、操作に関する情報や各センサによる検出結果)やリング型拡張装置5における環状部201の変形状態を示す歪み値が含まれている。本実施形態では、無線通信によって左コントローラ3および右コントローラ4からそれぞれ所定周期で操作データが送信されており、当該受信した操作データを用いて操作データDaが適宜更新される。なお、操作データDaの更新周期は、ゲームシステム1で実行される処理の周期である1フレーム毎に更新されてもよいし、上記無線通信によって操作データが送信される周期毎に更新されてもよい。
角速度データDbは、左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、現時点から所定時間前までに取得された左コントローラ3および右コントローラ4それぞれに生じている角速度の履歴を示すデータである。例えば、角速度データDbは、左コントローラ3および右コントローラ4それぞれに生じているxyz軸周りの角速度を示すデータの履歴等を含んでいる。
加速度データDcは、左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、現時点から所定時間前までに取得された左コントローラ3および右コントローラ4それぞれに生じている加速度の履歴を示すデータである。例えば、角速度データDcは、左コントローラ3および右コントローラ4それぞれに生じているxyz軸方向の加速度を示すデータの履歴等を含んでいる。
姿勢データDdは、実空間における左コントローラ3および右コントローラ4の姿勢とを示すデータである。一例として、姿勢データDdは、実空間における左コントローラ3および右コントローラ4のxyz軸方向(例えば、実空間におけるXYZ軸に対する角度)をそれぞれ示すデータである。
重力方向データDeは、左コントローラ3および右コントローラ4にそれぞれ作用している重力加速度の方向を示すデータである。
股上げ時点データDfは、ユーザが足踏み操作において足(股)を上げたタイミングを示すデータである。股下げ時点データDgは、ユーザが足踏み操作において足(股)を下げたタイミングを示すデータである。足踏み周期データDhは、ユーザが行っている足踏み操作の周期および股上げ時点から股下げ時点までの時間を示すデータである。
加速度変化累積値データDiは、左コントローラ3に生じている加速度の変化量をそれぞれ所定期間分累積した値を示すデータである。
リング方向データDjは、実空間におけるリング型拡張装置5のリング方向を示すデータである。
状態データDkは、ユーザの足踏み操作の状態を示すデータであり、例えば、「停止状態」、「歩き状態」、「ジョギング状態」、および「走り状態」の何れかを示すデータである。
仮想オブジェクトデータDmは、仮想ゲーム空間に配置されている仮想オブジェクトPOの位置、状態、姿勢、動作等を示すデータや、他の仮想オブジェクトの位置、状態、姿勢、動作等を示すデータである。
ユーザ閾値データDnは、ユーザ毎の「ジョギング状態」と「走り状態」とをユーザ毎に判定するために、予め設定されたユーザ毎の閾値を示すデータである。
画像データDoは、表示画面に画像(例えば、仮想オブジェクトPOの画像、他の仮想オブジェクトの画像、フィールド画像、背景画像等)を表示するためのデータである。
次に、図18〜図24を参照して、本実施形態における情報処理の詳細な一例を説明する。図18は、ゲームシステム1で実行される情報処理の一例を示すフローチャートである。図19は、図18におけるステップS105において行われる動き出し時処理の詳細な一例を示すサブルーチンである。図20は、図18におけるステップS107において行われるユーザ動作判定処理の詳細な一例を示すサブルーチンである。図21は、図18におけるステップS108において行われる移動時判定処理の詳細な一例を示すサブルーチンである。図22は、図18におけるステップS110において行われる走り移動判定処理の詳細な一例を示すサブルーチンである。図23は、図18におけるステップS111において行われる停止判定処理の詳細な一例を示すサブルーチンである。図24は、図18におけるステップS112において行われるリング方向判定処理の詳細な一例を示すサブルーチンである。本実施形態においては、図18〜図24に示す一連の処理は、プロセッサ81が各種プログラムPaに含まれる通信プログラムや所定のアプリケーションプログラム(ゲームプログラム)を実行することによって行われる。また、図18〜図24に示す情報処理が開始されるタイミングは任意である。
なお、図18〜図24に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよいし、各ステップの処理に加えて(または代えて)別の処理が実行されてもよい。また、本実施形態では、上記フローチャートの各ステップの処理をプロセッサ81が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、プロセッサ81以外のプロセッサや専用回路が実行するようにしてもよい。また、本体装置2において実行される処理の一部は、本体装置2と通信可能な他の情報処理装置(例えば、本体装置2とネットワークを介して通信可能なサーバ)によって実行されてもよい。すなわち図18〜図24に示す各処理は、本体装置2を含む複数の情報処理装置が協働することによって実行されてもよい。
図18において、プロセッサ81は、情報処理における初期設定を行い(ステップS101)、次のステップに処理を進める。例えば、上記初期設定では、プロセッサ81は、以下に説明する処理を行うためのパラメータを初期化する。例えば、プロセッサ81は、情報処理(ゲーム処理)を行うユーザを設定するとともに、「ジョギング」による足踏み動作と「走り」による足踏み動作とを判別するために、当該ユーザがゲーム開始前に予め操作(足踏み動作)を行って設定されているユーザ閾値を用いて、ユーザ閾値データDnを初期設定する。また、プロセッサ81は、仮想ゲーム空間においてワールド座標軸を定義するとともに、仮想ゲーム空間において各オブジェクト(仮想オブジェクトPOを含む)を配置して仮想ゲーム空間の初期状態を生成して、オブジェクトそれぞれの位置、方向、および姿勢等を用いて仮想オブジェクトデータDmを更新する。また、プロセッサ81は、仮想オブジェクトPOを停止状態に初期設定し、状態データDkを更新する。なお、閾値設定部は、低速移動動作をさせるための操作と高速移動動作をさせるための操作とを区別するための閾値を設定する処理を行うものであり、一例としてユーザ閾値データDnを初期設定する処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、左コントローラ3および右コントローラ4から操作データを取得して操作データDaを更新し(ステップS102)、次のステップに処理を進める。なお、プロセッサ81は、上記ステップS102において左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、左コントローラ3および右コントローラ4それぞれに生じている角速度を示すデータを、角速度データDbに格納する。また、プロセッサ81は、上記ステップS102において左コントローラ3および右コントローラ4からそれぞれ取得した操作データのうち、左コントローラ3および右コントローラ4それぞれに生じている加速度を示すデータを、加速度データDcに格納する。
次に、プロセッサ81は、左コントローラ3および右コントローラ4の姿勢を算出し(ステップS103)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbに格納されている角速度データを用いて、左コントローラ3および右コントローラ4それぞれのxyz軸周りの角速度を取得する。そして、プロセッサ81は、姿勢データDdが示す左コントローラ3および右コントローラ4の姿勢における重力加速度方向を基準としたxyz軸を、取得された角速度に応じてそれぞれ回転させて、当該回転後の重力加速度方向を基準としたxyz軸の方向を用いて姿勢データDdにおける左コントローラ3および右コントローラ4の姿勢を示すデータを更新する。また、プロセッサ81は、加速度データDcに格納されている角速度データを用いて、左コントローラ3および右コントローラ4にそれぞれ作用している重力加速度の方向を算出して、重力方向データDeを更新する。なお、重力加速度を抽出する方法については任意の方法を用いればよく、例えば左コントローラ3および右コントローラ4にそれぞれ平均的に生じている加速度成分を算出して当該加速度成分を重力加速度として抽出してもよい。また、プロセッサ81は、重力方向データDeが示す左コントローラ3および右コントローラ4それぞれに生じている重力加速度の方向を用いて、姿勢データDdが示す左コントローラ3および右コントローラ4の姿勢を適時補正してもかまわない。
次に、プロセッサ81は、ユーザの足踏み動作が停止状態であるか否かを判定する(ステップS104)。例えば、プロセッサ81は、状態データDkが停止状態を示す場合、上記ステップS104において肯定判定する。そして、プロセッサ81は、ユーザの足踏み動作が停止状態である場合、ステップS105に処理を進める。一方、プロセッサ81は、ユーザの足踏み動作が停止状態でない場合、ステップS107に処理を進める。
ステップS105において、プロセッサ81は、動き出し時処理を行い(ステップS105)、ステップS106に処理を進める。以下、図19を参照して、上記ステップS105において行われる動き出し時処理について説明する。
図19において、プロセッサ81は、所定期間分の右コントローラ4において生じる加速度の変化量合算値を算出し(ステップS121)、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcを用いて、直前の所定期間(例えば、5フレーム)において、各フレーム間それぞれにおける右コントローラ4の加速度の変化量を算出し、当該変化量を全て合算することによって上記変化量合算値を算出する。
次に、プロセッサ81は、上記ステップS121において算出された変化量合算値が第1閾値(例えば、1.5G)以上であるかを判定する(ステップS122;第1動き出し条件)。そして、プロセッサ81は、上記変化量合算値が第1閾値以上である場合、ステップS123に処理を進める。一方、プロセッサ81は、上記変化量合算値が第1閾値未満である場合、ステップS133に処理を進める。
ステップS123において、プロセッサ81は、左コントローラ3および右コントローラ4においてそれぞれ生じている重力加速度を省いた実空間の直上方向の加速度を算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcおよび重力方向データDeを用いて、左コントローラ3および右コントローラ4においてそれぞれ生じている実空間の直上方向の加速度(重力加速度とは反対方向の加速度)を取得し、当該直上方向の加速度からそれぞれ重力加速度を減算する。
次に、プロセッサ81は、上記ステップS123において算出された左コントローラ3および右コントローラ4それぞれの直上方向の加速度が第2閾値(例えば、0.2G)以上であるかを判定する(ステップS124;第2動き出し条件)。そして、プロセッサ81は、上記直上方向の加速度が第2閾値未満である場合、ステップS125に処理を進める。一方、プロセッサ81は、上記直上方向の加速度が第2閾値以上である場合、ステップS129に処理を進める。
ステップS125において、プロセッサ81は、左コントローラ3において生じる重力加速度を省いた実空間の直上方向の加速度の値を算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcおよび重力方向データDeを用いて、左コントローラ3において生じている実空間の直上方向の加速度(重力加速度とは反対方向の加速度)を取得し、当該直上方向の加速度から重力加速度を減算する。
次に、プロセッサ81は、上記ステップS125において算出された左コントローラ3の直上方向の加速度が第3閾値(例えば、0.1G)以上であるかを判定する(ステップS126;第3動き出し条件)。そして、プロセッサ81は、上記直上方向の加速度が第3閾値以上である場合、ステップS127に処理を進める。一方、プロセッサ81は、上記直上方向の加速度が第3閾値未満である場合、ステップS133に処理を進める。
ステップS127において、プロセッサ81は、左コントローラ3が前後揺れする一定期間中の角度変化を算出し、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを用いて、左コントローラ3において直前の一定期間内で生じているユーザの前後方向(例えば、左コントローラ3のx軸周り)の角速度を取得し、当該角速度を用いて、当該前後方向の角度変化を算出する。
次に、プロセッサ81は、上記ステップS127において算出された左コントローラ3の角度変化が第4閾値(例えば、15°)以上であるかを判定する(ステップS128;第3動き出し条件)。そして、プロセッサ81は、上記角度変化が第4閾値以上である場合、ステップS129に処理を進める。一方、プロセッサ81は、上記角度変化が第4閾値未満である場合、ステップS133に処理を進める。
ステップS129において、プロセッサ81は、所定期間分の右コントローラ4において生じる直上方向の加速度の変化量を算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcおよび重力方向データDeを用いて、直前の所定期間(例えば、15フレーム)における右コントローラ4の直上方向の加速度変化量を算出する。
次に、プロセッサ81は、上記ステップS129において算出された右コントローラ4の直上方向の加速度変化量が第5閾値(例えば、1.2G)以下であるかを判定する(ステップS130;動き出し時動作判別条件)。そして、プロセッサ81は、上記直上方向の加速度変化量が第5閾値以下である場合、ステップS131に処理を進める。一方、プロセッサ81は、上記直上方向の加速度変化量が第5閾値より大きい場合、ステップS132に処理を進める。
ステップS131において、プロセッサ81は、ユーザの足踏み動作を歩き状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作を歩き状態に設定して、状態データDkを更新する。
一方、ステップS132において、プロセッサ81は、ユーザの足踏み動作をジョギング状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作をジョギング状態に設定して、状態データDkを更新する。
ステップS133において、プロセッサ81は、ユーザの足踏み動作を停止状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作を停止状態に設定して、状態データDkを更新する。
上記ステップS121〜S128における処理から明らかなように、上記第1動き出し条件および上記第2動き出し条件を何れも満たす場合(上記ステップS122および上記ステップS124が何れも肯定判定)、または上記第1動き出し条件および第3動き出し条件を何れも満たす場合(上記ステップS122、上記ステップS126、および上記ステップS128が何れも肯定判定)、ステップS133の処理が行われずにユーザが停止状態以外の状態に変更される、すなわちユーザが停止状態から動き出したと判定されることになり、ユーザの動き出し判定を行っていることになる。また、上記ステップS129〜S132における処理は、上記ステップS121〜S133における動き出し判定処理においてユーザが停止状態から動き出したと判定された際に、どのような動作で動き出すかを判定する動き出し時動作判別条件を用いた判定を行う処理となる。
図18に戻り、上記ステップS105の動き出し時処理の後、プロセッサ81は、ユーザの足踏み動作が停止状態であるか否かを判定する(ステップS106)。例えば、プロセッサ81は、状態データDkが停止状態を示す場合、上記ステップS106において肯定判定する。そして、プロセッサ81は、ユーザの足踏み動作が停止状態でない場合、ステップS107に処理を進める。一方、プロセッサ81は、ユーザの足踏み動作が停止状態である場合、ステップS112に処理を進める。
ステップS107において、プロセッサ81は、ユーザ動作判定処理を行い(ステップS107)、ステップS108に処理を進める。以下、図20を参照して、上記ステップS107において行われるユーザ動作判定処理について説明する。
図20において、プロセッサ81は、直近の所定期間(例えば、15フレーム)における左コントローラ3の前後方向(例えば、x軸方向周り)の角度の最大値および最小値を取得して(ステップS141)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを用いて、左コントローラ3において直前の所定期間において生じているユーザの前後方向(例えば、左コントローラ3のx軸周り)の角速度を取得し、当該角速度から算出された当該前後方向の角度(膝曲げ角度が大きくなるほど大きくなる角度)の最大値および最小値を取得する。
次に、プロセッサ81は、上記ステップS141において取得された最小値が得られた時点より最大値が得られた時点が直近か否かを判定する(ステップS142;第1股上げ判定条件、第1股下げ判定条件)。そして、プロセッサ81は、最大値が得られた時点が直近である場合、ステップS143に処理を進める。一方、プロセッサ81は、最小値が得られた時点が直近である場合、ステップS146に処理を進める。
ステップS143において、プロセッサ81は、直近の所定期間における左コントローラ3の鉛直方向の加速度を取得し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcを用いて、直近の所定期間(例えば、15フレーム)における左コントローラ3の鉛直方向の加速度を取得する。
次に、プロセッサ81は、上記ステップS143において取得された加速度が第6閾値(例えば、0.8G)以下であるか否かを判定する(ステップS144;第2股上げ判定条件)。そして、プロセッサ81は、上記ステップS143において取得された加速度が第6閾値以下である場合、左コントローラ3が実空間の直上方向に加速していると判定して、ステップS145に処理を進める。一方、プロセッサ81は、上記ステップS143において取得された加速度が第6閾値より大きい場合、左コントローラ3が実空間の直上方向に加速していないと判定して、そのまま当該サブルーチンによる処理を終了する。
ステップS145において、プロセッサ81は、左コントローラ3の前後方向(例えば、x軸方向周り)の角度の最大値が得られた時点を股上げ時点として設定し、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、上記ステップS141において取得された最大値が得られた時点を股上げ時点として、股上げ時点データDfを更新する。
一方、ステップS146において、プロセッサ81は、直近の所定期間における左コントローラ3の鉛直方向の加速度を取得し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcを用いて、直近の所定期間(例えば、15フレーム)における左コントローラ3の鉛直方向の加速度を取得する。
次に、プロセッサ81は、上記ステップS146において取得された加速度が第7閾値(例えば、1.2G)以上であるか否かを判定する(ステップS147;第2股下げ判定条件)。そして、プロセッサ81は、上記ステップS146において取得された加速度が第7閾値以上である場合、左コントローラ3が実空間の鉛直方向に加速していると判定して、ステップS148に処理を進める。一方、プロセッサ81は、上記ステップS146において取得された加速度が第7閾値より小さい場合、左コントローラ3が実空間の鉛直方向に加速していないと判定して、そのまま当該サブルーチンによる処理を終了する。
ステップS148において、プロセッサ81は、左コントローラ3の前後方向(例えば、x軸方向周り)の角度の最小値が得られた時点を股下げ時点として設定し、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS141において取得された最小値が得られた時点を今回の股下げ時点として、当該股下げ時点が新たな時点である場合に当該股下げ時点を示すデータを股下げ時点データDgに追加する。
次に、プロセッサ81は、足踏み周期および股上げ時点から股下げ時点までの時間をそれぞれ算出して(ステップS149)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、股下げ時点データDgが示す前回の股下げ時点から今回の股下げ時点までの時間を足踏み周期として算出する。また、プロセッサ81は、股上げ時点データDfが示す股上げ時点から股下げ時点データDgが示す今回の股下げ時点までの時間を算出する。そして、プロセッサ81は、算出された足踏み周期および股上げ時点から股下げ時点までの時間を用いて、足踏み周期データDhを更新する。
図18に戻り、上記ステップS107のユーザ動作判定処理の後、プロセッサ81は、ユーザの足踏み動作開始後の動作判定(移動時動作判定)を行い(ステップS108)、ステップS109に処理を進める。以下、図21を参照して、上記ステップS108において行われる移動時判定処理について説明する。
図21において、プロセッサ81は、ユーザの足踏み周期を取得し(ステップS151)、次のステップに処理を進める。例えば、プロセッサ81は、足踏み周期データDhを用いて、ユーザの足踏み操作における足踏み周期(具体的には、ベルト型拡張装置6が締着されたユーザの左股を上げ下げする周期)を取得する。
次に、プロセッサ81は、上記ステップS151において取得した足踏み周期が第8閾値(例えば、60フレーム)以上であるか否かを判定する(ステップS152;第1動き出し後動作判別条件)。そして、プロセッサ81は、足踏み周期が第8閾値より短い場合、ステップS158に処理を進める。一方、プロセッサ81は、足踏み周期が第8閾値以上である場合、ステップS153に処理を進める。
ステップS153において、ユーザの股上げ時点から股下げ時点までの時間を取得し、次のステップに処理を進める。例えば、プロセッサ81は、足踏み周期データDhを用いて、ユーザの足踏み操作における股上げ時点から股下げ時点までの時間を取得する。
次に、プロセッサ81は、上記ステップS153において取得した股上げ時点から股下げ時点までの時間が第9閾値(例えば、20フレーム)以上であるか否かを判定する(ステップS154;第2動き出し後動作判別条件)。そして、プロセッサ81は、股上げ時点から股下げ時点までの時間が第9閾値より短い場合、ステップS158に処理を進める。一方、プロセッサ81は、股上げ時点から股下げ時点までの時間が第9閾値以上である場合、ステップS155に処理を進める。
ステップS156において、プロセッサ81は、所定期間分の右コントローラ4において生じる直上方向の加速度の変化量を算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcおよび重力方向データDeを用いて、直前の所定期間(例えば、15フレーム)における右コントローラ4の直上方向の加速度変化量を算出する。
次に、プロセッサ81は、上記ステップS156において算出された右コントローラ4の直上方向の加速度変化量が第5閾値(例えば、1.2G)以下であるかを判定する(ステップS157;第3動き出し後動作判別条件)。そして、プロセッサ81は、上記直上方向の加速度変化量が第5閾値以下である場合、ステップS157に処理を進める。一方、プロセッサ81は、上記直上方向の加速度変化量が第5閾値より大きい場合、ステップS158に処理を進める。
ステップS158において、プロセッサ81は、ユーザの足踏み動作をジョギング状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作をジョギング状態に設定して、状態データDkを更新する。
一方、ステップS157において、プロセッサ81は、ユーザの足踏み動作がジョギング状態であるか否かを判定する。例えば、プロセッサ81は、状態データDkがジョギング状態を示す場合、上記ステップS157において肯定判定する。そして、プロセッサ81は、ユーザの足踏み動作がジョギング状態でない場合、ステップS159に処理を進める。一方、プロセッサ81は、ユーザの足踏み動作がジョギング状態である場合、ステップS160に処理を進める。
ステップS159において、プロセッサ81は、ユーザの足踏み動作を歩き状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作を歩き状態に設定して、状態データDkを更新する。
ステップS160において、プロセッサ81は、ユーザの足踏み動作を停止状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作を停止状態に設定して、状態データDkを更新する。
上述したステップS108における移動時判定処理は、ユーザの足踏み動作が停止状態でない、すなわちユーザの足踏み動作が歩き状態、ジョギング状態、または走り状態において行われる処理である。ここで、上記ステップS151〜S160における処理から明らかなように、上記第1動き出し後動作判別条件、上記第2動き出し後動作判別条件、および上記第3動き出し後動作判別条件の全てを満たす場合(上記ステップS152、ステップS154、ステップS156が何れも肯定判定)、ユーザの足踏み動作が歩き状態である判定される。そして、上記ステップS151〜S156における処理によって、ユーザの足踏み動作がジョギング状態から歩き状態に変更される場合、上記ステップS157において肯定判定されることによって、一旦、停止状態に変更されることになる。なお、ステップS108における移動時判定処理は、ユーザが足踏み動作中に行われるため、上記ステップS105における動き出し時処理における動き出し判定処理と比較して、相対的に長い期間において取得された操作データが用いられるため、より正確にユーザの足踏み動作を判別することが可能となる。
図18に戻り、上記ステップS108の移動時判定処理の後、プロセッサ81は、ユーザの足踏み動作がジョギング状態または走り状態であるか否かを判定する(ステップS109)。例えば、プロセッサ81は、状態データDkがジョギング状態および走り状態の一方を示す場合、上記ステップS109において肯定判定する。そして、プロセッサ81は、ユーザの足踏み動作がジョギング状態または走り状態である場合、ステップS110に処理を進める。一方、プロセッサ81は、ユーザの足踏み動作がジョギング状態または走り状態でない場合、ステップS111に処理を進める。
ステップS110において、プロセッサ81は、ユーザがジョギング状態および走り状態の何れであるのかを判定する走り移動判定処理を行い、ステップS111に処理を進める。以下、図22を参照して、上記ステップS110において行われる走り移動判定処理について説明する。
図22において、プロセッサ81は、左コントローラ3において生じた加速度変化量を直前の所定時間分(例えば、60フレーム分)合算した累積値を算出し(ステップS161)、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDbを用いて、左コントローラ3において生じているフレーム間毎の加速度変化量を所定時間分(例えば、60フレーム分)合算することによって累積値を算出し、算出された累積値を現フレームにおいて算出された累積値として加速度変化累積値データDiに追加する。
次に、プロセッサ81は、過去の処理において算出されている上記累積値の所定期間分(例えば、30フレーム分)の平均値を算出し(ステップS162)、次のステップに処理を進める。例えば、プロセッサ81は、加速度変化累積値データDiに格納されている累積値から現フレームを含めて直前の所定期間分を取得し、当該累積値の平均値を算出する。
次に、プロセッサ81は、ユーザ毎に「ジョギング状態」と「走り状態」とをユーザ毎に判定するために、現ユーザに対して予め設定されたユーザ閾値を取得し(ステップS163)、次のステップに処理を進める。例えば、プロセッサ81は、ユーザ閾値データDnを参照して、現ユーザに対して予め設定されているユーザ閾値を取得する。
次に、プロセッサ81は、上記ステップS162において算出された平均値が上記ユーザ閾値以上であるか否かを判定する(ステップS164)。そして、プロセッサ81は、上記平均値が上記ユーザ閾値以上である場合、ステップS165に処理を進める。一方、プロセッサ81は、上記平均値が上記ユーザ閾値より小さい場合、ステップS166に処理を進める。
ステップS165において、プロセッサ81は、ユーザの足踏み動作を走り状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作を走り状態に設定して、状態データDkを更新する。
一方、ステップS156において、プロセッサ81は、ユーザの足踏み動作をジョギング状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作をジョギング状態に設定して、状態データDkを更新する。
図18に戻り、上記ステップS110の走り移動判定処理の後、または上記ステップS109において否定判定された後、プロセッサ81は、ユーザが足踏み状態から停止状態に変化したかを判定する停止判定処理を行い(ステップS111)、ステップS112に処理を進める。以下、図23を参照して、上記ステップS111において行われる停止判定処理について説明する。
図23において、プロセッサ81は、ユーザの足踏み動作が歩き状態であるか否かを判定する(ステップS171)。例えば、プロセッサ81は、状態データDkが歩き状態を示す場合、上記ステップS171において肯定判定する。そして、プロセッサ81は、ユーザの足踏み動作が歩き状態である場合、ステップS172に処理を進める。一方、プロセッサ81は、ユーザの足踏み動作が歩き状態でない場合、ステップS181に処理を進める。
ステップS172において、プロセッサ81は、右コントローラ4において生じている角速度を取得し、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを用いて、右コントローラ4のおいて生じている角速度を取得する。
次に、プロセッサ81は、上記ステップS172において取得した角速度が0であるか否かを判定する(ステップS173;第1停止動作判定条件)。そして、プロセッサ81は、上記ステップS172において取得した角速度が0でない場合、ステップS174に処理を進める。一方、プロセッサ81は、上記ステップS172において取得した角速度が0である場合、ステップS179に処理を進める。
ステップS174において、プロセッサ81は、直近の所定期間(例えば、90フレーム)における左コントローラ3の角度変化を算出し、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを用いて、左コントローラ3において直前の所定期間内で生じている角速度を取得し、当該角速度を用いて、当該所定期間における左コントローラ3の角度変化を算出する。
次に、プロセッサ81は、上記ステップS174において算出した角度変化が第10閾値(例えば、10°)以下であるか否かを判定する(ステップS175;第2停止動作判定条件)。そして、プロセッサ81は、上記ステップS174において算出した角度変化が第10閾値以下である場合、ステップS176に処理を進める。一方、プロセッサ81は、上記ステップS174において算出した角度変化が第10閾値より大きい場合、ステップS178に処理を進める。
ステップS176において、プロセッサ81は、直近の所定期間(例えば、10フレーム)における左コントローラ3の角速度変位量を算出し、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを用いて、左コントローラ3において直前の所定期間内で生じている角速度を取得し、当該角速度を用いて、当該所定期間における左コントローラ3の角速度変位量を算出する。
次に、プロセッサ81は、上記ステップS176において算出した角速度変位量が第11閾値(例えば、0.01)以下であるか否かを判定する(ステップS177;第2停止動作判定条件)。そして、プロセッサ81は、上記ステップS176において算出した角速度変位量が第11閾値以下である場合、ステップS179に処理を進める。一方、プロセッサ81は、上記ステップS176において算出した角速度変位量が第11閾値より大きい場合、ステップS178に処理を進める。
ステップS178において、プロセッサ81は、ユーザの足踏み動作を歩き状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作を歩き状態に設定して、状態データDkを更新する。
ステップS179において、プロセッサ81は、ユーザの足踏み動作を停止状態に設定して、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、ユーザの足踏み動作を停止状態に設定して、状態データDkを更新する。
上記ステップS171〜S179における処理から明らかなように、ユーザが歩き状態で足踏み動作を行っている状態で(上記ステップS171が肯定判定)、上記第1停止動作判定条件および上記第2停止動作判定条件の少なくとも1つを満たす場合(上記ステップS173が肯定判定、または上記ステップS175および上記ステップS177が何れも肯定判定)、ユーザの足踏み動作が歩き状態から停止状態に変更されることになる。ここで、ユーザが停止状態となることなく歩き状態を継続するためには、上記第1停止動作判定条件および第2停止動作判定条件が何れも成立しないように、上記ステップS173において否定判定されるために右コントローラ4において角速度を継続して生じさせるとともに、上記ステップS175および上記ステップS177の何れにおいて否定判定されるために所定時間において第10閾値より大きい左コントローラ3の角度変化を生じさせるまたは第11閾値以上の左コントローラ3の角速度変化を生じさせることが必要となる。したがって、ユーザが停止状態となることなく歩き状態を継続するためには、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方を継続して動かすことが必要となり、ユーザの全身を使った操作を促進することができる。また、上記第1停止動作判定条件および上記第2停止動作判定条件は、ユーザの動作継続判定条件としても機能していることになる。
一方、ステップS181において、プロセッサ81は、右コントローラ4において生じている角速度を取得し、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを用いて、右コントローラ4のおいて生じている角速度を取得する。
次に、プロセッサ81は、上記ステップS181において取得した角速度が0であるか否かを判定する(ステップS182;第3停止動作判定条件)。そして、プロセッサ81は、上記ステップS181において取得した角速度が0でない場合、ステップS183に処理を進める。一方、プロセッサ81は、上記ステップS181において取得した角速度が0である場合、ステップS179に処理を進める。
ステップS183において、プロセッサ81は、直近の所定期間(例えば、10フレーム)における左コントローラ3および右コントローラ4の加速度変化をそれぞれ算出し、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcを用いて、左コントローラ3および右コントローラ4において直前の所定期間内でそれぞれ生じている加速度を取得し、当該加速度を用いて、当該所定期間における左コントローラ3および右コントローラ4の加速度変化をそれぞれ算出する。
次に、プロセッサ81は、上記ステップS183において算出した左コントローラ3および右コントローラ4それぞれの加速度変化における少なくとも一方が第12閾値以下であるか否かを判定する(ステップS184;第4停止動作判定条件)。そして、プロセッサ81は、上記ステップS183において算出した加速度変化の少なくとも一方が第12閾値以下である場合、ステップS179に処理を進める。一方、プロセッサ81は、上記ステップS183において算出した加速度変化の両方が何れも第12閾値より大きい場合、ステップS185に処理を進める。
ステップS185において、プロセッサ81は、直近の所定期間(例えば、10フレーム)における左コントローラ3の角速度平均値を算出し、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを用いて、左コントローラ3において直前の所定期間内で生じている角速度を取得し、当該角速度を用いて、当該所定期間における左コントローラ3の角速度平均値を算出する。
次に、プロセッサ81は、上記ステップS185において算出した角速度平均値が第13閾値以下であるか否かを判定する(ステップS186;第5停止動作判定条件)。そして、プロセッサ81は、上記ステップS185において算出した角速度平均値が第13閾値以下である場合、ステップS179に処理を進める。一方、プロセッサ81は、上記ステップS185において算出した角速度平均値が第13閾値より大きい場合、ステップS187に処理を進める。
ステップS187において、プロセッサ81は、ユーザの足踏み動作をそのままの状態に維持して、当該サブルーチンによる処理を終了する。
上記ステップS171、ステップS179、およびステップS181〜S187における処理から明らかなように、ユーザがジョギング状態または走り状態で足踏み動作を行っている状態で(上記ステップS171が否定判定)、上記第3停止動作判定条件〜上記第5停止動作判定条件の少なくとも1つを満たす場合(上記ステップS182が肯定判定、上記ステップS184が肯定判定、または上記ステップS186が肯定判定)、ユーザの足踏み動作がジョギング状態または走り状態から停止状態に変更されることになる。ここで、ユーザが停止状態となることなくジョギング状態または走り状態を継続するためには、上記第3停止動作判定条件〜上記第5停止動作判定条件が何れも成立しないように、上記ステップS182において否定判定されるために右コントローラ4において角速度を継続して生じさせ、上記ステップS184において否定判定されるために所定時間において第12閾値より大きい加速度を左コントローラ3および右コントローラ4の両方に生じさせ、上記ステップS186において否定判定されるために所定時間において第13閾値より大きい角速度平均値となるように左コントローラ3を動かすことが必要となる。したがって、ユーザが停止状態となることなくジョギング状態または走り状態を継続するためには、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方を継続して動かすことが必要となり、ユーザの全身を使った操作を促進することができる。また、上記第3停止動作判定条件〜上記第5停止動作判定条件は、ユーザの動作継続判定条件としても機能していることになる。
図18に戻り、上記ステップS111の停止判定処理の後、または上記ステップS106において肯定判定された後、プロセッサ81は、リング方向算出処理を行い(ステップS112)、ステップS113に処理を進める。以下、図24を参照して、上記ステップS112において行われるリング方向算出処理について説明する。
図24において、プロセッサ81は、右コントローラ4に作用している重力加速度の方向を取得し(ステップS191)、次のステップに処理を進める。例えば、プロセッサ81は、重力方向データDeを参照して、現時点において右コントローラ4に作用している重力加速度の方向を取得する。
次に、プロセッサ81は、上記ステップS191において取得した重力加速度の方向を用いて、リング型拡張装置5におけるロール方向に対する姿勢を算出し(ステップS192)、次のステップに処理を進める。例えば、プロセッサ81は、リング型拡張装置5に作用している重力加速度の方向に基づいて、右コントローラ4がz軸を基準として回転している姿勢、すなわちリング型拡張装置5を環状部201の円環軸を中心に回転させるロール方向の姿勢(図16に示すM3方向に回転することによって変化する姿勢)を算出し、当該算出結果を用いて、必要に応じて右コントローラ4における姿勢データDdを更新する。
次に、プロセッサ81は、右コントローラ4(リング型拡張装置5)におけるヨー方向に対する姿勢を取得し(ステップS193)、次のステップに処理を進める。例えば、プロセッサ81は、姿勢データDdを参照して、右コントローラ4(リング型拡張装置5)におけるヨー方向に対する姿勢、すなわちx軸方向周りに生じている角速度(鉛直方向周りに作用する角速度)に基づいて算出されているx軸方向周りの姿勢を取得する。
次に、プロセッサ81は、上記ステップS193において取得されたヨー方向の姿勢に基づいて、当該ヨー方向のリング方向の角度を算出し(ステップS194)、次のステップに処理を進める。例えば、プロセッサ81は、上記ステップS193において取得されたヨー方向の姿勢に基づいて、リング方向データDjが示すリング方向の当該ヨー方向に対する角度を算出し、当該算出されたヨー方向に対する角度に応じてリング方向データDjを更新する。
次に、プロセッサ81は、直前の第1取得時間(例えば、30フレーム)において得られた右コントローラ4の平均加速度を算出し(ステップS195)、次のステップに処理を進める。例えば、プロセッサ81は、加速度データDcを参照して、右コントローラ4において直前の第1取得時間内に生じている加速度の平均値を算出する。
次に、プロセッサ81は、上記ステップS195において算出された平均加速度に基づいて、ピッチ方向のリング方向の角度を算出し(ステップS196)、次のステップに処理を進める。例えば、プロセッサ81は、上記平均加速度を重力加速度であると仮定して、当該仮定された重力加速度を基準とした、ピッチ方向のリング方向の角度を算出する。
次に、プロセッサ81は、直前の第2取得期間(<第1取得期間;例えば、15フレーム)において得られた右コントローラ4のy軸周りの角速度(水平方向周りの角速度)に基づいて、ピッチ方向の角度変位量を算出し(ステップS197)、次のステップに処理を進める。例えば、プロセッサ81は、角速度データDbを参照して、右コントローラ4において直前の第2取得期間内に生じているy軸周りの角速度(水平方向周りの角速度)を用いて、ピッチ方向の角度変位量を算出する。
次に、プロセッサ81は、上記ステップS196において算出されたピッチ方向のリング方向の角度に、上記ステップS197において算出されたピッチ方向の角度変位量を加算することによって、ピッチ方向のリング方向の角度を新たに算出し(ステップS198)、当該サブルーチンによる処理を終了する。例えば、プロセッサ81は、上記角度変位量が加算されたピッチ方向のリング方向の角度に応じて、リング方向データDjを更新する。
図18に戻り、上記ステップS112のリング方向算出処理の後、プロセッサ81は、オブジェクト動作制御処理を行い(ステップS113)、次のステップに処理を進める。例えば、プロセッサ81は、状態データDkが示す状態に応じた動作で仮想オブジェクトPOを仮想ゲーム空間内で動作および/または移動させる。また、プロセッサ81は、股上げ時点データDfが股上げ時点、股下げ時点データDgが示す股下げ時点、および状態データDkが示す状態に応じて、仮想オブジェクトPOの移動速度を設定しながら仮想オブジェクトPOの足が上下するように動作させる。また、プロセッサ81は、リング方向データDjが示すリング方向に応じて、仮想ゲーム空間において仮想オブジェクトPOが両手で把持しているリングオブジェクトRの方向を設定し、当該設定された方向にリングオブジェクトRの円輪軸が向くように仮想オブジェクトPOおよびリングオブジェクトRの姿勢を変化させる。そして、プロセッサ81は、リング型拡張装置5における環状部201の変形状態を示す歪み値に基づいて、ユーザがリング型拡張装置5を用いて所定の攻撃操作(例えば、リング型拡張装置5におけるグリップカバー203および204が互いに近づくように環状部201を定常状態から閾値以上の変形を行う操作)を行っていることが検出された場合、当該攻撃操作に応じてリングオブジェクトRからリング方向を攻撃する演出を行う。また、プロセッサ81は、上記リングオブジェクトRからの攻撃によって、他のオブジェクト(例えば、オブジェクトT(図13参照))に影響を与える場合、当該影響に応じて当該他のオブジェクトの状態を変化(例えば、消滅)させる。そして、プロセッサ81は、上述したオブジェクトの動作、位置、姿勢、状態等に応じて、各オブジェクトに対応する仮想オブジェクトデータDmを更新する。なお、タイミング決定手段は、仮想オブジェクトの足または手の動作タイミングを決定する処理を行うものであり、一例としてステップS107およびS113の処理を行うプロセッサ81に相当する。
次に、プロセッサ81は、画像生成表示制御処理を行い(ステップS114)、次のステップに処理を進める。例えば、プロセッサ81は、仮想オブジェクトデータDmに基づいた動作、位置、姿勢、状態等に基づいて、仮想ゲーム空間に複数のオブジェクトを配置して、仮想ゲーム空間を生成する。そして、プロセッサ81は、仮想空間に仮想カメラを配置(例えば、仮想オブジェクトPOが視界に含まれるように、仮想オブジェクトPOの背後の位置に配置)し、当該仮想カメラから見た仮想ゲーム空間画像を生成して、当該仮想ゲーム空間画像を据置型モニタ9に出力する。
次に、プロセッサ81は、処理を終了するか否かを判定する(ステップS115)。上記ステップS115において処理を終了する条件としては、例えば、処理が終了される条件が満たされたことや、ユーザが処理を終了する操作を行ったこと等がある。プロセッサ81は、処理を終了しない場合に上記ステップS102に戻って処理を繰り返し、処理を終了する場合に当該フローチャートによる処理を終了する。以降、ステップS102〜ステップS115の一連の処理は、ステップS115で処理を終了すると判定されるまで繰り返し実行される。
このように、本実施例においては、ユーザの足踏み操作が停止状態となることなく、歩き状態、ジョギング状態、または走り状態を継続するためには、左コントローラ3(ベルト型拡張装置6)および右コントローラ4(リング型拡張装置5)の両方を継続して動かすことが必要となり、左コントローラ3によって動きが検出される上半身側と右コントローラ4によって動きが検出される下半身側との両方が継続条件を満たすことによって仮想オブジェクトPOの所定動作が継続されるため、ユーザの全身を使った操作を促進することができる。また、左コントローラ3および右コントローラ4から出力される操作データの両方の組み合わせを用いて、仮想オブジェクトPOの動作制御ができるため、仮想オブジェクトPOが実現可能な動作の種類を増加させることができる。
なお、上述した実施例では、左コントローラ3を装着したベルト型拡張装置6をユーザの足に締着することによって使用する態様を用いたが、他の態様によって左コントローラ3をユーザに取り付けてもかまわない。第1の例として、左コントローラ3を装着したベルト型拡張装置6をユーザの他の脚部(例えば、右股、左足首、右足首等)や腰部等の他の下半身部位に締着して使用する態様でもかまわない。上記第1の例であっても、左コントローラ3の動きを検知するセンサからの出力によって、ユーザの下半身の動きを算出することが可能となるため、上述した実施例と同様の処理が可能となる。第2の例として、ベルト型拡張装置6に装着することなく左コントローラ3をユーザの衣服内(例えば、ポケット内部、靴下内部、ベルトや腰ゴムに挟む等)に収容または固定して使用する態様でもかまわない。上記第2の例であっても、左コントローラ3の動きを検知するセンサからの出力によって、ユーザの下半身の動きを算出することが可能となるため、上述した実施例と同様の処理が可能となる。
また、上述した実施例では、本体装置2と左コントローラ3および右コントローラ4とがそれぞれ無線通信を行うことによって、左コントローラ3および右コントローラ4の操作データがそれぞれ本体装置2へ送信される例を用いたが、他の態様によって上記操作データが本体装置2へ送信されてもよい。例えば、左コントローラ3および右コントローラ4のうち、一方のコントローラの操作データが他方のコントローラへ送信された後、当該他方のコントローラから両方の操作データ(または加工された操作データ)が本体装置2へ合わせて送信されてもかまわない。
また、上述した実施例において、左コントローラ3および右コントローラ4の姿勢や動き(ベルト型拡張装置6およびリング型拡張装置5の姿勢や動き)を検出する方法については、単なる一例であって、他の方法や他のデータを用いて当該姿勢や当該動きを検出してもよい。上述した加速度センサおよび/または角速度センサは、左コントローラ3および/または右コントローラ4の姿勢や動きを算出するためのデータを出力するセンサの一例である。例えば他の実施例においては、左コントローラ3および/または右コントローラ4は、加速度センサおよび/または角速度センサに代えてまたは加えて磁気センサを備えていてもよく、当該磁気センサによって検出された磁気を用いて左コントローラ3および/または右コントローラ4の姿勢や動きが算出されてもよい。また、左コントローラ3および/または右コントローラ4の姿勢や動きを算出する方法は任意であり、例えば他の実施例においては、本体装置2は、左コントローラ3および/または右コントローラ4(ベルト型拡張装置6および/またはリング型拡張装置5)を撮像装置によって撮像し、撮影された画像を用いて左コントローラ3および/または右コントローラ4(ベルト型拡張装置6および/またはリング型拡張装置5)の姿勢を算出してもよい。
また、ゲームシステム1は、どのような装置であってもよく、携帯型のゲーム装置、任意の携帯型電子機器(PDA(Personal Digital Assistant)、携帯電話、パーソナルコンピュータ、カメラ、タブレット等)等であってもよい。この場合、オブジェクトを移動する操作を行うための入力装置は、左コントローラ3や右コントローラ4でなくてもよく、別のコントローラ、マウス、タッチパッド、タッチパネル、トラックボール、キーボード、十字キー、スライドパッド等であってもよい。
また、上述した説明では情報処理をゲームシステム1でそれぞれ行う例を用いたが、上記処理ステップの少なくとも一部を他の装置で行ってもかまわない。例えば、ゲームシステム1がさらに他の装置(例えば、別のサーバ、他の画像表示装置、他のゲーム装置、他の携帯端末)と通信可能に構成されている場合、上記処理ステップは、さらに当該他の装置が協働することによって実行してもよい。このように、上記処理ステップの少なくとも一部を他の装置で行うことによって、上述した処理と同様の処理が可能となる。また、上述した情報処理は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施例においては、ゲームシステム1のプロセッサ81が所定のプログラムを実行することによって情報処理を行うことが可能であるが、ゲームシステム1が備える専用回路によって上記処理の一部または全部が行われてもよい。
ここで、上述した変形例によれば、いわゆるクラウドコンピューティングのシステム形態や分散型の広域ネットワークおよびローカルネットワークのシステム形態でも本発明を実現することが可能となる。例えば、分散型のローカルネットワークのシステム形態では、据置型の情報処理装置(据置型のゲーム装置)と携帯型の情報処理装置(携帯型のゲーム装置)との間で上記処理を協働により実行することも可能となる。なお、これらのシステム形態では、上述した処理をどの装置で行うかについては特に限定されず、どのような処理分担をしたとしても本発明を実現できることは言うまでもない。
また、上述した情報処理で用いられる処理順序、設定値、判定に用いられる条件等は、単なる一例に過ぎず他の順序、値、条件であっても、本実施例を実現できることは言うまでもない。
また、上記プログラムは、外部メモリ等の外部記憶媒体を通じてゲームシステム1に供給されるだけでなく、有線または無線の通信回線を通じて当該装置に供給されてもよい。また、上記プログラムは、当該装置内部の不揮発性記憶装置に予め記録されていてもよい。なお、上記プログラムを記憶する情報記憶媒体としては、不揮発性メモリの他に、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープ、などでもよい。また、上記プログラムを記憶する情報記憶媒体としては、上記プログラムを記憶する揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。また、当業者は、本発明の具体的な実施例の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。