図1を参照して、本発明の一実施形態に係る情報処理プログラムを実行する情報処理装置および当該情報処理装置を含む情報処理システムについて説明する。以下、説明を具体的にするために、当該情報処理装置の一例として据置型のゲーム装置本体5を用い、ゲーム装置本体5を含むゲームシステムを用いて説明する。なお、図1は、据置型のゲーム装置3を含むゲームシステム1の一例を示す外観図である。図2は、ゲーム装置本体5の一例を示すブロック図である。以下、当該ゲームシステム1について説明する。
図1において、ゲームシステム1は、表示手段の一例である家庭用テレビジョン受像機(以下、モニタと記載する)2と、モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置3から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明の情報処理プログラムの一例となるプログラム(例えば、ゲームプログラム)を記録した光ディスク4と、光ディスク4のプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、端末装置6と、表示画面に表示されたオブジェクト等を操作するために必要な操作情報をゲーム装置本体5に与えるためのコントローラ7と、ボード型コントローラ9とを含む。ゲームシステム1は、端末装置6、コントローラ7、およびボード型コントローラ9の少なくとも1つを用いたゲーム操作に基づいて、ゲーム装置本体5においてゲーム処理を実行し、ゲーム処理によって得られるゲーム画像をモニタ2および/または端末装置6に表示するものである。なお、ゲーム装置本体5と端末装置6、コントローラ7、およびボード型コントローラ9とは、無線によって無線通信可能に接続される。例えば、上記無線通信は、Bluetooth(登録商標)規格やIEEE802.11n規格に従って実行されるが、赤外線など他の規格に従って実行されてもよい。
ゲーム装置本体5には、当該ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置本体5において実行されるための情報処理プログラム(典型的にはゲームプログラム)が記憶されている。ゲーム装置本体5の前面には、光ディスク4の挿入口が設けられている。ゲーム装置本体5は、挿入口に挿入された光ディスク4に記憶されている情報処理プログラムを読み出して実行することによってゲーム処理を実行する。
ゲーム装置本体5には、モニタ2が接続コードを介して接続される。モニタ2は、ゲーム装置本体5において実行されるゲーム処理によって得られるゲーム画像を表示する。モニタ2はスピーカ2aを有しており、スピーカ2aは、上記ゲーム処理の結果得られるゲーム音声を出力する。なお、他の実施形態においては、ゲーム装置本体5と据置型の表示装置とは一体となっていてもよい。また、ゲーム装置本体5とモニタ2との通信は無線通信であってもよい。
ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ17(図2参照)が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2および/または端末装置6に表示する。ゲームプログラム等は、光ディスク4に限らず、フラッシュメモリ17に予め記録されたものを実行するようにしてもよい。また、ゲーム装置本体5は、フラッシュメモリ17に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2および/または端末装置6に表示することもできる。そして、ゲーム装置3のユーザは、モニタ2および/または端末装置6に表示されたゲーム画像を見ながら、端末装置6、コントローラ7、およびボード型コントローラ9の少なくとも1つを操作することによって、ゲーム進行を楽しむことができる。
コントローラ7およびボード型コントローラ9は、コントローラ通信モジュール19を内蔵するゲーム装置本体5へ、例えばBluetoothの技術を用いて操作情報等の送信データをそれぞれ無線送信する。コントローラ7は、主にモニタ2の表示画面に表示された選択肢の選択等をするための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キー等を含む)とが設けられている。また、後述により明らかとなるが、コントローラ7は、コントローラ7から見た画像を撮像する撮像情報演算部を備えている。そして、撮像情報演算部の撮像対象の一例として、モニタ2の表示画面近傍(図1では画面の上側)に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。詳細は後述するが、ユーザ(プレイヤ)は、コントローラ7を動かすゲーム操作を行うことができ、マーカ8は、コントローラ7の動きや位置や姿勢等をゲーム装置本体5が算出するために用いられる。マーカ8は、その両端に2つのマーカ8Lおよび8Rを備えている。マーカ8R(マーカ8Lも同様)は、具体的には1以上の赤外LED(Light Emitting Diode)であり、モニタ2の前方に向かって赤外光を出力する。マーカ8はゲーム装置本体5に接続されており、ゲーム装置本体5はマーカ8が備える各赤外LEDの点灯を制御することが可能である。なお、マーカ8は可搬型であり、ユーザはマーカ8を自由な位置に設置することができる。図1ではマーカ8がモニタ2の上に設置された態様を表しているが、マーカ8を設置する位置および向きは任意である。また、コントローラ7は、ゲーム装置本体5のコントローラ通信モジュール19から無線送信された送信データを通信部で受信して、当該送信データに応じた音や振動を発生させることもできる。
なお、他の実施形態においてはコントローラ7および/またはボード型コントローラ9とゲーム装置本体5とは有線で接続されてもよい。また、本実施形態では、ゲームシステム1に含まれるコントローラ7およびボード型コントローラ9はそれぞれ1つとするが、ゲーム装置本体5は複数のコントローラ7および複数のボード型コントローラ9と通信可能であり、所定台数のコントローラ7およびボード型コントローラ9をそれぞれ同時に使用することによって複数人でゲームをプレイすることが可能である。
コントローラ7は、例えばプラスチック成型によって形成されたハウジングを有しており、当該ハウジングに複数の操作部(操作ボタン)が設けられている。そして、コントローラ7は、操作部に対する入力状態(各操作ボタンが押下されたか否か)を示す操作データをゲーム装置本体5に送信する。
また、コントローラ7は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別することによってその領域の重心位置やサイズなどを算出する撮像情報演算部を有している。例えば、撮像情報演算部は、コントローラ7のハウジングに固設された撮像手段を有し、端末装置6のマーカ部65および/またはマーカ8等の赤外光を出力するマーカを撮像対象としている。そして、撮像情報演算部は、撮像手段が撮像した撮像画像内における撮像対象の位置を算出し、算出された位置を示すマーカ座標データをゲーム装置本体5に送信する。このマーカ座標データは、コントローラ7自体の向き(傾斜角度)や位置に対応して変化するので、ゲーム装置本体5はこのマーカ座標データを用いてコントローラ7の向きや位置を算出することができる。
さらに、コントローラ7は、加速度センサおよび/またはジャイロセンサを内蔵している。加速度センサは、コントローラ7に生じる加速度(重力加速度を含む)を検出し、検出した加速度を示す加速度データをゲーム装置本体5に送信する。加速度センサが検出した加速度は、コントローラ7自体の向き(傾斜角度)や動きに対応して変化するので、ゲーム装置本体5は取得された加速度データを用いてコントローラ7の向きや動きを算出することができる。ジャイロセンサは、コントローラ7に設定された3軸回りの角速度をそれぞれ検出し、検出した角速度を示す角速度データをゲーム装置本体5に送信する。ジャイロセンサが検出した角速度は、コントローラ7自体の向き(傾斜角度)や動きに対応して変化するので、ゲーム装置本体5は取得された角速度データを用いてコントローラ7の向きや動きを算出することができる。このように、ユーザは、コントローラ7に設けられた操作部を押下すること、およびコントローラ7自体を動かしてその位置や姿勢(傾き)を変えることによってゲーム操作を行うことができる。
コントローラ7には、スピーカおよびバイブレータが設けられている。コントローラ7は、ゲーム装置本体5から送信されたサウンドデータを処理し、当該サウンドデータに応じた音声をスピーカから出力させる。また、コントローラ7は、ゲーム装置本体5から送信された振動データを処理し、当該振動データに応じてバイブレータを作動させて振動を発生させる。なお、後述する本発明の実施形態においては、コントローラ7を用いることなくゲームをプレイすることが可能である。ボード型コントローラ9の詳細な構成については後述する。
端末装置6は、ユーザが把持可能な程度の大きさであり、ユーザは端末装置6を手に持って動かしたり、あるいは、端末装置6を自由な位置に配置したりして使用することが可能な可搬型の装置である。詳細な構成は後述するが、端末装置6は、表示手段であるLCD(Liquid Crystal Display:液晶表示装置)61、および入力手段(後述するタッチパネル62やジャイロセンサ604等)を備える。端末装置6とゲーム装置本体5(端末通信モジュール28(図2参照))とは無線(有線であってもよい)によって通信可能である。端末装置6は、ゲーム装置本体5で生成された画像(例えばゲーム画像)のデータをゲーム装置本体5から受信し、当該データが示す画像をLCD61に表示する。なお、本実施形態では表示装置としてLCDを用いているが、端末装置6は、例えばEL(Electro Luminescence:電界発光)を利用した表示装置等、他の任意の表示装置を有していてもよい。また、端末装置6は、端末通信モジュール28を内蔵するゲーム装置本体5へ、自機に対して行われた操作の内容を表す操作データを送信する。
次に、図2を参照して、ゲーム装置本体5の内部構成について説明する。図2は、ゲーム装置本体5の構成の一例を示すブロック図である。ゲーム装置本体5は、CPU(Central Processing Unit)10、システムLSI(Large Scale Integration)11、外部メインメモリ12、ROM/RTC(Read Only Memory/Real Time Clock)13、ディスクドライブ14、およびAV−IC(Audio Video−Integrated Circuit)15等を有する。
CPU10は、光ディスク4に記憶されたプログラムを実行することによって処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムLSI11の内部構成については、後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたプログラムや、フラッシュメモリ17から読み出されたプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置本体5の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ35または外部メインメモリ12に読み出したデータを書き込む。
システムLSI11には、入出力プロセッサ(I/Oプロセッサ)31、GPU(Graphics Processor Unit)32、DSP(Digital Signal Processor)33、VRAM(Video RAM)34、および内部メインメモリ35が設けられる。図示は省略するが、これらの構成要素31〜35は、内部バスによって互いに接続される。
GPU32は、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM34は、GPU32がグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU32は、VRAM34に記憶されたデータを用いて画像データを作成する。なお、本実施形態においては、ゲーム装置本体5は、モニタ2に表示するゲーム画像と、端末装置6に表示するゲーム画像との両方を生成することがある。以下では、モニタ2に表示されるゲーム画像を「モニタ用ゲーム画像」と呼び、端末装置6に表示されるゲーム画像を「端末用ゲーム画像」と呼ぶことがある。
DSP33は、オーディオプロセッサとして機能し、内部メインメモリ35や外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。なお、本実施形態においては、ゲーム音声についてもゲーム画像と同様、モニタ2のスピーカ2aから出力するゲーム音声と、端末装置6のスピーカから出力するゲーム音声との両方が生成されることがある。以下では、モニタ2から出力されるゲーム音声を「モニタ用ゲーム音声」と呼び、端末装置6から出力されるゲーム音声を「端末用ゲーム音声」と呼ぶことがある。
上記のようにゲーム装置本体5において生成される画像および音声のうち、モニタ2に出力される画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、AVコネクタ16を介して、読み出した画像データをモニタ2に出力するとともに、読み出した音声データをモニタ2に内蔵されるスピーカ2aに出力する。これによって、モニタ2に画像が表示されるとともにスピーカ2aから音が出力される。
また、ゲーム装置本体5において生成される画像および音声のうち、端末装置6に出力される画像データおよび音声データは、入出力プロセッサ31等によって端末装置6へ送信される。入出力プロセッサ31等による端末装置6へのデータの送信については後述する。
入出力プロセッサ31は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ31は、フラッシュメモリ17、ネットワーク通信モジュール18、コントローラ通信モジュール19、拡張コネクタ20、メモリカード用コネクタ21、コーデックLSI27に接続される。また、ネットワーク通信モジュール18にはアンテナ22が接続される。コントローラ通信モジュール19にはアンテナ23が接続される。コーデックLSI27は端末通信モジュール28に接続され、端末通信モジュール28にはアンテナ29が接続される。
ゲーム装置本体5は、インターネット等のネットワークに接続して外部情報処理装置(例えば他のゲーム装置や、各種サーバ等)と通信を行うことが可能である。すなわち、入出力プロセッサ31は、ネットワーク通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される外部情報処理装置と通信することができる。入出力プロセッサ31は、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データがある場合には、ネットワーク通信モジュール18およびアンテナ22を介して当該データをネットワークに送信する。また、入出力プロセッサ31は、外部情報処理装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22、およびネットワーク通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10は、プログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してプログラムで利用する。フラッシュメモリ17には、ゲーム装置本体5と外部情報処理装置との間で送受信されるデータの他、ゲーム装置本体5を利用してプレイしたゲームのセーブデータ(処理の結果データまたは途中データ)が記憶されてもよい。また、フラッシュメモリ17には、ゲームプログラム等のプログラムが記憶されてもよい。
また、ゲーム装置本体5は、コントローラ7および/またはボード型コントローラ9からの操作データを受信することが可能である。すなわち、入出力プロセッサ31は、アンテナ23およびコントローラ通信モジュール19を介して、コントローラ7および/またはボード型コントローラ9から送信される操作データ等を受信し、内部メインメモリ35または外部メインメモリ12のバッファ領域に記憶(一時記憶)する。なお、内部メインメモリ35には、外部メインメモリ12と同様に、光ディスク4から読み出されたプログラムや、フラッシュメモリ17から読み出されたプログラムを記憶したり、各種データを記憶したりしてもよく、CPU10のワーク領域やバッファ領域として用いられてもかまわない。
また、ゲーム装置本体5は、端末装置6との間で画像や音声等のデータを送受信することが可能である。入出力プロセッサ31は、端末装置6へゲーム画像(端末用ゲーム画像)を送信する場合、GPU32が生成したゲーム画像のデータをコーデックLSI27へ出力する。コーデックLSI27は、入出力プロセッサ31からの画像データに対して所定の圧縮処理を行う。端末通信モジュール28は、端末装置6との間で無線通信を行う。したがって、コーデックLSI27によって圧縮された画像データは、端末通信モジュール28によってアンテナ29を介して端末装置6へ送信される。なお、本実施形態では、ゲーム装置本体5から端末装置6へ送信される画像データはゲームに用いるものであり、ゲームにおいては表示される画像に遅延が生じるとゲームの操作性に悪影響が出る。そのため、ゲーム装置本体5から端末装置6への画像データの送信に関しては、できるだけ遅延が生じないようにすることが好ましい。したがって、本実施形態では、コーデックLSI27は、例えばH.264規格といった高効率の圧縮技術を用いて画像データを圧縮する。なお、それ以外の圧縮技術を用いてもよいし、通信速度が十分である場合には無圧縮で画像データを送信する構成であってもよい。また、端末通信モジュール28は、例えばWi−Fiの認証を受けた通信モジュールであり、例えばIEEE802.11n規格で採用されるMIMO(Multiple Input Multiple Output)の技術を用いて端末装置6との間の無線通信を高速に行うようにしてもよいし、他の通信方式を用いてもよい。
また、ゲーム装置本体5は、画像データの他、音声データを端末装置6へ送信する。すなわち、入出力プロセッサ31は、DSP33が生成した音声データを、コーデックLSI27を介して端末通信モジュール28へ出力する。コーデックLSI27は、音声データに対しても画像データと同様に圧縮処理を行う。音声データに対する圧縮の方式は、どのような方式であってもよいが、圧縮率が高く、音声の劣化が少ない方式が好ましい。また、他の実施形態においては、音声データは圧縮されずに送信されてもよい。端末通信モジュール28は、圧縮された画像データおよび音声データを、アンテナ29を介して端末装置6へ送信する。
さらに、ゲーム装置本体5は、上記画像データおよび音声データの他に、必要に応じて各種の制御データを端末装置6へ送信する。制御データは、端末装置6が備える構成要素に対する制御指示を表すデータであり、例えばマーカ部(図5に示すマーカ部65)の点灯を制御する指示や、カメラ(図5に示すカメラ66)の撮像を制御する指示等を表す。入出力プロセッサ31は、CPU10の指示に応じて制御データを端末装置6へ送信する。なお、この制御データに関して、本実施形態ではコーデックLSI27はデータの圧縮処理を行わないが、他の実施形態においては圧縮処理を行うようにしてもよい。なお、ゲーム装置本体5から端末装置6へ送信される上述のデータは、必要に応じて暗号化がされていてもよいし、されていなくてもよい。
また、ゲーム装置本体5は、端末装置6から各種データを受信可能である。詳細は後述するが、本実施形態では、端末装置6は、操作データ、画像データ、および音声データを送信する。端末装置6から送信される各データは、アンテナ29を介して端末通信モジュール28によって受信される。ここで、端末装置6からの画像データおよび音声データは、ゲーム装置本体5から端末装置6への画像データおよび音声データと同様の圧縮処理が施されている。したがって、これら画像データおよび音声データについては、端末通信モジュール28からコーデックLSI27に送られ、コーデックLSI27によって伸張処理が施されて入出力プロセッサ31に出力される。一方、端末装置6からの操作データに関しては、画像や音声に比べてデータ量が少ないので、圧縮処理が施されていなくともよい。また、必要に応じて暗号化がされていてもよいし、されていなくてもよい。したがって、操作データは、端末通信モジュール28で受信された後、コーデックLSI27を介して入出力プロセッサ31に出力される。入出力プロセッサ31は、端末装置6から受信したデータを、内部メインメモリ35または外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
また、ゲーム装置本体5は、他の機器や外部記憶媒体に接続することが可能である。すなわち、入出力プロセッサ31には、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインタフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによってネットワーク通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ31は、拡張コネクタ20やメモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
ゲーム装置本体5(例えば、前部主面)には、電源ボタン24、リセットボタン25、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトボタン26等が設けられている。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置本体5の各構成要素に対して電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置本体5の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
なお、他の実施形態においては、ゲーム装置本体5が備える各構成要素のうちでいくつかの構成要素は、ゲーム装置本体5とは別体の拡張機器として構成されてもよい。このとき、拡張機器は、例えば拡張コネクタ20を介してゲーム装置本体5と接続されるようにしてもよい。具体的には、拡張機器は、例えばコーデックLSI27、端末通信モジュール28、およびアンテナ29の各構成要素を備えており、拡張コネクタ20に対して着脱可能であってもよい。これによれば、上記各構成要素を備えていないゲーム装置本体に対して上記拡張機器を接続することによって、当該ゲーム装置本体を端末装置6と通信可能な構成とすることができる。
次に、図3〜図5を参照して、端末装置6の構成について説明する。なお、図3は、端末装置6の外観構成の一例を示す図である。図3の(a)部は端末装置6の正面図であり、(b)部は上面図であり、(c)部は右側面図であり、(d)部は下面図である。図4は、ユーザが端末装置6を把持した様子の一例を示す図である。
図3に示されるように、端末装置6は、大略的には横長の長方形の板状形状であるハウジング60を備える。ハウジング60は、ユーザが把持することができる程度の大きさである。したがって、ユーザは、端末装置6を持って動かしたり、端末装置6の配置位置を変更したりすることができる。
端末装置6は、ハウジング60の表面にLCD61を有する。LCD61は、ハウジング60の表面の中央付近に設けられる。したがって、ユーザは、図4に示すようにLCD61の両側部分のハウジング60を持つことによって、LCD61の画面を見ながら端末装置6を持って動かすことができる。なお、図4では、ユーザがLCD61の左右両側の部分のハウジング60を持つことで端末装置6を横持ちで持つ(すなわち、長辺方向を横にして端末装置6を持つ)例を示しているが、端末装置6を縦持ちで持つ(すなわち、長辺方向を縦にして端末装置6を持つ)ことも可能である。
図3の(a)部に示すように、端末装置6は、操作手段として、LCD61の画面上にタッチパネル62を有する。本実施形態では、タッチパネル62は、抵抗膜方式のタッチパネルである。ただし、タッチパネル62は、抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。また、タッチパネル62は、シングルタッチ方式でもよいし、マルチタッチ方式であってもよい。本実施形態では、タッチパネル62として、LCD61の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル62の解像度とLCD61の解像度とが一致している必要はない。タッチパネル62に対する入力は、通常タッチペンを用いて行われるが、タッチペンに限らずユーザの指でタッチパネル62に対する入力をすることも可能である。なお、ハウジング60には、タッチパネル62に対する操作を行うために用いられるタッチペンを収納するための収納穴が設けられていてもよい。このように、端末装置6がタッチパネル62を備えているため、ユーザは、端末装置6を動かしながらタッチパネル62を操作することができる。つまり、ユーザは、LCD61の画面を動かしつつ、その画面に対して直接(タッチパネル62によって)入力を行うことができる。
図3に示すように、端末装置6は、操作手段として、2つのアナログスティック63Aおよび63Bと、複数の操作ボタン64A〜64Lとを備えている。各アナログスティック63Aおよび63Bは、方向を指示するデバイスである。各アナログスティック63Aおよび63Bは、ユーザの指で操作されるスティック部がハウジング60の表面に対して任意の方向(上下左右および斜め方向の任意の角度)にスライドまたは傾倒することができるように構成されている。また、左アナログスティック63Aは、LCD61の画面の左側に、右アナログスティック63Bは、LCD61の画面の右側にそれぞれ設けられる。したがって、ユーザは、左右いずれの手でもアナログスティック63Aまたは63Bを用いて方向を指示する入力を行うことができる。また、図4に示すように、各アナログスティック63Aおよび63Bは、ユーザが端末装置6の左右部分を把持した状態で操作可能な位置に設けられるので、ユーザは、端末装置6を持って動かす場合においても各アナログスティック63Aおよび63Bを容易に操作することができる。
各操作ボタン64A〜64Lは、所定の入力を行うための操作手段である。以下に示すように、各操作ボタン64A〜64Lは、ユーザが端末装置6の左右部分を把持した状態で操作可能な位置に設けられる(図4参照)。したがって、ユーザは、端末装置6を持って動かす場合においてもこれらの操作手段を容易に操作することができる。
図3の(a)部に示すように、ハウジング60の表面には、各操作ボタン64A〜64Lのうち、十字ボタン(方向入力ボタン)64Aと、操作ボタン64B〜64Hとが設けられる。これらの操作ボタン64A〜64Gは、ユーザの親指で操作可能な位置に配置されている(図4参照)。
十字ボタン64Aは、LCD61の左側であって、左アナログスティック63Aの下側に設けられる。つまり、十字ボタン64Aは、ユーザの左手で操作可能な位置に配置されている。十字ボタン64Aは、十字の形状を有しており、上下左右の方向を指示することが可能なボタンである。また、操作ボタン64B〜64Dは、LCD61の下側に設けられる。これら3つの操作ボタン64B〜64Dは、左右両方の手で操作可能な位置に配置されている。また、4つの操作ボタン64E〜64Hは、LCD61の右側であって、右アナログスティック63Bの下側に設けられる。つまり、4つの操作ボタン64E〜64Hは、ユーザの右手で操作可能な位置に配置されている。さらに、4つの操作ボタン64E〜64Hは、(4つの操作ボタン64E〜64Hの中心位置に対して)上下左右の位置関係となるように配置されている。したがって、端末装置6は、ユーザに上下左右の方向を指示させるためのボタンとして4つの操作ボタン64E〜64Hを機能させることも可能である。
また、図3の(a)部、(b)部、および(c)部に示すように、第1Lボタン64Iおよび第1Rボタン64Jは、ハウジング60の斜め上部分(左上部分および右上部分)に設けられる。具体的には、第1Lボタン64Iは、板状のハウジング60における上側の側面の左端に設けられ、上側および左側の側面から突設されている。また、第1Rボタン64Jは、ハウジング60における上側の側面の右端に設けられ、上側および右側の側面から突設されている。このように、第1Lボタン64Iは、ユーザの左手人差し指で操作可能な位置に配置され、第1Rボタン64Jは、ユーザの右手人差し指で操作可能な位置に配置される(図4参照)。
また、図3の(b)部および(c)部に示すように、第2Lボタン64Kおよび第2Rボタン64Lは、板状のハウジング60の裏面(すなわちLCD61が設けられる表面の反対側の面)に突出して設けられた足部68Aおよび68Bにそれぞれ突設される。具体的には、第2Lボタン64Kは、ハウジング60の裏面の左側(表面側から見たときの左側)のやや上方に設けられ、第2Rボタン64Lは、ハウジング60の裏面の右側(表面側から見たときの右側)のやや上方に設けられる。換言すれば、第2Lボタン64Kは、表面に設けられる左アナログスティック63Aの概ね反対側の位置に設けられ、第2Rボタン64Lは、表面に設けられる右アナログスティック63Bの概ね反対側の位置に設けられる。第2Lボタン64Kは、ユーザの左手中指で操作可能な位置に配置され、第2Rボタン64Lは、ユーザの右手中指で操作可能な位置に配置される(図4参照)。また、第2Lボタン64Kおよび第2Rボタン64Lは、図3の(c)部に示すように、上記足部68Aおよび68Bの斜め上方を向く面に設けられ、斜め上方を向くボタン面を有する。ユーザが端末装置6を把持した場合には、中指が上下方向に動くと考えられるので、ボタン面を上方に向けることで、ユーザは第2Lボタン64Kおよび第2Rボタン64Lを押下しやすくなる。また、ハウジング60の裏面に足部68Aおよび68Bが設けられることにより、ユーザはハウジング60を把持しやすくなり、かつ、足部68Aおよび68Bに操作ボタンが設けられることで、ハウジング60を把持したまま操作しやすくなる。
なお、図3に示す端末装置6に関しては、第2Lボタン64Kおよび第2Rボタン64Lが裏面に設けられるので、LCD61の画面(ハウジング60の表面)が上を向いた状態で端末装置6を載置させる場合、画面が完全に水平にはならない場合がある。そのため、他の実施形態においては、ハウジング60の裏面に3つ以上の足部が形成されてもよい。これによれば、LCD61の画面が上を向いた状態では3つ以上の足部が床面と接するように端末装置6を載置できるので、画面が水平になるように端末装置6を載置することができる。また、着脱可能な足部を装着することで端末装置6を水平に載置可能にしてもよい。
各操作ボタン64A〜64Lには、ゲームプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン64Aおよび操作ボタン64E〜64Hは、方向指示操作や選択操作等に用いられてもよいし、各操作ボタン64B〜64Eは、決定操作やキャンセル操作等に用いられてもよい。
なお、図示しないが、端末装置6は、端末装置6の電源をオン/オフするための電源ボタンを有している。また、端末装置6は、LCD61の画面表示をオン/オフするための操作ボタンや、ゲーム装置本体5との接続設定(ペアリング)を行うための操作ボタンや、スピーカ(図5に示すスピーカ607)の音量を調節するための操作ボタンを有していてもよい。
図3の(a)部に示すように、端末装置6は、マーカ65Aおよびマーカ65Bからなるマーカ部(図5に示すマーカ部65)をハウジング60の表面に備えている。一例として、マーカ部65は、LCD61の上側に設けられる。マーカ65Aおよびマーカ65Bは、マーカ8のマーカ8Lおよび8Rと同様、それぞれ1以上の赤外LEDで構成される。マーカ部65は、上述したマーカ8と同様、マーカ部65に対するコントローラ7の動き等をゲーム装置本体5が算出するために用いられる。また、ゲーム装置本体5は、マーカ部65が備える各赤外LEDの点灯を制御することが可能である。
端末装置6は、撮像手段であるカメラ66を備えている。カメラ66は、所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。例えば、カメラ66は、ハウジング60の表面に設けられる。したがって、カメラ66は、端末装置6を持っているユーザの顔を撮像することができ、一例としてLCD61を見ながらゲームを行っている状態におけるユーザを撮像することができる。
なお、端末装置6は、音声入力手段であるマイク(図5に示すマイク609)を備えている。ハウジング60の表面には、マイクロフォン用孔60bが設けられる。マイク609は、マイクロフォン用孔60bの内側となるハウジング60内部に設けられる。マイク609は、ユーザの音声等、端末装置6の周囲の音を検出する。
端末装置6は、音声出力手段であるスピーカ(図5に示すスピーカ607)を備えている。図3の(d)部に示すように、ハウジング60の下側側面にはスピーカ孔60aが設けられる。スピーカ607の出力音は、スピーカ孔60aから出力される。本実施形態では、端末装置6は、2つのスピーカを備えており、左スピーカおよび右スピーカのそれぞれの位置にスピーカ孔60aが設けられる。
また、端末装置6は、他の装置を端末装置6に接続するための拡張コネクタ67を備えている。本実施形態においては、図3の(d)部に示すように、拡張コネクタ67は、ハウジング60の下側側面に設けられる。なお、拡張コネクタ67に接続される他の装置はどのようなものであってもよく、例えば、特定のゲームに用いるコントローラ(銃型のコントローラ等)やキーボード等の入力装置であってもよい。他の装置を接続する必要がなければ、拡張コネクタ67は設けられていなくともよい。
なお、図3に示した端末装置6に関して、各操作ボタンやハウジング60の形状や、各構成要素の数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であってもよい。
次に、図5を参照して、端末装置6の内部構成について説明する。図5は、端末装置6の内部構成の一例を示すブロック図である。図5に示すように、端末装置6は、図3に示した構成の他、タッチパネルコントローラ601、磁気センサ602、加速度センサ603、ジャイロセンサ604、ユーザインタフェースコントローラ(UIコントローラ)605、コーデックLSI606、スピーカ607、サウンドIC608、マイク609、無線モジュール610、アンテナ611、赤外線通信モジュール612、フラッシュメモリ613、電源IC614、電池615、およびバイブレータ619を備える。これらの電子部品は、電子回路基板上に実装されてハウジング60内に収納される。
UIコントローラ605は、各種の入出力部に対するデータの入出力を制御するための回路である。UIコントローラ605は、タッチパネルコントローラ601、アナログスティック63(アナログスティック63Aおよび63B)、操作ボタン64(各操作ボタン64A〜64L)、マーカ部65、磁気センサ602、加速度センサ603、ジャイロセンサ604、およびバイブレータ619に接続される。また、UIコントローラ605は、コーデックLSI606と拡張コネクタ67とに接続される。また、UIコントローラ605には電源IC614が接続され、UIコントローラ605を介して各部に電力が供給される。電源IC614には内蔵の電池615が接続され、電力が供給される。また、電源IC614には、コネクタ等を介して外部電源から電力を取得可能な充電器616またはケーブルを接続することが可能であり、端末装置6は、充電器616またはケーブルを用いて外部電源からの電力供給と充電とを行うことができる。なお、端末装置6は、図示しない充電機能を有するクレイドルに端末装置6を装着することで充電を行うようにしてもよい。
タッチパネルコントローラ601は、タッチパネル62に接続され、タッチパネル62の制御を行う回路である。タッチパネルコントローラ601は、タッチパネル62からの信号に基づいて所定の形式のタッチ位置データを生成してUIコントローラ605へ出力する。タッチ位置データは、タッチパネル62の入力面において入力が行われた位置の座標を表す。なお、タッチパネルコントローラ601は、タッチパネル62からの信号の読み込み、および、タッチ位置データの生成を所定時間に1回の割合で行う。また、UIコントローラ605からタッチパネルコントローラ601へは、タッチパネル62に対する各種の制御指示が出力される。
アナログスティック63は、ユーザの指で操作されるスティック部がスライドした(または傾倒した)方向および量を表すスティックデータをUIコントローラ605へ出力する。また、操作ボタン64は、各操作ボタン64A〜64Lに対する入力状況(押下されたか否か)を表す操作ボタンデータをUIコントローラ605へ出力する。
磁気センサ602は、磁界の大きさおよび方向を検知することで方位を検出する。検出された方位を示す方位データは、UIコントローラ605へ出力される。また、UIコントローラ605から磁気センサ602へは、磁気センサ602に対する制御指示が出力される。磁気センサ602に関しては、MI(磁気インピーダンス)素子、フラックスゲートセンサ、ホール素子、GMR(巨大磁気抵抗)素子、TMR(トンネル磁気抵抗)素子、あるいはAMR(異方性磁気抵抗)素子等を用いたセンサがあるが、方位を検出することができればどのようなものが用いられてもよい。なお、厳密には、地磁気以外に磁界が発生している場所においては、得られた方位データは方位を示さないことになるが、そのような場合であっても、端末装置6が動いた場合には方位データが変化するため、端末装置6の姿勢の変化を算出することができる。
加速度センサ603は、ハウジング60の内部に設けられ、3軸(図3の(a)部に示すxyz軸)方向に沿った直線加速度の大きさを検出する。具体的には、加速度センサ603は、ハウジング60の長辺方向をx軸(マーカ部65がLCD61の上側に配置された状態でLCD61の表示画面に向かって当該長辺方向に沿った右方向をx軸正方向とする)、ハウジング60の短辺方向をy軸(マーカ部65がLCD61の上側に配置された状態でLCD61の表示画面に向かって当該短辺方向に沿った上方向をy軸正方向とする)、ハウジング60の表面に対して垂直な方向をz軸(LCD61の表示画面奥行方向をz軸正方向とする)として、各軸の直線加速度の大きさを検出する。検出された加速度を表す加速度データはUIコントローラ605へ出力される。また、UIコントローラ605から加速度センサ603へは、加速度センサ603に対する制御指示が出力される。加速度センサ603は、本実施形態では例えば静電容量式のMEMS型加速度センサであるとするが、他の実施形態においては他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ603は1軸または2軸方向を検出する加速度センサであってもよい。
ジャイロセンサ604は、ハウジング60の内部に設けられ、上記x軸、y軸、およびz軸の3軸周りの角速度をそれぞれ検出する。検出された角速度を表す角速度データは、UIコントローラ605へ出力される。また、UIコントローラ605からジャイロセンサ604へは、ジャイロセンサ604に対する制御指示が出力される。なお、3軸の角速度を検出するために用いられるジャイロセンサの数および組み合わせはどのようなものであってもよく、ジャイロセンサ604は、2軸ジャイロセンサと1軸ジャイロセンサとで構成されてもよい。また、ジャイロセンサ604は1軸または2軸方向を検出するジャイロセンサであってもよい。
バイブレータ619は、例えば振動モータやソレノイドであり、UIコントローラ605と接続される。UIコントローラ605からバイブレータ619へ出力される制御指示に応じて、バイブレータ619が作動することによって端末装置6に振動が発生する。これによって、端末装置6を把持しているユーザの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。
UIコントローラ605は、上記の各構成要素から受け取ったタッチ位置データ、スティックデータ、操作ボタンデータ、方位データ、加速度データ、および角速度データを含む操作データをコーデックLSI606に出力する。なお、拡張コネクタ67を介して端末装置6に他の装置が接続される場合には、当該他の装置に対する操作を表すデータが上記操作データにさらに含まれていてもよい。
コーデックLSI606は、ゲーム装置本体5へ送信するデータに対する圧縮処理、およびゲーム装置本体5から送信されたデータに対する伸張処理を行う回路である。コーデックLSI606には、LCD61、カメラ66、サウンドIC608、無線モジュール610、フラッシュメモリ613、および赤外線通信モジュール612が接続される。また、コーデックLSI606は、CPU617と内部メモリ618とを含む。例えば、端末装置6は、ゲーム処理自体を行わない構成であるが、端末装置6の管理や通信のための最小限のプログラムを実行する必要がある。一例として、電源投入時にフラッシュメモリ613に格納されたプログラムを内部メモリ618に読み出してCPU617が実行することで、端末装置6が起動する。また、内部メモリ618の一部の領域は、LCD61のためのVRAMとして使用される。
カメラ66は、ゲーム装置本体5からの指示に従って画像を撮像し、撮像した画像データをコーデックLSI606へ出力する。また、コーデックLSI606からカメラ66へは、画像の撮像指示等、カメラ66に対する制御指示が出力される。なお、カメラ66は、動画の撮影も可能である。すなわち、カメラ66は、繰り返し撮像を行って画像データをコーデックLSI606へ繰り返し出力することも可能である。
サウンドIC608は、スピーカ607およびマイク609に接続され、スピーカ607およびマイク609への音声データの入出力を制御する回路である。すなわち、コーデックLSI606から音声データを受け取った場合、サウンドIC608は、当該音声データに対してD/A変換を行って得られる音声信号をスピーカ607へ出力し、スピーカ607から音を出力させる。また、マイク609は、端末装置6に伝わる音(ユーザの音声等)を検知して、当該音を示す音声信号をサウンドIC608へ出力する。サウンドIC608は、マイク609からの音声信号に対してA/D変換を行い、所定の形式の音声データをコーデックLSI606へ出力する。
コーデックLSI606は、カメラ66からの画像データ、マイク609からの音声データ、およびUIコントローラ605からの操作データを、端末操作データとして無線モジュール610を介してゲーム装置本体5へ送信する。本実施形態では、コーデックLSI606は、画像データおよび音声データに対して、コーデックLSI27と同様の圧縮処理を行う。圧縮された画像データおよび音声データと上記端末操作データとは、送信データとして無線モジュール610に出力される。無線モジュール610にはアンテナ611が接続されており、無線モジュール610はアンテナ611を介してゲーム装置本体5へ上記送信データを送信する。無線モジュール610は、ゲーム装置本体5の端末通信モジュール28と同様の機能を有している。すなわち、無線モジュール610は、例えばIEEE802.11nの規格に準拠した方式により、無線LANに接続する機能を有する。無線モジュール610から送信されるデータは、必要に応じて暗号化されていてもよいし、されていなくてもよい。
以上のように、端末装置6からゲーム装置本体5へ送信される送信データには、操作データ(端末操作データ)、画像データ、および音声データが含まれる。なお、拡張コネクタ67を介して端末装置6に他の装置が接続される場合には、当該他の装置から受け取ったデータが上記送信データにさらに含まれていてもよい。また、赤外線通信モジュール612は、他の装置との間で例えばIRDAの規格に従った赤外線通信を行う。コーデックLSI606は、赤外線通信によって受信したデータを、必要に応じて上記送信データに含めてゲーム装置本体5へ送信してもよい。
また、上述のように、ゲーム装置本体5から端末装置6へは、圧縮された画像データおよび音声データが送信される。これらのデータは、アンテナ611および無線モジュール610を介してコーデックLSI606で受信される。コーデックLSI606は、受信した画像データおよび音声データを伸張する。伸張された画像データは、LCD61へ出力され、当該画像データに応じた画像がLCD61に表示される。また、伸張された音声データは、サウンドIC608へ出力され、当該音声データに応じた音がスピーカ607から出力される。
また、ゲーム装置本体5から受信されるデータに制御データが含まれる場合、コーデックLSI606およびUIコントローラ605は、制御データに従った制御指示を各部に行う。上述のように、制御データは、端末装置6が備える各構成要素(本実施形態では、カメラ66、タッチパネルコントローラ601、マーカ部65、各センサ602〜604、バイブレータ619、および赤外線通信モジュール612)に対する制御指示を表すデータである。本実施形態では、制御データが表す制御指示としては、上記各構成要素を動作させたり、動作を休止(停止)させたりする指示が考えられる。すなわち、ゲームで使用しない構成要素については電力消費を抑えるために休止させてもよく、その場合、端末装置6からゲーム装置本体5へ送信される送信データには、休止した構成要素からのデータが含まれないようにする。なお、マーカ部65は、赤外LEDであるので、制御は単に電力の供給のON/OFFでよい。
以上のように、端末装置6は、タッチパネル62、アナログスティック63、および操作ボタン64といった操作手段を備えるが、他の実施形態においては、これらの操作手段に代えて、または、これらの操作手段とともに、他の操作手段を備える構成であってもよい。
また、端末装置6は、端末装置6の動き(位置や姿勢、あるいは、位置や姿勢の変化を含む)を算出するためのセンサとして、磁気センサ602、加速度センサ603、およびジャイロセンサ604を備えるが、他の実施形態においては、これらのセンサのうち1つまたは2つのみを備える構成であってもよい。また、他の実施形態においては、これらのセンサに代えて、または、これらのセンサとともに、他のセンサを備える構成であってもよい。
また、端末装置6は、カメラ66およびマイク609を備える構成であるが、他の実施形態においては、カメラ66およびマイク609を備えていなくてもよく、また、いずれか一方のみを備えていてもよい。
また、端末装置6は、端末装置6とコントローラ7との位置関係(コントローラ7から見た端末装置6の位置および/または姿勢等)を算出するための構成としてマーカ部65を備える構成であるが、他の実施形態ではマーカ部65を備えていない構成としてもよい。また、他の実施形態では、端末装置6は、上記位置関係を算出するための構成として他の手段を備えていてもよい。例えば、他の実施形態においては、コントローラ7がマーカ部を備え、端末装置6が撮像素子を備える構成としてもよい。さらにこの場合、マーカ8は赤外LEDに代えて、撮像素子を備える構成としてもよい。
次に、図6〜図8を参照して、ボード型コントローラ9の構成について説明する。なお、図6は、図1に示したボード型コントローラ9の外観の一例を示す斜視図である。図6に示されるように、ボード型コントローラ9は、ユーザがその上に乗る(ユーザの足を乗せる)台9a、台9aに掛かる荷重を検出するための少なくとも4つの荷重センサ94a〜94dを備える。各荷重センサ94a〜94dは、それぞれ台9aに内包されており(図7参照)、図6においてはそれらの配置位置がそれぞれ破線で示されている。なお、以下の説明において、4つの荷重センサ94a〜94dを総称して説明する場合、荷重センサ94と記載することがある。
台9aは、略直方体に形成されており、上面視で略長方形状である。例えば、台9aは、長方形状の短辺が30cm程度に設定され、長辺が50cm程度に設定される。台9aの上面は、平坦に形成され、ユーザが両足裏をそれぞれ置いて乗るための一対の面が設定されている。具体的には、台9aの上面には、ユーザが左足を乗せるための面(図6における左奥側に2重線で囲まれた領域)および左足を乗せるための面(図6における右手前側に2重線で囲まれた領域)がそれぞれ設定されている。そして、台9aの4隅の側面は、例えば部分的に円柱状に張り出すように形成されている。
台9aにおいて、4つの荷重センサ94a〜94dは、所定の間隔を置いて配置される。当該実施例では、4つの荷重センサ94a〜94dは、台9aの周縁部に、具体的には4隅にそれぞれ配置される。荷重センサ94a〜94dの間隔は、台9aに対するユーザの荷重のかけ方によるゲーム操作の意図をより精度良く検出できるように適宜な値に設定される。
図7は、図6に示したボード型コントローラ9のA−A断面図の一例を示すとともに、荷重センサ94が配置された隅の部分が拡大表示された一例を示している。図7において、台9aは、ユーザが乗るための支持板90と脚92とを含む。荷重センサ94a〜94dは、脚92が配置される箇所にそれぞれ設けられる。この実施例では、4つの脚92が4隅に設けられているので、4つの荷重センサ94a〜94dがそれぞれ4隅に配置されることになる。脚92は、例えばプラスチック成型によって略有底円筒状に形成されており、荷重センサ94は、脚92内の底面に設けられた球面部品92a上に配置される。支持板90は、荷重センサ94を介して脚92に支持される。
支持板90は、上面と側面上部とを形成する上層板90a、下面と側面下部とを形成する下層板90b、および上層板90aと下層板90bとの間に設けられる中層板90cを含む。上層板90aと下層板90bとは、例えばプラスチック成型により形成されており、接着等により一体化される。中層板90cは、例えば1枚の金属板のプレス成型により形成されている。中層板90cは、4つの荷重センサ94a〜94dの上に固定される。上層板90aは、その下面に格子状のリブ(図示しない)を有しており、当該リブを介して中層板90cに支持されている。したがって、台9aにユーザが乗ったときには、その荷重は、支持板90および荷重センサ94a〜94dを介して、4つの脚92に伝達する。図7に矢印で示したように、入力された荷重によって生じた床からの反作用は、脚92から、球面部品92a、荷重センサ94a〜94d、および中層板90cを介して、上層板90aに伝達する。
荷重センサ94は、例えば歪ゲージ(歪センサ)式ロードセルであり、入力された荷重を電気信号に変換する荷重変換器である。荷重センサ94では、荷重入力に応じて、起歪体95が変形して歪が生じる。この歪が、起歪体95に貼り付けられた歪センサ96によって電気抵抗の変化に変換され、さらに電圧変化に変換される。したがって、荷重センサ94は、入力荷重を示す電圧信号を出力端子から出力することができる。
なお、荷重センサ94は、音叉振動式、弦振動式、静電容量式、圧電式、磁歪式、またはジャイロ式のような他の方式の荷重センサであってもよい。
図6に戻って、ボード型コントローラ9には、さらに、電源ボタン9cが設けられる。ボード型コントローラ9が起動していない状態で電源ボタン9cが操作(例えば、電源ボタン9cの押下)されると、ボード型コントローラ9の各回路コンポーネント(図8参照)に電力が供給される。ただし、ボード型コントローラ9は、ゲーム装置本体5からの指示に従って電源オンされて各回路コンポーネントに電力供給が開始される場合もある。なお、ボード型コントローラ9は、ユーザが乗っていない状態が一定時間(例えば、30秒)以上継続すると、自動的に電源がオフされてもよい。また、ボード型コントローラ9が起動している状態で、電源ボタン9cが再度操作された場合、電源がオフされて各回路コンポーネントへの電力供給が停止されてもよい。
図8は、ボード型コントローラ9の電気的な構成の一例を示すブロック図である。なお、図8では、信号およびデータの流れは実線矢印で示され、電力の供給が破線矢印で示されている。
図8において、ボード型コントローラ9は、その動作を制御するためのマイクロコンピュータ(マイコン)100を含む。マイコン100は、図示しないCPU、ROM、およびRAM等を含み、CPUがROMに記憶されたプログラムに従ってボード型コントローラ9の動作を制御する。
マイコン100には、電源ボタン9c、ADコンバータ102、DC−DCコンバータ104、および無線モジュール106が接続される。さらに、無線モジュール106には、アンテナ106aが接続される。4つの荷重センサ94a〜94dは、それぞれ増幅器108を介してADコンバータ102に接続される。
また、ボード型コントローラ9には、各回路コンポーネントへの電力供給のために電池110が収容されている。他の実施例では、電池110に代えてACアダプタをボード型コントローラ9に接続し、商用電力を各回路コンポーネントに供給するようにしてもよい。この場合、DC−DCコンバータ104に代えて、交流を直流に変換し、直流電圧を降圧および整流する電源回路をボード型コントローラ9内に設ける必要がある。この実施例では、マイコン100および無線モジュール106への電力供給は、電池110から直接的に行われる。つまり、マイコン100内部の一部のコンポーネント(CPU)と無線モジュール106とには、常に電池110からの電力が供給されており、電源ボタン9cがオンされたか否か、ゲーム装置本体5から電源オンを指示するコマンドが送信されたか否かを検出する。一方、荷重センサ94a〜94d、ADコンバータ102、および増幅器108には、DC−DCコンバータ104を介して電池110からの電力が供給される。DC−DCコンバータ104は、電池110からの直流電流の電圧値を異なる電圧値に変換して、荷重センサ94a〜94d、ADコンバータ102、および増幅器108に与える。
これら荷重センサ94a〜94d、ADコンバータ102、および増幅器108への電力供給は、マイコン100によるDC−DCコンバータ104の制御によって、必要に応じて行われるようにしてもよい。つまり、マイコン100は、荷重センサ94a〜94dを動作させて荷重を検出する必要があると判断される場合に、DC−DCコンバータ104を制御して、荷重センサ94a〜94d、ADコンバータ102、および増幅器108に電力を供給するようにしてよい。
電力が供給されると、荷重センサ94a〜94dは、入力された荷重を示す信号をそれぞれ出力する。これらの信号は、各増幅器108で増幅され、ADコンバータ102でアナログ信号からデジタルデータに変換されて、マイコン100に入力される。荷重センサ94a〜94dの検出値には荷重センサ94a〜94dの識別情報が付与されて、いずれの荷重センサ94a〜94dの検出値であるかが識別可能にされる。このようにして、マイコン100は、同一時刻における4つの荷重センサ94a〜94dそれぞれの荷重検出値を示すデータを取得することができる。
一方、マイコン100は、荷重センサ94a〜94dを動作させる必要がないと判断される場合、つまり、荷重検出タイミングでない場合、DC−DCコンバータ104を制御して、荷重センサ94a〜94d、ADコンバータ102、および増幅器108への電力の供給を停止する。このように、ボード型コントローラ9は、必要な場合にだけ、荷重センサ94a〜94dを動作させて荷重や距離の検出を行うことができるので、荷重検出のための電力消費を抑制することができる。
荷重検出が必要な場合とは、典型的には、ゲーム装置本体5(図1)が荷重データを取得したいときである。例えば、ゲーム装置本体5が荷重情報を必要とするとき、ゲーム装置本体5は、ボード型コントローラ9に対して情報取得命令を送信する。マイコン100は、ゲーム装置本体5から情報取得命令を受信したときに、DC−DCコンバータ104を制御して、荷重センサ94a〜94d等に電力を供給し、荷重を検出する。一方、マイコン100は、ゲーム装置本体5から情報取得命令を受信していないときには、DC−DCコンバータ104を制御して、荷重センサ94a〜94d等への電力供給を停止する。
なお、マイコン100は、一定時間ごとに荷重検出タイミングが到来すると判断して、DC−DCコンバータ104を制御するようにしてもよい。このような周期的な荷重検出を行う場合、周期情報は、例えば、ゲーム開始時点においてゲーム装置本体5からボード型コントローラ9のマイコン100に与えられて記憶されてもよいし、予めマイコン100にプリインストールされてもよい。
荷重センサ94a〜94dからの検出値を示すデータは、ボード型コントローラ9のボード操作データ(入力データ)として、マイコン100から無線モジュール106およびアンテナ106aを介してゲーム装置本体5に送信される。例えば、ゲーム装置本体5からの命令を受けて荷重検出を行った場合、マイコン100は、ADコンバータ102から荷重センサ94a〜94dの検出値データを受信したことに応じて、当該検出値データをゲーム装置本体5に送信する。なお、マイコン100は、一定時間ごとに上記検出値データをゲーム装置本体5に送信するようにしてもよい。荷重の検出周期よりも送信周期が長い場合には、送信タイミングまでに検出された複数の検出タイミングの荷重値を含むデータを送信すればよい。
なお、無線モジュール106は、ゲーム装置本体5のコントローラ通信モジュール19と同じ無線規格(Bluetooth、無線LANなど)で通信可能にされる。したがって、ゲーム装置本体5のCPU10は、コントローラ通信モジュール19等を介して情報取得命令をボード型コントローラ9に送信することができる。このように、ボード型コントローラ9は、無線モジュール106およびアンテナ106aを介して、ゲーム装置本体5からの命令を受信することができる。また、ボード型コントローラ9は、荷重センサ94a〜94dの荷重検出値(または荷重算出値)を含むボード操作データをゲーム装置本体5に送信することができる。
例えば4つの荷重センサ94a〜94dで検出される4つの荷重値の単なる合計値を用いて実行されるようなゲームの場合には、ユーザはボード型コントローラ9の4つの荷重センサ94a〜94dに対して任意の位置をとることができる。つまり、ユーザは、台9aの上の任意の位置に任意の向きで乗ってゲームをプレイすることができる。しかしながら、ゲームの種類によっては、4つの荷重センサ94で検出される荷重値がユーザから見ていずれの方向の荷重値であるかを識別して処理を行う必要がある。つまり、ボード型コントローラ9の4つの荷重センサ94とユーザとの位置関係が把握されている必要がある。この場合、例えば、4つの荷重センサ94とユーザとの位置関係を予め規定しておき、当該所定の位置関係が得られるようにユーザが台9a上に乗ることが前提とされてもよい。典型的には、台9aの中央に乗ったユーザの前後左右にそれぞれ荷重センサ94a〜94dが2つずつ存在するような位置関係、つまり、ユーザがボード型コントローラ9の台9aの中央に乗った位置関係が規定される。この場合、この実施例では、ボード型コントローラ9の台9aが平面視で矩形状に形成されるとともにその矩形の1辺(長辺)に電源ボタン9cが設けられているので、この電源ボタン9cを目印として利用して、ユーザには電源ボタン9cの設けられた長辺が所定の方向(前、後、左または右)に存在するようにして台9aに乗ってもらうことを予め決めておく。このようにすれば、荷重センサ94a〜94dで検出される荷重値は、ユーザから見て所定の方向(右前、左前、右後および左後)の荷重値となる。したがって、ボード型コントローラ9およびゲーム装置本体5は、荷重検出値データに含まれる荷重センサ94の識別情報と、予め設定(記憶)された荷重センサ94のユーザに対する位置または方向を示す配置データとに基づいて、各荷重検出値がユーザから見ていずれの方向に対応するかを把握することができる。これにより、例えば前後左右の操作方向や上げている足の区別のようなユーザによるゲーム操作の意図を把握することが可能になる。
次に、ゲーム装置本体5が行う具体的な処理を説明する前に、図9〜図17Bを用いてゲーム装置本体5で行う情報処理の概要について説明する。なお、図9は、端末装置6およびボード型コントローラ9を用いて操作するユーザの様子の一例を示す図である。図10Aは、端末装置6のLCD61に表示される画像の一例を示す図である。図10Bは、モニタ2に表示される画像の一例を示す図である。図11は、水平指示方向を示す端末装置6の姿勢の一例を示す図である。図12は、端末装置奥行方向が水平指示方向より仰角方向に向いている場合に設定される操作指示方向の一例を示す図である。図13は、端末装置奥行方向が水平指示方向より俯角方向に向いている場合に設定される操作指示方向の一例を示す図である。図14Aは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第1の例を示すグラフの一部である。図14Bは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第1の例を示すグラフ全体である。図15Aは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第2の例を示すグラフの一部である。図15Bは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第2の例を示すグラフ全体である。図16Aは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第3の例を示すグラフの一部である。図16Bは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第3の例を示すグラフ全体である。図17Aは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第4の例を示すグラフの一部である。図17Bは、端末装置6の上下角度をオフセット補正およびスケーリング補正する第4の例を示すグラフ全体である。
図9に示すように、ユーザは、端末装置6およびボード型コントローラ9を用いて操作する。具体的には、ユーザは、端末装置6を把持しながら、ボード型コントローラ9上に乗って操作する。そして、ユーザは、モニタ2に表示された画像や端末装置6のLCD61に表示された画像を見ながら、ボード型コントローラ9上で動作(例えば、足踏み動作や屈伸動作)するとともに、端末装置6自体を動かす操作をすることによってプレイする。そして、端末装置6のLCD61およびモニタ2には、ユーザが把持する端末装置6の方向や姿勢と、ボード型コントローラ9上におけるユーザ動作とに応じて、仮想世界においてプレイヤオブジェクトPoが動作(例えば、姿勢が変化する動作や移動方向や移動速度が変化する動作)し、プレイヤオブジェクトPoの位置や姿勢に応じて仮想世界に設定される仮想カメラの位置や姿勢を変化させたゲーム画像が表現される。
図10Aに示すように、端末装置6のLCD61には仮想世界内を移動するプレイヤオブジェクトPoが表示される。図10Aに示した一例では、海中を泳ぐプレイヤオブジェクトPoの背後近傍に仮想カメラが設定され、当該仮想カメラから見た仮想世界内の様子がプレイヤオブジェクトPoとともに表示されている。このように、プレイヤオブジェクトPoの背後近傍から見た仮想世界をLCD61に表示することによって、端末装置6を把持しているユーザに仮想世界の臨場感を与えるとともに、ユーザがプレイヤオブジェクトPoの移動方向や移動速度を直感的に知ることができる。また、端末装置6の姿勢を上下方向に変えたり(ピッチ)、端末装置6の向きが変わるように回転移動させたり(ヨー)、端末装置6を表示画面の奥行方向(z軸方向)周りに回転させたり(ロール)することによってプレイヤオブジェクトPoの姿勢や移動方向が変化するが、当該姿勢変化に応じて上記仮想カメラの位置や姿勢も変化する。例えば、端末装置6の姿勢および向きを上記仮想カメラの姿勢および向きに連動させることによって、ユーザは端末装置6のLCD61を介してあたかも仮想世界内を覗いているような感覚を味わうことができる。
また、図10Bに示すように、モニタ2にもLCD61に表示されている仮想世界と同じ仮想世界が表示される。図10Bに示した一例では、海中を泳ぐプレイヤオブジェクトPoを遠方から鳥瞰した仮想世界内の様子がプレイヤオブジェクトPoとともに表示されている。また、図10Bに示した一例では、海中を泳いだプレイヤオブジェクトPoの移動軌跡Lpが仮想世界内に表示される。このように、プレイヤオブジェクトPoを遠方から鳥瞰した仮想世界内の様子をモニタ2に表示することによって、ユーザがプレイヤオブジェクトPoの周囲の状況が把握しやすくなるとともに、ユーザがプレイしている様子を見ている他の人が仮想世界をプレイヤオブジェクトPoが移動する様子を楽しむこともできる。
一例として、ボード型コントローラ9上でユーザが足踏みするような動作をした場合、当該足踏み動作に応じた速度でプレイヤオブジェクトPoがバタ足して海中を泳ぐ動作をする。また、ボード型コントローラ9上でユーザが屈伸するような動作をした場合、当該屈伸動作に応じた速度でプレイヤオブジェクトPoがドルフィンキックして海中を泳ぐ動作をする。このように、ユーザは、ボード型コントローラ9上の動作によって、プレイヤオブジェクトPoの泳法や移動速度を変化させることができる。
例えば、上述したように、ボード型コントローラ9からはボード型コントローラ9上のユーザ動作に応じた荷重検出値が出力される。そして、上記荷重検出値を用いれば、ボード型コントローラ9に加わっている合計荷重やボード型コントローラ9に加わっている荷重の重心位置の算出が可能である。また、上記合計荷重の変化や重心位置の変化を用いれば、ユーザがボード型コントローラ9上でどのような動作をしているのか推定することが可能となる。このようなボード型コントローラ9上で推定されるユーザ動作に応じて、プレイヤオブジェクトPoの泳法や移動速度が設定される。
また、ユーザが把持する端末装置6の方向や姿勢に応じて、プレイヤオブジェクトPoが海中を泳ぐ姿勢や移動方向が変化する。一例として、ユーザが端末装置6自体を上下左右方向へ向ける(すなわち、ピッチおよびヨー)ことによって、当該方向変化に応じてプレイヤオブジェクトPoが海中を泳ぐ姿勢(プレイヤオブジェクトPoが仮想世界内で向く方向)が当該方向変化に連動して変化するとともに、泳ぐ方向も変化する。また、ユーザが把持する端末装置6を、LCD61の奥行方向(z軸方向)周りに回転させた場合(すなわち、ロールした場合)、端末装置6の方向や姿勢に応じて、プレイヤオブジェクトPoが海中を泳ぐ姿勢が変化する。具体的には、ユーザが端末装置6の背面を上方向へ向けるように端末装置6自体の方向を変えた場合(すなわち、仰角方向へピッチした場合)、プレイヤオブジェクトPoが海面方向へ上昇する方向へ向くように泳ぐ姿勢を変化させるとともに、海面方向へ上昇するように泳ぐ方向を変化させる。また、ユーザが端末装置6の背面を左方向へ向けるように端末装置6自体の方向を変えた場合(すなわち、左方向へヨーした場合)、プレイヤオブジェクトPoから見た左方向へ泳ぐ姿勢を変化させるとともに、左方向へ泳ぐ方向を変化させる。このように、ユーザは、把持する端末装置6の方向や姿勢によって、プレイヤオブジェクトPoの姿勢や移動方向を変化させることができる。例えば、端末装置6の姿勢および向きをプレイヤオブジェクトPoの姿勢および移動方向に連動させることによって、ユーザは端末装置6を用いて自分自身がプレイヤオブジェクトPoとなったかのようなリアリティある操作が可能となる。また、上述したように、海中を泳ぐプレイヤオブジェクトPoの背後近傍に仮想カメラが設定されるため、上記プレイヤオブジェクトPoの姿勢や移動方向が変化することによって、仮想カメラの姿勢や位置も変化する。例えば、端末装置6の姿勢および向きを上記仮想カメラの姿勢および向きに連動させることによって、ユーザは端末装置6のLCD61を介してあたかも仮想世界内を覗いているような感覚を味わうことができる。
上述したように、ユーザが把持する端末装置6の方向や姿勢に応じて、プレイヤオブジェクトPoが海中を泳ぐ姿勢や移動方向が変化する。本ゲーム例では、実空間における端末装置6のLCD61の奥行方向(z軸正方向;以下、端末装置奥行方向と記載することがある)に対応する仮想世界における操作指示方向を算出し、当該操作指示方向によってプレイヤオブジェクトPoの姿勢(プレイヤオブジェクトPoが仮想世界内で向く方向)や移動方向が設定される。これによって、端末装置6のLCD61に表示されている仮想世界の奥行方向を、プレイヤオブジェクトPoの向きや移動方向とすることができる。したがって、ユーザは、実空間における端末装置奥行方向を対応付けた仮想世界における操作指示方向をプレイヤオブジェクトPoの移動方向として設定できるとともに、その移動方向を奥行方向とした仮想世界がLCD61に表示されるために、移動方向を設定する操作が直感的で当該移動方向をユーザが所望する方向に合わせることが容易となる。また、端末装置6の3方向への回転操作に応じてプレイヤオブジェクトPoの移動方向や仮想カメラの視線方向を設定することも可能となるため、仮想世界においてユーザが希望する移動方向や視線方向をそのまま設定することが可能となる。
ここで、一般的にプレイヤオブジェクトPoの移動方向や仮想カメラの視線方向は、仮想世界における水平方向付近に設定する場合が多い。一方、端末装置6を把持するユーザは、仮想世界の水平方向付近に操作指示方向を設定する場合、端末装置奥行方向を実空間における水平方向に向けることになり、端末装置6のLCD61が実空間において垂直に起立した状態を保つことが必要となる。しかしながら、LCD61が実空間において垂直に起立した状態を保って端末装置6を把持する姿勢はユーザに負担が大きく、長時間のゲームプレイに向かないことがある。このような問題を解決するために、本ゲーム例では、端末装置奥行方向が実空間の水平方向に対して俯角方向に所定角度下を向いたような、ユーザにとって比較的楽な姿勢で端末装置6が把持された場合に、仮想世界の水平方向へ操作指示方向が設定されるようにオフセット補正する。
例えば、図11に示すように、実空間における端末装置6の端末装置奥行方向(z軸正方向)に対応して、仮想世界における操作指示方向が設定される。そして、ユーザが端末装置6を同じ姿勢に長時間維持しても比較的楽な操作姿勢における端末装置6の姿勢(例えば、端末装置奥行方向が実空間水平方向に対して角度A(例えば20°)だけ俯角方向に向いた状態。以下、基本姿勢と記載することがある)に対応して算出される操作指示方向が、仮想世界水平方向となるようにオフセット補正が行われる。以下、操作指示方向が仮想世界水平方向へ上記オフセット補正によって設定される端末装置奥行方向を、水平指示方向と記載することがある。
また、端末装置6を把持するユーザは、仮想世界の真上や真下方向に操作指示方向を設定する場合、端末装置奥行方向を実空間における真上や真下方向に向けることになる。しかしながら、端末装置6が仮想世界を表示する表示手段としても用いられているため、端末装置6のLCD61を見ながら端末装置奥行方向を実空間における真上や真下方向に向ける姿勢は、ユーザにとって負担が大きい体勢となるため操作が難しくなる。このような問題を解決するために、本ゲーム例では、実空間における端末装置奥行方向を仮想世界に対応付けて操作指示方向に変換する際、所定のスケーリングを行ってユーザの負担を軽減している。
例えば、図12に示すように、端末装置6は、水平指示方向(すなわち、実空間水平方向に対して角度Aだけ俯角方向に向いた方向)から角度Bだけ仰角方向へ端末装置奥行方向が向いた状態となっている。そして、端末装置奥行方向から変換された操作指示方向が、プレイヤオブジェクトPoの移動方向および仮想カメラの視線方向(Z軸正方向)にそれぞれ設定されている。この端末装置6の状態に対して設定される操作指示方向は、仮想世界水平方向に対して角度Cだけ仰角方向に向いた方向に設定される。ここで、角度Cは、角度Bに所定のスケーリング補正をした値であり、角度Bの関数f(B)で算出される。なお、図12に示した例では、角度Cが角度Bより大きく設定されているため、水平指示方向と端末装置奥行方向との差角が相対的に小さい端末装置6の姿勢であっても、仮想世界水平方向に対して相対的に大きな仰角となった操作指示方向が設定される。
また、図13に示すように、端末装置6は、水平指示方向から角度Dだけ俯角方向へ端末装置奥行方向が向いた状態となっている。そして、端末装置奥行方向から変換された操作指示方向が、プレイヤオブジェクトPoの移動方向および仮想カメラの視線方向(Z軸正方向)にそれぞれ設定されている。この端末装置6の状態に対して設定される操作指示方向は、仮想世界水平方向に対して角度Eだけ俯角方向に向いた方向に設定される。ここで、角度Eは、角度Dに所定のスケーリング補正をした値であり、角度Dの関数f(D)で算出される。なお、図13に示した例では、角度Eが角度Dより大きく設定されているため、水平指示方向と端末装置奥行方向との差角が相対的に小さい端末装置6の姿勢であっても、仮想世界水平方向に対して相対的に大きな俯角となった操作指示方向が設定される。
実空間における端末装置奥行方向を仮想世界に対応付けてオフセット補正およびスケーリング補正して操作指示方向に変換する際に用いられる関数は、ゲームに要求される操作環境に応じて、適宜設定することができる。例えば、第1の例として、図14Aおよび図14Bに示すように、端末装置奥行方向(端末装置上下角度θr)を線形変換することによって、操作指示方向(仮想世界上下角度θv)が算出される。ここで、図14Aおよび図14Bのグラフは、端末装置奥行方向を操作指示方向に変換した場合の、実空間における水平方向を角度0°とした端末装置奥行方向の角度(端末装置上下角度θr)と、仮想世界における水平方向を角度0°とした操作指示方向の角度(仮想世界上下角度θv)との関係を示している。そして、上記グラフは、水平方向に対する仰角を正の値で示し、水平方向に対する俯角を負の値で示している。なお、図14Aに示す角度θrhは、上記水平指示方向を示す端末装置上下角度θrであり、当該水平指示方向の実空間水平方向からの差角(俯角;例えば−20°)を示している。角度θroは、操作指示方向が仮想世界において真上方向(仮想世界上下角度θv=+90°)に設定される、端末装置奥行方向(真上指示方向)の端末装置上下角度θr(例えば+35°)を示している。角度θruは、操作指示方向が仮想世界において真下方向(仮想世界上下角度θv=−90°)に設定される、端末装置奥行方向(真下指示方向)の端末装置上下角度θr(例えば−75°)を示している。
図14Aに示した第1の例では、端末装置上下角度θrがθrh(例えば−20°)であるときに仮想世界上下角度θvが水平(0°)となるように、端末装置奥行方向が操作指示方向に変換(オフセット補正)される。また、角度θru〜角度θroの範囲で傾き(スケーリング倍率)が1より大きい1次関数(すなわち、θro−θrh<90°、θrh−θru<90°)を用いて、端末装置奥行方向が操作指示方向に線形変換(スケーリング補正)される。したがって、水平指示方向と端末装置奥行方向との差角を所定の比率で拡大補正した角度が、仮想世界水平方向と操作指示方向との差角となる。例えば、ユーザが、端末装置奥行方向を水平指示方向(例えば、θr=−20°)から真上指示方向(例えば、θr=+35°)に変化させた場合であっても、端末装置奥行方向の回転量が90°未満(例えば、55°)となるが、上記スケーリング補正によって、実空間における90°未満の端末装置奥行方向の回転量が実質的に90°に補正される。したがって、実空間における真上や真下に端末装置奥行方向を向けなくとも、仮想世界の真上や真下方向に操作指示方向を設定することが可能となる。
また、図14Aおよび図14Bの例では、真上指示方向よりさらに仰角方向となる範囲(θr>θroであって操作指示方向が再び俯角方向へ変化し始めるまでの範囲。例えば、+35°<θr<+145°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真上方向に固定されて設定される。さらに、図14Aおよび図14Bの例では、真下指示方向よりさらに仰角方向となる範囲(θr<θruであって操作指示方向が再び仰角方向へ変化し始めるまでの範囲。例えば、−105°<θr<−75°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真下方向に固定されて設定される。つまり、ユーザが真上指示方向よりさらに仰角方向となる範囲または真下指示方向よりさらに俯角方向となる範囲に端末装置奥行方向が向くように端末装置6を操作した場合、仮想世界の真上方向または真下方向が操作指示方向として設定されることになる。
なお、図14Bに示すように、操作指示方向が仮想世界の真上方向に固定されて設定される範囲を超えてさらに端末装置6がピッチして回転した場合(例えば、θr>+145°)、上記1次関数の傾きを負(すなわち、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる傾きであり、傾き(スケーリング倍率)が−1より小さい)にした1次関数を用いて、端末装置奥行方向が操作指示方向に線形変換される。そして、さらに端末装置6がピッチして回転すると、再び操作指示方向が仮想世界の真下方向に設定される角度(例えば、θr=+255°、すなわちθr=−105°)に到達し、当該角度以降は上述した操作指示方向が仮想世界の真下方向に固定されて設定される範囲(すなわち、例えば、−105°<θr<−75°)となる。このように、端末装置6をピッチ方向に回転し続けた場合、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる操作指示方向の変換方式を360°でループさせて、端末装置奥行方向が操作指示方向に変換される。
第2の例として、図15Aに示すように、端末装置上下角度θrがθrh(例えば−20°)であるときに仮想世界上下角度θvが水平(0°)となるように、端末装置奥行方向が操作指示方向に変換(オフセット補正)される。また、端末装置奥行方向(端末装置上下角度θr)を非線形変換(スケーリング補正)することによって、操作指示方向(仮想世界上下角度θv)が算出される。図15Aに示した第2の例では、角度θru〜角度θroの範囲で2次関数、高次関数、正弦関数、対数関数等の非線形関数を用いて、端末装置奥行方向が操作指示方向に変換される。ここで、第2の例では、水平指示方向の角度θrhから真上指示方向の角度θroまたは真下指示方向の角度θruへ離れるにつれて、角度θru〜角度θroの範囲内で傾き(スケーリング倍率)が漸増的に増大して1より大きくなる非線形関数が用いられる。例えば、水平指示方向の角度θrh付近ではスケーリング倍率が相対的に小さく、真上指示方向の角度θroおよび真下指示方向の角度θru付近ではスケーリング倍率が相対的に大きい非線形関数が用いられ、θro−θrh<90°およびθrh−θru<90°となる。したがって、第2の例では、水平指示方向の角度θrh付近ではスケーリング倍率が相対的に小さいために、仮想世界水平方向付近に操作指示方向が設定されやすい操作環境となる。また、第2の例でも、端末装置奥行方向を水平指示方向(例えば、θr=−20°)から真上指示方向(例えば、θr=+35°)にユーザが変化させた場合であっても、端末装置奥行方向の回転量が90°未満(例えば、55°)となるが、上記スケーリング補正によって、実空間における90°未満の端末装置奥行方向の回転量が実質的に90°に補正される。したがって、実空間における真上や真下に端末装置奥行方向を向けなくとも、仮想世界の真上や真下方向に操作指示方向を設定することが可能となる。
また、真上指示方向の角度θroおよび真下指示方向の角度θru付近ではスケーリング倍率が相対的に大きいために、水平指示方向と端末装置奥行方向との差角を所定の比率で拡大補正した角度が、仮想世界水平方向と操作指示方向との差角となる。また、図15Aおよび図15Bの例でも、真上指示方向よりさらに仰角方向となる範囲(θr>θroであって操作指示方向が再び俯角方向へ変化し始めるまでの範囲。例えば、+35°<θr<+145°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真上方向に固定されて設定される。さらに、図15Aおよび図15Bの例でも、真下指示方向よりさらに仰角方向となる範囲(θr<θruであって操作指示方向が再び仰角方向へ変化し始めるまでの範囲。例えば、−105°<θr<−75°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真下方向に固定されて設定される。つまり、ユーザが真上指示方向よりさらに仰角方向となる範囲または真下指示方向よりさらに俯角方向となる範囲に端末装置奥行方向が向くように端末装置6を操作した場合、仮想世界の真上方向または真下方向が操作指示方向として設定されることになる。
なお、図15Bに示すように、第1の例と同様に、操作指示方向が仮想世界の真上方向に固定されて設定される範囲を超えてさらに端末装置6がピッチして回転した場合(例えば、θr>+145°)、上記非線形関数の傾きを負(すなわち、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる傾き)にした非線形関数を用いて、端末装置奥行方向が操作指示方向に非線形変換される。そして、さらに端末装置6がピッチして回転すると、再び操作指示方向が仮想世界の真下方向に設定される角度(例えば、θr=+255°、すなわちθr=−105°)に到達し、当該角度以降は上述した操作指示方向が仮想世界の真下方向に固定されて設定される範囲(すなわち、例えば、−105°<θr<−75°)となる。このように、端末装置6をピッチ方向に回転し続けた場合、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる操作指示方向の変換方式を360°でループさせて、端末装置奥行方向が操作指示方向に変換される。
第3の例として、図16Aに示すように、端末装置上下角度θrがθrh(例えば−20°)であるときに仮想世界上下角度θvが水平(0°)となるように、端末装置奥行方向が操作指示方向に変換(オフセット補正)される。また、端末装置奥行方向(端末装置上下角度θr)を第2の例と同様に非線形変換(スケーリング補正)することによって、操作指示方向(仮想世界上下角度θv)が算出される。図16Aに示した第3の例では、角度θru〜角度θroの範囲で2次関数、高次関数、正弦関数、対数関数等の非線形関数を用いて、端末装置奥行方向が操作指示方向に変換される。ここで、第3の例では、水平指示方向の角度θrhから真上指示方向の角度θroまたは真下指示方向の角度θruへ離れるにつれて、角度θru〜角度θroの範囲内で1より大きい傾き(スケーリング倍率)が漸減的に減少する非線形関数が用いられる。例えば、水平指示方向の角度θrh付近ではスケーリング倍率が相対的に大きく、真上指示方向の角度θroおよび真下指示方向の角度θru付近ではスケーリング倍率が相対的に小さい非線形関数が用いられ、θro−θrh<90°およびθrh−θru<90°となる。したがって、第3の例では、水平指示方向の角度θrh付近ではスケーリング倍率が相対的に大きいために、仮想世界水平方向付近から操作指示方向が変化する速度が相対的に速く、水平指示方向と端末装置奥行方向との差角を所定の比率で拡大補正した角度が、仮想世界水平方向と操作指示方向との差角となる。また、第3の例でも、端末装置奥行方向を水平指示方向(例えば、θr=−20°)から真上指示方向(例えば、θr=+35°)にユーザが変化させた場合であっても、端末装置奥行方向の回転量が90°未満(例えば、55°)となるが、上記スケーリング補正によって、実空間における90°未満の端末装置奥行方向の回転量が実質的に90°に補正される。したがって、実空間における真上や真下に端末装置奥行方向を向けなくとも、仮想世界の真上や真下方向に操作指示方向を設定することが可能となる。
また、図16Aおよび図16Bの例でも、真上指示方向よりさらに仰角方向となる範囲(θr>θroであって操作指示方向が再び俯角方向へ変化し始めるまでの範囲。例えば、+35°<θr<+145°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真上方向に固定されて設定される。さらに、図16Aおよび図16Bの例でも、真下指示方向よりさらに仰角方向となる範囲(θr<θruであって操作指示方向が再び仰角方向へ変化し始めるまでの範囲。例えば、−105°<θr<−75°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真下方向に固定されて設定される。つまり、ユーザが真上指示方向よりさらに仰角方向となる範囲または真下指示方向よりさらに俯角方向となる範囲に端末装置奥行方向が向くように端末装置6を操作した場合、仮想世界の真上方向または真下方向が操作指示方向として設定されることになる。
なお、図16Bに示すように、第1の例と同様に、操作指示方向が仮想世界の真上方向に固定されて設定される範囲を超えてさらに端末装置6がピッチして回転した場合(例えば、θr>+145°)、上記非線形関数の傾きを負(すなわち、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる傾き)にした非線形関数を用いて、端末装置奥行方向が操作指示方向に非線形変換される。そして、さらに端末装置6がピッチして回転すると、再び操作指示方向が仮想世界の真下方向に設定される角度(例えば、θr=+255°、すなわちθr=−105°)に到達し、当該角度以降は上述した操作指示方向が仮想世界の真下方向に固定されて設定される範囲(すなわち、例えば、−105°<θr<−75°)となる。このように、端末装置6をピッチ方向に回転し続けた場合、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる操作指示方向の変換方式を360°でループさせて、端末装置奥行方向が操作指示方向に変換される。
第4の例として、図17Aに示すように、端末装置上下角度θrがθrh(例えば−20°)であるときに仮想世界上下角度θvが水平(0°)となるように、端末装置奥行方向が操作指示方向に変換(オフセット補正)される。また、端末装置上下角度θrの値に応じて異なる関数用いて、端末装置奥行方向(端末装置上下角度θr)を操作指示方向(仮想世界上下角度θv)に変換(スケーリング補正)する。図17Aに示した第4の例では、角度θruと角度θrhとの間に関数切替角度θr1を設け、角度θrhと角度θroとの間に関数切替角度θr2を設ける。ここで、典型的には、角度θrhが角度θr1と角度θr2との中間となるように設定され、θr2−θrh=θrh−θr1となる。そして、角度θr1〜角度θr2の範囲では、傾き(スケーリング倍率)が相対的に小さい(例えば、傾き=1)1次関数を用いて、端末装置奥行方向が操作指示方向に変換される。また、角度θru〜角度θr1の範囲および角度θr2〜角度θroの範囲では、傾き(スケーリング倍率)が相対的に大きい(例えば、傾き>1)1次関数を用いて、端末装置奥行方向が操作指示方向に変換される。したがって、第4の例では、水平指示方向の角度θrh付近ではスケーリング倍率が相対的に小さいために、仮想世界水平方向付近に操作指示方向が設定されやすい操作環境となる。また、真上指示方向の角度θroおよび真下指示方向の角度θru付近ではスケーリング倍率が相対的に大きいために、水平指示方向と端末装置奥行方向との差角を所定の比率で拡大補正した角度が、仮想世界水平方向と操作指示方向との差角となる。また、第4の例でも、端末装置奥行方向を水平指示方向(例えば、θr=−20°)から真上指示方向(例えば、θr=+35°)にユーザが変化させた場合であっても、端末装置奥行方向の回転量が90°未満(例えば、55°)となるが、上記スケーリング補正によって、実空間における90°未満の端末装置奥行方向の回転量が実質的に90°に補正される。したがって、実空間における真上や真下に端末装置奥行方向を向けなくとも、仮想世界の真上や真下方向に操作指示方向を設定することが可能となる。
また、図17Aおよび図17Bの例でも、真上指示方向よりさらに仰角方向となる範囲(θr>θroであって操作指示方向が再び俯角方向へ変化し始めるまでの範囲。例えば、+35°<θr<+145°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真上方向に固定されて設定される。さらに、図17Aおよび図17Bの例でも、真下指示方向よりさらに仰角方向となる範囲(θr<θruであって操作指示方向が再び仰角方向へ変化し始めるまでの範囲。例えば、−105°<θr<−75°)に端末装置奥行方向が設定された場合、操作指示方向が仮想世界の真下方向に固定されて設定される。つまり、ユーザが真上指示方向よりさらに仰角方向となる範囲または真下指示方向よりさらに俯角方向となる範囲に端末装置奥行方向が向くように端末装置6を操作した場合、仮想世界の真上方向または真下方向が操作指示方向として設定されることになる。
なお、図17Bに示すように、第1の例と同様に、操作指示方向が仮想世界の真上方向に固定されて設定される範囲を超えてさらに端末装置6がピッチして回転した場合(例えば、θr>+145°)、上記1次関数の傾きを負(すなわち、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる傾き)にした1次関数を用いて、端末装置奥行方向が操作指示方向に線形変換される。そして、さらに端末装置6がピッチして回転すると、再び操作指示方向が仮想世界の真下方向に設定される角度(例えば、θr=+255°、すなわちθr=−105°)に到達し、当該角度以降は上述した操作指示方向が仮想世界の真下方向に固定されて設定される範囲(すなわち、例えば、−105°<θr<−75°)となる。このように、端末装置6をピッチ方向に回転し続けた場合、操作指示方向が仮想世界の真上方向に固定されて設定される範囲の中心を通るθv軸に平行な直線(例えば、θr=+90°)を軸として線対称となる操作指示方向の変換方式を360°でループさせて、端末装置奥行方向が操作指示方向に変換される。
また、上記第4の例で用いる関数は、少なくとも1つの関数が1次関数でなくてもかまわない。例えば、2次関数、高次関数、正弦関数、対数関数等の非線形関数と1次関数とを組み合わせる、または当該非線形関数のみを用いて上記第4の例で用いる関数を構成してもかまわない。
また、上記第1の例〜第4の例では、角度θroから角度θrhまでの差角(例えば、55°)と角度θrhから角度θruまでの差角(例えば、55°)とが同じ角度となる例を記載しているが、両者の差角を異なる角度に設定してもかまわない。
また、上記第1の例〜第4の例では、仮想世界における真上方向を仮想世界上下角度θv=+90°に設定し、仮想世界における真下方向を仮想世界上下角度θv=−90°に設定する例を用いたが、真上指示方向または真下指示方向に設定された端末装置奥行方向が変換される仮想世界における真上方向または真下方向を示す仮想世界上下角度θvは、他の角度であってもかまわない。仮想世界における真上方向や真下方向を示す仮想世界上下角度θvは、実質的に+90°や−90°を示す他の角度でもいいし、仮想世界の設定に応じて少なくとも一方の角度を+90°や−90°とは異なる角度に設定してもかまわない。
ここで、端末装置6からは、端末装置6の姿勢変化に応じた加速度データや角速度データが出力されている。そして、上記加速度データが示す加速度を用いれば、端末装置6に作用している重力加速度の方向が算出できるため、実空間における鉛直方向を基準として端末装置6がどのような姿勢になっているのか、すなわち鉛直方向を基準とした端末装置6のxyz軸方向を推定することができる。また、上記角速度データが示す角速度および/または上記加速度データが示す加速度を用いれば、端末装置6に作用している角速度や動的な加速度がわかるため、これらの角速度および/または動的な加速度を用いて、実空間における端末装置6の初期姿勢からの姿勢変化、(すなわち、xyz各軸周りのxyz軸の方向変化)を推定することができる。このように推定される端末装置6の姿勢(xyz軸方向)に上述したようなスケーリング補正を行うことによって、スケーリング補正後の端末装置奥行方向や端末装置上方向(y軸正方向)が得られ、当該補正後の端末装置奥行方向や端末装置上方向を用いてプレイヤオブジェクトPoの姿勢や移動方向および仮想カメラの姿勢や位置が設定される。
次に、ゲームシステム1において行われる情報処理の詳細を説明する。まず、図18を参照して、当該情報処理において用いられる主なデータについて説明する。なお、図18は、ゲーム装置本体5の外部メインメモリ12および/または内部メインメモリ35(以下、2つのメインメモリを総称して、単にメインメモリと記載する)に記憶される主なデータおよびプログラムの一例を示す図である。
図18に示すように、メインメモリのデータ記憶領域には、ボード操作データDa、端末操作データDb、荷重値データDc、重心位置データDd、端末装置方向姿勢データDe、操作方向データDf、動作姿勢データDg、移動ベクトルデータDh、位置データDi、仮想カメラデータDj、移動軌跡データDk、動作モードフラグデータDm、および画像データDn等が記憶される。なお、メインメモリには、図18に示す情報に含まれるデータの他、モニタ2やLCD61に表示される各種オブジェクトの画像データやゲームに使用される音声データ等、ゲーム処理に必要なデータが適宜記憶される。また、メインメモリのプログラム記憶領域には、上記情報処理プログラムを構成する各種プログラム群Paが記憶される。
ボード操作データDaは、ボード型コントローラ9から送信データとして送信されてくる一連の操作情報(ボード操作データ)が格納され、最新のボード操作データに更新される。例えば、ボード操作データDaは、荷重データDa1等を含んでいる。荷重データDa1は、ボード型コントローラ9の荷重センサ94a〜94dがそれぞれ検出した荷重検出値を示すデータである。
端末操作データDbは、端末装置6から送信データとして送信されてくる一連の操作情報(端末操作データ)が格納され、最新の端末操作データに更新される。例えば、端末操作データDbは、加速度データDb1および角速度データDb2等を含んでいる。加速度データDb1は、加速度センサ603によって検出された加速度(加速度ベクトル)を表すデータである。例えば、加速度データDb1は、図3に示すxyzの3軸の方向に関する加速度を各成分とする3次元の加速度を表すものであるが、他の例においては、任意の1以上の方向に関する加速度を表すものであってもよい。角速度データDb2は、ジャイロセンサ604によって検出された角速度を表すデータである。例えば、角速度データDb2は、図3に示すxyzの3軸回りのそれぞれの角速度を表すものであるが、他の例においては、任意の1軸以上の軸回り角速度を表すものであってもよい。
なお、ゲーム装置本体5は、コントローラ7、ボード型コントローラ9、および端末装置6からそれぞれ所定周期毎(例えば、1/200秒毎)に送信される操作情報に含まれるデータ(例えば、荷重検出値、加速度、および角速度を示すデータ)を逐次受信している。例えば、受信されたデータは、入出力プロセッサ31によってメインメモリに逐次記憶される。後述する処理フローでは、CPU10が最新のボード操作データおよび端末操作データを1フレーム毎(例えば、1/60秒毎)にメインメモリから読み出して、ボード操作データDaおよび端末操作データDbをそれぞれ更新する例を用いる。
また、コントローラ7、ボード型コントローラ9、および端末装置6からそれぞれ所定周期毎に送信される操作情報は、コントローラ通信モジュール19や端末通信モジュール28等に備える図示しないバッファに一旦蓄えられてもよい。この場合、上記バッファに蓄えられたデータが、1フレーム毎に読み出されて、メインメモリのボード操作データDa(例えば、荷重データDa1)や端末操作データDb(例えば、加速度データDb1および角速度データDb2)が更新されて用いられる。このとき、操作情報を受信する周期と処理周期とが異なるために、上記バッファには複数の時点に受信した操作情報が記述されていることになるが、複数の時点に受信した操作情報のうち最新の操作情報のみを用いて当該処理を実行してもいいし、複数の時点に受信した操作情報の代表値(例えば、平均値)を用いて当該処理を実行してもいいし、複数の時点に受信した操作情報の個数分処理を実行してもよい。
荷重値データDcは、ボード型コントローラ9が検出する荷重値を示すデータの集合である。例えば、荷重値データDcは、荷重センサ94a〜94dがそれぞれ検出した荷重の合計値(合計荷重値)を示すデータの集合である。具体的には、荷重値データDcは、時系列的に算出された所定期間内の上記合計荷重値を示すデータの配列であり、配列の各要素に上記合計荷重値を示すデータが時系列に格納される。
重心位置データDdは、ボード型コントローラ9に加わっている荷重の重心位置を示すデータの集合である。例えば、重心位置データDdは、荷重センサ94a〜94dがそれぞれ検出した荷重値から所定の数式を用いて算出される重心位置を示すデータの集合である。具体的には、重心位置データDdは、時系列的に算出された所定期間内の上記重心位置を示すデータの配列であり、配列の各要素に上記重心位置を示すデータが時系列に格納される。
端末装置方向姿勢データDeは、実空間基準方向データDe1、端末装置奥行方向データDe2、端末装置上方向データDe3、および端末装置右方向データDe4等を含んでいる。実空間基準方向データDe1は、実空間におけるスケーリング補正した後の端末装置6の基準方向(姿勢;実空間基準方向)を示すデータである。端末装置奥行方向データDe2は、実空間おけるスケーリング補正した後の端末装置6の現時点の奥行方向(z軸正方向;端末装置奥行方向)を示すデータである。端末装置上方向データDe3は、実空間におけるスケーリング補正した後の端末装置6の現時点の上方向(y軸正方向;端末装置上方向)を示すデータである。端末装置右方向データDe4は、実空間におけるスケーリング補正した後の端末装置6の現時点の右方向(x軸正方向;端末装置右方向)を示すデータである。例えば、実空間基準方向データDe1、端末装置奥行方向データDe2、端末装置上方向データDe3、および端末装置右方向データDe4は、加速度データDb1および角速度データDb2に基づいて算出される。実空間基準方向、端末装置奥行方向、端末装置上方向、および端末装置右方向の算出方法については、後述する。
操作方向データDfは、仮想世界基準方向データDf1、操作指示方向データDf2、および操作上方向データDf3等を含んでいる。仮想世界基準方向データDf1は、仮想世界において設定される基準方向を示すデータである。操作指示方向データDf2は、仮想世界に対して現時点でユーザから指示されている操作指示方向を示すデータである。操作上方向データDf3は、仮想世界に対して現時点でユーザから指示されている操作上方向を示すデータである。仮想世界基準方向、操作指示方向、および操作上方向の算出方法については、後述する。
動作姿勢データDgは、仮想世界におけるプレイヤオブジェクトPoの動作や姿勢を示すデータである。移動ベクトルデータDhは、仮想世界におけるプレイヤオブジェクトPoの移動速度および移動方向を示すデータ(例えば、仮想世界における移動ベクトルを示すデータ)である。位置データDiは、仮想世界におけるプレイヤオブジェクトPoの位置を示すデータである。仮想カメラデータDjは、仮想世界に設定される仮想カメラに関するデータである。例えば、仮想カメラデータDjは、端末装置6のLCD61に表示するゲーム画像を生成するための第1仮想カメラに関するデータと、モニタ2に表示するゲーム画像を生成するための第2仮想カメラに関するデータとを含む。移動軌跡データDkは、仮想世界においてプレイヤオブジェクトPoが移動した軌跡を示すデータである。
動作モードフラグデータDmは、プレイヤオブジェクトPoに設定されている動作(例えば、泳法)に応じて設定される動作モードフラグを示すデータである。一例として、ボード型コントローラ9上でユーザが屈伸するような動作をした場合、プレイヤオブジェクトPoの動作がドルフィンキックして海中を泳ぐ動作に設定されて動作モードフラグがオンに設定される。
画像データDnは、プレイヤオブジェクトデータDn1および背景画像データDn2等を含んでいる。プレイヤオブジェクトデータDn1は、仮想世界にプレイヤオブジェクトPoを配置してゲーム画像を生成するためのデータである。背景画像データDn2は、仮想世界に背景を配置してゲーム画像を生成するためのデータである。
次に、図19〜図23を参照して、ゲーム装置本体5において行われる情報処理の詳細を説明する。なお、図19は、ゲーム装置本体5において実行される情報処理の一例を示すフローチャートである。図20は、図19におけるステップ45のゲーム制御処理の一例を示すサブルーチンである。図21は、図20におけるステップ83のプレイヤオブジェクト設定処理の一例を示すサブルーチンである。図22は、図21におけるステップ127のプレイヤオブジェクト動作設定処理の一例を示すサブルーチンである。図23は、実空間の水平面に投影した実空間基準方向および端末装置奥行方向と仮想世界の水平面に投影した仮想世界基準方向および操作指示方向との関係の一例を説明するための図である。図24は、実空間の鉛直面に投影した端末装置奥行方向および仮想世界の鉛直面に投影した操作指示方向の関係と、端末装置上方向(ロール角度)に対応する回転動作との一例を説明するための図である。ここで、図19〜図22に示すフローチャートにおいては、処理のうち、端末装置6およびボード型コントローラ9を用いたユーザの操作に応じて、プレイヤオブジェクトPoが動作して表示される処理について主に説明し、本願発明と直接関連しない他の処理については詳細な説明を省略する。また、図19〜図22では、CPU10が実行する各ステップを「S」と略称する。
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU10は、ROM/RTC13に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶された情報処理プログラムがメインメモリに読み込まれ、CPU10によって当該プログラムの実行が開始される。図19〜図22に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
図19において、CPU10は、初期処理を実行し(ステップ40)、次のステップに処理を進める。例えば、上記ステップ40における初期処理において、CPU10は、仮想世界を構築し、ゲーム空間に登場するプレイヤオブジェクトPoや各オブジェクトを初期位置に配置したり、ゲーム処理で用いる各種パラメータの初期値を設定したりする。
次に、CPU10は、端末装置6から送信されてくるデータに基づいて、オフセット補正およびスケーリング補正した端末装置6の姿勢や動きを算出し(ステップ41)、次のステップに処理を進める。以下、CPU10がスケーリング補正する一例について説明する。
端末装置6は、上述したようなデータをゲーム装置本体5へ繰り返し送信している。ゲーム装置本体5においては、端末通信モジュール28が上記データを逐次受信し、入出力プロセッサ31が端末操作データとカメラ画像データとマイク音データとをメインメモリに逐次記憶する。上記ステップ42においては、CPU10は、メインメモリから最新の端末操作データを読み出して加速度データDb1および角速度データDb2を更新する。
次に、CPU10は、加速度データDb1および角速度データDb2から得られる実空間における端末装置6の姿勢や動きをスケーリング補正して、当該スケーリング補正後の端末装置6の姿勢や動きを示すデータを用いて端末装置方向姿勢データDeを更新する。例えば、CPU10は、角速度データDb2が示す角速度を用いて、端末装置6の単位時間当たりにおける実空間での回転量(方向変化量)を算出することができる。また、実空間において端末装置6がほぼ静止している状態(静的な状態)では、端末装置6に対して加えられる加速度が重力加速度となるため、加速度データDb1が示す加速度によって端末装置6に加えられる重力方向(すなわち、実空間における鉛直方向を基準とした端末装置6の姿勢)を算出することができる。したがって、CPU10は、加速度データDb1が示す加速度および角速度データDb2が示す角速度に基づいて、実空間における端末装置6の姿勢や動きを算出することができる。なお、以下の説明においては、実空間における端末装置6のx軸正方向を長さ1のベクトルVax、y軸正方向を長さ1のベクトルVay、長さ1のz軸正方向をベクトルVazでそれぞれ示す。
次に、CPU10は、実空間における端末装置6の姿勢をオフセット補正およびスケーリング補正する。まず、CPU10は、実空間における水平面に対するベクトルVazの角度を算出し、予め設定された補正関数に基づいて当該角度を変換する。例えば、図14Aに示した第1の例の1次関数を用いる場合、実空間の水平面に対してベクトルVazの向きが下方へ20°(すなわち、端末装置上下角度θr=−20°)である場合、0°に変換される。また、実空間の水平面に対してベクトルVazの向きが上方へ35°(すなわち、端末装置上下角度θr=+35°)である場合、90°に変換される。そして、ベクトルVazの方向が実空間の水平面に対して変換後の角度となるように、ベクトルVazの鉛直方向成分である鉛直方向成分ベクトルVgzの長さを変化させて鉛直方向成分ベクトルVgzを更新してオフセット補正およびスケーリング補正する。そして、ベクトルVazの長さを1にするために、ベクトルVazの水平方向成分ベクトルVhzの長さを下記の数式によって算出される水平方向成分ベクトルVhzの長さに更新して、補正後の鉛直方向成分ベクトルVgzに補正後の水平方向成分ベクトルVhzを加算することによって、補正後のベクトルVazcを求める。
次に、CPU10は、補正後のベクトルVazcとベクトルVayとの外積によって新たにベクトルVaxcを算出する。そして、新たに算出されたベクトルVaxcとベクトルVazcとの外積によって新たにベクトルVaycを算出する。これによって、実空間における端末装置6の姿勢を示すベクトルVax、Vay、Vazが、ベクトルVaxc、Vayc、Vazcにオフセット補正およびスケーリング補正される。そして、CPU10は、オフセット補正およびスケーリング補正されたベクトルVaxc、Vayc、およびVazcをそれぞれ端末装置右方向、端末装置上方向、および端末装置奥行方向として、端末装置右方向データDe4、端末装置上方向データDe3、および端末装置奥行方向データDe2を更新する。
次に、CPU10は、基準方向を設定し(ステップ42)、次のステップに処理を進める。例えば、CPU10は、端末装置奥行方向データDe2が示す端末装置奥行方向を実空間における基準方向(初期姿勢)として設定し、当該端末装置奥行方向を示すデータを用いて実空間基準方向データDe1を更新する。また、上記ステップ42において、仮想世界においてプレイヤオブジェクトPoが向いている現時点の方向(例えば、そのまま移動する場合に移動方向となる方向)を仮想世界における基準方向(初期姿勢)として算出し、算出された仮想世界の基準方向を示すデータを用いて仮想世界基準方向データDf1を更新する。
なお、端末装置6の初期姿勢は、加速度データDb1が示す加速度に基づいて算出されてもよいし、磁気センサ602が検出した磁気の方向に基づいて算出されてもよいし、端末装置6を特定の姿勢にした状態でユーザに所定の操作を行わせることで、所定の操作が行われた時点における特定の姿勢を初期姿勢として用いるようにしてもよい。なお、実空間における所定方向を基準とした絶対的な姿勢として端末装置6の姿勢を算出する場合には上記初期姿勢を算出することが必要となる。上記初期姿勢を設定するタイミング、すなわち上記ステップ42を実行するタイミングは、ゲーム開始時点に自動的に行われてもいいし、端末装置6を用いてユーザが所定の操作(例えば、所定の操作ボタン64を押下する操作)を行ったことに応じて行われてもかまわない。
上記ステップ42の次にステップ43の処理が実行される。以降、ステップ43〜ステップ52の一連の処理からなる処理ループが所定時間(1フレーム時間)に1回の割合で繰り返し実行される。
ステップ43において、CPU10は、ボード型コントローラ9から送信されてくるボード操作データを取得し、次のステップに処理を進める。ここで、ボード型コントローラ9は、ボード操作データをゲーム装置本体5へ繰り返し送信している。したがって、ゲーム装置本体5においては、コントローラ通信モジュール19が上記ボード操作データを逐次受信し、受信されたボード操作データが入出力プロセッサ31によってメインメモリに逐次記憶される。ボード型コントローラ9のボード操作データ送信の間隔は、ゲームの処理時間(1フレーム時間)よりも短い方が好ましく、例えば200分の1秒である。上記ステップ43においては、CPU10は、メインメモリから最新のボード操作データを読み出して荷重データDa1を更新する。なお、上記ボード操作データには、荷重センサ94a〜94dの識別情報を示すデータおよび荷重センサ94a〜94dがそれぞれ検出した荷重検出値を示すデータが含まれており、当該識別情報によって区別されたデータをそれぞれ用いて、荷重データDa1が更新される。
次に、CPU10は、端末装置6から送信されてくる各種のデータを取得し(ステップ44)、次のステップに処理を進める。ここで、端末装置6は、上記データをゲーム装置本体5へ繰り返し送信している。したがって、ゲーム装置本体5においては、端末通信モジュール28が上記データを逐次受信し、カメラ画像データおよびマイク音データについてはコーデックLSI27によって伸張処理が逐次施される。そして、入出力プロセッサ31は、端末操作データとカメラ画像データとマイク音データとをメインメモリに逐次記憶する。上記ステップ44においては、CPU10は、メインメモリから最新の端末操作データを読み出して加速度データDb1および角速度データDb2を更新する。
次に、CPU10は、ゲーム制御処理を行って(ステップ45)、次のステップに処理を進める。上記ゲーム制御処理は、ユーザによるゲーム操作に従って仮想世界内のプレイヤオブジェクトPoを動作させる処理等を実行し、ゲームを進行させる処理である。当該ゲーム例では、ユーザは、端末装置6およびボード型コントローラ9を用いて種々のゲームを行うことが可能である。以下、図20を参照して、上記ステップ45におけるゲーム制御処理について説明する。
図20において、CPU10は、荷重値および重心位置を算出して(ステップ81)、次のステップに処理を進める。例えば、CPU10は、荷重データDa1が示す荷重検出値を合計して合計荷重値を算出し、当該合計荷重値を示すデータを用いて荷重値データDcにおける時系列データ配列のうち最新のデータを更新する。具体的には、荷重データDa1は、荷重センサ94a〜94dがそれぞれ検出した最新の荷重検出値を示しているため、当該荷重検出値を合計することによって、上記合計荷重値が算出される。また、CPU10は、荷重データDa1が示す荷重検出値を用いて重心位置を算出し、当該重心位置を示すデータを用いて重心位置データDdにおける時系列データ配列のうち最新のデータを更新する。以下、重心位置の算出方法の一例を説明する。
上記重心位置は、ボード型コントローラ9の台9aに加わる荷重の重心位置であり、各荷重センサ94a〜94d(図6参照)が検出する荷重値によって定められる。例えば、上記重心位置は、ボード型コントローラ9の台9a上の位置に対応する所定の座標系(例えば、台9aの中心を原点、台9aの長辺方向をX1軸方向、短辺方向をY1軸方向とするX1Y1座標系)に基づいた座標値によって表される。そして、荷重センサ94aが検出する荷重値をa、荷重センサ94bが検出する荷重値をb、荷重センサ94cが検出する荷重値をc、荷重センサ94dが検出する荷重値をdとした場合、重心のX1軸座標値(X1)およびY1軸座標値(Y1)は、以下の数式を用いて算出することができる。
X1=((a+c)―(b+d))×m
Y1=((c+d)―(a+b))×n
ここで、mおよびnは、それぞれ予め定められた定数である。
このようにして算出される合計荷重値および重心位置は、ボード型コントローラ9上のユーザ動作や体重移動(姿勢)に応じて変化する。一例として、ユーザがボード型コントローラ9上で足踏みを繰り返した場合、合計荷重値が足踏み周期に応じて変動するとともに、ユーザが左足を乗せる位置と右足を乗せる位置の間を、重心位置が足踏み周期に応じて往復移動するように変化する。他の例として、ユーザがボード型コントローラ9上で屈伸運動を繰り返した場合、合計荷重値が屈伸周期に応じて変動するが、重心位置の変化が相対的に少なくなる。
次に、CPU10は、端末装置6から送信されてくるデータに基づいて、オフセット補正およびスケーリング補正した端末装置6の姿勢や動きを算出し(ステップ82)、次のステップに処理を進める。例えば、CPU10は、加速度データDb1が示す加速度および角速度データDb2が示す角速度に基づいて、実空間における端末装置6の姿勢や動きを(ベクトルVax、ベクトルVay、およびベクトルVaz)を算出する。そして、CPU10は、実空間における端末装置6の姿勢や動きをオフセット補正およびスケーリング補正して、補正後の端末装置6の姿勢や動きを算出し、端末装置奥行方向データDe2、端末装置上方向データDe3、および端末装置右方向データDe4を更新する。
ここで、CPU10は、角速度データDb2が示す角速度を用いて、端末装置6の単位時間当たりにおける実空間での回転量(方向変化量)を算出することができる。また、実空間において端末装置6がほぼ静止している状態(静的な状態)では、端末装置6に対して加えられる加速度が重力加速度となるため、加速度データDb1が示す加速度によって端末装置6に加えられる重力方向(すなわち、実空間における鉛直方向を基準とした端末装置6の姿勢であり、鉛直方向を基準としたxyz軸の方向であって、ベクトルVax、ベクトルVay、およびベクトルVazの方向)を算出することができる。したがって、CPU10は、加速度データDb1が示す加速度および角速度データDb2が示す角速度に基づいて、端末装置6の方向変化や姿勢を算出することができる。
なお、本実施形態においては、端末装置6で検出される加速度および角速度を示すデータに基づいて端末装置6の方向変化や姿勢を算出するが、他の実施形態においては、何れか1つのデータや3つ以上のデータを用いて端末装置6の方向変化や姿勢を算出してもよい。例えば、端末装置6に設けられた磁気センサ602は、端末装置6に加わる磁気を検出しており、端末装置6に加わる地磁気の方向から端末装置6を基準とした所定の方位(すなわち、所定の方位を基準とした端末装置6の姿勢)を算出することができる。なお、端末装置6が配置されている実空間に、地磁気以外の磁界が発生している場合であっても、端末装置6の回転量を算出することができる。したがって、CPU10は、端末装置6で検出される加速度、角速度、および磁気を示すデータの少なくとも1つを用いれば、端末装置6の方向変化や姿勢を算出することができる。
また、端末装置6の姿勢の具体的な算出方法はどのような方法であってもよいが、例えば、角速度データDb2が示す角速度に基づいて算出される端末装置6の姿勢を、加速度データDb1が示す加速度および磁気センサ602が検出した磁気の方向を用いて補正する方法が考えられる。
具体的には、CPU10は、まず、角速度データDb2が示す角速度に基づいて端末装置6の姿勢を算出する。端末装置6の姿勢を角速度から算出する方法はどのような方法であってもよいが、一例として、前回の姿勢(前回に算出されたxyz軸の方向)と今回の角速度(今回の処理ループにおけるステップ43で取得された角速度)とを用いて算出される。CPU10は、前回のxyz軸方向を今回の角速度で各軸周りに単位時間分だけ回転させることによって新たなxyz軸方向を算出する。なお、上述したように上記ステップ41および42において、端末装置6の補正前の初期姿勢および補正後の初期姿勢が定められている。したがって、端末装置6の姿勢を角速度から算出する場合には、CPU10は、最初に算出された端末装置6の補正前の初期姿勢または補正後の初期姿勢を基準として現時点における端末装置6の姿勢を算出することができる。
次に、CPU10は、角速度に基づいて算出した端末装置6の姿勢(xyz軸方向)を、加速度データDb1が示す加速度を用いて補正する。具体的には、CPU10は、加速度データDb1が示す加速度に基づいて端末装置6の姿勢(xyz軸方向)を算出する。ここで、端末装置6がほぼ静止している状態では、端末装置6に対して加えられている加速度は重力加速度となる。したがって、この状態においては、加速度データDb1が示す加速度の方向を用いて重力加速度の方向(重力方向)を算出することができるので、重力方向に対する端末装置6の向き(重力方向を基準としたxyz軸方向)を算出することができる。
加速度に基づく端末装置6の姿勢が算出されると、CPU10は、加速度に基づく姿勢を用いて、角速度に基づく姿勢を補正する。具体的には、CPU10は、角速度に基づいて算出された端末装置6の姿勢(xyz軸方向)を、加速度に基づいて算出された端末装置6の姿勢(xyz軸方向)へ所定の割合で近づける補正を行う。上記所定の割合は、予め定められた固定値であってもよいし、加速度データDb1が示す加速度等に応じて設定されてもよい。また、加速度に基づいて算出された端末装置6の姿勢に関しては、重力方向を軸とする回転方向については姿勢を算出することができないので、CPU10は、当該回転方向に関して補正を行わないようにしてもよい。なお、角速度に基づいて算出された端末装置6の姿勢を、磁気センサ602が検出した磁気の方向に基づいて補正する場合には、CPU10は、角速度に基づいて算出された端末装置6の姿勢を、磁気の方向に基づいて算出された端末装置6の姿勢へと所定の割合で近づけるようにすればよい。以上によれば、CPU10は、端末装置6の姿勢を正確に算出することができる。なお、上述した加速度、角速度、磁気の方向に基づく姿勢の補正は、オフセット補正およびスケーリング補正の前に行ってもいいし、オフセット補正およびスケーリング補正の後に行ってもかまわない。オフセット補正およびスケーリング補正する方法については、上記ステップ41の処理と同様であるため、詳細な説明を省略する。
次に、CPU10は、プレイヤオブジェクトPoを設定し(ステップ83)、次のステップに処理を進める。以下、図21を参照して、上記ステップ83におけるプレイヤオブジェクト設定処理について説明する。
図21において、CPU10は、実空間基準方向と端末装置奥行方向との間の水平角度差を算出し(ステップ120)、次のステップに処理を進める。ここで、上記水平角度差は、実空間における補正後の実空間基準方向と端末装置奥行方向との間の角度差を水平面に投影した角度差(例えば、図23に示す角度F)であり、端末装置6の初期姿勢から実空間の鉛直方向を軸として端末装置6の端末装置奥行方向(z軸正方向)を変えた角度を示すものである。例えば、CPU10は、実空間基準方向データDe1が示す実空間基準方向と、端末装置奥行方向データDe2が示す端末装置奥行方向とを用いて、上記水平角度差を算出する。
次に、CPU10は、上記水平角度差および上下方向における端末装置6の姿勢(上下角度)に応じて、仮想世界基準方向に対する操作指示方向を算出し(ステップ121)、次のステップに処理を進める。例えば、図23に示すように、CPU10は、仮想世界基準方向データDf1が示す仮想世界基準方向を用いて、当該仮想世界基準方向と操作指示方向とを仮想世界の水平面に投影した場合に生じる角度差が、上記水平角度差となり、かつ、同じ位置関係となる(すなわち、実空間基準方向に対して端末装置奥行方向が左回転している場合は、仮想世界基準方向に対して操作指示方向も左回転した位置関係となるようにする)ように仮想世界における操作指示方向を算出する(図23に示す角度F)。さらに、図24に示すように、CPU10は、端末装置奥行方向データDe2が示す端末装置奥行方向を用いて、仮想世界における水平方向と操作指示方向との角度差が、実空間における水平方向と当該端末装置奥行方向との角度差となり、かつ、同じ位置関係となる(すなわち、実空間の水平方向に対して端末装置奥行方向が下向きである場合は、仮想世界の水平方向に対して操作指示方向も下向きとなるようにする)ように仮想世界における操作指示方向を算出する(図24に示す角度I)。そして、CPU10は、算出された操作指示方向を用いて、操作指示方向データDf2を更新する。
次に、CPU10は、端末装置6の端末装置上方向に基づいて、仮想世界における操作上方向を算出し(ステップ122)、次のステップに処理を進める。例えば、CPU10は、端末装置奥行方向データDe2が示す端末装置奥行方向、端末装置上方向データDe3が示す端末装置上方向、および操作指示方向データDf2が示す操作指示方向を用いて、操作上方向を算出する。具体的には、図24に示すように、操作指示方向を基準とした仮想世界における操作上方向が、端末装置奥行方向を基準とした実空間における補正後の端末装置上方向と同じ方向となるように、操作上方向を算出する。ここで、端末装置奥行方向および端末装置上方向は、重力方向(鉛直方向)を基準とした実空間における方向をオフセット補正およびスケーリング補正してそれぞれ設定されており、操作指示方向も仮想世界内の方向として設定されているため、当該仮想世界に設定されている重力方向を基準とした方向として扱うこともできる。したがって、端末装置奥行方向、端末装置上方向、および操作指示方向を用いれば、実空間の端末装置上方向に対応する仮想世界の操作上方向を算出することが可能となる。そして、CPU10は、算出された操作上方向を用いて、操作上方向データDf3を更新する。
次に、CPU10は、プレイヤオブジェクトPoが移動しているか否かを判断する(ステップ123)。例えば、CPU10は、移動ベクトルデータDhに移動ベクトルが設定されている場合、プレイヤオブジェクトPoが移動していると判断する。そして、CPU10は、プレイヤオブジェクトPoが移動している場合、次のステップ124に処理を進める。一方、CPU10は、プレイヤオブジェクトPoが移動していない場合、次のステップ130に処理を進める。
ステップ124において、CPU10は、上記ステップ120で算出された水平角度差に応じて、回転移動角度を算出し、次のステップに処理を進める。例えば、CPU10は、回転移動角度G(図23に示す角度G)を
G=F×f1
で算出する。ここで、Fは水平角度差であり、f1は1より小さい正の定数(例えば、0.001)である。
次に、CPU10は、上記ステップ124で算出された回転移動角度に応じて、仮想世界基準方向を変化させて(ステップ125)、次のステップに処理を進める。例えば、CPU10は、仮想世界基準方向データDf1が示す仮想世界基準方向を仮想世界の水平面に投影した場合に、上記回転移動角度だけ仮想世界の重力方向周りに回転するように操作指示方向に近づけて仮想世界基準方向を変化させ、変化させた仮想世界基準方向を用いて仮想世界基準方向データDf1を更新する。
次に、CPU10は、操作指示方向データDf2が示す操作指示方向および操作上方向データDf3が示す操作上方向に基づいて、仮想世界におけるプレイヤオブジェクトPoの向きおよび姿勢を設定し(ステップ126)、次のステップに処理を進める。一例として、CPU10は、操作指示方向データDf2が示す操作指示方向をそのままプレイヤオブジェクトPoの向き(移動する方向)とする。そして、CPU10は、操作上方向データDf3が示す操作上方向が仮想世界におけるプレイヤオブジェクトPoの上方向(図24に示す胴体背面方向)となるように、プレイヤオブジェクトPoがロールする姿勢を設定する。そして、設定されたプレイヤオブジェクトPoの向きおよび姿勢に基づいて、動作姿勢データDgを更新する。したがって、仮想世界におけるプレイヤオブジェクトPoの向きおよび姿勢は、実空間における端末装置6の姿勢に基づいて設定されることになる。
一例として、図24に示すように、端末装置6がH方向にロール角度θだけロール回転(すなわち、z軸周りにy軸がH方向に角度θだけ回転移動)した場合、プレイヤオブジェクトPoは、移動方向を中心としてロール角度θだけH方向へ仮想世界内でロール(例えば、移動方向周りに胴体背面方向がH方向に角度θだけ回転移動)して姿勢制御される。そして、プレイヤオブジェクトPoが配置されている仮想世界の上下方向が、上記ロール方向の逆方向へ上記ロール角度θだけLCD61の上下方向から回転した方向に表示されるように、プレイヤオブジェクトPoおよび仮想世界が端末装置6のLCD61に表示される。これによって、プレイヤオブジェクトPoは、ロール角度θだけH方向へ仮想世界内でロールしているが、LCD61に表示される仮想世界がH方向の逆方向に同じロール角度θだけ回転して表示されるため、結果的にLCD61に対しては同じ状態で表示され、プレイヤオブジェクトPo以外の仮想世界がH方向の逆方向に回転したように表示される。また、端末装置6は、H方向へロール角度θだけ回転するが、LCD61に表示されるプレイヤオブジェクトPo以外の仮想世界がH方向の逆方向に同じロール角度θだけ回転して表示されるため、結果的に実空間に対しては同じ方向に当該仮想世界が表示され、プレイヤオブジェクトPoが仮想世界や実空間に対してH方向に回転したように表示される。
また、ユーザが端末装置6の端末装置奥行方向を上に向けて(すなわち、上方向へピッチ)補正後の端末装置奥行方向が水平面に対して上方に向いている場合、当該上方に向いた角度に応じた仰角にプレイヤオブジェクトPoの向きが設定される。また、ユーザが端末装置6の端末装置奥行方向を下に向けて(すなわち、下方向へピッチ)、補正後の端末装置奥行方向が水平面に対して下方を向いている場合、当該下方に向いた角度に応じた俯角にプレイヤオブジェクトPoの向きが設定される。また、ユーザが端末装置6を端末装置奥行方向周りに回転させる場合(すなわち、ロール)、端末装置6がロールした方向へロールした角度に応じてプレイヤオブジェクトPoも仮想世界内でロールする。さらに、実空間基準方向に対する端末装置6の左右方向変化に基づいて、プレイヤオブジェクトPoの左右の向きが設定される。例えば、端末装置6がy軸回りの回転方向であるヨー方向(図3参照)に回動した場合、当該回転量に応じてプレイヤオブジェクトPoの向きも変化する。具体的には、端末装置6がy軸負方向からみて左方向へy軸周りの回動をした場合、当該回転量に応じてプレイヤオブジェクトPoの向きもプレイヤオブジェクトPoから見て左方向に変化する。また、実空間基準方向に対してユーザが端末装置6を左または右方向に回動させた状態を維持した場合、仮想世界基準方向が左または右方向へ変化し続けるため、上記ステップ121が実行されることによって仮想世界基準方向の変化に応じて操作指示方向も左または右方向へ変化し続ける。したがって、実空間基準方向に対してユーザが端末装置6を左または右方向に回動させた状態を維持した場合、プレイヤオブジェクトPoの向きもさらに左または右方向へ変化し続けることになる。つまり、ユーザがプレイヤオブジェクトPoの向きを逆方向に反転させる等、大きく変化させたい場合であっても、端末装置6の向きを逆方向等に大きく変化させる必要がないため、ユーザの操作性を向上させることができる。
次に、CPU10は、プレイヤオブジェクト動作設定処理を行い(ステップ127)、次のステップに処理を進める。以下、図22を参照して、上記ステップ127で行うプレイヤオブジェクト動作設定処理について説明する。
図22において、CPU10は、動作モードフラグデータDmが示す動作モードフラグがオフに設定されているか否かを判断する(ステップ140)。そして、CPU10は、動作モードフラグがオフに設定されている場合、次のステップ141に処理を進める。一方、CPU10は、動作モードフラグがオンに設定されている場合、次のステップ148に処理を進める。
ステップ141において、CPU10は、合計荷重値が所定値以上であるか否かを判断する。例えば、CPU10は、荷重値データDcが示す最新の合計荷重値が、上記所定値以上であるか否かを判断する。上記所定値は、ボード型コントローラ9上でユーザが屈伸するような動作をしたことを判定するための閾値であり、一例としてボード型コントローラ9に乗っているユーザの体重に所定の割合(例えば、20%)を加算した値に設定される。ここで、ボード型コントローラ9に乗っているユーザの体重は、上記合計荷重値に基づいて算出(例えば、所定期間内に得られた合計荷重値の平均値)されてもいいし、ユーザが予め入力した値であってもよい。そして、CPU10は、合計荷重値が所定値以上である場合、次のステップ142に処理を進める。一方、CPU10は、合計荷重値が所定値未満である場合、次のステップ144に処理を進める。
ステップ142において、CPU10は、ドルフィンキックを打つ動作にオブジェクト動作を設定し、次のステップに処理を進める。例えば、CPU10は、合計荷重値が上記所定値以上である場合、ボード型コントローラ9の上でユーザが屈伸運動したと判断する。この場合、CPU10は、プレイヤオブジェクトPoの動作をドルフィンキック泳法で泳ぐ動作に設定するとともに、ドルフィンキックを打つ動作に設定し、設定された動作を用いて動作姿勢データDgを更新する。
次に、CPU10は、動作モードフラグをオンに設定し(ステップ143)、当該サブルーチンによる処理を終了する。例えば、CPU10は、動作モードフラグデータDmが示す動作モードフラグをオンに変更する。
一方、上記ステップ141において合計荷重値が所定値未満であると判定された場合、CPU10は、重心位置データDdが示す重心位置が右足領域外から右足領域内へ移動したか否かを判断する(ステップ144)。そして、CPU10は、重心位置が右足領域外から右足領域内へ移動した場合、次のステップ145に処理を進める。一方、CPU10は、重心位置が右足領域外から右足領域内へ移動していない場合、次のステップ146に処理を進める。
ここで、ボード型コントローラ9の台9a上の位置に対応する所定の座標系(例えば、台9aの中心を原点、台9aの長辺方向をX1軸方向、短辺方向をY1軸方向とするX1Y1座標系)には、ユーザが足踏み動作において左足を上げて右足を下げた場合に上記重心位置が移動する領域(右足領域)と、ユーザが足踏み動作において右足を上げて左足を下げた場合に上記重心位置が移動する領域(左足領域)とが設定される。例えば、台9a上における左右(例えば、電源ボタン9cを下にした左右)に左足領域および右足領域が設定され、左足領域および右足領域の間には前後方向に延びる所定幅の中立領域が設定される。上記ステップ144の処理では、重心位置データDdが示す最新の重心位置が中立領域内から右足領域内に移動した場合等、右足領域外から右足領域内へ移動した場合に肯定判定される。
なお、ユーザは、ボード型コントローラ9上で向きを変えながら足踏みをすることが考えられる。この場合、上記左足領域、上記右足領域、および上記中立領域それぞれの位置を固定していると、正確な足踏み判定ができなくなることが考えられる。このような場合、上記座標系における重心位置の移動に基づいて、上記座標系における上記左足領域、上記右足領域、および上記中立領域を移動させればよい。例えば、所定期間における重心位置の移動距離が所定長さ以上である場合、当該所定期間中における重心位置の移動軌跡の中心位置において当該移動軌跡に対して垂直に延びるように上記中立領域を移動させ、当該中立領域の移動に応じて上記左足領域および上記右足領域を移動させる。このように上記左足領域、上記右足領域、および上記中立領域を移動させることによって、ボード型コントローラ9上で向きを変えながらユーザが足踏みしたとしても、正確に足踏み判定を行うことができる。
また、上述した足踏み判定では、ユーザがボード型コントローラ9上で足踏みした足が左足であるか右足であるかを判定しているが、このような左右の区別をしなくてもかまわない。例えば、上述した説明における「左足」を「一方の足」とし、「右足」を「他方の足」として処理を行った場合、ユーザが足踏みした足とプレイヤオブジェクトPoがバタ足で打つ足とが上述した処理の逆になる可能性があるものの、ユーザの足踏み動作にプレイヤオブジェクトPoのバタ足動作のタイミングを同期させた動作指示が可能となる。
ステップ145において、CPU10は、右足でバタ足を打つ動作にオブジェクト動作を設定し、当該サブルーチンによる処理を終了する。例えば、CPU10は、重心位置が右足領域外から右足領域内へ移動した場合、ボード型コントローラ9の上でユーザが左足を上げて右足を下げる足踏み動作を行ったと判断する。この場合、CPU10は、プレイヤオブジェクトPoの動作をバタ足泳法で泳ぐ動作に設定するとともに、右足でバタ足を打つ動作に設定し、設定された動作を用いて動作姿勢データDgを更新する。
ステップ146において、CPU10は、重心位置データDdが示す重心位置が左足領域外から左足領域内へ移動したか否かを判断する。そして、CPU10は、重心位置が左足領域外から左足領域内へ移動した場合、次のステップ147に処理を進める。一方、CPU10は、重心位置が左足領域外から左足領域内へ移動していない場合、次のステップ151に処理を進める。
ステップ147において、CPU10は、左足でバタ足を打つ動作にオブジェクト動作を設定し、当該サブルーチンによる処理を終了する。例えば、CPU10は、重心位置が左足領域外から左足領域内へ移動した場合、ボード型コントローラ9の上でユーザが右足を上げて左足を下げる足踏み動作を行ったと判断する。この場合、CPU10は、プレイヤオブジェクトPoの動作をバタ足泳法で泳ぐ動作に設定するとともに、左足でバタ足を打つ動作に設定し、設定された動作を用いて動作姿勢データDgを更新する。
上記ステップ140において動作モードフラグがオンであると判定された場合、CPU10は、動作モードフラグがオンされてから所定時間が経過したか否かを判断する(ステップ148)。そして、CPU10は、所定時間が経過した場合、次のステップ149に処理を進める。一方、CPU10は、所定時間が経過していない場合、次のステップ150に処理を進める。ここで、上記所定時間は、ドルフィンキックが打たれてから次のドルフィンキック操作入力やバタ足操作入力を可能にするまでの時間であり、当該所定時間が経過するまでの間はボード型コントローラ9を用いたユーザの動作判定を行わない。これによって、ドルフィンキックを行った直後におけるユーザ動作の誤判定を防止することが可能となる。
ステップ149において、CPU10は、動作モードフラグをオフに設定し、当該サブルーチンによる処理を終了する。例えば、CPU10は、動作モードフラグデータDmが示す動作モードフラグをオフに変更する。
一方、ステップ150において、CPU10は、ドルフィンキック中にオブジェクト動作を設定し、当該サブルーチンによる処理を終了する。例えば、CPU10は、プレイヤオブジェクトPoの動作をドルフィンキック泳法で泳ぐ動作に継続して設定するとともに、ドルフィンキック中に設定し、設定された動作を用いて動作姿勢データDgを更新する。
動作モードフラグがオフ(上記ステップ140で否定判定)、合計荷重値が所定値未満(上記ステップ141で否定判定)、重心位置が右足領域外から右足領域内へ移動していない(上記ステップ144で否定判定)、および重心位置が左足領域外から左足領域内へ移動していない(上記ステップ146で否定判定)場合、CPU10は、現在設定されている動作を継続する動作に設定し(ステップ151)、当該サブルーチンによる処理を終了する。例えば、CPU10は、足を打つ動作(例えば、バタ足を打つ動作)が設定されている場合は当該動作を解除し、オブジェクト動作として設定されているプレイヤオブジェクトPoの泳法はそのまま継続して設定し、設定された動作を用いて動作姿勢データDgを更新する。
図21に戻り、上記ステップ127におけるプレイヤオブジェクト動作設定処理の後、CPU10は、プレイヤオブジェクトPoの移動ベクトルを設定し(ステップ128)、次のステップに処理を進める。例えば、CPU10は、荷重値データDcが示す合計荷重値の時系列的な配列(合計荷重値の変化履歴)および上記ステップ127で設定されたプレイヤオブジェクトPoの動作(泳法)に基づいて、プレイヤオブジェクトPoの移動速度を算出する。一例として、CPU10は、合計荷重値が変化する周期が短いほど、プレイヤオブジェクトPoが移動する速度を速く算出する。他の例として、CPU10は、合計荷重値の最大値や変化幅が大きいほど、プレイヤオブジェクトPoが移動する速度を速く算出する。例えば、ユーザがボード型コントローラ9上で足踏みするピッチが短いほど、バタ足で泳いでいるプレイヤオブジェクトPoの移動速度が速くなる。また、ユーザがボード型コントローラ9上で屈伸するピッチが短いほどドルフィンキックで泳いでいるプレイヤオブジェクトPoの移動速度が速くなり、屈伸する強さが強いほど、ドルフィンキックで泳いでいるプレイヤオブジェクトPoの移動速度が速くなる。そして、CPU10は、算出された移動速度を設定されている泳法による係数で補正して、プレイヤオブジェクトPoの移動速度を決定する。また、プレイヤオブジェクトPoの移動速度は、足を打つタイミングにおいて相対的に速く設定し、次の足を打つタイミングまでは漸減的に遅くなるように設定される。
また、CPU10は、操作指示方向データDf2が示す仮想世界における操作指示方向をプレイヤオブジェクトPoの移動方向とする。そして、CPU10は、上述したように算出されたプレイヤオブジェクトPoの移動速度および移動方向を用いて、仮想世界における移動ベクトルを算出し、算出された移動ベクトルを用いて移動ベクトルデータDhを更新する。例えば、CPU10は、算出されたプレイヤオブジェクトPoの移動速度を用いて移動ベクトルの長さを設定し、操作指示方向データDf2が示す操作指示方向を用いて移動ベクトルの方向を設定する。
次に、CPU10は、プレイヤオブジェクトPoの位置を算出し(ステップ129)、当該サブルーチンによる処理を終了する。例えば、CPU10は、移動ベクトルデータDhが示す移動ベクトルに基づいて、位置データDiが示すプレイヤオブジェクトPoの位置を仮想世界内で移動させ、移動後の位置を用いて位置データDiを更新する。
一方、上記ステップ123においてプレイヤオブジェクトPoが移動していないと判定された場合、CPU10は、操作指示方向データDf2が示す操作指示方向および操作上方向データDf3に基づいて、仮想世界におけるプレイヤオブジェクトPoの向きを設定し(ステップ130)、次のステップに処理を進める。なお、上記ステップ130の処理については、上記ステップ126の処理と同様であるため詳細な説明を省略する。
次に、CPU10は、静止状態にオブジェクト動作を設定し(ステップ131)、当該サブルーチンによる処理を終了する。例えば、CPU10は、プレイヤオブジェクトPoの動作を静止状態(例えば、水中を泳ぐことなく漂っている状態)に設定し、設定された動作を用いて動作姿勢データDgを更新する。
図20に戻り、上記ステップ83のプレイヤオブジェクト設定処理の後、CPU10は、仮想カメラに関するパラメータを設定し(ステップ84)、次のステップに処理を進める。例えば、端末用ゲーム画像およびモニタ用ゲーム画像は、仮想世界(仮想空間)内に仮想カメラを配置して、仮想カメラから見たゲーム空間を計算することによって得られる3次元のCG画像等によってそれぞれ生成される。具体的には、端末用ゲーム画像を生成するための第1仮想カメラは、仮想世界に配置されているプレイヤオブジェクトPoの背後近傍から見た仮想世界内の様子が含まれるように設定される。また、モニタ用ゲーム画像を生成するための第2仮想カメラは、上記第1仮想カメラが設定されている同じ仮想世界に設定され、当該仮想世界に配置されているプレイヤオブジェクトPoを遠方から鳥瞰した仮想世界内の様子が含まれるように設定される。CPU10は、位置データDiが示すプレイヤオブジェクトPoの位置や操作指示方向データDf2に応じた操作指示方向(プレイヤオブジェクトPoの方向)に基づいて、第1仮想カメラおよび第2仮想カメラの仮想世界における位置(第1仮想カメラおよび第2仮想カメラに関するパラメータ)を設定する。このように、端末用ゲーム画像およびモニタ用ゲーム画像がそれぞれ異なる視点から見た仮想世界のゲーム画像となるため、それらが表示されるLCD61およびモニタ2にもそれぞれ異なる視点から見た仮想世界のゲーム画像が表示されることになる。
具体的には、CPU10は、上記オフセット補正および上記スケーリング補正が行われた端末装置6の姿勢と同じ姿勢となるように仮想世界における第1仮想カメラの姿勢を制御する。すなわち、上記補正後の端末装置6のz軸正方向に基づいて設定される操作指示方向(操作指示方向データDf2が示す操作指示方向)を第1仮想カメラのZ軸正方向(視線方向)に対応させ、上記補正後の端末装置6のy軸正方向に基づいて設定される操作上方向(操作上方向データDf3が示す操作上方向)を第1仮想カメラのY軸正方向(仮想カメラ上方向)に対応させて、第1仮想カメラの姿勢を制御する。そして、プレイヤオブジェクトPoと第1仮想カメラとのロール方向を含めた位置関係を固定して、仮想世界において移動するプレイヤオブジェクトPoの位置に基づいて第1仮想カメラの位置を設定する。つまり、ユーザは、端末装置6本体を動かすことによって、端末装置6のLCD61に表示されている仮想世界画像を生成する第1仮想カメラおよびプレイヤオブジェクトPoの動作を制御することが可能となる。そして、上記補正後の端末装置6の姿勢および向きが第1仮想カメラの姿勢および向きに連動するため、ユーザは端末装置6のLCD61を覗き窓として仮想世界内を覗いているような感覚を味わうことができる。
次に、CPU10は、プレイヤオブジェクトPoの移動軌跡を設定し(ステップ85)、当該サブルーチンによる処理を終了する。例えば、CPU10は、移動軌跡データDkが示す移動軌跡に、位置データDiが示すプレイヤオブジェクトPoの現在位置を追加し、現在位置が追加された移動軌跡を用いて移動軌跡データDkを更新する。
図19に戻り、上記ステップ45におけるゲーム制御処理の後、CPU10およびGPU32は、モニタ2に表示するためのモニタ用ゲーム画像を生成し(ステップ46)、次のステップに処理を進める。例えば、CPU10およびGPU32は、上記ステップ45のゲーム制御処理の結果を表す各データをメインメモリから読み出し、モニタ用ゲーム画像を生成するために必要なデータをVRAM34から読み出してゲーム画像を生成し、生成されたモニタ用ゲーム画像をVRAM34に記憶する。上記モニタ用ゲーム画像は、上記ステップ45のゲーム制御処理の結果を表すものであればよく、どのような方法で生成されてもよい。例えば、モニタ用ゲーム画像は、仮想カメラデータDjが示す第2仮想カメラに関するパラメータに基づいて仮想世界に第2仮想カメラを配置し、動作姿勢データDgおよび位置データDiに基づいて仮想世界にプレイヤオブジェクトPoを配置し、移動軌跡データDkに基づいて仮想世界に移動軌跡Lpを配置して、当該第2仮想カメラから見た仮想世界を計算することによって得られる3次元のCG画像によって生成される。
次に、CPU10およびGPU32は、端末装置6に表示するための端末用ゲーム画像を生成し(ステップ47)、次のステップに処理を進める。例えば、CPU10およびGPU32は、上記ステップ45のゲーム制御処理の結果を表す各データをメインメモリから読み出し、端末用ゲーム画像を生成するために必要なデータをVRAM34から読み出してゲーム画像を生成し、生成されたモニタ用ゲーム画像をVRAM34に記憶する。端末用ゲーム画像についても、上記モニタ用ゲーム画像と同様に上記ステップ45のゲーム制御処理の結果を表すものであればよく、どのような方法で生成されてもよい。また、端末用ゲーム画像は、上記モニタ用ゲーム画像と同様の方法で生成されてもよいし、異なる方法で生成されてもよい。例えば、端末用ゲーム画像は、仮想カメラデータDjが示す第1仮想カメラに関するパラメータに基づいて仮想世界に第1仮想カメラを配置し、動作姿勢データDgおよび位置データDiに基づいて仮想世界にプレイヤオブジェクトPoを配置して、当該第1仮想カメラから見た仮想世界を計算することによって得られる3次元のCG画像によって生成される。
なお、動作姿勢データDgが示すプレイヤオブジェクトPoの動作が足を打つ動作(ドルフィンキックを打つ動作やバタ足を打つ動作)を示している場合、プレイヤオブジェクトPoが足を打つ動作を行うように上記仮想世界に配置してもよい。これによって、ユーザがボード型コントローラ9で行う動作(足踏み動作、屈伸動作)に同期させて、プレイヤオブジェクトPoを動作させることが可能となる。
次に、CPU10は、モニタ2のスピーカ2aに出力するためのモニタ用ゲーム音声を生成し(ステップ48)、次のステップに処理を進める。例えば、CPU10は、上記ステップ45のゲーム制御処理の結果に応じてスピーカ2aから出力するためのモニタ用ゲーム音声をDSP33に生成させる。一例として、CPU10は、上記ステップ45のゲーム制御処理の結果に応じて設定された仮想世界において、第2仮想カメラの位置を基準として聞こえると想定される各オブジェクトの声、動作音、および効果音等に、モニタ2から出力させたいBGM等を加えたモニタ用ゲーム音声を、DSP33に生成させる。
次に、CPU10は、端末装置6のスピーカ607に出力するための端末用ゲーム音声を生成し(ステップ49)、次のステップに処理を進める。例えば、CPU10は、上記ステップ45のゲーム制御処理の結果に応じてスピーカ607から出力するための端末用ゲーム音声をDSP33に生成させる。一例として、CPU10は、上記ステップ45のゲーム制御処理の結果に応じて設定された仮想世界において、第1仮想カメラの位置を基準として聞こえると想定される各オブジェクトの声、動作音、および効果音等に、端末装置6から出力させたいBGM等を加えた端末用ゲーム音声を、DSP33に生成させる。なお、上記端末用ゲーム音声は、上記モニタ用ゲーム音声と同じであってもよいし、異なっていてもよい。また、上記端末用ゲーム音声は、上記モニタ用ゲーム音声に対して、一部の音声が異なる(例えば効果音は異なるが、BGMが同じ)ものでもよい。なお、モニタ用ゲーム音声と端末用ゲーム音声とが同一である場合、ステップ49において端末用ゲーム音声の生成処理が実行されなくてもよい。
次に、CPU10は、モニタ2へモニタ用ゲーム画像およびモニタ用ゲーム音声を出力し(ステップ50)、次のステップに処理を進める。例えば、CPU10は、VRAM34に記憶されたモニタ用ゲーム画像のデータと、DSP33によって生成されたモニタ用ゲーム音声のデータとを、AV−IC15へ送る。これに応じて、AV−IC15は、モニタ用ゲーム画像およびモニタ用ゲーム音声を示すデータを、AVコネクタ16を介してモニタ2へ出力する。これによって、モニタ用ゲーム画像がモニタ2に表示されるとともに、モニタ用ゲーム音声がスピーカ2aから出力される。
次に、CPU10は、端末装置6へ端末用ゲーム画像および端末用ゲーム音声を送信し(ステップ51)、次のステップに処理を進める。例えば、CPU10は、VRAM34に記憶された端末用ゲーム画像のデータおよびDSP33によって生成された端末用ゲーム音声のデータは、CPU10によってコーデックLSI27に送られ、コーデックLSI27によって所定の圧縮処理が行われる。さらに、圧縮処理が施された端末用ゲーム画像のデータおよび端末用ゲーム音声のデータは、コーデックLSI27によって端末通信モジュール28に送られ、アンテナ29を介して端末通信モジュール28によって端末装置6へ送信される。ゲーム装置本体5から送信された端末用ゲーム画像のデータおよび端末用ゲーム音声のデータは、端末装置6の無線モジュール610によって受信され、コーデックLSI606によって所定の伸張処理が行われる。そして、伸張処理が行われた端末用ゲーム画像のデータは、LCD61に出力され、伸張処理が行われた端末用ゲーム音声のデータ音声データは、サウンドIC608に出力される。これによって、端末用ゲーム画像がLCD61に表示されるとともに、端末用ゲーム音声がスピーカ607から出力される。
次に、CPU10は、ゲームを終了するか否かを判定する(ステップ52)。ゲームを終了する条件としては、例えば、ゲームオーバーやゲームクリアとなる条件が満たされたことや、ユーザがゲームを終了する操作を行ったこと等がある。CPU10は、ゲームを終了しない場合に上記ステップ43に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。以降、ステップ43〜ステップ52の一連の処理は、ステップ52でゲームを終了すると判定されるまで繰り返し実行される。
このように、上述した処理によれば、端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する際、オフセット補正およびスケーリング補正が行われる。例えば、上記オフセット補正を行うことによって、端末装置奥行方向が実空間の水平方向に対して俯角方向に所定角度下を向いた場合に仮想世界の水平方向へ操作指示方向が設定される。したがって、ユーザが操作指示方向を仮想世界の水平方向に維持したい場合であっても、端末装置6のLCD61を実空間において垂直に起立した状態を保つような無理な姿勢を継続する必要がなく、LCD61を上記所定角度だけ仰角状態にした比較的楽な姿勢(基本姿勢)で端末装置6を操作することができる。また、上記スケーリング補正を行うことによって、端末装置奥行方向の変化角度が、適切な角度にスケーリングされて操作指示方向に変換される。例えば、上記スケーリング補正を行うことによって、端末装置奥行方向の変化角度が相対的に小さい場合であっても、仮想世界水平方向に対して相対的に大きな変化角度で操作指示方向を変化させることができるため、操作負担が軽減されるとともに、端末装置奥行方向を実空間における真上や真下方向に向けるような負担の大きい姿勢になることなく、仮想世界における真上や真下方向に操作指示方向を設定することも可能となる。
なお、上述した実施形態では、端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する際、オフセット補正およびスケーリング補正が行われる例を用いたが、何れか一方のみの補正を行ってもかまわない。このように何れか一方の補正を行う場合であっても、上述した効果の一部を得ることができることは言うまでもない。例えば、オフセット補正のみを行う場合は、端末装置奥行方向(ベクトルVaz)を補正する際に、実空間の水平面に対する端末装置奥行方向の向きをオフセット補正する角度だけ仰角方向に回転させる補正のみが行われる。また、スケーリング補正のみを行う場合は、図14A〜図17Bに示した補正に用いる関数の切片を0にし、当該関数を用いて端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する。
また、上述した実施形態では、端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する際、端末装置6の左右水平方向周りの方向(すなわち、上下方向にピッチ)に対してスケーリング補正が行われているが、他の方向に対してもスケーリング補正を行ってもかまわない。例えば、端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する際、鉛直方向周りの方向(すなわち、左右方向のヨー)や前後水平方向周りの方向(すなわち、左右回転のロール)に対してスケーリング補正を行ってもかまわない。この場合、端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する際、上記3方向周り(すなわち、左右水平方向周り、鉛直方向周り、前後水平方向周り)の方向の少なくとも1つの方向に対してスケーリング補正を行うことが考えられる。
また、上述した実施形態では、端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する際、端末装置奥行方向を仰角方向へオフセット補正する例を用いたが、端末装置奥行方向を俯角方向へオフセット補正して操作指示方向に変換してもかまわない。例えば、仮想世界を俯瞰するような画像をLCD61に表示する場合、第1仮想カメラの視線方向を指示する操作指示方向を当該仮想世界の鉛直方向に設定する必要がある。この場合、当該操作指示方向を設定するための端末装置6の姿勢は、端末装置奥行方向を実空間の鉛直方向に向けなければならないため、ユーザにとって負担がかかる姿勢となり長時間の操作が困難となることが考えられる。しかしながら、端末装置奥行方向を俯角方向へ所定の角度だけオフセット補正して操作指示方向に変換することによって、実空間の鉛直方向に対して当該所定の角度だけ仰角方向に端末装置奥行方向を向けた端末装置6の姿勢が、操作指示方向を仮想世界の鉛直方向に設定する操作となるため、ユーザの操作負担を軽減して比較的楽な姿勢で操作をすることが可能となる。例えば、ユーザが端末装置6を同じ姿勢に長時間維持しても比較的楽な操作姿勢における端末装置6の姿勢(例えば、端末装置奥行方向が実空間鉛直方向に対して角度Bだけ仰角方向に向いた基本姿勢。)に対応して算出される操作指示方向が、仮想世界の鉛直方向となるようにオフセット補正が行われる。
また、上述した実施形態では、端末装置6の姿勢(端末装置奥行方向)を仮想世界における操作指示方向に変換する際、端末装置奥行方向を仰角方向または俯角方向へオフセット補正および/またはスケーリング補正する例を用いた。すなわち、当該例は、端末装置6の端末装置奥行方向に垂直な実空間の水平方向周りに当該端末装置奥行方向が回転する回転量を、実空間における上下方向にオフセット補正および/またはスケーリング補正していることになる。しかしながら、オフセット補正および/またはスケーリング補正する端末装置奥行方向の回転軸は、実空間における他の軸でもかまわない。例えば、端末装置6に対して予め定められた所定方向(例えば、LCD61の表示画面に平行な左右方向(x軸方向)周りに端末装置奥行方向が回転する回転量を、当該所定方向周りにオフセット補正および/またはスケーリング補正してもかまわない。この場合、端末装置6を基準とした回転量が補正されることになるため、実空間における端末装置6の姿勢とは無関係にオフセット補正および/またはスケーリング補正が行われることになる。例えば、LCD61の表示画面に平行な左右方向(x軸方向)周りに端末装置奥行方向が回転する回転量をオフセット補正および/またはスケーリング補正する場合、ユーザが寝た姿勢で端末装置6を把持して端末装置6を動かしてLCD61に表示された画像を見るような操作環境であっても、実空間において端末装置6がロールしている姿勢とは無関係に、ユーザが端末装置6をピッチ方向に動かすことに応じて変化する端末装置奥行方向を常に補正することができる。
また、上述したゲーム例では、端末装置6の姿勢に基づいてLCD61に表示する画像を生成するための仮想カメラ(第1仮想カメラ)の制御(位置、方向、姿勢の制御)が行われている。このような制御によって、LCD61を介して仮想世界内を覗いているような画像をユーザに提供することができ、当該ユーザに仮想世界にいるかのような感覚を与えることができる。また、端末装置6の姿勢を用いた操作は、鉛直方向周り(例えば、y軸方向周り)の左右振り運動(ヨー)、左右水平方向周り(例えば、x軸方向周り)の上下振り運動(ピッチ)、前後水平方向周り(例えば、z軸方向周り)の左右回転運動(ロール)のように3方向への回転操作が可能となり、仮想世界においても同様の動きが可能な仮想カメラの制御に好適であり、実空間における端末装置6の姿勢と同じ姿勢になるように仮想世界における仮想カメラの姿勢を制御することによって、仮想世界においてユーザが希望する方向を覗いたような画像を提供することができる。また、上述したゲーム例では、ボード型コントローラ9上でユーザが動作することに応じて、プレイヤオブジェクトの動作(例えば、移動動作)が行われる。つまり、ユーザは、LCD61に表示される画像によって仮想世界にいるかのような感覚が与えられることに加えて、さらに自分自身が実空間におけるプレイヤキャラクタになったかのような操作感覚が与えられるため、さらに仮想世界にいるかのような感覚が高まることになる。
また、上述したゲーム例では、端末装置6の姿勢に基づいてLCD61に表示されるプレイヤオブジェクトPoの姿勢が制御されている。このような制御によって、端末装置6自体がプレイヤオブジェクトPoとなったかのような操作環境をユーザに提供することができ、当該ユーザが仮想世界のプレイヤオブジェクトPoになったような感覚やプレイヤオブジェクトPoを直接操作しているかのような感覚を与えることができる。また、端末装置6の姿勢を用いた操作は、鉛直方向周り(例えば、y軸方向周り)の左右振り運動(ヨー)、左右水平方向周り(例えば、x軸方向周り)の上下振り運動(ピッチ)、前後水平方向周り(例えば、z軸方向周り)の左右回転運動(ロール)のように3方向への回転操作が可能となり、仮想世界においても同様の動きが可能なプレイヤオブジェクトPoの制御に好適である。例えば、上記ゲーム例の場合、端末装置6のLCD61に沿った縦方向(y軸方向)周りの左右振り運動(ヨー)をプレイヤオブジェクトPoの左右方向への姿勢変化(ヨー)に対応させ、LCD61に沿った左右方向(x軸方向)周りの上下振り運動(ピッチ)をプレイヤオブジェクトPoの上下方向への姿勢変化(ピッチ)に対応させ、LCD61の奥行方向(z軸方向)周りの左右回転運動(ロール)をプレイヤオブジェクトPoの正面方向(移動方向)を中心とした回転姿勢変化(ロール)に対応させることによって、仮想世界においてユーザが希望する姿勢に変化するオブジェクト画像を提供することができる。また、上述したゲーム例では、ボード型コントローラ9上でユーザが動作することに応じて、プレイヤオブジェクトPoの動作(例えば、移動動作)が行われる。つまり、ユーザは、複数のデバイス(端末装置6およびボード型コントローラ9)によって1つのプレイヤオブジェクトPoを操作することになり、今までにない操作が可能となる。また、端末装置6の姿勢によるプレイヤオブジェクトPoの姿勢制御によって、ユーザが仮想世界のプレイヤオブジェクトPoになったような感覚やプレイヤオブジェクトPoを直接操作しているかのような感覚が与えられることに加えて、ボード型コントローラ9上の操作によってさらに自分自身が実空間におけるプレイヤキャラクタPoになったかのような操作感覚が与えられるため、さらに仮想世界にいるかのような感覚が高まることになる。また、上述したゲーム例では、プレイヤオブジェクトPoの正面方向にプレイヤオブジェクトPoを移動させることができる。したがって、ユーザは、端末装置6の姿勢によってプレイヤオブジェクトPoの姿勢(正面方向)を設定できるとともに、プレイヤオブジェクトPoの移動方向も設定することができ、移動方向を設定する操作が直感的で当該移動方向をユーザが所望する方向に合わせることが容易となる。また、上述したプレイヤオブジェクトPoの姿勢と同様に、端末装置6の3方向への回転操作に応じてプレイヤオブジェクトPoの移動方向を設定することも可能となるため、仮想世界においてユーザが希望する移動方向をそのまま設定することが可能となる。
また、上述したゲーム例では、端末装置6の姿勢に基づいてプレイヤオブジェクトPoの移動方向が設定される。このような移動方向の設定によって、端末装置6自体がプレイヤオブジェクトPoとなったかのような操作環境をユーザに提供することができ、当該ユーザが仮想世界のプレイヤオブジェクトPoになったような感覚やプレイヤオブジェクトPoを直接操作しているかのような感覚を与えることができる。また、端末装置6の姿勢を用いた操作は、鉛直方向周り(例えば、y軸方向周り)の左右振り運動(ヨー)、左右水平方向周り(例えば、x軸方向周り)の上下振り運動(ピッチ)、前後水平方向周り(例えば、z軸方向周り)の左右回転運動(ロール)のように3方向への回転操作が可能となり、仮想世界においても当該3方向の少なくとも1方向への移動方向の設定が可能なプレイヤオブジェクトPoの制御に好適である。例えば、上記ゲーム例の場合、端末装置6のLCD61に沿った縦方向(y軸方向)周りの左右振り運動(ヨー)をプレイヤオブジェクトPoの左右方向への移動方向変化(ヨー)に対応させ、LCD61に沿った左右方向(x軸方向)周りの上下振り運動(ピッチ)をプレイヤオブジェクトPoの上下方向への移動方向変化(ピッチ)に対応させることによって、仮想世界においてユーザが希望する移動方向へ移動するオブジェクト制御を提供することができる。また、上述したゲーム例では、ボード型コントローラ9上でユーザが動作することに応じて、プレイヤオブジェクトPoの移動動作(例えば、移動速度の設定)が行われる。つまり、ユーザは、複数のデバイス(端末装置6およびボード型コントローラ9)によって1つのプレイヤオブジェクトPoの移動方向と移動速度とを操作することになり、今までにない操作が可能となる。また、端末装置6の姿勢によるプレイヤオブジェクトPoの移動方向設定によって、ユーザが仮想世界のプレイヤオブジェクトPoになったような感覚やプレイヤオブジェクトPoを直接操作しているかのような感覚が与えられることに加えて、ボード型コントローラ9上の操作によってさらに自分自身が実空間におけるプレイヤオブジェクトPoになったかのような操作感覚が与えられるため、さらに仮想世界にいるかのような感覚が高まることになる。
また、上述したゲーム例では、端末装置6のLCD61に表示されている仮想世界の奥行方向を、プレイヤオブジェクトPoの移動方向とすることができる。したがって、ユーザは、端末装置6の姿勢によってプレイヤオブジェクトPoの移動方向を設定できるとともに、その移動方向を奥行方向とした仮想世界がLCD61に表示されるために、移動方向を設定する操作が直感的で当該移動方向をユーザが所望する方向に合わせることが容易となる。また、上述した仮想カメラの方向と同様に、端末装置6の3方向への回転操作に応じてプレイヤオブジェクトPoの移動方向を設定することも可能となるため、仮想世界においてユーザが希望する移動方向をそのまま設定することが可能となる。
また、上述したゲーム例では、プレイヤオブジェクトPoを少なくとも含む仮想世界の画像を端末装置6のLCD61に表示したが、他の態様の仮想世界の画像をLCD61に表示してもかまわない。例えば、プレイヤオブジェクトPoを表示せずに、プレイヤオブジェクトPoから見た主観視点の仮想世界画像をLCD61に表示してもよい。この場合、LCD61に主観視点で表示されている仮想世界の上下方向は、端末装置6のロールに応じて逆方向にロール(すなわち、実空間における端末装置6のロールと同じ動作で仮想世界における第1仮想カメラがロールする)してもよい。また、LCD61に主観視点で表示されている仮想世界の奥行方向は、プレイヤオブジェクトPoの移動方向と同じであってもいいし、プレイヤオブジェクトPoの移動方向と異なっていてもよい。LCD61に主観視点で表示されている仮想世界の奥行方向と、プレイヤオブジェクトPoの移動方向と同じである場合、移動方向を奥行方向とした仮想世界がLCD61に表示されるために、移動方向を設定する操作が直感的で当該移動方向をユーザが所望する方向に合わせることが容易となることは言うまでもない。
なお、上述したゲーム例では、端末装置6の姿勢に基づいて決定された操作指示方向に応じて、即時に仮想カメラの位置や姿勢の制御が連動するような処理例を用いた。しかしながら、操作指示方向の変化や操作上方向の変化に応じて、所定の時間遅れて第1仮想カメラの位置や姿勢の制御が行われるような処理でもかまわない。この場合、プレイヤオブジェクトPoの向きや姿勢が変わった後に、所定時間遅れて当該向きや姿勢に追従して第1仮想カメラの位置や姿勢が変化することになる。
また、上述したゲーム例では、プレイヤオブジェクトPoと第1仮想カメラとのロール方向を含めた位置関係を固定して、仮想世界において移動するプレイヤオブジェクトPoの位置に基づいて第1仮想カメラの位置を設定しているが、プレイヤオブジェクトPoと第1仮想カメラとの位置関係が変化するようにしてもかまわない。一例として、端末装置6に対して、前後水平方向周り(例えば、z軸方向周り)の左右回転運動(ロール)のような回転操作が行われた場合、端末装置6がロールした方向へロールした角度だけ仮想世界において第1仮想カメラを視線方向(Z軸正方向)周りにロールさせる。これに対して、プレイヤオブジェクトPoは、上記ロールした方向へ上記ロールした角度より小さな角度で仮想世界において移動方向(移動方向と視線方向とが一致している場合は、視線方向と同じ方向)周りにロールさせる。これによって、少なくともプレイヤオブジェクトPoと第1仮想カメラとのロール方向への位置関係が変化することになる。このように、プレイヤオブジェクトPoがロール方向へ姿勢を変えるロール角度を、端末装置6のロール角度より小さな角度にした場合であっても、ユーザの端末装置6のロール操作に反応してプレイヤオブジェクトPoがロール動作していることは同じであるため、同様の操作感覚を味わうことができる。
他の例として、端末装置6に対して、前後水平方向周り(例えば、z軸方向周り)の左右回転運動(ロール)のような回転操作が行われた場合、端末装置6がロールした方向へロールした角度だけ仮想世界において第1仮想カメラを視線方向(Z軸正方向)周りにロールさせる。これに対して、プレイヤオブジェクトPoは、上記ロールした方向へ上記ロールした角度と同じ角度だけ仮想世界において移動方向(移動方向と視線方向とが一致している場合は、視線方向と同じ方向)周りに一旦ロールさせた後、プレイヤオブジェクトPoのみ胴体背面方向が仮想世界の上方に向くように所定のロール回転速度で姿勢を変化させる。これによって、少なくともプレイヤオブジェクトPoと第1仮想カメラとのロール方向への位置関係が、ロール回転移動の後に変化することになる。このように、プレイヤオブジェクトPoのロール方向の姿勢が仮想世界の上下方向に基づいた方向に戻っていくような制御が行われた場合であっても、ユーザの端末装置6のロール操作に反応してプレイヤオブジェクトPoを一旦ロール動作させることが可能であるため、端末装置6をロール操作した時点において同様の操作感覚を味わうことができる。
また、上述した説明では、実空間における端末装置6の姿勢と同じ姿勢となるように、仮想世界における第1仮想カメラの姿勢を制御している。これによって、ユーザが見たい方向へ端末装置6を向けることに応じて、例えば端末装置6を介して仮想世界内を覗いているような画像をユーザに提供することができ、当該ユーザに仮想世界にいるかのような感覚を与えることができるが、このような効果を期待しない場合、実空間における端末装置6の姿勢と仮想世界における第1仮想カメラの姿勢とが完全に一致しなくてもかまわない。例えば、端末装置6が所定軸(例えば、z軸)周りに回転量θtで回転した場合、第1仮想カメラを当該所定軸に対応する仮想世界の方向(例えば、視線方向)周りに回転量θtより少ない回転量または多い回転量で回転させてもかまわない。また、回転量θtより少ない回転量または多い回転量で第1仮想カメラが回転した後、実空間における端末装置6の姿勢と同じ姿勢となるように、所定の回転速度で第1仮想カメラがさらに回転をしてもかまわない。
また、上述した情報処理例では、端末装置6のz軸周りの動きや第1仮想カメラおよびプレイヤオブジェクトPoをロールさせる方向を設定するために、端末装置上方向(y軸正方向)や操作上方向を用いているが、端末装置6の姿勢に対応する第1仮想カメラおよびプレイヤオブジェクトPoの仮想世界におけるロール方向の姿勢が一旦設定されれば、その後の処理はこれらの方向を用いなくてもかまわない。例えば、端末装置6の姿勢に対応する第1仮想カメラおよびプレイヤオブジェクトPoの仮想世界におけるロール方向の姿勢が設定された後については、端末装置6のz軸周りに生じる角速度に対応する回転角度をそのまま第1仮想カメラおよびプレイヤオブジェクトPoの仮想世界におけるロール方向の姿勢に対応させれば、同様の姿勢制御が可能となる。
また、上述した説明では、仮想世界を固定して仮想カメラやプレイヤオブジェクトPoを当該仮想世界に対して動かしているが、仮想カメラやプレイヤオブジェクトPoが仮想世界に対して相対的に動けばよいことは言うまでもない。例えば、端末装置6の方向、動き、姿勢変化等に応じて仮想世界における仮想カメラの方向、位置、姿勢変化等が変化する場合、仮想カメラの方向、位置、姿勢を固定して、端末装置6の方向、動き、姿勢変化に応じて当該仮想カメラを基準として仮想世界全体を動かしてもかまわない。また、端末装置6の方向、動き、姿勢変化等に応じて仮想世界におけるプレイヤオブジェクトPoの方向、位置、姿勢等が変化する場合、プレイヤオブジェクトPoの方向、位置、姿勢を固定して、端末装置6の方向、動き、姿勢変化に応じてプレイヤオブジェクトPoを基準としてプレイヤオブジェクトPo以外の仮想世界全体を動かしてもかまわない。
また、上述した説明では、端末装置6のz軸周りの動きや第1仮想カメラおよびプレイヤオブジェクトPoをロールさせる方向を設定するために、端末装置上方向(y軸正方向)や操作上方向を用いたが、z軸に直交する他の軸や第1仮想カメラの視線方向およびプレイヤオブジェクトPoの移動方向(操作指示方向)に直交する他の方向を用いて設定してもかまわない。例えば、端末装置左方向(x軸正方向)や操作左方向を用いて端末装置6のz軸周りの動きや第1仮想カメラおよびプレイヤオブジェクトPoをロールさせる方向を設定してもかまわない。
また、上述したゲーム例では、端末装置6のLCD61に表示されるゲーム画像と、モニタ2に表示されるゲーム画像とは、何れも同じ仮想世界(仮想空間)の様子を示す画像であるが、当該仮想世界(仮想空間)を見る視点や範囲が異なる画像である。したがって、ユーザは、2つの表示画面に表示された異なる視界や表示範囲となった仮想世界(仮想空間)を見ることが可能となり、ゲーム状況等に応じて適宜好適なゲーム画像を見ることが可能となる。また、上述したゲーム例では、ユーザが端末装置6を把持して操作を行い、実空間における端末装置6の姿勢や位置に応じてプレイヤオブジェクトPoや仮想カメラの位置や姿勢を変化させるとともに、LCD61に表示される画像もプレイヤオブジェクトPoや仮想カメラの位置や姿勢に応じて変化させることもできる。したがって、端末装置6を把持しながらLCD61に表示される画像を見るユーザに、仮想世界(仮想空間)の臨場感を与えることができる。その一方で、LCD61に表示される画像だけを見ていると仮想世界(仮想空間)全体に対する位置やプレイヤオブジェクトPoの周囲の状況の把握が難しくなることも考えられるが、モニタ2に相対的に広い範囲の仮想世界(仮想空間)を表示することによって、このような問題を解消することができる。
また、上述したゲーム例では、ユーザは、ボード型コントローラ9にかける荷重変化によって操作が可能であるとともに、プレイヤオブジェクトPoを含むゲーム画像が表示される端末装置6を把持して行う操作(本体姿勢や位置による操作、タッチ操作、ボタン操作等)も可能となっている。そして、端末装置6に表示されるプレイヤオブジェクトPoは、ボード型コントローラ9にかける荷重変化によって操作および/または端末装置6を用いた操作に応じて、仮想世界内で動作する。したがって、ユーザ自身がプレイヤオブジェクトPoとなって動作して仮想世界を見ているような感覚をユーザに与えたり、プレイヤオブジェクトPoを実空間で操作しているような感覚をユーザに与えたりすることが可能となる。
ここで、上述したボード型コントローラ9を用いた操作では、ボード型コントローラ9に掛かる荷重の有無、荷重変化、および荷重の重心位置を用いて、プレイヤオブジェクトPoの様々な動作制御に用いられている。例えば、上述したゲーム例では、ボード型コントローラ9に掛かる荷重変化や荷重の重心位置によって、プレイヤオブジェクトの動作、移動速度、および移動方向等を変化させている。なお、上記ゲーム例では、ユーザの操作方向に応じて仮想世界における方向(例えば、プレイヤオブジェクトPoの移動方向や正面方向等)が設定されるゲーム例ではあるが、当該方向が端末装置6の姿勢(方向)に基づいて設定されている。これは、端末装置6の姿勢による操作とボード型コントローラ9を用いた操作とを比較した場合に、端末装置6の姿勢による操作の方が方向を設定する操作が容易であってゲームの臨場感が増す方が選択されている例であり、端末装置6の姿勢およびボード型コントローラ9に掛かる荷重の重心位置の適切な方をゲーム内容に応じて方向指示を行う操作として選択してもかまわない。このように、端末装置6およびボード型コントローラ9を操作手段として用いる場合、ユーザの操作に応じて仮想世界における方向を設定する際、複数の操作を選択肢として好適な方式を選択することが可能となる。
なお、ゲームシステム1は、端末装置6およびボード型コントローラ9を操作手段として、上記で説明したように種々のゲームを行うことが可能である。端末装置6は、可搬形のディスプレイや第2のディスプレイとしても使用することができる一方で、本体の動きによる操作、タッチ操作、ボタン操作等による入力を行うコントローラとしても使用することができ、ゲームシステム1によれば、幅広いゲームを実施することが可能となる。つまり、端末装置6は、表示装置として機能するものであるため、モニタ2やコントローラ7を使用せずに端末装置6を表示手段として使用し、ボード型コントローラ9を操作手段として使用するようなゲームシステムのような形態もあり得る。また、端末装置6は、表示装置として機能するとともに、操作装置としても機能するものであるため、モニタ2およびコントローラ7を使用せずに端末装置6を表示手段として使用し、端末装置6およびボード型コントローラ9を操作手段として使用するようなゲームシステムのような形態もあり得る。さらに、端末装置6は、表示装置として機能するとともに、操作装置としても機能するものであるため、モニタ2、コントローラ7、およびボード型コントローラ9を使用せずに端末装置6を表示手段として使用し、端末装置6を操作手段として使用するようなゲームシステムのような形態もあり得る。
また、上記実施形態においては、端末装置6は、ゲーム処理を実行しない、いわゆるシンクライアント端末として機能するものであった。しかしながら、端末装置6は、上記実施形態においてゲーム装置本体5によって実行される一連のゲーム処理のうち、少なくとも一部の処理が端末装置6によって実行されてもよい。一例として、一部の処理(例えば、端末用ゲーム画像の生成処理)を端末装置6が実行するようにしてもよい。他の例として、ゲーム装置本体5によって実行される一連のゲーム処理全てを端末装置6が実行するようにしてもよい。この場合、端末装置6は、表示装置として機能するとともに、ゲーム処理を実行する処理装置としても機能するものであるため、モニタ2、ゲーム装置本体5、およびコントローラ7を使用せずに端末装置6を表示手段として使用し、ボード型コントローラ9を操作手段として使用し、端末装置6を処理手段として使用するようなゲームシステムのような形態もあり得る。当該ゲームシステムでは、端末装置6およびボード型コントローラ9のみが無線または有線によって接続され、ボード型コントローラ9からボード操作データを端末装置6へ出力することによって、種々のゲームを行うことができる。また、ボード型コントローラ9も使用しない場合、端末装置6を表示手段、操作手段、および処理手段として使用するような形態もあり得ることは言うまでもない。
また、上記実施形態においては、端末装置6の動き(位置や姿勢、あるいは、位置や姿勢の変化を含む)を算出するために用いられる姿勢データ(例えば、磁気センサ602、加速度センサ603、およびジャイロセンサ604から出力される少なくとも1つのデータ)を端末装置6からゲーム装置本体5へ出力され、ゲーム装置本体5における情報処理によって端末装置6の動きが算出されている。しかしながら、ゲーム装置本体5において算出されている端末装置6の動きを、端末装置6において算出してもかまわない。この場合、端末装置6で算出された端末装置6の動きを示すデータ(すなわち、上記姿勢データを用いて算出された、端末装置6の位置や姿勢、あるいは、位置や姿勢の変化を示すデータ)が、端末装置6からゲーム装置本体5へ出力され、ゲーム装置本体5における情報処理において当該データが利用されることになる。
また、上述した説明では、端末装置6とゲーム装置本体5との間およびボード型コントローラ9とゲーム装置本体5との間がそれぞれ無線通信によって接続された態様を用いたが、他の態様によって装置間の無線通信が行われてもかまわない。第1の例として、端末装置6が他の無線通信の中継装置として機能する。この場合、ボード型コントローラ9のボード操作データが端末装置6へ無線送信され、受信したボード操作データと共に端末装置6の端末操作データを、端末装置6がゲーム装置本体5へ無線送信する。この場合、端末装置6とゲーム装置本体5とが無線通信によって直接的に接続されるが、ボード型コントローラ9は、端末装置6を介してゲーム装置本体5と無線通信によって接続されることになる。第2の例として、ボード型コントローラ9が他の無線通信の中継装置として機能する。この場合、端末装置6の端末操作データがボード型コントローラ9へ無線送信され、受信した端末操作データと共にボード型コントローラ9のボード操作データを、ボード型コントローラ9がゲーム装置本体5へ無線送信する。この場合、ボード型コントローラ9とゲーム装置本体5とが無線通信によって直接的に接続されるが、端末装置6は、ボード型コントローラ9を介してゲーム装置本体5と無線通信によって接続されることになる。なお、他の装置が中継してゲーム装置本体5に操作データを送信する場合、ケーブルを介して当該操作データを生成する装置と当該操作データを中継する他の装置との間を電気的に接続してもかまわない。
また、端末装置6および/またはボード型コントローラ9と、ゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、端末装置6および/またはボード型コントローラ9に接続されたケーブルをゲーム装置本体5の接続端子に接続する。第1の例として、端末装置6とゲーム装置本体5とが第1のケーブルを介して電気的に接続され、ボード型コントローラ9とゲーム装置本体5とが第2のケーブルを介して電気的に接続される。第2の例として、端末装置6とゲーム装置本体5との間がケーブルを介して電気的に接続される。この場合、ボード型コントローラ9のボード操作データは、端末装置6へ無線送信された後に上記ケーブルを介してゲーム装置本体5に送信されてもいいし、ボード型コントローラ9から直接ゲーム装置本体5に無線送信されてもよい。第3の例として、ボード型コントローラ9とゲーム装置本体5との間がケーブルを介して電気的に接続される。この場合、端末装置6の端末操作データは、ボード型コントローラ9へ無線送信された後に上記ケーブルを介してゲーム装置本体5に送信されてもいいし、端末装置6から直接ゲーム装置本体5に無線送信されてもよい。
また、上記実施形態においては、ゲームシステム1が端末装置6およびボード型コントローラ9をそれぞれ1つ有する構成であったが、ゲームシステム1は、複数組の端末装置6およびボード型コントローラ9を有する構成であってもよい。すなわち、ゲーム装置本体5は、複数組の端末装置6およびボード型コントローラ9とそれぞれ無線通信可能であり、ゲーム画像のデータとゲーム音声のデータと制御データとを各端末装置6へ送信し、端末操作データとカメラ画像データとマイク音データとボード操作データとを各端末装置6およびボード型コントローラ9から受信するものであってもよい。なお、ゲーム装置本体5は、複数の端末装置6およびボード型コントローラ9のそれぞれと無線通信を行うが、このとき、ゲーム装置本体5は、各端末装置6およびボード型コントローラ9との無線通信を時分割で行ってもよいし、周波数帯域を分割して行ってもよい。
上記のように複数組の端末装置6およびボード型コントローラ9を有する場合には、ゲームシステム1を用いてより多くの種類のゲームを行うことができる。例えば、ゲームシステム1が2組の端末装置6およびボード型コントローラ9を有する場合には、2人のユーザが同時にゲームを行うことができる。また、ゲームシステム1が2組の端末装置6およびボード型コントローラ9を有する場合には、ゲームシステム1は3つの表示装置を有することになるので、3人のユーザのそれぞれのためのゲーム画像を生成し、各表示装置に表示させることができる。
また、上述した説明では、ボード型コントローラ9に複数の荷重センサ94を設けているが、上記処理においてボード型コントローラ9に加わっている荷重の重心位置の情報が不要であれば、荷重センサ94を少なくとも1つボード型コントローラ9に設けてもかまわない。
また、上記実施例では、据置型のゲーム装置3を用いて説明したが、携帯型のゲーム装置や一般的なパーソナルコンピュータ等の情報処理装置で本発明の情報処理プログラムを実行して、本発明を実現してもかまわない。また、他の実施形態では、ゲーム装置に限らず任意の携帯型電子機器、例えば、PDA(Personal Digital Assistant)や携帯電話、パーソナルコンピュータ、カメラ等であってもよい。何れの装置であっても、当該装置と端末装置6およびボード型コントローラ9とを無線または有線で接続することによって、本発明を実現することができる。
また、上述した説明では情報処理をゲーム装置本体5で行う例を用いたが、上記情報処理における処理ステップの少なくとも一部をゲームシステム1の外部に設けられた他の装置で行ってもかまわない。例えば、ゲーム装置本体5が他の装置(例えば、サーバや他のゲーム装置)と通信可能に構成されている場合、上記情報処理における処理ステップは、ゲーム装置本体5および当該他の装置が協働することによって実行してもよい。一例として、他の装置において、プレイヤオブジェクトおよび仮想世界等を設定する処理が行われ、ゲーム装置本体5からプレイヤオブジェクトの動作や姿勢に関するデータが他の装置へ送信されて、上記情報処理が行われることが考えられる。そして、他の装置で生成された仮想世界を示す画像データがゲーム装置本体5へ送信され、当該仮想世界がモニタ2やLCD61に表示される。このように、上記情報処理における処理ステップの少なくとも一部を他の装置で行うことによって、上述した情報処理と同様の処理が可能となる。なお、上記情報処理における処理ステップの少なくとも一部をボード型コントローラ9(マイコン100)で行ってもよい。また、上述した情報処理は、少なくとも1つの情報処理装置により構成される情報処理システムに含まれる1つのプロセッサまたは複数のプロセッサ間の協働により実行されることが可能である。また、上記実施形態においては、ゲーム装置本体5のCPU10が所定のプログラムを実行することによって、上述したフローチャートによる処理が行われたが、ゲーム装置本体5が備える専用回路によって上記処理の一部または全部が行われてもよい。
また、上述したゲーム装置本体5の形状や、端末装置6、コントローラ7、およびボード型コントローラ9の形状および各種操作ボタンやセンサの形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した情報処理で用いられる処理順序、設定値、表示態様、判定に用いられる値等は、単なる一例に過ぎず他の順序、表示態様、値であっても、本発明を実現できることは言うまでもない。
また、上記情報処理プログラム(ゲームプログラム)は、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、情報処理プログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、情報処理プログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体、フレキシブルディスク、ハードディスク、光磁気ディスク、磁気テープなどでもよい。また、上記情報処理プログラムを記憶する情報記憶媒体としては、不揮発性半導体メモリや揮発性メモリでもよい。このような記憶媒体は、コンピュータ等が読み取り可能な記録媒体ということができる。例えば、コンピュータ等に、これらの記録媒体のプログラムを読み込ませて実行させることにより、上述で説明した各種機能を提供させることができる。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示に過ぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。本発明は、特許請求の範囲によってのみその範囲が解釈されるべきであることが理解される。また、当業者は、本発明の具体的な実施形態の記載から、本発明の記載および技術常識に基づいて等価な範囲を実施することができることが理解される。また、本明細書において使用される用語は、特に言及しない限り、当該分野で通常用いられる意味で用いられることが理解されるべきである。したがって、他に定義されない限り、本明細書中で使用される全ての専門用語および技術用語は、本発明の属する分野の当業者によって一般的に理解されるのと同じ意味を有する。矛盾する場合、本明細書(定義を含めて)が優先する。