[1.ゲームシステムの全体構成]
以下、図面を参照して、本発明の一実施形態に係るゲームシステム1について説明する。図1は、ゲームシステム1の外観図である。図1において、ゲームシステム1は、テレビジョン受像器等に代表される据置型のディスプレイ装置(以下、「テレビ」と記載する)2、据置型のゲーム装置3、光ディスク4、コントローラ5、マーカ装置6、および、端末装置7を含む。ゲームシステム1は、コントローラ5および端末装置7を用いたゲーム操作に基づいてゲーム装置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とゲーム装置3とは無線通信によって通信可能である。本実施形態では、コントローラ5とゲーム装置3との間の無線通信には例えばBluetooth(ブルートゥース)(登録商標)の技術が用いられる。なお、他の実施形態においてはコントローラ5とゲーム装置3とは有線で接続されてもよい。また、図1では、ゲームシステム1に含まれるコントローラ5は1つとするが、ゲームシステム1は複数のコントローラ5を含んでいてもよい。つまり、ゲーム装置3は複数のコントローラと通信可能であり、所定台数のコントローラを同時に使用することによって複数人でゲームをプレイすることが可能である。コントローラ5の詳細な構成については後述する。
端末装置7は、可搬型であり、ユーザが把持可能な程度の大きさである。ユーザは端末装置7を手に持って動かしたり、あるいは、端末装置7を自由な位置に配置したりして使用することが可能である。詳細な構成は後述するが、端末装置7は、表示手段であるLCD(Liquid Crystal Display:液晶表示装置)51、および、入力手段(後述するタッチパネル52やジャイロセンサ74等)を備える。端末装置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とテレビ2との接続は、どのような方式で行われてもよいが、ゲーム装置3は、テレビ2を制御する制御指令を有線または無線でテレビ2へ送信するようにしてもよい。例えばHDMI(High−Definition Multimedia Interface)規格に則ったHDMIケーブルが用いられてもよい。HDMI規格では、CEC(Consumer Electronics Control)と呼ばれる機能によって、接続相手の機器を制御することが可能である。したがって、HDMIケーブルが用いられる場合のように、ゲーム装置3がテレビ2に対する制御が可能である場合には、ゲーム装置3は、適宜のタイミングでテレビ2の電源をオンにしたり、テレビ2の入力を切り替えたりすることができる。
また、ゲーム装置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について説明する。図3は、コントローラ5の外観構成を示す斜視図である。図4は、コントローラ5の外観構成を示す斜視図である。図3は、コントローラ5の上側後方から見た斜視図であり、図4は、コントローラ5を下側前方から見た斜視図である。
図3および図4において、コントローラ5は、例えばプラスチック成型によって形成されたハウジング31を有している。ハウジング31は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。ユーザは、コントローラ5に設けられたボタンを押下すること、および、コントローラ5自体を動かしてその位置や姿勢(傾き)を変えることによってゲーム操作を行うことができる。
ハウジング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は、コントローラ5に他の機器(例えば、他のセンサユニットやコントローラ)を接続するために利用される。また、ハウジング31の後面におけるコネクタ33の両側には、上記他の機器が容易に離脱することを防止するために係止穴33aが設けられている。
ハウジング31上面の後方には複数(図3では4つ)のLED34a〜34dが設けられる。ここで、コントローラ5には、他のコントローラと区別するためにコントローラ種別(番号)が付与される。各LED34a〜34dは、コントローラ5に現在設定されている上記コントローラ種別をユーザに通知したり、コントローラ5の電池残量をユーザに通知したりする等の目的で用いられる。具体的には、コントローラ5を用いてゲーム操作が行われる際、上記コントローラ種別に応じて複数のLED34a〜34dのいずれか1つが点灯する。
また、コントローラ5は撮像情報演算部35(図6)を有しており、図4に示すように、ハウジング31前面には撮像情報演算部35の光入射面35aが設けられる。光入射面35aは、マーカ6Rおよび6Lからの赤外光を少なくとも透過する材質で構成される。
ハウジング31上面における1番ボタン32bとホームボタン32fとの間には、コントローラ5に内蔵されるスピーカ47(図5)からの音を外部に放出するための音抜き孔31aが形成されている。
次に、図5および図6を参照して、コントローラ5の内部構造について説明する。図5および図6は、コントローラ5の内部構造を示す図である。なお、図5は、コントローラ5の上筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6は、コントローラ5の下筐体(ハウジング31の一部)を外した状態を示す斜視図である。図6に示す斜視図は、図5に示す基板30を裏面から見た斜視図となっている。
図5において、ハウジング31の内部には基板30が固設されており、当該基板30の上主面上に各操作ボタン32a〜32h、各LED34a〜34d、加速度センサ37、アンテナ45、およびスピーカ47等が設けられる。これらは、基板30等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)42(図6参照)に接続される。本実施形態では、加速度センサ37は、X軸方向に関してコントローラ5の中心からずれた位置に配置されている。これによって、コントローラ5をZ軸回りに回転させたときのコントローラ5の動きが算出しやすくなる。また、加速度センサ37は、長手方向(Z軸方向)に関してコントローラ5の中心よりも前方に配置されている。また、無線モジュール44(図6)およびアンテナ45によって、コントローラ5がワイヤレスコントローラとして機能する。
一方、図6において、基板30の下主面上の前端縁に撮像情報演算部35が設けられる。撮像情報演算部35は、コントローラ5の前方から順に赤外線フィルタ38、レンズ39、撮像素子40、および画像処理回路41を備えている。これらの部材38〜41はそれぞれ基板30の下主面に取り付けられる。
さらに、基板30の下主面上には、上記マイコン42およびバイブレータ46が設けられている。バイブレータ46は、例えば振動モータやソレノイドであり、基板30等に形成された配線によってマイコン42と接続される。マイコン42の指示によりバイブレータ46が作動することによってコントローラ5に振動が発生する。これによって、コントローラ5を把持しているユーザの手にその振動が伝達される、いわゆる振動対応ゲームを実現することができる。本実施形態では、バイブレータ46は、ハウジング31のやや前方寄りに配置される。つまり、バイブレータ46がコントローラ5の中心よりも端側に配置することによって、バイブレータ46の振動によりコントローラ5全体を大きく振動させることができる。また、コネクタ33は、基板30の下主面上の後端縁に取り付けられる。なお、図5および図6に示す他、コントローラ5は、マイコン42の基本クロックを生成する水晶振動子、スピーカ47に音声信号を出力するアンプ等を備えている。
なお、図3〜図6に示したコントローラ5の形状や、各操作ボタンの形状、加速度センサやバイブレータの数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であってもよい。また、本実施形態では、撮像手段による撮像方向はZ軸正方向であるが、撮像方向はいずれの方向であってもよい。すなわち、コントローラ5における撮像情報演算部35の位置(撮像情報演算部35の光入射面35a)は、ハウジング31の前面でなくてもよく、ハウジング31の外部から光を取り入れることができれば他の面に設けられてもかまわない。
図7は、コントローラ5の構成を示すブロック図である。コントローラ5は、操作部32(各操作ボタン32a〜32i)、撮像情報演算部35、通信部36、加速度センサ37、およびジャイロセンサ48を備えている。コントローラ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に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向に関してそれぞれ直線加速度を検出する。加速度センサ37は、各軸に沿った直線方向に関する加速度を検出するものであるため、加速度センサ37からの出力は3軸それぞれの直線加速度の値を表すものとなる。すなわち、検出された加速度は、コントローラ5を基準に設定されるXYZ座標系(コントローラ座標系)における3次元のベクトルとして表される。
加速度センサ37が検出した加速度を表すデータ(加速度データ)は、通信部36へ出力される。なお、加速度センサ37が検出した加速度は、コントローラ5自体の向き(傾斜角度)や移動に対応して変化するので、ゲーム装置3は取得された加速度データを用いてコントローラ5の向きや移動を算出することができる。本実施形態では、ゲーム装置3は、取得された加速度データに基づいてコントローラ5の姿勢や傾斜角度等を算出する。
なお、加速度センサ37(後述する加速度センサ73についても同様)から出力される加速度の信号に基づいて、ゲーム装置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軸(本実施形態では、XYZ軸)回りの角速度を検出する。本明細書では、コントローラ5の撮像方向(Z軸正方向)を基準として、X軸回りの回転方向をピッチ方向、Y軸回りの回転方向をヨー方向、Z軸回りの回転方向をロール方向と呼ぶ。ジャイロセンサ48は、3軸回りの角速度を検出することができればよく、用いるジャイロセンサの数および組み合わせはどのようなものであってもよい。例えば、ジャイロセンサ48は、3軸ジャイロセンサであってもよいし、2軸ジャイロセンサと1軸ジャイロセンサとを組み合わせて3軸周りの角速度を検出するものであってもよい。ジャイロセンサ48で検出された角速度を表すデータは、通信部36へ出力される。また、ジャイロセンサ48は1軸または2軸回りの角速度を検出するものであってもよい。
通信部36は、マイコン42、メモリ43、無線モジュール44、およびアンテナ45を含んでいる。マイコン42は、処理を行う際にメモリ43を記憶領域として用いながら、マイコン42が取得したデータをゲーム装置3へ無線送信する無線モジュール44を制御する。
操作部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へ出力する。
以上のように、コントローラ5は、自機に対する操作を表す操作データとして、マーカ座標データ、加速度データ、角速度データ、および操作ボタンデータを送信可能である。また、ゲーム装置3は、上記操作データをゲーム入力として用いてゲーム処理を実行する。したがって、上記コントローラ5を用いることによって、ユーザは、各操作ボタンを押下する従来の一般的なゲーム操作に加えて、コントローラ5自体を動かすゲーム操作を行うことができる。例えば、コントローラ5を任意の姿勢に傾ける操作、コントローラ5によって画面上の任意の位置を指示する操作、および、コントローラ5自体を動かす操作等を行うことが可能となる。
また、本実施形態において、コントローラ5は、ゲーム画像を表示する表示手段を有しないが、例えば電池残量を表す画像等を表示するための表示手段を有していてもよい。
[4.端末装置7の構成]
次に、図8〜図11を参照して、端末装置7の構成について説明する。図8は、端末装置7の外観構成を示す平面図である。図8における(a)図は端末装置7の正面図であり、(b)図は上面図であり、(c)図は右側面図であり、(d)図は下面図である。図9は、端末装置7の背面図である。また、図10は、ユーザが端末装置7を横向きで把持した様子を示す図である。
図8に示されるように、端末装置7は、大略的には横長の長方形の板状形状であるハウジング50を備える。すなわち、端末装置7は、タブレット型の情報処理装置であるということもできる。なお、ハウジング50は全体として板状形状であれば、曲面を有していてもよいし、一部に突起等を有していてもよい。ハウジング50は、ユーザが把持することができる程度の大きさである。したがって、ユーザは、端末装置7を持って動かしたり、端末装置7の配置位置を変更したりすることができる。端末装置7の縦(z軸方向)の長さは、100〜150[mm]が好ましく、本実施形態では、133.5[mm]である。端末装置7の横(x軸方向)の長さは、200〜250[mm]が好ましく、本実施形態では、228.26[mm]である。端末装置7の厚さ(y軸方向の長さ)は、板状の部分で15〜30[mm]程度、最厚部まで含めて30〜50[mm]程度が好ましく、本実施形態では、23.6(最厚部は40.26)[mm]である。また、端末装置7の重量は、400〜600[g]程度であって、本実施形態においては、530[g]である。詳細は後述するが、端末装置7は、上記のような比較的大型の端末装置(操作装置)であっても、ユーザが持ちやすく操作しやすい構成となっている。
端末装置7は、ハウジング50の表面(表側)にLCD51を有する。なお、LCD51の画面の大きさは5インチ以上であることが好ましく、ここでは6.2インチである。本実施形態の端末装置7は、持ちやすく操作しやすい構成によって、大きなLCDを設けても操作がしやすいものとなっている。なお、別の実施形態においては、より小さいLCD51を設け、端末装置7の大きさを比較的小さいものとするようにしてもよい。LCD51は、ハウジング50の表面の中央付近に設けられる。したがって、ユーザは、図10に示すようにLCD51の両側部分のハウジング50を持つことによって、LCD51の画面を見ながら端末装置7を持って動かすことができる。なお、図10ではユーザがLCD51の左右両側の部分のハウジング50を持つことで端末装置7を横持ちで(横に長い向きにして)持つ例を示しているが、端末装置7を縦持ちで(縦に長い向きにして)持つことも可能である。
図8の(a)図に示すように、端末装置7は、操作手段として、LCD51の画面上にタッチパネル52を有する。本実施形態では、タッチパネル52は抵抗膜方式のタッチパネルである。ただし、タッチパネルは抵抗膜方式に限らず、例えば静電容量方式等、任意の方式のタッチパネルを用いることができる。また、タッチパネル52はシングルタッチ方式でもよいし、マルチタッチ方式であってもよい。本実施形態では、タッチパネル52として、LCD51の解像度と同解像度(検出精度)のものを利用する。ただし、必ずしもタッチパネル52の解像度とLCD51の解像度が一致している必要はない。タッチパネル52に対する入力は通常タッチペン60を用いて行われるが、タッチペン60に限らずユーザの指でタッチパネル52に対する入力をすることも可能である。なお、ハウジング50には、タッチパネル52に対する操作を行うために用いられるタッチペン60を収納する収納穴60aが設けられている(図8(b)参照)。なお、ここでは、タッチペン60が落ちないように、収納穴60aはハウジング50の上面に設けられるが、側面や下面に設けられてもよい。このように、端末装置7はタッチパネル52を備えるので、ユーザは、端末装置7を動かしながらタッチパネル52を操作することができる。つまりユーザは、LCD51の画面を動かしつつ、その画面に対して直接(タッチパネル52によって)入力を行うことができる。
図8に示すように、端末装置7は、操作手段(操作部)として、2つのアナログスティック53Aおよび53Bと、複数のボタン(キー)54A〜54Mとを備えている。各アナログスティック53Aおよび53Bは、方向を指示することが可能なデバイスである。各アナログスティック53Aおよび53Bは、ユーザの指で操作される可動部材(スティック部)がハウジング50の表面に対して任意の方向(上下左右および斜め方向の任意の角度)にスライドすることができるように構成されている。すなわち、スライドパッドと呼ばれることもある方向入力デバイスである。なお、各アナログスティック53Aおよび53Bの可動部材は、ハウジング50の表面に対して任意の方向に傾倒する種類のものでもよい。本実施形態では、可動部材がスライドする種類のアナログスティックを用いるので、ユーザは親指を大きく動かさなくても各アナログスティック53Aおよび53Bを操作することができ、ハウジング50をよりしっかりと把持した状態で操作を行うことができる。なお、各アナログスティック53Aおよび53Bとして、可動部材が傾倒する種類のものを用いる場合には、入力の程度(傾きの程度)がユーザにとってわかりやすく、詳細な操作をより容易に行うことができる。
また、左アナログスティック53AはLCD51の画面の左側に、右アナログスティック53BはLCD51の画面の右側にそれぞれ設けられる。したがって、ユーザは、左右いずれの手でもアナログスティックを用いて方向を指示する入力を行うことができる。また、図10に示すように、各アナログスティック53Aおよび53Bは、ユーザが端末装置7の左右部分(LCD51の左右両側の部分)を把持した状態で操作可能な位置に設けられるので、ユーザは、端末装置7を持って動かす場合においても各アナログスティック53Aおよび53Bを容易に操作することができる。
各ボタン54A〜54Lは、所定の入力を行うための操作手段(操作部)であり、押下可能なキーである。以下に示すように、各ボタン54A〜54Lは、ユーザが端末装置7の左右部分を把持した状態で操作可能な位置に設けられる(図10参照)。したがって、ユーザは、端末装置7を持って動かす場合においてもこれらの操作手段を容易に操作することができる。
図8の(a)図に示すように、ハウジング50の表面には、各操作ボタン54A〜54Lのうち、十字ボタン(方向入力ボタン)54Aと、ボタン54B〜54Hおよび54Mとが設けられる。つまり、これらのボタン54A〜54Hおよび54Mは、ユーザの親指で操作可能な位置に配置されている(図10参照)。
十字ボタン54Aは、LCD51の左側であって、左アナログスティック53Aの下側に設けられる。つまり、十字ボタン54Aはユーザの左手で操作可能な位置に配置されている。十字ボタン54Aは、十字の形状を有しており、少なくとも上下左右の方向を指示することが可能なボタンである。
また、ボタン54B〜54Dは、LCD51の下側に設けられる。これら3つのボタン54B〜54Dは、左右両方の手で操作可能な位置に配置されている。また、端末装置7は、端末装置7の電源をオン/オフするための電源ボタン54Mを有している。電源ボタン54Mの操作により、ゲーム装置3の電源を遠隔でオン/オフすることも可能である。電源ボタン54Mは、ボタン54B〜54Dと同様、LCD51の下側に設けられる。電源ボタン54Mは、ボタン54B〜54Dの右側に設けられる。したがって、電源ボタン54Mは、右手で操作可能な(操作しやすい)位置に配置されている。また、4つのボタン54E〜54Hは、LCD51の右側であって、右アナログスティック53Bの下側に設けられる。つまり、4つのボタン54E〜54Hはユーザの右手で操作可能な位置に配置されている。さらに、4つのボタン54E〜54Hは、(4つのボタン54E〜54Hの中心位置に対して)上下左右の位置関係となるように配置されている。したがって、端末装置7は、ユーザに上下左右の方向を指示させるためのボタンとして4つのボタン54E〜54Hを機能させることも可能である。
なお、本実施形態においては、各アナログスティック53Aおよび53Bは、十字ボタン54Aおよび各ボタン54E〜54Hよりも上側に配置される。ここで、各アナログスティック53Aおよび53Bは、十字ボタン54Aおよび各ボタン54E〜54Hよりも厚さ方向(y軸方向)に関して突出している。そのため、仮にアナログスティック53Aと十字ボタン54Aとの配置を逆にした場合には、ユーザが十字ボタン54Aを親指で操作する際にアナログスティック53Aに親指が当たってしまい、操作を誤ってしまうおそれがある。なお、アナログスティック53Bと各ボタン54E〜54Hとの配置を逆にする場合も同様の問題が生じる。これに対して、本実施形態では、各アナログスティック53Aおよび53Bを十字ボタン54Aおよび各ボタン54E〜54Hよりも上側に配置するので、ユーザがアナログスティック53Aおよび53Bを操作する際に十字ボタン54Aおよび各ボタン54E〜54Hに指が当たってしまう可能性は上記の場合に比べて低くなる。このように、本実施形態においては、誤操作の可能性を低減することができ、端末装置7の操作性を向上することができる。ただし、別の実施形態においては、必要に応じてアナログスティック53Aが十字ボタン54Aと逆の配置であってもよいし、アナログスティック53Bが各ボタン54E〜54Hと逆の配置であってもよい。
ここで、本実施形態では、いくつかの操作部(各アナログスティック53Aおよび53B、十字ボタン54A、ならびに、3つのボタン54E〜54G)は、表示部(LCD51)の左右両側において、ハウジング50における上下方向(y軸方向)の中心よりも上側に設けられる。これらの操作部を操作する場合、ユーザは、端末装置7における上下方向の中心よりも上側を主に把持する。ここで、ユーザがハウジング50の下側を把持する場合には、(端末装置7が本実施形態のように比較的大きなサイズである場合には特に)把持される端末装置7が不安定になり、ユーザは端末装置7を持ちにくくなる。これに対して、本実施形態では、上記操作部を操作する場合、ユーザは、端末装置7における上下方向の中心よりも上側を主に把持することになり、また、手のひらでハウジング50を横から支えることができる。したがって、ユーザは、安定した状態でハウジング50を把持することができ、端末装置7が持ちやすくなるので、上記操作部も操作しやすくなる。なお、他の実施形態においては、ハウジング50の中央よりも上側において表示部の左右にそれぞれ少なくとも1つずつ操作部が設けられてもよい。例えば、各アナログスティック53Aおよび53Bのみがハウジング50の中央よりも上側に設けられてもよい。また例えば、十字ボタン54Aが左アナログスティック53Aよりも上側に設けられ、4つのボタン54E〜54Hが右アナログスティック53Bよりも上側に設けられる場合には、十字ボタン54Aおよび4つのボタン54E〜54Hがハウジング50の中央よりも上側に設けられても良い。
また、本実施形態では、ハウジング50の裏側(LCD51が設けられる表面の反対側)には、突起部(庇部59)が設けられる(図8(c)および図9参照)。図8(c)に示すように、庇部59は、略板状のハウジング50の裏面から突起して設けられる、山状の部材である。突起部は、ハウジング50の裏面を把持するユーザの指に掛止可能な高さ(厚さ)を有する。突起部の高さは、10〜25[mm]であることが好ましく、本実施形態では16.66[mm]である。また、突起部の下面は、突起部がユーザの指に掛かりやすいように、ハウジング50の裏面に対して45°以上(より好ましくは60°以上)の傾斜を有することが好ましい。図8(c)に示すように、突起部の下面は、上面よりも傾斜角度が大きくなるように形成されてもよい。図10に示すように、ユーザは、指を庇部59に掛けて(指の上に庇部59を乗せて)把持することによって、端末装置7が比較的大きなサイズであっても、疲れることなく安定した状態で端末装置7を把持することができる。すなわち、庇部59は、指でハウジング50を支えるための支持部材であるということができ、また、指掛部ということもできる。
また、庇部59は、ハウジング50の上下方向に関しては中央よりも上側に設けられる。庇部59は、ハウジング50の表面に設けられる操作部(各アナログスティック53Aおよび53B)の概ね反対側の位置に設けられる。つまり、突起部は、表示部の左右にそれぞれ設けられる操作部の反対側の位置を含む領域に設けられる。したがって、上記操作部を操作する場合、ユーザは、中指あるいは薬指で庇部59を支えるようにして端末装置7を把持することができる(図10参照)。これによって、端末装置7がより持ちやすくなり、上記操作部もより操作しやすくなる。また、本実施形態では、突起部は、(突起した部分が)左右に延びる庇状の形状を有するので、ユーザは、中指あるいは薬指を突起部の下面に沿わせて端末装置7を把持することができ、端末装置7がより持ちやすくなる。なお、庇部59は、(突起した部分が)左右方向に延びるように形成されればよく、図9に示すような水平方向に延びる形状に限られない。他の実施形態においては、庇部59は水平方向から若干傾いた方向に延びていてもよい。例えば、庇部59は、左右両端から中央に向かうにつれて上に(または下に)傾斜するように設けられてもよい。
なお、本実施形態においては、後述する係止穴を庇部59に設けることが理由で、ハウジングの裏面に形成される突起部として、庇状の形状をした庇部59を採用するが、突起部はどのような形状であってもよい。例えば、他の実施形態においては、ハウジング50の裏側において、2つの突起部が左右両側に設けられる(左右方向の中央には突起部が設けられない)構成であってもよい(図29参照)。また、他の実施形態においては、突起部の断面形状(x軸方向に垂直な断面における形状)は、ユーザの指で端末装置7をよりしっかりと支えることができるように(突起部が指によりしっかりと掛かるように)、鈎型(下面が凹んだ形状)であってもよい。
なお、突起部(庇部59)の上下方向に関する幅は、いくらであってもよい。例えば、突起部は、ハウジング50の上辺まで形成されてもよい。すなわち、突起部の上面がハウジング50の上側の側面と同じ位置に形成されてもよい。このとき、ハウジング50は、下側が薄く、上側が厚い2段の構成となる。このように、ハウジング50は、裏面における左右両側に、下方を向く面(突起部の下面)が形成されることが好ましい。これによって、ユーザは、当該面に指を当てることで楽に操作装置を把持することができる。なお、上記「下方を向く面」は、ハウジング50の裏面におけるどの位置に形成されてもよいが、ハウジング50の中央よりも上側に位置することが好ましい。
また、図8の(a)図、(b)図、および(c)図に示すように、第1Lボタン54Iおよび第1Rボタン54Jは、ハウジング50の上側の面における左右の両側にそれぞれ設けられる。本実施形態では、第1Lボタン54Iおよび第1Rボタン54Jは、ハウジング50の斜め上部分(左上部分および右上部分)に設けられる。具体的には、第1Lボタン54Iは、板状のハウジング50における上側の側面の左端に設けられ、左上側の側面から露出している(換言すれば上側および左側の両方の側面から露出している)。また、第1Rボタン54Jは、ハウジング50における上側の側面の右端に設けられ、右上側の側面から露出している(換言すれば上側および右側の両方の側面から露出している)。このように、第1Lボタン54Iは、ユーザの左手人差し指で操作可能な位置に配置され、第1Rボタン54Jは、ユーザの右手人差し指で操作可能な位置に配置される(図10参照)。なお、他の実施形態においては、ハウジング50の上側の面における左右にそれぞれ設けられる操作部は、左右の端部に設けられる必要はなく、端部以外の位置に設けられてもよい。また、ハウジング50の左右の側面に操作部がそれぞれ設けられてもよい。
また、図8の(c)図および図9に示すように、第2Lボタン54Kおよび第2Rボタン54Lは、上記突起部(庇部59)に配置される。第2Lボタン54Kは、庇部59の左端付近に設けられる。第2Rボタン54Lは、庇部59の右端付近に設けられる。つまり、第2Lボタン54Kは、ハウジング50の裏面の左側(表面側から見たときの左側)のやや上方に設けられ、第2Rボタン54Lは、ハウジング50の裏面の右側(表面側から見たときの右側)のやや上方に設けられる。換言すれば、第2Lボタン54Kは、表面に設けられる左アナログスティック53Aの(概ね)反対側の位置に設けられ、第2Rボタン54Lは、表面に設けられる右アナログスティック53Bの(概ね)反対側の位置に設けられる。このように、第2Lボタン54Kは、ユーザの左手中指(または人差し指)で操作可能な位置に配置され、第2Rボタン54Lは、ユーザの右手中指(または人差し指)で操作可能な位置に配置される(図10参照)。また、第2Lボタン54Kおよび第2Rボタン54Lは、図8の(c)図に示すように、上記庇部59の上面に設けられる。そのため、第2Lボタン54Kおよび第2Rボタン54Lは、上方(斜め上方)を向くボタン面を有する。ユーザが端末装置7を把持した場合には中指または人差し指は上下方向に動くと考えられるので、ボタン面を上方に向けることで、ユーザは第2Lボタン54Kおよび第2Rボタン54Lを押下しやすくなる。
上記のように、本実施形態においては、ハウジング50の中央よりも上側において表示部(LCD51)の左右に操作部(アナログスティック53Aおよび53B)がそれぞれ設けられ、さらに、ハウジング50の裏側において当該操作部の反対側の位置に別の操作部(第2Lボタン54Kおよび第2Rボタン54L)がそれぞれ設けられる。これによれば、上記操作部と別の操作部とがハウジング50の表側と裏側との互いに対向する位置に配置されるので、ユーザは、これらの操作部を操作する際にハウジング50を表側と裏側から挟むように把持することができる。また、これらの操作部を操作する際にユーザは、ハウジング50における上下方向の中心よりも上側を把持するので、端末装置7を上側で把持できるとともに、手のひらで端末装置7を支えることができる(図10参照)。以上によって、ユーザは、少なくとも4つの操作部を操作することができる状態で、ハウジング50を安定的に把持することができ、ユーザが容易に把持することが可能で、かつ操作性の良い操作装置(端末装置7)を提供することができる。
以上のように、本実施形態においては、突起部(庇部59)の下面に指を当てた状態で端末装置7を把持することによって、ユーザは楽に端末装置7を把持することができる。また、突起部の上面に第2Lボタン54Kおよび第2Rボタン54Lが設けられるので、ユーザは上記の状態でこれらのボタンを容易に操作することができる。ユーザは、例えば次のような持ち方で端末装置7を容易に把持することができる。
すなわち、ユーザは、図10に示すように、薬指を庇部59の下面(図10に示す一点鎖線)に当てて(薬指で庇部59を支えるように)端末装置7を把持することも可能である。このとき、ユーザは、4つのボタン(第1Lボタン54I、第1Rボタン54J、第2Lボタン54K、および第2Rボタン54L)を人差し指および中指で操作することができる。例えば、要求されるゲーム操作が、使用するボタンが多く、比較的複雑である場合には、図10に示すように把持することで、多くのボタンを容易に操作することができる。なお、各アナログスティック53Aおよび53Bは十字ボタン54Aおよびボタン54E〜54Hの上側に設けられるので、比較的複雑な操作が要求される場合にユーザは親指でアナログスティック53Aおよび53Bを操作することができ、好都合である。また、図10においては、ユーザは、ハウジング50の表面に親指を、ハウジング50の上面に人差し指を、ハウジング50の裏面における庇部59の上面に中指を、庇部59の下面に薬指を、ハウジング50の裏面に小指を当てて端末装置7を把持する。このように、ユーザは、ハウジング50を四方から包み込むようにして端末装置7をしっかりと把持することができる。
また、ユーザは、中指を庇部59の下面に当てて端末装置7を把持することも可能である。このとき、ユーザは、2つのボタン(第2Lボタン54Kおよび第2Rボタン54L)を人差し指で容易に操作することができる。例えば、要求されるゲーム操作が、使用するボタンが少なく、比較的単純である場合には、中指を庇部59の下面に当てて端末装置7を把持してもよい。このとき、ユーザは、2本の指(薬指および小指)でハウジング50の下側を把持することができるので、しっかりと端末装置7を把持することができる。
なお、本実施形態においては、庇部59の下面が、各アナログスティック53Aおよび53Bと、十字ボタン54Aおよび4つのボタン54E〜54Hとの間に位置するように(各アナログスティック53Aおよび53Bよりも下方で、かつ、十字ボタン54Aおよび4つのボタン54E〜54Hよりも上方に位置するように)設けられる。したがって、薬指を庇部59に当てて端末装置7を把持する場合(図10)には、各アナログスティック53Aおよび53Bを親指で操作しやすくなり、中指を庇部59に当てて端末装置7を把持する場合には、十字ボタン54Aおよび4つのボタン54E〜54Hを親指で操作しやすくなっている。つまり、上記2種類の場合のいずれにおいても、ユーザは、端末装置7をしっかりと把持した状態で方向入力操作を行うことができる。
また、上述のように、ユーザは端末装置7を縦持ちで把持することも可能である。すなわち、ユーザは端末装置7の上辺または下辺を一方の手で把持することで端末装置7を縦向きで把持することが可能である。このように、ユーザは端末装置7を片手で把持することが可能であるので、例えば、一方の手で端末装置7を把持しながら他方の手でタッチパネル52に対する入力を行うといった操作を行うことも可能である。
また、端末装置7の上辺を把持する場合、ユーザは親指以外の指を庇部59の下面に当てることで、端末装置7をしっかりと把持することができる。特に、本実施形態においては、庇部59が左右に延びて形成されているので、ユーザは端末装置7の上辺におけるどこの位置で把持しても、親指以外の指を庇部59に当てることができ、端末装置7をしっかりと把持することができる。すなわち、端末装置7を縦持ちで使う場合には、庇部59は取っ手として使うことができる。一方、端末装置7の下辺を片手で把持する場合、ユーザは、その手でボタン54B〜54Dを操作することができる。したがって、例えば片手でタッチパネル52に対する入力を行いつつ、端末装置7を把持する手でボタン54B〜54Dに対する操作を行うことができ、より多くの操作を行うことができる。
なお、本実施形態における端末装置7に関しては、突起部(庇部59)が裏面に設けられるので、LCD51の画面(ハウジング50の表面)が上を向いた状態で端末装置7を載置させる場合、画面がやや傾いた状態となる。これによって、端末装置7を載置した状態において画面がより見やすくなる。また、端末装置7を載置した状態においてタッチパネル52に対する入力操作が行いやすくなる。また、他の実施形態においては、上記庇部59と同程度の高さを有する追加の突起部がハウジング50の裏面に形成されてもよい。これによれば、LCD51の画面が上を向いた状態では、各突起部が床面に接することで、画面が水平になるように端末装置7を載置することができる。また、追加の突起部を着脱可能な(または折り畳み可能な)ものにしてもよい。これによれば、画面がやや傾いた状態と、画面が水平になる状態との両方で端末装置を載置することができる。すなわち、端末装置7を置いて使う場合には、庇部59は、脚部として使うことができる。
各ボタン54A〜54Lには、ゲームプログラムに応じた機能が適宜割り当てられる。例えば、十字ボタン54Aおよびボタン54E〜54Hは方向指示操作や選択操作等に用いられてもよいし、各ボタン54B〜54Eは決定操作やキャンセル操作等に用いられてもよい。また、端末装置7は、LCD51の画面表示をオン/オフするためのボタンや、ゲーム装置3との接続設定(ペアリング)を行うためのボタンを有していてもよい。
図8の(a)図に示すように、端末装置7は、マーカ55Aおよびマーカ55Bからなるマーカ部55をハウジング50の表面に備えている。マーカ部55は、LCD51の上側に設けられる。各マーカ55Aおよびマーカ55Bは、マーカ装置6の各マーカ6Rおよび6Lと同様、1以上の赤外LEDで構成される。マーカ55Aおよび55Bを構成する赤外LEDは、赤外光を透過する窓部の内側に配置される。マーカ部55は、上述のマーカ装置6と同様、コントローラ5の動き等をゲーム装置3が算出するために用いられる。また、ゲーム装置3はマーカ部55が備える各赤外LEDの点灯を制御することが可能である。
端末装置7は、撮像手段であるカメラ56を備えている。カメラ56は、所定の解像度を有する撮像素子(例えば、CCDイメージセンサやCMOSイメージセンサ等)と、レンズとを含む。図8に示すように、本実施形態では、カメラ56はハウジング50の表面に設けられる。したがって、カメラ56は、端末装置7を持っているユーザの顔を撮像することができ、例えばLCD51を見ながらゲームを行っている時のユーザを撮像することができる。本実施形態においては、カメラ56は、2つのマーカ55Aおよび55Bの間に配置される。
なお、端末装置7は、音声入力手段であるマイク79を備えている。ハウジング50の表面には、マイクロフォン用孔50cが設けられる。マイク79はこのマイクロフォン用孔50cの奥のハウジング50内部に設けられる。マイク79は、ユーザの音声等、端末装置7の周囲の音を検出する。
端末装置7は、音声出力手段であるスピーカ77を備えている。図8の(d)図に示すように、ハウジング50の表面の下側にはスピーカ孔57が設けられる。スピーカ77の出力音はこのスピーカ孔57から出力される。本実施形態では、端末装置7は2つのスピーカを備えており、左スピーカおよび右スピーカのそれぞれの位置にスピーカ孔57が設けられる。なお、端末装置7は、スピーカ77の音量を調節するためのつまみ64を備える。また、端末装置7は、イヤホン等の音声出力部を接続するための音声出力端子62を備える。ここでは、ハウジングの下側の側面に付加装置が接続されることを考慮して、上記音声出力端子62およびつまみ64はハウジング50の上画の側面に設けられるが、左右の側面や下側の側面に設けられてもよい。
また、ハウジング50には、赤外線通信モジュール82からの赤外線信号を端末装置7の外部に出射するための窓63が設けられる。ここでは、LCD51の両側を把持した場合にユーザの前方へ赤外線信号が発射されるように、窓63はハウジング50の上側の側面に設けられる。ただし、他の実施形態においては、窓63は、例えばハウジング50の裏面等、どの位置に設けられてもよい。
また、端末装置7は、他の装置を端末装置7に接続するための拡張コネクタ58を備えている。拡張コネクタ58は、端末装置7に接続される他の装置との間でデータ(情報)を送受信するための通信端子である。本実施形態においては、図8の(d)図に示すように、拡張コネクタ58は、ハウジング50の下側側面に設けられる。なお、拡張コネクタ58に接続される他の付加装置はどのようなものであってもよく、例えば、特定のゲームに用いるコントローラ(銃型のコントローラ等)やキーボード等の入力装置であってもよい。付加装置を接続する必要がなければ、拡張コネクタ58は設けられていなくともよい。拡張コネクタ58には、付加装置に電力を供給する端子や、充電のための端子が含まれていてもよい。
また、端末装置7は、拡張コネクタ58とは別に、付加装置から電力を取得するための充電端子66を有する。図示しない充電スタンドに充電端子66が接続された場合、充電スタンドから端末装置7へ電力が供給される。本実施形態では、充電端子66はハウジング50の下側側面に設けられる。したがって、端末装置7と付加装置とが接続される際には、拡張コネクタ58を介して情報を送受信することに加えて、一方から他方への電力供給を行うことも可能である。このように、拡張コネクタ58の周囲(左右両側)に充電端子66を設けることによって、端末装置7と付加装置とが接続される際に、情報の送受信とともに、電力供給を行うことも可能である。また、端末装置7は充電コネクタを有し、ハウジング50は充電コネクタを保護するためのカバー部61を有する。充電コネクタは、後述する充電器86に接続可能であり、充電器に充電コネクタが接続された場合、充電器86から端末装置7へ電力が供給される。本実施形態では、ハウジングの下側の側面に付加装置が接続されることを考慮して、充電コネクタ(カバー部61)はハウジング50の上画の側面に設けられるが、左右の側面や下側の側面に設けられてもよい。
図8(d)および図9に示すように、突起部(庇部59)の下面には、付加装置が有する爪部が係止可能な係止穴59aおよび59bが設けられる。係止穴59aおよび59bは、端末装置7に他の付加装置を接続する際に用いられる。すなわち、付加装置は係止穴59aおよび59bに係止可能な爪部を有し、端末装置7に付加装置を接続する場合には、爪部が係止穴59aおよび59bに係止することによって端末装置7と付加装置とが固定される。また、係止穴59aおよび59bの内部に、さらにネジ穴を設けてもよく、付加装置をネジで強固に固定するようにしてもよい。なお、ここでは、端末装置7の裏面に設けられる突起部は、庇状の形状を有する庇部59である。すなわち、庇部59は左右方向に延びて設けられる。図9に示すように、係止穴59aおよび59bは、庇部59の下面の(左右方向に関して)中央付近に設けられる。なお、庇部59の下面に設けられる係止穴59aおよび59bの個数はいくつであってもよいが、1つである場合には庇部59の中央に設けられることが好ましく、複数である場合には左右対称に配置されることが好ましい。これによれば、左右のバランスを均等に保って付加装置を安定的に接続することができる。また、係止穴が中央付近に設けられる場合には、左右の両端に設けられる場合に比べて、付加装置のサイズを小さくすることができる。以上のように、庇部59は、付加装置の係止部材として使うことができる。
また、本実施形態においては、図8(d)に示すように、ハウジング50の下面に係止穴50aおよび50bが設けられる。したがって、端末装置7に付加装置を接続する場合には、4つの爪部が4つの各係止穴にそれぞれ係止することによって端末装置7と付加装置とが固定される。これによって、付加装置を端末装置7により強固に接続することができる。なお、係止穴50aおよび50bの内部にもネジ穴を設け、付加装置をネジ止めするようにしてもよい。ネジ止めの位置は、どこであってもよいが、例えば、ハウジング50の背面に当接する付加装置の支持部と、庇部59とがネジ止めされてもよい。また、他の実施形態においては、ハウジングに設けられる係止穴は、どのような配置であってもよい。
また、端末装置7は、ハウジング50に対して着脱可能な電池蓋67を有している。電池蓋67の内側には電池(図11に示す電池85)が配置される。本実施形態においては、電池蓋67はハウジング50の裏側に設けられ、突起部(庇部59)の下側に設けられる。
また、端末装置7のハウジング50には、ストラップの紐を結びつけるための孔65aおよび65bが設けられる。図8(d)に示すように、本実施形態においては、孔65aおよび65bはハウジング50の下面に設けられる。また、本実施形態においては、2つの孔65aおよび65bがハウジング50の左右両側にそれぞれ1つずつ設けられる。すなわち、孔65aがハウジング50の下面の中央より左側に設けられ、孔65bがハウジング50の下面の中央より右側に設けられる。ユーザは、孔65aおよび65bのいずれかにストラップを結びつけ、ストラップを自身の手首に結びつけてもよい。これによって、万一ユーザが端末装置7を落としたり、端末装置7が手から離れたりした場合でも、端末装置7が落下したり他の物に衝突したりすることを防止することができる。なお、本実施形態においては、左右両側にそれぞれ孔が設けられるので、ユーザは、どちらの手にもストラップを結びつけることができ、便利である。
なお、図8〜図11に示した端末装置7に関して、各操作ボタンやハウジング50の形状や、各構成要素の数および設置位置等は単なる一例に過ぎず、他の形状、数、および設置位置であってもよい。
次に、図11を参照して、端末装置7の内部構成について説明する。図11は、端末装置7の内部構成を示すブロック図である。図11に示すように、端末装置7は、図8に示した構成の他、タッチパネルコントローラ71、磁気センサ72、加速度センサ73、ジャイロセンサ74、ユーザインタフェースコントローラ(UIコントローラ)75、コーデックLSI76、スピーカ77、サウンドIC78、マイク79、無線モジュール80、アンテナ81、赤外線通信モジュール82、フラッシュメモリ83、電源IC84、および電池85を備える。これらの電子部品は、電子回路基板上に実装されてハウジング50内に収納される。
UIコントローラ75は、各種の入出力部に対するデータの入出力を制御するための回路である。UIコントローラ75は、タッチパネルコントローラ71、アナログスティック53(アナログスティック53Aおよび53B)、操作ボタン54(各操作ボタン54A〜54L)、マーカ部55、磁気センサ72、加速度センサ73、およびジャイロセンサ74に接続される。また、UIコントローラ75は、コーデックLSI76と拡張コネクタ58に接続される。また、UIコントローラ75には電源IC84が接続され、UIコントローラ75を介して各部に電力が供給される。電源IC84には内蔵の電池85が接続され、電力が供給される。また、電源IC84には、外部電源から電力を取得可能な充電器86またはケーブルを充電コネクタを介して接続することが可能であり、端末装置7は、当該充電器86またはケーブルを用いて外部電源からの電力供給と充電を行うことができる。なお、端末装置7は、図示しない充電機能を有するクレイドルに端末装置7を装着することで充電を行うことも可能である。すなわち、図示しないが、電源IC84には、外部電源から電力を取得可能なクレイドルを充電端子66を介して接続することが可能であり、端末装置7は、クレイドルを用いて外部電源からの電力供給と充電を行うことができる。
タッチパネルコントローラ71は、タッチパネル52に接続され、タッチパネル52の制御を行う回路である。タッチパネルコントローラ71は、タッチパネル52からの信号に基づいて所定の形式の入力位置データを生成してUIコントローラ75へ出力する。入力位置データは、タッチパネル52の入力面において入力が行われた位置の座標を表す。なお、タッチパネルコントローラ71は、タッチパネル52からの信号の読み込み、および、入力位置データの生成を所定時間に1回の割合で行う。また、UIコントローラ75からタッチパネルコントローラ71へは、タッチパネル52に対する各種の制御指示が出力される。
アナログスティック53は、ユーザの指で操作されるスティック部がスライドした(または傾倒した)方向および量を表すスティックデータをUIコントローラ75へ出力する。また、操作ボタン54は、各操作ボタン54A〜54Lに対する入力状況(押下されたか否か)を表す操作ボタンデータをUIコントローラ75へ出力する。
磁気センサ72は、磁界の大きさおよび方向を検知することで方位を検出する。検出された方位を示す方位データは、UIコントローラ75へ出力される。また、UIコントローラ75から磁気センサ72へは、磁気センサ72に対する制御指示が出力される。磁気センサ72に関しては、MI(磁気インピーダンス)素子、フラックスゲートセンサ、ホール素子、GMR(巨大磁気抵抗)素子、TMR(トンネル磁気抵抗)素子、あるいはAMR(異方性磁気抵抗)素子等を用いたセンサがあるが、方位を検出することができればどのようなものが用いられてもよい。なお、厳密には、地磁気以外に磁界が発生している場所においては、得られた方位データは方位を示さないことになるが、そのような場合であっても、端末装置7が動いた場合には方位データが変化するため、端末装置7の姿勢の変化を算出することができる。
加速度センサ73は、ハウジング50の内部に設けられ、3軸(図8の(a)図に示すxyz軸)方向に沿った直線加速度の大きさを検出する。具体的には、加速度センサ73は、ハウジング50の長辺方向をx軸、ハウジング50の表面に対して垂直な方向をy軸、ハウジング50の短辺方向をz軸として、各軸の直線加速度の大きさを検出する。検出された加速度を表す加速度データはUIコントローラ75へ出力される。また、UIコントローラ75から加速度センサ73へは、加速度センサ73に対する制御指示が出力される。加速度センサ73は、本実施形態では例えば静電容量式のMEMS型加速度センサであるとするが、他の実施形態においては他の方式の加速度センサを用いるようにしてもよい。また、加速度センサ73は1軸または2軸方向を検出する加速度センサであってもよい。
ジャイロセンサ74は、ハウジング50の内部に設けられ、上記x軸、y軸およびz軸の3軸周りの角速度を検出する。検出された角速度を表す角速度データは、UIコントローラ75へ出力される。また、UIコントローラ75からジャイロセンサ74へは、ジャイロセンサ74に対する制御指示が出力される。なお、3軸の角速度を検出するために用いられるジャイロセンサの数および組み合わせはどのようなものであってもよく、ジャイロセンサ74はジャイロセンサ48と同様、2軸ジャイロセンサと1軸ジャイロセンサとで構成されてもよい。また、ジャイロセンサ74は1軸または2軸方向を検出するジャイロセンサであってもよい。
UIコントローラ75は、上記の各構成要素から受け取った入力位置データ、スティックデータ、操作ボタンデータ、方位データ、加速度データ、および角速度データを含む操作データをコーデックLSI76へ出力する。なお、拡張コネクタ58を介して端末装置7に他の装置が接続される場合には、当該他の装置に対する操作を表すデータが上記操作データにさらに含まれていてもよい。
コーデックLSI76は、ゲーム装置3へ送信するデータに対する圧縮処理、および、ゲーム装置3から送信されたデータに対する伸張処理を行う回路である。コーデックLSI76には、LCD51、カメラ56、サウンドIC78、無線モジュール80、フラッシュメモリ83、および赤外線通信モジュール82が接続される。また、コーデックLSI76はCPU87と内部メモリ88を含む。端末装置7はゲーム処理自体を行なわない構成であるが、端末装置7の管理や通信のための最小限のプログラムを実行する必要がある。電源投入時にフラッシュメモリ83に格納されたプログラムを内部メモリ88に読み出してCPU87が実行することで、端末装置7が起動する。また、内部メモリ88の一部の領域はLCD51のためのVRAMとして使用される。
カメラ56は、ゲーム装置3からの指示に従って画像を撮像し、撮像した画像データをコーデックLSI76へ出力する。また、コーデックLSI76からカメラ56へは、画像の撮像指示等、カメラ56に対する制御指示が出力される。なお、カメラ56は動画の撮影も可能である。すなわち、カメラ56は、繰り返し撮像を行って画像データをコーデックLSI76へ繰り返し出力することも可能である。
サウンドIC78は、スピーカ77およびマイク79に接続され、スピーカ77およびマイク79への音声データの入出力を制御する回路である。すなわち、コーデックLSI76から音声データを受け取った場合、サウンドIC78は当該音声データに対してD/A変換を行って得られる音声信号をスピーカ77へ出力し、スピーカ77から音を出力させる。また、マイク79は、端末装置7に伝わる音(ユーザの音声等)を検知して、当該音を示す音声信号をサウンドIC78へ出力する。サウンドIC78は、マイク79からの音声信号に対してA/D変換を行い、所定の形式の音声データをコーデックLSI76へ出力する。
赤外線通信モジュール82は、赤外線信号を発光し、他の装置との間で赤外線通信を行う。ここでは、赤外線通信モジュール82は、例えばIrDAの規格に従った赤外線通信を行う機能と、テレビ2を制御するための赤外線信号(制御信号)を出力する機能とを備える。
コーデックLSI76は、カメラ56からの画像データ、マイク79からの音声データ、および、UIコントローラ75からの操作データを、端末操作データとして無線モジュール80を介してゲーム装置3へ送信する。本実施形態では、コーデックLSI76は、画像データおよび音声データに対して、コーデックLSI27と同様の圧縮処理を行う。上記端末操作データ、ならびに、圧縮された画像データおよび音声データは、送信データとして無線モジュール80へ出力される。無線モジュール80にはアンテナ81が接続されており、無線モジュール80はアンテナ81を介してゲーム装置3へ上記送信データを送信する。無線モジュール80は、ゲーム装置3の端末通信モジュール28と同様の機能を有している。すなわち、無線モジュール80は、例えばIEEE802.11nの規格に準拠した方式により、無線LANに接続する機能を有する。送信されるデータは必要に応じて暗号化されていてもよいし、されていなくともよい。
以上のように、端末装置7からゲーム装置3へ送信される送信データには、操作データ(端末操作データ)、画像データ、および音声データが含まれる。なお、拡張コネクタ58を介して端末装置7に他の装置が接続される場合には、当該他の装置から受け取ったデータが上記送信データにさらに含まれていてもよい。コーデックLSI76は、赤外線通信モジュール82による赤外線通信によって受信したデータを、必要に応じて上記送信データに含めてゲーム装置3へ送信してもよい。
また、上述のように、ゲーム装置3から端末装置7へは、圧縮された画像データおよび音声データが送信される。これらのデータはアンテナ81(受信部)で受信され、無線モジュール80を介してコーデックLSI76に送られる。コーデックLSI76は、受信された画像データおよび音声データを伸張する。伸張された画像データはLCD51へ出力され、画像がLCD51に表示される。つまり、コーデックLSI76(CPU87)は、受信された画像データを表示部に表示させる。また、伸張された音声データはサウンドIC78へ出力され、サウンドIC78はスピーカ77から音を出力させる。
また、ゲーム装置3から受信されるデータに制御データが含まれる場合、コーデックLSI76およびUIコントローラ75は、制御データに従った制御指示を各部に行う。上述のように、制御データは、端末装置7が備える各構成要素(本実施形態では、カメラ56、タッチパネルコントローラ71、マーカ部55、各センサ62〜64、および赤外線通信モジュール82)に対する制御指示を表すデータである。本実施形態では、制御データが表す制御指示としては、上記各構成要素を動作させたり、動作を休止(停止)させたりする指示が考えられる。すなわち、ゲームで使用しない構成要素については電力消費を抑えるために休止させてもよく、その場合、端末装置7からゲーム装置3へ送信される送信データには、休止した構成要素からのデータが含まれないようにする。なお、マーカ部55は赤外LEDであるので、制御は単に電力の供給のON/OFFでよい。
また、ゲーム装置3は、上記赤外線通信モジュール82の出力を制御することによって、テレビ2の動作を制御することが可能である。すなわち、ゲーム装置3は、テレビ2を制御するための制御指令に対応する赤外線信号を赤外線通信モジュール82に出力させるための指示(上記制御データ)を端末装置7へ出力する。この指示に応じて、コーデックLSI76は、上記制御指令に対応する赤外線信号を赤外線通信モジュール82に出力させる。ここで、テレビ2は赤外線信号を受光可能な赤外線受光部を備えている。赤外線通信モジュール82から出力された赤外線信号が赤外線受光部によって受光されることで、テレビ2は当該赤外線信号に応じた動作を行う。なお、ゲーム装置3からの上記指示は、赤外線信号のパターンを示すものであってもよいし、端末装置7が赤外線信号のパターンを記憶している場合には、当該パターンを示す指示であってもよい。
以上のように、端末装置7は、タッチパネル52、アナログスティック53、および操作ボタン54といった操作手段を備えるが、他の実施形態においては、これらの操作手段に代えて、または、これらの操作手段とともに、他の操作手段を備える構成であってもよい。
また、端末装置7は、端末装置7の動き(位置や姿勢、あるいは、位置や姿勢の変化を含む)を算出するためのセンサとして、磁気センサ72、加速度センサ73、およびジャイロセンサ74を備えるが、他の実施形態においては、これらのセンサのうち1つまたは2つのみを備える構成であってもよい。また、他の実施形態においては、これらのセンサに代えて、または、これらのセンサとともに、他のセンサを備える構成であってもよい。
また、端末装置7は、カメラ56およびマイク79を備える構成であるが、他の実施形態においては、カメラ56およびマイク79を備えていなくてもよく、また、いずれか一方のみを備えていてもよい。
また、端末装置7は、端末装置7とコントローラ5との位置関係(コントローラ5から見た端末装置7の位置および/または姿勢等)を算出するための構成としてマーカ部55を備える構成であるが、他の実施形態ではマーカ部55を備えていない構成としてもよい。また、他の実施形態では、端末装置7は、上記位置関係を算出するための構成として他の手段を備えていてもよい。例えば、他の実施形態においては、コントローラ5がマーカ部を備え、端末装置7が撮像素子を備える構成としてもよい。さらにこの場合、マーカ装置6は赤外LEDに代えて、撮像素子を備える構成としてもよい。
[5.3次元空間における位置算出方法]
次に、本実施形態において行われる、3次元の仮想空間における位置の算出方法について説明する。本実施形態においては、ゲームシステム1は、操作装置である端末装置7に対する操作に基づいて3次元の仮想空間内の位置を算出する。なお、ゲームシステム1はコントローラ5を含まない構成であってもよい。ゲームシステム1は、端末装置7の姿勢と、端末装置7に設けられた所定の入力面(タッチパネル52)に対する入力位置とに基づいて仮想空間内の位置を算出する。これによれば、ユーザ(プレイヤ)は、端末装置7の姿勢を変化させる操作と、端末装置7の入力面に対する入力操作とによって、3次元空間における位置を容易に指定することができる。以下、位置算出方法の概要を説明する。
図12は、本実施形態における位置算出方法の説明図である。また、図13は、図12に示す状態から端末装置7の姿勢を変化させた様子を示す図である。図12および図13に示すように、本実施形態においては、操作装置として、可搬型の端末装置7が用いられる。詳細は後述するが、ゲームシステム1は端末装置7の姿勢を算出(推測)することが可能である。また、端末装置7は、所定の入力面に対して位置を入力可能な入力装置としてタッチパネル52を備える。したがって、端末装置7に対してユーザは、姿勢を変化させる操作と、端末装置7の入力面に対する入力操作とを行うことが可能である。
図12および図13において、仮想空間には、面Sが配置される。この面S(面Sの位置および/または姿勢)は、図12および図13に示すように、端末装置7の姿勢に応じて決められる。つまり、端末装置7の姿勢を変化させる操作によって、面Sの位置および/または姿勢が変化する。端末装置7の姿勢に基づく面Sの決定方法はどのような方法であってもよいが、本実施形態においては、端末装置7の姿勢に応じて(少なくとも)面Sの姿勢が変化するように面Sが設定される。
また、図12および図13に示すように、タッチパネル52の入力面に対する入力(タッチ入力)が行われた場合、入力位置Pに基づいて上記面S上の位置Qが算出される。以下では、この位置Qを「指定位置」と呼ぶ。入力位置Pに基づく指定位置Qの算出方法はどのような方法であってもよいが、例えば、入力面と面Sとを対応させ、入力位置Pに対応する面S上の位置が指定位置Qとして算出されてもよい。
以上のように、ゲームシステム1は、仮想空間内の位置として、仮想空間内において端末装置7の姿勢に応じて決められる面S上の位置を入力位置に基づいて算出する。ここで、図12に示す状態においては、ユーザは、タッチ入力によって3次元仮想空間における面S上の領域を指定することができる。一方、図13に示す状態においては、面Sの姿勢が図12とは異なるので、ユーザは、タッチ入力によって、図12に示す面Sの領域とは異なる領域を指定することができる。このように、本実施形態においては、ユーザは、端末装置7の姿勢を変化させる操作によって面Sの姿勢を変化させるとともに、タッチ入力によって面S上の位置を指定することによって、3次元空間における位置を指定することができる。さらに、本実施形態においては、端末装置7の姿勢によって面Sの姿勢が変化し、入力面上における入力位置によって面S上の位置が変化する。これによって、ユーザは、直感的な操作によって面Sの姿勢および入力位置を指定することができ、3次元空間を容易に指定することができる。
さらに、詳細は後述するが、本実施形態においては、端末装置7の表示部(LCD51)には、タッチパネル52に対する入力位置と、当該入力位置に基づいて算出される面S上の指定位置Qとが画面上において一致するように、指定位置が算出される(後述するステップS16,S25およびS26,S64,ならびにS86)。つまり、ユーザは、表示部の画面上の位置を指定(タッチ)することで、その位置に対応する仮想空間内の位置を指定することができる。これによって、ユーザは、より直感的で分かりやすい操作によって3次元空間における位置を指定することができる。
なお、本実施形態においては、ゲームシステム1(ゲーム装置3)は、上記のように算出される指定位置を入力として所定の処理(ゲーム処理)を実行する。この所定の処理はどのような処理であってもよく、例えば、指定位置はゲーム入力としてどのように用いられてもよい。以下、指定位置を用いたゲーム処理の例として、第1〜第4のゲーム例について説明する。
[6.第1のゲーム例]
以下、図14〜図19を参照して、本実施形態のゲームシステム1において実行される第1のゲーム例について説明する。第1のゲーム例では、プレイヤ(ユーザ)は、3次元の仮想空間(ゲーム空間)に配置された鍵盤に対する入力を端末装置7によって行う。すなわち、プレイヤが端末装置7を用いて仮想空間における鍵盤の位置を指定すると、指定された鍵盤に応じた音が出力される。なお、本ゲーム例においては、端末装置7が操作装置として用いられる。そのため、コントローラ5は用いられなくてもよく、ゲームシステム1はコントローラ5を含まない構成であってもよい。
図14は、第1のゲーム例においてゲーム操作が行われる場合におけるテレビ2および端末装置7を示す図である。図14に示すように、テレビ2には、鍵盤オブジェクト91および端末オブジェクト92を含む仮想空間の画像が表示される。また、端末装置7(LCD51)には、鍵盤オブジェクト91の一部が表示される。本ゲーム例においては、鍵盤オブジェクト91の各鍵盤は円弧状に配置される。また、テレビ2には円弧状の鍵盤オブジェクト91を、円弧の内側(円弧の中心が位置する側)から見た画像が表示される。これによって、ユーザは、円弧状の鍵盤オブジェクト91の中心に立っている感覚で操作を行うことができる。また、鍵盤毎に異なる音程の音が対応付けられており、鍵盤が指定された場合、指定された鍵盤に対応する音が出力される。
また、端末オブジェクト92は、端末装置7の姿勢に応じて制御される。本ゲーム例においては、端末オブジェクト92は、端末装置7(端末オブジェクト92)の画面と垂直な軸(図8に示すy軸)回りの回転に関して、端末装置7の姿勢と端末オブジェクト92の姿勢とが一致するように制御される。また、端末オブジェクト92は、端末装置7の姿勢に応じて、円弧状に配置される鍵盤オブジェクト91の上方を回転しながら移動するように制御される(図14に示す矢印参照)。したがって、プレイヤは、端末装置7を左右に傾ける操作(図14に示す矢印参照)によって、端末オブジェクト92を左右に回転しながら移動させることができる。なお、本ゲーム例では、テレビ2に表示される端末オブジェクト92の画面93にも端末用画像と同様の画像が描画される(図14参照)が、画面93には何も表示されなくてもよい。
なお、上記のように本ゲーム例においては、鍵盤オブジェクト91の各鍵盤を円弧状に配置し、端末装置7の回転に応じて端末オブジェクト92を円弧状の軌跡で移動させる。これによって、端末装置7の動きと端末オブジェクト92の動きとを対応させることができる。また、各鍵盤の円弧状の配置と端末オブジェクト92の円弧状の移動軌跡とから、プレイヤは、特別な説明が無くても端末装置7の操作方法を把握(推測)することができる。そのため、本ゲーム例においては、端末装置7の操作をプレイヤにとってより直感的で分かりやすいものにすることができる。
図15は、仮想空間において鍵盤オブジェクト91を上方から見た図である。図15に示すように、本ゲーム例においては、面94は、鍵盤オブジェクト91の面上に設定される。なお、図15においては面94を点線で示しているが、本ゲーム例においては、面94は実際には表示装置(テレビ2および端末装置7)には表示されない。つまり、面94は必ずしも表示される必要はなく、仮想空間にオブジェクトとして配置されなくてもよいし、透明なオブジェクトとして扱われてもよい。
面94は、端末オブジェクト92の位置および向きに基づいて設定される。すなわち、面94の位置は、端末オブジェクト92の下方(真下)の位置に設定され、面94の姿勢は、面94に垂直な軸回りの回転方向の姿勢に関して、端末オブジェクト92の姿勢と一致する姿勢に設定される。したがって、端末オブジェクト92が鍵盤オブジェクト91の上方を円弧状の軌跡で移動することに応じて、面94は鍵盤オブジェクト91の一部を含むように鍵盤オブジェクト91上を回転しながら移動する(図15に示す矢印参照)。
以上より、本ゲーム例では、端末装置7の姿勢に応じて端末オブジェクト92の位置および姿勢が決定され、端末オブジェクト92の位置および姿勢に応じて面94の位置および姿勢が決定される。つまり、端末装置7の姿勢に応じて面94の位置および姿勢が決定される。したがって、端末装置7を左右に傾ける操作によって、面94が鍵盤オブジェクト91上を左右に回転しながら移動する(図15に示す矢印参照)ことになる。
図16は、端末装置7に表示される画像の一例を示す図である。図16に示すように、端末装置7には、鍵盤オブジェクト91の一部を表す画像が表示される。具体的には、鍵盤オブジェクト91のうちの、面94内の領域が端末装置7に表示される。したがって、鍵盤オブジェクト91のうちで端末装置7に表示される領域は、端末装置7の姿勢に応じて変化することとなる。具体的には、端末装置7を左右に傾ける操作によって、鍵盤オブジェクト91の表示領域が左右に円弧状にスクロールする。なお、本ゲーム例においては、テレビ2には円弧状の鍵盤オブジェクト91が表示され、端末装置7を円弧状の軌跡で移動させる操作によって、端末装置7に表示される鍵盤オブジェクト91の一部が円弧状にスクロールする。したがって、ユーザは円弧状の鍵盤オブジェクト91があたかも存在するかのような感覚で、端末装置7を用いて鍵盤オブジェクト91に対する位置指定操作を行うことができる。
なお、本ゲーム例では、ユーザが白鍵と黒鍵の並びから各鍵盤に対応する音を識別できるように、端末装置7に一度に表示される鍵盤は1オクターブ分の鍵盤となっている。なお、端末装置7は比較的大型の画面を有しているので、1オクターブ分の鍵盤が表示される場合でも、各鍵盤はユーザが指で押しやすい幅で表示される。
ここで、プレイヤは、端末装置7に表示される鍵盤オブジェクト91に対してタッチ入力を行うことで、音を出力することができる。すなわち、ゲーム装置3は、端末装置7のタッチパネル52に対してタッチ入力が行われた場合、入力位置に対応する(LCD51の画面上において入力位置に表示されている)指定位置にある鍵盤を特定し、特定された鍵盤に対応する音を出力する。なお、音を出力するスピーカは、テレビ2のスピーカ2aでもよいし、端末装置7のスピーカ77でもよいし、両方のスピーカ2aおよび77でもよい。
以上のように、本ゲーム例においては、端末装置7の姿勢が変化することに応じて端末オブジェクト92および面94が移動し、端末装置7に表示される鍵盤オブジェクト91の領域が変化する。その結果、プレイヤが端末装置7を用いて指定可能な鍵盤が変化する。したがって、プレイヤは、端末装置7の姿勢を変化させる操作と、タッチ入力の操作とによって、3次元の仮想空間内における鍵盤オブジェクト91の位置を容易に指定することができる。また、本ゲーム例においては、鍵盤オブジェクト91の全体を端末装置7に表示せずに、鍵盤オブジェクト91の全体をプレイヤが指定することができる。したがって、端末装置7において鍵盤オブジェクト91を大きく表示することができるので、タッチ入力が行いやすく操作が容易になる。
(第1のゲーム例におけるゲーム処理)
次に、第1のゲーム例においてゲームシステム1で実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図17は、ゲーム処理において用いられる各種データを示す図である。図17において、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図17に示すように、ゲーム装置3のメインメモリには、ゲームプログラム100、端末操作データ101、および処理用データ108が記憶される。なお、メインメモリには、図17に示すデータの他、ゲームに登場する各種オブジェクトの画像データやゲームに使用される音声データ等、ゲームに必要なデータが記憶される。
ゲームプログラム100は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。なお、ゲームプログラム100は、光ディスク4に代えて、フラッシュメモリ17やゲーム装置3の外部装置から(例えばインターネットを介して)取得されてもよい。また、ゲームプログラム100に含まれる一部(例えば、コントローラ5および/または端末装置7の姿勢を算出するためのプログラム)については、ゲーム装置3内に予め記憶されていてもよい。
端末操作データ101は、端末装置7に対するプレイヤの操作を表すデータである。端末操作データ101は、端末装置7から送信されてゲーム装置3において取得され、メインメモリに記憶される。端末操作データ101は、操作ボタンデータ102、スティックデータ103、入力位置データ104、角速度データ105、加速度データ106、および方位データ107を含む。端末操作データ101は、図17に示す各データの他、カメラ56によって撮像された画像のデータや、マイク79によって検出された音声データを含んでいてもよい。なお、メインメモリには、最新の(最後に取得された)ものから順に所定個数の端末操作データが記憶されてもよい。
操作ボタンデータ102は、端末装置7に設けられる各操作ボタン54A〜54Lに対する入力状態を表すデータである。具体的には、操作ボタンデータ102は、各操作ボタン54A〜54Lが押下されているか否かを表す。
スティックデータ103は、アナログスティック53(アナログスティック53Aおよび53B)のスティック部がスライドした(または傾倒した)方向および量を表すデータである。上記方向および量は、例えば2次元座標や2次元ベクトルとして表されてもよい。
入力位置データ104は、タッチパネル52の入力面において入力が行われた位置(入力位置)を表すデータである。本実施形態では、入力位置データ104は、上記入力面上の位置を表すための2次元座標系の座標値を表す。なお、タッチパネル52がマルチタッチ方式である場合には、入力位置データ104は複数の入力位置を表すこともある。
角速度データ105は、ジャイロセンサ74によって検出された角速度を表すデータである。本実施形態では、角速度データ105は、図8に示すxyzの3軸回りのそれぞれの角速度を表すものであるが、他の実施形態においては、任意の1軸以上の軸回り角速度を表すものであればよい。
加速度データ106は、加速度センサ73によって検出された加速度(加速度ベクトル)を表すデータである。本実施形態では、加速度データ106は、図8に示すxyzの3軸の方向に関する加速度を各成分とする3次元の加速度を表すものであるが、他の実施形態においては、任意の1以上の方向に関する加速度を表すものであればよい。
方位データ107は、磁気センサ72によって検出された方位を表すデータである。本実施形態では、方位データ107は、端末装置7を基準として所定の方位(例えば北)の向きを表す。なお、地磁気以外の磁界が発生している場合においては、方位データ107は厳密には絶対的な方位(北等)を示さないことになる。ただし、その場所における磁界の方向に対する端末装置7の相対的な方向が方位データ107によって示されるので、そのような場合であっても方位データ107に基づいて端末装置7の姿勢または姿勢の変化を算出することが可能である。
なお、端末操作データ101は、端末装置7に対する操作を表すものであればよく、上記各データ92〜97のいずれか1つのみを含むものであってもよい。また、端末装置7が他の入力手段(例えば、タッチパッドや、コントローラ5の撮像手段等)を有する場合には、端末操作データ101は、当該他の入力手段に対する操作を表すデータを含んでいてもよい。なお、本実施形態のように端末装置7自体の動きをゲーム操作として用いる場合には、端末操作データ101は、加速度データ106、角速度データ105、または方位データ107のように、端末装置7自体の動きに応じて値が変化するデータを含むことが好ましい。
また、本実施形態においては、端末操作データ101の他、カメラ画像データおよび/またはマイク音データが端末装置7からゲーム装置3へ送信されてもよい。カメラ画像データは、端末装置7のカメラ56によって撮像された画像(カメラ画像)を表すデータである。マイク音データは、端末装置7のマイク79によって検出された音声(マイク音)を表すデータである。なお、これらカメラ画像データおよびマイク音データは、コーデックLSI76によって圧縮されてゲーム装置3へ送信され、ゲーム装置3においてコーデックLSI27によって伸張されてメインメモリに記憶されてもよい。
また、本実施形態ではコントローラ5が操作装置として用いられないので図示しないが、メインメモリには、コントローラ5に対するプレイヤの操作を表すコントローラ操作データが記憶されてもよい。
処理用データ108は、後述するゲーム処理(図18)において用いられるデータである。処理用データ108は、端末姿勢データ109、端末オブジェクトデータ110、面データ111、端末カメラデータ112、および、指定位置データ113を含む。なお、図17に示すデータの他、処理用データ108は、ゲームに登場する各種オブジェクトに設定される各種パラメータを表すデータ等、ゲーム処理において用いられる各種データを含む。
端末姿勢データ109は、端末装置7の姿勢を表すデータである。端末装置7の姿勢は、例えば、所定の基準姿勢から現在の端末装置7の姿勢への回転を表す回転行列によって表現されてもよいし、3次のベクトルまたは3つの角度によって表現されてもよい。また、本実施形態においては、端末装置7の姿勢として3次元空間における姿勢が用いられるが、他の実施形態においては、2次元平面における姿勢が用いられてもよい。本実施形態では、端末姿勢データ109は、上記端末操作データ101に含まれる角速度データ105および加速度データ106に基づいて算出される。端末姿勢データ109の算出方法についてはステップS11で後述する。
端末オブジェクトデータ110は、仮想空間に配置される端末オブジェクト92の位置および姿勢を表すデータである。端末オブジェクト92の位置は、仮想空間内の位置を表すための座標系(仮想空間座標系)における位置を示す3次元の座標値によって表される。また、本ゲーム例においては、端末オブジェクト92は、端末オブジェクト92の画面93に垂直な軸回りの回転方向のみ姿勢を変化させ、他の回転方向には姿勢を変化させない。そのため、端末オブジェクト92の姿勢は、1つのベクトル(例えば、端末オブジェクト92の画面に平行で、端末オブジェクト92を基準とした所定方向を向くベクトル)によって表現される。また、端末オブジェクト92の姿勢は、上記座標系における回転行列またはベクトルによって表現されてもよい。
面データ111は、仮想空間に設定される面94の位置および姿勢を表すデータである。面94の位置は、上記仮想空間座標系における位置を示す3次元の座標値によって表される。また、本ゲーム例においては、面94は、面94に垂直な軸回りの回転方向のみ姿勢を変化させ、他の回転方向には姿勢を変化させない。そのため、面94の姿勢は、上記端末オブジェクト92の姿勢と同様、1つのベクトル(例えば、端末オブジェクト92の画面に平行で、端末オブジェクト92を基準とした所定方向を向くベクトル)によって表現されてもよい。また、面94の姿勢は、上記座標系における回転行列またはベクトルによって表現されてもよい。
端末カメラデータ112は、端末用画像を生成するために用いられる仮想カメラ(端末用仮想カメラ)の位置および姿勢を表すデータである。本実施形態においては、端末用仮想カメラの位置および姿勢は、面データ111に基づいて算出される。
指定位置データ113は、上記指定位置を表すデータである。指定位置は、上記仮想空間座標系における位置を示す3次元の座標値によって表される。詳細は後述するが、指定位置は、上記入力位置データ104と面データ111とに基づいて算出される。
次に、ゲーム装置3において実行されるゲーム処理の詳細を、図18および図19を用いて説明する。図18は、ゲーム装置3において実行されるゲーム処理の流れを示すメインフローチャートである。ゲーム装置3の電源が投入されると、ゲーム装置3のCPU10は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図18に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。なお、ゲーム装置3においては、電源投入後にゲームプログラムがすぐに実行される構成であってもよいし、電源投入後にまず所定のメニュー画面を表示する内蔵プログラムが実行され、その後例えばプレイヤによるメニュー画面に対する選択操作によってゲームの開始が指示されたことに応じてゲームプログラムが実行される構成であってもよい。
なお、以下で説明するフローチャート(第1〜第4のゲーム例を含む)における各ステップの処理は、単なる一例に過ぎず、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。また、変数の値や、判断ステップで利用される閾値も、単なる一例に過ぎず、必要に応じて他の値を採用してもよい。また、本実施形態では、上記フローチャートの各ステップの処理をCPU10が実行するものとして説明するが、上記フローチャートにおける一部のステップの処理を、CPU10以外のプロセッサや専用回路が実行するようにしてもよい。
まずステップS1において、CPU10は初期処理を実行する。初期処理は、仮想空間を構築し、仮想空間に登場する各オブジェクトを初期位置に配置したり、ゲーム処理で用いる各種パラメータの初期値を設定したりする処理である。なお、第1のゲーム例においては、端末オブジェクト92、面94、および端末用仮想カメラの3つのオブジェクトが所定の位置および所定の姿勢で仮想空間内に配置される。すなわち、上記3つのオブジェクトの初期位置および初期姿勢を表すデータが、それぞれ端末オブジェクトデータ110、面データ111、および端末カメラデータ112としてメインメモリに記憶される。また、テレビ用画像を生成するために用いられる仮想カメラ(テレビ用仮想カメラ)が所定の位置および姿勢で設定される。なお、テレビ用仮想カメラは、鍵盤オブジェクト91および端末オブジェクト92が視野範囲に含まれるような、予め定められた位置および姿勢に設定される。ステップS1の次にステップS2の処理が実行される。以降、ステップS2〜S8の一連の処理からなる処理ループが所定時間(1フレーム時間。例えば1/60秒)に1回の割合で繰り返し実行される。
ステップS2において、CPU10は、端末装置7から送信されてくる端末操作データを取得する。端末装置7は、端末操作データをゲーム装置3へ繰り返し送信するので、ゲーム装置3は端末操作データを逐次受信する。ゲーム装置3においては、端末通信モジュール28が端末操作データを逐次受信し、入出力プロセッサ11aが端末操作データをメインメモリに逐次記憶する。CPU10は、必要に応じて適宜のタイミングで端末操作データ101をメインメモリから読み出す。ステップS2の次にステップS3の処理が実行される。
ステップS3において、CPU10はゲーム制御処理を実行する。ゲーム制御処理は、プレイヤによる操作に従って、各種のオブジェクト動作を制御したり、各種のゲームパラメータを算出したりしてゲームを進行させる処理である。以下、図19を参照して、ゲーム制御処理の詳細について説明する。
図19は、図18に示すゲーム制御処理(ステップS3)の詳細な流れを示すフローチャートである。ゲーム制御処理においてはまずステップS11において、CPU10は端末装置7の姿勢を算出する。端末装置7の姿勢は、端末操作データが表す、姿勢を算出するための物理量に基づいて算出される。なお、本実施形態においては、姿勢を算出するための物理量として、角速度データ105が表す角速度と、加速度データ106が表す加速度が用いられる。以下、姿勢算出処理の詳細について説明する。
姿勢算出処理においては、まず、CPU10は、角速度データ105に基づいて端末装置7の姿勢を算出する。角速度に基づく姿勢を算出する方法はどのような方法であってもよいが、当該姿勢は、前回の姿勢(前回の処理ループにおけるステップS11で算出された姿勢)と、今回の角速度(今回の処理ループにおけるステップS2で取得された角速度)とを用いて算出される。具体的には、CPU10は、前回の姿勢を今回の角速度で単位時間分だけ回転させることによって姿勢を算出する。なお、前回の姿勢は、メインメモリに記憶されている端末姿勢データ109により表され、今回の角速度は、メインメモリに記憶されている角速度データ105により表される。したがって、CPU10は、端末姿勢データ109および角速度データ105をメインメモリから読み出して、端末装置7の姿勢を算出する。以上のようにして算出された姿勢を表すデータはメインメモリに記憶される。
なお、角速度から姿勢を算出する場合、初期姿勢を定めておくのがよい。つまり、端末装置7の姿勢を角速度から算出する場合には、CPU10は、最初に端末装置7の初期姿勢を設定しておく。端末装置7の初期姿勢は、加速度データ106に基づいて算出されてもよいし、端末装置7を特定の姿勢にした状態でプレイヤに所定の操作を行わせることで、所定の操作が行われた時点における特定の姿勢を初期姿勢として設定するようにしてもよい。なお、空間における所定方向を基準とした絶対的な姿勢として端末装置7の姿勢を算出する場合には上記初期姿勢を算出することが良いが、例えばゲーム開始時点における端末装置7の姿勢を基準とした相対的な姿勢として端末装置7の姿勢を算出する場合には、上記初期姿勢は算出されなくても良い。
角速度に基づいて姿勢を算出すると次に、CPU10は、算出された姿勢を、端末装置7の加速度に基づいて補正する。ここで、端末装置7がほぼ静止している状態では、端末装置7に対して加えられる加速度は重力加速度に相当する。つまり、この状態では、加速度データ106が表す加速度ベクトルは、端末装置7における重力方向を表す。したがって、CPU10は、角速度に基づいて算出された姿勢の下方向(重力方向)を、加速度ベクトルの表す重力方向へ近づける補正を行う。すなわち、上記下方向が加速度ベクトルの表す重力方向へ所定の割合で近づくように、上記姿勢を回転させる。これによって、角速度に基づく姿勢を、加速度に基づく重力方向を考慮した姿勢となるように補正することができる。なお、上記所定の割合は、予め定められた固定値であってもよいし、検出される加速度等に応じて設定されてもよい。例えば、CPU10は、検出される加速度の大きさが重力加速度の大きさに近い場合には、上記姿勢の下方向を加速度ベクトルの表す重力方向へ近づける割合を大きくし、検出される加速度の大きさが重力加速度の大きさから離れている場合には、当該割合を小さくするようにしてもよい。
具体的には、CPU10は、角速度に基づいて算出された姿勢を表すデータと、加速度データ106とをメインメモリから読み出し、上記の補正を行う。そして、補正が行われた後の姿勢を表すデータを端末姿勢データ109としてメインメモリに記憶する。以上のステップS11の次にステップS12の処理が実行される。
また、本実施形態においては、CPU10は、慣性センサ(加速度センサ73およびジャイロセンサ74)の検出結果に基づいて端末装置7の姿勢を算出した。ここで、他の実施形態においては、端末装置7の姿勢の算出方法はどのような方法であってもよい(後述する他のゲーム例でも同様)。例えば、他の実施形態においては、端末装置7が他のセンサ部(例えば磁気センサ72やカメラ56)を有している場合には、当該他のセンサ部の検出結果を用いてコントローラ5の姿勢が算出されてもよい。すなわち、CPU10は、磁気センサ72によって検出される方位データ107から、端末装置7を基準とした所定の方位(すなわち、所定の方位を基準とした端末装置7の姿勢)を知ることができる。したがって、他の実施形態においては、CPU10は、角速度データ105および加速度データ106に加えて、上記方位データ107をさらに用いて端末装置7の姿勢を算出してもよい。方位データ107を用いて端末装置7の姿勢を算出する場合には、実空間における所定方向を基準とした絶対的な姿勢を算出することができるので、端末装置7の姿勢をより正確に算出することができる。なお、方位データ107に関して、地磁気以外の磁界が発生している場所においては、方位データは厳密には絶対的な方位(北等)を示さないことになるが、その場所における磁界の方向に対する端末装置7の相対的な方向が示されるので、そのような場合であっても端末装置7の姿勢を算出することが可能である。また、他の実施形態においては、上記3つのデータのうち1つまたは2つに基づいて姿勢を算出するようにしてもよい。また、例えば、ゲームシステム1が端末装置7を撮像するカメラを備えている場合には、ゲーム装置3は当該カメラで端末装置7を撮像した撮像結果を取得し、撮像結果を用いて端末装置7の姿勢を算出するようにしてもよい。
ステップS12において、CPU10は、端末装置7の姿勢に基づいて端末オブジェクト92を仮想空間に配置する。端末オブジェクト92は、端末装置7の姿勢に基づいて制御されればどのように制御されてもよい。本ゲーム例においては、端末オブジェクト92は、端末装置7の姿勢に対応して位置および姿勢が制御される。
本ゲーム例においては、端末オブジェクト92の姿勢は、画面に垂直な軸回りの回転方向に関する姿勢が端末装置7の姿勢に応じて変化し、他の回転方向に関する姿勢は変化しない(固定される)。つまり、端末オブジェクト92の姿勢は、上記の軸と垂直な姿勢から変化しない。画面に垂直な軸回りの回転方向に関して、端末装置7が所定の基準姿勢となる場合、端末オブジェクト92の姿勢は、テレビ2に表示される仮想空間の正面方向(奥行き方向)を向く姿勢となる。また、画面に垂直な軸回りの回転方向に関して、端末装置7が所定の基準姿勢から回転した場合、端末オブジェクト92の姿勢は、回転方向に応じた方向に、回転量に応じた量だけ変化する。つまり、端末オブジェクト92の姿勢は、端末装置7の姿勢と対応するように変化する。なお、上記の基準姿勢は、どのように設定されてもよいが、例えば、ゲーム開始時における端末装置7の姿勢であってもよいし、予め定められた姿勢であってもよい。
また、本ゲーム例においては、画面に垂直な軸回りの回転方向に関する端末装置7の姿勢に基づいて端末オブジェクト92の姿勢が決定される。したがって、CPU10は、例えば端末装置7の正面方向(端末装置7の画面に平行であって、画面の上方向。図8に示すz軸方向)を向くベクトルに基づいて端末オブジェクト92の姿勢を算出することができる。つまり、端末オブジェクト92の正面方向が上記ベクトルの向きに応じた向きとなるように端末オブジェクト92の姿勢が算出されてもよい。なお、端末装置7の正面方向が鉛直方向を向く場合には、上記ベクトルに代えて、CPU10は、端末装置7の奥行き方向(端末装置7の画面に垂直であって、画面の手前側から奥側への方向。図8に示すy軸負方向)を向くベクトルに基づいて端末オブジェクト92の姿勢を算出するようにしてもよい。これによれば、プレイヤが端末装置7の画面を立てた状態(鉛直にした状態)で端末装置7を使用する場合でも、端末装置7の姿勢を変化させる操作に応じて端末オブジェクト92を制御することができる。
また、端末オブジェクト92の位置は、上記のようにして算出される端末オブジェクト92の姿勢に応じた位置となるように決定される。具体的には、端末装置7の姿勢が上記基準姿勢となる場合、端末オブジェクト92は、鍵盤オブジェクト91の円弧における中央の上方に配置される。また、画面に垂直な軸回りの回転方向に関して、端末装置7が所定の基準姿勢から(画面上方から見て)右回りに回転した場合、端末オブジェクト92は、回転量に応じた移動量だけ鍵盤オブジェクト91の円弧上を右方向に移動する。一方、端末装置7が所定の基準姿勢から(画面上方から見て)左回りに回転した場合、端末オブジェクト92は、回転量に応じた移動量だけ鍵盤オブジェクト91の円弧上を左方向に移動する。
ステップS12における具体的な処理としては、CPU10は、端末姿勢データ109をメインメモリから読み出し、端末装置7の姿勢に基づいて端末オブジェクト92の位置および姿勢を算出する。そして、算出された位置および姿勢を表すデータを端末オブジェクトデータ110としてメインメモリに記憶する。ステップS12の次にステップS13の処理が実行される。
以上のように、本ゲーム例においては、ゲーム装置3は、端末装置7の姿勢に対応して姿勢(ここでは、姿勢および位置)が制御されるオブジェクト(端末オブジェクト92)を仮想空間に配置する(ステップS12)。そして、ゲーム装置3は、所定の表示装置(テレビ2)に表示するための画像として、上記オブジェクトを含む仮想空間を表す画像を生成する(後述するステップS4)。これによって、プレイヤは、端末装置7の姿勢を画面上で確認することができ、ひいては、当該姿勢に対応して変化する面94の姿勢を容易に確認することができる。
ステップS13において、CPU10は、端末装置7の姿勢に応じた面94を設定する。面94は、端末装置7の姿勢に応じて変化するように設定されればどのように設定されてもよい。本ゲーム例においては、面94は、端末装置7の姿勢に応じて変化する端末オブジェクト92の位置および姿勢に基づいて設定される。具体的には、面94の位置は、鍵盤オブジェクト91上の領域であって、端末オブジェクト92の下方(真下)の位置に設定される。上述のように、端末オブジェクト92は、端末装置7の姿勢の変化に応じて鍵盤オブジェクト91の上方を円弧状に移動するので、面94は、端末装置7の姿勢の変化に応じて、鍵盤オブジェクト91の各鍵盤の領域上を移動するように設定される。また、面94の姿勢は、鍵盤オブジェクト91と平行で、かつ、面94に垂直な軸回りの回転方向の姿勢に関して、端末オブジェクト92の姿勢と一致するように設定される。つまり、本ゲーム例においては、面94の姿勢は、端末装置7の姿勢に応じて、端末装置7の姿勢に対応するように設定される。
ステップS13の具体的な処理としては、CPU10は、端末オブジェクトデータ110をメインメモリから読み出し、端末オブジェクト92の位置および姿勢に基づいて面94の位置および姿勢を算出する。そして、算出された位置および姿勢を表すデータを面データ111としてメインメモリに記憶する。ステップS13の次にステップS14の処理が実行される。
ステップS14において、CPU10は、端末用仮想カメラを設定する。端末用仮想カメラは、面94の位置および姿勢に基づいて設定されればよく、本ゲーム例においては、上記面94の領域を視野範囲に含む位置に設定される。すなわち、端末用仮想カメラは、視野範囲の外縁と面94の外縁とが一致するように設定される。具体的には、CPU10は、面データ111をメインメモリから読み出し、面94の位置および姿勢に基づいて端末用仮想カメラの位置および姿勢を算出する。そして、算出された位置および姿勢を表すデータを端末カメラデータ112としてメインメモリに記憶する。ステップS14の次にステップS15の処理が実行される。
ステップS15において、CPU10は、タッチパネル52に対する入力(タッチ入力)があったか否かを判定する。具体的には、メインメモリに記憶されている最新の入力位置データ104を読み出して参照し、入力位置データ104が入力位置の座標値を表すか、それとも、入力が無いことを表すかを判定する。ステップS15の判定結果が肯定である場合、ステップS16の処理が実行される。一方、ステップS15の判定結果が否定である場合、CPU10はゲーム制御処理を終了する。
ステップS16において、CPU10は、面94上における指定位置を算出する。指定位置は、面94上の位置であって、入力位置に応じた位置として算出される。指定位置の具体的な算出方法はどのような方法であってもよい。本ゲーム例においては、指定位置は、タッチパネル52の入力面の四辺に対する入力位置の位置関係と、面94の四辺に対する指定位置の位置関係とが同じになるように算出される。また、本ゲーム例においては、CPU10は、タッチパネル52に対する入力位置と、当該入力位置に基づいて算出される指定位置とがLCD51の画面上において一致するように、指定位置を算出する。これによれば、プレイヤが画面上においてタッチした位置が指定位置となるので、プレイヤは仮想空間内の位置をより指定しやすくなる。なお、本ゲーム例においては、タッチパネル52の入力面の形状(縦横比)と面94の形状(縦横比)とを等しくし、また、タッチパネル52の入力面と面94とをLCD51の画面上において一致させている。これによって、上記のように指定位置を算出することによって、LCD51の画面上において入力位置と制御位置とを一致させることができる。
ステップS16の具体的な処理としては、CPU10は、まず、メインメモリに記憶されている最新の入力位置データ104を読み出し、入力位置の座標を、面94上の位置を示す2次元座標系の2次元座標に変換する。次に、CPU10は、変換によって得られた2次元座標を、3次元の仮想空間の位置を示す上記仮想空間座標系の3次元座標に変換する。この3次元座標は、上記2次元座標と、面94の位置および姿勢(あるいは、面94を表す平面の式)とを用いて算出することができる。したがって、CPU10は、面データ111をメインメモリから読み出し、上記2次元座標と面データ111とに基づいて上記3次元座標を算出する。そして、算出された3次元座標を表すデータを指定位置データ113としてメインメモリに記憶する。以上のステップS16の次にステップS17の処理が実行される。
ステップS17において、CPU10は、指定位置を入力として所定の処理を実行する。第1のゲーム例では、所定の処理は、指定位置にある鍵盤に対応する音を出力する処理である。具体的には、CPU10は、指定位置データ113をメインメモリから読み出し、鍵盤オブジェクト91を構成する各鍵盤から、指定位置によって指定された(指定位置を含む)鍵盤を特定する。そして、特定された鍵盤に対応する音を特定する。なお、メインメモリには、鍵盤とその鍵盤が特定された場合に出力すべき音との対応を示す対応付けデータが記憶されており、CPU10は当該対応付けデータを参照して音を特定する。さらに、CPU10は、特定した音をDSP11cに生成させる。このように、本ゲーム例においては、CPU10は、仮想空間に設定される複数の領域(鍵盤の領域)から、指定位置を含む領域を特定し、特定された領域に対応する音を出力させる。ステップS17の後、CPU10は、ゲーム制御処理を終了する。
以上のゲーム制御処理によれば、端末装置7の姿勢の変化に応じて仮想空間内において面94が移動する(ステップS13)とともに、端末用仮想カメラが移動する(ステップS14)。その結果、端末装置7に表示される鍵盤オブジェクト91の領域が変化する(後述するステップS5およびS7)。つまり、プレイヤがタッチパネル52を用いて指定可能な鍵盤が変化する。したがって、プレイヤは、端末装置7の姿勢を変化させる操作と、タッチ入力の操作とによって、仮想空間内における鍵盤オブジェクト91の所望の位置を容易に指定することができる。
なお、本ゲーム例においては、仮想空間に設定される複数の領域(各鍵盤の領域)は、円弧状に(円弧上に)配置され、CPU10は、端末装置7の姿勢の変化に応じて複数の領域上を移動するように面94を設定する(ステップS13)。そして、CPU10は、面94上の指定位置を入力位置に基づいて算出する(ステップS16)。したがって、本ゲーム例においては、プレイヤは、端末装置7を回転させる(姿勢を変化させる)操作によって、略円弧状に配置される複数の領域上において面94を回転移動させることができる。これによれば、端末装置7の動きと面94の動きとが共に回転運動となり、両者の動きが対応するので、端末装置7の操作がプレイヤにとってより直感的で分かりやすいものとなる。さらに、プレイヤは、各鍵盤の円弧状の配置から端末装置7の操作方法を把握(推測)することができるので、この理由によっても、端末装置7の操作がプレイヤにとってより直感的で分かりやすいものとなる。なお、他の実施形態においては、各鍵盤が直線上に配置されてもよく、このとき、端末装置7の姿勢の変化に応じて当該直線上を移動するように面94が設定されてもよい。
また、本ゲーム例においては、ゲームシステム1は、加速度センサ73およびジャイロセンサ74を用いて端末装置7の動きを算出しているので、平行移動に関しては精度良く端末装置7の動きを算出することができないおそれがある。精度良く端末装置7の動きを算出するためには、端末装置7が回転移動(姿勢の変化)を行い、それを検出する方が好ましい。ここで、本ゲーム例においては、上記のように各鍵盤の円弧状の配置から、端末装置7を回転移動させる操作をプレイヤに推測させて実行させることができ、その結果、ゲーム装置3は精度良く端末装置7の動きを算出することができる。
図18の説明に戻り、ステップS3のゲーム制御処理の次にステップS4の処理が実行される。ステップS4においては、テレビ用画像が生成される。すなわち、CPU10およびGPU11bは、ステップS3のゲーム制御処理の結果を表すデータ(ゲーム空間における面94やオブジェクトのデータ等)をメインメモリから読み出し、また、ゲーム画像を生成するために必要なデータをVRAM11dから読み出し、テレビ用画像を生成する。本ゲーム例では、テレビ用仮想カメラは、鍵盤オブジェクト91の全体および端末オブジェクト92を視野範囲に含むように設定される。したがって、鍵盤オブジェクト91および端末オブジェクト92を含む仮想空間内の領域を表すテレビ用画像が生成される(図14参照)。生成されたテレビ用画像はVRAM11dに記憶される。上記ステップS4の次にステップS5の処理が実行される。
なお、本ゲーム例においては、テレビ用仮想カメラは固定して設定されたが、他の実施形態においては、テレビ用仮想カメラは移動可能に制御されてもよい。また、テレビ用仮想カメラの撮影範囲は、鍵盤オブジェクト91のうち、端末用仮想カメラによる撮影範囲よりも広い範囲となるように設定されることが好ましいが、鍵盤オブジェクト91の全体を含まなくてもよい。例えば、他の実施形態においては、CPU10は、鍵盤オブジェクト91の一部と端末オブジェクト92とを視野範囲に含むようにテレビ用仮想カメラを設定し、端末オブジェクト92の移動に応じてテレビ用仮想カメラを移動させるようにしてもよい。
ステップS5においては、端末用画像が上記ゲーム制御処理に基づいて生成される。すなわち、CPU10およびGPU11bは、ステップS3のゲーム制御処理の結果を表すデータをメインメモリから読み出し、また、ゲーム画像を生成するために必要なデータをVRAM11dから読み出し、端末用画像を生成する。本実施形態では、仮想空間において面94が設定される領域を表す画像が端末用画像として生成される。具体的には、タッチパネル52の入力面と面94とがLCD51の画面上で一致するように端末用画像が生成される。これによって、面94の領域内における鍵盤オブジェクト91を表す画像が端末装置7に表示される(図16参照)。生成された端末用画像はVRAM11dに記憶される。上記ステップS5の次にステップS6の処理が実行される。
以上のように、本ゲーム例においては、ゲーム装置3は、所定のオブジェクト(鍵盤オブジェクト91)を仮想空間に設定し、表示装置(テレビ2および端末装置7のLCD51)に表示するための画像として、当該オブジェクトを含む仮想空間を表す画像を生成する。また、ゲーム装置3は、上記指定位置として上記所定のオブジェクトの位置が算出された場合に所定の処理を実行する(上記ステップS15)。したがって、本ゲーム例においては、プレイヤは、端末装置7を用いて仮想空間内の3次元位置を指定する操作によって、仮想空間内のオブジェクトに対して入力を行う操作を行うことができる。
さらに、本ゲーム例においては、ゲーム装置3は、端末装置7に表示するための画像として、端末装置7の姿勢に応じて範囲が変化するように上記オブジェクト(鍵盤オブジェクト91)の一部の範囲を表す画像を生成する(ステップS4)。また、ゲーム装置3は、テレビ2に表示するための画像として、上記オブジェクトのうちの上記一部の範囲よりも広い範囲を表す画像を生成する(ステップS5)。これによれば、端末装置7には相対的に拡大された画像が表示されるので、タッチ入力の操作が行いやすくなるとともに、テレビ2には相対的に広範囲の画像が表示されるので、プレイヤは端末装置7における表示範囲の周囲の状況をも知ることができる。プレイヤはテレビ2の画像を見ることによって、例えば、オブジェクトの全体に対する端末装置7における表示範囲の位置関係を把握することができる。
ステップS6において、CPU10は、テレビ2へゲーム画像を出力する。具体的には、CPU10は、VRAM11dに記憶されたテレビ用画像のデータをAV−IC15へ送る。これに応じて、AV−IC15はテレビ用画像のデータを、AVコネクタ16を介してテレビ2へ出力する。これによって、テレビ用画像がテレビ2に表示される。また、上記ステップS17において生成された音声がテレビ2へ出力される場合には、CPU10は、ステップS17で生成された音声のデータをAV−IC15へ送る。これに応じて、AV−IC15は音声のデータをAVコネクタ16を介してテレビ2へ出力する。これによって、テレビ用ゲーム音声がスピーカ2aから出力される。ステップS6の次にステップS7の処理が実行される。
ステップS7において、CPU10は、端末装置7へゲーム画像を出力(送信)する。具体的には、VRAM11dに記憶された端末用画像の画像データは、CPU10によってコーデックLSI27に送られ、コーデックLSI27によって所定の圧縮処理が行われる。圧縮処理が施された画像のデータは、端末通信モジュール28によってアンテナ29を介して端末装置7へ送信される。端末装置7は、ゲーム装置3から送信されてくる画像のデータを無線モジュール80によって受信し、受信された画像データに対してコーデックLSI76によって所定の伸張処理が行われる。伸張処理が行われた画像データはLCD51に出力される。これによって、端末用画像がLCD51に表示される。また、上記ステップS17において生成された音声が端末装置7へ出力される場合には、生成された音声データは、CPU10によってコーデックLSI27に送られ、コーデックLSI27によって所定の圧縮処理が行われる。さらに、圧縮処理が施された音声のデータは、端末通信モジュール28によってアンテナ29を介して端末装置7へ送信される。端末装置7は、ゲーム装置3から送信されてくる音声のデータを無線モジュール80によって受信し、コーデックLSI76によって所定の伸張処理が行われる。伸張処理が行われた音声データはサウンドIC78に出力される。これによって、端末用ゲーム音声がスピーカ77から出力される。ステップS7の次にステップS8の処理が実行される。
ステップS8において、CPU10は、ゲームを終了するか否かを判定する。ステップS8の判定は、例えば、プレイヤがゲームを中止する指示を行ったか否か等によって行われる。ステップS8の判定結果が否定の場合、ステップS2の処理が再度実行される。一方、ステップS8の判定結果が肯定の場合、CPU10は図16に示すゲーム処理を終了する。なお、ゲーム処理を終了する際には、ゲームデータをメモリカード等にセーブする等の処理が実行されてもよい。以降、ステップS2〜S8の一連の処理は、ステップS8でゲームを終了すると判定されるまで繰り返し実行される。
以上のように、本ゲーム例においては、端末装置7の表示部(LCD)には、仮想空間に配置される鍵盤が表示される。そして、ゲームシステム1は、入力位置に基づく仮想空間内の位置(指定位置)として鍵盤の位置が算出された場合、当該位置に対応する鍵盤に応じた音を出力する。これによって、プレイヤは端末装置7によって鍵盤楽器を演奏する操作を行うことができる。また、上記ゲーム処理によれば、端末装置7のタッチパネル52に対する入力によって、仮想空間内の面94上の位置が指定される(ステップS16)とともに、端末装置7の姿勢に応じて面94の姿勢が変化する(ステップS13)。これによれば、プレイヤは、面94の姿勢を変化させつつ、タッチパネル52を用いて位置を指定することで、3次元の仮想空間における各鍵盤の位置を容易に指定することができる。
[7.第2のゲーム例]
以下、図20〜図36を参照して、本実施形態のゲームシステム1において実行される第2のゲーム例について説明する。第2のゲーム例では、プレイヤは端末装置7を用いて3次元の仮想空間(ゲーム空間)に点や線を描くことができる。仮想空間を表すゲーム画像は、テレビ2および端末装置7の2つの表示装置に表示される。本ゲーム例においては、端末装置7は、表示装置としてだけでなく操作装置として用いられる。そのため、コントローラ5は用いられなくてもよく、ゲームシステム1はコントローラ5を含まない構成であってもよい。
図20は、本ゲーム例においてゲーム操作が行われる場合におけるテレビ2および端末装置7を示す図である。図20に示すように、テレビ2には所定の面201が設置される3次元の仮想空間が表示され、端末装置7にもこの面201が表示される。端末装置7においては、面201と表示画面とが一致するように面201が表示される。つまり、面201は、端末装置7が備えるタッチパネル52の入力面に対応する。なお、面201はタッチパネル52の入力面(LCD51の画面)と同じアスペクト比を有する長方形の平面である。また、詳細は後述するが、面201の姿勢は端末装置7の姿勢に対応しており、端末装置7の姿勢を変化させることで仮想空間における面201の姿勢が変化する。なお、図20では、端末装置7は、タッチパネル52が水平となる姿勢であるので、面201も仮想空間において水平になっている。なお、端末装置7にはアイコン202が表示される。詳細は後述するが、アイコン202は、仮想空間に生成された軌跡を移動(回転)させるために用いられる。
プレイヤは、端末装置7のタッチパネル52上にタッチペン60や指等で点や線を描くことができる。点や線が描かれた場合、図20に示すように、仮想空間における面201上には、描かれた点や線(図20では線A1)が生成されて表示される。具体的には、タッチパネル52に対する入力(タッチ入力)が行われると、入力が行われた位置(入力位置)に対応する面201上の位置(指定位置)が算出される。本ゲーム例では、点や線を表すためのオブジェクトが上記指定位置に配置されることによって、入力された点や線が表示される。以上のように、プレイヤは、タッチパネル52に対する入力操作によって3次元の仮想空間内に点や線を描くことができる。
図21は、図20に示す状態から端末装置7を傾けた場合におけるテレビ2および端末装置7を示す図である。図20に示す状態ではタッチパネル52の入力面が水平となっていたのに対して、図21に示す状態では当該入力面が鉛直となるように端末装置7の姿勢が変化している。タッチパネル52の入力面が鉛直になるように端末装置7の姿勢を変化させると、図21に示すように、仮想空間内の面201も鉛直となるように変化する。なお、本ゲーム例では、面201は、面201の中央の位置を回転の中心として、端末装置7の姿勢に応じて回転する。また、面201の姿勢が変化した場合、端末装置7に表示される画像の視点および視線方向は、面201と表示画面とが一致するように変化する。
図21に示す状態においても図20に示す状態と同様、プレイヤは、タッチパネル52に対する入力操作によって3次元の仮想空間内に点や線を描くことができる。つまり、図21に示す状態で、プレイヤがタッチパネル52に対して線を描くと、仮想空間において鉛直方向に平行となった面201上に線が生成されて表示される。ここで、図21に示す状態においては、面201の姿勢が図20に示す状態とは異なっているので、タッチ入力によって生成される線の位置や向きは図20とは異なる。すなわち、図20に示す状態で生成された線A1は、水平な面内において生成されるのに対して、図21に示す状態で生成される線A2は、鉛直な面内において生成される。したがって、線A1と線A2とで形成される図形は、平面的なものではなく、立体的なものになる。
以上のように、本ゲーム例においては、端末装置7のタッチパネル52に対する入力に応じて、仮想空間内の面201上に図形(点や線)が生成されるとともに、端末装置7の姿勢に応じて面201の姿勢が変化する。これによれば、面201の姿勢を変化させることによって、面201上に生成される図形を立体的なものとすることができる。つまり、プレイヤは、タッチパネル52に対する入力操作によって、3次元の仮想空間において3次元的に自由に図形を描くことができる。
また、本ゲーム例では、プレイヤは、端末装置7の姿勢を変化させる操作によって仮想空間内に線を描くことも可能である。図22は、図21に示す状態から端末装置7を傾けた場合におけるテレビ2および端末装置7を示す図である。図21に示す状態では、タッチパネル52の入力面の法線方向がテレビ2の方向を向いていたのに対して、図22に示す状態では、当該法線方向がテレビ2の方向よりやや横を向いている。また、ここでは、プレイヤは、図21に示す状態から図22に示す状態へ端末装置7の姿勢を変化させる際、タッチパネル52のある1点の位置(アイコン202の位置を除く)をタッチし続けているものとする。図21に示す状態から図22に示す状態となる場合においても上記と同様、図22に示すように、端末装置7の姿勢に応じて面201の姿勢が変化する。この場合、プレイヤが同じ位置をタッチし続けていても、面201の姿勢が変化することによって仮想空間内における指定位置は変化する。したがって、図22に示すように、指定位置が変化した軌跡を表す線A3が生成されて表示される。このように、本ゲーム例では、タッチパネル52上に線を描く操作の他に、端末装置7の姿勢を変化させる操作によって仮想空間内に線を描くことも可能である。また、端末装置7の姿勢を変化させる操作によって、面201に平行でない向きに線を描くことが可能である。
また、本ゲーム例では、プレイヤは、仮想空間内に生成された図形の向き(姿勢)を変化させることも可能である。図23は、図21に示す状態から図形を回転させた場合におけるテレビ2および端末装置7を示す図である。図21に示す状態では、タッチパネル52の入力面の法線方向がテレビ2の方向を向いていたのに対して、図23に示す状態では図22に示す状態と同様、当該法線方向がテレビ2の方向よりやや横を向いている。また、プレイヤは、図21に示す状態から図22に示す状態へ端末装置7の姿勢を変化させる際、所定の操作(ここでは、タッチパネル52のアイコン202の位置をタッチし続ける操作)を行っているものとする。このように、所定の操作が行われた状態で端末装置7の姿勢が変化される場合、生成された図形の姿勢は、端末装置7の姿勢に応じて面201の姿勢と共に変化する。例えば、図23においては、線A1およびA2からなる図形は、端末装置7が鉛直方向を軸として回転することに応じて、仮想空間における鉛直方向を軸として面201と共に回転する。このとき、テレビ2には、上記図形の向きが変化して表示される。したがって、プレイヤは、アイコン202をタッチしながら端末装置7の姿勢を変化させる操作によって、作成した図形をいろいろな向きから見ることができ、図形の形状を確認することができる。なお、端末装置7に表示される画像に関しては、視線方向が面201の姿勢と共に変化するので、図形は動いていないように見える。また、本ゲーム例では、上記所定の操作は、アイコン202をタッチする操作であるとするが、他の実施形態では、例えば端末装置7の所定のボタンを押下する操作等、どのような操作であってもよい。
(第2のゲーム例におけるゲーム処理)
次に、第2のゲーム例においてゲームシステム1で実行されるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図24は、ゲーム処理において用いられる各種データを示す図である。図24において、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図24に示すように、ゲーム装置3のメインメモリには、ゲームプログラム210、端末操作データ101、および処理用データ211が記憶される。なお、メインメモリには、図24に示すデータの他、ゲームに登場する各種オブジェクトの画像データやゲームに使用される音声データ等、ゲームに必要なデータが記憶される。以下、図24に示す各種のデータについて説明する。なお、図24において、図17に示すデータと同じデータについては図17と同じ参照符号を付し、詳細な説明を省略する。
ゲームプログラム210は、第2のゲーム例におけるゲーム処理をゲーム装置3のコンピュータ(CPU10)に実行させるためのものである。ゲームプログラム210は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。なお、ゲームプログラム210は、光ディスク4に代えて、フラッシュメモリ17やゲーム装置3の外部装置から(例えばインターネットを介して)取得されてもよい。また、ゲームプログラム210に含まれる一部(例えば、コントローラ5および/または端末装置7の姿勢を算出するためのプログラム)については、ゲーム装置3内に予め記憶されていてもよい。
端末操作データ101は、上記第1のゲーム例と同様、端末装置7に対するプレイヤの操作を表すデータである。なお、本ゲーム例ではコントローラ5が操作装置として用いられないので図示しないが、メインメモリには、コントローラ5に対するプレイヤの操作を表すコントローラ操作データが記憶されてもよい。
処理用データ211は、後述するゲーム処理(図25等)において用いられるデータである。処理用データ211は、上記第1のゲーム例と同様の端末姿勢データ109、面姿勢データ212、面座標データ213、空間座標データ214、図形データ215、および、端末カメラデータ217を含む。なお、図24に示すデータの他、処理用データ211は、ゲームに登場する各種オブジェクトに設定される各種パラメータを表すデータ等、ゲーム処理において用いられる各種データを含む。
面姿勢データ212は、仮想空間に設定される面201の姿勢を表すデータである。面姿勢データ212が表す面201の姿勢は、回転行列によって表現されてもよいし、3次のベクトルまたは3つの角度によって表現されてもよいし、平面の式によって表現されてもよい。なお、本ゲーム例においては、面201の位置は予め定められた位置に固定される。
面座標データ213は、上記指定位置の面座標を表すデータである。ここで、面座標とは、面201を基準とした座標系(面座標系)によって上記指定位置を表現する座標である。なお、指定位置は面201上の点であるので、面座標データ213は2次元の座標値を表すものであってもよい。面201上の指定位置は、タッチパネル52上の入力位置に対応し、面座標データ213は、入力位置データ104に基づいて算出される。
空間座標データ214は、上記指定位置の空間座標を表すデータである。ここで、空間座標とは、仮想空間を基準とした座標系(空間座標系)によって上記指定位置を表現した座標である。空間座標データ214は、指定位置を3次元の座標値によって表す。空間座標データ214は、面姿勢データ212と上記面座標データ213とに基づいて算出される。
図形データ215は、指定位置によって形成される図形を表すデータである。図形データ215には、1以上の軌跡データ216が含まれる。軌跡データ216は、算出された指定位置の軌跡を表すデータである。具体的には、軌跡データ216は、タッチパネル52に対して連続して入力が行われる場合(すなわち、入力位置が連続して検出される場合)、入力位置に対応する指定位置を古いものから順に表す。軌跡データ216は、指定位置を上記空間座標系で表現した座標値を表す。また、本ゲーム例においては、あるタッチ入力が終了してから新たに次のタッチ入力が行われる場合、当該あるタッチ入力に応じて生成された軌跡データ216とは別に、当該次のタッチ入力に応じて新たな軌跡データ216が生成されてメインメモリに記憶される。
端末カメラデータ217は、端末用画像を生成するために用いられる仮想カメラ(端末用仮想カメラ)の位置および姿勢を表すデータである。本ゲーム例においては、端末用仮想カメラの位置および姿勢は、面201の位置に基づいて設定される。
上記各データ212〜217の他、メインメモリには、ゲーム処理において必要となる各種のデータが記憶される。本ゲーム例においては、例えば、つかみ状態であるか否かを表すフラグデータが記憶される。つかみ状態とは、上記アイコン202がタッチされている状態であり、上記指定位置の軌跡によって形成される図形を移動可能な状態である。
次に、ゲーム装置3において実行されるゲーム処理の詳細を、図25〜図28を用いて説明する。第2のゲーム例において、ゲーム処理における大略的な処理の流れを示すメインフローチャートは、図18と同様であるので、詳細な説明は省略する。以下、第1のゲーム例との相違点を中心として、第2のゲーム例におけるゲーム処理について説明する。
第2のゲーム例においても第1のゲーム例と同様、まずステップS1において、CPU10は初期処理を実行する。初期処理は、仮想空間を構築し、仮想空間に登場する各オブジェクトを初期位置に配置したり、ゲーム処理で用いる各種パラメータの初期値を設定したりする処理である。なお、本ゲーム例においては、面201が所定の位置および所定の姿勢で仮想空間内に配置される。面201の初期位置および初期姿勢を表すデータはメインメモリに記憶される。また、テレビ用画像を生成するために用いられる仮想カメラ(テレビ用仮想カメラ)、および、端末用画像を生成するために用いられる仮想カメラ(端末用仮想カメラ)が、所定の初期位置および初期姿勢で設定される。テレビ用仮想カメラの初期位置および初期姿勢を表すデータはメインメモリに記憶され、端末用仮想カメラの初期位置および初期姿勢を表すデータは、端末カメラデータ217としてメインメモリに記憶される。なお、テレビ用仮想カメラは、面201が視野範囲に含まれるような、予め定められた位置および姿勢に設定される。端末用仮想カメラの初期位置および初期姿勢は、視線方向が面201に垂直となり、かつ、面201がLCD51の表示画面と一致するように設定される。また、ステップS1では、つかみ状態でないことを表すデータが上記フラグデータとしてメインメモリに記憶される。ステップS1の次にステップS2の処理が実行される。
ステップS2において、CPU10は、端末装置7から送信されてくる端末操作データを取得する。ステップS2の処理は上記第1のゲーム例と同様である。ステップS2の次にステップS3の処理が実行される。
ステップS3において、CPU10はゲーム制御処理を実行する。第2のゲーム例において、ゲーム制御処理は、プレイヤによる操作に従って、点や線を表すオブジェクトを仮想空間内に生成したり、当該オブジェクトを移動させたりする処理等を実行する処理である。以下、図25を参照して、ゲーム制御処理の詳細について説明する。
図25は、第2のゲーム例におけるゲーム制御処理(ステップS3)の詳細な流れを示すフローチャートである。ゲーム制御処理においてはまずステップS21において、CPU10は端末装置7の姿勢を算出する。ステップS21の処理は上記ステップS11と同様である。ステップS21の次にステップS22の処理が実行される。
ステップS22において、CPU10は、端末装置7の姿勢に応じて姿勢が変化するように面201を設定する。本ゲーム例においては、面201の位置は変化しないので、CPU10は、端末装置7の姿勢に基づいて面201の姿勢を算出する。本ゲーム例では、仮想空間における面201の姿勢は、現実空間における端末装置7の姿勢に対応するように制御される。具体的には、端末装置7のy軸(図9参照)が水平でかつテレビ2の方を向くときの端末装置7の姿勢を基準姿勢とし、端末装置7が当該基準姿勢となる場合に面201は仮想空間において水平となる。そして、端末装置7の姿勢が上記基準姿勢から変化した場合、面201は、当該基準姿勢時における面201の姿勢から、端末装置7の姿勢の変化方向に応じた方向に、変化量に応じた量だけ(本ゲーム例では、端末装置7の回転量と面201の回転量が等しくなるように)回転される。なお、面201の姿勢は、端末装置7の姿勢の変化に応じて変化するように制御されればどのように制御されてもよい。
ステップS22の具体的な処理としては、CPU10は、端末姿勢データ109をメインメモリから読み出し、端末装置7の姿勢に基づいて面201の姿勢を算出する。算出された面201の姿勢を表すデータは、面姿勢データ212としてメインメモリに記憶される。なお、本ゲーム例においては、面201の姿勢は、例えば、面201を基準とした3次元の面座標系における3軸の方向を空間座標系によって表す3つのベクトルとして表現されてもよい。ステップS22の次にステップS23の処理が実行される。
ステップS23において、CPU10は、図形移動処理を実行する。図形移動処理は、プレイヤによる入力に応じて設定された指定位置によって形成される図形を、端末装置7の姿勢に応じて移動(回転)させる処理である。図形移動処理の詳細については後述する。ステップS23の次にステップS24の処理が実行される。
ステップS24において、CPU10は、タッチパネル52に対してタッチ入力が行われたか否かを判定する。この判定は、ステップS2で読み出される入力位置データ104を参照することで行うことができる。ステップS24の判定結果が肯定である場合、ステップS25の処理が実行される。一方、ステップS24の判定結果が否定である場合、ステップS25〜S30の処理がスキップされ、後述するステップS31の処理が実行される。
ステップS25およびステップS26においては、入力位置に基づいて上記指定位置が算出される。上述のように、本ゲーム例においては、入力位置によって決められる面201上の位置が指定位置として算出される。図26は、タッチパネル52の入力面上の入力位置に基づいて指定位置を算出する方法を説明するための図である。図26に示すように、面201上の指定位置P2は、タッチパネル52の入力面上における入力位置P1に対応する面201上の位置として算出される。本ゲーム例では、まず、入力位置P1に基づいて指定位置P2の面座標(Ps,Pt)が算出される。面座標(Ps,Pt)は、面201を基準とした面座標系(stu座標系)で表現される座標である。なお、ここでは、面座標系は、面201の横方向を向くs軸と、面201の縦方向を向くt軸と、面201に垂直な方向を向くu軸とで構成される。したがって、面201上の位置はs方向成分およびt方向成分の2次元座標(Ps,Pt)で表現される。なお、面座標系のu軸は、後述する図形移動処理において面201上にない位置を面座標系で表す目的で設定される。面座標(Ps,Pt)は、例えば、入力位置P1の座標値を、面201の大きさとタッチパネル52の入力面の大きさとの比率に応じてスケーリングする(所定の定数を乗算する)ことによって算出される。なお、上記比率が“1”となるように面座標系および空間座標系を設定する場合には、入力位置P1の座標値をそのまま面座標(Ps,Pt)として用いることができる。
指定位置P2の面座標(Ps,Pt)が算出されると、次に、面座標(Ps,Pt)が空間座標(PS,PT,PU)に変換される。空間座標(PS,PT,PU)は、指定位置P2を空間座標系(STU座標系)で表現した座標値である。なお、空間座標系における面座標系の原点の位置および各軸の向きは、面201の位置および姿勢によって決まる。したがって、面201の位置(下記(DS,DT,DU))および姿勢(下記ベクトルAおよびベクトルB)と、面座標(Ps,Pt)とに基づいて、空間座標(PS,PT,PU)を算出することができる。具体的には、空間座標(PS,PT,PU)は、以下の式(1)に従って算出することができる。
PS=Ps×AS+Pt×AS+DS
PT=Ps×AT+Pt×AT+DT
PU=Ps×AU+Pt×AU+DU …(1)
上式(1)においては、面座標系におけるs軸の正方向を向く単位ベクトルAの各成分を(AS,AT,AU)とし、面座標系におけるt軸の正方向を向く単位ベクトルBの各成分を(BS,BT,BU)とする。また、面座標系における原点の(空間座標系における)位置を(DS,DT,DU)とする。
具体的には、まずステップS25において、CPU10は、入力位置に対応する指定位置の面座標を算出する。上述のように、面座標は、タッチパネル52の入力面上における入力位置P1に対応する面201上の位置P2として算出される。面座標の具体的な算出方法はどのような方法であってもよいが、面座標は、タッチパネル52の入力面の四辺に対する入力位置P1の位置関係と、面201の四辺に対する指定位置P2の位置関係とが同じになるように算出される。具体的に本ゲーム例では、上述のように、面座標は、入力位置P1の座標値を上記の比率に応じてスケーリングすることによって算出される。ステップS25の具体的な処理としては、CPU10は、ステップS2で読み出された入力位置データ104が表す入力位置から、入力位置に対応する面201上の位置を面座標系によって表現する2次元座標を算出する。そして、算出された2次元座標を表すデータを面座標データ213としてメインメモリに記憶する。ステップS25の次にステップS26の処理が実行される。
ステップS26において、CPU10は、上記面座標から指定位置の空間座標を算出する。上述のように、空間座標は、面座標と、面201の位置および姿勢(すなわち、空間座標系における面座標系の原点位置および各座標軸の向き)とに基づいて算出することができる。すなわち、CPU10は、面姿勢データ212と面座標データ213とをメインメモリから読み出し、面座標と面201の位置および姿勢を上式(1)に代入することによって空間座標を算出する。算出された空間座標を表すデータは、空間座標データ214としてメインメモリに記憶される。ステップS26の次にステップS27の処理が実行される。
上記ステップS25およびS26によれば、CPU10は、仮想空間内の指定位置として、タッチパネル52(LCD51)の表示画面上において入力位置に対応する(仮想空間内の)位置を算出する。つまり、表示画面上においては、プレイヤがタッチした位置が指定位置となるので、プレイヤは、直感的かつ分かりやすい操作で指定位置を指定することができる。
ステップS27において、CPU10は、タッチ入力が開始されたか否か(タッチ入力が開始された直後であるか否か)を判定する。具体的には、CPU10は、前回の処理ループ(ステップS2〜S8の一連の処理からなる処理ループ)においてタッチ入力があったか否かを判定する。なお、タッチパネル52の誤検出やプレイヤの誤操作を考慮して、CPU10は、前回のタッチ入力だけでなく、過去所定回数に連続してタッチ入力があったかどうかを判定するようにしてもよい。ステップS27の判定結果が肯定である場合、ステップS28の処理が実行される。一方、ステップS27の判定結果が否定である場合、ステップS29の処理が実行される。
ステップS28において、CPU10は、ステップS25およびS26で算出された指定位置を、新たな軌跡の始点として記憶する。具体的には、CPU10は、メインメモリに記憶されている空間座標データ214を、新たな軌跡データ216としてメインメモリに記憶する。これによって、図形データ215に含まれる軌跡データ216が1つ追加されたことになる。つまり、図形を構成する軌跡が1つ追加されたことになる。ステップS28の次にステップS30の処理が実行される。
ステップS29において、CPU10は、ステップS25およびS26で算出された指定位置を、既存の軌跡の終点として記憶する。具体的には、CPU10は、図形データ215に含まれる軌跡データ216のうちで最新のものについて、空間座標データ214を当該軌跡データ216に追加するように更新する。これによって、上記指定位置が最新の軌跡の終点に追加されたことになる。ステップS29の次にステップS30の処理が実行される。
ステップS30において、CPU10は、ステップS25およびS26で算出された指定位置に所定のオブジェクトを配置する。ここで、所定のオブジェクトは、どのような形状であってもよいが、本ゲーム例では、指定位置の軌跡を表すオブジェクトが配置される。すなわち、CPU10は、1つの軌跡データ216に含まれる1以上の指定位置が1本の線を形成するように、オブジェクトを配置する。具体的には、1回のステップS30の処理においては、最新の指定位置と1つ前の指定位置とを結ぶ線状のオブジェクトが配置される。この線状のオブジェクトは、例えば、どの方向から見ても線状に見えるように、円柱形のオブジェクトであってもよい。また、最新の指定位置が軌跡の始点である場合には、点を表すオブジェクト(例えば球状のオブジェクト)が配置される。なお、本ゲーム例においては、ステップS30で配置されたオブジェクトは、以降の処理においても配置され続けるが、他の実施形態においては、例えばプレイヤの指示に従って消去されてもよい。また、上記ステップS30で配置されたオブジェクトは、プレイヤによって所定の操作が行われたことに応じて、所定方向に順次(自動的に)移動されてもよい。これによれば、プレイヤは、例えば、仮想空間内の一点を指定するだけで直線を描いたり、オブジェクトの移動方向と垂直な方向に入力位置を往復させることによって波線を描いたりすることができ、より多彩な線を容易に描くことができる。ステップS30の次にステップS31の処理が実行される。
ステップS31において、CPU10は、面201の姿勢に応じて端末用仮想カメラを制御する。図27は、面201と端末用仮想カメラ205との位置関係を示す図である。なお、図27は、面201と平行な方向から面201を見た図である。図27に示すように、面201の姿勢が変化した場合、面201の姿勢に応じて端末用仮想カメラ205の位置および姿勢が変化する。具体的には、端末用仮想カメラ205は、面201が視野範囲に含まれるように設定される。本ゲーム例においては、面201の外周と端末用仮想カメラ205の視野範囲の外縁とが一致するように端末用仮想カメラ205が設定される。したがって、端末用仮想カメラ205の位置は、面201の中心位置P3を通りかつ面201に垂直な直線上であって、面201からの距離が視野範囲に応じた所定距離となる位置に設定される。また、端末用仮想カメラ205の姿勢は、面201の中心位置P3を向くように設定される。以上のように端末用仮想カメラ205が設定されることによって、端末装置7のLCD51には、タッチパネル52の入力面と面201とが画面上において一致するように面201が表示されることになる(図21等参照)。これによれば、指定位置は、プレイヤがタッチした画面上の位置となり、当該位置に点や線を表すオブジェクトが生成されて表示されるので、タッチパネル52の操作を直感的でわかりやすい操作にすることができる。
ステップS31の具体的な処理としては、CPU10は、メインメモリから面姿勢データ212を読み出し、面201の位置および姿勢に基づいて端末用仮想カメラ205の位置および姿勢を算出する。そして、算出された位置および姿勢を表すデータを端末カメラデータ217としてメインメモリに記憶する。ステップS31の後、CPU10はゲーム制御処理を終了する。
次に、上記図形移動処理の詳細について説明する。図28は、図25に示す図形移動処理(ステップS23)の詳細な流れを示すフローチャートである。図形移動処理においてはまずステップS41において、CPU10は、現在の状態がつかみ状態であるか否かを判定する。この判定は、メインメモリに記憶される上記フラグデータを読み出し、フラグデータを参照することによって行うことができる。ステップS41の判定結果が肯定である(つかみ状態である)場合、後述するステップS45の処理が実行される。一方、ステップS41の判定結果が否定である(つかみ状態でない)場合、ステップS42の処理が実行される。
ステップS42において、CPU10は、つかみ状態が開始されたか否かを判定する。ここで、つかみ状態が開始される場合とは、前回の処理ループ(ステップS2〜S8の処理ループ)においてアイコン202に対するタッチ入力がなく、かつ、今回の処理ループにおいてアイコン202に対するタッチ入力がある場合である。具体的には、CPU10は、上記フラグデータをメインメモリから読み出し、フラグデータがつかみ状態でないことを表し、かつ、ステップS2で読み出された入力位置データ104がアイコン202の位置を表す場合、つかみ状態が開始されたと判定する。一方、上記フラグデータがつかみ状態であることを表すか、または、ステップS2で読み出された入力位置データ104がアイコン202以外の位置を表す場合、つかみ状態が開始された時点ではないと判定する。ステップS42の判定結果が肯定である場合、ステップS43の処理が実行される。一方、ステップS42の判定結果が否定である場合、CPU10は図形移動処理を終了する。
ステップS43において、CPU10は、指定位置で形成される図形を保存する。なお、本ゲーム例では、CPU10は、図形を構成する各指定位置を面座標系による座標値で保存する。すなわち、CPU10は、メインメモリから図形データ215と面姿勢データ212とを読み出し、図形データ215が表す1以上の指定位置の空間座標を面座標に変換する。この変換は、面姿勢データ212が表す面201の姿勢を用いて行われる。CPU10は、変換された面座標を表すデータをメインメモリに記憶する。なお、このデータは、図形データ215に含まれる軌跡データ216と同様、各指定位置を軌跡毎にまとめた形式で記憶される。ステップS43の次にステップS44の処理が実行される。
ステップS44において、CPU10は、上記フラグデータをつかみ状態を表すように設定する。すなわち、CPU10は、メインメモリに記憶されるフラグデータを、つかみ状態であることを表すように更新する。これによって、これ以降、アイコン202に対するタッチ入力がなくなるまで、ステップS41の判定処理ではつかみ状態であると判定されることになる。ステップS44の次に、後述するステップS47の処理が実行される。
一方、ステップS45において、CPU10は、つかみ状態が終了したか否かを判定する。すなわち、CPU10は、ステップS2で読み出された入力位置データ104がアイコン202以外の位置を表すか、または、タッチ入力がないことを表す場合、つかみ状態が終了したと判定する。一方、上記入力位置データ104がアイコン202の位置を表す場合、つかみ状態が終了していない(継続している)と判定する。ステップS45の判定結果が肯定である場合、ステップS46の処理が実行される。一方、ステップS45の判定結果が否定である場合、ステップS46の処理がスキップされてステップS47の処理が実行される。
ステップS46において、CPU10は、上記フラグデータをつかみ状態を解除するように設定する。すなわち、CPU10は、メインメモリに記憶されるフラグデータを、つかみ状態でないことを表すように更新する。これによって、これ以降の処理においては、ステップS41の判定処理ではつかみ状態でないと判定されることになる。ステップS46の次にステップS47の処理が実行される。
ステップS47において、CPU10は、指定位置で形成される図形を移動する。本ゲーム例では、図形は、操作装置7の姿勢の変化に応じて(すなわち、面201の姿勢の変化に応じて)回転する。なお、ここでは、図形の回転中心は、面201と同様、面201の中心位置である。ここで、上述のように、現在(回転後)の指定位置の空間座標は、指定位置の面座標と、現在の面201の姿勢とに基づいて算出することができる。したがって、CPU10は、ステップS43で保存された面座標を表すデータと、面姿勢データ212とをメインメモリから読み出し、当該面座標を、面201の姿勢を用いて空間座標に変換する。これによって、面201の姿勢に応じて回転された図形を形成する指定位置の空間座標を算出することができる。CPU10は、算出された1以上の空間座標を表すデータを、新たな図形データ215としてメインメモリに記憶する。ステップS47の後、CPU10は図形移動処理を終了する。
上記図形移動処理によれば、CPU10は、端末装置7に対する操作に基づいて上記図形を表すオブジェクトを移動(回転)させる(ステップS47)。したがって、プレイヤは、描いた図形をいろいろな位置または方向から見ることができ、描いた図形の形状を容易に確認することができる。本ゲーム例では、図形が3次元的な形状であるので、図形をいろいろな位置または方向から見ることが特に有効である。
また、本ゲーム例においては、CPU10は、端末装置7に対する操作に関して所定の条件(具体的には、アイコン202を指定する操作が行われたこと)が満たされる場合(ステップS41でYesまたはステップS42でYes)、上記図形のオブジェクトを端末装置7の姿勢に基づいて移動させる(ステップS47)。一方、上記所定の条件が満たされない場合(ステップS42でNo)、CPU10は、端末装置7の姿勢に基づく上記オブジェクトの移動を行わない。上記によれば、プレイヤは、端末装置7の姿勢を変化させるという直感的で容易な操作によって図形の向きを変化させることができる。さらに、上記によれば、プレイヤは、面201の姿勢を変化させる操作と同じ操作によって図形の向きを変化させることができるので、操作性をより向上することができる。
また、本ゲーム例においては、図形移動処理において図形を移動するために、CPU10は、図形を構成する各指定位置の面座標を記憶するようにした。すなわち、ステップS43の処理においては指定位置の面座標が記憶され、図形を移動させるステップS47の処理においては、当該面座標と、現在の面201の姿勢とを用いて、移動後の指定位置の空間座標が算出された。ここで、他の実施形態においては、CPU10は、ステップS43の処理において、図形を構成する各指定位置の空間座標を記憶するようにしてもよい。このとき、ステップS47の処理においては、CPU10は、前回の処理ループにおける面201の姿勢から今回の処理ループにおける面201の姿勢までの変化に応じて、図形を回転させてもよい。具体的には、面201の姿勢の変化方向と同じ方向に、面201の姿勢の変化量と同じ量だけ図形を移動(回転)させるようにしてもよい。ここで、空間座標を記憶する方法では、ステップS47の処理において面201の変化と図形の変化との間に誤差が生じ、ステップS47の処理が繰り返されることによって誤差が蓄積するおそれがある。そのため、面201の回転に合わせて図形を正確に回転させることができないおそれがある。これに対して、本ゲーム例によれば、ステップS43で面座標を保存することによって、保存した面座標と現在の面201の姿勢とを用いて移動後の指定位置を算出することができる。これによれば、誤差が蓄積されることがないので、面201の回転に合わせて図形を正確に回転させることができる。
また、本ゲーム例における上記ステップS47の処理においては、仮想空間に配置された図形の全体が移動された。ここで、他の実施形態においては、上記図形の一部のみが移動されてもよい。例えば、CPU10は、プレイヤによって指定された軌跡のみを上記ステップS43で保存し、当該軌跡のみを上記ステップS47で移動させるようにしてもよい。なお、軌跡はどのような方法で指定されてもよいが、例えば、画面上における入力位置に表示される軌跡が指定されてもよい。
メインフローチャート(ステップS1〜S8)の説明に戻り、ステップS3のゲーム制御処理の次にステップS4の処理が実行される。ステップS4においては、テレビ用画像が生成される。第2のゲーム例においてもテレビ用画像の具体的な生成方法は第1のゲーム例と同様である。上記ステップS4の次にステップS5の処理が実行される。
また、本ゲーム例においては、指定位置に所定のオブジェクトが配置される(ステップS30)ことによって、指定位置に対応するテレビ用画像上の位置に当該オブジェクトの画像が生成される。したがって、プレイヤは、タッチパネル52の入力面に対して入力を行った位置を容易に確認することができ、入力面上に描いた図形を容易に確認することができる。また、プレイヤは、入力面に対して点や線を描くことで、仮想空間内に3次元の図形を描くことができる。さらに、本ゲーム例においては、上記オブジェクトは、入力面に連続して入力される各入力位置(入力位置)によって決められる各指定位置の軌跡を表すように生成される(ステップS30)。したがって、当該軌跡を表す画像が生成されてテレビ2に表示される。これによって、プレイヤは、タッチパネル52上で描いた線を容易に確認することができる。また、プレイヤが入力面に対して点で入力を行った場合と線で入力を行った場合とで、表示される画像が異なるので、ゲーム装置は、入力面に対する入力をより正確に反映した画像を表示することができる。
なお、本ゲーム例においては、プレイヤが面201の姿勢(端末装置7の姿勢)を確認しやすくするべく、面201が表示される。さらに、プレイヤが面201と図形との奥行き関係を把握しやすくするべく、面201は半透明のオブジェクトとして生成される。ただし、他の実施形態においては、面201は表示されなくてもよい(透明であるとして取り扱われてもよい)し、不透明のオブジェクトとして生成されてもよい。
ステップS5においては、端末用画像が上記ゲーム制御処理に基づいて生成される。第2のゲーム例においても端末用画像の具体的な生成方法は第1のゲーム例と同様である。なお、本ゲーム例では、仮想空間において面201が設定される領域を表す画像が端末用画像として生成される。具体的には、タッチパネル52の入力面と面201とがLCD51の画面上で一致するように端末用画像が生成される。これによって、面201の画像が端末装置7に表示される(図21等参照)。なお、テレビ用画像と同様に、端末用画像には、ステップS30で配置されたオブジェクトの画像が含まれる。したがって、プレイヤは、端末装置7の画面を見ることによっても、入力面上に描いた図形を確認することができる。また、端末用画像においては、面201は表示されなくてもよいし、半透明あるいは不透明のオブジェクトとして生成されてもよい。上記ステップS5の次にステップS6の処理が実行される。
なお、本ゲーム例においては、テレビ用画像(および端末用画像)において、指定位置を表す画像を生成するために、仮想空間において指定位置にオブジェクトを配置することとした。ここで、指定位置を表す画像はどのような方法で生成されてもよい。例えば、他の実施形態においては、ゲーム装置3は、指定位置に対応するテレビ用画像(および端末用画像)上の位置を算出し、当該位置に所定の画像を配置することによって、指定位置を表す画像を生成してもよい。
上記ステップS4およびS5の処理によれば、CPU10は、面201の姿勢と独立して視線方向が設定されるテレビ用仮想カメラを用いてテレビ用画像を生成し、面201との位置関係が一定となるように(より具体的には、面201に対して視線方向が略垂直となるように)設定される端末用仮想カメラを用いて端末用画像を生成する。したがって、プレイヤが端末装置7の姿勢を変化させた場合、テレビ2に表示される画像においては視線方向が変化しない一方、端末装置7に表示される画像においては当該姿勢に応じて視線方向が変化することになる(図20〜図23等)。これによれば、端末装置7においては面201の姿勢が一定として表示されるので、面201上の位置を指定する操作が容易になる。また、テレビ2においては面201の姿勢が変化して表示されるので、仮想空間内における面201の姿勢を容易に把握することができる。すなわち、本ゲーム例によれば、プレイヤは、端末装置7を用いて面201上の位置を指定する操作を容易に行うことができるとともに、テレビ2の画面を見ることによって面201の姿勢を容易に確認することができるので、3次元の仮想空間内の位置を容易に指定することができる。
第2のゲーム例において、ステップS6〜S8の処理は第1のゲーム例と同様である。また、第2のゲーム例においても第1のゲーム例と同様、ステップS2〜S8の一連の処理は、ステップS8でゲームを終了すると判定されるまで繰り返し実行される。
以上のように、第2のゲーム例におけるゲーム処理によれば、端末装置7のタッチパネル52に対する入力によって、仮想空間内の面201上の位置を指定される(ステップS26)とともに、端末装置7の姿勢に応じて面201の姿勢が変化する(ステップS22)。これによれば、プレイヤは、面201の姿勢を変化させつつ、タッチパネル52を用いて位置を指定することで、3次元の仮想空間における位置を指定することができる。このように、本ゲーム例によれば、タッチパネル52という平面的な入力面を有する入力装置を用いて、3次元空間における位置を容易に入力することができる。これによれば、例えば上記実施形態のように、プレイヤは、タッチパネル52に対して点や線の入力を行うとともに、端末装置7の姿勢を適宜変化させることで、仮想空間において3次元的な絵を描くことも可能となる。
(第2のゲーム例の変形例)
上記第2のゲーム例においては、端末装置7の姿勢に応じて面201の姿勢が変化したが、他の実施形態においては、他の方法で面201を移動させてもよい。以下、図29〜図32を参照して、面201の移動方法に関する変形例について説明する。
図29は、上記第2のゲーム例の変形例におけるゲーム制御処理の流れを示すフローチャートである。なお、図29においては、図25に示す処理と同じ処理については同じステップ番号を付し、詳細な説明を省略する。
本変形例においては、ステップS21の次にステップS51の処理が実行される。ステップS51において、CPU10は、端末装置7の姿勢に応じて面201の位置および姿勢を算出する。すなわち、CPU10は、端末装置7の姿勢に対応するように面201の姿勢を制御するとともに、端末装置7の姿勢に応じて面201の位置を制御する。ここで、面201の姿勢は、上記第2のゲーム例と同様、端末装置7の姿勢に基づいて制御される。また、面201の位置は、面201外の位置を回転の中心として面201が回転移動するように、面201の姿勢に応じて制御される。
図30は、本変形例における面201の移動を示す図である。図30において、点Pcは、面201の回転の中心点であり、ゲーム空間に固定的に設定される。なお、図30においては、点Pcは、面201に関して端末用仮想カメラ205と同じ側に設定されている。端末装置7の姿勢が変化する場合、面201は、図30に示すように、姿勢の変化とともに、基準点Pcを中心に回転するように位置が変化する。具体的には、面201の位置は、基準点Pcから面201への垂線の長さが予め定められた所定値となるように(つまり、基準点Pcからの距離が一定となるように)算出される。このように、本変形例では、点Pcを中心とした球面上を回転移動するように面201の位置および姿勢が変化する(図30参照)。したがって、プレイヤは、端末装置7の姿勢を変化させつつタッチパネル52に対して入力を行うことで、球の内側面に対して絵を描いているような感覚を得ることができる。
ステップS51の具体的な処理としては、CPU10は、まず、上記ステップS22と同様の方法によって面201の姿勢を算出する。次に、CPU10は、算出された姿勢と、上記基準点Pcの位置とに基づいて、上記垂線の長さが予め定められた所定値となるように面201の位置を算出する。例えば、基準点Pcの座標を(ES,ET,EU)とし、基準点Pcから面201までの距離をkとすると、面201の位置Pd(DS,DT,DU)は次の式(2)に従って算出される。
DS=−k×CS+ES
DT=−k×CT+ET
DU=−k×CU+EU …(2)
上式(2)においては、変数面座標系におけるu軸の正方向を向く単位ベクトルC(図30参照)の各成分を(CS,CT,CU)としている。算出された面201の位置および姿勢を表すデータは、メインメモリに記憶される。ステップS51の次にステップS52の処理が実行される。
なお、本変形例においては、上記基準点Pcが面201に関して端末用仮想カメラ205と同じ側に設定されているものとしたが、基準点の位置はどこであってもよい。図31および図32は、他の実施形態における面201の移動を示す図である。他の実施形態においては、図31に示すように、基準点Pcは、面201に関して端末用仮想カメラ205と反対側に設定されてもよい。これによれば、プレイヤは、端末装置7の姿勢を変化させつつタッチパネル52に対して入力を行うことで、球の外側面に対して絵を描いているような感覚を得ることができる。なお、図31に示す場合においては、基準点Pcから面201の位置Pdまでの向きと、ベクトルCの向きとが同じであるので、上式(2)における“−k”を“k”に変更することで、面201の位置Pdを算出することができる。また、k=0の場合には、上記第2のゲーム例のように、面201は位置Pd(基準点Pc)を中心に回転する(図27参照)。
また、他の実施形態においては、図32に示すように、所定の回転方向(図32では、上下方向を軸とした回転方向)に関しては面201が基準点Pcを中心として回転移動を行い、他の方向に関しては面201が平行移動を行うようにしてもよい。これによれば、プレイヤは、円柱の内側側面に対して絵を描いているような感覚を得ることができる。なお、図32における面201の平行移動は、端末装置7の姿勢の変化に応じて行われてもよいし、後述するステップS52における方向入力操作に応じて行われてもよい。
ステップS52において、CPU10は、端末装置7に対する方向入力操作に基づいて面201を移動させる。上記方向入力操作は、どのような方法で行われてもよいが、例えば、アナログスティック53や十字ボタン54Aに対する入力操作であってもよい。具体的には、面201は、上下左右前後の方向入力操作に応じて、面201の上下左右前後の方向に移動するように制御される。すなわち、CPU10は、ステップS2で取得した端末操作データ101に基づいて、方向入力操作によって指示された方向を判断する。そして、面201の位置および姿勢を表すデータをメインメモリから読み出し、上記指示された方向に応じた方向へ面201を移動させる。メインメモリに記憶される上記データは、移動後の面201の位置を表すように更新される。ステップS52の次にステップS53の処理が実行される。
上記ステップS52の処理によれば、端末装置7に対する方向入力操作によって面201を自由に平行移動させることができる。なお、他の実施形態においては、ステップS52においてCPU10は、面201を(平行移動ではなく)回転移動させるようにしてもよい。例えば、CPU10は、図30〜図32に示したように、球面上あるいは円柱の側面上を面201が移動するように面201を制御してもよい。
ステップS53において、CPU10は、面201の位置および姿勢に基づいてテレビ用仮想カメラを制御する。テレビ用仮想カメラは、面201が視野範囲に含まれるように位置および姿勢が制御されればどのように制御されてもよい。例えば、テレビ用仮想カメラの位置は、視線方向が面201の方を向き、面201から所定距離となるように制御されてもよい。また、テレビ用仮想カメラの姿勢は変化しない、すなわち、テレビ用仮想カメラは平行移動するように制御されてもよい。これによれば、上記第2のゲーム例と同様、プレイヤは、仮想空間における面201の姿勢をテレビ用画像で確認することができる。ステップS53の具体的な処理としては、CPU10は、面201の位置および姿勢を表すデータをメインメモリから読み出し、面201の位置に応じてテレビ用仮想カメラの位置および姿勢を算出する。算出された位置および姿勢を表すテレビ用カメラデータはメインメモリに記憶される。このとき、ステップS4の処理においては、上記テレビ用カメラデータを用いてテレビ用画像が生成される。ステップS53の次にステップS23の処理が実行される。ステップS23の処理以降については、上記第2のゲーム例と同様の処理が実行される。
なお、他の実施形態においては、テレビ用仮想カメラは、端末装置7に対する方向入力操作に従って制御されてもよい。すなわち、CPU10は、方向入力操作に応じて、テレビ用仮想カメラを平行移動、回転移動、または回転させるようにしてもよい。これによれば、上述した図形移動処理によって図形を回転させる場合と同様、プレイヤはいろいろな向きから図形を見ることができ、図形の形状を容易に確認することができる。
(指定位置を用いたゲーム処理に関する変形例)
上記第2のゲーム例においては、上記指定位置を入力として用いるゲームとして、3次元仮想空間に絵を描くことができるお絵かきゲームを例として説明した。すなわち、上記第2のゲーム例においては、上記指定位置を入力としたゲーム処理の例として、指定位置にオブジェクトを配置する処理(ステップS30)を説明した。ここで、指定位置を入力として実行されるゲーム処理は、どのような処理であってもよく、例えば次のようなゲーム例が考えられる。
図33は、見本と同じになるように図形を描くゲームにおいて、テレビ2に表示されるゲーム画像を示す図である。図33に示すように、テレビ2には、面201および見本オブジェクト221が表示される。見本オブジェクト221は、プレイヤが描く図形の見本を表すオブジェクトであり、ゲームプログラムにおいて複数種類の見本オブジェクトが用意される。なお、端末装置7に表示される画像は上記第2のゲーム例と同様である。このゲームにおいては、プレイヤは、上記第2のゲーム例と同様に端末装置7を用いて、見本オブジェクト221と同じになるように、仮想空間内に線(指定位置の軌跡を表すオブジェクト222)を描く。このとき、CPU10は、見本オブジェクト221と、プレイヤによる入力に応じて生成されるオブジェクト222との類似度を算出したり、当該類似度に基づいて得点を算出したりするゲーム処理を実行してもよい。このように、ゲーム装置3は、入力された指定位置を表す軌跡を入力とするゲーム処理を実行してもよい。
図34は、3次元の仮想空間内に配置されたオブジェクト(コイン)225を端末装置に対する操作によって指定するゲームにおいて、テレビ2に表示されるゲーム画像を示す図である。図34に示すように、テレビ2には、面201およびコイン225が表示される。なお、端末装置7に表示される画像は上記第2のゲーム例と同様である。このゲームにおいては、プレイヤは、上記第2のゲーム例と同様の方法で仮想空間内における位置を指定する。そして、コイン225の位置を指定することでコイン225を取得することができる。例えば、プレイヤは、コイン225を正確に指定したり、制限時間内にコイン225を取得する数を競ったりしてゲームを行う。この場合、CPU10は、指定位置を入力として実行されるゲーム処理として、指定位置がコイン225の位置であるか否かを判定し、指定位置がコイン225の位置である場合、取得されたコイン225の枚数をカウントする処理を実行する。このように、ゲーム処理は、上記第2のゲーム例のような指定位置に画像を表示する処理に限らず、仮想空間内のオブジェクトを指定(選択)する処理であってもよい。
図35および図36は、プレイヤが描いた図形に基づいてオブジェクトが生成されるゲームにおいて、テレビ2に表示されるゲーム画像を示す図である。このゲームにおいては、プレイヤはまず、上記第2のゲーム例と同様の操作によって、仮想空間内に図形を生成する。図35においては、プレイヤの入力による図形を表すオブジェクト227が生成されて表示される。ここで、CPU10は、指定位置を入力として実行されるゲーム処理として、上記図形を形成する各指定位置に基づいて3次元のオブジェクトを生成する。例えば、CPU10は、各指定位置の軌跡に基づいて面を設定することで、3次元のオブジェクトを生成する。例えば、軌跡によって閉曲線が形成される場合、当該閉曲線を周とする面が設定されてもよい。図36は、図35に示すオブジェクト227に基づいて、3次元のオブジェクト228が生成される場合におけるゲーム画像を示す。このように、ゲームシステム1は、指定位置に基づいて3次元のオブジェクトを生成するゲーム処理を実行するものであってもよい。なお、このとき、生成されたオブジェクトがゲームにおいて用いられてもよい。例えば、生成されたオブジェクトをプレイヤキャラクタがアイテムとして使用することができたり、生成されたオブジェクトをプレイヤキャラクタとして使用することができたりしてもよい。
上記の他、指定位置を入力として実行されるゲーム処理は、どのような処理であってもよい。例えば、他の実施形態においては、CPU10は、指定位置の軌跡に応じてプレイヤキャラクタを移動させるゲーム処理を実行してもよい。すなわち、ゲーム装置3において実行されるゲームは、プレイヤが指定位置の軌跡を入力すると、仮想空間内のプレイヤキャラクタが当該軌跡に沿って移動するようなゲームであってもよい。
[8.第3のゲーム例]
以下、図37〜図42を参照して、本実施形態のゲームシステム1において実行される第3のゲーム例について説明する。第3のゲーム例では、プレイヤがハンドヘルドデバイス9を操作して仮想のゲーム空間内のオブジェクトを移動させるゲームを実行するゲーム処理について説明する。
なお、第3のゲーム例においては、ゲームシステム1が端末装置7に代えて、携帯型ゲーム機であるハンドヘルドデバイス9を有するものとして説明を行う。ハンドヘルドデバイス9は、端末装置7と同様、プレイヤが把持可能な装置であり、端末装置7と同様のタッチパネル52を備えている。つまり、プレイヤが使用する操作装置は、端末装置7に限らず、プレイヤが把持可能な可搬型の装置であり、入力面に対する入力が可能な操作装置であればどのようなものであってもよい。
なお、以下に示すゲーム例においては、コントローラ5はゲーム操作に使用されず、コントローラ5からのコントローラ操作データはゲーム処理に用いられない。つまり、ゲームシステム1は、コントローラ5を有しない構成であってもよい。また、他の実施形態においては、ゲーム処理は、ハンドヘルドデバイス9とコントローラ5との両方をゲーム操作に用いるものであってもよい。
まず、第3のゲーム例におけるゲームの概要について説明する。このゲームは、ハンドヘルドデバイス9を操作することによってゲーム空間内においてオブジェクト(手裏剣)を飛ばすゲームである。プレイヤは、ハンドヘルドデバイス9の姿勢を変化させるとともに、タッチパネル52上に線を描く操作によって、手裏剣を発射する方向(および速さ)を指示することができる。なお、本実施例において、線を描く操作とは、指やタッチペンによってタッチパネルやタッチパッド上をタッチして、タッチしたまま線を描くような動作で入力位置を面上で動かす操作を意味し、実際に線が描画される必要はない。
図37は、第3のゲーム例におけるテレビ2の画面とハンドヘルドデバイス9とを示す図である。図37においては、テレビ2およびハンドヘルドデバイス9の下側LCD(タッチパネル52が設けられるLCD)には、ゲーム画像としてゲーム空間の画像が表示されている。テレビ2には、手裏剣301、制御面302、および標的303が表示されている。下側LCDには、制御面302(および手裏剣301)が表示されている。第3のゲーム例においては、プレイヤは、ハンドヘルドデバイス9を用いた操作によって手裏剣301を飛ばして標的303に当てて遊ぶ。
手裏剣301を飛ばす場合、プレイヤは、まず、ハンドヘルドデバイス9の姿勢を操作することによって制御面302の姿勢を変化させて所望の姿勢にする。さらに、プレイヤは、図37に示すように、タッチパネル52上に線を描く操作を行う。この操作によって制御面302上での方向が決定され、この方向に手裏剣301が発射される。第3のゲーム例においては、プレイヤは、これらの操作によって手裏剣301を所望の方向へ飛ばすことができる。なお、図37では、ハンドヘルドデバイス9を縦向きにして使用する様子を示しているが、ハンドヘルドデバイス9は横向きに使用されてもよく、任意の姿勢で使用されることができる。
本実施形態においては、制御面302の姿勢はハンドヘルドデバイス9の姿勢に応じて決定される。図38は、ハンドヘルドデバイス9の姿勢と制御面302の姿勢との関係を示す図である。図38の表の上欄に示すように、ハンドヘルドデバイス9のタッチパネル52の入力面が水平となる場合、ゲーム空間において制御面302は水平に配置される。また、図38の表の中欄に示すように、ハンドヘルドデバイス9が前後方向を軸として回転した(具体的には、右側が下がるように傾いた)場合、制御面302は前後方向を軸として回転して(具体的には、右側が下がるように傾いて)配置される。さらに、図38の表の下欄に示すように、ハンドヘルドデバイス9が左右方向を軸として回転した(具体的には、後側が下がるように傾いた)場合、制御面302は左右方向に回転して(具体的には、後側が下がるように傾いて)配置される。なお、図示していないが、ハンドヘルドデバイス9が上下方向を軸として回転した場合には、制御面302も上下方向を軸として回転して配置される。このように、制御面302の姿勢は、ハンドヘルドデバイス9の姿勢に対応するように制御される。なお、本実施形態においては、制御面302の位置は、ゲーム空間における所定位置に固定される。
手裏剣301の発射方向は、上記のようにして姿勢が決定された制御面302上において方向を決定することで決められる。つまり、3次元のゲーム空間内における姿勢が設定された制御面302上において方向を決定することによって、3次元のゲーム空間内での方向が決定されることとなる。ここで、制御面302上における方向は、ハンドヘルドデバイス9のタッチパネル52に入力される線(入力軌跡)に基づいて算出される。
図39は、ハンドヘルドデバイス9のタッチパネル52に線が描かれる様子を示す図である。また、図40は、図39に示す線がタッチパネル52に描かれた場合に制御面302上において算出される制御位置および制御方向を示す図である。図39に示すように、ハンドヘルドデバイス9の下側LCDには、制御面302が表示される。ここでは、タッチパネル52の入力面と制御面302とが画面上において一致する(すなわち、画面いっぱいに制御面302が表示される)ように制御面302が表示される。
手裏剣301を発射する場合、プレイヤは、図39に示すように、タッチパネル52に対して線を描く操作を行う。なお、本実施形態においては、タッチパネル52に対する入力が行われている場合、入力位置に手裏剣301が表示される。なお、図39ではプレイヤによって描かれた線を点線で表しているが、この線は実際には表示されなくてもよい。
プレイヤによって線が描かれる場合、すなわち、タッチパネル52に対する入力があった場合、ゲーム装置3は、入力位置に対応する制御面302上の位置(指定位置。第3ゲーム例では、「制御位置」と呼ぶ)を算出する。制御位置は、下側LCDの画面上において入力位置に対応する(制御面302上における)位置として算出される。図40において、点線は、入力面上に描かれた線に対応する(制御面302上における)線を示す。制御位置は、例えば図40に示す点P11〜P14のように、この線上の位置に算出される。なお、ゲーム装置3は、タッチパネル52に対する入力が行われる間(線が描かれる間)、制御位置の算出を繰り返し実行する。
タッチパネル52に対して線を描く入力が終了した場合、ゲーム装置3は、制御位置に基づいて制御方向(図40に示すベクトルv1)を特定する。制御方向は、描かれた線に対応する各制御位置によって表される方向となるように特定される。つまり、制御方向は大略的には線の方向を向くように算出される。詳細は後述するが、本実施形態においては、制御方向は、制御位置の平均速度を表すベクトルとして算出される。なお、制御面302は3次元のゲーム空間内に配置されているので、制御方向も3次元のゲーム空間内における3次元の方向として算出される。これによって、ゲーム空間内における手裏剣301の発射方向が決定されたことになる。
上記制御方向が算出されると、手裏剣301が発射される。手裏剣301がゲーム空間内を移動する様子はテレビ2に表示される。本実施形態においては、手裏剣301の姿勢は、制御面302に応じた姿勢となるように決定される。したがって、手裏剣301は、制御面302の姿勢に応じた姿勢で、上記制御方向に向かって発射(移動)される。なお、発射された後における手裏剣301の挙動はどのように決定されてもよい。手裏剣301は、例えば、制御方向に向かって真っ直ぐに移動するように制御されてもよいし、仮想的に重力の影響を加えて時間と共に落下するようにしてもよい。また、回転によって軌道が曲がるようにしてもよい。手裏剣301の姿勢に応じた移動方向となるように(例えば、手裏剣301が右に傾いている場合には右に曲がり、左に傾いている場合には左に曲がるように)制御されてもよい。
以上のように、本実施形態においては、プレイヤは、ハンドヘルドデバイス9の姿勢によって制御面302の姿勢を指示し、タッチパネル52に入力される線によって制御面302上での方向を指示することができる。そして、手裏剣301は、指示された制御面302上での方向(制御方向)に移動するように制御される。したがって、本実施形態によれば、プレイヤは、一方の手でハンドヘルドデバイス9の姿勢を実際に調整し、もう一方の手でタッチパネル52に線で方向を入力するので、空間内で実際に方向を入力しているような直感的な操作で容易に方向を指示すことができる。本実施例においては特に、実際に手で画面に向かって手裏剣を放っているような感覚で操作をすることができる。また、ハンドヘルドデバイス9の姿勢の操作とタッチパネル52に対する入力操作とは、同時に並行して行うことができるので、プレイヤは3次元空間における方向を指示する操作を迅速に行うことができる。
(第3のゲーム例におけるゲーム処理)
次に、第3のゲーム例におけるゲーム処理の詳細を説明する。まず、ゲーム処理において用いられる各種データについて説明する。図41は、ゲーム処理において用いられる各種データを示す図である。図41において、ゲーム装置3のメインメモリ(外部メインメモリ12または内部メインメモリ11e)に記憶される主なデータを示す図である。図41に示すように、ゲーム装置3のメインメモリには、ゲームプログラム310、端末操作データ311、および処理用データ316が記憶される。なお、メインメモリには、図41に示すデータの他、ゲームに登場する各種オブジェクトの画像データやゲームに使用される音声データ等、ゲームに必要なデータが記憶される。
ゲームプログラム310は、第3のゲーム例におけるゲーム処理をゲーム装置3のコンピュータ(CPU10)に実行させるためのものである。ゲームプログラム310は、ゲーム装置3に電源が投入された後の適宜のタイミングで光ディスク4からその一部または全部が読み込まれてメインメモリに記憶される。なお、ゲームプログラム310は、光ディスク4に代えて、ゲーム装置3の外部装置から(例えばインターネットを介して)取得されてもよい。また、ゲームプログラム310に含まれる一部(例えば、コントローラ5および/またはハンドヘルドデバイス9の姿勢を算出するためのプログラム)については、ゲーム装置3内に予め記憶されていてもよい。
端末操作データ311は、ハンドヘルドデバイス9に対するユーザの操作を表すデータである。端末操作データ311は、ハンドヘルドデバイス9から送信されてゲーム装置3において取得される。端末操作データ311は、加速度データ312、角速度データ313、入力位置データ314、および操作ボタンデータ315を含む。なお、メインメモリには、最新の(最後に取得された)ものから順に所定個数の端末操作データが記憶されてもよい。
加速度データ312は、ハンドヘルドデバイス9が備える加速度センサによって検出された加速度(加速度ベクトル)を表すデータである。ここでは、加速度データ312は、所定の3軸の方向に関する加速度を各成分とする3次元の加速度を表すものであるが、他の実施形態においては、任意の1以上の方向に関する加速度を表すものであればよい。
角速度データ313は、ハンドヘルドデバイス9が備えるジャイロセンサによって検出された角速度を表すデータである。ここでは、角速度データ313は、所定の3軸回りのそれぞれの角速度を表すものであるが、他の実施形態においては、任意の1軸以上の軸回り角速度を表すものであればよい。
入力位置データ314は、タッチパネル52の入力面において入力が行われた位置(入力位置)を表すデータである。ここでは、入力位置データ314は、入力位置を示すための2次元座標系の座標値を表す。また、タッチパネル52に対する入力が行われていない場合、入力位置データ314は、入力がないことを表す。
操作ボタンデータ315は、ハンドヘルドデバイス9に設けられる各操作ボタンに対する入力状態を表すデータである。
なお、端末操作データ311は、入力面に対するプレイヤの入力位置を表すデータ(本実施形態においては入力位置データ314)と、ハンドヘルドデバイス9の動きに応じて値が変化するデータ(本実施形態においては加速度データ312および角速度データ313)とを含むものであればよい。したがって、端末操作データ311は、操作ボタンデータ315を含まないものでもよいし、加速度データ312と角速度データ313とのいずれか一方のみを含むものでもよい。つまり、ハンドヘルドデバイス9は、操作ボタンを備えていない構成であってもよいし、加速度センサおよびジャイロセンサのいずれか一方のみを備える構成であってもよい。また、ハンドヘルドデバイス9は、加速度センサおよびジャイロセンサに代えて上記撮像情報演算部35を備えることにより、加速度データ312および角速度データ313に代えてマーカ座標データを端末操作データ311に含むものであってもよい。
処理用データ316は、後述するゲーム処理(図42)において用いられるデータである。処理用データ316は、端末姿勢データ317、テレビカメラデータ318、端末カメラデータ319、制御面データ320、制御位置データ321、制御方向データ322、および、オブジェクトデータ323を含む。なお、処理用データ316は、図41に示すデータの他、各種オブジェクトに設定されるパラメータを表すデータ等、ゲーム処理において用いられる各種データを含む。
端末姿勢データ317は、ハンドヘルドデバイス9の姿勢を表すデータである。本実施形態では、端末姿勢データ317は、上記端末操作データ311に含まれる加速度データ312および角速度データ313に基づいて算出される。端末姿勢データ317の算出方法については後述する。
テレビカメラデータ318は、テレビ2に表示されるテレビ用画像を生成するためのテレビ用仮想カメラの配置を表すデータである。具体的には、テレビカメラデータ318は、仮想のゲーム空間内におけるテレビ用仮想カメラの位置および姿勢を表す。なお、テレビカメラデータ318には、テレビ用仮想カメラの画角(視野範囲)を表すデータ等が含まれていてもよい。
端末カメラデータ319は、ハンドヘルドデバイス9の下側LCDに表示される端末用画像を生成するための端末用仮想カメラの配置を表すデータである。具体的には、端末カメラデータ319は、上記ゲーム空間内における端末用仮想カメラの位置および姿勢を表す。なお、端末カメラデータ319には、端末用仮想カメラの画角(視野範囲)を表すデータ等が含まれていてもよい。なお、本実施形態においては、下側LCDに制御面302が表示されるように、制御面302の位置および姿勢に応じて端末用仮想カメラが配置される。
制御面データ320は、ゲーム空間における制御面302の位置および姿勢を表すデータである。具体的には、制御面データ320は、制御面302を表す平面の式を表す。なお、本実施形態においては、制御面302の位置は予め定められた位置に固定され、制御面302の姿勢はハンドヘルドデバイス9の姿勢に基づいて算出される。
制御位置データ321は、入力位置に対応する制御面302上の指定位置(制御位置)を表すデータである。第3のゲーム例では、指定位置が後述する制御方向を算出するために用いられるので、指定位置を「制御位置」と呼ぶ。制御位置データ321は、ゲーム空間内の位置を示す3次元の座標値を表す。なお、他の実施形態においては、制御位置データ321は、制御面上の位置を表す2次元座標系の座標値を表すものであってもよい。また、本実施形態においては、タッチパネル52に対して連続して入力が行われる場合(すなわち、入力位置が連続して検出される場合)、最新のものから順に所定個の入力位置に対応する複数個の制御位置を表すデータが制御位置データ321として記憶される。また、タッチパネル52に対する入力が終了した場合、制御位置データ321の内容はリセットされる。
制御方向データ322は、手裏剣301の発射方向(移動方向)を決定するための制御方向を表すデータである。具体的には、制御方向データ322は、3次元のゲーム空間内の方向を示す3次元ベクトルを表す。以下では、この制御方向を示すベクトルを「制御方向ベクトル」と呼ぶ。制御方向データ322は、上記制御位置データ321に基づいて算出される。
オブジェクトデータ323は、制御方向に基づいて移動されるオブジェクト(本実施形態においては手裏剣301)の状態を表すデータである。具体的には、オブジェクトデータ323は、ゲーム空間における手裏剣301の位置および姿勢を表す。ゲーム装置3は、オブジェクトデータ323に基づいてゲーム空間に手裏剣301を配置し、手裏剣301が配置されたゲーム空間の画像を生成して表示する。
次に、ゲーム装置3において行われるゲーム処理の詳細を、図42を用いて説明する。第3のゲーム例において、ゲーム処理における大略的な処理の流れを示すメインフローチャートは、図18と同様であるので、詳細な説明は省略する。以下、第1のゲーム例との相違点を中心として、第3のゲーム例におけるゲーム処理について説明する。
第3のゲーム例においても第1のゲーム例と同様、まずステップS1において、CPU10は初期処理を実行する。初期処理は、仮想空間を構築し、仮想空間に登場する各オブジェクトを初期位置に配置したり、ゲーム処理で用いる各種パラメータの初期値を設定したりする処理である。本ゲーム例においては、初期処理においてテレビ用仮想カメラの位置および姿勢が設定される。テレビ用仮想カメラの位置および姿勢は、制御面302が撮影範囲(仮想カメラの視体積の範囲)に含まれるように設定される。設定された位置および姿勢を表すデータは、テレビカメラデータ318としてメインメモリに記憶される。なお、制御面302の姿勢は可変であるが位置は固定であるので、初期処理において制御面302が撮影範囲に含まれるようにテレビ用仮想カメラを設定することは可能である。ステップS1の次にステップS2の処理が実行される。
ステップS2において、CPU10は、ハンドヘルドデバイス9から端末操作データを取得する。ハンドヘルドデバイス9は、加速度センサ、ジャイロセンサ、タッチパネル52、および操作ボタンから出力される各データを端末操作データとしてゲーム装置3へ繰り返し送信するので、ゲーム装置3は、ハンドヘルドデバイス9からのデータを逐次受信して端末操作データ311としてメインメモリに逐次記憶する。なお、ステップS2において、CPU10は上記端末操作データに加えてコントローラ5からコントローラ操作データを取得するようにしてもよい。ステップS2において、CPU10は、最新の端末操作データ311をメインメモリから読み出す。ステップS2の次にステップS3の処理が実行される。
ステップS3において、CPU10はゲーム制御処理を実行する。ゲーム制御処理は、プレイヤによる操作に従ってゲーム空間内のオブジェクト(手裏剣301等)を動作させる等の処理によって、ゲームを進行させる処理である。以下、図42を参照してゲーム制御処理の詳細を説明する。なお、以下では、制御方向の算出に関する処理を中心にゲーム制御処理を説明し、従来の処理と同様に行うことが可能な処理については詳細な説明を省略する。例えば、制御方向に従って発射された後の手裏剣301の移動制御に関する処理や、手裏剣301が標的303に当たったか否かを判定する処理や、手裏剣301が標的303に当たった場合の得点計算処理等については、従来の処理と同様に行うことが可能であるので、詳細な説明を省略する。
図42は、ゲーム制御処理の詳細な流れを示すフローチャートである。ゲーム制御処理においてはまずステップS60において、CPU10は、ハンドヘルドデバイス9の姿勢を算出する。ハンドヘルドデバイス9の姿勢は、端末操作データ311に基づいて算出されればどのような方法で算出されてもよいが、本ゲーム例においては、次の方法で姿勢を算出する。以下、ハンドヘルドデバイス9の姿勢の算出方法について説明する。
まず、CPU10は、メインメモリに記憶されている角速度データ313に基づいてハンドヘルドデバイス9の姿勢を算出する。ハンドヘルドデバイス9の姿勢を角速度から算出する方法はどのような方法であってもよいが、当該姿勢は、上記第1のゲーム例における端末装置7と同様の方法で算出することができる。上記ステップS60の次にステップS61の処理が実行される。
ステップS61において、CPU10は、ハンドヘルドデバイス9の姿勢に基づいて制御面302の姿勢を算出する。本ゲーム例においては、ゲーム空間における制御面302の姿勢は、現実空間におけるハンドヘルドデバイス9の姿勢に対応するように設定される。具体的には、ハンドヘルドデバイス9が基準姿勢となる場合には、制御面302の姿勢は所定の基準姿勢となるように算出される。なお、本ゲーム例においては、タッチパネル52の入力面が水平となる姿勢をハンドヘルドデバイス9の基準姿勢とし、ゲーム空間において水平に配置される姿勢を制御面302の所定の基準姿勢とする(図38の上欄参照)。また、ハンドヘルドデバイス9が基準姿勢以外の場合には、制御面302の姿勢は、ハンドヘルドデバイス9が基準姿勢から回転した方向に応じた方向に、回転量に応じた回転量だけ、上記所定の基準姿勢から回転させた姿勢となるように算出される(図38の中欄および下欄参照)。以上のように、本ゲーム例においては、仮想空間における制御面302の姿勢が現実空間におけるハンドヘルドデバイス9の姿勢に一致するように、制御面302の姿勢が算出される。ただし、他の実施形態においては、ハンドヘルドデバイス9の姿勢と制御面302の姿勢とが一致する必要はなく、ハンドヘルドデバイス9の姿勢に応じて変化するように制御面302の姿勢が算出されればよい。
ステップS61の具体的な処理としては、CPU10は、メインメモリから端末姿勢データ317を読み出し、端末姿勢データ317に基づいて制御面302の姿勢を算出する。また、制御面302の位置を予め定められた所定位置に設定する。そして、算出された姿勢と設定された位置を表すデータを制御面データ320としてメインメモリに記憶する。ステップS61の次にステップS62の処理が実行される。
なお、上記ステップS61においては、CPU10は制御面302の位置を固定し、制御面302の姿勢をハンドヘルドデバイス9の姿勢に応じて変化させた。ここで、他の実施形態においては、制御面302の姿勢とともに位置をハンドヘルドデバイス9の姿勢に応じて変化させてもよい。例えば、CPU10は、制御面302を左に向けて回転させる場合、制御面302の向きを左に回転させながら位置を左に移動させてもよい。
ステップS62において、CPU10は、制御面302の姿勢に応じて端末用仮想カメラを制御する。ここで、上述のように、ハンドヘルドデバイス9の下側LCDには制御面302が表示され、具体的には、タッチパネル52の入力面と制御面302とが画面上において一致するように制御面302が表示される。したがって、端末用仮想カメラの位置および姿勢は、制御面302が視野範囲に含まれるように(具体的には、制御面302の外周と端末用仮想カメラの視野範囲の外縁とが一致するように)、制御面302の姿勢に応じて制御される。また、端末用仮想カメラは、その視線方向と制御面302とが直行するように制御される。
なお、上記ステップS62の処理によれば、端末用仮想カメラは、制御面302と端末用仮想カメラとの位置関係が一定になるように、制御面302の変化に応じて移動される。これによれば、制御面302をどのような姿勢にしても、入力位置と制御位置との対応関係は変化しないので、タッチパネル52に対するタッチ操作の操作性を向上することができる。
ステップS62の具体的な処理としては、CPU10は、メインメモリから制御面データ320を読み出し、制御面302の姿勢に基づいて端末用仮想カメラの位置および姿勢を算出する。そして、算出された位置および姿勢を表すデータを端末カメラデータ319としてメインメモリに記憶する。ステップS62の次にステップS63の処理が実行される。
ステップS63において、CPU10は、タッチパネル52に対する入力(タッチ入力)があったか否かを判定する。具体的には、メインメモリに記憶されている最新の入力位置データ314を読み出して参照し、入力位置データ314が入力位置の座標値を表すか、それとも、入力が無いことを表すかを判定する。ステップS63の判定結果が肯定である場合、ステップS64の処理が実行される。一方、ステップS63の判定結果が否定である場合、後述するステップS67の処理が実行される。
ステップS64において、CPU10は、制御面302上における制御位置を入力位置に基づいて算出する。制御位置は、入力位置に対応する制御面302上の位置として算出される。具体的には、制御位置は、タッチパネル52の入力面の四辺に対する入力位置の位置関係と、制御面302の四辺に対する制御位置の位置関係とが同じになるように算出される。
ステップS64の具体的な処理としては、CPU10は、まず、メインメモリに記憶されている最新の入力位置データ314を読み出し、入力位置データ314が表す入力位置を、制御面302上の位置を示す2次元座標系の座標に変換する。次に、CPU10は、変換によって得られた2次元座標を、3次元のゲーム空間の位置を示す3次元座標に変換する。この3次元座標は、上記2次元座標系の座標と、制御面302を表す平面の式(制御面データ320)とを用いて算出することができる。すなわち、CPU10は、制御面データ320をメインメモリから読み出し、上記2次元座標と制御面データ320とに基づいて上記3次元座標を算出する。このようにして算出された3次元座標が制御位置を表す。以上のステップS64の次にステップS65の処理が実行される。
なお、上記ステップS64においては、下側LCDの画面上において入力位置が制御位置となるように、制御位置が算出されることが好ましい。これによれば、プレイヤは仮想のゲーム空間内の制御位置を把握しやすくなり、制御方向の指示をより行いやすくなる。なお、本ゲーム例においては、タッチパネル52の入力面の形状(縦横比)と制御面302の形状(縦横比)とを等しくし、また、タッチパネル52の入力面と制御面302とを下側LCDの画面上において一致させている。これによって、上記のように制御位置を算出することによって、下側LCDの画面上において入力位置と制御位置とを対応させることができる。なお、他の実施形態においては、入力位置から制御位置を算出する方法はどのような方法であってもよく、入力位置と制御位置とが画面上で対応しない方法であってもよい。
ステップS65において、CPU10は、ステップS64で算出された制御位置を表すデータをメインメモリに記憶する。ここで、CPU10は、タッチパネル52に対して連続して入力が行われる場合、最新のものから順に所定個数の入力位置に対応する複数個の制御位置を記憶する。したがって、CPU10は、制御位置データ321をメインメモリから読み出し、制御位置データ321が表す制御位置が上記所定個数よりも小さい場合、制御位置データ321が表す制御位置に、新たな制御位置を(ステップS64で算出された制御位置)追加したデータを作成する。一方、読み出した制御位置データ321が表す制御位置が上記所定個数以上である場合、制御位置データ321が表す各制御位置に対して、最も古い制御位置を削除するとともに、新たな制御位置を(ステップS64で算出された制御位置)追加したデータを作成する。以上のようにして作成されたデータが新たな制御位置データ321としてメインメモリに記憶される。したがって、制御位置データ321は、現在から所定時間以内に入力された入力位置に対応する制御位置を表す。ステップS65の次にステップS66の処理が実行される。
ステップS66において、CPU10は、ゲーム空間における手裏剣301の位置および姿勢を算出する。ここで、タッチパネル52に対する入力が行われてから発射されるまでの期間において、手裏剣301は、制御面302に応じた姿勢で制御位置に配置される。すなわち、CPU10は、制御面データ320および制御位置データ321をメインメモリから読み出し、手裏剣301の位置および姿勢を算出する。算出された位置および姿勢を表すデータが、オブジェクトデータ323としてメインメモリに記憶される。なお、第3のゲーム例においては、タッチパネル52に対する入力が行われている期間には制御面302上に手裏剣301を配置・表示するようにしたが、他の実施形態においては、当該期間に手裏剣301を配置・表示しないようにしてもよい。また、他の実施形態においては、CPU10は、制御位置に応じて手裏剣301の位置のみを制御し、手裏剣301の姿勢については制御しない(姿勢は固定にする)ようにしてもよい。ステップS66の後、CPU10はゲーム制御処理を終了する。
一方、ステップS66の判定結果が否定である場合にはステップS67の処理が実行される。ステップS67において、CPU10は、前回の処理ループ(ステップS2〜S8の一連の処理からなる処理ループ)においてタッチ入力があったか否かを判定する。ステップS67の判定は、例えば、メインメモリに制御位置データ321が記憶されているか否かによって行うことができる。なお、前回のタッチ入力だけでなく、過去所定回数に連続してタッチ入力があったかどうかを判定するようにしてもよい。ステップS67の判定結果が肯定である場合、ステップS68の処理が実行される。一方、ステップS67の判定結果が否定である場合、ステップS68〜S70の処理がスキップされ、CPU10はゲーム制御処理を終了する。
ステップS68において、CPU10は制御方向を算出する。本ゲーム例においては、制御方向(制御方向ベクトル)は、制御位置の平均速度を示すベクトルとして算出される。すなわち、CPU10は、制御位置データ321をメインメモリから読み出し、制御位置データ321が表す複数の制御位置から平均速度を示すベクトルを算出する。具体的には、平均速度を示すベクトルは、上記複数の制御位置のうち、最も古いものを始点とし、最新のものを終点とするベクトルを、制御位置の個数で割ることによって算出することができる。算出されたベクトルを表すデータは、制御方向データ322としてメインメモリに記憶される。ステップS68の次にステップS69の処理が実行される。
上記ステップS68においては、制御位置データ321が表す複数の制御位置の平均速度として制御方向を算出する方法を採用した。この方法では、プレイヤがタッチパネル上で線を描く途中で入力位置を移動させずに停止させた場合、算出される平均速度の大きさが非常に小さい値となってしまうおそれがある。そのため、他の実施形態においては、CPU10は、移動していないと推測される入力位置に対応する制御位置を除去して平均速度を算出するようにしてもよい。具体的には、上記ステップS65において、CPU10は、上記ステップS64で算出された新たな制御位置が、その1つ前に算出された制御位置から(ほとんど)移動していない場合、当該新たな制御位置を記憶しないようにしてもよい。すなわち、上記新たな制御位置と1つ前に算出された制御位置との距離が所定値以内である場合、CPU10は、制御位置データ321を更新しないようにしてもよい。
ステップS69において、CPU10は、制御方向へ手裏剣301を発射させる。本ゲーム例においては、制御方向ベクトルに基づいて、手裏剣301の移動方向および移動速度が決定される。すなわち、制御方向ベクトルの向きに、制御方向ベクトルに応じた移動量だけ手裏剣301を移動させる。具体的には、ステップS69においては、CPU10は、オブジェクトデータ323および制御方向データ322を読み出し、オブジェクトデータ323が表す位置を、制御方向ベクトルの向きに、制御方向ベクトルに応じた移動量だけ移動させた位置を算出する。そして、オブジェクトデータ323が表す位置を移動後の位置に更新して、更新後のオブジェクトデータをメインメモリに記憶する。これによって、手裏剣301の位置が更新され、手裏剣301が制御方向に移動されたことになる。なお、本ゲーム例においては、上記ステップS66で述べたように、手裏剣301は、制御面302に応じた姿勢で配置されている。したがって、手裏剣301は、制御方向により決められる方向に、制御面の姿勢によって決められる姿勢で発射される。なお、制御方向ベクトルの大きさが予め定められた所定値よりも小さい場合には、プレイヤはタッチパネル52に対して線を描く操作(すなわち手裏剣301を発射する操作)を行う意図がないと考えられる。そのため、この場合にはCPU10は手裏剣301を発射しないようにしてもよい。ステップS69の次にステップS70の処理が実行される。
ステップS70において、CPU10は制御位置をリセットする。具体的には、メインメモリに記憶されている制御位置データ321を消去する。これによって、次にタッチ入力が行われた場合には、ステップS65において制御位置が新たに一から記憶されることとなる。ステップS70の後、CPU10はゲーム制御処理を終了する。
図42に示すゲーム制御処理によれば、ハンドヘルドデバイス9の姿勢に応じて制御面302の姿勢が制御され(ステップS61,S62)、制御面302上において、タッチパネル52に対して入力された線の方向に応じた制御方向が算出される(ステップS68)。これによって、プレイヤは、ハンドヘルドデバイス9の姿勢の操作とタッチパネル52に対する操作とによって、3次元空間内における方向を容易にかつ直感的に指示することができる。
なお、上記ゲーム制御処理においては、複数の制御位置の平均速度として制御方向が算出された。ここで、制御位置から制御方向を算出する方法は上記に限らず、どのような方法であってもよい。例えば、本ゲーム例と同様にプレイヤに線を描く入力を行わせる場合には、CPU10は、制御位置データ321が表す複数の制御位置のうち、最も新しい制御位置を終点とし、その次に新しい制御位置を始点とするベクトルを制御方向ベクトルとして算出するようにしてもよい。また、プレイヤがタッチパネル52上において2点を指定することによって制御方向を指示することができるようにしてもよい。すなわち、CPU10は、最初にタッチされた入力位置に対応する制御位置を始点とし、次にタッチされた入力位置に対応する制御位置を終点とするベクトルを制御方向ベクトルとして算出するようにしてもよい。
メインフローチャート(ステップS1〜S8)の説明に戻り、ステップS3のゲーム制御処理の次にステップS4の処理が実行される。ステップS4においては、テレビ用画像が生成される。第3のゲーム例においてもテレビ用画像の具体的な生成方法は第1のゲーム例と同様である。第3のゲーム例においては、制御面302を含むゲーム空間の画像がテレビ用画像として生成される(図37参照)。なお、第3のゲーム例のように、制御面302の姿勢が変化してもテレビ用仮想カメラの位置および姿勢を変化しないようにすることによって、プレイヤは、ゲーム空間における制御面302の姿勢を容易に把握することができる。上記ステップS4の次にステップS5の処理が実行される。
ステップS5においては、端末用画像が上記ゲーム制御処理に基づいて生成される。第3のゲーム例においても端末用画像の具体的な生成方法は第1のゲーム例と同様である。なお、本ゲーム例では、上記ステップS62で設定された端末用仮想カメラから見たゲーム空間の画像が端末用画像として生成される。これによって、制御面302の画像が端末用画像として生成される(図37参照)。上記ステップS5の次にステップS6の処理が実行される。
第3のゲーム例において、ステップS6〜S8の処理は第1のゲーム例と同様である。なお、ハンドヘルドデバイス9において、ゲーム装置3から送信されてくる画像データおよび音声を受信して表示部および下側LCDに出力する処理は、端末装置7における処理と同様であるとする。また、第3のゲーム例においても第1のゲーム例と同様、ステップS2〜S8の一連の処理は、ステップS8でゲームを終了すると判定されるまで繰り返し実行される。
以上で説明した第3のゲーム例のゲーム処理によれば、ハンドヘルドデバイス9の姿勢によって制御面302の姿勢が決定され、タッチパネルに対する入力によって制御面302上で制御方向が決定される。そして、決定された制御方向へ手裏剣301が発射される。このように、本ゲーム例によれば、プレイヤは、タッチパネル52を用いて3次元空間における方向を直感的な操作で容易に指示することができる。
また、上記第3のゲーム例のゲーム処理によれば、制御面302上における制御方向ベクトルが算出されるので、当該制御方向ベクトルによって、オブジェクトの移動方向に加えて移動量を制御することができる。したがって、ハンドヘルドデバイス9を用いてより詳細にオブジェクトを制御することができる。
また、上記第3のゲーム例のゲーム処理によれば、制御面302を含む画像がテレビ用画像としてテレビ2に表示されるので、プレイヤは手裏剣301の姿勢および発射方向をテレビ用画像によって確認することができ、操作をより行いやすくすることができる。
[9.第4のゲーム例]
以下、図43〜図46を参照して、本実施形態のゲームシステム1において実行される第4のゲーム例について説明する。第4のゲーム例は、ハンドヘルドデバイス9を操作することによってゲーム空間内においてオブジェクト(大砲の弾)を発射するゲームである。プレイヤは、ハンドヘルドデバイス9の姿勢を変化させるとともに、タッチパネル52上の位置を指定する(タッチする)ことによって、弾を発射する方向を指示することができる。なお、第4のゲーム例においても第3のゲーム例と同様、ゲームシステム1が端末装置7に代えて、携帯型ゲーム機であるハンドヘルドデバイス9を有するものとして説明を行う。
図43は、第4のゲーム例におけるテレビ2の画面とハンドヘルドデバイス9とを示す図である。図43においては、テレビ2およびハンドヘルドデバイス9の下側LCDには、ゲーム画像としてゲーム空間の画像が表示されている。テレビ2には、大砲331、弾332、および標的333が表示されている。下側LCDには、弾332および標的333が表示されている。図43において、下側LCDに表示される端末用画像は、大砲331の位置からゲーム空間を見た画像である。なお、第4のゲーム例においても第3のゲーム例と同様、ゲーム空間内に制御面が設定されるが、第3のゲーム例と異なり制御面は表示されない。したがって、本実施例においては、プレイヤはハンドヘルドデバイス9の下側LCDを見ながら主観的な視点でゲームをすることができる。テレビ2に表示される画像は下側LCDと同じ視点からの画像であってもよいが、別視点からの画像を表示させるようにすれば、両方の画面を活かしたゲームを提供することができる。例えば、下側LCDでは見えない範囲をテレビ2に表示させるようにすれば、プレイヤがテレビ2を見ながら主観視点では見えない部分を隠れて狙うようなゲームプレイを実現することもできる。また、操作感覚は異なるが、テレビ2に主観的な視点の画像を表示させるようにし、ハンドヘルドデバイスには画面を設けずにタッチパッドによる入力を行うようにすることも可能である。
大砲331から弾332を発射する場合、プレイヤは、まず、ハンドヘルドデバイス9の姿勢を操作することによって制御面の姿勢を変化させて所望の姿勢にする。つまり、第4のゲーム例においても第3のゲーム例と同様、制御面の姿勢はハンドヘルドデバイス9の姿勢に応じて決定される。なお、詳細は後述するが、第4のゲーム例においては制御面の位置は、制御面の姿勢に応じて変化(移動)する。
第4のゲーム例においては、プレイヤはさらに、図43に示すように、タッチパネル52上の所望の位置をタッチする操作を行う。この操作によって、入力位置に対応するゲーム空間内の位置(制御面上の制御位置)が決定される。第4のゲーム例においても制御位置の決定方法は第3のゲーム例と同様である。
ここで、第4のゲーム例においては、制御方向は、端末用仮想カメラの位置から制御位置への方向として決定される。図44は、ゲーム空間における仮想カメラと制御面とを示す図である。図44において、点Pは制御面335上に設定される制御位置を表し、ベクトルv2は制御方向を表す。第4のゲーム例においては、図44に示すように、端末用仮想カメラの位置Pcと制御位置Pとに基づいて制御方向(制御方向ベクトルv2)が算出される。具体的には、制御方向ベクトルv2は、端末用仮想カメラの位置Pcを始点とし、制御位置Pを終点とするベクトルとして算出される。弾332は、算出された制御方向に発射される。
以上のように、第4のゲーム例においては、プレイヤは、ハンドヘルドデバイス9の姿勢の操作と、タッチパネル32上の位置を指定する操作とによって、弾332を所望の方向へ飛ばすことができる。したがって、第4のゲーム例においても第3のゲーム例と同様、プレイヤは、タッチパネル52を用いて3次元空間における方向を直感的な操作で容易に指示することができる。また、ハンドヘルドデバイス9の姿勢の操作とタッチパネル52に対する入力操作とは、同時に並行して行うことができるので、プレイヤは3次元空間における方向を指示する操作を迅速に行うことができる。
(第4のゲーム例におけるゲーム処理)
次に、第4のゲーム例におけるゲーム処理の詳細を説明する。まず、図41を参照して、第3のゲーム例との相違点を中心に、第4のゲーム例におけるゲーム処理において用いられる各種データについて説明する。
第4のゲーム例においては、ゲームプログラム310としては、図45に示すゲーム処理を実行するためのゲームプログラムが記憶される。端末操作データ311は第3のゲーム例と同様である。
処理用データ316としては、第4のゲーム例においても第3のゲーム例と同様のデータが記憶される。ただし、第4のゲーム例においては、制御位置データ321は、最新の1つの制御位置を表すものでよい。また、オブジェクトデータ323は、弾332の位置を表す。
次に、第4のゲーム例におけるゲーム処理の詳細を、図45および図46を用いて説明する。第4のゲーム例においても第3のゲーム例と同様、図18に示すステップS1〜S8の処理が実行される。以下、第3のゲーム例におけるゲーム処理との相違点を中心に、第4のゲーム例におけるゲーム処理を説明する。
ステップS1において、CPU10は、第3のゲーム例と同様の初期処理を実行する。ただし、第4のゲーム例においては、テレビ用仮想カメラは制御面の位置および姿勢に応じて制御されるので(後述するステップS84)、初期処理においてはテレビ用仮想カメラの位置および姿勢は設定されない。第4のゲーム例におけるステップS2の処理は、第3のゲーム例と同様である。
ステップS3において、CPU10はゲーム制御処理を実行する。第4のゲーム例におけるゲーム制御処理は、プレイヤによる操作に従ってゲーム空間内のオブジェクト(弾332等)を動作させる等の処理によって、ゲームを進行させる処理である。以下、図45を参照して、第4のゲーム例におけるゲーム制御処理の詳細を説明する。なお、以下では、制御方向の算出に関する処理を中心にゲーム制御処理を説明し、従来の処理と同様に行うことが可能な処理については詳細な説明を省略する。例えば、制御方向に従って発射された後の弾332の移動制御に関する処理や、弾332が標的333に当たったか否かを判定する処理や、弾332が標的333に当たった場合の得点計算処理等については、従来の処理と同様に行うことが可能であるので、詳細な説明を省略する。
図45は、第4のゲーム例におけるゲーム制御処理の詳細な流れを示すフローチャートである。ゲーム制御処理においてはまずステップS81において、CPU10は、ハンドヘルドデバイス9の姿勢を算出する。ステップS81の処理は第3のゲーム例におけるステップS60の処理と同じである。ステップS81の次にステップS82の処理が実行される。
ステップS82において、CPU10は、ハンドヘルドデバイス9の姿勢に基づいて制御面335の位置および姿勢を算出する。ここで、制御面335の姿勢をハンドヘルドデバイス9の姿勢に基づいて算出する処理は、第3のゲーム例におけるステップS61の処理と同じである。すなわち、第4のゲーム例においても、ゲーム空間における制御面335の姿勢は、現実空間におけるハンドヘルドデバイス9の姿勢に対応するように設定される。
また、制御面335の位置は、制御面335の姿勢に応じて次のように算出される。図46は、制御面335の位置および姿勢が変化する様子を示す図である。図46において、点Paは、制御面335の位置を決定するための基準点であり、ゲーム空間に固定的に設定される。図46に示すように、ハンドヘルドデバイス9の姿勢が変化する場合、制御面335は、姿勢の変化とともに、基準点Paを中心に回転するように位置も変化する。具体的には、制御面335の位置は、基準点Paから制御面335への垂線の長さが予め定められた所定値となるように(つまり、基準点Paからの距離が一定となるように)算出される。
ステップS82の具体的な処理としては、CPU10は、まず、上記ステップS61と同様の方法によって制御面335の姿勢を算出する。次に、CPU10は、算出された姿勢と、上記基準点Paの位置とに基づいて、上記垂線の長さが予め定められた所定値となるように制御面335の位置を算出する。算出された制御面335の位置および姿勢を表すデータは、制御面データ320としてメインメモリに記憶される。ステップS82の次にステップS83の処理が実行される。
上記ステップS82の処理によれば、制御面335の姿勢とともに位置が変化するように制御面335が制御される。端末用仮想カメラの位置(あるいは基準点の位置)を中心として、ハンドヘルドデバイス9の姿勢に応じて制御面335の位置を変化させることで、所定の位置から周囲を見回すような操作感覚でプレイヤにゲーム操作を行わせることができる。なお、別の実施例においては、例えば仮想空間内の特定の位置を様々な角度から見るような操作感覚のゲームを実現することも可能である。すなわち、制御面335の位置を変えずに、ハンドヘルドデバイス9の姿勢に応じて端末用仮想カメラの位置を変えるようにしてもよい。また、姿勢に応じて制御面335の位置も端末用仮想カメラの位置も動くようにして、仮想空間内で移動して視点を変えながら視線方向も変えるような操作感覚でプレイヤにゲーム操作を行わせるようにしてもよい。
ステップS83において、CPU10は、制御面335の位置および姿勢に応じて端末用仮想カメラを制御する。ここで、図46に示す点Pcは、端末用仮想カメラの位置を示す点である。図46に示すように、端末用仮想カメラは、制御面302が視野範囲に含まれるように(より具体的には、制御面335の外周と端末用仮想カメラの視野範囲の外縁とが一致するように)制御される。したがって、端末用仮想カメラの位置は、基準点Paと制御面335の中心とを通る直線上であって、制御面335からの距離が視野範囲に応じた距離となるように算出される。なお、端末用仮想カメラは、上記直線上であればよく、視野範囲(視野角)によっては、基準点Paよりも後ろ側(制御面335から遠い側)の位置となることもある。
上記のように端末用仮想カメラが設定されることによって、下側LCDには、タッチパネル52の入力面と制御面335とが画面上において一致するように制御面335が表示されることになる(図43参照)。これによれば、プレイヤがタッチした位置に対応するゲーム空間内の位置に向かって弾332が発射されるので、直感的でわかりやすいゲーム操作を提供することができる。また、第4のゲーム例においても第3のゲーム例と同様、端末用仮想カメラは、制御面302と端末用仮想カメラとの位置関係が一定になるように、制御面302の変化に応じて移動されることとなる。
ステップS83の具体的な処理としては、CPU10は、メインメモリから制御面データ320を読み出し、制御面335の位置および姿勢に基づいて端末用仮想カメラの位置および姿勢を算出する。そして、算出された位置および姿勢を表すデータを端末カメラデータ319としてメインメモリに記憶する。ステップS83の次にステップS84の処理が実行される。
ステップS84において、CPU10は、制御面335の位置および姿勢に応じてテレビ用仮想カメラを制御する。第4のゲーム例においては、テレビ用仮想カメラは、制御面335が視野範囲に含まれ、端末用仮想カメラとは異なる位置となるように制御される(図43参照)。具体的には、テレビ用仮想カメラは、大砲331が表示されるように、大砲331のやや後方の位置から制御面335の方を向くように配置される。なお、ここでは、大砲331は、端末用仮想カメラの位置に配置されるものとする。具体的な処理としては、CPU10は、メインメモリから制御面データ320を読み出し、制御面335の位置および姿勢に応じた位置および姿勢となるように、テレビ用仮想カメラの位置および姿勢を算出する。そして、算出された位置および姿勢を表すデータをテレビカメラデータ318としてメインメモリに記憶する。ステップS84の次にステップS85の処理が実行される。
上記ステップS84の処理によれば、テレビ用仮想カメラは端末用仮想カメラとは異なる位置に配置される。これによって、プレイヤは、異なる2つの視点から見たゲーム空間を見ることができるので、ゲーム操作をより行いやすくなる。例えば、第4のゲーム例においては、テレビ用仮想カメラは、端末用仮想カメラよりも広いゲーム空間の範囲を撮影するように配置される(図43参照)ので、プレイヤは、テレビ用画像を見ることによってゲーム空間内における様子(各オブジェクトの配置等)をより把握しやすくなる。
また、2つの仮想カメラの位置を異ならせることによって、ゲームの興趣性を向上することもできる。例えば、大砲331と標的333との間に壁を配置しておき(端末用仮想カメラからは標的333が見えない)、壁より上側の標的333が見える位置にテレビ用仮想カメラを配置するようにすれば、テレビ2側にのみ標的333が表示されるようにすることができる。この場合、プレイヤは、ハンドヘルドデバイス9の画面とテレビ2の画面の両方を見比べながらゲーム操作を行うことになり、ゲームをより面白くすることができる。なお、他の実施形態においては、テレビ用仮想カメラの位置および姿勢はどのように制御されてもよく、制御面335が見えない位置に配置されてもよいし、また、端末用仮想カメラと同じ位置および姿勢に設定されてもよい(つまり、仮想カメラを1つのみ設定してもよい)。
ステップS85において、CPU10は、タッチパネル52に対する入力(タッチ入力)があったか否かを判定する。ステップS85の処理は、第3のゲーム例におけるステップS63の処理と同じである。ステップS85の判定結果が肯定である場合、ステップS86の処理が実行される。一方、ステップS85の判定結果が否定である場合、CPU10はゲーム制御処理を終了する。
ステップS86において、CPU10は、制御面335上における制御位置を入力位置に基づいて算出する。ステップS86における制御位置の算出方法は、第3のゲーム例におけるステップS64における算出方法と同じである。また、第4のゲーム例では、制御方向は最新の制御位置に基づいて算出される。そのため、ステップS86においては、CPU10は、算出した制御位置を表すデータを制御位置データ321としてメインメモリに記憶する。ステップS86の次にステップS87の処理が実行される。
ステップS87において、CPU10は、ステップS86で算出された制御位置に基づいて制御方向を算出する。制御方向は、ゲーム空間内における所定位置と制御位置とを結ぶ方向として算出される。第4のゲーム例においては、制御方向は、端末用仮想カメラ(大砲331)の位置から制御位置への方向として算出される(図44参照)。具体的には、CPU10は、端末カメラデータ319と制御位置データ321をメインメモリから読み出し、端末用仮想カメラの位置を始点とし、制御位置を終点とする制御方向ベクトルv2を算出する。算出された制御方向ベクトルv2を表すデータは、制御方向データ322としてメインメモリに記憶される。ステップS87の次にステップS88の処理が実行される。
なお、上記ステップS87においては、上記所定位置として端末用仮想カメラの位置を用いた。ここで、他の実施形態においては、上記所定位置は他の位置であってもよい。例えば、上記所定位置は、図46に示す基準点Paの位置でもよいし、特定のオブジェクトの位置でもよい。上記所定位置として仮想カメラの位置以外の位置を採用する場合には、視点とは異なる位置からオブジェクト(弾332)が発射されるように見える。一方、第4のゲーム例のように、制御方向の始点と端末用画像における視点とを一致させるようにすれば、プレイヤは主観的な視点で弾を撃つ操作を行うことができ、より操作しやすいゲーム操作を提供することができる。
ステップS88において、CPU10は、ステップS87で算出された制御方向へ弾332を発射する。第4のゲーム例においては、弾332は、所定の移動方向へ所定の速さ(所定の移動量)で移動される。所定の移動方向は、制御方向により決められる方向であって、制御方向よりも所定角度だけ上方を向く方向である。ここで、第4のゲーム例においては、発射後の弾332が、重力を考慮して放物線を描くように制御されるものとする。このように弾332が放物線を描くように飛んでいく場合、弾332を制御方向に発射すると、プレイヤは、制御方向よりもやや下方に発射されたような感覚を受けるおそれがある。そのため、第2に実施例では、CPU10は、弾332を制御方向よりも所定角度だけ上方に向けた方向へ発射する。このように、オブジェクトの移動方向は、制御方向により決められる方向であればよく、必ずしも制御方向と一致する方向である必要はない。
ステップS88の具体的な処理としては、CPU10は、制御方向データ322を読み出し、制御方向から弾332の移動方向を算出する。そして、オブジェクトデータ323を読み出し、オブジェクトデータ323が表す位置を、算出された移動方向の向きへ、所定の移動量だけ移動させた位置を算出する。そして、オブジェクトデータ323が表す位置を移動後の位置に更新して、更新後のオブジェクトデータをメインメモリに記憶する。これによって、弾332の位置が更新され、弾332が制御方向に移動されたことになる。ステップS88の後、CPU10はゲーム制御処理を終了する。
ゲーム制御処理の次には、第4のゲーム例においても第3のゲーム例と同様、ステップS3〜S8の処理が実行される。すなわち、ステップS4においてテレビ用画像が生成され、ステップS5において端末用画像が生成される。さらに、ステップS6においてテレビ用画像がテレビ2に表示され、ステップS7において端末用画像がハンドヘルドデバイス9の下側LCDに表示される。なお、第4のゲーム例においては、下側LCDには、タッチパネル52の入力面と制御面335とが画面上において一致するようにゲーム空間が表示され(制御面335は表示されない)、テレビ2には、下側LCDよりも広い範囲のゲーム空間が表示される(図43参照)。また、ステップS8においてゲームを終了するか否かが判定され、ステップS8でゲームを終了すると判定されるまでステップS2〜S8の一連の処理が繰り返し実行される。
以上で説明した第4のゲーム例のゲーム処理によれば、ハンドヘルドデバイス9の姿勢によって制御面335の姿勢が決定され、タッチパネルに対する入力によって制御面302上で制御位置が決定される。そして、制御位置によって決められる制御方向へ大砲331の弾332が発射される。このように、本ゲーム例によれば、プレイヤは、タッチパネル52を用いて3次元空間における方向を直感的な操作で容易に指示することができる。
(第3および第4のゲーム例の変形例)
上記第3および第4のゲーム例においては、CPU10は、ゲーム空間内の所定のオブジェクト(手裏剣301または弾332)の移動方向を制御方向に基づいて制御するゲーム処理を実行した。ここで、CPU10は、オブジェクトの移動方向を制御するゲーム処理に限らず、制御方向に基づくゲーム処理を実行すればよい。例えば、他の実施形態においては、CPU10は、所定位置(例えば仮想カメラの位置)から制御方向に延ばした直線上に配置されるオブジェクトに対して所定の処理を実行してもよい。
上記第3および第4のゲーム例においては、ハンドヘルドデバイス9がタッチパネル52を備える場合を例として説明したが、上述のように、ハンドヘルドデバイス9はタッチパッドを備えていてもよい。また、ハンドヘルドデバイス9はタッチパッドを備える場合、ハンドヘルドデバイス9は表示装置を備えていてもよいし、備えていなくてもよい。
また、タッチパネルまたはタッチパッドとしては、同時に入力された複数の入力位置を検出することが可能な方式(いわゆるマルチタッチ)のものが用いられてもよい。この場合、上記各実施例においては、CPU10は、入力位置毎に制御位置および制御方向を算出してもよい。具体的には、図42に示すゲーム制御処理においては、CPU10は、ステップS64〜S66の処理、および、ステップS68〜S70の処理を、入力位置毎に実行してもよい。また、図45に示すゲーム制御処理においては、CPU10は、ステップS86〜S88の処理を入力位置毎に実行してもよい。
上記第3および第4のゲーム例においては、ハンドヘルドデバイス9自体を傾ける(姿勢を変化させる)操作によって制御面を制御する場合を例として説明した。すなわち、CPU10は、ハンドヘルドデバイス9の動きに応じて値が変化するデータ(加速度データ312および角速度データ313)に基づいてハンドヘルドデバイス9の姿勢を算出し、ハンドヘルドデバイス9の姿勢に基づいて制御面を制御した。ここで、制御面は、ハンドヘルドデバイス9の動きに応じて少なくとも姿勢が変化するように制御されればよい。例えば、他の実施形態においては、ハンドヘルドデバイス9の位置の変化に応じて制御面が制御されてもよい。具体的には、CPU10は、加速度データ312が表す加速度から重力加速度を除いた加速度に基づいて、ハンドヘルドデバイス9の位置の変化を算出することができる。したがって、例えば上記ステップS61またはS82の処理においては、CPU10は、ハンドヘルドデバイス9の位置の変化に応じて制御面の位置および/または姿勢を変化させてもよい(例えば、ハンドヘルドデバイス9の位置が変化した方向に応じた向きに制御面を傾けるようにしてもよい)。これによれば、ハンドヘルドデバイス9を上下左右に移動させることによって制御面の位置および/または姿勢を変化させることができる。
[10.変形例]
上記実施形態は本発明を実施する一例であり、他の実施形態においては例えば以下に説明する構成で本発明を実施することも可能である。
(入力システムを適用する他の例)
上記各ゲーム例では、仮想空間における3次元位置を算出するための位置算出システムの一例として、プレイヤが操作装置(端末装置7またはハンドヘルドデバイス9)を用いてゲーム操作を行うゲームシステム1を例に説明を行った。ここで、他の実施形態においては、位置算出システムはゲーム用途に限らず、操作装置に対する操作に基づいて仮想空間における3次元位置を算出するための任意の情報処理システムに適用されてもよい。
(仮想空間に設定される面に関する変形例)
上記各ゲーム例では、3次元の仮想空間に設定される面(制御面)は、平面であった。ここで、他の実施形態においては、3次元の仮想空間に設定される面は曲面であってもよい。例えば、面が球面上あるいは円柱の側面上を移動するように制御される場合(図30〜図32)においては、球面あるいは円柱側面に沿った曲面が設定されてもよい。また、上記各ゲーム例では、面は、端末装置7の表示画面の形状と同じ形状であったが、面の形状と表示画面の形状とは異なっていてもよい。なお、上記第1のゲーム例のように、上記面が平面であって、かつ、面が当該面自体に対して平行な方向に移動するように制御される場合には、ユーザが指定可能な範囲は3次元空間における平面内の範囲(奥行き方向の長さを有しない範囲)となる。一方、上記第2〜第4のゲーム例のように、上記面が平面であって、かつ、面が当該面自体に対して平行でない方向に移動するように制御される場合には、ユーザが指定可能な範囲は3次元空間において3次元の範囲(縦、横および奥行き方向の長さを有する範囲)となる。このとき、面は平面であるので、入力面上の位置と面上の位置との対応がユーザにとってわかりやすく、3次元位置の入力操作が容易になる。また、上記面が曲面である場合には、端末装置7の姿勢に応じて面が平行移動する場合であっても、ユーザが指定可能な範囲は3次元空間において3次元の範囲(縦、横および奥行き方向の長さを有する範囲)となる。
また、上記各ゲーム例においては、端末装置7の姿勢に応じて面の姿勢が少なくとも制御された。ここで、他の実施形態においては、端末装置7の動きに応じて仮想空間において面が決定されればよく、ゲームシステム1は、端末装置7の動きに応じて面の位置、姿勢、および形状の少なくとも1つが変化するようにしてもよい。これによれば、入力面に対する入力によって指定可能な範囲(面上の範囲)が端末装置7の動きに応じて変化し、ユーザが3次元位置を指定することが可能となる。なお、上記「端末装置7の動き」には、端末装置7の位置や姿勢、あるいは、位置や姿勢の変化が含まれる。
(ゲームシステムの構成に関する変形例)
上記第2のゲーム例においては、ゲームシステム1は、表示装置として、可搬型の端末装置7と、テレビ2とを含む構成であった。ここで、ゲームシステムは、ユーザ(プレイヤ)が把持可能な操作装置を含む構成であれば、例えば、他の実施形態においては、ゲームシステム1は、1つの表示装置(例えばテレビ2)に上記画像を表示し、端末装置7には画像を表示しない構成であってもよい。また、ゲームシステム1は、端末装置7とは異なる2つの表示装置を含む構成であってもよい。このとき、上記第2のゲーム例におけるテレビ用画像が一方の表示装置に表示され、端末用画像が他方の表示装置に表示される。
また、ゲームシステム1は、端末装置7とは別の操作装置として、コントローラ5を含む構成であったが、他の実施形態においては、コントローラ5を含まない構成であってもよい。また、他の実施形態においては、端末装置7に加えてコントローラ5が操作装置としてさらに用いられてもよい。例えば、プレイヤが端末装置7を用いてタッチパネル52に対して線を描くことによって仮想空間内に図形を描いた場合、ゲーム装置3は、描かれた図形をコントローラ5に対する操作に従って移動させたり変形させたりするようにしてもよい。
また、仮想空間における3次元位置を算出するための位置算出システムは、複数の装置で実現されるものに限らず、1つの装置によって実現されてもよい。例えば、表示部と、入力面に対する入力が可能な入力デバイス(タッチパネルやタッチパッド等)とを備える携帯型の情報処理装置(ゲーム装置であってもよい)によって位置算出システムが実現されてもよい。このとき、情報処理装置は、タッチパネルが設けられる表示画面に上記第2のゲーム例における端末用画像を表示し、もう一方の表示画面に上記第2のゲーム例におけるテレビ用画像を表示する。また、情報処理装置は、自身の姿勢を算出するための物理量を検出するセンサ(例えば、ジャイロセンサや加速度センサ)を備えていてもよい。
(入力面における入力位置の検出方法に関する変形例)
上記各ゲーム例においては、操作装置(端末装置7またはハンドヘルドデバイス9)は、所定の入力面に対する入力位置を検出する位置検出部の一例として、LCDの表画面に設けられるタッチパネル52を備える構成であった。ここで、他の実施形態においては、位置検出部は、例えばタッチパッドであってもよい。つまり、端末装置7およびハンドヘルドデバイス9は、表示部(LCD51)およびタッチパネル52を備えず、タッチパッドを備える構成であってもよい。また、操作装置は、LCDにカーソルを表示し、所定の方向入力操作(例えば、アナログスティックや十字ボタンに対する操作)に従って当該カーソルを移動させ、当該カーソルの位置を入力位置として用いてもよい。
(ゲーム処理を実行する情報処理装置に関する変形例)
上記各ゲーム例においては、ゲームシステム1において実行される一連のゲーム処理をゲーム装置3が実行したが、ゲーム処理の一部は他の装置によって実行されてもよい。例えば、他の実施形態においては、ゲーム処理の一部(例えば、端末用画像の生成処理)を端末装置7が実行するようにしてもよい。また、他の実施形態では、互いに通信可能な複数の情報処理装置を有する位置算出システムにおいて、当該複数の情報処理装置がゲーム処理を分担して実行するようにしてもよい。
なお、複数の情報処理装置において上記の情報処理が実行される場合には、各情報処理装置で実行される処理を同期させる必要があり、情報処理が複雑になってしまう。これに対して、上記各ゲーム例のように、情報処理が1つのゲーム装置3によって実行され、端末装置7が画像を受信して表示する処理を行う場合(つまり、端末装置7やハンドヘルドデバイス9がシンクライアント端末として機能する場合)には、複数の情報処理装置間で情報処理の同期をとる必要がなく、情報処理を簡易化することができる。
上記のように、本明細書で説明した種々のシステム、方法、および技術は、デジタル電子回路、コンピュータハードウェア、ファームウェア、ソフトウェア、またはこれら要素の組み合わせによって提供されてもよい。上記の技術を実現するための装置は、プログラム可能なプロセッサによる実行のためのコンピュータ読み取り可能な非一時的な記憶装置において実体的に具体化されるコンピュータプログラムプロダクト、入出力装置、およびコンピュータプロセッサを含んでもよい。上記技術を実現するための処理は、入力データを処理して所望の出力を生成することによって、要求される機能を実行するためのプログラムを実行する、プログラム可能なプロセッサによって実行されてもよい。上記の技術は、入力装置、出力装置、および情報記憶装置といったハードウェア資源との間でデータや指示のやり取りを行うプログラム可能なプロセッサを含むコンピュータシステム上で実行可能な1以上のコンピュータプログラムによって実現されてもよい。また、各コンピュータプログラムは、手続型やオブジェクト指向型の高水準プログラミング言語、アセンブリ言語、または、機械語によって実現されてもよく、必要に応じてコンパイルまたはインタプリタされて実行されてもよい。また、上記のプロセッサは、汎用または専用のマイクロプロセッサであってもよい。プロセッサは、一般的に、ROMまたはRAMからデータおよび指示を受け取る。また、上記の記憶装置は、(a)EPROM、EEPROM、フラッシュメモリのような半導体メモリ装置を含む不揮発性のメモリ、(b)内部ハードディスクあるいは着脱可能な外部ディスクのような磁気ディスク、(c)光磁気ディスク、(d)CDROM、に限定されず、あらゆる種類のコンピュータメモリを含む。上記のプロセッサや記憶装置は、ASIC(Application Specific Integrated Circuit)によって補充される、あるいは、ASICに組み込まれる形で実現されてもよい。
また、本明細書に記載の処理システム(回路)は、本明細書において記載された内容に応じたゲーム処理のような制御処理のためにプログラムされる。上記の内容に応じた指示を実行する少なくとも1つのCPUを含む処理システムが、上記の内容によって定義される処理動作を実行するための「プログラムされた論理回路」として作用するものであってもよい。