図1を参照して、本発明の一実施形態に係る情報処理装置について説明する。以下、説明を具体的にするために、当該情報処理装置の一例の据置型のゲーム装置を含むゲームシステムについて説明する。なお、図1は据置型のゲーム装置3を含むゲームシステム1の外観図であり、図2はゲーム装置本体5のブロック図である。以下、当該ゲームシステム1について説明する。
図1において、ゲームシステム1は、表示手段の一例の家庭用テレビジョン受像機(以下、モニタと記載する)2と、当該モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置本体5から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明の情報処理プログラムの一例のゲームプログラムを記録した光ディスク4と、当該光ディスク4のゲームプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、ゲーム画面に表示されたキャラクタなどの画像などのゲームに必要な操作情報をゲーム装置本体5に与えるためのコントローラ7とを備えている。
また、ゲーム装置本体5は、通信ユニット6を内蔵する。通信ユニット6は、コントローラ7から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7とゲーム装置本体5とは無線通信によって接続する。さらに、ゲーム装置本体5には、当該ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置本体5の前部主面には、当該ゲーム装置本体5の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトスイッチ等が設けられている。
また、ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ38が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置本体5は、フラッシュメモリ38に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置本体5のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
コントローラ7は、通信ユニット6を内蔵するゲーム装置本体5へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて操作情報などの送信データを無線送信する。コントローラ7は、主にモニタ2の表示画面に表示されるゲーム空間に登場するプレイヤオブジェクト等を操作したりするための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キーやスティック等を含む)が設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって例えば赤外光を出力する。また、コントローラ7は、ゲーム装置本体5の通信ユニット6から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
図2において、ゲーム装置本体5は、各種プログラムを実行する例えばCPU(セントラルプロセッシングユニット)30を備える。CPU30は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ33等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU30には、メモリコントローラ31を介して、GPU(Graphics Processing Unit)32、メインメモリ33、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35などが接続される。また、メモリコントローラ31には、所定のバスを介して、通信ユニット6、ビデオI/F(インターフェース)37、フラッシュメモリ38、オーディオI/F39、およびディスクI/F41が接続され、それぞれのインターフェースにモニタ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が接続される。上述したように通信ユニット6は、コントローラ7からの送信データを受信し、当該送信データをCPU30へ出力する。また、通信ユニット6は、CPU30から出力された送信データをコントローラ7の通信部75へ送信する。ビデオI/F37には、モニタ2が接続される。オーディオI/F39にはモニタ2に内蔵されるスピーカ2aが接続され、DSP34がARAM35から読み出したサウンドデータやディスクドライブ40から直接出力されるサウンドデータをスピーカ2aから出力可能に接続される。ディスクI/F41には、ディスクドライブ40が接続される。ディスクドライブ40は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置本体5のバスやオーディオ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は、ゲーム装置本体5が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置本体5の電源をオン/オフする電源スイッチである。この操作ボタン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ボタンとして機能する操作部である。
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング70の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
ここで、以下の説明を具体的にするために、コントローラ7に対して設定する座標系について定義する。図3および図4に示すように、互いに直交するxyz軸をコントローラ7に対して定義する。具体的には、コントローラ7の前後方向となるハウジング71の長手方向をz軸とし、コントローラ7の前面(撮像情報演算部74が設けられている面)方向をz軸正方向とする。また、コントローラ7の上下方向をy軸とし、ハウジング71の下面(操作ボタン72iが設けられた面)方向をy軸正方向とする。さらに、コントローラ7の左右方向をx軸とし、ハウジング71の左側面(図3では表されずに図4で表されている側面)方向をx軸正方向とする。
次に、図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参照)に接続される。マイコン751は、本願発明のボタンデータ発生手段の一例として、操作ボタン72a等の種類に応じた操作ボタンデータを発生させるように機能する。この仕組みは公知技術であるが、例えばキートップ下側に配置されたタクトスイッチなどのスイッチ機構による配線の接触/切断をマイコン751が検出することによって実現されている。より具体的には、操作ボタンが例えば押されると配線が接触して通電するので、この通電がどの操作ボタンにつながっている配線で発生したかをマイコン751が検出し、操作ボタンの種類に応じた信号を発生させている。
また、コントローラ7は、図示しない無線モジュール753(図7参照)およびアンテナ754によって、ワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子703が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。また、加速度センサ701は、操作ボタン72dの左側の基板700上(つまり、基板700の中央部ではなく周辺部)に設けられる。したがって、加速度センサ701は、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ7の回転を良好な感度でゲーム装置本体5等が判定することができる。
一方、図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体5から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。
そして、基板700の下主面上には、バイブレータ704が取り付けられる。バイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704は、基板700等に形成された配線によってマイコン751と接続され、ゲーム装置本体5から送信された振動データに応じてその作動をオン/オフする。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
次に、図7を参照して、コントローラ7の内部構成について説明する。なお、図7は、コントローラ7の構成を示すブロック図である。
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ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に出力される。
他の実施形態の例では、コントローラ7の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるMEMSジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ701と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転(または角速度)を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、2つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロスコープとの基本的な差異と同様にジャイロスコープの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置本体5からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置本体5から送信されたサウンドデータ等を処理する。また、マイコン751は、通信部75を介してゲーム装置本体5から送信された振動データ(例えば、バイブレータ704をONまたはOFFする信号)等に応じて、バイブレータ704を作動させる。
コントローラ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から送信される。そして、ゲーム装置本体5の通信ユニット6でその電波信号を受信し、ゲーム装置本体5で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体5のCPU30は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
次に、図8〜図12を参照して、ゲーム装置本体5が行う具体的な処理を説明する前に、本ゲーム装置本体5で行う処理の概要について説明する。図8Aは、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の前面側から見た一例である。図8Bは、プレイヤがコントローラ7を右手で把持した状態をコントローラ7の左側面側から見た一例である。図9は、親指で操作ボタン72dを強く押し下げたとき、コントローラ7が揺動する様子を示す図である。図10は、マーカ8Lおよび8Rと撮像情報演算部74との視野角を説明するための図である。図11および図12は、プレイヤがコントローラ7を操作した押下強さに応じて、スピーカ2aから再生される音量の大きさおよびモニタ2の表示画面に表示されるオブジェクトOBJの一例を示す図である。
図8Aおよび図8Bに示すように、プレイヤがコントローラ7を操作するとき、例えば一方の手(例えば右手)でコントローラ7を把持する。このとき、プレイヤの親指をコントローラ7の上面(例えば、操作ボタン72d付近)に添え、プレイヤの人差し指をコントローラ7下面の凹部(例えば、操作ボタン72i付近)に添えるようにして、コントローラ7を操作する。なお、このようなコントローラ7に対する把持状態は、プレイヤの左手であっても同様に行えることは言うまでもない。このように、コントローラ7は、プレイヤが片手で把持した状態で操作部72を押下する操作を容易に行うことができる。
図8Bに示した親指で操作ボタン72dを押したとき、コントローラ7は手で把持されているだけなので、図9に示すようにコントローラ7が上下に揺れる。なお、図9においては、コントローラ7を側面側から示しており、破線で押下前のコントローラ7の状態を示し、実線で押下によって揺動したコントローラ7の状態を示している。この上下方向の揺動は、プレイヤが操作ボタン72dを押下する強さが強いほど、その揺動角度θや揺動速度が速くなる傾向がある。このようなコントローラ7の上下の揺れは、ハウジング71全体が下へ揺動する動きに応じてその先端部が下に揺動するという動きになるので、下方向成分に着目すれば加速度センサ701が検出するy軸成分の加速度変化として現れる。一方、動きセンサがジャイロセンサで構成されている場合には、その先端部の揺動が角速度(揺動角度θ)として現れる。そして、コントローラ7の揺れの大きさは、操作ボタン72dを押したときの強さに応じて大きくなるので、加速度センサ701やジャイロセンサの値にアナログ的に現れることとなる。
例えば、操作ボタン72が押下されたタイミングまでにメモリに記録されている動きセンサ(加速度センサ701やジャイロセンサ)の値の変化、そのタイミング時点の動きセンサの値、そのタイミング後にメモリに記録される動きセンサの値の変化、そのタイミング前後の値の変化などを算出することによって、押下された強さを推定することができる。
本実施例では片手でコントローラ7を把持した場合について説明するが、本コントローラ7を横持ちにして両手で把持した場合でも、片手の場合と同じように操作ボタン72を押す強さによってハウジング71が揺れるので、その強さに応じた値が加速度センサ701やジャイロセンサから出力される。なお、コントローラ7を机の上に置いて操作したような場合には、手で把持した場合に比べてその揺れが小さくなるが、操作ボタン72が押される際の衝撃がハウジング71にも伝わるため、このような使用態様であってもアナログ的な値が現れる。また、図9では、操作ボタン72の押下時にハウジング71が下がることによる動きセンサの値を例に説明したが、押下のタイミング時またはその前後の動きセンサの値を利用することで、例えばハウジング71が下がった後には上向きに戻るような動き、さらには、操作ボタン72の押下時の力が大きいほど、ハウジング71が押下げ方向に例えば上下にぶれるため、このような震動成分による値の変化によって、押下げ時の大きさをアナログ的に検出することができる。
また、プレイヤは、コントローラ7の前面(撮像情報演算部74が撮像する光の入射口側)がモニタ2の表示画面と対向するようにコントローラ7を把持することによって、撮像情報演算部74からの情報を用いた操作も可能となる。例えば、上述したように、プレイヤの親指をコントローラ7の上面に添え、プレイヤの人差し指をコントローラ7下面の凹部に添えたとき、コントローラ7の前面に設けられている撮像情報演算部74の光入射口がプレイヤの前方方向に露出する。一方、モニタ2の表示画面近傍には、2つのマーカ8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力し、撮像情報演算部74の撮像対象となる。マーカ8Lおよび8Rは、モニタ2に一体的に設けられても良いし、モニタ2とは別体で設けられてモニタ2の近く(モニタ2の上や下など)に載置されて使用されるものであってもよい。
このように、プレイヤがコントローラ7を片手で把持したとき、当該コントローラ7の前面に設けられている撮像情報演算部74の光入射口が露出するため、上述した2つのマーカ8Lおよび8Rからの赤外光を容易に当該光入射口から取り入れることができる。つまり、プレイヤは、撮像情報演算部74の機能を阻害することなくコントローラ7を片手で把持することができる。ここで、コントローラ7が縦長形状であり、当該長手方向の端部前面に撮像情報演算部74の光入射口が配設されているため、撮像情報演算部74を利用してプレイヤがコントローラ7で指し示すような操作に好適である。
ここで、図10に示すように、マーカ8Lおよび8Rは、それぞれ視野角θ1を有している。また、撮像素子743は、視野角θ2を有している。例えば、マーカ8Lおよび8Rの視野角θ1は共に34°(半値角)であり、撮像素子743の視野角θ2は41°である。そして、撮像素子743の視野角θ2の中にマーカ8Lおよび8Rが共に存在し、マーカ8Lの視野角θ1の中でかつマーカ8Rの視野角θ1の中に撮像素子743が存在するとき、ゲーム装置本体5は、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が撮像した撮像画像に対して所定の基準点を設定した場合に、当該基準点に対する差として用いられるパラメータである。このような位置情報をゲーム装置本体5へ送信することによって、ゲーム装置本体5では、基準からの上記位置情報の差に基づいて、マーカ8Lおよび8Rに対する撮像情報演算部74、すなわちコントローラ7の動き、姿勢、位置等に応じた信号の変化量を得ることができる。具体的には、コントローラ7が動かされることによって、通信部75から送信される画像内の高輝度点の位置が変化するため、高輝度点の位置の変化に対応させた方向入力や座標入力を行うことで、3次元空間に対してコントローラ7の移動方向に沿った方向入力や座標入力を行うことができる。なお、後述する処理動作例では、撮像情報演算部74が撮像画像におけるマーカ8Lおよび8Rの対象画像それぞれの重心位置の座標を少なくとも取得し、上記処理結果データとして出力する例を用いる。
このように、コントローラ7の撮像情報演算部74によっても、固定的に設置されたマーカ(実施例では、2つのマーカ8Lおよび8Rからの赤外光)を撮像することによって、ゲーム装置本体5における処理において、コントローラ7から出力されるデータを処理してコントローラ7の動き、姿勢、位置等に対応した操作が可能となり、ボタンを押下するような操作ボタンや操作キーとは異なった直感的な操作入力となる。また、上述したように上記マーカ8Lおよび8Rは、モニタ2の表示画面近傍に設置されているため、マーカ8Lおよび8Rに対する位置をモニタ2の表示画面に対するコントローラ7の動き、姿勢、位置等に換算することも容易に行うことができる。つまり、コントローラ7の動き、姿勢、位置等による処理結果データは、モニタ2の表示画面に直接作用する操作入力として用いることができ、例えば、表示画面に対してコントローラ7で指し示した位置を算出することができる。したがって、プレイヤがコントローラ7を把持した手をモニタ2の表示画面に対して動かすことによって、プレイヤの手の運動が表示画面に直接的に作用する操作入力を備えることができ、コントローラ7が表示画面に対して座標指定するためのデータを出力可能なポインティングデバイスとして機能する。
本発明を適用して実現する処理の一例として、図8Bに示すように操作部72(例えば、操作ボタン72d)を押下する強さ(以下、押下強さと記載する)に応じて、再生する音量を変化させたり、表示するオブジェクトの大きさや動作を変化させたりする処理がある。
例えば、プレイヤが操作ボタン72dを押下した場合、図11に示すように、スピーカ2aからその押下強さに応じた音量で音声(効果音)が再生される。また、プレイヤが操作ボタン72dを押下した押下強さに応じたサイズのオブジェクトOBJが、モニタ2の表示画面に表示される。
一方、プレイヤが図11の状態よりさらに強く操作ボタン72dを押下した場合、図12に示すように、その押下強さに応じてスピーカ2aから再生される効果音の音量が大きくなる。また、プレイヤが操作ボタン72dを押下した押下強さに応じて、表示されるオブジェクトOBJのサイズも拡大されてモニタ2の表示画面に表示される。
次に、ゲームシステム1において行われる処理の詳細を説明する。まず、図13を参照して、処理において用いられる主なデータについて説明する。なお、図13は、押下強さに応じて音量を変化させる処理を行う場合に、ゲーム装置本体5のメインメモリ33に記憶されるゲームプログラムおよびデータの一例を示す図である。
図13に示すように、メインメモリ33は、プログラム記憶領域33Pおよびデータ記憶領域33Dを有している。そして、プログラム記憶領域33Pには、ゲームプログラムGP等が記憶され、データ記憶領域33Dには、操作情報Da、前回加速度データDb、格納位置データDc、差分データバッファDd、押下強さデータDe、計測中フラグDf、サンプリング範囲データDg、および音量データDh等が記憶される。なお、メインメモリ33には、図13に示すデータの他、処理に応じてゲームに登場するオブジェクトやキャラクタに関する他のデータ等、ゲーム処理に必要なデータが記憶される。
ゲームプログラムGPは、CPU30が処理に必要なプログラムを光ディスク4から読み出して適宜記憶するものであり、処理全体(後述するステップ51〜ステップ87)を定義するプログラムである。このゲームプログラムGPの実行開始によってゲーム処理が開始される。
操作情報Daは、コントローラ7から送信データとして送信されてくる一連の操作情報であり、最新の操作情報に更新される。操作情報Daには、上述の処理結果データに相当する第1座標データDa1および第2座標データDa2が含まれる。第1座標データDa1は、撮像素子743が撮像した撮像画像に対して、2つのマーカ8Lおよび8Rのうちの一方の画像の位置(撮像画像内における位置)を表す座標のデータである。第2座標データDa2は、他方のマーカの画像の位置(撮像画像内における位置)を表す座標のデータである。例えば、マーカの画像の位置は、撮像画像におけるXY座標系によって表される。なお、本発明は、第1座標データDa1および第2座標データDa2が取得できないデバイスでも実現可能であり、後述するフローチャートではこれらのデータを利用しない態様を示す。
また、操作情報Daには、撮像画像から得られる処理結果データの一例の座標データ(第1座標データDa1および第2座標データDa2)の他、操作部72から得られるキーデータDa3および加速度センサ701から得られる加速度データDa4等が含まれる。加速度データDaには、加速度センサ701がx、y、およびz軸の3軸成分に分けてそれぞれ検出したx軸方向加速度データax、y軸方向加速度データay、およびz軸方向加速度データazが含まれる。なお、ゲーム装置本体5に内蔵される通信ユニット6は、コントローラ7から所定間隔(例えば5ms毎)に送信される操作情報Daを受信し、通信ユニット6に備える図示しないバッファに蓄える。その後、ゲーム処理間隔である1フレーム毎(1/60秒)に読み出されてメインメモリ33の操作情報Daが更新される。なお、本実施例では、加速度データDa4は、ゲーム処理間隔である1フレーム毎より短い周期(例えば、約1/20秒)で読み出されて更新される。そして、更新された加速度データDa4を用いた差分値がメインメモリ33(差分データバッファDd)に記憶されていく。
前回加速度データDbは、上記差分値を算出する周期における前回に得た加速度データ(x軸方向加速度データbx、y軸方向加速度データby、z軸方向加速度データbz)である。格納位置データDcは、差分値wを差分データバッファDdに格納する位置を示す格納位置bf_idを示すデータである。差分データバッファDdは、加速度データDa4および前回加速度データDbから得られる加速度ベクトルの大きさの差分値wを、指定された格納位置bf_idに順次格納していく記憶領域である。なお、差分データバッファDdに格納される差分値wのバッファ数はbf_MAXであり、格納位置bf_idが0〜bf_MAX−1にそれぞれ差分値w0〜w(bf_MAX−1)が格納される。また、バッファ数bf_MAXは、後述するボタン情報読み込み処理において参照するデータ数より多い数(例えば、後述する定数Mより多い数)に設定することが好ましい。押下強さデータDeは、プレイヤが操作部72を押下した押下強さpowerを示すデータである。計測中フラグDfは、押下強さを計測中であるか否かを示す計測中フラグfgを示すデータである。サンプリング範囲データDgは、差分データバッファDdに格納された差分値wから、押下強さpowerを算出するために利用するデータ範囲(格納位置id_now〜id_end)を示すデータである。音量データDhは、押下強さpowerから算出された効果音の音量を示すデータである。
次に、図14〜図17を参照して、ゲーム装置本体5において行われる処理の詳細を説明する。なお、図14は、ゲーム装置本体5において実行される処理を示すフローチャートである。図15は、図14のステップ54における加速度情報保存処理の詳細な動作を示すサブルーチンである。図16は、図14のステップ56におけるボタン情報読込処理の詳細な動作を示すサブルーチンである。図17は、図14のステップ57におけるゲームメイン処理の詳細な動作を示すサブルーチンである。なお、図14〜図17に示すフローチャートにおいては、本願発明と直接関連しない他の処理については詳細な説明を省略する。また、図14〜図17では、CPU30が実行する各ステップを「S」と略称する。
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU30は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ33等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ33に読み込まれ、CPU30によって当該プログラムの実行が開始される。図14に示すフローチャートは、以上の処理が完了した後に行われる処理を示すフローチャートである。
図14において、CPU30は、ゲーム処理の初期設定を行い(ステップ51〜ステップ53)、処理を次のステップに進める。
例えば、CPU30は、データ記憶領域33Dに格納されている加速度情報を初期化する(ステップ51)。ここで、加速度情報は、前回加速度データDb、格納位置データDc、差分データバッファDd、およびサンプリング範囲データDg等に相当する。具体的には、CPU30は、前回加速度データDbに格納されているx軸方向加速度データbx、y軸方向加速度データby、およびz軸方向加速度データbzを全て0、すなわち(bx,by,bz)=(0,0,0)とする。また、CPU30は、格納位置データDcとして記憶されている格納位置をbf_id=0に初期化する。また、CPU30は、差分データバッファDdに格納されている差分値wを全て0に初期化する。さらに、CPU30は、サンプリング範囲データDgに格納されている格納位置をid_now=0、id_end=0に初期化する。
また、CPU30は、データ記憶領域33Dに格納されているボタン情報を初期化する(ステップ52)。ここで、ボタン情報は、押下強さデータDeおよび計測中フラグDf等に相当する。例えば、CPU30は、押下強さデータDeに格納されている押下強さをpower=0に初期化する。また、CPU30は、計測中フラグDfに格納されている計測中フラグをfg=0に初期化する。
さらに、CPU30は、データ記憶領域33Dに格納されているゲーム情報を初期化する(ステップ53)。ここで、ゲーム情報は、音量データDh等に相当し、他にゲーム処理に使用する他のパラメータを含んでいる。例えば、CPU30は、音量データDhが示す効果音の音量を所定の最小ボリューム値に初期化する。
次に、CPU30は、ゲーム終了(ステップ55およびステップ58でYes)まで、ステップ54の処理とステップ56およびステップ57の処理をそれぞれ並行にスレッド処理して繰り返す。例えば、ステップ54を繰り返す処理は、ステップ56およびステップ57を繰り返す処理より約3倍の速度で繰り返される。
ステップ54において、CPU30は、加速度情報保存処理を行う。そして、CPU30は、ゲームを継続する場合(ステップ55でNo)、ステップ54を繰り返して行う。以下、図15を参照して、ステップ54で行う加速度情報保存処理について説明する。
図15において、CPU30は、加速度データDa4を読み込み(ステップ61)、処理を次のステップに進める。具体的には、CPU30は、データ記憶領域33Dの加速度データDa4として格納されているx軸方向加速度データax、y軸方向加速度データay、およびz軸方向加速度データazを読み込む。
次に、CPU30は、前回得られた加速度データとの差分を算出して(ステップ62)、処理を次のステップに進める。具体的には、CPU30は、データ記憶領域33Dの前回加速度データDbとして格納されているx軸方向加速度データbx、y軸方向加速度データby、およびz軸方向加速度データbzを読み出す。そして、CPU30は、上記ステップ61で取得した加速度データax、ay、およびazを用いて、x軸方向加速度データの差分vx=ax−bx、y軸方向加速度データの差分vy=ay−by、およびz軸方向加速度データの差分vz=az−bzを算出する。
次に、CPU30は、上記ステップ61で取得した加速度データax、ay、およびazを、前回加速度データDbとして格納して(ステップ63)、処理を次のステップに進める。具体的には、CPU30は、x軸方向加速度データaxをx軸方向加速度データbxとし、y軸方向加速度データayをy軸方向加速度データbyとし、z軸方向加速度データazをz軸方向加速度データbzとして、前回加速度データDbを更新する。
次に、CPU30は、上記ステップ62で算出した差分の大きさ(差分値w)を求めて(ステップ64)、処理を次のステップに進める。例えば、CPU30は、差分値wを、
次に、CPU30は、上記ステップ64で求めた差分値wを差分データバッファDdに格納し(ステップ65)、処理を次のステップに進める。例えば、CPU30は、現在の格納位置データDcが示す格納位置bf_idの位置に差分値wを格納する。
次に、CPU30は、格納位置データDcが示す格納位置bf_idを更新し(ステップ66)、当該サブルーチンによる処理を終了する。例えば、CPU30は、新たな格納位置bf_idを、
bf_id←(bf_id+1)%bf_MAXで求める。ここで、A%Bは、AをBで割った余りを示し、bf_MAXは差分データバッファDdのバッファ数である。
図14に戻り、ステップ56およびステップ57において、CPU30は、それぞれボタン情報処理およびゲームメイン処理を行う。そして、CPU30は、ゲームを継続する場合(ステップ58でNo)、ステップ56およびステップ57を繰り返して行う。以下、図16および図17を参照して、ステップ56およびステップ57で行うボタン情報処理およびゲームメイン処理について説明する。
図16において、CPU30は、キーデータDa3を参照して、押下強さの計測対象とする操作部72(例えば、操作ボタン72d)がOFFからONに変化したか否か、すなわち、当該操作部72を押下していない状態から押下している状態に変化した瞬間か否かを判断する(ステップ71)。そして、CPU30は、計測対象となる操作部72がOFFからONに変化した場合、次のステップ72に処理を進める。一方、CPU30は、計測対象となる操作部72がOFFからONに変化していない場合、次のステップ74に処理を進める。
ステップ72において、CPU30は、押下強さ計測開始処理を行う。例えば、CPU30は、計測中フラグfg=1に設定して計測中フラグDfを更新し、押下強さpower=0に設定して押下強さデータDeを更新する。そして、CPU30は、差分データバッファDdに記述された差分値wから採用するサンプリング範囲を決定して(ステップ73)、処理を次のステップ75に進める。例えば、CPU30は、格納位置bf_idがid_nowからid_endまでに記述されている差分値wをサンプリングする。例えば、格納位置id_nowおよびid_endは、それぞれ
bf_now←(bf_id−M)%bf_MAX
bf_end←(bf_id+N)%bf_MAXで求められる。なお、MおよびNは定数であり、bf_idは格納位置データDcに現在格納されている格納位置bf_idの値である。ここで、後述の説明から明らかになるが、CPU30は、現在の格納位置bf_idを基準にM回前に遡って取得された時点から格納位置bf_idを基準にN回後に取得される時点までの差分値wを、押下強さの計測に採用する。つまり、計測対象の操作部72が押下された瞬間の前後に得られた差分値wを採用しており、押下された前後にコントローラ7の本体に生じた加速度データを利用していることになる。
一方、ステップ74において、CPU30は、計測中フラグDfを参照して押下強さを計測中か否かを判断する。そして、CPU30は、押下強さ計測中(fg=1)の場合、処理を次のステップ75に進める。一方、CPU30は、押下強さ計測中でない(fg=0)場合、当該サブルーチンによる処理を終了する。
ステップ75において、CPU30は、上記ステップ73で決定した格納位置bf_nowが格納位置データDcに現在格納されている格納位置bf_idと同じか否かを判断する。そして、CPU30は、bf_now≠bf_idの場合、処理を次のステップ76に進める。一方、CPU30は、bf_now=bf_idの場合、当該サブルーチンによる処理を終了する。これは、bf_now=bf_idのときは、上記ステップ54の加速度情報保存処理において次の差分値wを格納する位置が格納位置bf_nowとなるためであり、このような格納位置に記述された差分値wを採用することを避けるためである。
ステップ76において、CPU30は、押下強さデータDeに格納された押下強さpowerおよび格納位置id_nowに格納された差分値wを参照し、押下強さpowerに差分値wを累積して新たな押下強さpowerを算出して、押下強さデータDeを更新する。例えば、CPU30は、新たな押下強さpowerを
power←power+wで算出する。そして、CPU30は、格納位置id_nowを更新して(ステップ77)、処理を次のステップに進める。例えば、CPU30は、新たな格納位置id_nowを、
id_now←(id_now+1)%bf_MAXで算出する。
次に、CPU30は、上記ステップ77で更新した格納位置id_nowが上記ステップ73で決定した格納位置bf_endと同じか否かを判断する。そして、CPU30は、bf_now=bf_endの場合、サンプリング範囲の差分値wを全て累積したと判断して、処理を次のステップ79に進める。一方、CPU30は、bf_now≠bf_endの場合、上記ステップ75に戻って処理を繰り返す。
ステップ79において、CPU30は、押下強さ処理計測終了処理を行って、当該サブルーチンによる処理を終了する。例えば、CPU30は、計測中フラグfg=0に設定して計測中フラグDfを更新する。
図17において、CPU30は、キーデータDa3を参照して、押下強さの計測対象とする操作部72がOFFからONに変化したか否か、すなわち、当該操作部72を押下していない状態から押下している状態に変化した瞬間か否かを判断する(ステップ81)。そして、CPU30は、計測対象となる操作部72がOFFからONに変化した場合、次のステップ82に処理を進める。一方、CPU30は、計測対象となる操作部72がOFFからONに変化していない場合、次のステップ84に処理を進める。
ステップ82において、CPU30は、押下強さの計測対象とする操作部72の押下に応じて発する効果音の再生を開始する。そして、CPU30は、押下強さpowerに応じて効果音の音量を設定して音量データDhを更新し、当該音量に応じてスピーカ2aから効果音を発生させ(ステップ83)、次のステップ86に処理を進める。例えば、CPU30は、現在設定されている押下強さpowerに所定の定数を乗じることによって、効果音の音量を設定する。
一方、ステップ84において、CPU30は、計測中フラグDfを参照して押下強さを計測中か否かを判断する。次に、CPU30は、押下強さ計測中(fg=1)の場合、効果音を再生中か否かを判断する(ステップ85)。そして、CPU30は、押下強さ計測中で効果音を再生中である場合(ステップ84およびステップ85が共にYes)、上記ステップ83に処理を進める。つまり、効果音を再生開始した後であっても、その後に累積される新たな押下強さpowerに応じて、発せられる効果音の音量が変化することになる。一方、CPU30は、押下強さ計測中であるが効果音の再生中でない場合(ステップ84でYes、ステップ85でNo)、当該サブルーチンによる処理を終了する。さらに、CPU30は、押下強さ計測中でない場合(ステップ84でNo)、次のステップ86に処理を進める。
ステップ86において、CPU30は、効果音の再生を終了するタイミングか否かを判断する。例えば、効果音の再生を終了するタイミングは、押下強さの計測対象とする操作部72がONからOFFに変化した時点や、当該時点から所定時間経過した時点や、操作部72がOFFからONに変化した時点から所定時間経過した時点等に設定される。そして、CPU30は、効果音の再生を終了するタイミングでない場合(効果音が再生されていない場合を含む)、当該サブルーチンによる処理を終了する。一方、CPU30は、効果音の再生を終了するタイミングが到来した場合、効果音の再生を終了して(ステップ87)、当該サブルーチンによる処理を終了する。
このように、上述したフローチャートの動作によれば、操作ボタン毎に検出素子を設けることなく、操作ボタンを押す強さをゲームに反映させることができる。例えば、コントローラ7に設けられた加速度センサからの加速度データを用いて、操作ボタンに加えられた強さをアナログ的に算出して、当該算出結果に応じた音量で効果音を発生させることができる。
また、上述したフローチャートの動作によれば、操作ボタンがOFFからONに変化する瞬間をトリガーとして、その前後に生じた加速度データの差分を累積して押下強さを算出している。このように加速度データの差分を累積することによって、加速度センサ701が常に検出している重力加速度の影響を除外できることに加え、操作ボタンの押下に使用された操作エネルギーと同価な押下強さの算出が可能となり、瞬間的に操作ボタンを押下するような操作に対しても高感度となる。
また、上記トリガーの前に生じていた加速度データの差分を用いることによって、プレイヤが操作ボタンを押し込むストローク中の押下強さ(押下前の強さ)を算出することができる。また、上記トリガーの後に生じる加速度データの差分を用いることによって、プレイヤが操作ボタンを押し込むことによってコントローラ7本体に与える衝撃力(押下後の強さ)を算出することができる。これらの押下前の押下強さや押下後の押下強さ等の一方を算出する必要がない場合、一方のみにサンプリング期間を設定して押下強さを算出してもかまわない。例えば、押下強さの計測対象とする操作部が上記トリガー状態になるまでの押下ストロークが短い(例えば、接触した瞬間にOFFからONに変化するタッチパネル等)場合、押下前の強さを算出しなくてもかまわない。この場合、上記トリガーから所定時間経過するまでに得られる加速度データの差分を累積して押下強さを算出することになる。具体的には、一方のみをサンプリング期間に設定する場合、上記定数Mを0に設定することによって押下後の所定期間のみをサンプリング期間とできるし、上記定数Nを0に設定することによって押下前から押下までの所定期間のみをサンプリング期間にすることができる。
また、ゲーム処理に要求される押下強さの精度が低い場合、設定されたサンプリング期間全体において生じた加速度データの差分の累積を用いなくてもかまわない。例えば、上記トリガー時点および他の時点で生じた加速度データの差分を用いて押下強さを算出してもかまわない。このような算出は、上記定数MおよびNの設定値を調整することによって行うことができる。さらに、上記トリガー時点で生じた加速度データの絶対値を用いて押下強さを算出してもかまわない。このように、加速度データの差分や差分の累積を行わなくても、2時点で生じた加速度データの差分やある瞬間に生じた加速度データの絶対値を用いることによって、押下強さを算出することも可能である。
また、上述した実施例では、ある特定の操作部72(操作ボタン72d)を押下強さの計測対象としたが、本発明ではコントローラ7の本体の動きに応じた動きデータを発生させる加速度センサ701からの加速度データを用いているために、他の操作部72を押下強さの計測対象にすることも可能である。さらに、複数の操作部72を押下強さの計測対象にすることができることは言うまでもない。このように、本発明では、コントローラ7に備えられた全ての操作部72に加えられた強さをそれぞれアナログ的に検出することができるが、それぞれの操作部72に特別なデバイスを用意する必要はなく、1つの加速度センサ701で実現可能であるため、コスト面で非常に有利である。
また、コントローラ7に設けられた加速度センサ701は、互いに直交する3軸成分に分けてそれぞれ検出して出力する3軸加速度センサを用いて説明したが、少なくとも直交する2軸成分をそれぞれ検出する加速度センサや1軸成分のみを検出する加速度センサを用いても本発明を実現することができる。例えば、少なくとも押下強さの計測対象とする操作ボタンのストローク方向成分を検出する加速度センサをコントローラ7に設け、当該加速度センサから取得される加速度データを用いれば、同様に当該操作ボタンの押下強さを算出することができる。
また、コントローラ7に設けられた加速度センサ701の代わりに、上述したジャイロセンサを用いてもよい。加速度センサ701から取得される加速度データと同様にジャイロセンサから取得される出力信号を用いて押下強さを算出することができる。なお、ジャイロセンサは、ジャイロ素子の軸を中心とした回転(または角速度)を直接検知することができるため、取得される回転や角速度を差分しなくても絶対値の累積を用いて、上記押下強さを算出することも可能である。
また、上述した説明では、押下操作に応じてON−OFFするデジタル入力が可能な操作部72の押下強さを算出して処理に利用する例を用いたが、背景技術の説明で用いたようなアナログ入力に対応する操作ボタンを押下強さの計測対象としてもかまわない。この場合、操作ボタン自身が備えるアナログ入力機能による出力信号と、加速度センサ等から出力を用いて算出した押下強さとが得られることになり、2種類のアナログ的な入力を取得することになる。しかしながら、例えば、後者の押下強さの算出は、前者では感度が鈍くなる瞬間的に操作子を押下するような操作に対して高感度となるため、互いの検出特性を補った押下強さの決定が可能となる。
なお、上述したフローチャートの動作では、押下強さに応じて効果音の音量を変化させる一例を説明したが、押下強さに応じて効果音の音質を変化させてもかまわない。また、押下強さに応じて効果音の音程や効果音を発する間隔等、効果音を再生する他のパラメータを押下強さに応じて変化させてもかまわない。また、再生される効果音の音量を評価して得点を競う音楽ゲームに適用してもかまわない。例えば、ボタン操作を行うべきタイミングと当該タイミングにおける適切な音量と示す評価用データを用意し、これらのタイミングと音量とをプレイヤに提示する。その後、プレイヤが操作した操作タイミングおよび当該タイミングにおける音量と上記評価用データとを比較して、プレイヤの操作に対する評価値を決定することによって、音楽ゲームを実現することができる。例えば、ドラム等の打楽器の操作タイミングと操作の強弱とを競う音楽ゲーム等に好適である。
また、図11および図12を用いて説明したように、押下強さに応じてモニタ2に表示するオブジェクトOBJのサイズも変化させる場合、効果音の音量を設定する処理(ステップ83)と同時に、オブジェクトOBJを表示するサイズを設定して当該サイズに応じたオブジェクトOBJをモニタ2に表示すればよい。また、押下強さに応じて効果音の音量を変化させなくても、押下強さに応じてモニタ2に表示するオブジェクトOBJのサイズだけを変化させてもかまわない。
上述した説明では、押下強さに応じて音量や表示サイズを変化させる一例を示したが、押下強さに応じて他のゲーム処理を行うことも可能である。例えば、押下強さに応じて、ゲーム世界を移動するプレイヤオブジェクトの移動速度を変化させたり、プレイヤオブジェクトが放つ他のオブジェクト(弾丸、砲弾、槍等の武器オブジェクトやボールオブジェクト等)の移動速度や敵オブジェクトに与えるダメージ量(破壊力等)を変化させたりすることができることは言うまでもない。また、ゲーム世界に作用する重力加速度を押下強さに応じて変化させたり、ジャンプ力を押下強さに応じて変化させたりすることによって、プレイヤオブジェクトがゲーム世界でジャンプする高さ等を変化させることもできる。さらに、コントローラ7から取得可能な第1座標データDa1および第2座標データDa2を用いて、上述した押下強さを得るデバイス特性を利用したゲームも可能である。
図18および図19を参照して、第1座標データDa1および第2座標データDa2を用いて、押下強さに応じたゲーム処理の一例について説明する。なお、図18は、第1座標データDa1および第2座標データDa2を用いて、押下強さに応じたゲーム処理を行う際のゲーム画像の一例を示す図である。図19は、図14のステップ57におけるゲームメイン処理の詳細な動作の他の例を示すサブルーチンである。
図18において、モニタ2の表示画面には敵オブジェクトEが配置されたゲーム空間が表示されている。ここで、上述したように、コントローラ7の動き、姿勢、位置等による処理結果データ(第1座標データDa1および第2座標データDa2)は、モニタ2の表示画面に直接作用する操作入力として用いることができ、モニタ2の表示画面に対してコントローラ7で指し示した位置を算出することができる。図18に示すゲーム画像の一例では、プレイヤがコントローラ7で指し示したモニタ2の表示画面上の位置と重なるゲーム空間内の目標位置に、照準オブジェクトTGが表示される。
プレイヤがコントローラ7の操作ボタン72dを押下することに応じて、照準オブジェクトTGに向かってゲーム空間の所定位置(例えば、プレイヤキャラクタが配置されている位置)から弾丸等を示す弾丸オブジェクトOBJが放たれる。ここで、弾丸オブジェクトOBJが放たれてゲーム空間を移動する速度vは、プレイヤが操作ボタン72dを押下した押下強さに応じて変化する。例えば、プレイヤが操作ボタン72dを強く押下する程、弾丸オブジェクトOBJの移動速度vが速くなり、当該弾丸オブジェクトOBJに当たった敵オブジェクトEに対するダメージが大きくなる。ここで、プレイヤが操作ボタン72dを強く押下すると、コントローラ7のハウジング71に与えるぶれが大きくなる。したがって、コントローラ7で指し示すモニタ2の表示画面上の位置もぶれることになり、照準オブジェクトTGの位置が移動してしまう。つまり、プレイヤは、操作ボタン72dを強く押下することによって移動速度vが速くダメージ量が大きい弾丸オブジェクトOBJを放つことができるが、その一方で弾丸オブジェクトOBJを着弾させる位置をコントロールすることが難しくなるため、よりゲーム性を向上させることができる。
これは、ボールをコントロールするスポーツゲーム等にも適用することができる。例えば、操作ボタン72dの押下に応じて捕手に向かって投球する野球の投手に適用した場合、プレイヤは、操作ボタン72dを強く押下することによってスピードが速いボールを投げることができるが、その一方でボールを投げるコースをコントロールすることが難しくなる。
次に、第1座標データDa1、第2座標データDa2、および押下強さに応じたゲーム処理の詳細を説明する。説明を具体的にするために、押下強さに応じてオブジェクトの移動速度を変化させるゲーム処理の一例を用いる。なお、当該ゲーム処理のメインフローは、上述した図14のフローチャートと同様である。また、当該ゲーム処理における加速度情報保存処理およびボタン情報読込処理についても、上述した図15および図16のサブルーチンと同様である。したがって、これらの処理についての詳細な説明を省略し、当該ゲーム処理におけるゲームメイン処理について図19を用いて説明する。
図19において、CPU30は、第1座標データDa1および第2座標データDa2を参照して、ゲーム世界における目標位置を算出する(ステップ91)。そして、CPU30は、算出された目標位置に照準オブジェクトTGを配置して(ステップ92)、処理を次のステップに進める。以下、コントローラ7から受信した第1座標データDa1および第2座標データDa2に基づいて目標位置を算出する方法例について説明する。
第1座標データDa1および第2座標データDa2は、マーカ8Lおよび8Rの撮像画像内における位置を示す座標データであり、ここでは、コントローラ7の通信部75から所定の時間間隔(例えば5ms間隔)でゲーム装置本体5へ送信されている。そして、CPU30は、1フレーム毎に上記座標データを利用する。
上記ステップ91において、CPU30は、第1座標データDa1と第2座標データDa2との中点を示す中点座標データ、および第1座標データDa1から第2座標データDa2への方向データ(例えば、第1座標データDa1の位置を始点とし第2座標データDa2の位置を終点とするベクトル)を算出する。ここで、中点データは、撮像画像内における対象画像(マーカ8Lおよび8R)の位置を示すパラメータである。したがって、中点データと所定の基準位置との差によって、コントローラ7の位置の変化による画像位置の変化を算出することができる。
ここで、マーカ8Lおよび8Rと、モニタ2の表示画面と、コントローラ7との位置関係について考える。例えば、モニタ2の上部に2つのマーカ8Lおよび8Rを設置し(図18参照)、上面が上方向を向いたコントローラ7を用いてプレイヤがモニタ2の表示画面の中央を指し示した場合(撮像情報演算部74の撮像画像の中央に表示画面中央が撮像されている状態)を考える。このとき、撮像情報演算部74の撮像画像において、対象画像の中点(マーカ8Lおよび8Rの中点)位置と指し示した位置(表示画面中央)とが一致しない。具体的には、上記撮像画像における対象画像の位置は、撮像画像の中心から上方の位置となる。このような位置に対象画像が位置する場合に、表示画面中央を指し示しているという基準位置の設定を行う。一方、コントローラ7の移動に対応して、撮像画像中の対象画像の位置も移動する(移動方向は逆方向となる)ので、撮像画像中の対象画像の位置の移動に対応させて表示画面を指し示す位置を移動させる処理を行うことによって、コントローラ7で指し示された表示画面基準の位置を算出することができる。ここで、基準位置の設定は、予めプレイヤが表示画面の所定位置を指し示し、そのときの対象画像の位置を当該所定位置と対応させて記憶しておくようにしてもよいし、対象画像と表示画面との位置関係が固定的であれば、予め設定されていても良い。また、マーカ8Lおよび8Rが、モニタ2とは別体で設けられてモニタ2の近く(モニタ2の上や下など)に載置されて使用されるものである場合には、ゲーム開始前に、マーカ8Lおよび8Rをモニタに対してどの位置に載置しているかをプレイヤに入力させ(例えば、モニタ2の上に載置したか下に載置したか等の選択肢から選択させ)、光ディスク4やゲーム装置本体5の内蔵不揮発メモリなどに、モニタの上に載置した場合の基準位置データと、モニタの下に載置した場合の基準位置データをそれぞれ記憶しておいて、それらを選択して使用してもよい。このような表示画面に対する位置座標は、中点データからモニタ2の表示画面基準の座標を算出する関数を用いた線形変換で算出される。この関数は、ある撮像画像から算出される中点座標の値を、当該撮像画像が撮像される時のコントローラ7によって指し示される表示画面上の位置を表す座標に変換するものである。この関数によって、中点座標から表示画面を基準とした指し示し位置を算出することができる。
しかしながら、上面が上方向以外(例えば、右方向)を向いたコントローラ7を用いてプレイヤがモニタ2の表示画面の中央を指し示した場合、つまりプレイヤがコントローラ7をひねったり傾けたりしながら操作を行った場合には、上記撮像画像における対象画像の位置は撮像画像の中心から上方以外(例えば、左方)の方向に移動した位置となる。つまり、コントローラ7の傾きによって、コントローラ7の移動方向と、表示画面基準の指し示し位置の移動方向が一致しないことになる。そこで、方向データに基づいて、中点データを補正する。具体的には、中点データを、コントローラ7の上面が上方向を向いた状態であるとした場合における中点座標に補正する。より具体的には、上記基準位置の設定の際には方向データの基準も設定され、算出された中点データを、方向データと当該基準方向との角度差に応じた量だけ、撮像画像の中心を軸として中点データが示す座標を回転移動させて補正する。そして、補正された中点データを用いて上述したように表示画面を基準とした指し示し位置を算出する。
そして、CPU30は、算出した表示画面を基準とした指し示し位置を、対応するゲーム世界における位置にさらに変換して、目標位置の座標を算出する。ここで、指し示し位置に対応するゲーム世界における位置とは、モニタ2の表示画面上における指し示し位置と重なって表示されるゲーム世界における位置(例えば、透視投影される位置)等である。
ここで、上記表示画面を基準とした指し示し位置の算出処理の本質的な原理は、コントローラ7の移動による対象画像の位置の変化によって、指し示された2次元座標の所定の基準位置からの変位を算出し、座標を設定するというものである。したがって、表示画面を基準とした指し示し位置座標は、他の2次元座標の入力としても幅広く用いることができる。例えば、指し示し位置座標をワールド座標系におけるx座標およびy座標の値として直接的に用いることができる。この場合、モニタ2の表示画面とは無関係に、対象画像の移動をワールド座標系におけるx座標およびy座標の基準位置からの移動に対応付ける算出処理を行えばよい。また、2次元のゲーム画像をモニタ2に表示する場合などは、表示画面を基準とした指し示し位置座標をそのまま2次元のゲーム座標系におけるx座標およびy座標の値として直接的に用いることができる。
次に、CPU30は、キーデータDa3を参照して、押下強さの計測対象とする操作部72がOFFからONに変化したか否か、すなわち、当該操作部72を押下していない状態から押下している状態に変化した瞬間か否かを判断する(ステップ93)。そして、CPU30は、計測対象となる操作部72がOFFからONに変化した場合、次のステップ94に処理を進める。一方、CPU30は、計測対象となる操作部72がOFFからONに変化していない場合、次のステップ96に処理を進める。
ステップ94において、CPU30は、押下強さの計測対象とする操作部72の押下に応じてゲーム世界を移動するオブジェクト(例えば、図18に示す弾丸オブジェクトOBJ)の移動速度の設定を開始する。そして、CPU30は、押下強さpowerに応じて移動速度を設定し(ステップ95)、次のステップ98に処理を進める。例えば、CPU30は、現在設定されている押下強さpowerに所定の定数を乗じることによって、オブジェクトの移動速度を設定する。
一方、ステップ96において、CPU30は、計測中フラグDfを参照して押下強さを計測中か否かを判断する。次に、CPU30は、押下強さ計測中(fg=1)の場合、オブジェクトの移動速度を設定中か否かを判断する(ステップ97)。そして、CPU30は、押下強さ計測中で移動速度を設定中である場合(ステップ96およびステップ97が共にYes)、上記ステップ95に処理を進める。つまり、オブジェクトの移動速度を設定中であれば、その後に累積される新たな押下強さpowerに応じて、移動速度が更新されることになる。一方、CPU30は、押下強さ計測中であるが移動速度の設定中でない場合(ステップ96でYes、ステップ97でNo)、次のステップ100に処理を進める。さらに、CPU30は、押下強さ計測中でない場合(ステップ96でNo)、次のステップ98に処理を進める。
ステップ98において、CPU30は、オブジェクトの移動速度を決定するタイミングか否かを判断する。例えば、移動速度を決定するタイミングは、押下強さの計測対象とする操作部72がONからOFFに変化した時点や、当該時点から所定時間経過した時点や、操作部72がOFFからONに変化した時点から所定時間経過した時点等に設定される。そして、CPU30は、移動速度を決定するタイミングでない場合(移動速度が設定中でない場合を含む)、次のステップ100に処理を進める。一方、CPU30は、移動速度を決定するタイミングが到来した場合、オブジェクトの移動速度を現在設定中の移動速度に決定し、上記ステップ91で算出されているゲーム世界における目標位置に向かって当該決定された移動速度でオブジェクトの移動を開始する。そして、処理を次のステップ100に進める。
ステップ100において、モニタ2の表示画面にゲーム画像を表示する処理を行い、当該サブルーチンによる処理を終了する。例えば、CPU30は、オブジェクトの移動速度の決定前、すなわち、移動速度の設定中や移動速度の設定を開始していない状態で弾丸オブジェクトOBJがゲーム世界に登場しないとき、敵オブジェクトEや照準オブジェクトTGが配置されたゲーム世界をモニタ2に表示する。一方、オブジェクトの移動速度の決定に応じて、敵オブジェクトEや照準オブジェクトTGが配置されたゲーム世界において弾丸オブジェクトOBJが決定された移動速度で照準オブジェクトTGに向かって移動する様子をモニタ2に表示する。
このように、コントローラ7で指し示す位置と押下強さとを操作入力として用いることによって、新たな操作環境を利用したゲームが可能となる。なお、上述した説明では、押下強さに応じて弾丸オブジェクトOBJの移動速度が変化する態様を用いたが、押下強さに応じて弾丸オブジェクトOBJの攻撃力(例えば、敵オブジェクトEに与えるダメージ量)が変化するように設定してもかまわない。
なお、上述した説明では、表示画面上の位置に対応する座標を指定するためのデータ出力する入力装置(ポインティングデバイス)の一例として、コントローラ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とゲーム装置本体5とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置本体5の接続端子に接続する。
また、撮像素子743で撮像した画像データを解析してマーカ8Lおよび8Rからの赤外光の位置座標やそれらの重心座標等を取得し、それらを処理結果データとしてコントローラ7内で生成してゲーム装置本体5へ送信する態様を説明したが、他の処理段階のデータをコントローラ7からゲーム装置本体5へ送信してもかまわない。例えば、撮像素子743が撮像した画像データをコントローラ7からゲーム装置本体5へ送信し、CPU30において上記解析処理を行って処理結果データを取得してもかまわない。この場合、コントローラ7に設けられた画像処理回路744が不要となる。また、上記画像データの解析途中のデータをコントローラ7からゲーム装置本体5へ送信してもかまわない。例えば、画像データから得られる輝度、位置、および面積等を示すデータをコントローラ7からゲーム装置本体5へ送信し、CPU30において残りの解析処理を行って処理結果データを取得してもかまわない。
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、コントローラ7における撮像情報演算部74の位置(撮像情報演算部74の光入射口)は、ハウジング71の前面でなくてもよく、ハウジング71の外部から光を取り入れることができれば他の面に設けられてもかまわない。
また、上記実施例では、本願発明の情報処理装置を備えるゲーム装置3を一例に説明したが、本体の動きを検出する動きセンサと、複数の操作ボタンと、その操作ボタンの種類に応じた処理を実行する情報処理装置であればよく、例えば一般的なパーソナルコンピュータ、携帯電話機、PDA(Personal Digital Assistant)、携帯ゲーム装置等のデバイスにも適用することができる。
例えば、他の電話機との間で無線通信する通信部を備えた携帯電話機の場合には、携帯電話機のハウジングが本願発明のハウジングに相当し、テンキーなど通話などに使用するボタンが操作ボタンに相当する。例えば携帯電話機のテンキーが押されたときに、携帯電話機に搭載された加速度センサやジャイロセンサの出力を用いて、そのテンキーの種類に応じた処理を加速度センサ等の出力値を用いて実行する。このようにすることで、携帯電話機などでゲームを行うには好適である。また、例えば携帯電話機において文字を打ち込むときに本発明を利用すれば、強くキーを押したときにはそのキーによって表示される文字のサイズを大きくしたり、色を変えたりすることなどもできる。
なお、上述した実施例では、ゲームプログラムを例に上げて説明したが、操作ボタンに加えられた入力の大きさに応じて処理をさせるプログラムであれば、どのようなプログラムにも適用することがきでる。