図1を参照して、本発明の一実施形態に係るゲームプログラムを実行するゲーム装置について説明する。以下、説明を具体的にするために、当該装置の一例の据置型のゲーム装置本体5を含むゲームシステムについて説明する。なお、図1は据置型のゲーム装置3を含むゲームシステム1の外観図であり、図2はゲーム装置本体5のブロック図である。以下、当該ゲームシステム1について説明する。
図1において、ゲームシステム1は、表示手段の一例の家庭用テレビジョン受像機(以下、モニタと記載する)2と、当該モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置3から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明のゲームプログラムの一例となるプログラムを記録した光ディスク4と、当該光ディスク4のゲームプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体5に与えるためのコントローラ7とを備えている。
また、ゲーム装置本体5は、無線コントローラモジュール19(図2参照)を内蔵する。無線コントローラモジュール19は、コントローラ7から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7とゲーム装置本体5とを無線通信によって接続する。さらに、ゲーム装置本体5には、当該ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。
また、ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ17(図2参照)が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。また、ゲームプログラム等は、光ディスク4に限らず、フラッシュメモリ17に予め記録されたものを実行するようにしてもよい。さらに、ゲーム装置本体5は、フラッシュメモリ17に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
コントローラ7は、無線コントローラモジュール19を内蔵するゲーム装置本体5へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて操作情報等の送信データを無線送信する。コントローラ7は、主にモニタ2の表示画面に表示されるプレイヤオブジェクト等を操作するための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キーやスティック等を含む)とが設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。そして、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって例えば赤外光を出力する。また、コントローラ7は、ゲーム装置本体5の無線コントローラモジュール19から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
次に、図2を参照して、ゲーム装置本体5の内部構成について説明する。図2は、ゲーム装置本体5の構成を示すブロック図である。ゲーム装置本体5は、CPU(Central Processing Unit)10、システムLSI(Large Scale Integration)11、外部メインメモリ12、ROM/RTC(Read Only Memory/Real Time Clock)13、ディスクドライブ14、およびAV−IC(Audio Video−Integrated Circuit)15等を有する。
CPU10は、光ディスク4に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。CPU10は、システムLSI11に接続される。システムLSI11には、CPU10の他、外部メインメモリ12、ROM/RTC13、ディスクドライブ14、およびAV−IC15が接続される。システムLSI11は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムLSI11の内部構成については、後述する。揮発性の外部メインメモリ12は、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、CPU10のワーク領域やバッファ領域として用いられる。ROM/RTC13は、ゲーム装置本体5の起動用のプログラムが組み込まれるROM(いわゆるブートROM)と、時間をカウントするクロック回路(RTC)とを有する。ディスクドライブ14は、光ディスク4からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ35または外部メインメモリ12に読み出したデータを書き込む。
また、システムLSI11には、入出力プロセッサ31、GPU(Graphics Processor Unit)32、DSP(Digital Signal Processor)33、VRAM(Video RAM)34、および内部メインメモリ35が設けられる。図示は省略するが、これらの構成要素31〜35は、内部バスによって互いに接続される。
GPU32は、描画手段の一部を形成し、CPU10からのグラフィクスコマンド(作画命令)に従って画像を生成する。VRAM34は、GPU32がグラフィクスコマンドを実行するために必要なデータ(ポリゴンデータやテクスチャデータ等のデータ)を記憶する。画像が生成される際には、GPU32は、VRAM34に記憶されたデータを用いて画像データを作成する。
DSP33は、オーディオプロセッサとして機能し、内部メインメモリ35や外部メインメモリ12に記憶されるサウンドデータや音波形(音色)データを用いて、音声データを生成する。
上述のように生成された画像データおよび音声データは、AV−IC15によって読み出される。AV−IC15は、AVコネクタ16を介して、読み出した画像データをモニタ2に出力するとともに、読み出した音声データをモニタ2に内蔵されるスピーカ2aに出力する。これによって、画像がモニタ2に表示されるとともに音がスピーカ2aから出力される。
入出力プロセッサ(I/Oプロセッサ)31は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ31は、フラッシュメモリ17、無線通信モジュール18、無線コントローラモジュール19、拡張コネクタ20、および外部メモリカード用コネクタ21に接続される。無線通信モジュール18にはアンテナ22が接続され、無線コントローラモジュール19にはアンテナ23が接続される。
入出力プロセッサ31は、無線通信モジュール18およびアンテナ22を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ31は、定期的にフラッシュメモリ17にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール18およびアンテナ22を介して当該データをネットワークに送信する。また、入出力プロセッサ31は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ22、および無線通信モジュール18を介して受信し、受信したデータをフラッシュメモリ17に記憶する。CPU10は、ゲームプログラムを実行することにより、フラッシュメモリ17に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ17には、ゲーム装置本体5と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体5を利用してプレイしたゲームのセーブデータ(ゲームの結果データまたは途中データ)が記憶されてもよい。
また、入出力プロセッサ31は、アンテナ23および無線コントローラモジュール19を介して、コントローラ7から送信される操作データ等を受信し、内部メインメモリ35または外部メインメモリ12のバッファ領域に記憶(一時記憶)する。なお、内部メインメモリ35には、外部メインメモリ12と同様に、光ディスク4から読み出されたゲームプログラムや、フラッシュメモリ17から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、CPU10のワーク領域やバッファ領域として用いられてもかまわない。
さらに、入出力プロセッサ31には、拡張コネクタ20および外部メモリカード用コネクタ21が接続される。拡張コネクタ20は、USBやSCSIのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール18に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ21は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ31は、拡張コネクタ20や外部メモリカード用コネクタ21を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
また、ゲーム装置本体5(例えば、前部主面)には、当該ゲーム装置本体5の電源ボタン24、ゲーム処理のリセットボタン25、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトボタン26等が設けられている。電源ボタン24およびリセットボタン25は、システムLSI11に接続される。電源ボタン24がオンされると、ゲーム装置本体5の各構成要素に対して、図示しないACアダプタを介して電力が供給される。リセットボタン25が押されると、システムLSI11は、ゲーム装置本体5の起動プログラムを再起動する。イジェクトボタン26は、ディスクドライブ14に接続される。イジェクトボタン26が押されると、ディスクドライブ14から光ディスク4が排出される。
図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に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール19からコントローラ7へ、複数のLED702のうち、上記コントローラ種別に対応するLEDを点灯させるための信号が送信される。
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図5に示すスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
一方、ハウジング71下面には、凹部が形成されている。ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング71の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
ここで、以下の説明を具体的にするために、コントローラ7に対して設定する座標系について定義する。図3および図4に示すように、互いに直交するXYZ軸をコントローラ7に対して定義する。具体的には、コントローラ7の前後方向となるハウジング71の長手方向をZ軸とし、コントローラ7の前面(撮像情報演算部74が設けられている面)方向をZ軸正方向とする。また、コントローラ7の上下方向をY軸とし、ハウジング71の上面(操作ボタン72aが設けられた面)方向をY軸正方向とする。さらに、コントローラ7の左右方向をX軸とし、ハウジング71の右側面(図3で表されている側面)方向を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参照)に接続される。また、無線モジュール753(図7参照)およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン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自体の方向を変えることによってその撮像方向を変更することができる。
コントローラ7は、3軸(X、Y、Z軸)の加速度センサ701を備えていることが好ましい。この3軸の加速度センサ701は、3方向、すなわち、上下方向(図3に示すY軸)、左右方向(図3に示すX軸)、および前後方向(図3に示すZ軸)で直線加速度を検知する。また、少なくとも2軸方向に沿った直線加速度をそれぞれ検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ701は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であることが好ましい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて、加速度センサ701が提供されてもよい。
加速度センサ701に用いられるような加速度検出手段は、加速度センサ701の持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701からの直接の出力は、それら3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
しかしながら、加速度センサ701から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ(例えばCPU10)またはコントローラのプロセッサ(例えばマイコン751)等のコンピュータが処理を行うことによって、コントローラ7に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
例えば、加速度センサ701を搭載するコントローラ7が静的な状態であることを前提としてコンピュータ側で処理する場合(すなわち、加速度センサ701によって検出される加速度が重力加速度のみであるとして処理する場合)、コントローラ7が現実に静的な状態であれば、検出された加速度に基づいてコントローラ7の姿勢が重力方向に対して傾いているか否か、またはどの程度傾いているかを知ることができる。具体的には、加速度センサ701の検出軸が鉛直下方向を向いている状態を基準としたとき、当該検出軸方向に1G(重力加速度)が作用しているか否かだけでコントローラ7が鉛直下方向に対して傾いているか否かを知ることができる。また、上記検出軸方向に作用している加速度の大きさによって、コントローラ7が鉛直下方向に対してどの程度傾いているかも知ることができる。また、多軸方向の加速度を検出可能な加速度センサ701の場合には、さらに各軸に対して検出された加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ7がどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ701からの出力に基づいて、プロセッサがコントローラ7の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ701からの出力に基づいて、おおよそのコントローラ7の傾き具合を推定するような処理としてもよい。このように、加速度センサ701をプロセッサと組み合わせて用いることによって、コントローラ7の傾き、姿勢、または位置を判定することができる。
一方、加速度センサ701が動的な状態であることを前提とする場合には、当該加速度センサ701が重力加速度成分に加えて加速度センサ701の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、コントローラ7の動き方向等を知ることができる。具体的には、加速度センサ701を備えるコントローラ7がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ701によって生成される加速度信号を処理することによって、コントローラ7の様々な動きおよび/または位置を算出することができる。なお、加速度センサ701が動的な状態であることを前提とする場合であっても、加速度センサ701の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するコントローラ7の傾きを知ることが可能である。
他の実施例では、加速度センサ701は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ701が静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。加速度センサ701でそれぞれ検知された加速度を示すデータは、通信部75に出力される。
通信部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からの3軸方向の加速度信号(X、Y、およびZ軸方向加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、X、Y、およびZ軸方向加速度データ、処理結果データ)を無線コントローラモジュール19へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から無線コントローラモジュール19への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、無線コントローラモジュール19への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥース(登録商標)の技術を用いて、操作情報を示す電波信号を所定周波数の搬送波を用いてアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からのX、Y、およびZ軸方向加速度データ、および撮像情報演算部74からの処理結果データがコントローラ7から送信される。そして、ゲーム装置本体5の無線コントローラモジュール19でその電波信号を受信し、ゲーム装置本体5で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、X、Y、およびZ軸方向加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体5のCPU10は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
次に、ゲーム装置本体5が行う具体的な処理を説明する前に、図8〜図14を用いてゲーム装置本体5で行うゲームの概要について説明する。図8は、コントローラ7を用いてゲーム操作するときの状態の一例を概説する図解図である。図9は、モニタ2に表示されるゲーム画像の一例を示す図である。図10Aは、プレイヤがコントローラ7を把持してテニスゲームにおけるフラットショットを行った際の、プレイヤの動きの一例を示す図である。図10Bは、プレイヤがフラットショットを行った際のコントローラ7の動きの一例を示す図である。図11Aは、プレイヤがコントローラ7を把持してテニスゲームにおけるトップスピンショットを行った際の、プレイヤの動きの一例を示す図である。図11Bは、プレイヤがトップスピンショットを行った際のコントローラ7の動きの一例を示す図である。図12Aは、プレイヤがコントローラ7を把持してテニスゲームにおけるスライススピンショットを行った際の、プレイヤの動きの一例を示す図である。図12Bは、プレイヤがスライススピンショットを行った際のコントローラ7の動きの一例を示す図である。図13Aは、プレイヤがコントローラ7を把持してテニスゲームにおけるドロップショットまたはスマッシュショットを行った際の、プレイヤの動きの一例を示す図である。図13Bは、プレイヤがドロップショットまたはスマッシュショットを行った際のコントローラ7の動きの一例を示す図である。図14Aは、プレイヤがコントローラ7を把持してテニスゲームにおけるロブショットを行った際の、プレイヤの動きの一例を示す図である。図14Bは、プレイヤがロブショットを行った際のコントローラ7の動きの一例を示す図である。
図8に示すように、コントローラ7は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、コントローラ7の前面がプレイヤの前方方向に向くようにプレイヤが一方の手(例えば右手)でコントローラ7を把持する。例えば、プレイヤは、親指をコントローラ7の左側面に添え、手のひらをコントローラ7の上面に添え、人差し指、中指、薬指、小指をコントローラ7下面に添えて、コントローラ7の前面がプレイヤの前方方向に露出させて、あたかもテニスラケットを握っているようにコントローラ7を把持する。なお、後述する処理例においては、コントローラ7の上面が上方に向いた状態でプレイヤがコントローラ7を把持して操作する例を用いて説明する。
プレイヤは、モニタ2で表現されているゲーム画像に合わせて、コントローラ7を把持している腕を振って(スイング操作)、コントローラ7から操作情報(具体的には、X、Y、およびZ軸方向加速度データ)をゲーム装置本体5に与える。プレイヤは、様々な方向にコントローラ7を振ることによって、コントローラ7から様々なX、Y、およびZ軸方向加速度データをゲーム装置本体5に与えることができる。
図9に示すように、コントローラ7から受信したX、Y、およびZ軸方向加速度データに応じて、モニタ2にテニスゲーム等が表現される。具体的には、仮想ゲーム空間に設定されたテニスコートが3次元のゲーム画像としてモニタ2に表現される。そして、仮想ゲーム空間に、プレイヤが操作するプレイヤキャラクタPC、当該プレイヤキャラクタPCの相手選手となる相手キャラクタEC、およびテニスコート上で移動するテニスボールを示すボールキャラクタBC等が配置されてモニタ2に表現される。以下、説明を具体的にするためにテニスゲームを表現するゲームプログラムが光ディスク4に記憶されており、CPU10がテニスゲーム処理の中でコントローラ7のスイング種別を判定するためのスイング判定処理について説明する。
プレイヤキャラクタPCは、テニスラケットを持っており、仮想ゲーム空間に設定されたテニスコート上に配置される。そして、プレイヤがコントローラ7を振る動作に応じて、プレイヤキャラクタPCがテニスラケットを振るアニメーションが表現される。そして、到来するボールキャラクタBCをプレイヤキャラクタPCがテニスラケットで打ち返した場合、当該テニスラケットで打撃されたボールキャラクタBCが相手キャラクタEC側のコートに向かって飛んでいく。つまり、プレイヤがコントローラ7を把持して振る動作を行うことによって、同様にテニスラケットを振る動作をプレイヤキャラクタPCが表現することになり、プレイヤはあたかもテニスラケットを振ってテニスをしているような仮想的なスポーツゲームを体験できる。
例えば、プレイヤキャラクタPCが右利きのテニスプレイヤを表現している場合、プレイヤがコントローラ7を把持して右から左へスイングすることによって、プレイヤキャラクタPCがフォアハンドでテニスラケットをスイングする。一方、プレイヤがコントローラ7を把持して左から右へスイングすることによって、プレイヤキャラクタPCがバックハンドでテニスラケットをスイングする。つまり、プレイヤがコントローラ7を振る方向に応じて、プレイヤキャラクタPCが同じ方向にテニスラケットをスイングする動作を行う。
また、プレイヤがコントローラ7を振るタイミングおよび速度に応じて、プレイヤキャラクタPCがスイングしたテニスラケットで打撃されたボールキャラクタBCが飛ぶ方向や速度が変化する。また、プレイヤがコントローラ7を振る方向に応じて、ボールキャラクタBCを打撃するショット種別が変化する。後述により明らかとなるが、これらの動作は、コントローラ7から出力されるX、Y、およびZ軸方向加速度データによって区別することが可能であり、プレイヤがコントローラ7に加えた様々な動作を反映したテニスゲームを表現することができる。以下、プレイヤが右手でコントローラ7を把持してスイングする場合において、判定されるスイング種別の例について説明する。
例えば、図10Aに示すように、プレイヤがコントローラ7を右から左へ水平にスイングした場合、テニスゲームにおけるフラットショットが選択され、仮想ゲーム空間においてもフラットショットでプレイヤキャラクタPCがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタPCがフラットショットして打撃されたボールキャラクタBCは、真っ直ぐの軌道で打ち返される。ここで、プレイヤが右から左へ水平にコントローラ7をスイングした場合、コントローラ7は、プレイヤに振られることによってX軸負方向に移動する(図10B参照)。この場合、スイングで加速中においては、コントローラ7にZ軸正方向への遠心力と共にX軸負方向への加速度が生じる。したがって、コントローラ7から出力されるX、Y、およびZ軸方向加速度データが示すX−Y軸成分の加速度において、X軸負方向への加速度が生じた場合、プレイヤがコントローラ7を右から左へ水平にスイングしたとしてフラットショットが選択されたと判定することができる。
また、図11Aに示すように、プレイヤがコントローラ7を右下から左上へスイングした場合、テニスゲームにおけるトップスピンショットが選択され、仮想ゲーム空間においてもトップスピンショットでプレイヤキャラクタPCがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタPCがトップスピンショットして打撃されたボールキャラクタBCは、高い軌道のトップスピンで打ち返される。ここで、プレイヤが右下から左上へコントローラ7をスイングした場合、コントローラ7は、プレイヤに振られることによってX軸負方向とY軸正方向との間の方向に移動する(図11B参照)。この場合、スイングで加速中においては、コントローラ7にZ軸正方向への遠心力と共にX軸負方向とY軸正方向との間の方向への加速度が生じる。したがって、コントローラ7から出力されるX、Y、およびZ軸方向加速度データが示すX−Y軸成分の加速度において、X軸負方向とY軸正方向との間の方向への加速度が生じた場合、プレイヤがコントローラ7を右下から左上へスイングとしてトップスピンショットが選択されたと判定することができる。
また、図12Aに示すように、プレイヤがコントローラ7を右上から左下へスイングした場合、テニスゲームにおけるスライススピンショットが選択され、仮想ゲーム空間においてもスライススピンショットでプレイヤキャラクタPCがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタPCがスライススピンショットして打撃されたボールキャラクタBCは、低い軌道のスライススピンで打ち返される。ここで、プレイヤが右上から左下へコントローラ7をスイングした場合、コントローラ7は、プレイヤに振られることによってX軸負方向とY軸負方向との間の方向に移動する(図12B参照)。この場合、スイングで加速中においては、コントローラ7にZ軸正方向への遠心力と共にX軸負方向とY軸負方向との間の方向への加速度が生じる。したがって、コントローラ7から出力されるX、Y、およびZ軸方向加速度データが示すX−Y軸成分の加速度において、X軸負方向とY軸負方向との間の方向への加速度が生じた場合、プレイヤがコントローラ7を右上から左下へスイングとしてスライススピンショットが選択されたと判定することができる。
また、図13Aに示すように、プレイヤがコントローラ7を上から下へ振り下ろすスイングをした場合、テニスゲームにおけるドロップショットまたはスマッシュショットが選択され、仮想ゲーム空間においてもドロップショットまたはスマッシュショットでプレイヤキャラクタPCがテニスラケットをスイングする動作を行う。なお、ドロップショットおよびスマッシュショットの何れが選択されるかについては、スイングした際のゲーム状況に応じて決定される。そして、仮想ゲーム空間においてプレイヤキャラクタPCがドロップショットして打撃されたボールキャラクタBCは、テニスコート上のネット近くに落下するように打ち返される。また、仮想ゲーム空間においてプレイヤキャラクタPCがスマッシュショットして打撃されたボールキャラクタBCは、打ち下ろす軌道でスマッシュされて打ち返される。ここで、プレイヤが上から下へコントローラ7を振り下ろすスイングをした場合、コントローラ7は、プレイヤに振られることによってY軸負方向に移動する(図13B参照)。この場合、スイングで加速中においては、コントローラ7にZ軸正方向への遠心力と共にY軸負方向への加速度が生じる。したがって、コントローラ7から出力されるX、Y、およびZ軸方向加速度データが示すX−Y軸成分の加速度において、Y軸負方向への加速度が生じた場合、プレイヤがコントローラ7を上から下へ振り下ろすスイングをしたとしてドロップショットまたはスマッシュショットが選択されたと判定することができる。
さらに、図14Aに示すように、プレイヤがコントローラ7を下から上へ振り上げるスイングをした場合、テニスゲームにおけるロブショットが選択され、仮想ゲーム空間においてもロブショットでプレイヤキャラクタPCがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタPCがロブショットして打撃されたボールキャラクタBCは、非常に高い軌道で相手コートの奥に落下するロブで打ち返される。ここで、プレイヤが下から上へコントローラ7を振り上げるスイングをした場合、コントローラ7は、プレイヤに振られることによってY軸正方向に移動する(図14B参照)。この場合、スイングで加速中においては、コントローラ7にZ軸正方向への遠心力と共にY軸正方向への加速度が生じる。したがって、コントローラ7から出力されるX、Y、およびZ軸方向加速度データが示すX−Y軸成分の加速度において、Y軸正方向への加速度が生じた場合、プレイヤがコントローラ7を下から上へ振り上げるスイングをしたとしてロブショットが選択されたと判定することができる。
ここで、トップスピンショットでスイングする場合(図11A参照)と、ロブショットでスイングする場合(図14A)とは、何れもプレイヤがコントローラ7を振り上げる方向のスイングとなる。しかしながら、現実のテニスゲームにおいてプレイヤがトップスピンショットでラケットを振り上げる場合とロブショットでラケットを振り上げる場合とは、振り上げる強さや振り上げ方が異なることが多い。後述により明らかとなるが、本実施形態では、プレイヤがコントローラ7を振り上げる強さや振り上げ方に応じて、トップスピンショットとロブショットとを区別する判定基準を変更して、スイング種別の判定をより正確に行っている。
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図15を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図15は、ゲーム装置本体5の外部メインメモリ12および/または内部メインメモリ35(以下、2つのメインメモリを総称して、単にメインメモリと記載する)に記憶される主なデータおよびプログラムを示す図である。
図15に示すように、メインメモリのデータ記憶領域には、加速度リングバッファDa、加速度の大きさデータDb、スイング判定フラグデータDc、加速度ベクトルデータDd、加算ベクトルデータDe、平均値データDf、スイング角度データDg、スイング判定範囲データDh、スイング種別データDi、および画像データDi等が記憶される。なお、メインメモリには、図15に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタPC以外の他のキャラクタ(例えば、相手キャラクタEC)等に関するデータ(位置データ等)等、ゲーム処理に必要なデータが記憶される。また、メインメモリのプログラム記憶領域には、ゲームプログラムを構成する各種プログラム群Paが記憶される。
加速度リングバッファDaは、コントローラ7に生じた加速度を示すデータであり、コントローラ7から送信データとして送信されてくる一連の操作情報に含まれる加速度データの履歴が格納される。この加速度リングバッファDaには、加速度センサ701がX軸成分に対して検出した加速度の履歴h0〜h4(すなわち、X軸方向に対する5回の加速度の履歴)を示すX軸方向加速度データDa1、Y軸成分に対して検出した加速度の履歴h0〜h4(すなわち、Y軸方向に対する5回の加速度の履歴)を示すY軸方向加速度データDa2、およびZ軸成分に対して検出した加速度の履歴h0〜h4(すなわち、Z軸方向に対する5回の加速度の履歴)を示すZ軸方向加速度データDa3が含まれる。なお、ゲーム装置本体5に備える無線コントローラモジュール19は、コントローラ7から所定周期(例えば、1/200秒毎)に送信される操作情報に含まれる加速度データを受信し、無線コントローラモジュール19に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた加速度データがゲーム処理周期である1フレーム毎(例えば、1/60秒毎)に読み出されて、メインメモリの加速度リングバッファDaが更新される。
このとき、操作情報を受信する周期と処理周期とが異なるために、上記バッファには複数の時点に受信した操作情報が記述されていることになる。後述する処理の説明においては、後述する各ステップにおいて、複数の時点に受信した操作情報のうち最新の操作情報のみを常に用いて処理して、次のステップに進める態様を用いる。
また、後述する処理フローでは、加速度データDaがゲーム処理周期である1フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コントローラ7からの送信周期毎に加速度リングバッファDaを更新し、当該更新された加速度リングバッファDaをゲーム処理周期毎に利用する態様でもかまわない。この場合、加速度リングバッファDaに記憶する加速度データDa1〜Da3を更新する周期と、ゲーム処理周期とが異なることになる。
加速度の大きさデータDbは、コントローラ7に作用している加速度の大きさaccvを示すデータが格納される。スイング判定フラグデータDcは、プレイヤがコントローラ7をスイングしたと判定された場合にON(オン)に設定されるスイング判定フラグSWfrgを示すデータが格納される。
加速度ベクトルデータDdは、X軸方向加速度データDa1、Y軸方向加速度データDa2、およびZ軸方向加速度データDa3が示す加速度を用いて、履歴h0〜h4毎に算出される加速度ベクトルの履歴を示すデータであり、コントローラ7に作用している加速度の方向および大きさを示すデータが格納される。加算ベクトルデータDeは、加速度ベクトルデータDdが示す加速度ベクトルそれぞれから重力成分を除去して符号を調整した後、それぞれの加速度ベクトルを加算(累積)した加算ベクトルを示すデータが格納される。平均値データDfは、加速度ベクトルデータDdが示す加速度ベクトルそれぞれの大きさの平均値を示すデータが格納される。
スイング角度データDgは、コントローラ7がスイングされた角度を示すデータであり、コントローラ7に設定されたX−Y軸平面においてX軸正方向を基準としたスイング角度を示すデータが格納される。スイング判定範囲データDhは、上記スイング角度を用いてスイング種別を判定するためのデータであり、当該スイング種別毎のスイング角度判定範囲が設定されたデータが格納される。なお、スイング判定範囲データDhに格納されるスイング種別毎のスイング角度判定範囲の設定例については、後述する。スイング種別データDiは、上記スイング角度を用いて判定されたスイング種別を示すデータが格納される。
画像データDjは、プレイヤキャラクタ画像データDj1、ボールキャラクタ画像データDj2、および背景画像データDj3等を含んでいる。プレイヤキャラクタ画像データDj1は、仮想ゲーム空間にプレイヤキャラクタPCを配置してゲーム画像を生成するためのデータである。ボールキャラクタ画像データDj2は、仮想ゲーム空間にボールキャラクタBCを配置してゲーム画像を生成するためのデータである。背景画像データDj3は、仮想ゲーム空間に背景を配置してゲーム画像を生成するためのデータである。
次に、図16〜図18を参照して、ゲーム装置本体5において行われるゲーム処理の詳細を説明する。なお、図16および図17は、ゲーム装置本体5において実行されるゲーム処理の一例を示すフローチャートである。図18は、図17におけるステップ65のスイング判定処理の一例を示すサブルーチンである。ここで、図16〜図18に示すフローチャートにおいては、ゲーム処理の一例としてテニスゲームを用いた動作を説明する。また、図16〜図18に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ7をスイングすることに応じて、プレイヤキャラクタPCがボールキャラクタBCをショットする処理について主に説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図16〜図18では、CPU10が実行する各ステップを「S」と略称する。
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU10は、ROM/RTC13に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリに読み込まれ、CPU10によって当該ゲームプログラムの実行が開始される。図16〜図18に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
図16において、CPU10は、ゲーム処理の初期化を行い(ステップ41)、次のステップに処理を進める。例えば、上記ステップ40におけるゲーム処理初期化では、仮想ゲーム空間の設定やプレイヤキャラクタPCおよび相手キャラクタEC等の初期設定を行う。また、上記ステップ41におけるゲーム処理初期化では、以降のゲーム処理で用いる各パラメータを初期化する。例えば、CPU10は、上述したメインメモリに格納される各データDa〜Diが示すパラメータをそれぞれ初期値に設定する。さらに、上記ステップ41におけるゲーム処理初期化では、コントローラ7を把持してプレイするプレイヤの利き手、すなわち右手および左手の何れの手でコントローラ7を把持するかを設定する。なお、利き手をどちらに設定するかは、予めプレイヤによって選択しておくようにして、選択されている方の手に設定するようにすればよい。
次に、CPU10は、スイング判定フラグデータDcに格納されたスイング判定フラグSWfrgがON(オン)に設定されているか否かを判断する(ステップ42)。そして、CPU10は、スイング判定フラグSWfrgがOFF(オフ)に設定されている場合、次のステップ43に処理を進める。一方、CPU10は、スイング判定フラグSWfrgがONに設定されている場合、次のステップ61(図17参照)に処理を進める。
ステップ43において、CPU10は、コントローラ7から加速度を示すデータを取得する。そして、CPU10は、上記ステップ43で取得した加速度を示すデータを用いて、加速度リングバッファDaを更新し(ステップ44)、次のステップに処理を進める。例えば、CPU10は、コントローラ7から受信した操作情報を取得し、当該操作情報に含まれる最新の加速度データが示す加速度を用いて加速度リングバッファDaに格納する。具体的には、CPU10は、加速度リングバッファDaに格納された加速度の履歴h0〜h4をそれぞれ時系列順に順送りして更新、すなわち加速度の履歴h4を消去して、履歴h3を履歴h4に、履歴h2を履歴h3に、履歴h1を履歴h2に、履歴h0を履歴h1にそれぞれ順送りして更新する。そして、CPU10は、コントローラ7から受信した最新の操作情報に含まれるX軸方向の加速度データが示す加速度を用いて、X軸方向加速度データDa1の履歴h0を更新する。また、CPU10は、最新の操作情報に含まれるY軸方向の加速度データが示す加速度を用いて、Y軸方向加速度データDa2の履歴h0を更新する。そして、CPU10は、最新の操作情報に含まれるZ軸方向の加速度データが示す加速度を用いて、Z軸方向加速度データDa3の履歴h0を更新する。
次に、CPU10は、当該フローチャートで用いる一次変数であるカウント値Cを0に設定し(ステップ45)、次のステップに処理を進める。
次に、CPU10は、プレイヤキャラクタPCがスイング可能な状態であるか否かを判断する(ステップ46)。例えば、CPU10は、プレイヤキャラクタPCが仮想ゲーム空間において既にスイング動作中であったり、それ以外の動作や処理の途中であったりしてスイングできない状況等の場合、プレイヤキャラクタPCが新たにスイングを開始することは不可能であると判断する。そして、CPU10は、プレイヤキャラクタPCがスイング可能である場合、次のステップ47に処理を進める。一方、CPU10は、プレイヤキャラクタPCがスイング不可能である場合、次のステップ51に処理を進める。
ステップ47において、CPU10は、上記ステップ43で取得した加速度の大きさaccvを算出し、次のステップに処理を進める。例えば、CPU10は、X軸方向加速度データDa1の履歴h0に格納されたX軸方向加速度、Y軸方向加速度データDa2の履歴h0に格納されたY軸方向加速度、およびZ軸方向加速度データDa3の履歴h0に格納されたZ軸加速度を用いて、それぞれの方向の加速度成分を有する加速度ベクトルを算出し、当該加速度ベクトルの大きさを加速度の大きさaccvとして算出する。そして、CPU10は、算出された加速度の大きさaccvを用いて加速度の大きさデータDbを更新する。
次に、CPU10は、上記ステップ47で算出された加速度の大きさaccvが閾値Ta以上か否かを判断する(ステップ48)。ここで、閾値Taは、プレイヤがコントローラ7をスイングしたか否かを判定するために予め定められた値であり、例えば閾値Ta=3.5G(1G≒9.8m/s2)で設定される。なお、閾値Taの値は、加速度センサ701の特性やゲームの設定等に応じて、適宜設定すればよい。そして、CPU10は、加速度の大きさaccvが閾値Ta以上の場合、プレイヤがコントローラ7をスイングしたと判定して、次のステップ49に処理を進める。一方、CPU10は、加速度の大きさaccvが閾値Ta未満の場合、次のステップ51に処理を進める。
ステップ49において、プレイヤがコントローラ7をスイングしたと判定した場合、CPU10は、カウント値Cを5に設定する。そして、CPU10は、スイング判定フラグデータDcに格納されたスイング判定フラグSWfrgをONに設定して(ステップ50)、次のステップ51に処理を進める。
ステップ51において、CPU10は、ゲーム表示処理を行い、次のステップに処理を進める。例えば、上記ステップ51において、CPU10は、スイング種別データDiが示すスイング種別や平均値データDfが示す平均値によって設定したスイング強さに応じて、プレイヤキャラクタPCをスイングさせてボールキャラクタBCを打撃する処理を行う。また、CPU10は、プレイヤキャラクタPCによって打撃された後にボールキャラクタBCが相手コートへ飛んでいく様子等、ショット後にボールキャラクタBCを移動させる処理を行う。また、CPU10は、仮想ゲーム空間においてプレイヤキャラクタPCを移動させる等、他のゲーム処理を行う。そして、CPU10は、これらのゲーム処理に応じたゲーム画像をモニタ2に表示する表示処理を行って、次のステップに処理を進める。
次に、CPU10は、ゲームを終了するか否かを判断する(ステップ52)。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU10は、ゲームを終了しない場合に上記ステップ42に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
図17を参照して、上記ステップ42においてスイング判定フラグSWfrgがONに設定されている場合、CPU10は、現在設定されているカウント値Cから1を減算して新たなカウント値Cを設定し(ステップ61)、カウント値Cが0となったか否かを判断する(ステップ62)。そして、CPU10は、カウント値Cが0である場合、次のステップ65に処理を進める。一方、CPU10は、カウント値Cが0でない、すなわちカウント値C=1〜4である場合、次のステップ63に処理を進める。
ステップ63において、CPU10は、コントローラ7から加速度を示すデータを取得する。そして、CPU10は、上記ステップ63で取得した加速度を示すデータを用いて、加速度リングバッファDaを更新し(ステップ64)、次のステップ51(図16参照)に処理を進める。なお、上記ステップ63およびステップ64の処理については、上述したステップ43およびステップ44の処理を同様であるため、詳細な説明を省略する。なお、上記ステップ63およびステップ64の処理は、上記ステップ48でコントローラ7がスイングされたと判定された後、カウント値Cが0となるまで続けられて、スイング判定処理(ステップ65)に移行する。すなわち、上記ステップ63およびステップ64の処理は、コントローラ7がスイングされたと判定された後に4回繰り返されることになる。したがって、加速度リングバッファDaに格納された加速度の履歴h0〜h4には、コントローラ7がスイングされたと判定された加速度データを含めて、以降4回分の加速度データが格納されて、スイング判定処理に移行することになる。
一方、ステップ65において、CPU10は、スイング判定処理を行い、次のステップ51(図16参照)に処理を進める。以下、図18を参照して、上記ステップ65で行うスイング判定処理の詳細な動作について説明する。
図18において、CPU10は、初期化処理を行い(ステップ81)、次のステップに処理を進める。例えば、上記ステップ81における初期化処理では、以降のスイング判定処理に用いる各パラメータを初期化する。例えば、CPU10は、上述したメインメモリに格納される各データDd〜Diが示すパラメータをそれぞれ初期値に設定する。
次に、CPU10は、加速度リングバッファDaに格納された加速度の履歴h0〜h4を参照して、エラー処理を行い(ステップ82)、次のステップに処理を進める。例えば、CPU10は、加速度の履歴h0〜h4を参照して、履歴h0〜h4の中にエラーデータが含まれているか否かを探索する。具体的には、履歴h0〜h4の中に、他の履歴と比較して正負が反対となるような反対方向の加速度を示すデータが含まれている場合、CPU10は、当該データをエラーデータと判定する。そして、CPU10は、エラーデータをコントローラ7が静止状態を想定した加速度データ(例えば、X軸方向加速度およびZ軸方向加速度が共に0で、Y軸方向加速度が−1G)に変更する。
次に、CPU10は、加速度リングバッファDaに格納された加速度の履歴h0〜h4それぞれの加速度ベクトルを算出し(ステップ83)、次のステップに処理を進める。例えば、CPU10は、X軸方向加速度データDa1の履歴h0〜h4にそれぞれ格納されたX軸方向加速度、Y軸方向加速度データDa2の履歴h0〜h4にそれぞれ格納されたY軸方向加速度、およびZ軸方向加速度データDa3の履歴h0〜h4にそれぞれ格納されたZ軸加速度を用いて、それぞれの方向の加速度成分を有する履歴h0〜h4毎の加速度ベクトルの履歴(すなわち、過去5フレーム分の加速度ベクトル)を算出する。そして、CPU10は、算出されたそれぞれの加速度ベクトルの履歴を用いて加速度ベクトルデータDdを更新する。
次に、CPU10は、上記ステップ83で算出された各加速度ベクトルから重力成分を除去し、各加速度ベクトルの符号を調整して(ステップ84)、次のステップに処理を進める。ここで、加速度センサ701の特性として、加速度センサ701から出力されるデータが、加速度センサ701に加えられる加速度(つまり実際に加速する方向)とは真逆方向のデータが出力されるものとする。すなわち、加速度センサ701の加速による慣性力に応じたデータが加速度データとして加速度センサ701から出力される。この場合、コントローラ7静止時に加速度センサ701に加わる重力加速度は、重力方向と同じ方向の加速度データとして出力されることになる。コントローラ7の上面が上方に向いた状態でプレイヤがコントローラ7を把持して操作することが前提の場合、コントローラ7にはY軸負方向の重力加速度(1G)が生じている。この場合、CPU10は、上記ステップ83で算出された各加速度ベクトルのY軸成分に、それぞれ1Gを加算することによって重力成分を除去することができる。そして、CPU10は、上記ステップ83で算出された各加速度ベクトルの方向が、それぞれコントローラ7が動いている方向(すなわち、実際に加速している方向)となるように各加速度ベクトルの符号を調整する。上述したように加速度センサ701に加えられる加速度とは真逆方向を向いたデータを加速度センサ701が出力している場合、CPU10は、各加速度ベクトルの方向が真逆となるように符号を調整し、実際に加速している方向を加速度ベクトルとして扱うこととする。そして、CPU10は、重力成分を除去して符号を調整した各加速度ベクトルを用いて加速度ベクトルデータDdを更新する。
次に、CPU10は、上記ステップ84で重力成分を除去して符号を調整した各加速度ベクトルを全て加算(累積)して加算ベクトルを算出し、算出した加算ベクトルを用いて加算ベクトルデータDeを更新する(ステップ85)。また、CPU10は、上記ステップ84で重力成分を除去して符号を調整した各加速度ベクトルの大きさの平均値を算出し、算出した平均値を用いて平均値データDfを更新して(ステップ86)、次のステップに処理を進める。
次に、CPU10は、上記ステップ85で算出した加算ベクトルのX−Y軸成分を用いて、スイング角度θを算出し(ステップ87)、次のステップに処理を進める。例えば、CPU10は、X軸正方向をスイング角度θ=0°およびY軸正方向をスイング角度θ=90°として、加算ベクトルのX−Y軸成分の方向が示すスイング角度θを算出し、算出されたスイング角度θを用いてスイング角度データDgを更新する。
次に、CPU10は、スイング判定範囲データDhが示すスイング種別毎のスイング角度判定範囲を用いて、上記ステップ87で算出されたスイング角度θのスイング種別を設定し(ステップ88)、次のステップに処理を進める。
例えば、図19に示すように、スイング判定範囲データDhには、「フラットショット」のスイング角度判定範囲、「トップスピンショット」のスイング角度判定範囲、「ロブショット」のスイング角度判定範囲、「スライススピンショット」のスイング角度判定範囲、「スライススピンショット」のスイング角度判定範囲、および「ドロップショット」のスイング角度判定範囲がそれぞれ設定されている。具体的には、「フラットショット」のスイング角度判定範囲が、スイング角度θ=−22.5°〜22.5°、165°〜180°、および−165°〜−180°に設定されている。「トップスピンショット」のスイング角度判定範囲が、スイング角度θ=22.5°〜70°および110°〜165°に設定されている。「ロブショット」のスイング角度判定範囲が、スイング角度θ=70°〜110°に設定されている。「スライススピンショット」のスイング角度判定範囲が、スイング角度θ=−22.5°〜−60°および−120°〜−165°に設定されている。そして、「ドロップショット」のスイング角度判定範囲が−60°〜−120°に設定されている。
そして、CPU10は、上記ステップ87で算出されたスイング角度θが上記スイング角度判定範囲の何れの範囲に含まれるか判定し、判定されたスイング角度判定範囲を有するスイング種別を選択して、選択されたスイング種別を用いてスイング種別データDiを更新する。ここで、スイング角度θが90°〜180°または−90°〜−180°でプレイヤが右手でコントローラ7を把持している(すなわち、右利き)の場合、プレイヤはコントローラ7をフォアハンドでスイングした場合のスイング種別の判定をしていることになる。また、スイング角度θが−90°〜90°でプレイヤが右手でコントローラ7を把持しているの場合、プレイヤはコントローラ7をバックハンドでスイングした場合のスイング種別の判定をしていることになる。
図18に戻り、CPU10は、上記ステップ88で設定されたスイング種別が「トップスピンショット」で、かつ、上記ステップ87で算出されたスイング角度θが54°〜126°であるか否かを判断する(ステップ89)。そして、CPU10は、スイング種別が「トップスピンショット」で、かつ、スイング角度θが54°〜126°である場合、次のステップ90に処理を進める。一方、CPU10は、スイング種別が「トップスピンショット」でない、または、スイング角度θが54°〜126°でない場合、次のステップ92に処理を進める。
ステップ90において、CPU10は、加算ベクトルデータDeに格納された加算ベクトルのZ軸成分の値が閾値Tb未満か否かを判断する。ここで、閾値Tbは、プレイヤがコントローラ7を「ロブショット」をするようにスイングしたか、「トップスピンショット」をするようにスイングしたかを、Z軸方向に生じる加速度で判断するための値であり、例えば閾値Tb=9.3Gで設定される。そして、CPU10は、加算ベクトルのZ軸成分の値が閾値Tb未満である場合、次のステップ91に処理を進める。一方、CPU10は、加算ベクトルのZ軸成分の値が閾値Tb以上である場合、次のステップ92に処理を進める。
なお、上記ステップ90では、5つの加速度ベクトルを加算(累積)した加算ベクトルのZ軸方向成分を用いているために、当該Z軸方向成分も加速度ベクトルの5つのZ軸方向成分が累積した値が用いられている。したがって、閾値Tbも上記累積値を想定した相対的に大きな値に設定する必要がある。しかしながら、上記ステップ90で行われる判定方法は、他の方法でもかまわない。例えば、第1の例として、上記5つの加速度ベクトルにおけるZ軸方向成分の平均値を用いる。この場合、閾値Tbは、例えば9.3G/5=1.86Gとなる。第2の例として、上記5つの加速度ベクトルから選ばれた1つの加速度ベクトル(例えば、履歴h0や履歴h4)のZ軸方向成分の値を用いる。この場合も、閾値Tbは、例えば9.3G/5=1.86Gとなる。
ステップ91において、CPU10は、スイング種別を「トップスピンショット」から「ロブショット」に変更して、スイング種別データDiを更新し、次のステップ92に処理を進める。以下、上記ステップ89〜ステップ91の処理について、さらに詳細に説明する。
上記ステップ89〜ステップ91の処理においては、加算ベクトルのZ軸成分の値に応じて、上記スイング角度判定範囲の少なくとも一部が変化することになる。例えば、図19に示したように、スイング判定範囲データDhで示されるスイング角度判定範囲は、「トップスピンショット」のスイング角度判定範囲が、スイング角度θ=22.5°〜70°および110°〜165°に設定されている。また、「ロブショット」のスイング角度判定範囲が、スイング角度θ=70°〜110°に設定されている。一方、加算ベクトルのZ軸成分の値が閾値Tb以上である場合、「ロブショット」と判定されるスイング角度判定範囲が拡大して変化する。具体的には、図20に示すように、加算ベクトルのZ軸成分の値が閾値Tb以上である場合、「トップスピンショット」のスイング角度判定範囲が、スイング角度θ=22.5°〜54°および126°〜165°に縮小される。一方、加算ベクトルのZ軸成分の値が閾値Tb以上である場合、「ロブショット」のスイング角度判定範囲が、スイング角度θ=54°〜126°に拡大される。
ここで、プレイヤが「トップスピンショット」または「ロブショット」する際に、上面が上方を向いた状態から前面が上方を向く状態までコントローラ7が変化する状態について考える。図21に示すように、プレイヤが「トップスピンショット」をするようにコントローラ7をスイングした場合、コントローラ7は、ある回転軸を中心としてY軸正方向へ動くように回転する。したがって、Z軸正方向への動作が相対的に少なくなるため、コントローラ7にはZ軸正方向の遠心力とY軸正方向への加速度が主に作用する。一方、図22に示すように、プレイヤが「ロブショット」をするようにコントローラ7をスイングした場合、コントローラ7は、ある回転軸を中心としてZ軸正方向へ動きながら大きく回転する。したがって、Z軸正方向への動作が相対的に多くなるため、Z軸正方向の加速度がコントローラ7に作用することになる。つまり、Z軸正方向への動作による加速度は、Z軸正方向に生じる遠心力を打ち消す方向に作用するため、結果的に「トップスピンショット」より「ロブショット」におけるZ軸正方向に生じる加速度が小さくなる。また、プレイヤは、「ロブショット」をする場合より「トップスピンショット」する場合の方が強くスイングする傾向があり、この面でも「ロブショット」においてZ軸正方向に生じる加速度が小さくなる。このようなプレイヤのスイング傾向に基づいて、上記ステップ89〜ステップ91の処理で上記スイング角度判定範囲の少なくとも一部を変化させている。
また、上記スイング角度θやスイング種別を判定するためのスイング角度判定範囲は、何れも加速度ベクトルのX−Y軸方向成分が用いられている。一方、スイング角度判定範囲を変化させるための値は、同じ加速度ベクトルのZ軸方向成分が用いられている。したがって、上記ステップ89〜ステップ91の処理においては、加速度センサ701から得られる3軸(X軸、Y軸、Z軸)の加速度ベクトルに関して、当該3軸のうちの2軸(X軸、Y軸)の成分を用いてスイング種別を判定するためのスイング角度判定範囲を、当該2軸とは異なる1軸(Z軸)の成分の値に基づいて変化させていることになる。
図18に戻り、ステップ92において、CPU10は、スイング判定フラグデータDcに格納されたスイング判定フラグSWfrgをOFFに設定して、当該サブルーチンによる処理を終了する。
このように、上述したゲーム処理によれば、加速度センサ701から得られる3軸(X軸、Y軸、Z軸)の加速度ベクトルに関して、当該3軸のうちの2軸(X軸、Y軸)の成分を用いてスイング種別を判定するためのスイング角度判定範囲を、当該2軸とは異なる1軸(Z軸)の成分の値に基づいて変化させている。これによって、同じ振り方向であっても、その振り方や振り強さ等によって異なる振り操作として判定することが可能であるため、さらに詳細な判定が可能となってプレイヤが意図する適切な操作内容でゲーム処理することができる。
なお、上述したスイング角度判定範囲の変更方法では、上記ステップ88〜ステップ91(図18参照)において、一旦スイング種別を設定した後に条件と合致する加算ベクトルに対してスイング種別を再設定する手順を示したが、他の方法でスイング角度判定範囲の変更してもかまわない。例えば、上記ステップ88でスイング種別を設定する前に上記ステップ90を実行し、加算ベクトルのZ軸成分の値が閾値Tb以上の場合に図19に示したスイング角度判定範囲を用いてスイング種別を設定する。一方、上記ステップ88でスイング種別を設定する前に上記ステップ90を実行し、加算ベクトルのZ軸成分の値が閾値Tb未満の場合に図20に示したスイング角度判定範囲を用いてスイング種別を設定する。このように、加算ベクトルのZ軸成分の値に応じて、2種類のスイング角度判定範囲を使い分ける方法でスイング角度判定範囲の変更してもかまわない。
また、上述したスイング角度判定範囲は単なる一例であり、他のスイング角度判定範囲を設定可能であることは言うまでもない。一例として、図19や図20で示したスイング角度判定範囲では、加算ベクトルの方向に関してのみ判定可能な判定範囲を設定したが、さらに加算ベクトルの大きさに関しても判定可能な判定範囲を付加してもかまわない。例えば、加算ベクトルの大きさが所定値未満の場合のスイング角度判定範囲と、当該所定値以上の場合のスイング角度判定範囲とが異なるように設定してもかまわない。具体的には、加算ベクトルの大きさが所定値未満の場合は、当該加算ベクトルの方向(スイング角度θ)がどのような方向であっても同一のスイング種別(例えば、ボレー)に判定されるようなスイング角度判定範囲に設定することが考えられる。
他の例として、ゲーム状況に応じて、他のショットが判定されるスイング角度判定範囲を設定してもかまわない。具体的には、図19や図20で示したスイング角度判定範囲では、プレイヤがコントローラ7を上から下へ振り下ろすスイングをした場合、テニスゲームにおける「ドロップショット」でスイングされたと判定される。しかしながら、テニスゲームの状況に応じて、プレイヤがコントローラ7を上から下へ振り下ろすスイングをした場合に、スイング種別が「ドロップショット」の代わりに「スマッシュショット」に判定されてもかまわない。例えば、相手キャラクタECがネット付近等にロブショットしたことに応じて、プレイヤがコントローラ7を上から下へ振り下ろすスイングをした場合に、スイング種別が「スマッシュショット」に判定される。
また、プレイヤキャラクタPCがサーブをする場合、上述したスイング角度判定範囲とは異なるスイング角度判定範囲が設定されてもかまわない。例えば、図23に示すように、サーブをする場合、「トップスピンサーブ」のスイング角度判定範囲、「スライススピンサーブ」のスイング角度判定範囲、および「スマッシュサーブ」のスイング角度判定範囲がそれぞれ設定されている。具体的には、「トップスピンサーブ」のスイング角度判定範囲が、スイング角度θ=−22.5°〜70°、110°〜180°、および−165°〜−180°に設定されている。「スライススピンサーブ」のスイング角度判定範囲が、スイング角度θ=−22.5°〜−60°および−120°〜−165°に設定されている。そして、「スマッシュサーブ」のスイング角度判定範囲が70°〜110°および−60°〜−120°に設定されている。ここで、「スマッシュサーブ」とは、他のサーブと比較してサーブしたボールの速度が速く、ボールの威力が強烈になるゲーム進行上特殊なサーブである。図23で示したサーブのスイング角度判定範囲では、プレイヤがコントローラ7を上から下へ振り下ろすスイングをした場合と、コントローラ7を下から上へ振り上げるスイングをした場合とにおいて、「スマッシュサーブ」がスイング種別に設定される。これは、基本的にプレイヤがコントローラ7を真上から真下へ振り下ろすスイングをした場合に「スマッシュサーブ」となるが、スイング種別が設定される前に振り下ろすスイングを止めた場合に逆方向の加速度が生じることがあり、当該加速度を検出して「スマッシュサーブ」を判定するための角度判定範囲が70°〜110°に設定されている。
また、上述したゲーム処理によれば、加速度センサ701から得られる3軸(X軸、Y軸、Z軸)の加速度ベクトルに関して、当該3軸のうちの2軸(X軸、Y軸)の成分を用いて複数種類のゲーム処理(スイング種別)を選択するための判定範囲(スイング角度判定範囲)を、当該2軸とは異なる他の1軸(Z軸)の成分の値に基づいて変化させたが、他の態様によって判定範囲を変化させてもかまわない。第1の例として、加速度センサ701から得られる3軸の加速度ベクトルに関して、当該3軸のうちの2軸または1軸の成分を用いて複数種類のゲーム処理を選択するための判定範囲を、当該3軸の成分の値に基づいて変化させてもかまわない。第2の例として、加速度センサ701から得られる3軸の加速度ベクトルに関して、当該3軸のうちの1軸の成分を用いて複数種類のゲーム処理を選択するための判定範囲を、当該1軸とは異なる他の1軸の成分の値に基づいて変化させてもかまわない。この場合、加速度センサ701は、少なくとも2軸方向に沿った直線加速度をそれぞれ検知する加速度検出手段で構成することができる。また、第1の例および第2の例において、上記3軸のうちの1軸の成分を用いた判定範囲は、当該成分における加速度の向きや大きさを判定するための範囲を設定することになる。第3の例として、加速度センサ701から得られる3軸の加速度ベクトルに関して、当該3軸のうちの1軸の成分を用いて複数種類のゲーム処理を選択するための判定範囲を、当該1軸とは異なる他の2軸の成分の値に基づいて変化させてもかまわない。
また、上述したゲーム処理によれば、コントローラ7の上面が上方に向いた状態でプレイヤがコントローラ7を把持して操作することを前提としている。つまり、コントローラ7にはY軸負方向へ重力加速度が作用していることが前提となっている。しかしながら、ゲーム処理中にコントローラ7に作用している重力加速度の方向を検出する処理を追加することによって、実際にコントローラ7に作用している重力加速度を用いてゲーム処理してもかまわない。例えば、コントローラ7が静的な状態であることを適宜検出し、当該状態においてコントローラ7に生じている加速度の方向および大きさを、コントローラ7に作用している重力加速度として設定する。具体的には、加速度センサ701から出力される加速度データの変化が所定の範囲内(例えば、1Gを中心とする所定の範囲内)となる期間が所定の時間以上継続している場合等を検出することによって、コントローラ7が静的な状態であると判定することが可能である。そして、上記ステップ84では、適宜設定された重力加速度を用いて各加速度ベクトルから重力成分を除去する。また、上記ステップ87では、適宜設定された重力加速度を基準としてスイング角度θを算出する。例えば、上記ステップ87では、適宜設定された重力加速度の方向がY軸負方向となるように、加算ベクトルのX−Y軸成分の方向を補正した後、補正後の加算ベクトルのX−Y軸成分の方向を用いてスイング角度θを算出する。
また、上述したゲーム処理においては、スイング判定処理に用いる加速度の履歴を用いている。具体的には、プレイヤがコントローラ7をスイングしたと判定するために用いた加速度を含め、5回の処理で検出された加速度の履歴を用いてスイング判定処理を行っている。つまり、上述したゲーム処理では、コントローラ7に生じる加速度の大きさが所定の値に到達した時点から所定期間に取得された加速度データに基づいて、スイング判定処理が行われている。しかしながら、スイング判定処理に用いる加速度の履歴については、他の期間の加速度の履歴を用いてもかまわない。例えば、第1の例として、コントローラ7に生じる加速度の大きさが所定の値に到達した時点の前後となる所定期間に取得された加速度データに基づいて、スイング判定処理を行ってもかまわない。第2の例として、コントローラ7に生じる加速度の大きさが所定の値に到達した時点までの所定期間に取得された加速度データに基づいて、スイング判定処理を行ってもかまわない。第3の例として、コントローラ7に生じる加速度の大きさが所定の値に到達した時点から所定時間経過した後の所定期間に取得された加速度データに基づいて、スイング判定処理を行ってもかまわない。
また、上述したゲーム処理では、本発明をテニスゲームのスイング判定処理に用いる一例を用いたが、本発明は、他のゲームで行われる加速度データの判定処理に用いてもかまわない。
第1の例として、刀剣等を用いて対戦するゲームにおける刀剣を振る動作において、本発明の加速度データの判定処理を用いることができる。具体的には、プレイヤがコントローラ7を把持して刀剣を振って攻撃したり、刀剣で防御したりする動作を行い、攻撃/防御モーション時にコントローラ7が振られたり動かされたりした方向(X−Y軸成分)に応じて、プレイヤが行った振り方向や防御姿勢を判定する処理を想定する。この場合、コントローラ7のZ軸正方向に生じる加速度が相対的に大きい場合に刀剣を振って攻撃したと判定される可能性が高いX−Y軸成分の判定範囲を設定する。また、コントローラ7のZ軸正方向に生じる加速度が相対的に小さい場合に刀剣を用いて防御したと判定される可能性が高いX−Y軸成分の判定範囲を設定する。具体的には、プレイヤがコントローラ7を下から上に振り上げた場合、コントローラ7に生じる遠心力が相対的に大きいときは刀剣を下から上に振り上げる攻撃をしたと判定し、コントローラ7に生じる遠心力が相対的に小さいときは刀剣を持ち上げて頭部を防御するような姿勢となったと判定することができる。
第2の例として、野球ゲームにおける投球動作において、本発明の加速度データの判定処理を用いることができる。具体的には、プレイヤがコントローラ7を把持して野球における投手がボールを投げるモーションを行い、投球モーション時にコントローラ7が振られる方向(X−Y軸成分)に応じて、プレイヤが投じた球種を判定する処理を想定する。この場合、コントローラ7のZ軸正方向に生じる加速度が相対的に大きい場合に直球と判定される可能性が高いX−Y軸成分の判定範囲を設定する。また、コントローラ7のZ軸正方向に生じる加速度が相対的に小さい場合に変化球と判定される可能性が高いX−Y軸成分の判定範囲を設定する。
また、上述した説明では、判定されたスイング種別を用いて、3次元の仮想ゲーム空間におけるプレイヤキャラクタPCがボールをショットするテニスゲームを用いたが、本発明は、他の態様のゲームにも適用できることは言うまでもない。第1の例として、テニスコートが配置された2次元の仮想ゲーム世界を用いて、プレイヤキャラクタPCがボールをショットするゲームであっても、本発明を適用することができる。
また、上述した説明では、据置型のゲーム装置に本願発明を適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置にも適用することができる。例えば、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が入力装置を把持しているユーザの振り方向を算出する等、入力装置に生じる加速度に基づいて様々なゲーム処理を行うことができる。
また、上述した説明では、コントローラ7とゲーム装置本体5とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置本体5の接続端子に接続する。
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した処理で用いられる係数、判定値、数式、処理順序等は、単なる一例に過ぎず他の値や数式や処理順序であっても、本発明を実現できることは言うまでもない。
また、本発明のゲームプログラムは、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、ゲームプログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、ゲームプログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。