図1を参照して、本発明の一実施形態に係るゲームシステム1について説明する。なお、図1は、当該ゲームシステム1を説明するための外観図である。以下、据置型ゲーム装置を一例にして、本発明のゲームシステム1について説明する。
図1において、当該ゲームシステム1は、家庭用テレビジョン受像機等のスピーカ2aを備えたディスプレイ(以下、モニタと記載する)2に、接続コードを介して接続される据置型ゲーム装置(以下、単にゲーム装置と記載する)3および当該ゲーム装置3に操作情報を与えるコントローラ7によって構成される。ゲーム装置3は、接続端子を介して受信ユニット6が接続される。受信ユニット6は、コントローラ7から無線送信される送信データを受信し、コントローラ7とゲーム装置3とは無線通信によって接続される。また、ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置3の上部主面には、当該ゲーム装置3の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置3上部の蓋を開くOPENスイッチが設けられている。ここで、プレイヤがOPENスイッチを押下することによって上記蓋が開き、光ディスク4の脱着が可能となる。
また、ゲーム装置3には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード5が必要に応じて着脱自在に装着される。ゲーム装置3は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置3は、外部メモリカード5に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
コントローラ7は、その内部に備える通信部75(後述)から受信ユニット6が接続されたゲーム装置3へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて送信データを無線送信する。コントローラ7は、主にモニタ2に表示されるゲーム空間に登場するプレイヤオブジェクトを操作するための操作手段である。コントローラ7は、複数の操作ボタン、キー、およびスティック等の操作部が設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力する。
次に、図2を参照して、ゲーム装置3の構成について説明する。なお、図2は、ゲーム装置3の機能ブロック図である。
図2において、ゲーム装置3は、各種プログラムを実行する例えばリスク(RISC)CPU(セントラルプロセッシングユニット)30を備える。CPU30は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ33等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU30には、メモリコントローラ31を介して、GPU(Graphics Processing Unit)32、メインメモリ33、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35が接続される。また、メモリコントローラ31には、所定のバスを介して、コントローラI/F(インターフェース)36、ビデオI/F37、外部メモリI/F38、オーディオI/F39、およびディスクI/F41が接続され、それぞれ受信ユニット6、モニタ2、外部メモリカード5、スピーカ2a、およびディスクドライブ40が接続されている。
GPU32は、CPU30の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU32は、図示しない画像処理専用のメモリやメインメモリ33の一部の記憶領域を用いて画像処理を行う。GPU32は、これらを用いてモニタ2に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ31およびビデオI/F37を介してモニタ2に出力する。
メインメモリ33は、CPU30で使用される記憶領域であって、CPU30の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ33は、CPU30によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ33に記憶されたゲームプログラムや各種データ等がCPU30によって実行される。
DSP34は、ゲームプログラム実行時にCPU30において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM35が接続される。ARAM35は、DSP34が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP34は、ARAM35に記憶されたサウンドデータを読み出し、メモリコントローラ31およびオーディオI/F39を介してモニタ2に備えるスピーカ2aに出力させる。
メモリコントローラ31は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。コントローラI/F36は、例えば4つのコントローラI/F36a〜36dで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置3とを通信可能に接続する。例えば、受信ユニット6は、上記コネクタと嵌合し、コントローラI/F36を介してゲーム装置3と接続される。上述したように受信ユニット6は、コントローラ7からの送信データを受信し、コントローラI/F36を介して当該送信データをCPU30へ出力する。ビデオI/F37には、モニタ2が接続される。外部メモリI/F38には、外部メモリカード5が接続され、その外部メモリカード5に設けられたバックアップメモリ等とアクセス可能となる。オーディオI/F39にはモニタ2に内蔵されるスピーカ2aが接続され、DSP34がARAM35から読み出したサウンドデータやディスクドライブ40から直接出力されるサウンドデータをスピーカ2aから出力可能に接続される。ディスクI/F41には、ディスクドライブ40が接続される。ディスクドライブ40は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置3のバスやオーディオI/F39に出力する。
図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た斜視図である。図4は、コントローラ7を下面前方から見た斜視図である。
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に4つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72a〜72gは、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられ、後述により明らかとなるがプレイヤがコントローラ7を操作する向きに応じてそれぞれ割り当てられる操作機能が切り替わる。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置3本体の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7から受信ユニット6へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図5のスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
一方、ハウジング71下面には、凹部が形成されている。後述で明らかとなるが、ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の後面側傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。なお、後述により明らかとなるが、操作ボタン72iについても、プレイヤがコントローラ7を操作する向きに応じて割り当てられる操作機能が切り替わる。
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング70の後面には、コネクタ73が設けられている。コネクタ73は、例えば32ピンのエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
次に、図5および図6を参照して、コントローラ7の内部構造について説明する。なお、図5は、コントローラ7の上筐体(ハウジング71の一部)を外した状態を後面側から見た斜視図である。図6は、コントローラ7の下筐体(ハウジング71の一部)を外した状態を前面側から見た斜視図である。ここで、図6に示す基板700は、図5に示す基板700の裏面から見た斜視図となっている。
図5において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751等(図6、図7参照)に接続される。また、図示しない無線モジュール753(図7参照)およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子703が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。加速度センサ701が、基板700の中央部ではなく周辺部に設けられていることにより、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ7の回転を良好な感度で判定することができる。
一方、図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置3から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。そして、基板700の下主面上には、バイブレータ704が取り付けられる。このバイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
次に、図7を参照して、コントローラ7の内部構成について説明する。なお、図7は、コントローラ7の構成を示すブロック図である。
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コントローラ7のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。後述により明らかとなるが、この撮像情報演算部74から出力される処理結果データに基づいて、コントローラ7の位置や動きに応じた信号を得ることができる。
コントローラ7は、3軸(X、Y、Z軸)の加速度センサ701を備えていることが好ましい。この3軸の加速度センサ701は、3方向、すなわち、上下方向、左右方向、および前後方向で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、上下および左右方向(または他の対になった方向)のそれぞれに沿った直線加速度のみを検知する2軸の加速度検出手段を使用してもよい。例えば、この3軸または2軸の加速度センサ701は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であってもよい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて3軸または2軸の加速度センサ701が提供されてもよい。
当業者には公知であるように、加速度センサ701に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701からの直接の出力は、その2軸または3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
しかしながら、加速度センサ701から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ7に関するさらなる情報を推測または算出することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度(重力加速度)が検知されると、加速度センサ701からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象(コントローラ7)の傾きをそれぞれ推測することができる。このように、加速度センサ701をマイコン751(または他のプロセッサ)と組み合わせて用いることによって、コントローラ7の傾き、姿勢または位置を決定することができる。同様に、加速度センサ701を備えるコントローラ7が、例えばユーザの手で動的に加速されてそれぞれ動かされる場合に、加速度センサ701によって生成される加速度信号を処理することによって、コントローラ7のさまざまな動きおよび/または位置をそれぞれ算出または推測することができる。他の実施例では、加速度センサ701は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角に変換するものであってもよい。加速度センサ701でそれぞれ検知された加速度を示すデータは通信部75に出力される。
他の実施形態の例では、加速度センサ701の代わりに、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるMEMSジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ701と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転(または角速度)を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、2つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロスコープとの基本的な差異と同様にジャイロスコープの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置3からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置3から送信されたサウンドデータ等を処理する。
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの加速度信号(X、Y、およびZ軸方向加速度データ;以下、単に加速度データと記載する)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、加速度データ、処理結果データ)を受信ユニット6へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から受信ユニット6への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(Bluetooth;登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、受信ユニット6への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥース(登録商標)の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その電波信号をアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からの加速度データ、および撮像情報演算部74からの処理結果データが無線モジュール753で電波信号に変調されてコントローラ7から送信される。そして、ゲーム装置3の受信ユニット6でその電波信号を受信し、ゲーム装置3で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、加速度データ、および処理結果データ)を取得する。そして、ゲーム装置3のCPU30は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
次に、ゲーム装置3が行う具体的な処理を説明する前に、本ゲーム装置3で行うゲームの概要について説明する。当該ゲームでは、少なくとも2つの操作モード(第1操作モード、第2操作モード)が設定され、それぞれモニタ2に表示するゲーム画像の視点が切り替えられる。
図8は、当該ゲームに設定された第1操作モードによってプレイヤがコントローラ7を操作している一例である。図9は、第1操作モードにおいてプレイヤがコントローラ7を横持ちにして両手で把持した状態をコントローラ7の側面側から見た一例である。図8および図9に示すように、第1操作モードでは、例えばコントローラ7の長軸方向を横にして両手でコントローラ7をプレイヤが把持して操作する。具体的には、プレイヤは、左手でコントローラ7の前面側を持ち、右手でコントローラ7の後面側を持って、左右の指で操作部72(例えば、十字キー72a、操作ボタン72b〜72g)を押下することによってゲーム操作を行う。この場合、コントローラ7の側面(図8および図9の例では右側面)がモニタ2の表示画面と対向するようにコントローラ7が把持される。例えば、プレイヤは、両手のひらをそれぞれコントローラ7の前面および後面に添え、人差し指、中指、薬指、小指をコントローラ7下面に添える。そして、両手の親指をコントローラ7の上面に設けられた操作部72(例えば、十字キー72a付近や操作ボタン72b〜72d付近)に添える。このとき、コントローラ7が縦長形状であり、当該長手方向の一方端部に十字キー72aが配設されているため、プレイヤがコントローラ7を横持ちしたときに一方の手の親指等で十字キー72aの操作がやりやすくなる。また、操作ボタン72bや操作ボタン72cは、当該長手方向の他方端部に配設されているため、横持ちしたときに他方の手の親指等で操作がやりやすくなる。一方、操作ボタン72iは、図9に示すようにプレイヤがコントローラ7を横持ちしたとき、プレイヤの死角となりコントローラ7の凹部の後面側傾斜面に配設されているために操作が難しく、操作ボタン72iからプレイヤの指が自然と離れる状態となる。このように第1操作モードでは、プレイヤがコントローラ7を横持ちで把持した状態で、十字キー72aや操作ボタン72b〜72d等の操作部72を容易に操作することができる。
図10は、当該ゲームに設定された第2操作モードによってプレイヤがコントローラ7を操作している一例である。図11は、第2操作モードにおいて、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の前面側から見た一例である。図12は、第2操作モードにおいて、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の左側面側から見た一例である。図10〜図12に示すように、第2操作モードでゲームをプレイするためには、コントローラ7の前面(撮像情報演算部74が撮像する光の入射口側)がモニタ2の表示画面と対向するようにプレイヤが一方の手(例えば右手)でコントローラ7を把持する。そして、プレイヤの親指をコントローラ7の上面(例えば、操作ボタン72d付近)に添え、プレイヤの人差し指をコントローラ7下面の凹部(例えば、操作ボタン72i付近)に添えたとき、コントローラ7の前面に設けられている撮像情報演算部74の光入射口がプレイヤの前方方向に露出する。一方、モニタ2の表示画面近傍には、2つのマーカ8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力し、撮像情報演算部74の撮像対象となる。マーカ8Lおよび8Rは、モニタ2に一体的に設けられても良いし、モニタ2とは別体で設けられてモニタ2の近く(モニタ2の上や下など)に載置されて使用されるものであってもよい。なお、このようなコントローラ7に対する把持状態は、プレイヤの左手であっても同様に行えることは言うまでもない。
このように、第2操作モードにおいて、コントローラ7は、プレイヤが片手で把持した状態で操作ボタン72dおよび72i等の操作部72を容易に操作することができる。さらに、プレイヤがコントローラ7を片手で把持したとき、当該コントローラ7の前面に設けられている撮像情報演算部74の光入射口が露出するため、上述した2つのマーカ8Lおよび8Rからの赤外光を容易に当該光入射口から取り入れることができる。つまり、プレイヤは、撮像情報演算部74の機能を阻害することなくコントローラ7を片手で把持することができる。ここで、コントローラ7が縦長形状であり、当該長手方向の端部前面に撮像情報演算部74の光入射口が配設されているため、撮像情報演算部74を利用してプレイヤがコントローラ7で指し示すような操作に好適である。一方、操作ボタン72iは、図12に示すようにプレイヤがコントローラ7を縦持ちしたとき、コントローラ7の凹部の後面側傾斜面に配設されているためにプレイヤの指で容易に操作できる。このように第2操作モードでは、プレイヤがコントローラ7を縦持ちで把持した状態で、撮像情報演算部74や操作部72を容易に操作することができる。
ここで、図13に示すように、マーカ8Lおよび8Rは、それぞれ視野角θ1を有している。また、撮像素子743は、視野角θ2を有している。例えば、マーカ8Lおよび8Rの視野角θ1は共に34°(半値角)であり、撮像素子743の視野角θ2は41°である。そして、撮像素子743の視野角θ2の中にマーカ8Lおよび8Rが共に存在し、マーカ8Lの視野角θ1の中でかつマーカ8Rの視野角θ1の中に撮像素子743が存在するとき、ゲーム装置3は、2つのマーカ8Lおよび8Rによる高輝度点に関する位置データを用いてコントローラ7の位置を算出する。
プレイヤがその前面がモニタ2に向くようにコントローラ7を把持することによって、撮像情報演算部74には2つのマーカ8Lおよび8Rが出力した赤外光が入射する。そして、赤外線フィルタ741およびレンズ742を介して、入射した赤外光を撮像素子743が撮像し、当該撮像画像を画像処理回路744が処理する。ここで、撮像情報演算部74では、マーカ8Lおよび8Rから出力される赤外線成分を検出することで、上記撮像画像における当該マーカ8Lおよび8Rの位置情報(対象画像の位置)や面積、直径、幅等のサイズ情報を取得する。具体的には、画像処理回路744は、撮像素子743が撮像した画像データを解析して、まず面積情報からマーカ8Lおよび8Rからの赤外光ではあり得ない画像を除外し、さらに輝度が高い点をマーカ8Lおよび8Rそれぞれの位置として判別する。そして、撮像情報演算部74は、判別されたそれらの輝点の重心位置等の位置情報を取得し、上記処理結果データとして出力する。ここで、上記処理結果データである位置情報は、撮像画像における所定の基準点(例えば、撮像画像の中央や左上隅)を原点とした座標値として出力するものでもよく、所定のタイミングにおける輝点位置を基準点として、当該基準位置からの現在の輝点位置の差をベクトルとして出力するものでもよい。つまり、上記対象画像の位置情報は、撮像素子743が撮像した撮像画像に対して所定の基準点を設定した場合に、当該基準点に対する差として用いられるパラメータである。このような位置情報をゲーム装置3へ送信することによって、ゲーム装置3では、基準からの上記位置情報の差に基づいて、マーカ8Lおよび8Rに対する撮像情報演算部74、すなわちコントローラ7の動き、姿勢、位置等に応じた信号の変化量を得ることができる。具体的には、コントローラ7が動かされることによって、通信部75から送信される画像内の高輝度点の位置が変化するため、高輝度点の位置の変化に対応させた方向入力や座標入力を行うことで、3次元空間に対してコントローラ7の移動方向に沿った方向入力や座標入力を行うことができる。なお、後述するゲーム処理動作例では、撮像情報演算部74が撮像画像におけるマーカ8Lおよび8Rの対象画像それぞれの重心位置の座標を少なくとも取得し、上記処理結果データとして出力する例を用いる。
このように、コントローラ7の撮像情報演算部74によって、固定的に設置されたマーカ(実施例では、2つのマーカ8Lおよび8Rからの赤外光)を撮像することによって、ゲーム装置3におけるゲーム処理において、コントローラ7から出力されるデータを処理してコントローラ7の動き、姿勢、位置等に対応した操作が可能となり、ボタンを押下するような操作ボタンや操作キーとは異なった直感的な操作入力となる。また、上述したように上記マーカ8Lおよび8Rは、モニタ2の表示画面近傍に設置されているため、マーカ8Lおよび8Rに対する位置をモニタ2の表示画面に対するコントローラ7の動き、姿勢、位置等に換算することも容易に行うことができる。つまり、コントローラ7の動き、姿勢、位置等による処理結果データは、モニタ2の表示画面に直接作用する操作入力として用いることができる。したがって、第2操作モードでは、プレイヤがコントローラ7を把持した手をモニタ2の表示画面に対して動かすことによって、プレイヤの手の運動が表示画面に直接的に作用する操作入力を備えることができ、コントローラ7が表示画面に対して遠隔から座標指定するためのデータを出力可能なポインティングデバイスとして機能する。
また、上記第1操作モードおよび第2操作モード何れにおいても、上述したようにコントローラ7に設けられた加速度センサ701からの出力(加速度データ)を用いることによって、コントローラ7の傾き、姿勢、または位置を決定することができる。つまり、プレイヤがコントローラ7を把持した手を上下左右等に動かすことによって、コントローラ7は、プレイヤの手の運動や向きに応じた操作入力手段として機能する。
また、本実施例のゲームでは、第1操作モードおよび第2操作モードに応じて、それぞれモニタ2に表示するゲーム画像(客観的画像、主観的画像)が切り替えられる。なお、客観的画像とは、プレイヤキャラクタおよびその周辺の仮想ゲーム空間を客観的に眺めた画像であり、主観的画像とは、プレイヤキャラクタから仮想ゲーム空間を主観的に見た画像である。
図14は、上記第1操作モードでモニタ2に表示される客観的画像の一例である。図15は、客観的画像を生成する際の仮想カメラCの位置をプレイヤキャラクタPの上方から見た俯瞰概略図である。図14に示すように、上記第1操作モードにおいて、上記処理結果データを除くコントローラ7から受信した操作情報(キーデータ、加速度データ)に応じて、モニタ2にアクションゲーム等が表現される。具体的には、上記第1操作モードでは、プレイヤキャラクタPの横方向(プレイヤキャラクタの向きを基準とする横方向、または、プレイヤキャラクタの進行方向を基準とする横方向)の比較的遠方に位置する仮想ゲーム空間内の視点からプレイヤキャラクタP(またはその付近)を注視点とした仮想ゲーム空間が、3次元のゲーム画像としてモニタ2に表現される(このゲーム画像を客観的画像と記載する)。そして、プレイヤが操作するプレイヤキャラクタPおよび敵キャラクタE等が仮想ゲーム空間Sに配置されてモニタ2に表現される。図14に示すように、上記第1操作モードで設定される客観的画像によれば、プレイヤキャラクタPの全身が表現され、当該プレイヤキャラクタPを含むゲーム世界を客観的に広く見渡した視界がゲーム画像で生成される。
図15を用いて、客観的画像を生成する際の仮想カメラCのパラメータ設定の一例について説明する。空間Sには予めルートRが設定されており、プレイヤキャラクタPはルートR上を移動可能に設定されている。すなわち、十字キー72aの左を押下することにより、プレイヤキャラクタPはルートR上を左に進み、十字キー72aの右を押下することにより、プレイヤキャラクタPはルートR上を右に進む。そして、仮想カメラCの注視点は、空間SにおけるプレイヤキャラクタPの現在位置Ph(例えば、プレイヤキャラクタPにおける頭部の位置座標(xh,yh,zh))に設定される。なお、仮想カメラCの注視点を、現在位置Phからある距離だけ離れた点(例えば、プレイヤキャラクタPの前方方向または進行方向、やプレイヤキャラクタPによる攻撃方向(銃の向いている方向など))やルートR上に沿ってある距離だけ離れた点などに設定してもよい。ただし、この場合でも、仮想カメラCによって撮影されるゲーム空間の範囲に対して、上記ある距離が十分小さいことが好ましく、また、注視点からプレイヤキャラクタPまでの距離が、視点からプレイヤキャラクタPまでの距離よりも小さくするのが好ましい。
一方、仮想カメラCの視点は、プレイヤキャラクタPの位置Ph(xh,yh,zh)のそれぞれ(すなわち、ルートR上の点のそれぞれ)に対応して決定される仮想ゲーム空間の点Cph(xcp,ycp,zcp)を基準とし、プレイヤキャラクタPの方向(当該方向は、例えば、プレイヤキャラクタPの前方方向または進行方向であるが、プレイヤキャラクタPによる攻撃方向であってもよい)Pdに応じて当該基準からずれた位置に設定される。具体的には、視点から注視点までの方向および視点と注視点との距離のそれぞれが、ルートR上の点のそれぞれに対応して予め設定されており、位置Ph(xh,yh,zh)から当該位置に対応する上記方向に上記距離だけ離れた点を点Cph(xcp,ycp,zcp)とする。例えば、点Cphから注視点までの方向は、ルートRに対して垂直な水平方向に設定されている。また、点Cphと注視点との距離は、所定距離(例えば、プレイヤキャラクタPの肩幅など)の数倍(例えば、8倍程度)に設定されている。そして、仮想カメラCの視点は、プレイヤキャラクタPの方向Pd(当該方向は、例えば、プレイヤキャラクタPによる攻撃方向(プレイヤキャラクタPが所持する銃Gの銃口方向)であるが、プレイヤキャラクタの前方方向または進行方向であってもよい)と逆方向(つまり、後方)に点Cphから上記所定距離の数倍(例えば、5倍程度)ずらした位置に設定される。
なお、仮想カメラCの視点を、点Cphに設定してもよい。また、本実施例では、プレイヤキャラクタPの位置のそれぞれ(ルートR上の点のそれぞれ)に対応して上述の方向と距離とが設定されるので、ゲーム空間の状況やゲームの状況に応じて、上述の方向や距離を任意に変更できる。ただし、上記方向や距離を固定して、例えば、ルートRの軌跡方向またはプレイヤキャラクタPの前方方向や進行方向を基準とする方向(略垂直な方向など)を視線方向としたり、視点から注視点までの距離を一定にしたりしてもよい。
なお、上述した客観的画像における仮想カメラCの位置および方向は、第1操作モードにおける基本設定であり、第1操作モードにおけるコントローラ7への操作に応じて仮想カメラCが当該基本位置から移動することもある。ただし、第1操作モードでは、基本位置から移動したとしても、空間Sを比較的遠方からプレイヤキャラクタPの配置位置またはその近傍を注視点として客観的に広く見渡した画像を生成しており、本発明ではこのような画像を客観的画像と定義する。
なお、上述ではプレイヤキャラクタPの横方向の比較的遠方を視点とし、プレイヤキャラクタPの現在位置を注視点として仮想空間を撮影したが、プレイヤキャラクタPの後方の比較的遠方を視点とし、プレイヤキャラクタPの現在位置を注視点として仮想ゲーム空間を撮影してもよい。また、上述では、主に、視点および注視点の水平面における位置について説明したが、視点および注視点の高さ方向の位置は、プレイヤキャラクタPの現在位置と一致していてもよいし、それより高い位置に設定してもよい(場合によっては低い位置に設置してもよい)。
図16は、上記第2操作モードでモニタ2に表示される主観的画像の一例である。図17は、主観的画像を生成する際の仮想カメラCの位置をプレイヤキャラクタPの横から見た概略図である。図16に示すように、上記第2操作モードにおいて、コントローラ7から受信した操作情報(キーデータ、加速度データ、処理結果データ)に応じて、モニタ2にアクションゲーム等が表現される。具体的には、上記第2操作モードでは、空間Sを、当該プレイヤキャラクタPの位置とほぼ一致する仮想ゲーム空間内の視点から見た仮想ゲーム空間が3次元のゲーム画像としてモニタ2に表現される(このゲーム画像を主観的画像と記載する)。図16に示すように、上記第2操作モードで設定される主観的画像によれば、プレイヤキャラクタPの一部が表現され、当該プレイヤキャラクタPが空間Sを主観的に見ているような視界がゲーム画像で生成される。
図17を用いて、主観的画像における仮想カメラCの位置の一例について説明する。仮想カメラCの注視点は、空間SにおけるプレイヤキャラクタPの位置Phを基準に、プレイヤキャラクタPの前方に設定される。具体的には、仮想カメラCの注視点の水平方向位置は、プレイヤキャラクタPにおける頭部の位置座標Ph(xh,yh,zh)から正面(プレイヤキャラクタPの前方方向または進行方向)に所定距離(例えば、プレイヤキャラクタPの肩幅)だけ離れた位置から、さらにプレイヤキャラクタPの攻撃方向(プレイヤキャラクタが所持する銃Gの銃口方向)に上記所定距離の数倍(例えば、4倍程度)ずらした位置(図示T1)に設定される。また、仮想カメラCの注視点の垂直方向位置は、位置座標Ph(xh,yh,zh)から下方に上記所定距離の数分の1(例えば、1/4程度)ずらした位置(図示T2)に設定される。
一方、仮想カメラCの視点は、空間SにおけるプレイヤキャラクタPの位置Phを基準に、プレイヤキャラクタPの後方近傍に設定される。具体的には、仮想カメラCの視点の水平方向位置は、位置座標Ph(xh,yh,zh)から正面に上記所定距離だけ離れた位置から、プレイヤキャラクタPによる攻撃方向(プレイヤキャラクタPが所持する銃Gの銃口方向)の逆方向に上記所定距離の数倍(例えば、2倍程度)ずらした位置(図示V1;実質的には、位置座標Phから上記所定距離程度だけ後方に離れた位置)に設定される。また、仮想カメラCの視点の垂直方向位置は、位置座標Ph(xh,yh,zh)から上方にプレイヤキャラクタPの頭部の大きさ程度(上記所定距離の1/4程度)ずらした位置(図示V2)に設定される。なお、仮想カメラCの視点の水平方向位置を、上記V2の位置から、さらに、プレイヤキャラクタPの右方向または左方向(プレイヤキャラクタPの向いている方向または進行方向に対して直交右方向または直交左方向)に上記所定距離の半分程度だけずらした位置を視点に設定してもよい。また、第1操作モードにおいてルートR上を右方向に進行している状態で第2操作モードに切り替わったときは、プレイヤキャラクタPの上記直交右方向にずらし、第1操作モードにおいてルートR上を左方向に進行している状態で第2操作モードに切り替わったときは、プレイヤキャラクタPの上記直交左方向にずらしてもよい。
なお、図17において、プレイヤキャラクタPの頭部の位置Phから左右に延びる線は、プレイヤキャラクタPの視線方向(仮想カメラCの視線方向とは異なる)を示すものである。上述ではプレイヤキャラクタPの視線方向は水平方向であるとして説明したが、実際には、状況によってプレイヤキャラクタPの視線方向は上下に傾いた方向になる。プレイヤキャラクタPの視線方向が上下に傾いている場合、図17の当該左右に延びる線も傾いて、仮想カメラCの注視点は、当該左右に延びる線上の点(PhからT1だけ離れた点)から下方にT2だけずらした点となり、仮想カメラCの視点は、当該左右に延びる線上の点(PhからV1だけ離れた点)から上方にV2だけずらした点となる。
また、上述した主観的画像における仮想カメラCの位置および方向は、第2操作モードにおける基本設定であり、第2操作モードにおけるコントローラ7への操作に応じて仮想カメラCが当該基本位置から移動することもある。ただし、第2操作モードでは、基本位置から移動したとしても、プレイヤキャラクタPの位置の近傍または一致する位置を視点としており、本発明ではこのようなゲーム画像を主観的画像と定義する。
図14と図16とを比較すれば明らかなように、客観的画像によるゲーム画像は、プレイヤキャラクタPの周辺の空間Sが広く見渡せるため、プレイヤキャラクタPが空間Sを移動するときに好適な画像である。一方、主観的画像によるゲーム画像は、プレイヤキャラクタPが空間Sを見ているような視界であるため、敵キャラクタEを銃Gでシューティングするようなシチュエーションで好適な画像である。さらに、プレイヤがコントローラ7を把持した手をモニタ2の表示画面に対して動かすことによって、照準カーソルTの位置(射撃位置)を直接的に指示し、操作ボタン72dや操作ボタン72i(図3参照)の押下に応じて、プレイヤキャラクタPが所持する銃Gが照準カーソルTに向かって射撃されるように制御することによって、あたかもプレイヤ自身が敵キャラクタEを射撃しているような操作感覚が得られる。
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図18〜図20を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図18は、ゲーム装置3のメインメモリ33に記憶される主なプログラムおよびデータの一例を示す図である。図19は、メインメモリ33に記憶される第1操作テーブルデータDc4の一例を示す図である。図20は、メインメモリ33に記憶される第2操作テーブルデータDc5の一例を示す図である。
図18に示すように、メインメモリ33には、ゲームプログラムGP、操作情報Da、操作状態情報Db、およびゲーム情報Dc等が記憶される。なお、メインメモリ33には、図18に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタに関する他のデータ、敵キャラクタのデータ、およびゲーム空間に関するデータ(地形データ等)等、ゲーム処理に必要なデータが記憶される。
ゲームプログラムGPは、CPU30が処理に必要なプログラムを光ディスク4から読み出して適宜記憶するものであり、ゲーム処理(後述するステップ50〜ステップ94)を定義するプログラムである。このゲームプログラムGPの実行開始によってゲーム処理が開始される。
操作情報Daは、コントローラ7から送信データとして送信されてくる一連の操作情報であり、最新の操作情報に更新される。操作情報Daには、上述の処理結果データに相当する第1座標データDa1および第2座標データDa2が含まれる。第1座標データDa1は、撮像素子743が撮像した撮像画像に対して、2つのマーカ8Lおよび8Rのうちの一方の画像の位置(撮像画像内における位置)を表す座標のデータである。第2座標データDa2は、他方のマーカの画像の位置(撮像画像内における位置)を表す座標のデータである。例えば、マーカの画像の位置は、撮像画像におけるXY座標系によって表される。
また、操作情報Daには、撮像画像から得られる処理結果データの一例の座標データ(第1座標データDa1および第2座標データDa2)の他、操作部72から得られるキーデータDa3および加速度センサ701から得られる加速度データDa4等が含まれる。なお、ゲーム装置3に備える受信ユニット6は、コントローラ7から所定間隔例えば5msごとに送信される操作情報Daを受信し、受信ユニット6に備える図示しないバッファに蓄えられる。その後、ゲーム処理間隔である例えば1フレーム毎(1/60秒)に読み出され、その最新の情報がメインメモリ33に記憶される。
操作状態情報Dbは、コントローラ7の操作状態を撮像画像に基づいて判断した情報である。操作状態情報Dbは、撮像画像に含まれる対象画像(マーカ)の位置や向きから得られるデータであり、具体的には、方向データDb1、中点データDb2、スクリーン座標データDb3、チェックカウンタデータDb4、および有効フラグデータDb5等を含む。方向データDb1は、第1座標データDa1から第2座標データDa2への方向を示すデータである。例えば、方向データDb1は、第1座標データDa1の位置を始点とし第2座標データDa2の位置を終点とするベクトルのデータとする。中点データDb2は、第1座標データDa1と第2座標データDa2との中点の座標を示す。ここで、2つのマーカ(マーカ8Lおよび8R)の画像を1つの対象画像としてみた場合、中点データDb2は、対象画像の位置を示すことになる。スクリーン座標データDb3は、モニタ2の表示画面に対してコントローラ7が指し示している位置を示すスクリーン座標系の位置データであり、方向データDb1および中点データDb2を用いて算出される。チェックカウンタデータDb4は、チェックカウンタ値CCを示すデータである。チェックカウンタ値CCは、コントローラ7が指し示している位置が連続して所定範囲内であった回数を正の整数で示し、連続して所定範囲外であった回数を負の整数で示す。有効フラグデータDb5は、有効フラグfの状態を示すデータである。有効フラグfは、コントローラ7からの処理結果データをゲーム処理に用いることが可能な状態であるときに有効(true)に設定され、処理結果データをゲーム処理に用いることができない状態であるときに無効(false)に設定される。
ゲーム情報Dcは、指示位置データDc1、プレイヤキャラクタ位置データDc2、仮想カメラデータDc3、第1操作テーブルデータDc4、第2操作テーブルデータDc5、および画像データDc6等が含まれる。指示位置データDc1は、スクリーン座標データDb3に基づいて、表示画面に表示される仮想3次元ゲーム画像上において、当該スクリーン座標に対応する(重なる)仮想ゲーム空間の位置を示す座標データである。プレイヤキャラクタ位置データDc2は、プレイヤキャラクタPが配置される仮想ゲーム空間の位置を示す座標データである。仮想カメラデータDc3は、仮想カメラCが配置される仮想ゲーム空間の視点位置および視線方向を示すデータである。第1操作テーブルデータDc4および第2操作テーブルデータDc5は、第1操作モードおよび第2操作モードでそれぞれ操作手段に対応するゲーム制御処理内容を示すデータである。画像データDc6は、プレイヤキャラクタ画像データ、他のキャラクタ画像データ、背景画像データ等を含み、仮想ゲーム空間にプレイヤキャラクタや他のキャラクタを配置してゲーム画像を生成するためのデータである。
図19を参照して、第1操作テーブルデータDc4の一例について説明する。第1操作テーブルデータDc4は、上述した第1操作モードにおいてプレイヤの操作に対応したゲーム制御処理内容が記述された第1操作テーブルを示すデータである。例えば、第1操作テーブルには、プレイヤが十字キー(操作ボタン72a)の上下方向の突出片(コントローラ7を横持ちするとプレイヤから見て左右方向の突出片)を押下することに応じて、仮想ゲーム空間をプレイヤキャラクタPが左右に移動することが記述されている。プレイヤが十字キーの左方向の突出片(コントローラ7を横持ちするとプレイヤから見て下方向の突出片)を押下することに応じて、仮想ゲーム空間でプレイヤキャラクタPがしゃがむ動作をすることが記述されている。プレイヤが1番ボタン(操作ボタン72b)を押下することに応じて、プレイヤキャラクタPが第1ビームを撃つことが記述されている。プレイヤが1番ボタンを所定時間継続して押下(長押し)した後、1番ボタンの押下をやめる(離す、リリースする)ことに応じて、プレイヤキャラクタPがチャージした後に第1ビームを撃つことが記述されている。プレイヤが十字キーの右方向の突出片(コントローラ7を横持ちするとプレイヤから見て上方向の突出片)を押下しながら、1番ボタンを押下することに応じて、プレイヤキャラクタPが第1ビームとは異なった第2ビームを撃つことが記述されている。プレイヤが2番ボタン(操作ボタン72c)を押下することに応じて、仮想ゲーム空間をプレイヤキャラクタPがジャンプすることが記述されている。プレイヤがAボタン(操作ボタン72d)を押下することに応じて、仮想カメラCとプレイヤキャラクタPとの距離を長くすることが記述されている。そして、加速度データDa4を用いて算出されたコントローラ7の傾きに応じて、プレイヤキャラクタPが所持する銃Gの銃口方向(プレイヤキャラクタPの攻撃方向であり、弾の発射方向)を変更することが記述されている(すなわち、弾の発射方向パラメータが決定される)。具体的には、たとえば、横持ち時にコントローラの左端を上に持ち上げたとき、弾の発射方向がプレイヤキャラクタの位置から左上方向になるように設定される。
なお、本実施例では、後述の通り、プレイヤキャラクタPはルートR上を移動するので、プレイヤキャラクタPの移動制御は、十字キーの左右方向のみでおこなうが、プレイヤキャラクタPがルートR上に限らず自由に移動できる場合には、十字キーの上下方向の指示でプレイヤキャラクタPを他の方向へ移動させてもよい。
図20を参照して、第2操作テーブルデータDc5の一例について説明する。第2操作テーブルデータDc5は、上述した第2操作モードにおいてプレイヤの操作に対応したゲーム制御処理内容が記述された第2操作テーブルを示すデータである。例えば、第2操作テーブルには、プレイヤがコントローラ7で指し示したスクリーン座標の位置に照準カーソルTを移動させることが記述されている(なお、照準カーソルTは射撃位置を示すものであり、照準カーソルTを移動することによって弾の発射方向パラメータが決定される。より具体的には、照準カーソルTに対応する仮想ゲーム空間内の位置とプレイヤキャラクタの位置を結ぶ方向が発射方向パラメータとして設定される)。プレイヤがBボタン(操作ボタン72i)を押下しながらコントローラ7でゲーム画像の周辺領域を指し示すことに応じて、仮想カメラCの方向を変更することが記述されている。プレイヤがAボタンを押下することに応じて、プレイヤキャラクタPが第1ビームを撃つことが記述されている。プレイヤがAボタンを長押しした後、Aボタンを離すことに応じて、プレイヤキャラクタPがチャージした後に第1ビームを撃つことが記述されている。プレイヤがAボタンおよびBボタンを押下した後、Aボタンのみ離すことに応じて、プレイヤキャラクタPが第1ミサイルを撃つことが記述されている。プレイヤがAボタンおよびBボタンを押下した後、Aボタンを長押しして離すことに応じて、プレイヤキャラクタPが第1ミサイルとは異なった第2ミサイルを撃つことが記述されている。
加速度データDa4を用いて算出されたコントローラ7の動きが振り上げる動作の場合、仮想ゲーム空間をプレイヤキャラクタPがジャンプすることが記述されている。加速度データDa4を用いて算出されたコントローラ7の動きが手前に引く動作の場合、仮想ゲーム空間をプレイヤキャラクタPが振り返ることが記述されている。そして、プレイヤがBボタンを押下している間、仮想カメラCの視点がプレイヤキャラクタPの頭部に移動する(すなわち、前述のPhの位置に移動する)ことが記述されている。また、プレイヤがコントローラ7で仮想ゲーム空間(疑似3次元画像)を照準カーソルTにより指し示した状態で、Aボタンを押しながら、コントローラ7を上に振り上げた後振り下ろす動作をした場合、当該照準カーソルTで指し示された仮想ゲーム空間内の位置に対して第1ビームとは異なった第2ビームを撃つ(または、先端に鎖のついたチェーンなどの武器が飛んでいくようにしてもよい)ことが記述されている。この場合、Aボタンを押すことで、後述のステップ84の判断がYESとなり、その後コントローラ7の振り上げによりコントローラ7で指し示されたスクリーン座標系の位置座標が所定範囲内でなくなったとしても、客観的画像への切り替えや第1操作モードへの切り替えがおこらない。
なお、本実施例では、照準カーソルTの位置に対応する仮想ゲーム空間の位置に弾が発射されるように制御するが、変形例では、照準カーソルTの位置に対応する仮想ゲーム空間の位置に向かってプレイヤキャラクタPが移動するように制御しても良い。
第1操作テーブルおよび第2操作テーブルを比較すれば明らかなように、それぞれ操作手段に対応するゲーム制御処理内容が異なっている。例えば、プレイヤがAボタンを押下することに応じて、第1操作テーブルでは仮想カメラCの位置が変更されるが、第2操作テーブルではプレイヤキャラクタPが第1ビームを撃つ。また、第1操作テーブルでは撮像情報演算部74からの処理結果データやBボタンを用いる処理が記述されていない。これは、第1操作モードではプレイヤがコントローラ7を横持ちするためにBボタンを押下しにくい状態にあり、また撮像情報演算部74がマーカ8Lおよび8Rを撮像できない状態にあるため、プレイヤがそれらの操作手段を用いることが困難になるからである。このように、第1操作テーブルおよび第2操作テーブルには、プレイヤがコントローラ7を把持する方向やコントローラ7が指し示す方向によって切り替わる操作モードに応じて、プレイヤの操作に好適なゲーム制御内容が記述される。
次に、図21および図22を参照して、ゲーム装置3において行われるゲーム処理の詳細を説明する。なお、図21は、ゲーム装置3において実行されるゲーム処理の前半の流れを示すフローチャートである。図22は、ゲーム装置3において実行されるゲーム処理の後半の流れを示すフローチャートである。なお、図21および図22に示すフローチャートにおいては、ゲーム処理のうち、コントローラ7を用いた操作モードの切り替えに関するゲーム処理について主に説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図21および図22では、CPU30が実行する各ステップを「S」と略称する。
ゲーム装置3の電源が投入されると、ゲーム装置3のCPU30は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ33等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ33に読み込まれ、CPU30によって当該ゲームプログラムの実行が開始される。図21および図22に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
図21において、CPU30は、ゲーム処理の初期設定を行い(ステップ50)、処理を次のステップに進める。例えば、CPU30は、チェックカウンタ値CCを0に設定してチェックカウンタデータDb4として記憶させる。また、CPU30は、有効フラグfをfalseに設定して有効フラグデータDb5として記憶させる。
次に、CPU30は、コントローラ7から受信した操作情報を取得して(ステップ51)、処理を次のステップに進める。そして、CPU30は、操作情報を操作情報Daとしてメインメモリ33に記憶する。ここで、ステップ51で取得される操作情報には、マーカ8Lおよび8Rの撮像画像内における位置を示す座標データ(第1座標データDa1および第2座標データDa2)の他、コントローラ7の操作部72がどのように操作されたか示すデータ(キーデータDa3)、および加速度センサ701が検出した加速度を示すデータ(加速度データDa4)が含まれている。ここでは、通信部75は、所定の時間間隔(例えば5ms間隔)で操作情報をゲーム装置3へ送信する。そして、CPU30は、1フレーム毎に操作情報を利用するものとする。したがって、図21および図22に示すステップ51〜ステップ94の処理ループは、1フレーム毎に繰り返し実行される。
次に、CPU30は、コントローラ7から有効な処理結果データ(第1座標データDa1および第2座標データDa2)が得られているか否かを判断する(ステップ52)。例えば、CPU30は、第1座標データDa1および第2座標データDa2の少なくとも一方が最新の座標情報に更新されている場合(つまり、撮像情報演算部74がマーカ8Lおよび8Rの少なくとも一方を撮像している場合)、有効な処理結果データが得られていると判断する。そして、CPU30は、有効な処理結果データが得られている場合、処理を次のステップ53に進める。一方、CPU30は、有効な処理結果データが得られていない場合、処理を次のステップ58に進める。
ステップ53において、CPU30は、上記ステップ51で取得した操作情報を用いてスクリーン座標系の位置座標を算出してスクリーン座標データDb3として格納し(ステップ51)、処理を次のステップ54に進める。以下、操作情報を用いてスクリーン座標を算出する一例について詳述する。
上記ステップ53において、CPU30は、第1座標データDa1から第2座標データDa2への方向データDb1を算出する。具体的には、CPU30は、第1座標データDa1および第2座標データDa2を参照して、第1座標データDa1の位置を始点とし第2座標データDa2の位置を終点とするベクトルを算出する。そして、CPU30は、算出されたベクトルのデータを、方向データDb1としてメインメモリ33に記憶する。方向データDb1と所定の基準方向との差によって、コントローラ7の撮像面に垂直な方向を軸とする回転を算出することができる。
また、CPU30は、第1座標データDa1と第2座標データDa2との中点を示す中点データDb2を算出する。具体的には、CPU30は、第1座標データDa1および第2座標データDa2を参照して、当該中点の座標を算出する。そして、CPU30は、算出された中点の座標のデータを、中点データDb2としてメインメモリ33に記憶する。ここで、中点データDb2は、撮像画像内における対象画像(マーカ8Lおよび8R)の位置を示している。中点データDb2と所定の基準位置との差によって、コントローラ7の位置の変化による画像位置の変化を算出することができる。
ここで、マーカ8Lおよび8Rと、モニタ2の表示画面と、コントローラ7との位置関係について考える。例えば、モニタ2の上面に2つのマーカ8Lおよび8Rを設置し(図10参照)、上面が上方向を向いたコントローラ7を用いてプレイヤがモニタ2の表示画面の中央を指し示した場合(撮像情報演算部74の撮像画像の中央に表示画面中央が撮像されている状態)を考える。このとき、撮像情報演算部74の撮像画像において、対象画像の中点(マーカ8Lおよび8Rの中点)位置と指し示した位置(表示画面中央)とが一致しない。具体的には、上記撮像画像における対象画像の位置は撮像画像の中心から上方の位置となる。このような位置に対象画像が位置する場合に、表示画面中央を指し示しているという基準位置の設定を行う。一方、コントローラ7の移動に対応して、撮像画像中の対象画像の位置も移動する(移動方向は逆方向となる)ので、撮像画像中の対象画像の位置の移動に対応させて表示画面を指し示す位置を移動させる処理を行うことによって、コントローラ7で指し示された表示画面基準の位置(スクリーン座標系の位置座標)を算出することができる。ここで、基準位置の設定は、予めプレイヤが表示画面の所定位置を指し示し、そのときの対象画像の位置を当該所定位置と対応させて記憶しておくようにしてもよいし、対象画像と表示画面との位置関係が固定的であれば、予め設定されていても良い。また、マーカ8Lおよび8Rが、モニタ2とは別体で設けられてモニタ2の近く(モニタ2の上や下など)に載置されて使用されるものである場合には、ゲーム開始前に、マーカ8Lおよび8Rをモニタに対してどの位置に載置しているかをプレイヤに入力させ(例えば、モニタ2の上に載置したか下に載置したか等の選択肢から選択させ)、光ディスク4やゲーム装置3の内蔵不揮発メモリなどに、モニタの上に載置した場合の基準位置データと、モニタの下に載置した場合の基準位置データをそれぞれ記憶しておいて、それらを選択して使用してもよい。このようなスクリーン座標系の位置座標は、中点データDb2からモニタ2の表示画面基準の座標(スクリーン座標データDb3)を算出する関数を用いた線形変換で算出される。この関数は、ある撮像画像から算出される中点座標の値を、当該撮像画像が撮像される時のコントローラ7によって指し示される表示画面上の位置(スクリーン座標系の位置座標)を表す座標に変換するものである。この関数によって、中点座標から表示画面を基準とした指し示し位置を算出することができる。
しかしながら、上面が上方向以外(例えば、右方向)を向いたコントローラ7を用いてプレイヤがモニタ2の表示画面の中央を指し示した場合、上記撮像画像における対象画像の位置は撮像画像の中心から上方以外(例えば、左方)の方向にずれた位置となる。つまり、コントローラ7の傾きによって、コントローラ7の移動方向と、表示画面基準の指し示し位置の移動方向が一致しないことになる。そこで、方向データDb1に基づいて、中点データDb2を補正する。具体的には、中点データDb2を、コントローラ7の上面が上方向を向いた状態であるとした場合における中点座標に補正する。より具体的には、上記基準位置の設定の際には方向データの基準も設定され、ステップ64で算出された中点データDb2を、方向データDb1と当該基準方向との角度差に応じた量だけ、撮像画像の中心を軸として中点データDb2が示す座標を回転移動させて補正する。そして、補正された中点データDb2を用いて上述したようにスクリーン座標データDb3を算出する。
図21に戻り、ステップ54において、CPU30は、スクリーン座標系の位置座標が所定範囲内か否かを判断する。そして、CPU30は、位置座標が所定範囲内である場合、処理を次のステップ55に進める。一方、CPU30は、位置座標が所定範囲外である場合、処理を次のステップ58に進める。ここで、上記所定範囲は、コントローラ7が指し示した位置が検出可能な範囲内であれば、どのような範囲でもよい。例えば、検出可能な範囲がモニタ2の表示画面より大きな領域である場合、上記所定範囲を表示画面と同じ範囲に指定してもいいし、表示画面より大きな範囲に指定してもかまわない。また、表示画面の一部を上記所定範囲に指定してもかまわない。
ステップ55において、CPU30は、チェックカウンタデータDb4として記憶されているチェックカウンタ値CCが0未満か否かを判断する。そして、CPU30は、チェックカウンタ値CCが0未満である場合、チェックカウンタ値CCを0に設定して(ステップ56)、処理を次のステップ57に進める。一方、CPU30は、チェックカウンタ値CCが0以上である場合、そのまま処理を次のステップ57に進める。そして、CPU30は、ステップ57において現在のチェックカウンタ値CCに1を加算してチェックカウンタデータDb4を更新し、処理を次のステップ61に進める。
一方、有効な処理結果データが得られていない場合(上記ステップ52でNo)およびスクリーン座標系の位置座標が所定範囲外である場合(上記ステップ54でNo)、CPU30は、処理をステップ58に進める。ステップ58において、CPU30は、チェックカウンタデータDb4として記憶されているチェックカウンタ値CCが0より大きいか否かを判断する。そして、CPU30は、チェックカウンタ値CCが0より大きい場合、チェックカウンタ値CCを0に設定して(ステップ59)、処理を次のステップ60に進める。一方、CPU30は、チェックカウンタ値CCが0以下である場合、そのまま処理を次のステップ60に進める。そして、CPU30は、ステップ60において現在のチェックカウンタ値CCから1を減算してチェックカウンタデータDb4を更新し、処理を次のステップ61に進める。
次に、CPU30は、チェックカウンタデータDb4に記憶されているチェックカウンタ値CCが2より大きいか否か(ステップ61)、およびチェックカウンタ値CCが−8以下か否か(ステップ63)を判断する。そして、CPU30は、チェックカウンタ値CCが2より大きい場合(ステップ61でYes)、有効フラグfをtrueに設定して有効フラグデータDb5として記憶させて(ステップ62)、処理を次のステップ81(図22)に進める。また、CPU30は、チェックカウンタ値CCが−8以下である場合(ステップ63でYes)、有効フラグfをfalseに設定して有効フラグデータDb5として記憶させて(ステップ64)、処理を次のステップ81に進める。また、CPU30は、チェックカウンタ値CCが−8より大きく2以下である場合(ステップ61およびステップ63が何れもNo)、そのまま処理を次のステップ81に進める。
上記ステップ52〜ステップ64の処理から明らかなように、スクリーン座標系の位置座標が所定範囲外から所定範囲内に移動したときにチェックカウンタ値CCが0に設定され、連続して、再度スクリーン座標系の位置座標が所定範囲内であることが確認できたときに有効フラグfがtrueに設定される。そして、スクリーン座標系の位置座標が所定範囲内である限り、有効フラグfがtrueとなる。一方、スクリーン座標系の位置座標が所定範囲内から所定範囲外に移動したときにチェックカウンタ値CCが0に設定され、その後連続して7回の処理周期でスクリーン座標系の位置座標が所定範囲外であることが確認されたときに有効フラグfがfalseに設定される。そして、スクリーン座標系の位置座標が所定範囲外である限り、有効フラグfがfalseとなる。つまり、有効フラグfがfalseからtrueへの変化に対して、有効フラグfがtrueからfalseへの変化が遅いことになる。したがって、後述により明らかとなるが、第1操作モードから第2操作モードへは移行が早く、第2操作モードから第1操作モードへは移行が遅い設定となっている。
図22において、ステップ81でCPU30は、有効フラグデータDb5として記憶されている有効フラグfがfalseか否かを判断する。そして、CPU30は、有効フラグfがfalseである場合、現在、客観的画像であるか否か(ステップ82)、特殊な動作中であるか否か(ステップ83)、特殊な操作中であるか否か(ステップ84)、および加速度変化量が閾値以上か否か(ステップ85)をそれぞれ判断して、ステップ82〜ステップ85が何れもNoである場合、処理を次のステップ86に進める。一方、CPU30は、有効フラグfがtrueである場合、またはステップ83〜ステップ85の少なくとも1つの判断がYesである場合、処理を次のステップ88に進める。また、CPU30は、ステップ82の判断がYesである場合、処理を次のステップ92に進める。
ステップ86において、CPU30は、第2操作モードから第1操作モードに移行し、客観的画像(図14および図15参照)に切り替えた仮想カメラCの位置および方向を算出して仮想カメラデータDc3に記憶する。なお、客観的画像における仮想カメラCの位置および方向については、図14および図15を用いて説明した方法と同様であるため、ここでは詳細な説明を省略する。そして、CPU30は、ゲーム制御処理に用いる操作テーブルを第2操作テーブルから第1操作テーブル(図19参照)に切り替えて(ステップ87)、処理を次のステップ92に進める。
一方、CPU30は、有効フラグfがtrueである場合、またはステップ83〜ステップ85の少なくとも1つの判断がYesである場合、現在、主観的画像であるか否か(ステップ88)および特殊な動作中であるか否か(ステップ89)をそれぞれ判断する。そして、ステップ88およびステップ89の判断が何れもNoである場合、処理を次のステップ90に進める。一方、CPU30は、ステップ88およびステップ89の少なくとも1つの判断がYesである場合、処理を次のステップ92に進める。
ステップ90において、CPU30は、第1操作モードから第2操作モードに移行し、主観的画像(図16および図17参照)に切り替えて仮想カメラCの位置および方向を算出して仮想カメラデータDc3に記憶する。なお、主観的画像における仮想カメラCの位置および方向については、図16および図17を用いて説明した方法と同様であるため、ここでは詳細な説明を省略する。そして、CPU30は、ゲーム制御処理に用いる操作テーブルを第1操作テーブルから第2操作テーブル(図20参照)に切り替えて(ステップ91)、処理を次のステップ92に進める。
ステップ92において、CPU30は、現在対象となっている第1操作テーブルまたは第2操作テーブルを用いて、上記ステップ51で取得した操作情報に応じたゲーム制御処理を行い、処理を次のステップに進める。CPU30は、操作情報Daとして更新されて格納されているキーデータDa3および加速度データDa4と、操作状態情報Dbとして更新されて格納されているスクリーン座標データDb3および指示位置データDc1とを用いて、プレイヤキャラクタPにアクションや移動をさせたり、仮想カメラCを移動させたりする。ここで、ステップ92で用いる操作テーブルは、第1操作モードおよび第2操作モードによってそれぞれ異なるため、それぞれの操作手段に対応するゲーム制御処理の内容が異なることになる。したがって、プレイヤは、それぞれの操作モードに応じてコントローラ7を操作してゲームをコントロールすることができる。
また、第2操作モードにおいて、上記ステップ53で算出したスクリーン座標系の位置座標をゲーム空間内における位置を表す座標に変換する場合には、当該スクリーン座標系における位置に対応するゲーム空間内における位置にさらに変換すればよい。ここで、スクリーン座標系における位置に対応するゲーム空間内における位置とは、モニタ2の表示画面上における位置に表示されるゲーム空間内における位置(例えば、透視投影される位置)やスクリーン座標系の位置座標から直接的に指定されるゲーム空間の3次元座標値等である。
上記スクリーン座標データDb3の算出処理の本質的な原理は、コントローラ7の移動による対象画像の位置の変化によって、指し示された2次元座標の所定の基準位置からの変位を算出し、座標を設定するというものである。したがって、スクリーン座標系の位置座標は、他の2次元座標の入力としても幅広く用いることができる。例えば、スクリーン座標系の位置座標をワールド座標系におけるx座標およびy座標の値として直接的に用いることができる。この場合、モニタ2の表示画面とは無関係に、対象画像の移動をワールド座標系におけるx座標およびy座標の基準位置からの移動に対応付ける算出処理を行えばよい。また、2次元のゲーム画像がモニタ2に表示されている場合などは、スクリーン座標系の位置座標をそのまま2次元のゲーム座標系におけるx座標およびy座標の値として直接的に用いることができる。
次に、CPU30は、仮想カメラCを視点とした仮想ゲーム空間を描画し、モニタ2にゲーム画像を表示して(ステップ93)、処理を次のステップに進める。ここで、仮想ゲーム空間の仮想カメラCは、現在の操作モードに応じてプレイヤキャラクタPに対する客観的画像または主観的画像となるようにパラメータが設定される。そして、プレイヤの操作に応じて、仮想カメラCの配置位置を調整してゲーム画像を生成する。
例えば、第2操作モードにおいてプレイヤがコントローラ7の1番ボタン(操作ボタン72b)を押下している場合、プレイヤキャラクタPの頭部を視点とする主観的画像の位置に仮想カメラCが配置される。
また、第2操作モードにおいてプレイヤがコントローラ7のBボタン(操作ボタン72i)を押下しながら、コントローラ7で指し示す位置(照準カーソルTの位置)を移動した場合に、当該照準カーソルTの位置がゲーム画像の周辺領域(例えば、図16に示すの表示画像内の周辺領域A、または、表示画像外の周辺領域)に入ったとき、または、当該照準カーソルTが当該周辺領域に入っている状態で、Bボタンを押下した場合には、当該照準カーソルTの位置に応じた仮想ゲーム空間の位置がモニタ2の表示画面に表示されるような方向に仮想カメラCの方向を変化させる(このとき、仮想カメラCの視点位置は変更しなくてもよい)。すなわち、照準カーソルTがゲーム画像の上部領域にあるときには、仮想カメラCの方向を現在の方向よりも上向きに変更し、下部領域にあるときには、現在の方向より下向きに変更し、右部領域にあるときには、現在の方向よりも右向きに変更し、左部領域にあるときには、現在の方向よりも左向きに変更する(つまり、プレイヤがコントローラ7で表示画面外を指し示した方向にゲーム画像がスクロールするようにモニタ2に表示される。)。なお、この状態において(すなわち、Bボタンを押しながら照準カーソルが当該周辺領域に入ったとき、または、照準カーソルが当該周辺領域に入っている状態でBボタンを押したときに、仮想カメラCの方向が変化している状態において)、さらに、コントローラ7で指し示す位置がゲーム画像外または表示画面外または検出不能になったときは、Bボタンが押され続けている限り、当該周辺領域において最後に照準カーソルが存在していた領域(上部/下部/左部/右部)に応じて上方向/下方向/左方向/右方向に仮想カメラの方向を変化させ続けても良い。
ここで、上述したゲーム画像がスクロールする状態は、後述から明らかとなるがステップ84でYesと判断されてコントローラ7が上記所定範囲外を指し示しているにもかかわらず第2操作モードから第1操作モードへの移行がされない状態である。つまり、この状態は、プレイヤにコントローラ7で上記所定範囲外を指し示しているのに第1操作モードに移行しない不安を与えることが考えられる。例えば、プレイヤがBボタンを押下した状態でコントローラ7を縦持ちから横持ちへ変更した場合、この事態が顕著となる。しかしながら、コントローラ7の下面凹部に設けられたBボタンは、コントローラ7を横持ちするとプレイヤの指から強制的に離れる(図9参照)ため、上記不安を与える事態を自然に避けることができる。
次に、CPU30は、ゲームを終了するか否かを判断する(ステップ94)。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件(例えば、プレイヤキャラクタPの体力を示すパラメータが0になったこと等)が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU30は、ゲームを終了しない場合に上記ステップ51(図21)に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
ここで、上述した各ステップ81〜ステップ85の具体的内容について説明する。上記ステップ83〜ステップ85が実行される条件は、有効フラグfがfalseで主観的画像である状態である。つまり、コントローラ7で指し示されたスクリーン座標系の位置座標が所定範囲内にない状態(例えば、プレイヤがコントローラ7の前面をモニタ2に向けていない)でありながら、仮想カメラCの視点が主観的画像に設定されている状態である。具体的には、特殊な動作中、特殊な操作中、および加速度変化量が閾値以上のときは、第2操作モードから第1操作モードへの移行および主観的画像から客観的画像への移行を行わない。
上記ステップ83の条件である特殊な動作中とは、第2操作モードにおいて仮想ゲーム空間でプレイヤキャラクタPが特殊な動作をしている途中であることを示しており、例えば、加速度センサの振り上げ入力により仮想ゲーム空間においてプレイヤキャラクタPがジャンプ中の状態や、Aボタンの長押によりビームチャージ中の状態等である。なお、ジャンプ中の状態を判定する場合、ジャンプ動作が完了するまで「動作中」と判定してもよいし、ジャンプ動作が完了してしばらくの間も含めて「動作中」と判定してもよいし、ジャンプ動作の途中までの所定期間のみ「動作中」と判定してもよい。また、上記ステップ84の条件である特殊な操作中とは、第2操作モードにおいてプレイヤがコントローラ7を用いた特殊な操作をしている途中であることを示しており、例えば、プレイヤがBボタン(操作ボタン72i)や1番ボタン(操作ボタン72b)を押下している操作中であることを示している。ここで、図20に示したように、第2操作モードでプレイヤがBボタンを押下しているときは、ゲーム画像をスクロールするように表示している状態や、他のボタン操作の組み合わせによって操作する途中段階であることが多い。また、第2操作モードでプレイヤが1番ボタンを押下しているときは、視点がプレイヤキャラクタPの頭部に移動している状態である。これらの例のように、特殊な動作中や特殊な操作中に操作モードや視点を強制的に切り替えると、プレイヤの操作が強制的にキャンセルされたり、視点の切り替えに無理があるゲーム画面の変更になったりすることによって、操作に混乱が生じることがある。このようなモード変更を防止するために、動作中および操作中においてモード切り替えを一部制限している。
上記ステップ85の条件である加速度変化量が閾値以上のときとは、加速度センサ701が検出したX、Y、およびZ軸方向の加速度を合成した変化量が予め設定された閾値以上を示しているときである(なお、所定成分が閾値以上であることを検出してもよい)。例えば、第2操作モードにおいて、プレイヤがコントローラ7全体を移動させることによって操作しているとき(例えば、コントローラ7を振り上げる等)、コントローラ7で指し示している位置が上述した所定範囲から逸脱することもある。この所定範囲からの逸脱に応じて、第2操作モードから第1操作モードへ移行してしまうと、プレイヤの操作に混乱が生じる。また、コントローラ7で指し示す位置が上記所定範囲から逸脱することなくコントローラ7全体を移動させることは、非常に困難となる。したがって、このようなモード変更を防止するために、コントローラ7全体をプレイヤが移動させているときは、加速度センサ701が検出するX、Y、およびZ軸方向の加速度の変化量の何れかが大きくなることを利用して、コントローラ7の移動中はモード変更が行われないように制御している。
また、上述した各ステップ81、ステップ88、およびステップ89の具体的内容について説明する。上記ステップ89が実行される条件は、有効フラグfがtrueで客観的画像である状態である。つまり、コントローラ7で指し示されたスクリーン座標系の位置座標が所定範囲内にある状態(例えば、プレイヤがコントローラ7の前面をモニタ2に向けている)でありながら、仮想カメラCの視点が客観的画像に設定されている状態である。具体的には、特殊な動作中のときは、第1操作モードから第2操作モードへの移行および客観的画像から主観的画像への移行を行わない。
上記ステップ89の条件である特殊な動作中とは、第1操作モードにおいて仮想ゲーム空間でプレイヤキャラクタPが特殊な動作をしている途中であることを示しており、例えば、上記ステップ83と同様に仮想ゲーム空間においてプレイヤキャラクタPがジャンプ中の状態等である。この例のように、特殊な動作中に操作モードや視点を強制的に切り替えると、視点の切り替えに無理があるゲーム画面の変更になることによって、操作に混乱が生じることがある。このようなモード変更を防止するために、第1操作モードから第2操作モードへの移行においても動作中においてモード切り替えを一部制限している。
なお、上述した客観的画像および主観的画像や各操作手段における操作に対応するゲーム制御内容は、単なる一例であり他の視点変更や他のゲーム制御内容に設定しても本発明を実現できることは言うまでもない。例えば、第1操作モードでは、仮想ゲーム空間における銃口方向を加速度センサ701が検出した加速度に応じて変更しているが、コントローラ7に設けられた操作部72の何れかの操作によって変更してもかまわない。また、コントローラ7にジョイスティックが設けられている場合、第1操作モードでは当該スティックの傾倒方向に応じて銃口方向を変更してもかまわない。このように、コントローラ7に設けられている操作部72の態様に応じて、プレイヤの操作姿勢に合わせて各操作手段における操作に対応するゲーム制御内容を設定することによって、様々な変更が可能となる。
このように、表示画面に対して遠隔から座標指定するためのデータを出力可能なポインティングデバイスを用いてプレイヤが座標指定する位置に応じて、ゲーム処理内容が異なったそれぞれの操作モードに自動的に変更される。変更されるゲーム処理内容の一例として、ゲーム空間における仮想カメラCの配置位置や方向が主観的画像や客観的画像に変更される。変更されるゲーム処理内容の他の例として、各操作手段における操作に対応するゲーム制御内容を変更する。例えば、第1操作モードでは、プレイヤキャラクタPが所持する銃の仮想ゲーム空間における銃口方向(照準位置)を加速度センサ701が検出した加速度や操作部72に対する操作に応じて変更しているが、第2操作モードでは、撮像情報演算部74の処理結果データに応じて照準位置を変更している。また、第1操作モードでは、プレイヤがコントローラ7を横持ちすることによって、プレイヤキャラクタPの横方向から注視点をプレイヤキャラクタPとほぼ一致させたゲーム画像が表示される。そして、第2操作モードでは、モニタ2を指し示すようにプレイヤがコントローラ7を縦持ちすることによって、視点をプレイヤキャラクタPとほぼ一致させて当該プレイヤキャラクタPが対向する方向に注視点を設定したゲーム画像が表示される。したがって、本発明では、表示画面に対して遠隔から座標指定するためのデータを出力可能なポインティングデバイスを用いたゲーム装置において、同じゲームの実行中に適宜操作方法や視点を自動的に変更することができる。
なお、上述した説明では、表示画面に対して遠隔から座標指定するためのデータを出力可能なポインティングデバイスの一例として、コントローラ7に設けられた撮像素子743で撮像対象を撮像した画像データを解析することによって、モニタ2の表示画面に対して座標指定する態様を用いた。この態様は、表示画面近傍に撮像対象となる2つのマーカを設置し、撮像手段およびその撮像方向を自在に変更可能なハウジングを備えたデバイスが撮像画像中の2つのマーカを検出し、当該撮像画像におけるマーカの位置に基づいて当該デバイスが指定する座標位置を導出するものである。しかしながら、他の態様で上記ポインティングデバイスを構成してもかまわない。
例えば、表示画面近傍に設置する撮像対象は、上述した電気的なマーカ(LEDモジュール)の他に、光を反射する部材や特定色や特定形状を有する物理的なマーカでもかまわない。また、モニタ2の表示画面に撮像対象を表示してもかまわない。また、コントローラ7が備える撮像手段でラスタスキャン型モニタの走査線を読み取ることによって、当該モニタ自体を撮像対象にしてもかまわない。また、磁気発生装置を設け、当該磁気発生装置から生じる磁気を利用して遠隔から座標指定してもかまわない。この場合、コントローラ7には、上記磁気を検出するための磁気センサを設けることになる。
また、上述した説明では、2つのマーカ8Lおよび8Rからの赤外光を、コントローラ7の撮像情報演算部74の撮像対象としたが、他のものを撮像対象にしてもかまわない。例えば、1つまたは3つ以上のマーカをモニタ2の近傍に設置し、それらのマーカからの赤外光を撮像情報演算部74の撮像対象としてもかまわない。例えば、所定の長さを有する1つのマーカをモニタ2の近傍に設置しても、本発明を同様に実現することができる。また、モニタ2の表示画面自体や他の発光体(室内灯等)を撮像情報演算部74の撮像対象としてもかまわない。撮像対象とモニタ2の表示画面との配置関係に基づいて、当該表示画面に対するコントローラ7の位置を演算すれば、様々な発光体を撮像情報演算部74の撮像対象として用いることができる。
また、コントローラ7側にマーカ等の撮像対象を設けて、撮像手段をモニタ2側に設けてもかまわない。さらに他の例では、コントローラ7の前面から光を放射する機構を設けてもかまわない。この場合、コントローラ7およびモニタ2とは別の場所にモニタ2の表示画面を撮像する撮像装置を設置し、モニタ2の表示画面にコントローラ7から放射された光が反射した位置を当該撮像装置が撮像した画像から解析することによって、同様に表示画面に対して遠隔から座標指定するためのデータを出力可能なポインティングデバイスを構成することができる。さらに、コントローラ7に設けられた加速度センサ701からの加速度データを用いてコントローラ7の姿勢や動作を算出することによって、表示画面に対して遠隔から座標指定するように構成してもかまわない。このように、ハウジングに加速度センサを備えたコントローラであっても、同様に表示画面に対して遠隔から座標指定するためのデータを出力可能なポインティングデバイスを構成することができる。
また、上述した説明では、コントローラ7とゲーム装置3とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置3とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置3の接続端子に接続する。
また、コントローラ7から無線送信される送信データを受信する受信手段として、ゲーム装置3の接続端子に接続された受信ユニット6を用いて説明したが、ゲーム装置3の本体内部に設けられた受信モジュールによって当該受信手段を構成してもかまわない。この場合、受信モジュールが受信した送信データは、所定のバスを介してCPU30に出力される。
また、撮像素子743で撮像した画像データを解析してマーカ8Lおよび8Rからの赤外光の位置座標やそれらの重心座標等を取得し、それらを処理結果データとしてコントローラ7内で生成してゲーム装置3へ送信する態様を説明したが、他の処理段階のデータをコントローラ7からゲーム装置3へ送信してもかまわない。例えば、撮像素子743が撮像した画像データをコントローラ7からゲーム装置3へ送信し、CPU30において上記解析処理を行って処理結果データを取得してもかまわない。この場合、コントローラ7に設けられた画像処理回路744が不要となる。また、上記画像データの解析途中のデータをコントローラ7からゲーム装置3へ送信してもかまわない。例えば、画像データから得られる輝度、位置、および面積等を示すデータをコントローラ7からゲーム装置3へ送信し、CPU30において残りの解析処理を行って処理結果データを取得してもかまわない。
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、コントローラ7における撮像情報演算部74の位置(撮像情報演算部74の光入射口)は、ハウジング71の前面でなくてもよく、ハウジング71の外部から光を取り入れることができれば他の面に設けられてもかまわない。
また、上述した説明では、第1操作モードにおけるゲーム画像および第2操作モードにおけるゲーム画像は、共に同一の3次元ゲーム空間に対して視点を変更して生成される例を説明したが、他のゲーム画像をモニタ2に表示してもかまわない。例えば、少なくとも一方のゲーム画像が、2次元のゲーム画像であってもかまわない。また、一方のゲーム画像が、アイコン画像等の機能的画像であってもかまわない。例えば、第2操作モードにおけるゲーム画像を複数のアイコンが表示された機能的画像を表示することによって、コントローラ7で指し示されたアイコンを選択する等のプレイヤの操作に好適な態様となる。