[1.ゲームシステムの全体構成]
以下、図面を参照して、本発明の一実施形態に係るゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。図1において、ゲームシステム1は、テレビジョン受像器等に代表される据置型のディスプレイ装置(以下、「テレビ」と記載する)2、据置型のゲーム装置3、光ディスク4、コントローラ5、マーカ装置6、および、端末装置7を含む。ゲームシステム1は、コントローラ5を用いたゲーム操作に基づいてゲーム装置3においてゲーム処理を実行し、ゲーム処理によって得られるゲーム画像をテレビ2および/または端末装置7に表示するものである。
ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例である光ディスク4が脱着可能に挿入される。光ディスク4には、ゲーム装置3において実行されるための情報処理プログラム(典型的にはゲームプログラム)が記憶されている。ゲーム装置3の前面には光ディスク4の挿入口が設けられている。ゲーム装置3は、挿入口に挿入された光ディスク4に記憶されている情報処理プログラムを読み出して実行することによってゲーム処理を実行する。
ゲーム装置3には、テレビ2が接続コードを介して接続される。テレビ2は、ゲーム装置3において実行されるゲーム処理によって得られるゲーム画像を表示する。テレビ2はスピーカ2a(図2)を有しており、スピーカ2aは、上記ゲーム処理の結果得られるゲーム音声を出力する。なお、他の実施形態においては、ゲーム装置3と据置型の表示装置とは一体となっていてもよい。また、ゲーム装置3とテレビ2との通信は無線通信であってもよい。
テレビ2の画面の周辺(図1では画面の上側)には、マーカ装置6が設置される。詳細は後述するが、ユーザ(プレイヤ)はコントローラ5を動かすゲーム操作を行うことができ、マーカ装置6は、コントローラ5の動きや位置や姿勢等をゲーム装置3が算出するために用いられる。マーカ装置6は、その両端に2つのマーカ6Rおよび6Lを備えている。マーカ6R(マーカ6Lも同様)は、具体的には1以上の赤外LED(Light Emitting Diode)であり、テレビ2の前方に向かって赤外光を出力する。マーカ装置6は有線で(無線であってもよい)ゲーム装置3に接続されており、ゲーム装置3はマーカ装置6が備える各赤外LEDの点灯を制御することが可能である。なお、マーカ装置6は可搬型であり、ユーザはマーカ装置6を自由な位置に設置することができる。図1ではマーカ装置6がテレビ2の上に設置された態様を表しているが、マーカ装置6を設置する位置および向きは任意である。
コントローラ5は、自機に対する操作に基づく操作データをゲーム装置3に与えるものである。本実施形態では、コントローラ5は、メインコントローラ8とサブコントローラ9とを有し、サブコントローラ9がメインコントローラ8に着脱可能に装着される構成である。コントローラ5とゲーム装置3とは無線通信によって通信可能である。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。また、図1では、ゲームシステム1に含まれるコントローラ5は1つとするが、ゲームシステム1は複数のコントローラ5を含んでいてもよい。つまり、ゲーム装置3は複数のコントローラと通信可能であり、所定台数のコントローラを同時に使用することによって複数人でゲームをプレイすることが可能である。コントローラ5の詳細な構成については後述する。
端末装置7は、ユーザが把持可能な程度の大きさであり、ユーザは端末装置7を手に持って動かしたり、あるいは、端末装置7を自由な位置に配置したりして使用することが可能である。詳細な構成は後述するが、端末装置7は、表示手段であるLCD(Liquid Crystal Display:液晶表示装置)51、および、入力手段(後述するタッチパネル52やジャイロセンサ64等)を備える。端末装置7とゲーム装置3とは無線(有線であってもよい)によって通信可能である。端末装置7は、ゲーム装置3で生成された画像(例えばゲーム画像)のデータをゲーム装置3から受信し、画像をLCD51に表示する。なお、本実施形態では表示装置としてLCDを用いているが、端末装置7は、例えばEL(Electro Luminescence:電界発光)を利用した表示装置等、他の任意の表示装置を有していてもよい。また、端末装置7は、自機に対する操作に基づく操作データをゲーム装置3に送信する。
[2.ゲーム装置3の内部構成]
次に、図2を参照して、ゲーム装置3の内部構成について説明する。図2は、ゲーム装置3の内部構成を示すブロック図である。ゲーム装置3は、CPU(Central Processing Unit)10、システムLSI11、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15等を有する。
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間におけるデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムLSI11の内部構成については後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置3の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC:Real Time Clock)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ11eまたは外部メインメモリ12に読み出したデータを書き込む。
システムLSI11には、入出力プロセッサ(I/Oプロセッサ)11a、GPU(Graphics Processor Unit)11b、DSP(Digital Signal Processor)11c、VRAM(Video RAM)11d、および内部メインメモリ11eが設けられる。図示は省略するが、これらの構成要素11a〜11eは内部バスによって互いに接続される。
GPU11bは、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM11dは、GPU11bがグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU11bは、VRAM11dに記憶されたデータを用いて画像データを作成する。なお、本実施形態においては、ゲーム装置3は、テレビ2に表示するゲーム画像と、端末装置7に表示するゲーム画像との両方を生成する。以下では、テレビ2に表示されるゲーム画像を「テレビ用ゲーム画像」と呼び、端末装置7に表示されるゲーム画像を「端末用ゲーム画像」と呼ぶことがある。
DSP11cは、オーディオプロセッサとして機能し、内部メインメモリ11eや外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。なお、本実施形態においては、ゲーム音声についてもゲーム画像と同様、テレビ2のスピーカから出力するゲーム音声と、端末装置7のスピーカから出力するゲーム音声との両方が生成される。以下では、テレビ2から出力されるゲーム音声を「テレビ用ゲーム音声」と呼び、端末装置7から出力されるゲーム音声を「端末用ゲーム音声」と呼ぶことがある。
上記のようにゲーム装置3において生成される画像および音声のうちで、テレビ2において出力される画像および音声のデータは、AV−IC15によって読み出される。AV−IC15は、読み出した画像データをAVコネクタ16を介してテレビ2に出力するとともに、読み出した音声データを、テレビ2に内蔵されるスピーカ2aに出力する。これによって、テレビ2に画像が表示されるとともにスピーカ2aから音が出力される。
また、ゲーム装置3において生成される画像および音声のうちで、端末装置7において出力される画像および音声のデータは、入出力プロセッサ11a等によって端末装置7へ送信される。入出力プロセッサ11a等による端末装置7へのデータの送信については後述する。
入出力プロセッサ11aは、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ11aは、フラッシュメモリ17、ネットワーク通信モジュール18、コントローラ通信モジュール19、拡張コネクタ20、メモリカード用コネクタ21、コーデックLSI27に接続される。また、ネットワーク通信モジュール18にはアンテナ22が接続される。コントローラ通信モジュール19にはアンテナ23が接続される。コーデックLSI27は端末通信モジュール28に接続され、端末通信モジュール28にはアンテナ29が接続される。
ゲーム装置3は、インターネット等のネットワークに接続して外部情報処理装置(例えば他のゲーム装置や、各種サーバや、各種情報処理装置等)と通信を行うことが可能である。すなわち、入出力プロセッサ11aは、ネットワーク通信モジュール18およびアンテナ22を介してインターネット等のネットワークに接続し、ネットワークに接続される外部情報処理装置と通信することができる。入出力プロセッサ11aは、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、ネットワーク通信モジュール18およびアンテナ22を介してネットワークに送信する。また、入出力プロセッサ11aは、外部情報処理装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22およびネットワーク通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10はゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置3と外部情報処理装置との間で送受信されるデータの他、ゲーム装置3を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。また、フラッシュメモリ17にはゲームプログラムが記憶されてもよい。
また、ゲーム装置3は、コントローラ5からの操作データを受信することが可能である。すなわち、入出力プロセッサ11aは、コントローラ5から送信される操作データをアンテナ23およびコントローラ通信モジュール19を介して受信し、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
また、ゲーム装置3は、端末装置7との間で画像や音声等のデータを送受信することが可能である。入出力プロセッサ11aは、端末装置7へゲーム画像(端末用ゲーム画像)を送信する場合、GPU11bが生成したゲーム画像のデータをコーデックLSI27へ出力する。コーデックLSI27は、入出力プロセッサ11aからの画像データに対して所定の圧縮処理を行う。端末通信モジュール28は、端末装置7との間で無線通信を行う。したがって、コーデックLSI27によって圧縮された画像データは、端末通信モジュール28によってアンテナ29を介して端末装置7へ送信される。なお、本実施形態では、ゲーム装置3から端末装置7へ送信される画像データはゲームに用いるものであり、ゲームにおいては表示される画像に遅延が生じるとゲームの操作性に悪影響が出る。そのため、ゲーム装置3から端末装置7への画像データの送信に関しては、できるだけ遅延が生じないようにすることが好ましい。したがって、本実施形態では、コーデックLSI27は、例えばH.264規格といった高効率の圧縮技術を用いて画像データを圧縮する。なお、それ以外の圧縮技術を用いてもよいし、通信速度が十分である場合には無圧縮で画像データを送信する構成であってもよい。また、端末通信モジュール28は、例えばWi−Fiの認証を受けた通信モジュールであり、例えばIEEE802.11n規格で採用されるMIMO(Multiple Input Multiple Output)の技術を用いて端末装置7との間の無線通信を高速に行うようにしてもよいし、他の通信方式を用いてもよい。
また、ゲーム装置3は、画像データの他、音声データを端末装置7へ送信する。すなわち、入出力プロセッサ11aは、DSP11cが生成した音声データを、コーデックLSI27を介して端末通信モジュール28へ出力する。コーデックLSI27は、音声データに対しても画像データと同様に圧縮処理を行う。音声データに対する圧縮の方式は、どのような方式であってもよいが、圧縮率が高く、音声の劣化が少ない方式が好ましい。また、他の実施形態においては、音声データは圧縮されずに送信されてもよい。端末通信モジュール28は、圧縮された画像データおよび音声データを、アンテナ29を介して端末装置7へ送信する。
さらに、ゲーム装置3は、上記画像データおよび音声データの他に、必要に応じて各種の制御データを端末装置7へ送信する。制御データは、端末装置7が備える構成要素に対する制御指示を表すデータであり、例えばマーカ部(図11に示すマーカ部55)の点灯を制御する指示や、カメラ(図11に示すカメラ56)の撮像を制御する指示等を表す。入出力プロセッサ11aは、CPU10の指示に応じて制御データを端末装置7へ送信する。なお、この制御データに関して、本実施形態ではコーデックLSI27はデータの圧縮処理を行わないが、他の実施形態においては圧縮処理を行うようにしてもよい。なお、ゲーム装置3から端末装置7へ送信される上述のデータは、必要に応じて暗号化がされていてもよいし、されていなくともよい。
また、ゲーム装置3は、端末装置7から各種データを受信可能である。詳細は後述するが、本実施形態では、端末装置7は、操作データ、画像データ、および音声データを送信する。端末装置7から送信される各データはアンテナ29を介して端末通信モジュール28によって受信される。ここで、端末装置7からの画像データおよび音声データは、ゲーム装置3から端末装置7への画像データおよび音声データと同様の圧縮処理が施されている。したがって、これら画像データおよび音声データについては、端末通信モジュール28からコーデックLSI27に送られ、コーデックLSI27によって伸張処理が施されて入出力プロセッサ11aに出力される。一方、端末装置7からの操作データに関しては、画像や音声に比べてデータ量が少ないので、圧縮処理が施されていなくともよい。また、必要に応じて暗号化がされていてもよいし、されていなくともよい。したがって、操作データは、端末通信モジュール28で受信された後、コーデックLSI27を介して入出力プロセッサ11aに出力される。入出力プロセッサ11aは、端末装置7から受信したデータを、内部メインメモリ11eまたは外部メインメモリ12のバッファ領域に記憶(一時記憶)する。
また、ゲーム装置3は、他の機器や外部記憶媒体に接続することが可能である。すなわち、入出力プロセッサ11aには、拡張コネクタ20およびメモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタである。拡張コネクタ20に対しては、外部記憶媒体のようなメディアを接続したり、他のコントローラ等の周辺機器を接続したり、有線の通信用コネクタを接続することによってネットワーク通信モジュール18に替えてネットワークとの通信を行ったりすることができる。メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ11aは、拡張コネクタ20やメモリカード用コネクタ21を介して外部記憶媒体にアクセスし、外部記憶媒体にデータを保存したり、外部記憶媒体からデータを読み出したりすることができる。
ゲーム装置3には、電源ボタン24、リセットボタン25、およびイジェクトボタン26が設けられる。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、図示しないACアダプタによって外部の電源からゲーム装置3の各構成要素に対して電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置3の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
なお、他の実施形態においては、ゲーム装置3が備える各構成要素のうちでいくつかの構成要素は、ゲーム装置3とは別体の拡張機器として構成されてもよい。このとき、拡張機器は、例えば上記拡張コネクタ20を介してゲーム装置3と接続されるようにしてもよい。具体的には、拡張機器は、例えば上記コーデックLSI27、端末通信モジュール28およびアンテナ29の各構成要素を備えており、拡張コネクタ20に対して着脱可能であってもよい。これによれば、上記各構成要素を備えていないゲーム装置に対して上記拡張機器を接続することによって、当該ゲーム装置を端末装置7と通信可能な構成とすることができる。
[3.コントローラ5の構成]
次に、図3〜図7を参照して、コントローラ5について説明する。上述のように、コントローラ5は、メインコントローラ8とサブコントローラ9とによって構成される。図3は、メインコントローラ8の外観構成を示す斜視図である。図4は、メインコントローラ8の外観構成を示す斜視図である。図3は、メインコントローラ8の上側後方から見た斜視図であり、図4は、メインコントローラ8を下側前方から見た斜視図である。
図3および図4において、メインコントローラ8は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ1軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。ユーザは、メインコントローラ8に設けられたボタンを押下すること、および、メインコントローラ8自体を動かしてその位置や姿勢(傾き)を変えることによってゲーム操作を行うことができる。
ハウジング31には、複数の操作ボタンが設けられる。図3に示すように、ハウジング31の上面には、十字ボタン32a、1番ボタン32b、2番ボタン32c、Aボタン32d、マイナスボタン32e、ホームボタン32f、プラスボタン32g、および電源ボタン32hが設けられる。本明細書では、これらのボタン32a〜32hが設けられるハウジング31の上面を「ボタン面」と呼ぶことがある。一方、図4に示すように、ハウジング31の下面には凹部が形成されており、当該凹部の後面側傾斜面にはBボタン32iが設けられる。これらの各操作ボタン32a〜32iには、ゲーム装置3が実行する情報処理プログラムに応じた機能が適宜割り当てられる。また、電源ボタン32hは遠隔からゲーム装置3本体の電源をオン/オフするためのものである。ホームボタン32fおよび電源ボタン32hは、その上面がハウジング31の上面に埋没している。これによって、ユーザがホームボタン32fまたは電源ボタン32hを誤って押下することを防止することができる。
ハウジング31の後面にはコネクタ33が設けられている。コネクタ33は、メインコントローラ8に他の機器(例えば、サブコントローラ9や他のセンサユニット等)を接続するために利用される。また、ハウジング31の後面におけるコネクタ33の両側には、上記他の機器が容易に離脱することを防止するために係止穴33aが設けられている。
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5(メインコントローラ8)には、他のコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をユーザに通知したり、コントローラ5の電池残量をユーザに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
また、メインコントローラ8は撮像情報演算部35(図6)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、メインコントローラ8に内蔵されるスピーカ47(図5)からの音を外部に放出するための音抜き孔31aが形成されている。
次に、図5および図6を参照して、メインコントローラ8の内部構造について説明する。図5および図6は、メインコントローラ8の内部構造を示す図である。なお、図5は、メインコントローラ8の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6は、メインコントローラ8の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6に示す斜視図は、図5に示す基板30を裏面から見た斜視図となっている。
図5において、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ47等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図6参照)に接続される。本実施形態では、加速度センサ37は、X1軸方向に関してメインコントローラ8の中心からずれた位置に配置されている。これによって、メインコントローラ8をZ1軸回りに回転させたときのメインコントローラ8の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z1軸方向)に関してメインコントローラ8の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5(メインコントローラ8)がワイヤレスコントローラとして機能する。
一方、図6において、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、メインコントローラ8の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ46が設けられている。バイブレータ46は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ46が作動することによってメインコントローラ8に振動が発生する。これによって、メインコントローラ8を把持しているユーザの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ46は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ46がメインコントローラ8の中心よりも端側に配置することによって、バイブレータ46の振動によりメインコントローラ8全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5および図6に示す他、メインコントローラ8は、マイコン42の基本クロックを生成する水晶振動子、スピーカ47に音声信号を出力するアンプ等を備えている。
図7は、サブコントローラ9の外観構成を示す斜視図である。サブコントローラ9は、例えばプラスチック成型によって形成されたハウジング80を有している。ハウジング80は、メインコントローラ8と同様に、全体として大人や子供の片手で把持可能な大きさである。このサブコントローラ9を用いることによっても、プレイヤは、ボタンやスティックを操作することと、コントローラ自体の位置や向きを変えることとによって、ゲーム操作を行うことができる。
図7に示すように、ハウジング80の上面(Y2軸負方向側の面)の先端側(Z2軸正側)には、アナログジョイスティック81が設けられる。また、図示されないが、ハウジング80の先端には、後方にやや傾斜する先端面が設けられており、この先端面には、上下方向(図7に示すY2軸方向)に並べて、CボタンおよびZボタンが設けられる。アナログジョイスティック81および各ボタン(CボタンおよびZボタン)には、ゲーム装置3が実行するゲームプログラムに応じてそれぞれ適宜の機能が割り当てられる。なお、アナログジョイスティック81および各ボタンを包括的に「操作部82(図8参照)」と呼ぶことがある。
また、図7では示されないが、サブコントローラ9は、ハウジング80の内部に加速度センサ(図8に示す加速度センサ83)を有している。本実施形態においては、加速度センサ83は、メインコントローラ8の加速度センサ37と同様のものが用いられる。ただし、加速度センサ83は、加速度センサ37とは異なるものであってもよく、例えば所定の1軸または2軸の加速度を検出するものであってもよい。
また、図7に示すように、ハウジング80の後端にはケーブルの一端が接続されている。図7では示されないが、ケーブルの他端にはコネクタ(図8に示すコネクタ84)が接続される。このコネクタはメインコントローラ8のコネクタ33と接続可能である。つまり、コネクタ33とコネクタ84とを接続することによって、メインコントローラ8とサブコントローラ9とが接続される。
なお、図3〜図7に示したメインコントローラ8およびサブコントローラ9の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であってもよい。また、本実施形態では、メインコントローラ8の撮像手段による撮像方向はZ1軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
図8は、コントローラ5の構成を示すブロック図である。図8に示すように、メインコントローラ8は、操作部32(各操作ボタン32a〜32i)、撮像情報演算部35、通信部36、加速度センサ37、およびジャイロセンサ48を備えている。また、サブコントローラ9は、操作部82および加速度センサ83を備えている。コントローラ5は、自機に対して行われた操作内容を表すデータを操作データとしてゲーム装置3へ送信するものである。なお、以下では、コントローラ5が送信する操作データを「コントローラ操作データ」と呼び、端末装置7が送信する操作データを「端末操作データ」と呼ぶことがある。
操作部32は、上述した各操作ボタン32a〜32iを含み、各操作ボタン32a〜32iに対する入力状態(各操作ボタン32a〜32iが押下されたか否か)を表す操作ボタンデータを通信部36のマイコン42へ出力する。
撮像情報演算部35は、撮像手段が撮像した画像データを解析してその中で輝度が高い領域を判別してその領域の重心位置やサイズなどを算出するためのシステムである。撮像情報演算部35は、例えば最大200フレーム/秒程度のサンプリング周期を有するので、比較的高速なコントローラ5の動きでも追跡して解析することができる。
撮像情報演算部35は、赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を含んでいる。赤外線フィルタ38は、コントローラ5の前方から入射する光から赤外線のみを通過させる。レンズ39は、赤外線フィルタ38を透過した赤外線を集光して撮像素子40へ入射させる。撮像素子40は、例えばCMOSセンサやあるいはCCDセンサのような固体撮像素子であり、レンズ39が集光した赤外線を受光して画像信号を出力する。ここで、撮像対象となる端末装置7のマーカ部55およびマーカ装置6は、赤外光を出力するマーカで構成される。したがって、赤外線フィルタ38を設けることによって、撮像素子40は、赤外線フィルタ38を通過した赤外線だけを受光して画像データを生成するので、撮像対象(マーカ部55および/またはマーカ装置6)の画像をより正確に撮像することができる。以下では、撮像素子40によって撮像された画像を撮像画像と呼ぶ。撮像素子40によって生成された画像データは、画像処理回路41で処理される。画像処理回路41は、撮像画像内における撮像対象の位置を算出する。画像処理回路41は、算出された位置を示す座標を通信部36のマイコン42へ出力する。この座標のデータは、マイコン42によって操作データとしてゲーム装置3に送信される。以下では、上記座標を「マーカ座標」と呼ぶ。マーカ座標はコントローラ5自体の向き(傾斜角度)や位置に対応して変化するので、ゲーム装置3はこのマーカ座標を用いてコントローラ5の向きや位置を算出することができる。
なお、他の実施形態においては、コントローラ5は画像処理回路41を備えていない構成であってもよく、撮像画像自体がコントローラ5からゲーム装置3へ送信されてもよい。このとき、ゲーム装置3は、画像処理回路41と同様の機能を有する回路あるいはプログラムを有しており、上記マーカ座標を算出するようにしてもよい。
加速度センサ37は、コントローラ5の加速度(重力加速度を含む)を検出する、すなわち、コントローラ5に加わる力(重力を含む)を検出する。加速度センサ37は、当該加速度センサ37の検出部に加わっている加速度のうち、センシング軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。例えば、2軸以上の多軸加速度センサの場合には、加速度センサの検出部に加わっている加速度として、各軸に沿った成分の加速度をそれぞれ検出する。なお、加速度センサ37は、例えば静電容量式のMEMS(Micro Electro Mechanical System)型加速度センサであるとするが、他の方式の加速度センサを用いるようにしてもよい。
本実施形態では、加速度センサ37は、コントローラ5を基準とした上下方向(図3に示すY1軸方向)、左右方向(図3に示すX1軸方向)および前後方向(図3に示すZ1軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるX1Y1Z1座標系(コントローラ座標系)における3次元のベクトルとして表される。
加速度センサ37が検出した加速度を表すデータ(加速度データ)は、通信部36へ出力される。なお、加速度センサ37が検出した加速度は、コントローラ5自体の向き(傾斜角度)や動きに対応して変化するので、ゲーム装置3は取得された加速度データを用いてコントローラ5の向きや動きを算出することができる。本実施形態では、ゲーム装置3は、取得された加速度データに基づいてコントローラ5の姿勢や傾斜角度等を算出する。
なお、加速度センサ37(後述する加速度センサ63についても同様)から出力される加速度の信号に基づいて、ゲーム装置3のプロセッサ(例えばCPU10)またはコントローラ5のプロセッサ(例えばマイコン42)等のコンピュータが処理を行うことによって、コントローラ5に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、加速度センサ37を搭載するコントローラ5が静止状態であることを前提としてコンピュータ側の処理が実行される場合(すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理が実行される場合)、コントローラ5が現実に静止状態であれば、検出された加速度に基づいてコントローラ5の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ37の検出軸が鉛直下方向を向いている状態を基準としたとき、1G(重力加速度)がかかっているか否かによって、コントローラ5が基準に対して傾いているか否かを知ることができるし、その大きさによって基準に対してどの程度傾いているかも知ることができる。また、多軸の加速度センサ37の場合には、さらに各軸の加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ5がどの程度傾いているかをより詳細に知ることができる。この場合において、プロセッサは、加速度センサ37からの出力に基づいてコントローラ5の傾斜角度を算出してもよいし、当該傾斜角度を算出せずに、コントローラ5の傾斜方向を算出するようにしてもよい。このように、加速度センサ37をプロセッサと組み合わせて用いることによって、コントローラ5の傾斜角度または姿勢を判定することができる。
一方、コントローラ5が動的な状態(コントローラ5が動かされている状態)であることを前提とする場合には、加速度センサ37は重力加速度に加えてコントローラ5の動きに応じた加速度を検出するので、検出された加速度から重力加速度の成分を所定の処理により除去することによってコントローラ5の動き方向を知ることができる。また、コントローラ5が動的な状態であることを前提とする場合であっても、検出された加速度から、加速度センサの動きに応じた加速度の成分を所定の処理により除去することによって、重力方向に対するコントローラ5の傾きを知ることが可能である。なお、他の実施例では、加速度センサ37は、内蔵の加速度検出手段で検出された加速度信号をマイコン42に出力する前に当該加速度信号に対して所定の処理を行うための、組込み式の処理装置または他の種類の専用の処理装置を備えていてもよい。組込み式または専用の処理装置は、例えば、加速度センサ37が静的な加速度(例えば、重力加速度)を検出するために用いられる場合、加速度信号を傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
ジャイロセンサ48は、3軸(本実施形態では、X1Y1Z1軸)回りの角速度を検出する。本明細書では、コントローラ5の撮像方向(Z1軸正方向)を基準として、X1軸回りの回転方向をピッチ方向、Y1軸回りの回転方向をヨー方向、Z1軸回りの回転方向をロール方向と呼ぶ。ジャイロセンサ48は、3軸回りの角速度を検出することができればよく、用いるジャイロセンサの数および組み合わせはどのようなものであってもよい。例えば、ジャイロセンサ48は、3軸ジャイロセンサであってもよいし、2軸ジャイロセンサと1軸ジャイロセンサとを組み合わせて3軸周りの角速度を検出するものであってもよい。ジャイロセンサ48で検出された角速度を表すデータは、通信部36へ出力される。また、ジャイロセンサ48は1軸または2軸回りの角速度を検出するものであってもよい。
また、サブコントローラ9の操作部82は、上述したアナログジョイスティック81、CボタンおよびZボタンを含む。操作部82は、アナログジョイスティック81に対する傾倒方向および傾倒量を表すスティックデータ(サブスティックデータと呼ぶ)と、各ボタンに対する入力状態(各ボタンが押下されたか否か)を表す操作ボタンデータ(サブ操作ボタンデータと呼ぶ)とを、コネクタ84を介してメインコントローラ8へ出力する。
また、サブコントローラ9の加速度センサ83は、メインコントローラ8の加速度センサ37と同様のセンサであり、サブコントローラ9の加速度(重力加速度を含む)を検出する、すなわち、サブコントローラ9に加わる力(重力を含む)を検出する。加速度センサ83は、当該加速度センサ83の検出部に加わっている加速度のうち、所定の3軸方向に沿った直線方向の加速度(直線加速度)の値を検出する。検出された加速度を表すデータ(サブ加速度データと呼ぶ)は、コネクタ84を介してメインコントローラ8へ出力される。
以上のように、サブコントローラ9は、上記サブスティックデータ、サブ操作ボタンデータ、およびサブ加速度データを含むサブコントローラデータをメインコントローラ8へ出力する。
メインコントローラ8の通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
サブコントローラ9からのサブコントローラデータは、マイコン42に入力され、一時的にメモリ43に格納される。また、操作部32、撮像情報演算部35、加速度センサ37、およびジャイロセンサ48からマイコン42へ出力されたデータ(メインコントローラデータと呼ぶ)は、一時的にメモリ43に格納される。これらのメインコントローラおよびサブコントローラデータは、操作データ(コントローラ操作データ)としてゲーム装置3へ送信される。すなわち、マイコン42は、ゲーム装置3のコントローラ通信モジュール19への送信タイミングが到来すると、メモリ43に格納されている操作データを無線モジュール44へ出力する。無線モジュール44は、例えばBluetooth(ブルートゥース)(登録商標)の技術を用いて、所定周波数の搬送波を操作データで変調し、その微弱電波信号をアンテナ45から放射する。つまり、操作データは、無線モジュール44で微弱電波信号に変調されてコントローラ5から送信される。微弱電波信号はゲーム装置3側のコントローラ通信モジュール19で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置3は操作データを取得することができる。そして、ゲーム装置3のCPU10は、コントローラ5から取得した操作データを用いてゲーム処理を行う。なお、通信部36からコントローラ通信モジュール19への無線送信は所定の周期毎に逐次行われるが、ゲームの処理は1/60秒を単位として(1フレーム時間として)行われることが一般的であるので、この時間以下の周期で送信を行うことが好ましい。コントローラ5の通信部36は、例えば1/200秒に1回の割合で操作データをゲーム装置3のコントローラ通信モジュール19へ出力する。
以上のように、メインコントローラ8は、自機に対する操作を表す操作データとして、マーカ座標データ、加速度データ、角速度データ、および操作ボタンデータを送信可能である。サブコントローラ9は、自機に対する操作を表す操作データとして、加速度データ、スティックデータ、および操作ボタンデータを送信可能である。また、ゲーム装置3は、上記操作データをゲーム入力として用いてゲーム処理を実行する。したがって、上記コントローラ5を用いることによって、ユーザは、各操作ボタンを押下するという従来の一般的なゲーム操作に加えて、コントローラ5自体を動かすゲーム操作を行うことができる。例えば、メインコントローラ8および/またはサブコントローラ9を任意の姿勢に傾ける操作、メインコントローラ8によって画面上の任意の位置を指示する操作、および、メインコントローラ8および/またはサブコントローラ9自体を動かす操作等を行うことが可能となる。
また、本実施形態において、コントローラ5は、ゲーム画像を表示する表示手段を有しないが、例えば電池残量を表す画像等を表示するための表示手段を有していてもよい。
[4.端末装置7の構成]
次に、図9〜図11を参照して、端末装置7の構成について説明する。図9は、端末装置7の外観構成を示す図である。図9における(a)図は端末装置7の正面図であり、(b)図は上面図であり、(c)図は右側面図であり、(d)図は下面図である。また、図10は、ユーザが端末装置7を把持した様子を示す図である。
図9に示されるように、端末装置7は、大略的には横長の長方形の板状形状であるハウジング50を備える。ハウジング50は、ユーザが把持することができる程度の大きさである。したがって、ユーザは、端末装置7を持って動かしたり、端末装置7の配置位置を変更したりすることができる。
端末装置7は、ハウジング50の表面にLCD51を有する。LCD51は、ハウジング50の表面の中央付近に設けられる。したがって、ユーザは、図10に示すようにLCD51の両側部分のハウジング50を持つことによって、LCD51の画面を見ながら端末装置を持って動かすことができる。なお、図10ではユーザがLCD51の左右両側の部分のハウジング50を持つことで端末装置7を横持ちで(横に長い向きにして)持つ例を示しているが、端末装置7を縦持ちで(縦に長い向きにして)持つことも可能である。
図9の(a)図に示すように、端末装置7は、操作手段として、LCD51の画面上にタッチパネル52を有する。本実施形態では、タッチパネル52は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。また、タッチパネル52はシングルタッチ方式でもよいし、マルチタッチ方式であってもよい。本実施形態では、タッチパネル52として、LCD51の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル52の解像度とLCD51の解像度が一致している必要はない。タッチパネル52に対する入力は通常タッチペンを用いて行われるが、タッチペンに限らずユーザの指でタッチパネル52に対する入力をすることも可能である。なお、ハウジング50には、タッチパネル52に対する操作を行うために用いられるタッチペンを収納するための収納穴が設けられていてもよい。このように、端末装置7はタッチパネル52を備えるので、ユーザは、端末装置7を動かしながらタッチパネル52を操作することができる。つまりユーザは、LCD51の画面を動かしつつ、その画面に対して直接(タッチパネル52によって)入力を行うことができる。
図9に示すように、端末装置7は、操作手段として、2つのアナログスティック53Aおよび53Bと、複数のボタン54A〜54Lとを備えている。各アナログスティック53Aおよび53Bは、方向を指示するデバイスである。各アナログスティック53Aおよび53Bは、ユーザの指で操作されるスティック部がハウジング50の表面に対して任意の方向(上下左右および斜め方向の任意の角度)にスライド(または傾倒)することができるように構成されている。また、左アナログスティック53AはLCD51の画面の左側に、右アナログスティック53BはLCD51の画面の右側にそれぞれ設けられる。したがって、ユーザは、左右いずれの手でもアナログスティックを用いて方向を指示する入力を行うことができる。また、図10に示すように、各アナログスティック53Aおよび53Bは、ユーザが端末装置7の左右部分を把持した状態で操作可能な位置に設けられるので、ユーザは、端末装置7を持って動かす場合においても各アナログスティック53Aおよび53Bを容易に操作することができる。
各ボタン54A〜54Lは、所定の入力を行うための操作手段である。以下に示すように、各ボタン54A〜54Lは、ユーザが端末装置7の左右部分を把持した状態で操作可能な位置に設けられる(図10参照)。したがって、ユーザは、端末装置7を持って動かす場合においてもこれらの操作手段を容易に操作することができる。
図9の(a)図に示すように、ハウジング50の表面には、各操作ボタン54A〜54Lのうち、十字ボタン(方向入力ボタン)54Aと、ボタン54B〜54Hとが設けられる。つまり、これらのボタン54A〜54Hは、ユーザの親指で操作可能な位置に配置されている(図10参照)。
十字ボタン54Aは、LCD51の左側であって、左アナログスティック53Aの下側に設けられる。つまり、十字ボタン54Aはユーザの左手で操作可能な位置に配置されている。十字ボタン54Aは、十字の形状を有しており、上下左右の方向を指示することが可能なボタンである。また、ボタン54B〜54Dは、LCD51の下側に設けられる。これら3つのボタン54B〜54Dは、左右両方の手で操作可能な位置に配置されている。また、4つのボタン54E〜54Hは、LCD51の右側であって、右アナログスティック53Bの下側に設けられる。つまり、4つのボタン54E〜54Hはユーザの右手で操作可能な位置に配置されている。さらに、4つのボタン54E〜54Hは、(4つのボタン54E〜54Hの中心位置に対して)上下左右の位置関係となるように配置されている。したがって、端末装置7は、ユーザに上下左右の方向を指示させるためのボタンとして4つのボタン54E〜54Hを機能させることも可能である。
また、図9の(a)図、(b)図、および(c)図に示すように、第1Lボタン54Iおよび第1Rボタン54Jは、ハウジング50の斜め上部分(左上部分および右上部分)に設けられる。具体的には、第1Lボタン54Iは、板状のハウジング50における上側の側面の左端に設けられ、上側および左側の側面から露出している。また、第1Rボタン54Jは、ハウジング50における上側の側面の右端に設けられ、上側および右側の側面から露出している。このように、第1Lボタン54Iは、ユーザの左手人差し指で操作可能な位置に配置され、第1Rボタン54Jは、ユーザの右手人差し指で操作可能な位置に配置される(図10参照)。
また、図9の(b)図および(c)図に示すように、第2Lボタン54Kおよび第2Rボタン54Lは、板状のハウジング50の裏面(すなわちLCD51が設けられる表面の反対側の面)に突起して設けられる足部59Aおよび59Bに配置される。具体的には、第2Lボタン54Kは、ハウジング50の裏面の左側(表面側から見たときの左側)のやや上方に設けられ、第2Rボタン54Lは、ハウジング50の裏面の右側(表面側から見たときの右側)のやや上方に設けられる。換言すれば、第2Lボタン54Kは、表面に設けられる左アナログスティック53Aの概ね反対側の位置に設けられ、第2Rボタン54Lは、表面に設けられる右アナログスティック53Bの概ね反対側の位置に設けられる。このように、第2Lボタン54Kは、ユーザの左手中指で操作可能な位置に配置され、第2Rボタン54Lは、ユーザの右手中指で操作可能な位置に配置される(図10参照)。また、第2Lボタン54Kおよび第2Rボタン54Lは、図9の(c)図に示すように、上記足部59Aおよび59Bの斜め上方を向く面に設けられ、斜め上方を向くボタン面を有する。ユーザが端末装置7を把持した場合には中指は上下方向に動くと考えられるので、ボタン面を上方に向けることで、ユーザは第2Lボタン54Kおよび第2Rボタン54Lを押下しやすくなる。また、ハウジング50の裏面に足部が設けられることにより、ユーザはハウジング50を把持しやすくなり、かつ、足部にボタンが設けられることで、ハウジング50を把持したまま操作しやすくなる。
なお、図9に示す端末装置7に関しては、第2Lボタン54Kおよび第2Rボタン54Lが裏面に設けられるので、LCD51の画面(ハウジング50の表面)が上を向いた状態で端末装置7を載置させる場合、画面が完全に水平にはならない場合がある。そのため、他の実施形態においては、ハウジング50の裏面に3つ以上の足部が形成されてもよい。これによれば、LCD51の画面が上を向いた状態では足部が床面(または他の水平な面)に接することで床面に載置できるので、画面が水平になるように端末装置7を載置することができる。また、着脱可能な足部を追加することで端末装置7を水平に載置するようにしてもよい。
各ボタン54A〜54Lには、ゲームプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン54Aおよびボタン54E〜54Hは方向指示操作や選択操作等に用いられてもよいし、各ボタン54B〜54Eは決定操作やキャンセル操作等に用いられてもよい。
なお、図示しないが、端末装置7は、端末装置7の電源をオン/オフするための電源ボタンを有している。また、端末装置7は、LCD51の画面表示をオン/オフするためのボタンや、ゲーム装置3との接続設定(ペアリング)を行うためのボタンや、スピーカ(図11に示すスピーカ67)の音量を調節するためのボタンを有していてもよい。
図9の(a)図に示すように、端末装置7は、マーカ55Aおよびマーカ55Bからなるマーカ部(図11に示すマーカ部55)をハウジング50の表面に備えている。マーカ部55は、どの位置に設けられてもよいが、ここではLCD51の上側に設けられる。各マーカ55Aおよびマーカ55Bは、マーカ装置6の各マーカ6Rおよび6Lと同様、1以上の赤外LEDで構成される。マーカ部55は、上述のマーカ装置6と同様、コントローラ5(メインコントローラ8)の動き等をゲーム装置3が算出するために用いられる。また、ゲーム装置3はマーカ部55が備える各赤外LEDの点灯を制御することが可能である。
端末装置7は、撮像手段であるカメラ56を備えている。カメラ56は、所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。図9に示すように、本実施形態では、カメラ56はハウジング50の表面に設けられる。したがって、カメラ56は、端末装置7を持っているユーザの顔を撮像することができ、例えばLCD51を見ながらゲームを行っている時のユーザを撮像することができる。なお、他の実施形態では、1以上のカメラが端末装置7に設けられてもよい。
なお、端末装置7は、音声入力手段であるマイク(図11に示すマイク69)を備えている。ハウジング50の表面には、マイクロフォン用孔60が設けられる。マイク69はこのマイクロフォン用孔60の奥のハウジング50内部に設けられる。マイクは、ユーザの音声等、端末装置7の周囲の音を検出する。なお、他の実施形態では、1以上のマイクが端末装置7に設けられてもよい。
端末装置7は、音声出力手段であるスピーカ(図11に示すスピーカ67)を備えている。図9の(d)図に示すように、ハウジング50の下側側面にはスピーカ孔57が設けられる。スピーカ67の出力音はこのスピーカ孔57から出力される。本実施形態では、端末装置7は2つのスピーカを備えており、左スピーカおよび右スピーカのそれぞれの位置にスピーカ孔57が設けられる。なお、端末装置7が備えるスピーカの数はいくつであってもよく、上記2つのスピーカに加えて追加のスピーカが端末装置7に設けられてもよい。
また、端末装置7は、他の装置を端末装置7に接続するための拡張コネクタ58を備えている。本実施形態においては、図9の(d)図に示すように、拡張コネクタ58は、ハウジング50の下側側面に設けられる。なお、拡張コネクタ58に接続される他の装置はどのようなものであってもよく、例えば、特定のゲームに用いるコントローラ(銃型のコントローラ等)やキーボード等の入力装置であってもよい。他の装置を接続する必要がなければ、拡張コネクタ58は設けられていなくともよい。
なお、図9に示した端末装置7に関して、各操作ボタンやハウジング50の形状や、各構成要素の数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であってもよい。
次に、図11を参照して、端末装置7の内部構成について説明する。図11は、端末装置7の内部構成を示すブロック図である。図11に示すように、端末装置7は、図9に示した構成の他、タッチパネルコントローラ61、磁気センサ62、加速度センサ63、ジャイロセンサ64、ユーザインタフェースコントローラ(UIコントローラ)65、コーデックLSI66、スピーカ67、サウンドIC68、マイク69、無線モジュール70、アンテナ71、赤外線通信モジュール72、フラッシュメモリ73、電源IC74、電池75、および、バイブレータ79を備える。これらの電子部品は、電子回路基板上に実装されてハウジング50内に収納される。
UIコントローラ65は、各種の入出力部に対するデータの入出力を制御するための回路である。UIコントローラ65は、タッチパネルコントローラ61、アナログスティック53(アナログスティック53Aおよび53B)、操作ボタン54(各操作ボタン54A〜54L)、マーカ部55、磁気センサ62、加速度センサ63、ジャイロセンサ64、およびバイブレータ79に接続される。また、UIコントローラ65は、コーデックLSI66と拡張コネクタ58に接続される。また、UIコントローラ65には電源IC74が接続され、UIコントローラ65を介して各部に電力が供給される。電源IC74には内蔵の電池75が接続され、電力が供給される。また、電源IC74には、コネクタ等を介して外部電源から電力を取得可能な充電器76またはケーブルを接続することが可能であり、端末装置7は、当該充電器76またはケーブルを用いて外部電源からの電力供給と充電を行うことができる。なお、端末装置7は、図示しない充電機能を有するクレイドルに端末装置7を装着することで充電を行うようにしてもよい。
タッチパネルコントローラ61は、タッチパネル52に接続され、タッチパネル52の制御を行う回路である。タッチパネルコントローラ61は、タッチパネル52からの信号に基づいて所定の形式のタッチ位置データを生成してUIコントローラ65へ出力する。タッチ位置データは、タッチパネル52の入力面において入力が行われた位置(タッチパネル52がマルチタッチ方式である場合は複数の位置であってもよい)の座標を表す。なお、タッチパネルコントローラ61は、タッチパネル52からの信号の読み込み、および、タッチ位置データの生成を所定時間に1回の割合で行う。また、UIコントローラ65からタッチパネルコントローラ61へは、タッチパネル52に対する各種の制御指示が出力される。
アナログスティック53は、ユーザの指で操作されるスティック部がスライドした(または傾倒した)方向および量を表すスティックデータをUIコントローラ65へ出力する。また、操作ボタン54は、各操作ボタン54A〜54Lに対する入力状況(押下されたか否か)を表す操作ボタンデータをUIコントローラ65へ出力する。
磁気センサ62は、磁界の大きさおよび方向を検知することで方位を検出する。検出された方位を示す方位データは、UIコントローラ65へ出力される。また、UIコントローラ65から磁気センサ62へは、磁気センサ62に対する制御指示が出力される。磁気センサ62に関しては、MI(磁気インピーダンス)素子、フラックスゲートセンサ、ホール素子、GMR(巨大磁気抵抗)素子、TMR(トンネル磁気抵抗)素子、あるいはAMR(異方性磁気抵抗)素子等を用いたセンサがあるが、方位を検出することができればどのようなものが用いられてもよい。なお、厳密には、地磁気以外に磁界が発生している場所においては、得られた方位データは方位を示さないことになるが、そのような場合であっても、端末装置7が動いた場合には方位データが変化するため、端末装置7の姿勢の変化を算出することができる。
加速度センサ63は、ハウジング50の内部に設けられ、3軸(図9の(a)図に示すXYZ軸)方向に沿った直線加速度の大きさを検出する。具体的には、加速度センサ63は、ハウジング50の長辺方向をZ軸、ハウジング50の短辺方向をX軸、ハウジング50の表面に対して垂直な方向をY軸として、各軸の直線加速度の大きさを検出する。検出された加速度を表す加速度データはUIコントローラ65へ出力される。また、UIコントローラ65から加速度センサ63へは、加速度センサ63に対する制御指示が出力される。加速度センサ63は、本実施形態では例えば静電容量式のMEMS型加速度センサであるとするが、他の実施形態においては他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ63は1軸または2軸方向を検出する加速度センサであってもよい。
ジャイロセンサ64は、ハウジング50の内部に設けられ、上記X軸、Y軸およびZ軸の3軸周りの角速度を検出する。検出された角速度を表す角速度データは、UIコントローラ65へ出力される。また、UIコントローラ65からジャイロセンサ64へは、ジャイロセンサ64に対する制御指示が出力される。なお、3軸の角速度を検出するために用いられるジャイロセンサの数および組み合わせはどのようなものであってもよく、ジャイロセンサ64はジャイロセンサ48と同様、2軸ジャイロセンサと1軸ジャイロセンサとで構成されてもよい。また、ジャイロセンサ64は1軸または2軸方向を検出するジャイロセンサであってもよい。
バイブレータ79は、例えば振動モータやソレノイドであり、UIコントローラ65に接続される。UIコントローラ65の指示によりバイブレータ79が作動することによって端末装置7に振動が発生する。これによって、端末装置7を把持しているユーザの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。
UIコントローラ65は、上記の各構成要素から受け取ったタッチ位置データ、スティックデータ、操作ボタンデータ、方位データ、加速度データ、および角速度データを含む操作データ(端末操作データ)をコーデックLSI66に出力する。なお、拡張コネクタ58を介して端末装置7に他の装置が接続される場合には、当該他の装置に対する操作を表すデータが上記操作データにさらに含まれていてもよい。
コーデックLSI66は、ゲーム装置3へ送信するデータに対する圧縮処理、および、ゲーム装置3から送信されたデータに対する伸張処理を行う回路である。コーデックLSI66には、LCD51、カメラ56、サウンドIC68、無線モジュール70、フラッシュメモリ73、および赤外線通信モジュール72が接続される。また、コーデックLSI66はCPU77と内部メモリ78を含む。端末装置7はゲーム処理自体を行なわない構成であるが、端末装置7の管理や通信のための最小限のプログラムを実行する必要がある。電源投入時にフラッシュメモリ73に格納されたプログラムを内部メモリ78に読み出してCPU77が実行することで、端末装置7が起動する。また、内部メモリ78の一部の領域はLCD51のためのVRAMとして使用される。
カメラ56は、ゲーム装置3からの指示に従って画像を撮像し、撮像した画像データをコーデックLSI66へ出力する。また、コーデックLSI66からカメラ56へは、画像の撮像指示等、カメラ56に対する制御指示が出力される。なお、カメラ56は動画の撮影も可能である。すなわち、カメラ56は、繰り返し撮像を行って画像データをコーデックLSI66へ繰り返し出力することも可能である。
サウンドIC68は、スピーカ67およびマイク69に接続され、スピーカ67およびマイク69への音声データの入出力を制御する回路である。すなわち、コーデックLSI66から音声データを受け取った場合、サウンドIC68は当該音声データに対してD/A変換を行って得られる音声信号をスピーカ67へ出力し、スピーカ67から音を出力させる。また、マイク69は、端末装置7に伝わる音(ユーザの音声等)を検知して、当該音を示す音声信号をサウンドIC68へ出力する。サウンドIC68は、マイク69からの音声信号に対してA/D変換を行い、所定の形式の音声データをコーデックLSI66へ出力する。
コーデックLSI66は、カメラ56からの画像データ、マイク69からの音声データ、および、UIコントローラ65からの操作データを、端末操作データとして無線モジュール70を介してゲーム装置3へ送信する。本実施形態では、コーデックLSI66は、画像データおよび音声データに対して、コーデックLSI27と同様の圧縮処理を行う。上記端末操作データ、ならびに、圧縮された画像データおよび音声データは、送信データとして無線モジュール70に出力される。無線モジュール70にはアンテナ71が接続されており、無線モジュール70はアンテナ71を介してゲーム装置3へ上記送信データを送信する。無線モジュール70は、ゲーム装置3の端末通信モジュール28と同様の機能を有している。すなわち、無線モジュール70は、例えばIEEE802.11nの規格に準拠した方式により、無線LANに接続する機能を有する。送信されるデータは必要に応じて暗号化されていてもよいし、されていなくともよい。
以上のように、端末装置7からゲーム装置3へ送信される送信データには、操作データ(端末操作データ)、画像データ、および音声データが含まれる。なお、拡張コネクタ58を介して端末装置7に他の装置が接続される場合には、当該他の装置から受け取ったデータが上記送信データにさらに含まれていてもよい。また、赤外線通信モジュール72は、他の装置との間で例えばIRDAの規格に従った赤外線通信を行う。コーデックLSI66は、赤外線通信によって受信したデータを、必要に応じて上記送信データに含めてゲーム装置3へ送信してもよい。
また、上述のように、ゲーム装置3から端末装置7へは、圧縮された画像データおよび音声データが送信される。これらのデータはアンテナ71および無線モジュール70を介してコーデックLSI66に受信される。コーデックLSI66は、受信した画像データおよび音声データを伸張する。伸張された画像データはLCD51へ出力され、画像がLCD51に表示される。また、伸張された音声データはサウンドIC68へ出力され、サウンドIC68はスピーカ67から音を出力させる。
また、ゲーム装置3から受信されるデータに制御データが含まれる場合、コーデックLSI66およびUIコントローラ65は、制御データに従った制御指示を各部に行う。上述のように、制御データは、端末装置7が備える各構成要素(本実施形態では、カメラ56、タッチパネルコントローラ61、マーカ部55、各センサ62〜64、赤外線通信モジュール72、およびバイブレータ79)に対する制御指示を表すデータである。本実施形態では、制御データが表す制御指示としては、上記各構成要素を動作させたり、動作を休止(停止)させたりする指示が考えられる。すなわち、ゲームで使用しない構成要素については電力消費を抑えるために休止させてもよく、その場合、端末装置7からゲーム装置3へ送信される送信データには、休止した構成要素からのデータが含まれないようにする。なお、マーカ部55は赤外LEDであるので、制御は単に電力の供給のON/OFFでよい。
以上のように、端末装置7は、タッチパネル52、アナログスティック53、および操作ボタン54といった操作手段を備えるが、他の実施形態においては、これらの操作手段に代えて、または、これらの操作手段とともに、他の操作手段を備える構成であってもよい。
また、端末装置7は、端末装置7の動き(位置や姿勢、あるいは、位置や姿勢の変化を含む)を算出するためのセンサとして、磁気センサ62、加速度センサ63、およびジャイロセンサ64を備えるが、他の実施形態においては、これらのセンサのうち1つまたは2つのみを備える構成であってもよい。また、他の実施形態においては、これらのセンサに代えて、または、これらのセンサとともに、他のセンサを備える構成であってもよい。
また、端末装置7は、カメラ56およびマイク69を備える構成であるが、他の実施形態においては、カメラ56およびマイク69を備えていなくてもよく、また、いずれか一方のみを備えていてもよい。
また、端末装置7は、端末装置7とメインコントローラ8との位置関係(メインコントローラ8から見た端末装置7の位置および/または姿勢等)を算出するための構成としてマーカ部55を備える構成であるが、他の実施形態ではマーカ部55を備えていない構成としてもよい。また、他の実施形態では、端末装置7は、上記位置関係を算出するための構成として他の手段を備えていてもよい。例えば、他の実施形態においては、メインコントローラ8がマーカ部を備え、端末装置7が撮像素子を備える構成としてもよい。さらにこの場合、マーカ装置6は赤外LEDに代えて、撮像素子を備える構成としてもよい。
[5.ゲーム処理の概要]
次に、本実施形態のゲームシステム1において実行されるゲーム処理の概要について説明する。本実施形態におけるゲームは、複数のプレイヤによって行われるゲームである。本実施形態では、ゲーム装置3には1台の端末装置7と、複数台のメインコントローラ8とが無線通信により接続される。なお、本実施形態のゲームでは、サブコントローラ9はゲーム操作には用いられないためメインコントローラ8に接続される必要はないが、メインコントローラ8とサブコントローラ9とが接続された状態でも、当該ゲームは実行可能である。また、本実施形態のゲームでは、ゲーム装置3に接続可能なメインコントローラ8の台数は3台までとする。
本実施形態では、一人の第1プレイヤが端末装置7を操作するとともに、複数の第2プレイヤがそれぞれメインコントローラ8を操作する。以下では、第2プレイヤが2人(第2プレイヤAおよび第2プレイヤB)である場合について説明する。また、本実施形態では、テレビ2にテレビ用ゲーム画像が表示され、端末装置7に端末用ゲーム画像が表示される。
図12は、テレビ2に表示されるテレビ用ゲーム画像の一例を示す図である。図13は、端末装置7に表示される端末用ゲーム画像の一例を示す図である。
図12に示すように、テレビ2には、第1キャラクタ97、第2キャラクタ98a、第2キャラクタ98b、弓オブジェクト91、矢オブジェクト92、岩オブジェクト93、木オブジェクト94、剣オブジェクト96a、剣オブジェクト96b、および、敵キャラクタ99が表示される。
第1キャラクタ97は、ゲーム空間(仮想空間)に配置される仮想キャラクタであり、第1プレイヤによって操作される。第1キャラクタ97は、弓オブジェクト91および矢オブジェクト92を把持して、矢オブジェクト92をゲーム空間内に発射させて、敵キャラクタ99に対して攻撃を行う。また、第2キャラクタ98aは、ゲーム空間に配置される仮想キャラクタであり、第2プレイヤAによって操作される。第2キャラクタ98aは、剣オブジェクト96aを把持し、当該剣オブジェクト96aを用いて敵キャラクタ99に対して攻撃を行う。また、第2キャラクタ98bは、ゲーム空間に配置される仮想キャラクタであり、第2プレイヤBによって操作される。第2キャラクタ98bは、剣オブジェクト96bを把持し、当該剣オブジェクト96bを用いて敵キャラクタ99に対して攻撃を行う。敵キャラクタ99は、ゲーム装置3によって制御される仮想キャラクタである。本実施形態のゲームは、第1プレイヤ、第2プレイヤAおよび第2プレイヤBが互いに協力することによって、敵キャラクタ99を倒すことを目的とするゲームである。
図12に示すように、テレビ2には、画面を上下左右に4等分した領域にそれぞれ異なる画像が表示される。具体的には、画面の左上の領域には、第1プレイヤが端末装置7を用いて操作する第1キャラクタ97の背後からゲーム空間を見た画像90aが表示される。具体的には、画像90aには、第1キャラクタ97、弓オブジェクト91、および矢オブジェクト92が含まれる。なお、本実施形態では、第1キャラクタ97が半透明で表示されるものとするが、第1キャラクタ97は表示されなくてもよい。画像90aは、ゲーム空間に設定された第1仮想カメラAでゲーム空間を撮像することによって取得される画像である。ゲーム空間の位置は、ゲーム空間に固定された直交座標系(xyz座標系)の各軸に関する座標値で表される。y軸はゲーム空間の地面に対して垂直上向きに設定され、x軸およびz軸は、ゲーム空間の地面と平行に設定される。第1キャラクタ97は、ゲーム空間の地面(xz平面)上を向き(xz平面に平行な向き)を変えながら移動する。第1キャラクタ97のゲーム空間における位置および向き(姿勢)は、所定の規則に従って変化される。なお、第1キャラクタ97の位置および姿勢は、第1プレイヤによる端末装置7に対する操作(例えば、左アナログスティック53Aに対する操作や十字ボタン54Aに対する操作)に応じて変化されてもよい。また、第1仮想カメラAのゲーム空間における位置は、第1キャラクタ97の位置に応じて定められ、第1仮想カメラAのゲーム空間における姿勢は、第1キャラクタ97の姿勢と端末装置7の姿勢とに応じて設定される。
また、画面の右上の領域には、第2プレイヤAがメインコントローラ8aを用いて操作する第2キャラクタ98aの背後からゲーム空間を見た画像90bが表示される。画像90bには、第2キャラクタ98aおよび剣オブジェクト96aが含まれる。なお、本実施形態では、第2キャラクタ98aが半透明で表示されるものとするが、第2キャラクタ98aは表示されなくてもよい。画像90bは、ゲーム空間に設定された第1仮想カメラBでゲーム空間を撮像することによって取得される画像である。第2キャラクタ98aは、ゲーム空間の地面上を向きを変えながら移動する。第2キャラクタ98aの位置および向き(姿勢)は、所定の規則に従って変化される。なお、第2キャラクタ98aの位置および姿勢は、第2プレイヤAによるメインコントローラ8aに対する操作(例えば、十字ボタン32aに対する操作、あるいは、サブコントローラ9が接続される場合にはアナログジョイスティック81に対する操作)に応じて変化されてもよい。また、第1仮想カメラBの位置および姿勢は、第2キャラクタ98aの位置および姿勢に応じて定められる。
また、画面の左下の領域には、第2プレイヤBがメインコントローラ8bを用いて操作する第2キャラクタ98bの背後からゲーム空間を見た画像90cが表示される。画像90cには、第2キャラクタ98bおよび剣オブジェクト96bが含まれる。なお、本実施形態では、第2キャラクタ98bが半透明で表示されるものとするが、第2キャラクタ98bは表示されなくてもよい。画像90cは、ゲーム空間に設定された第1仮想カメラCによってゲーム空間を撮像することによって取得される画像である。第2キャラクタ98bは、ゲーム空間の地面上を向きを変えながら移動する。第2キャラクタ98bの位置および向き(姿勢)は、所定の規則に従って変化される。なお、第2キャラクタ98bの位置および姿勢は、第2プレイヤBによるメインコントローラ8bに対する操作(例えば、十字ボタン32a等に対する操作)に応じて変化されてもよい。また、第1仮想カメラCの位置および姿勢は、第2キャラクタ98bの位置および姿勢に応じて定められる。なお、画面の右下の領域には何も表示されないが、第2プレイヤが3人の場合には、画面の右下の領域にも画像が表示される。
なお、各仮想カメラ(第1仮想カメラA〜C)は、各プレイヤキャラクタ(97、98a、98b)の背後の所定位置に設定されるが、各仮想カメラは各プレイヤキャラクタの視点と一致するように設定されてもよい。
一方、図13に示すように、端末装置7には弓オブジェクト91および矢オブジェクト92を含む画像90eが表示される。画像90eは、ゲーム空間に配置された第2仮想カメラによってゲーム空間を撮像することによって取得される画像である。具体的には、図13に示す画像90eは、弓オブジェクト91および矢オブジェクト92をゲーム空間の上方から見た画像である。第2仮想カメラは弓オブジェクト91に固定されており、第2仮想カメラのゲーム空間における位置および姿勢は、弓オブジェクト91の位置および姿勢に応じて定められる。
上述のように、第1プレイヤは端末装置7を操作することによって、第1キャラクタ97に矢オブジェクト92をゲーム空間に発射させることにより、敵キャラクタ99に対して攻撃を行う。具体的には、第1プレイヤは、端末装置7の姿勢を基準姿勢から変化させることで矢オブジェクト92の発射方向、および第1仮想カメラAの撮像方向を変化させ、端末装置7のタッチパネル52に対するタッチ操作を行うことで、矢オブジェクト92を発射させる。
図14は、本実施形態におけるゲームを実行する際の端末装置7の基準姿勢を示す図である。ここで、「基準姿勢」は、例えば、端末装置7のLCD51の画面が地面と水平であって、かつ、端末装置7の右側面(図9(c))がテレビ2を向く姿勢である。すなわち、基準姿勢は、端末装置7を基準としたXYZ座標系のY軸方向(LCD51の外向きの法線方向)が実空間の上方向と一致し、かつ、Z軸(端末装置7の長辺方向と平行な軸)がテレビ2の画面の中心(あるいは画像90aの中心)に向かう姿勢である。
図14に示すように、初期的には、端末装置7は、基準姿勢で第1プレイヤによって把持され、第1プレイヤはテレビ2に表示されたゲーム画像を見ながら、端末装置7をテレビ2の方向に向けるとともに、端末装置7のタッチパネル52に対するタッチ操作を行う。第1プレイヤは、端末装置7を基準姿勢から他の姿勢へと変化させることによって、矢オブジェクト92の発射方向(移動方向)を制御し、タッチパネル52に対してタッチ操作を行うことによって、矢オブジェクト92を発射方向に発射させる。
図15は、第1プレイヤによって行われるタッチパネル52に対するタッチ操作の一例を示す図である。なお、図15においては、弓オブジェクト91および矢オブジェクト92の表示が省略されている。図15に示すように、第1プレイヤは、自身の指でタッチパネル52上の位置にタッチオン操作を行う。ここで、タッチオン操作とは、タッチパネル52に指が接触していない場合において、タッチパネル52に指を接触させる操作である。タッチオンが行われた位置をタッチオン位置という。次に、第1プレイヤは、指をタッチパネル52に接触させたまま、図15の矢印の方向(テレビ2に向かう方向と反対方向;Z軸負方向)に指をスライドさせる。そして、第1プレイヤは、タッチパネル52に対してタッチオフ操作を行う。ここで、タッチオフ操作とは、タッチパネル52に指が接触している場合において、指をタッチパネル52から離す(リリースする)操作である。タッチオフが行われた位置をタッチオフ位置という。このような第1プレイヤによるタッチパネル52に対するスライド操作に応じて、テレビ2の左上の領域に表示される画像90aは変化する。
図16Aは、第1プレイヤがタッチパネル52に対するタッチ操作を行った場合において、第1プレイヤの指がタッチオン位置とタッチオフ位置との間に位置するときのテレビ2の左上の領域に表示される画像90aを示す図である。図16Bは、第1プレイヤがタッチパネル52に対するタッチ操作を行った場合において、第1プレイヤの指がタッチオフ位置に位置するときのテレビ2の左上の領域に表示される画像90aを示す図である。なお、図16Aおよび図16Bにおいては、第1キャラクタ97の表示は省略されている。
図16Aに示すように、第1プレイヤが自身の指をタッチパネル52に接触させると、画像90aには、照準95(照準オブジェクト95)が表示される。照準95は円形状であり、当該円の中心は矢オブジェクト92がゲーム空間に発射された場合の矢オブジェクト92が飛んでいく位置(到達目標の位置)を示す。図16Aおよび図16Bに示す例では、照準95の中心は敵キャラクタ99上に位置し、この状態で矢オブジェクト92が発射されると、矢オブジェクト92は敵キャラクタ99に刺さる。なお、矢オブジェクト92は、照準95の中心に必ずしも到達することはなく、他の要因(例えば、重力や風等の影響)によって、実際の到達位置は照準95の中心からずれる場合もある。また、照準95の形状は円形状に限らず、どのような形状(四角や三角、あるいは点)でもよい。
また、第1プレイヤが自身の指をタッチパネル52に接触させたまま図15の矢印の方向に移動させると、当該指の移動距離に応じて第1仮想カメラAのズーム設定が変化する。具体的には、図16Aに示すように、第1プレイヤの指がタッチオン位置とタッチオフ位置との間に位置する場合(図15参照)、第1仮想カメラAはズームインされて、図16Aに示す画像90aは、図12に示す画像90aよりもゲーム空間の一部を拡大した画像となる。さらに、図16Bに示すように、第1プレイヤが指をタッチオフ位置までスライドさせると、図16Bに示す画像90aはゲーム空間の一部をさらに拡大した画像となる。なお、画像90aはテレビ2を4等分に分割した場合の左上の領域に表示される画像であり、上記移動距離に応じて画像90a自体の大きさは変化しない。
また、図16Aおよび図16Bに示すように、第1プレイヤによるタッチ操作に応じて、弓オブジェクト91および矢オブジェクト92の表示も変化する。具体的には、上記指の移動距離が長いほど矢オブジェクト92が手前側に引かれるように表示される。
第1プレイヤの指がタッチパネル52から離れると、矢オブジェクト92が発射され、矢オブジェクト92がゲーム空間を飛んでいく様子がテレビ2に表示される。具体的には、矢オブジェクト92は、現在の矢オブジェクト92の位置から照準95によって示される画像90a上の位置に対応する、ゲーム空間内の位置に向かって発射されてゲーム空間内を飛んでいく。
次に、第1プレイヤが端末装置7の姿勢を変化させた場合について、説明する。図17は、図16Aに示す画像90aがテレビ2に表示されている場合において、基準姿勢からY軸周りに角度θ1だけ回転させたときの端末装置7を、実空間の上方から見た図である。図18は、図16Aに示す画像90aがテレビ2に表示されている場合において、端末装置7を基準姿勢からY軸周りに角度θ1だけさせたときに、テレビ2の左上の領域に表示される画像90aの一例を示す図である。
図17および図18に示すように、端末装置7を基準姿勢からY軸周りに角度θ1だけ回転させると、図16Aに示す場合よりも右側のゲーム空間を撮像した画像90aが、テレビ2に表示される。すなわち、端末装置7のZ軸をテレビ2の画面の中心(あるいは画像90aの中心)よりも右側の位置に向けるように端末装置7の姿勢を変化させると、ゲーム空間の第1仮想カメラAの姿勢も同様に変化して、第1仮想カメラAによって撮像される画像90aは変化する。
具体的には、端末装置7を基準姿勢からY軸周りに角度θ1だけ回転させると、第1仮想カメラAの撮像方向(第1仮想カメラAを基準とした座標系におけるCZ軸方向)がゲーム空間の垂直上向きの軸(y軸)周りに回転する。図19は、端末装置7をY軸周りに角度θ1だけ回転させた場合の第1仮想カメラAを上方から見た図である。図19において、軸CZは、端末装置7が基準姿勢であるときの第1仮想カメラAの撮像方向を示し、軸CZ’は、端末装置7がY軸周りに角度θ1だけ回転されたときの第1仮想カメラAの撮像方向を示す。図19に示すように、端末装置7がY軸周りに角度θ1だけ回転されると、第1仮想カメラAは、y軸周りに角度θ2(>θ1)だけ回転される。すなわち、端末装置7の姿勢の変化量よりも、第1仮想カメラAの姿勢の変化量の方が大きくなるように、第1仮想カメラAの姿勢が変化される。このため、例えば、第1プレイヤが現在表示されていない第1キャラクタ97の右側のゲーム空間を表示させるために、第1仮想カメラAを90度回転させようとする場合、端末装置7を90度Y軸周りに回転させる必要はない。この場合、例えば、第1プレイヤは端末装置7をY軸周りに45度だけ回転させることで、第1仮想カメラAを90度回転させて、現在表示されていない第1キャラクタ97の右側のゲーム空間を表示させることができる。これにより、第1プレイヤが向く方向がテレビ2の画面を向く方向から大きくずれることなく、第1プレイヤは第1仮想カメラAを大きく回転させて現在表示されているゲーム空間の領域とは異なる領域をテレビ2に表示させることができる。従って、第1プレイヤはテレビ2の画面を見ながらゲームを楽しむことができる。
また、図18に示すように、端末装置7の姿勢の変化に応じて、照準95の位置も変化する。具体的には、端末装置7が基準姿勢である場合には照準95は画像90aの中心に位置するが、端末装置7を基準姿勢からY軸周りに角度θ1だけ回転させると、照準95も画像90aの中心よりも右側に移動する。端末装置7をY軸周りにさらに回転させると、第1仮想カメラAはさらに回転して、照準95もさらに右方向に移動する。端末装置7をY軸周りに所定の閾値まで回転させると、第1仮想カメラAのy軸周りの回転角は当該所定の閾値に応じた値まで変化するとともに、照準95は画像90aの右端に移動する。しかしながら、端末装置7をY軸周りに所定の閾値を超えて回転させても、第1仮想カメラAのy軸周りの回転角はそれ以上大きくならず、照準95の位置もそれ以上移動しない。これにより、端末装置7のZ軸がテレビ2を向く方向から大きく外れるように第1プレイヤが端末装置7を操作してしまうことが減り、操作しやすくなる。
以上のように、端末装置7の姿勢に応じて矢オブジェクト92の発射方向が決定され、タッチパネル52に対するタッチ操作に応じて矢オブジェクト92が発射される。
なお、第2プレイヤは、メインコントローラ8を振ることによって、自身によって操作される第2キャラクタに剣オブジェクト96を振らせ、敵キャラクタ99に対して攻撃を行う。第2キャラクタが把持する剣オブジェクト96の姿勢は、メインコントローラ8の姿勢の変化に応じて変化する。例えば、メインコントローラ8bのZ1軸(図3参照)が重力方向と反対方向となるようにメインコントローラ8bが把持されている場合、剣オブジェクト96bはゲーム空間のy軸方向を向く。この場合、図12に示すように、第2キャラクタ98bが剣オブジェクト96bを真上に振り上げている様子が表示される。なお、剣オブジェクト96は、メインコントローラ8の姿勢に限らず、メインコントローラ8の操作ボタンに対する操作に応じて制御されてもよい。
[6.ゲーム処理の詳細]
次に、本ゲームシステムにおいて実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図20は、ゲーム処理において用いられる各種データを示す図である。図20において、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図20に示すように、ゲーム装置3のメインメモリには、ゲームプログラム100、コントローラ操作データ110、端末操作データ120、および処理用データ130が記憶される。なお、メインメモリには、図20に示すデータの他、ゲームに登場する各種オブジェクトの画像データやゲームに使用される音声データ等、ゲームに必要なデータが記憶される。
ゲームプログラム100は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。なお、ゲームプログラム100は、光ディスク4に代えて、フラッシュメモリ17やゲーム装置3の外部装置から(例えばインターネットを介して)取得されてもよい。また、ゲームプログラム100に含まれる一部(例えば、メインコントローラ8および/または端末装置7の姿勢を算出するためのプログラム)については、ゲーム装置3内に予め記憶されていてもよい。
コントローラ操作データ110は、メインコントローラ8に対するユーザ(第2プレイヤ)の操作を表すデータであり、メインコントローラ8に対する操作に基づいてメインコントローラ8から出力(送信)される。コントローラ操作データ110は、メインコントローラ8から送信されてゲーム装置3において取得され、メインメモリに記憶される。コントローラ操作データ110は、角速度データ111、メイン操作ボタンデータ112、加速度データ113を含む。なお、コントローラ操作データ110は、これらのデータの他、メインコントローラ8の画像処理回路41によって算出される座標を示すマーカ座標データ等を含む。また、ゲーム装置3は、複数のメインコントローラ8(具体的には、メインコントローラ8aおよび8b)から操作データを取得するため、各メインコントローラ8からそれぞれ送信されてくる各コントローラ操作データ110をメインメモリにそれぞれ記憶する。最新の(最後に取得された)データから所定個数のコントローラ操作データ110が、メインコントローラ8毎に、時系列に記憶されてもよい。
角速度データ111は、メインコントローラ8におけるジャイロセンサ48によって検出された角速度を表すデータである。ここでは、角速度データ111は、メインコントローラ8に固定のX1Y1Z1座標系(図3参照)の各軸回りの角速度をそれぞれ表すものであるが、他の実施形態においては、任意の1軸以上の軸回り角速度を表すものであればよい。このように、本実施形態においては、メインコントローラ8がジャイロセンサ48を備え、コントローラ操作データ110には、メインコントローラ8の姿勢を算出するための物理量として上記角速度データ111が含まれる。したがって、ゲーム装置3は、メインコントローラ8の姿勢を角速度に基づいて正確に算出することができる。具体的には、ゲーム装置3は、ジャイロセンサ48によって検出されたX1軸、Y1軸、Z1軸周りの角速度をそれぞれ時間で積分することによって、初期的な姿勢からのX1Y1Z1座標系の各軸周りの回転角を算出することができる。
メイン操作ボタンデータ112は、メインコントローラ8に設けられた各操作ボタン32a〜32iに対する入力状態を表すデータである。具体的には、メイン操作ボタンデータ112は、各操作ボタン32a〜32iが押下されているか否かを表す。
加速度データ113は、メインコントローラ8の加速度センサ37によって検出された加速度を表すデータである。ここでは、加速度データ113は、メインコントローラ8に固定のX1Y1Z1座標系の各軸周りの加速度をそれぞれ表す。
なお、コントローラ操作データ110は、サブコントローラ9に対するプレイヤの操作を表すデータを含んでもよい。
端末操作データ120は、端末装置7に対するユーザ(第1プレイヤ)の操作を表すデータであり、端末装置7に対する操作に基づいて端末装置7から出力(送信)される。端末操作データ120は、端末装置7から送信されてゲーム装置3において取得され、メインメモリに記憶される。端末操作データ120は、角速度データ121、タッチ位置データ122、操作ボタンデータ123、および加速度データ124を含む。なお、端末操作データ120は、これらのデータの他、端末装置7の磁気センサ62によって検出された方位を示す方位データデータ等を含む。また、ゲーム装置3は、複数の端末装置7から端末操作データを取得する場合、各端末装置7からそれぞれ送信されてくる各端末操作データ120をメインメモリにそれぞれ記憶してもよい。
角速度データ121は、端末装置7におけるジャイロセンサ64によって検出された角速度を表すデータである。ここでは、角速度データ121は、端末装置7に固定のXYZ座標系(図9参照)の各軸回りの角速度をそれぞれ表すものであるが、他の実施形態においては、任意の1軸以上の軸回り角速度を表すものであればよい。
タッチ位置データ122は、端末装置7のタッチパネル52においてタッチが行われた位置(タッチ位置)の座標を示すデータである。タッチ位置データ122は、最新のタッチ位置の座標を示すデータに加えて、過去所定期間において検出されたタッチ位置の座標を示すデータが含まれる。なお、タッチパネル52がタッチ位置を検出した場合は、タッチ位置の座標値は予め定められた範囲となり、タッチパネル52がタッチ位置を検出しない場合は、タッチ位置の座標値は当該範囲外の所定の値となる。
操作ボタンデータ123は、端末装置7に設けられた各操作ボタン54A〜54Lに対する入力状態を表すデータである。具体的には、操作ボタンデータ123は、各操作ボタン54A〜54Lが押下されているか否かを表す。
加速度データ124は、端末装置7の加速度センサ63によって検出された加速度を表すデータである。ここでは、端末装置7に固定のXYZ座標系(図9参照)の各軸回りの加速度をそれぞれ表す。
処理用データ130は、後述するゲーム処理(図21)において用いられるデータである。処理用データ130は、端末姿勢データ131、キャラクタデータ132、照準データ133、弓データ134、矢データ135、目標位置データ136、第1仮想カメラAデータ137、第1仮想カメラBデータ138、第1仮想カメラCデータ139、および、第2仮想カメラデータ140を含む。なお、図20に示すデータの他、処理用データ130は、ゲームに登場する各種オブジェクトに設定される各種パラメータを表すデータ等、ゲーム処理において用いられる各種データを含む。
端末姿勢データ131は、端末装置7の姿勢を表すデータである。端末装置7の姿勢は、例えば、上記基準姿勢から現在の姿勢への回転を表す回転行列によって表現されてもよいし、3つの角度によって表現されてもよい。端末姿勢データ131は、端末装置7からの端末操作データ120に含まれる角速度データ121に基づいて算出される。具体的には、端末姿勢データ131は、ジャイロセンサ64によって検出されたX軸、Y軸、Z軸周りの角速度をそれぞれ時間で積分することによって算出される。なお、端末装置7の姿勢は、ジャイロセンサ64によって検出された角速度を示す角速度データ121に限らず、加速度センサ63によって検出された加速度を表す加速度データ124、および、磁気センサ62によって検出された方位を示す方位データに基づいて算出されてもよい。また、角速度に基づいて算出される姿勢を加速度データや方位データに基づいて補正をすることによって姿勢を算出するようにしてもよい。
キャラクタデータ132は、各キャラクタのゲーム空間における位置および姿勢を表すデータである。具体的には、キャラクタデータ132は、第1キャラクタ97の位置および姿勢を表すデータ、第2キャラクタ98aの位置および姿勢を表すデータ、および、第2キャラクタ98bの位置および姿勢を表すデータを含む。
照準データ133は、照準95の位置を示すデータ、および、照準95を画面に表示するか否かを示すフラグを含む。照準95の位置は、テレビ2の左上の領域に表示される画像90a上の位置であり、画像90aの中心を原点として右方向にs軸、上方向にt軸が設定されるst座標系の座標値で表される。
弓データ134は、弓オブジェクト91の位置および姿勢(ゲーム空間における位置および姿勢)を示すデータである。弓オブジェクト91の位置および姿勢は、第1キャラクタ97の位置および姿勢に応じて設定され、弓オブジェクト91は、第1キャラクタ97の移動に伴って移動する。また、弓オブジェクト91の姿勢は、端末装置7の姿勢に応じて変化する。
矢データ135は、矢オブジェクト92の位置および姿勢(ゲーム空間における位置および姿勢)を示すデータ、および、矢の移動状態を表すデータを含む。矢オブジェクト92の姿勢は、矢オブジェクト92の発射方向(移動方向)を示し、ゲーム空間における3次元ベクトルで表される。矢オブジェクト92の発射方向は、矢オブジェクト92が飛んでいく方向である。矢オブジェクト92は、発射される前においては、第1キャラクタ97および弓オブジェクト91の移動に伴って移動し、発射された後においては発射時の矢オブジェクト92の位置から発射方向に移動する。そして、矢オブジェクト92は、ゲーム空間内の他のオブジェクトと接触するとその接触した位置で停止する。矢の移動状態は、現在、矢オブジェクト92が発射前の状態か、あるいは、移動中の状態かの何れかである。矢データ135は、矢オブジェクト92が発射される前、および、発射されてから停止するまでの間における、当該矢オブジェクト92の位置、発射方向、および、移動状態を表すデータである。
目標位置データ136は、ゲーム空間における目標位置を示すデータであり、矢オブジェクト92の到達目標となるゲーム空間における位置を示すデータである。具体的には、目標位置データ136は、照準95の位置(st座標系の座標値で表される位置)に基づいて算出されるゲーム空間における位置を示すデータである。
第1仮想カメラAデータ137は、第1キャラクタ97の背後に設定される第1仮想カメラAのゲーム空間における位置および姿勢を示すデータ、および、第1仮想カメラAのズーム設定を示すデータを含む。
第1仮想カメラBデータ138は、第2キャラクタ98aの背後に設定される第1仮想カメラBのゲーム空間における位置および姿勢を示すデータである。
第1仮想カメラCデータ139は、第2キャラクタ98bの背後に設定される第1仮想カメラCのゲーム空間における位置および姿勢を示すデータである。
第2仮想カメラデータ140は、弓オブジェクト91に固定された第2仮想カメラの位置および姿勢を示すデータである。端末装置7のLCD51には、当該第2仮想カメラで弓オブジェクト91を撮像した画像(端末用ゲーム画像)が表示される。第2仮想カメラは弓オブジェクト91に固定されるため、当該第2仮想カメラの位置および姿勢は、弓オブジェクト91の位置および姿勢の変化に伴って変化する。
次に、ゲーム装置3において実行されるゲーム処理の詳細を、図21〜図26を用いて説明する。図21は、ゲーム装置3において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図21に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。なお、ゲーム装置3においては、電源投入後にゲームプログラムがすぐに実行される構成であってもよいし、電源投入後にまず所定のメニュー画面を表示する内蔵プログラムが実行され、その後例えばユーザによるメニュー画面に対する選択操作によってゲームの開始が指示されたことに応じてゲームプログラムが実行される構成であってもよい。
なお、図21〜図26に示すフローチャートにおける各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数や定数の値等も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU10が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU10以外のプロセッサや専用回路が実行するようにしてもよい。
まず、ステップS1において、CPU10は初期処理を実行する。初期処理は、仮想のゲーム空間を構築し、ゲーム空間に登場する各オブジェクト(第1、第2キャラクタや弓オブジェクト、各仮想カメラ等)を初期位置に配置したり、ゲーム処理で用いる各種パラメータの初期値を設定したりする処理である。なお、本実施形態においては、第1キャラクタ97が所定の位置および所定の姿勢で配置され、当該第1キャラクタ97の位置および姿勢に応じて、第1仮想カメラA、弓オブジェクト91、矢オブジェクト92、および、第2仮想カメラが設定される。また、第2キャラクタ98aの位置および姿勢が設定され、当該第2キャラクタ98aの位置および姿勢に応じて、第1仮想カメラBが設定される。同様に、第2キャラクタ98bの位置および姿勢が設定され、当該第2キャラクタ98bの位置および姿勢に応じて、第1仮想カメラCが設定される。
また、ステップS1において、端末装置7の初期処理および各メインコントローラ8の初期処理が行われる。例えば、第1プレイヤに端末装置7を図14に示す姿勢で把持して、当該姿勢のまま端末装置7の所定の操作ボタンを押させるための画像がテレビ2に表示される。同様に、例えば、第2プレイヤAおよび第2プレイヤBにメインコントローラ8を所定の姿勢(例えば、メインコントローラ8のZ1軸がテレビ2に向く姿勢)で把持させるための画像が表示される。このような端末装置7の初期処理によって端末装置7の基準姿勢が設定され、各メインコントローラ8の初期処理によって各メインコントローラ8の初期的な姿勢が設定される。すなわち、これらの初期処理によって、端末装置7のXYZ各軸周りの回転角が0に設定され、各メインコントローラ8のX1Y1Z1各軸周りの回転角が0に設定される。端末装置7の所定の操作ボタンが押されて端末装置7の初期処理が完了し、かつ、各メインコントローラ8の初期処理が完了すると、CPU10は、次にステップS2の処理を実行する。以降、ステップS2〜S8の一連の処理からなる処理ループが所定時間(1フレーム時間。例えば1/60秒)に1回の割合で繰り返し実行される。
ステップS2において、CPU10は、端末装置7および2つのメインコントローラ8から送信されてくる操作データをそれぞれ取得する。端末装置7および各メインコントローラ8は操作データ(端末操作データおよびコントローラ操作データ)をゲーム装置3へ繰り返し送信する。ゲーム装置3においては、端末通信モジュール28が端末操作データを逐次受信し、受信された端末操作データが入出力プロセッサ11aによってメインメモリに逐次記憶される。また、コントローラ通信モジュール19が各コントローラ操作データを逐次受信し、受信された各コントローラ操作データが入出力プロセッサ11aによってメインメモリに逐次記憶される。メインコントローラ8とゲーム装置3との間における送受信の間隔、および、端末装置7とゲーム装置3との間における送受信の間隔はゲームの処理時間よりも短い方が好ましく、例えば200分の1秒である。ステップS2においては、CPU10は、最新のコントローラ操作データ110および最新の端末操作データ120をメインメモリから読み出す。ステップS2の次にステップS3の処理が実行される。
ステップS3において、CPU10はゲーム制御処理を実行する。ゲーム制御処理は、プレイヤによるゲーム操作に従ってゲームを進行させる処理である。具体的には、本実施形態におけるゲーム制御処理では、主に、端末装置7に対する操作に応じて、照準95を設定する処理、第1仮想カメラAを設定する処理、弓および矢の設定処理、射撃処理等が実行される。以下、図22を参照して、ゲーム制御処理の詳細について説明する。
図22は、図21に示すゲーム制御処理(ステップS3)の詳細な流れを示すフローチャートである。
ステップS11において、CPU10は端末装置7の姿勢算出処理を実行する。ステップS11における端末装置7の姿勢算出処理は、端末装置7からの端末操作データに含まれる角速度に基づいて端末装置7の姿勢を算出する処理である。以下、図23を参照して、姿勢算出処理の詳細について説明する。図23は、図22に示す端末装置7の姿勢算出処理(ステップS11)の詳細な流れを示すフローチャートである。
ステップS21において、CPU10は、所定のボタンが押されたか否かを判定する。具体的には、CPU10は、ステップS2で取得した端末操作データ120の操作ボタンデータ123を参照して、端末装置7の所定のボタン(例えば、複数の操作ボタン54のうちの何れか1つのボタン)が押されたか否かを判定する。判定結果が否定の場合、CPU10は、次にステップS22の処理を実行する。一方、判定結果が肯定の場合、CPU10は、次にステップS23の処理を実行する。
ステップS22において、CPU10は、角速度に基づいて端末装置7の姿勢を算出する。具体的には、CPU10は、ステップS2で取得した角速度データ121と、メインメモリに記憶されている端末姿勢データ131とに基づいて、端末装置7の姿勢を算出する。より具体的には、CPU10は、ステップS2で取得した角速度データ121によって表わされる各軸(X軸、Y軸、Z軸)周りの角速度に1フレーム時間をかけて得られる各軸周りの回転角を算出する。このようにして算出される各軸周りの回転角は、前回の処理ループが実行されてから今回の処理ループが実行されるまでの、端末装置7の各軸周りの回転角(1フレーム時間における回転角)である。次に、CPU10は、端末姿勢データ131によって示される端末装置7の各軸周りの回転角に、当該算出された各軸周りの回転角(1フレーム時間における回転角)を加えることにより、端末装置7の各軸周りの最新の回転角(端末装置7の最新の姿勢)を算出する。なお、算出された姿勢に対して加速度に基づいた補正をさらに行ってもよい。具体的には、端末装置7の動きが少ないときには加速度の方向を下方向とみなすことができるので、端末装置7の動きが少ないときに、角速度に基づいて算出された姿勢の下方向が、加速度方向に近づくように姿勢を補正するようにすればよい。そして、CPU10は、算出した端末装置7の最新の姿勢を端末姿勢データ131として、メインメモリに記憶する。以上のようにして算出された端末装置7の最新の姿勢は、初期化された時点(ステップS1において初期化された時点、あるいは、次に示すステップS23で初期化された時点)を基準姿勢として、当該基準姿勢からの端末装置7の各軸周りの回転角を示す。具体的には、端末装置7の姿勢を示す端末姿勢データ131は、回転行列を表すデータである。ステップS22の処理の後、CPU10は、図23に示す姿勢算出処理を終了する。
ステップS23において、CPU10は、端末装置7の姿勢を初期化する。具体的には、CPU10は、端末装置7の各軸周りの回転角に0を設定して、端末姿勢データ131としてメインメモリに記憶する。ステップS23の処理は、端末装置7の所定のボタンが押された時点の姿勢を、基準姿勢として設定する処理である。すなわち、前述の所定のボタンは姿勢をリセットするためのボタンとして設定されたボタンであるということができる。ステップS23の処理の後、CPU10は、図23に示す姿勢算出処理を終了する。
図22に戻り、次にステップS12の処理が実行される。ステップS12において、CPU10は、各キャラクタ(第1キャラクタ97、第2キャラクタ98a、第2キャラクタ98b、および敵キャラクタ99)の移動処理を行う。具体的には、CPU10は、キャラクタデータ132を更新して、第1キャラクタ97、第2キャラクタ98aおよび第2キャラクタ98bのゲーム空間における位置および姿勢を更新する。第1キャラクタ97、第2キャラクタ98aおよび第2キャラクタ98bの位置および姿勢は、予め定められたアルゴリズムによって更新されてもよいし、各プレイヤの操作(端末装置7やメインコントローラ8に対する操作)に基づいて更新されてもよい。例えば、第1キャラクタ97は、端末装置7の十字ボタン54Aが示す方向や左アナログスティック53Aが示す方向に応じてゲーム空間内を移動してもよい。また、CPU10は、第1キャラクタ97の位置および姿勢の更新に応じて、弓オブジェクト91の位置および姿勢も更新する。なお、弓オブジェクト91の位置や姿勢が、例えば、端末装置7の十字ボタン54Aや左アナログスティック53A、タッチパネル52等に対する操作に応じて調整されてもよい。例えば、予め定められたアルゴリズムによって第1キャラクタ97の位置および姿勢が設定されるとともに、弓オブジェクト91の位置および姿勢が設定される。そして、第1プレイヤによる端末装置7に対する操作(方向入力操作やタッチ操作、ボタン操作等)に応じて弓オブジェクト91の位置および姿勢が調整されてもよい。
また、CPU10は、矢オブジェクト92が発射される前である場合、第1キャラクタ97(弓オブジェクト91)の位置および姿勢の更新に応じて、矢オブジェクト92の位置および姿勢も更新する。また、CPU10は、第1キャラクタ97、第2キャラクタ98aおよび第2キャラクタ98bの位置の更新に応じて、第1仮想カメラA、第1仮想カメラB、第1仮想カメラCおよび第2仮想カメラの位置も更新する。具体的には、CPU10は、第1キャラクタ97の位置から当該第1キャラクタ97の姿勢(向き)と反対方向の所定位置に第1仮想カメラAの位置を設定する。同様に、CPU10は、第2キャラクタ98aの位置に応じて、第1仮想カメラBの位置を設定し、第2キャラクタ98bの位置に応じて、第1仮想カメラCの位置を設定する。さらに、CPU10は、敵キャラクタ99の位置および姿勢を予め定められたアルゴリズムによって更新する。次に、CPU10は、ステップS13の処理を実行する。
ステップS13において、CPU10は、照準設定処理を実行する。ステップS13における照準設定処理は、端末装置7からの端末操作データに基づいて、照準95を設定する処理である。以下、図24を参照して、照準設定処理の詳細について説明する。図24は、図22に示す照準設定処理(ステップS13)の詳細な流れを示すフローチャートである。
ステップS31において、CPU10は、端末装置7の姿勢に応じて照準95の位置を算出する。具体的には、CPU10は、ステップS11で算出された端末装置7の姿勢に応じて、照準95の位置を算出する。ステップS31において算出される照準95の位置について、図27を用いて説明する。
図27は、端末装置7の姿勢に応じた照準95の位置の算出方法を説明するための図である。図27において、実線によって示されるXYZ軸は、姿勢が変化される前の端末装置7の姿勢(基準姿勢)を示し、点線によって示されるX’Y’Z’軸は、姿勢が変化された後の端末装置7の姿勢を示す。CPU10は、以下の式(1)および式(2)に基づいて、座標(s,t)を算出する。
s=(−Zx/Zz)×k (1)
t=(Zy/Zz)×k (2)
ここで、Zzは、姿勢が変化された後の端末装置7のZ’軸方向の単位ベクトルを、姿勢が変化される前のXYZ座標系で表した場合のZ軸の座標値である。Zxは、姿勢が変化された後のZ’軸方向の単位ベクトルを、姿勢が変化される前のXYZ座標系で表した場合のX軸の座標値である。Zyは、姿勢が変化された後のZ’軸方向の単位ベクトルを、姿勢が変化される前のXYZ座標系で表した場合のY軸の座標値である。より具体的には、Zx、Zy、Zzは、それぞれステップS11で算出された端末装置7の姿勢を示す回転行列に基づいて、取得される。また、kは所定の係数である。kは端末装置7の姿勢の変化に応じて、照準95の位置をどの程度変化させるかを調整するためのパラメータである。kが1より小さい場合(例えば、0.1の場合)、端末装置7の姿勢を基準姿勢から大きく変化させても、照準95の位置は画像90aの中心からそれほど大きく変化しない。一方、kを1より大きくすると(例えば、10)、端末装置7の姿勢を基準姿勢から少しでも変化させると、照準95の位置は画像90aの中心から大きく変化する。本実施形態では、例えば、kは2に設定される。なお、式(1)および式(2)におけるkはそれぞれ異なる値であってもよい。
なお、上記sおよびtの値は、予め定められた範囲にそれぞれ設定され、式(1)および式(2)で算出された値が当該範囲を超える場合、上記sおよびtの値は、当該範囲の上限または下限(境界)にそれぞれ設定される。
kが1に設定された場合において、上記式(1)および式(2)に基づいて算出された座標(s,t)は、テレビ2の画面上の位置を示し、例えば、座標(0,0)は画面の中心を示す。図27に示すように、kが1に設定された場合、座標(s,t)は、姿勢が変化された後の端末装置7に固定された座標系のZ’軸を伸ばした直線が、テレビ2の画面に当たる点Pを示す。CPU10は、上記式(1)および式(2)に基づいて算出した座標(s,t)を、照準データ133の照準95の位置としてメインメモリに記憶する。次に、CPU10は、ステップS32の処理を実行する。
ステップS32において、CPU10は、タッチパネル52がタッチ位置を検出しているか否かを判定する。具体的には、CPU10は、ステップS2で取得した端末操作データ120のタッチ位置データ122を参照して、タッチパネル52がタッチ位置を検出しているか否かを判定する。タッチパネル52がタッチ位置を検出していない場合、タッチ位置データ122にはタッチ位置が検出されていないことを示す値が格納される。このため、CPU10は、タッチ位置データ122を参照することにより、タッチパネル52がタッチ位置を検出しているか否かを判定することができる。判定結果が肯定の場合、CPU10は、次にステップS33の処理を実行する。一方、判定結果が否定の場合、CPU10は、次にステップS34の処理を実行する。
ステップS33において、CPU10は、照準95の表示をオンに設定する。具体的には、CPU10は、照準データ133に含まれる、照準95を画面に表示するか否かを示すフラグをオンに設定する。その後、CPU10は、図24に示す照準設定処理を終了する。
ステップS34において、CPU10は、照準95の表示をオフに設定する。ここでは、タッチパネル52に対してタッチが行われていないため、照準95を画面に表示させないために照準95の表示をオフに設定する。具体的には、CPU10は、照準データ133に含まれる照準95を画面に表示するか否かを示すフラグをオフに設定する。その後、CPU10は、図24に示す照準設定処理を終了する。
図22に戻り、CPU10は、ステップS13の処理の後、次にステップS14の処理を実行する。
ステップS14において、CPU10は、第1仮想カメラAの設定処理を行う。ここでは、CPU10は、第1キャラクタ97の背後に設定される第1仮想カメラAの、ゲーム空間における姿勢を設定するとともに、第1仮想カメラAのズーム設定を行う。具体的には、CPU10は、第1仮想カメラAの撮像方向を示す単位ベクトルCZ、第1仮想カメラAの撮像方向に対して左向きの単位ベクトルCX、第1仮想カメラAの撮像方向に対して上向きの単位ベクトルCYを算出する。より具体的には、CPU10は、まず、第1キャラクタ97の姿勢を基準とした、第1仮想カメラAの撮像方向を示す単位ベクトルCZ’を以下の式(3)〜式(5)に基づいて、算出する。
CZ’.x=−(s/k)×scale (3)
CZ’.y=(t/k)×scale (4)
CZ’.z=1 (5)
CPU10は、上記式(3)〜式(5)で算出されたベクトルCZ’を正規化する(長さを1にする)ことにより、単位ベクトルCZ’を算出する。
ここで、係数scaleは、予め定められた値であり、例えば、2に設定される。係数scaleが1よりも小さく設定されると、端末装置7の姿勢の変化量に対して、第1仮想カメラAの姿勢の変化量が小さくなる。一方、係数scaleが1よりも大きく設定されると、端末装置7の姿勢の変化量に対して、第1仮想カメラAの姿勢の変化量が大きくなる。なお、式(3)および式(4)におけるscaleの値は異なっていてもよい。
CPU10は、ベクトルCZ’を算出すると、ゲーム空間における上方向の単位ベクトル(y軸方向の単位ベクトル)とベクトルCZ’との外積を算出することにより、第1仮想カメラAの撮像方向と直交する、第1仮想カメラAの撮像方向に対して左向きのベクトルを算出する。そして、CPU10は、当該算出したベクトルを正規化することによって、単位ベクトルCX’を算出する。さらに、CPU10は、ベクトルCZ’とベクトルCX’との外積を算出して、正規化することにより、第1仮想カメラAの撮像方向に対して上向きの単位ベクトルCY’を算出する。以上のようにして、第1キャラクタ97の姿勢を基準とした第1仮想カメラAの姿勢を示す3つのベクトルCX’、CY’、CZ’が算出される。そして、CPU10は、算出した3つのベクトルCX’、CY’、CZ’に対して座標変換(第1キャラクタ97に固定の座標系からゲーム空間に固定のxyz座標系へと変換する座標変換)を行うことにより、ゲーム空間における第1仮想カメラAの姿勢を示す3つのベクトルCX,CY、CYを算出する。CPU10は、算出したゲーム空間における第1仮想カメラAの姿勢を第1仮想カメラAデータ137としてメインメモリに記憶する。
さらに、CPU10は、ステップS14において、第1仮想カメラAのズーム設定を行う。具体的には、CPU10は、照準95の表示がオンに設定されている場合(すなわち、ステップS32でタッチ位置が検出されていると判定された場合)、タッチ位置データ122を参照して、第1仮想カメラAのズーム設定を行う。より具体的には、CPU10は、タッチ位置データ122を参照して、過去にタッチオンが行われた位置から最新のタッチ位置までの距離(スライド距離)を算出する。そして、CPU10は、算出した距離に応じて、第1仮想カメラAの位置を維持したまま、第1仮想カメラAのズーム設定(視野範囲の調整)を行う。これにより、タッチパネル52に対するスライド操作の距離が長いほどゲーム空間がより拡大(ズームイン)されてテレビ2の左上の領域に表示される。ステップS14の処理の後、CPU10は、次にステップS15の処理を実行する。
ステップS15において、CPU10は、弓および矢の設定処理を実行する。ステップS15における処理は、端末装置7の姿勢に基づいて弓オブジェクト91および矢オブジェクト92の姿勢を算出する処理である。以下、図25を参照して、弓および矢の設定処理の詳細について説明する。図25は、図22に示す弓および矢の設定処理(ステップS15)の詳細な流れを示すフローチャートである。
ステップS41において、CPU10は、ゲーム空間における目標位置を算出する。ゲーム空間における目標位置は、ステップS13において算出された照準95の位置(st座標系の座標値)に対応する、ゲーム空間における位置(xyz座標系における座標値)である。具体的には、CPU10は、照準データ133および第1仮想カメラAデータ137を参照して、ゲーム空間における目標位置を算出する。上述のように、照準データ133が示す照準95の位置(2次元位置)は、第1仮想カメラAでゲーム空間を撮像して得られる画像上の位置を示す。CPU10は、照準95の位置に対応するゲーム空間における位置(3次元位置)を、照準95の位置(2次元位置)と、第1仮想カメラAの位置および姿勢とに基づいて、算出することができる。例えば、CPU10は、ゲーム空間の仮想平面上(当該仮想平面は第1仮想カメラAの撮像方向と垂直な平面である)の照準95の位置に対応する位置から第1仮想カメラAの撮像方向の伸びる3次元直線を算出する。そして、CPU10は、当該3次元直線とゲーム空間のオブジェクトが接触する位置を、ゲーム空間における目標位置として算出してもよい。また、例えば、CPU10は、第1仮想カメラAでゲーム空間を撮像した画像上の照準95の位置における画素の深度値と、当該照準95の位置とに基づいて、照準95の位置に対応するゲーム空間における位置を算出してもよい。CPU10は、第1仮想カメラAのゲーム空間における位置および姿勢と、照準95の位置とに基づいて、第1仮想カメラAを基準とした座標系(ステップS14で算出したCX軸、CY軸、CZ軸を各軸とする座標系)のCX座標値およびCY座標値を算出することができる。また、CPU10は、上記深度値に基づいて、第1仮想カメラAを基準とした座標系のCZ座標値を算出することができる。このようにして算出した照準95の位置に対応するゲーム空間における位置を、目標位置として算出してもよい。CPU10は、算出した目標位置を目標位置データ136としてメインメモリに記憶し、次に、ステップS42の処理を実行する。
ステップS42において、CPU10は、ゲーム空間における矢オブジェクト92の位置からステップS41で算出した目標位置への方向を算出する。具体的には、CPU10は、矢データ135によって示される矢オブジェクト92の位置を始点とし、ステップS41で算出した目標位置を終点とするベクトルを算出する。次に、CPU10は、ステップS43の処理を実行する。
ステップS43において、CPU10は、ステップS42で算出した方向を矢オブジェクト92の発射方向として設定する。具体的には、CPU10は、算出したベクトルを、矢データ135に含まれる矢オブジェクト92の姿勢(発射方向)を示すデータとして、メインメモリに記憶する。次に、CPU10は、ステップS44の処理を実行する。
ステップS44において、CPU10は、弓オブジェクト91の姿勢、および弓オブジェクト91の動作を設定する。具体的には、CPU10は、矢オブジェクト92の発射方向と端末装置7のZ軸周りの回転とに基づいて、弓オブジェクト91の姿勢を設定する。図28Aは、弓オブジェクト91をゲーム空間の上方から見た図である。図28Bは、弓オブジェクト91を真後ろ(第1仮想カメラA)から見た図である。図28Aに示すように、CPU10は、弓オブジェクト91が矢オブジェクト92と垂直になるように、弓オブジェクト91をゲーム空間(xyz座標系)におけるy軸(地面から垂直上向きの軸)周りに回転させる。また、図28Bに示すように、CPU10は、端末装置7のZ軸周りの回転角に応じて、弓オブジェクト91を回転させる。図28Bにおいては、端末装置7が図14に示す基準姿勢からZ軸を基準として反時計回りに90度回転された場合の、弓オブジェクト91の姿勢が示されている。このように、弓オブジェクト91がテレビ2に表示された場合の左右方向の傾きと、端末装置7のX軸の傾きとが一致するように、弓オブジェクト91の姿勢が設定される。CPU10は、矢オブジェクト92の姿勢および端末装置7のZ軸周りの回転に応じて算出した弓オブジェクト91の姿勢を、弓データ134としてメインメモリに記憶する。また、CPU10は、タッチ位置データ122に基づいて、弓オブジェクト91を引く距離を決定する。これにより、タッチパネル52において行われたスライド操作の距離に応じて弓オブジェクト91の弦がスライド方向に伸びる様子がLCD51に表示される。CPU10は、ステップS44の処理の後、図25に示す弓および矢の設定処理を終了する。
図22に戻り、CPU10は、ステップS15の処理の後、次にステップS16の処理を実行する。
ステップS16において、CPU10は、射撃処理を実行する。ステップS16における射撃処理は、矢オブジェクト92をゲーム空間に発射させたり、既に発射された矢オブジェクト92を移動させたりする処理である。以下、図26を参照して、発射処理の詳細について説明する。図26は、図22に示す発射処理(ステップS16)の詳細な流れを示すフローチャートである。
ステップS51において、CPU10は、矢オブジェクト92がゲーム空間内を移動中か否かを判定する。具体的には、CPU10は、矢データ135を参照して、矢オブジェクト92が移動中か否かを判定する。判定結果が否定の場合、CPU10は、次にステップS52の処理を実行する。一方、判定結果が肯定の場合、CPU10は、次にステップS54の処理を実行する。
ステップS52において、CPU10は、タッチオフを検出したか否かを判定する。具体的には、CPU10は、タッチ位置データ122を参照して、前回の処理ループでタッチ位置を検出し、かつ、今回の処理ループでタッチ位置を検出しなかった場合、タッチオフを検出したと判定する。判定結果が肯定の場合、CPU10は、次にステップS53の処理を実行する。一方、判定結果が否定の場合、CPU10は、図26に示す射撃処理を終了する。
ステップS53において、CPU10は、矢オブジェクト92の移動を開始する。具体的には、CPU10は、矢オブジェクト92が移動中であることを示す値を設定して、矢データ135を更新する。なお、CPU10は、ステップS52においてタッチオフを検出したと判定した場合であっても、スライド操作の距離(タッチオン位置からタッチオフ位置までの距離)が所定の閾値よりも小さい場合、矢オブジェクト92の移動を開始しなくてもよい。ステップS53の処理の後、CPU10は、図26に示す射撃処理を終了する。
一方、ステップS54において、CPU10は、矢オブジェクト92の発射方向に沿って矢オブジェクト92を移動させる。具体的には、CPU10は、現在の矢オブジェクト92の位置に、矢オブジェクト92の発射方向と同じ方向の所定の長さの移動ベクトル(当該ベクトルの長さは矢オブジェクト92の速さを示す)を加えることにより、矢オブジェクト92を移動させる。なお、矢オブジェクト92の速さは、予め定められた値に設定されてもよいし、当該矢オブジェクト92が発射されたときのスライド操作の距離に応じて定められてもよい。また、重力や風の影響を考慮して、矢オブジェクト92の移動が制御されてもよい。具体的には、重力の影響により矢オブジェクト92はy軸負方向にさらに移動され、風の影響により風が吹く方向にさらに移動される。CPU10は、次にステップS55の処理を実行する。
ステップS55において、CPU10は、矢オブジェクト92がゲーム空間内のオブジェクトと当ったか否かを判定する。判定結果が肯定の場合、CPU10は、次にステップS56の処理を実行する。一方、判定結果が否定の場合、CPU10は、図26に示す射撃処理を終了する。
ステップS56において、CPU10は、矢オブジェクト92の移動を停止する。また、CPU10は、矢オブジェクト92の停止位置に応じた処理を実行する。例えば、矢オブジェクト92が敵キャラクタ99に当たった場合、CPU10は、当該敵キャラクタ99の生命力を示すパラメータを減少させる。また、CPU10は、矢オブジェクト92が移動前の状態であることを示す値を設定して、矢データ135を更新する(新たな矢オブジェクト92を生成する)。ステップS56の処理の後、CPU10は、図26に示す射撃処理を終了する。
図22に戻り、CPU10は、ステップS16の処理の後、次にステップS17の処理を実行する。
ステップS17において、CPU10は、メインコントローラ8の姿勢に応じて、剣オブジェクト96を制御する。具体的には、CPU10は、まず、コントローラ操作データ110を参照して、メインコントローラ8aおよびメインコントローラ8bの姿勢を算出する。各メインコントローラ8の姿勢は、上述のように、角速度を時間で積分することにより求められる。次に、CPU10は、メインコントローラ8aの姿勢に応じて、剣オブジェクト96aの姿勢を設定し、メインコントローラ8bの姿勢に応じて、剣オブジェクト96bの姿勢を設定する。そして、CPU10は、各剣オブジェクト96の位置および姿勢に応じて第2キャラクタの動作を制御する。これにより、例えば、メインコントローラ8aが上方向に向けられている場合、剣オブジェクト96aがゲーム空間の上方向に向けられ、第2キャラクタ98aが剣オブジェクト96aを振り上げているような様子がテレビ2に表示される。この場合において、第2キャラクタ98aが手で剣オブジェクト96aを把持しているように、剣オブジェクト96aの位置が調整される。さらに、CPU10は、剣オブジェクト96aが他のオブジェクトに当ったか否かを判定し、判定結果に応じた処理を実行する。例えば、剣オブジェクト96aが敵キャラクタ99に当たった場合、敵キャラクタ99の生命力を示すパラメータを減少させる。CPU10は、次にステップS18の処理を実行する。
ステップS18において、CPU10は、第1仮想カメラB、第1仮想カメラCおよび第2仮想カメラの設定処理を実行する。具体的には、CPU10は、第2キャラクタ98aの位置および姿勢に応じて、第1仮想カメラBの位置および姿勢を設定し、第2キャラクタ98bの位置および姿勢に応じて、第1仮想カメラCの位置および姿勢を設定する。また、CPU10は、弓オブジェクト91の位置および姿勢に応じて、第2仮想カメラの位置および姿勢を設定する。第2仮想カメラと弓オブジェクト91とは予め定められた位置関係を有する。すなわち、第2仮想カメラは、弓オブジェクト91に固定されるため、弓オブジェクト91の位置に応じて第2仮想カメラの位置が定められ、弓オブジェクト91の姿勢に応じて第2仮想カメラの姿勢も定められる。ステップS18の処理の後、CPU10は、図22に示すゲーム制御処理を終了する。
図21に戻り、ステップS3のゲーム制御処理の後、CPU10は、次にステップS4の処理を実行する。
ステップS4において、CPU10は、テレビ用ゲーム画像の生成処理を実行する。ステップS4においては、テレビ2に表示される画像90a、画像90b、および、画像90cが生成される。具体的には、CPU10は、第1仮想カメラAでゲーム空間を撮像することによって画像を取得する。そして、CPU10は、照準データ133を参照して、生成した画像に照準95の画像を重ね合わせることにより、テレビ2の左上の領域に表示される画像90aを生成する。すなわち、CPU10は、照準95の表示がオンに設定されている場合、照準データ133によって示される座標(s,t)を中心とする円形の画像を、第1仮想カメラAでゲーム空間を撮像することによって取得された画像に重ね合わせる。これにより、第1キャラクタ97や弓オブジェクト91、照準95等を含む画像90aが生成される。なお、照準95の表示がオフに設定されている場合は、照準95は表示されない。また、CPU10は、第1仮想カメラBでゲーム空間を撮像することにより画像90bを生成し、第1仮想カメラCでゲーム空間を撮像することにより画像90cを生成する。そして、CPU10は、生成した3つの画像90a〜画像90cを含む1つのテレビ用ゲーム画像を生成する。テレビ用ゲーム画像の左上の領域には画像90a、右上の領域には画像90b、左下の領域には画像90cが配置される。CPU10は、次にステップS5の処理を実行する。
ステップS5において、CPU10は、端末用ゲーム画像の生成処理を実行する。具体的には、CPU10は、第2仮想カメラでゲーム空間を撮像することにより端末用ゲーム画像を生成する。CPU10は、次にステップS6の処理を実行する。
ステップS6において、CPU10は、テレビ2へステップS4で生成したテレビ用ゲーム画像を出力する。これにより、テレビ2には、図12に示すような画像が表示される。また、ステップS6においては、テレビ用ゲーム画像と共に音声データがテレビ2へ出力され、テレビ2のスピーカ2aからゲーム音声が出力される。CPU10は、次にステップS7の処理を実行する。
ステップS7において、CPU10は、端末装置7へ端末用ゲーム画像を送信する。具体的には、CPU10は、ステップS5で生成した端末用ゲーム画像をコーデックLSI27に送り、当該コーデックLSI27は、端末用ゲーム画像に対して所定の圧縮処理を行う。圧縮処理が施された画像のデータは、端末通信モジュール28によってアンテナ29を介して端末装置7へ送信される。端末装置7は、ゲーム装置3から送信されてくる画像のデータを無線モジュール70によって受信する。コーデックLSI66は、受信された画像データに対して所定の伸張処理を行う。伸張処理が行われた画像データはLCD51に出力される。これによって、端末用ゲーム画像がLCD51に表示される。また、ステップS7においては、端末用ゲーム画像と共に音声データが端末装置7へ送信され、端末装置7のスピーカ67からゲーム音声が出力されてもよい。CPU10は、次にステップS8の処理を実行する。
ステップS8において、CPU10は、ゲームを終了するか否かを判定する。ステップS8の判定は、例えば、ゲームオーバーになったか否か、あるいは、ユーザがゲームを中止する指示を行ったか否か等によって行われる。ステップS8の判定結果が否定の場合、ステップS2の処理が再度実行される。一方、ステップS8の判定結果が肯定の場合、CPU10は図21に示すゲーム処理を終了する。
以上のように、第1プレイヤは、端末装置7の姿勢を変化させることで、矢オブジェクト92の発射方向を制御することができる。また、第1プレイヤは、端末装置7の姿勢を変化させることで、第1仮想カメラAの姿勢を変化させて、ゲーム空間の表示を変化させることができる。より具体的には、端末装置7の姿勢の変化量よりも第1仮想カメラAの姿勢の変化量の方が大きくなるように、第1仮想カメラAの姿勢が変化される。これにより、第1プレイヤは、テレビ2の画面を視認可能な範囲で端末装置7の姿勢を変化させて、より広い範囲のゲーム空間をテレビ2に表示させることができる。
また、テレビ2には照準95が表示され、照準95の位置は端末装置7の姿勢に応じて変化する。照準95は、常に画面(画像90a)の中心に表示されるのではなく、端末装置7の姿勢に応じて、照準95の表示上の位置が決定される。具体的には、端末装置7の姿勢の変化量よりも照準95の移動量の方が大きくなるように、照準95が移動される。例えば、第1プレイヤが端末装置7を画面の右方向に向けた場合、照準95は右端に移動する。これにより、第1プレイヤが端末装置7を回転させすぎることを防止することができる。
また、テレビ2には、各プレイヤが操作する各キャラクタの視点でゲーム空間を見た画像がそれぞれ表示され、端末装置7にも弓オブジェクト91を含むゲーム空間の画像が表示される。具体的には、端末装置7からの操作データに基づいて操作される第1キャラクタ97の背後に第1仮想カメラAが設定され、当該第1仮想カメラAでゲーム空間を撮像した画像がテレビ2に表示される。また、メインコントローラ8aおよび8bからの操作データに基づいて操作される第2キャラクタ98aおよび98bの背後に第1仮想カメラBおよびCが設定され、当該第1仮想カメラBおよびCでゲーム空間を撮像した画像がテレビ2に表示される。さだに、弓オブジェクト91に固定された第2仮想カメラでゲーム空間を撮像した画像が端末装置7に表示される。このように本実施形態のゲームでは、様々な視点からゲーム空間を見た画像を、テレビ2およびテレビ2とは異なる端末装置7の表示装置に表示することができる。
[7.変形例]
なお、上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で本発明を実施することも可能である。
例えば、本実施形態では、矢オブジェクト92を1つずつゲーム空間に発射させる(すなわち、1つの矢オブジェクト92を発射させて当該矢オブジェクト92が停止するまで他の矢オブジェクト92が発射されない)場合について説明したが、他の実施形態では、矢オブジェクト92を連続して発射させてもよい(すなわち、1つの矢オブジェクト92を発射させて当該矢オブジェクト92が停止するまでに他の矢オブジェクト92を発射させてもよい)。また、複数の矢オブジェクト92を同時に発射させてもよい。例えば、照準95をあるオブジェクトに合わせて所定の操作を行う(例えば、端末装置7の所定のボタンを押す)ことによって、当該オブジェクトをロックオンし、他のオブジェクトに照準95を合わせて同様の操作を行うことによって他のオブジェクトをロックオンする。そして、ロックオンした複数のオブジェクトに対して、同時に複数の矢オブジェクト92を発射させてもよい。
また、本実施形態では、端末装置7に対する操作に応じて矢オブジェクトを移動させたが、他の実施形態では、移動させる物体は、例えば、ボール等の球体、銃弾、砲弾、槍、ブーメラン等、どのようなものでもよい。
また、本実施形態では、端末装置7の姿勢に基づいて、矢の発射方向(移動方向)を設定するとともに、第1仮想カメラAの撮像方向を設定した。他の実施形態では、端末装置7の姿勢に基づいて、その他の制御方向を設定し、当該制御方向に基づいてゲーム処理を行ってもよい。例えば、制御方向としては、上記のようなオブジェクトの移動方向であったり、仮想カメラの撮像方向の他、キャラクタの視線方向、移動するオブジェクトの移動を変化させる方向(例えば、ボールを投げたときのボールがカーブする方向)等であってもよい。
また、本実施形態では、テレビ2の画面を4等分し、それぞれの領域に異なる画像を表示した。他の実施形態では、画面の分割数や各分割領域の大きさはどのようなものでもよい。例えば、表示装置の画面は2等分されてもよいし、複数の領域に異なる大きさで分割されて、それぞれ異なる画像(各キャラクタからゲーム空間を見た画像)が表示されてもよい。例えば、端末装置7を操作するプレイヤと、コントローラ5を操作するプレイヤの2人のプレイヤでゲームが行われてもよく、この場合は、テレビ2の画面が2等分されてもよい。また、複数の表示装置が用意され、ゲーム装置3と複数の表示装置とが接続されて、各表示装置にそれぞれ別の画像が表示されてもよい。
また、本実施形態では、1人のプレイヤが端末装置7を操作し、最大3人のプレイヤがメインコントローラ8を操作することにより、最大4人のプレイヤでゲームを行う場合について説明した。他の実施形態では、複数のプレイヤが端末装置7を操作し、複数のプレイヤがメインコントローラ8を操作して、ゲームを行ってもよい。
また、本実施形態では、ゲーム装置3において端末用ゲーム画像を生成し、当該生成した画像を端末装置7に無線通信により送信することにより、端末装置7に端末用ゲーム画像を表示した。他の実施形態では、端末装置7において端末用ゲーム画像を生成して、生成した画像を端末装置7の表示部に表示してもよい。この場合において、端末装置7には、ゲーム装置3からゲーム空間のキャラクタや仮想カメラに関する情報(位置や姿勢等の情報)が送信され、当該情報に基づいて端末装置7内でゲーム画像が生成される。
また、本実施形態では、端末装置7のLCD51には、弓オブジェクト91に固定された第2仮想カメラで弓オブジェクト91を撮像することによって動的に取得される画像が表示された。他の実施形態では、端末装置7のLCD51には、弓オブジェクト91の静的な画像(予めゲーム装置3に記憶された画像)や、その他の静的な画像が表示されてもよい。例えば、端末装置7に対する操作に応じて弓オブジェクト91の動作が決定され、当該決定された動作に応じて予め記憶された複数の画像の中から1つの画像が選択されることにより、弓オブジェクト91の画像が取得される。そして、当該弓オブジェクト91の画像が端末装置7のLCD51に表示される。
また、本実施形態では、端末装置7のタッチパネル52に対してタッチオフ(タッチのリリース)が行われた場合に矢オブジェクト92をゲーム空間内に発射させた。他の実施形態では、端末装置7のタッチパネル52に対してタッチオンが行われた場合に矢オブジェクト92を発射させてもよいし、タッチパネル52に対する所定のタッチ操作が行われた場合に矢オブジェクト92を発射させてもよい。所定のタッチ操作としては、所定のパターンを描く操作であってもよい。
また、本実施形態では、端末装置7のタッチパネル52に対してスライド操作が行われた場合に第1仮想カメラAのズーム設定(具体的には第1仮想カメラAの位置を維持したままズームイン)を行った。他の実施形態では、端末装置7のタッチパネル52に対して所定のタッチ操作が行われた場合に第1仮想カメラAのズーム設定(ズームインまたはズームアウト)を行ってもよい。例えば、タッチ位置に応じてズーム設定が変化するように構成されていてもよく、テレビ2から遠い方向の位置よりもテレビ2に近い方向の位置がタッチされた場合に、ゲーム空間がズームインされてもよい。
また、他の実施形態では、第1仮想カメラAを撮像方向に移動させることにより、ゲーム空間を拡大してテレビ2に表示してもよい。スライド操作の距離が長いほど、第1仮想カメラAを撮像方向に移動(または撮像方向と反対方向に移動)させることにより、ゲーム空間を拡大(または縮小)した画像を生成することができる。すなわち、タッチパネル52に対するスライド操作や所定の位置へのタッチに応じて第1仮想カメラAの設定を変更する(撮像方向に移動する、または、視野範囲を調整する)ことにより、ゲーム空間をズームイン(拡大表示)またはズームアウト(縮小表示)してもよい。
また、他の実施形態では、端末装置7は、LCD51の画面上に設けられるタッチパネル52の代わりに、LCD51の画面とは異なる位置に配置されたタッチパッドを備えてもよい。
また、他の実施形態では、端末装置7に対する操作に応じて行われた処理をコントローラ5(メインコントローラ8)に対する操作に応じて行ってもよい。すなわち、上述した端末装置7の代わりにコントローラ5が用いられ、上述した端末装置7の姿勢に応じたゲーム処理(矢の移動方向を決定したり、仮想カメラの姿勢を決定したり、照準の位置を決定したりする処理)をコントローラ5の姿勢に応じて行ってもよい。
また、本実施形態では、角速度センサが検出した角速度に基づいて、端末装置7の姿勢を算出し、加速度センサが検出した加速度に基づいて端末装置7の姿勢を補正した。すなわち、これらの2種類の慣性センサ(加速度センサおよび角速度センサ)が検出する物理量の双方を用いて、端末装置7の姿勢を算出した。他の実施形態では、磁気センサが検出する方位(磁気センサが検出する地磁気によって示される方角)に基づいて、端末装置7の姿勢を算出してもよい。磁気センサによって端末装置7がどの方向(地面に平行な方向)を向いているかを検出することができる。この場合、さらに加速度センサを用いると、重力方向に対する傾きを検出することができ、端末装置7の3次元空間における姿勢を算出することができる。
また、他の実施形態では、マーカ装置6のマーカを端末装置7が撮像することによって、端末装置7のテレビ2に対する姿勢を算出してもよい。この場合、例えば、端末装置7のカメラ56によって、あるいはこれとは異なる撮像部によって、マーカ装置6のマーカ6Rおよびマーカ6Lからの赤外光を受光して画像データを生成し、当該画像に含まれるマーカの位置に基づいて、端末装置7がテレビ2の方向を向いているか、水平方向にどの程度傾いているかを検出することができる。また、他の実施形態では、端末装置7のマーカ部55からの赤外光を受光して画像を取得するカメラ、あるいは、端末装置7自体の画像を取得するカメラが実空間の所定位置に配置され、当該カメラからの画像に基づいて、端末装置7の姿勢を検出してもよい。例えば、テレビ2の上にカメラが配置され、ゲーム装置3は、当該カメラによって撮像された画像に含まれる端末装置7をパターンマッチング等によって検出することで、端末装置7の実空間における姿勢を算出することができる。
また、本実施形態では、端末装置7のXYZ軸の3軸周り回転角に基づいてゲーム処理が行われたが、他の実施形態では、1軸あるいは2軸周りの回転角に基づいてゲーム処理が行われてもよい。
また、他の実施形態では、端末装置7においてジャイロセンサ64等によって検出された物理量に基づいて、端末装置7の姿勢が算出され、当該姿勢に関するデータがゲーム装置3に送信されてもよい。そして、ゲーム装置3において、端末装置7からのデータを受信して、端末装置7の姿勢を取得し、当該端末装置7の姿勢に基づいて、上述のように照準の位置や矢の発射方向等が決定されてもよい。すなわち、ゲーム装置3は、端末装置7からのジャイロセンサ64等によって検出された物理量に応じたデータに基づいて、端末装置7の姿勢を算出することによって端末装置7の姿勢を取得してもよいし、端末装置7において算出された姿勢に関するデータに基づいて、端末装置7の姿勢を取得してもよい。
また、他の実施形態では、ゲーム装置3において行われたゲーム処理の一部が、端末装置7において実行されてもよい。例えば、端末装置7で操作されるゲーム空間内のオブジェクトの位置や姿勢、動作等が端末装置7において決定され、当該決定した情報がゲーム装置3に送信されてもよい。ゲーム装置3は受信した情報に基づいて、その他のゲーム処理を実行してもよい。
さらに、他の実施形態では、互いに通信可能な複数の情報処理装置を有するゲームシステムにおいて、当該複数の情報処理装置が、上述のようなゲーム装置3において実行されたゲーム処理を分担して実行するようにしてもよい。例えば、インターネットのようなネットワークに接続された複数の情報処理装置によって上述のようなゲームシステムが構成されてもよい。この場合、例えば、プレイヤはネットワークに接続可能でかつ姿勢を検出可能な慣性センサ(加速度センサや角速度センサ)、あるいは、磁気センサ等の方向を検出するセンサを備える操作装置に対するゲーム操作を行う。当該ゲーム操作に応じた操作情報は、ネットワークを介して他の情報処理装置に送信され、当該他の情報処理装置は、受信した操作情報に基づいたゲーム処理を実行し、実行結果を操作装置に送信する。
また、他の実施形態では、ゲーム装置3と、メインコントローラ8(コントローラ5)および端末装置7とが無線ではなく有線で接続されることによって、データが送受信されてもよい。
上述したプログラムは、ゲーム装置3以外の様々な情報処理を行う目的で用いられる情報処理装置、例えばパーソナルコンピュータ等において実行されてもよい。
また、上記ゲームプログラムは、光ディスクに限らず、磁気ディスク、不揮発性メモリ等の記憶媒体に記憶されてもよく、ネットワークに接続されたサーバ上のRAMや磁気ディスク等のコンピュータ読み取り可能な記憶媒体に記憶されて、ネットワークを介して当該プログラムが提供されてもよい。また、上記ゲームプログラムは、ソースコードとして情報処理装置に読み込まれて、プログラムの実行の際にコンパイルされて実行されてもよい。
また、上記実施形態においては、ゲーム装置3のCPU10が上記ゲームプログラムを実行することによって、上述したフローチャートによる処理が行われた。他の実施形態においては、上記処理の一部又は全部は、ゲーム装置3が備える専用回路によって行われてもよし、他の汎用プロセッサによって行われてもよい。少なくとも1つのプロセッサが、上記処理を実行するための「プログラムされた論理回路」として動作するものであってもよい。