説明

ゲームプログラムおよびゲームシステム

【構成】ゲームシステム10は、表示装置34に表示されたゲーム画面内の任意の点を指し示すポインティング装置26と、ポインティング装置に設けられる加速度センサとを備える。ゲームシステム10のプロセサは、ポインティング装置によって指し示される点の位置を繰り返し特定し、特定される位置の変化を検出する。また、加速度センサによって検知される加速度に基づいてポインティング装置の運動方向を判別する。そして、位置変化が検出されたとき当該位置変化に基づいてゲーム処理を実行し、位置変化が検出されないときには判別された運動方向に基づいてゲーム処理を実行する。
【効果】ポインティング装置による指し示し位置の特定が困難な状況でも、その運動方向を利用して、支障なくゲーム処理を進行させることができる。

【発明の詳細な説明】
【技術分野】
【0001】
この発明は、ゲームプログラムおよびゲームシステムに関し、特にたとえば、光学式ポインティング装置と加速度センサとを利用する、ゲームプログラムおよびゲームシステムに関する。
【背景技術】
【0002】
従来のこの種のシステムとしては、特許文献1に開示されたものが知られている。この従来技術は、受光センサおよび傾きセンサが設けられたガン型コントローラ(ポインティング装置)と、ディスプレイとを備える。ディスプレイのラスタ走査による光量を受光センサで検出し、検出結果に基づいて着弾位置を求める。また、ガン型コントローラの傾きを傾きセンサで検知し、攻撃モードと防御モードとを検知結果に応じて切り換える。
【特許文献1】特開2001−104643号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかし、従来技術では、傾きセンサ(加速度センサ)は、モード切り換えといった、ポインティングとは無関係の処理に利用されるに過ぎない。このため、受光センサが走査線などの光源(マーカ)を検知できない状況では、ポインティング装置によって指し示される位置を特定できず、ゲームの進行に支障をきたす。
【0004】
それゆえに、この発明の主たる目的は、ポインティング装置によって指し示される位置の特定が困難な状況でもゲーム処理を進行させることができる、ゲームプログラムおよびゲームシステムを提供することである。
【課題を解決するための手段】
【0005】
請求項1の発明に従うゲームプログラムは、ゲームシステム(10:実施例で相当する参照符号。以下同じ)のプロセサ(36)に、位置特定ステップ(S35)、位置変化検出ステップ(S41,S43,S93)、第1方向判別ステップ(S97)およびゲーム処理ステップ(S25)を実行させる。ゲームシステムは、ゲーム処理の進行に応じて更新されるゲーム画面を表示する表示装置(34)と、表示装置によって表示されたゲーム画面内の任意の点を指し示すポインティング装置(26)と、ポインティング装置に設けられる加速度センサ(68)とを備える。
【0006】
位置特定ステップは、ポインティング装置によって指し示される点の位置を単位時間毎に特定する。位置変化検出ステップは、位置特定ステップによって特定される位置の変化を検出する。第1方向判別ステップは、加速度センサによって検知される加速度に基づいてポインティング装置の運動方向を判別する。ゲーム処理ステップは、位置変化検出ステップによって位置変化が検出されたとき当該位置変化に基づいてゲーム処理を実行し、位置変化検出ステップによって位置変化が検出されないときには第1方向判別ステップによって判別された運動方向に基づいてゲーム処理を実行する。
【0007】
請求項1の発明では、ポインティング装置によって指し示される点の位置は、位置特定ステップによって単位時間毎に特定される。位置変化検出ステップは、こうして特定される位置の変化を検出する。第1方向判別ステップは、ポインティング装置の運動方向を加速度センサによって検知される加速度に基づいて判別する。ゲーム処理ステップは、位置変化検出ステップによって位置変化が検出されればこの位置変化に基づいてゲーム処理を実行し、位置変化が検出されなければ第1方向判別ステップによって判別された運動方向に基づいてゲーム処理を実行する。
【0008】
請求項1の発明によれば、ポインティング装置によって指し示される点の位置変化を検出できるときはこの位置変化に基づいてゲーム処理を実行し、位置変化を検出できないときは加速度センサの検知結果から判別される運動方向に基づいてゲーム処理を実行するので、ポインティング装置による指し示し位置の特定が困難な状況でも、その運動方向を利用して支障なくゲーム処理を進行させることができる。なお、ここでいう運動方向には、速度方向および加速度方向の少なくとも一方が含まれる。
【0009】
請求項2の発明に従うゲームプログラムは、請求項1に従属し、プロセサに加速度判別ステップ(S5)をさらに実行させる。加速度判別ステップは、加速度センサによって検知される加速度が閾値以上であるか否かを判別する。位置特定ステップは、加速度判別ステップによって加速度が閾値以上であると判別されている期間にだけ位置特定を行う。
【0010】
請求項2の発明では、加速度センサによって検知される加速度が閾値以上であるか否かが加速度判別ステップによって判別される。位置特定ステップの位置特定は、加速度が閾値以上であると判別されている期間にだけ行われる。
【0011】
請求項2の発明によれば、位置特定を効率よく行える。また、手ぶれなど、プレイヤの意図しないポインティング装置の動きによって、誤ってゲーム処理が進行するのを防ぐことができる。
【0012】
請求項3の発明に従うゲームプログラムは、請求項2に従属し、プロセサに第2方向判別ステップ(S95)をさらに実行させる。第2方向判別ステップは、位置特定ステップによって上記の期間内に検出された複数の位置のうち、最初に検出された位置と最後に検出された位置とに基づいて、ポインティング装置の運動方向を判別する。
【0013】
請求項3の発明では、ポインティング装置の運動方向が第2方向判別ステップによって判別される。この判別は、位置特定ステップによって上記期間内に検出された複数の位置のうち、最初に検出された位置と最後に検出された位置とに基づいて行われる。
【0014】
請求項3の発明によれば、運動方向を簡単に精度よく判別できる。
【0015】
請求項4の発明に従うゲームプログラムは、請求項3に従属する。第1方向判別ステップは、上記の期間にだけ方向判別を行う。
【0016】
請求項4の発明によれば、運動方向の判別を効率よく行える。また、意図しない運動による誤ったゲーム処理の進行を防ぐことができる。
【0017】
請求項5の発明に従うゲームプログラムは、請求項1ないし4のいずれかに従属する。ゲーム処理は、ポインティング装置の運動に対応するゲーム画面内の軌跡を算出する処理を含む。ゲーム処理ステップは、位置変化検出ステップによって位置変化が検出されたとき位置特定ステップによって特定された複数の位置に基づいて軌跡を決定し、位置変化検出ステップによって位置変化が検出されないときには第1方向判別ステップによって判別された運動方向と既定位置とに基づいて軌跡を決定する。
【0018】
請求項5の発明では、ポインティング装置の運動に対応するゲーム画面内の軌跡を決定する処理が、ゲーム処理には含まれる。ゲーム処理ステップは、位置変化検出ステップによって位置変化が検出されれば、位置特定ステップによって特定された複数の位置のうち最初に特定された位置と最後に特定された位置とに基づいて軌跡を決定する。一方、位置変化検出ステップによって位置変化が検出されなければ、第1方向判別ステップによって判別された運動方向と既定位置とに基づいて軌跡を決定する。
【0019】
請求項5の発明によれば、たとえ位置変化が検出されなくても、判別された運動方向に基づいて軌跡を決定できる。また、もし位置変化が検出されれば、特定された複数の位置のうち最初と最後に特定された2つの位置に基づいて、軌跡を精度よく決定できる。
【0020】
請求項6の発明に従うゲームプログラムは、請求項1ないし5のいずれかに従属し、プロセサに第1方向算出ステップ(S17),第2方向算出ステップ(S19),第3方向算出ステップ(S21)をさらに実行させる。第1方向算出ステップは、加速度センサによって検知される加速度の変化を累積加算することによって、ポインティング装置と共に運動するローカル座標系におけるポインティング装置の速度方向を算出する。第2方向算出ステップは、加速度センサによって検知される加速度を累積加算することによって、ローカル座標系における重力方向を算出する。
【0021】
第3方向算出ステップは、第2方向算出ステップによって算出された重力方向を静止座標系における重力方向と一致させるような回転演算を第1方向算出ステップによって算出された速度方向に対して施すことによって、静止座標系における速度方向を算出する。第1方向判別ステップの判別は、かかる第3方向算出ステップの算出結果に基づく。
【0022】
請求項6の発明では、第1方向算出ステップが加速度センサによって検知される加速度の変化を累積加算し、これによってローカル座標系におけるポインティング装置の速度方向が求まる。また、第2方向算出ステップが加速度センサによって検知される加速度を累積加算し、これによってローカル座標系における重力方向が求まる。
【0023】
第3方向算出ステップは、第2方向算出ステップによって算出された重力方向を静止座標系における重力方向と一致させるような回転演算を、第1方向算出ステップによって算出された速度方向に対して施す。これによって、静止座標系における速度方向が求まる。第1方向判別ステップの判別は、かかる第3方向算出ステップの算出結果、つまり静止座標系における速度方向に基づく。
【0024】
請求項6の発明によれば、静止座標系における速度方向を用いて、ポインティング装置の姿勢に関わらず、的確なゲーム処理を行える。
【0025】
請求項7の発明に従うゲームプログラムは、請求項6に従属する。加速度センサは3方向の加速度成分を検出し、第1方向算出ステップ,第2方向算出ステップおよび第3方向算出ステップの各々は、これら3方向のうちいずれか2つに対応する2つの加速度成分について算出を行う。加速度判別ステップは、上記の3方向のうち残りの1つに対応する加速度成分について判別を行う。
【0026】
請求項7の発明によれば、第1〜第3方向算出ステップの算出は3方向のうちの2方向の加速度成分についてだけ行うので、処理負荷が軽減される。加速度判別ステップの判別は残り1方向の加速度成分に基づいて行うので、単一の3方向加速度センサを利用して、ゲーム進行の的確化および効率化が図れる。
【0027】
請求項8の発明に従うゲームプログラムは、請求項6または7に従属し、プロセサに補正ステップ(S15)をさらに実行させる。加速度センサは、所定の検知可能範囲を有する。補正ステップは、ポインティング装置の加速度が上記の検知可能範囲を超えるとき加速度センサによって検知された加速度を補正する。
【0028】
請求項8の発明では、ポインティング装置の加速度が加速度センサの検知可能範囲を超えたとき検知された加速度は、補正ステップによって補正される。
【0029】
請求項9の発明に従うゲームプログラムは、請求項8に従属する。補正ステップは、ポインティング装置の加速度が検知可能範囲内にあるときに加速度センサによって検知された加速度で規定されるベジェ曲線(C)を利用して補正を行う。
【0030】
請求項8および9の発明によれば、方向判別の精度が高まり、加速度センサの検知可能範囲を超えるような運動にも対応できる。
【0031】
請求項10の発明に従うゲームプログラムは、請求項1ないし5のいずれかに従属し、プロセサに重力方向算出ステップ(S165〜S177)および加速度方向算出ステップ(S105)をさらに実行させる。重力方向算出ステップは、加速度センサによって検知された加速度を累積加算することによって、ポインティング装置と共に運動するローカル座標系における重力方向を算出する。
【0032】
加速度方向算出ステップは、静止座標系における重力方向を方向算出ステップによって算出された重力方向と一致させるような回転処理を、加速度センサによって検知される加速度に対して施すことによって、静止座標系における加速度の方向を算出する。第1方向判別ステップの判別は、かかる加速度方向算出ステップの算出結果に基づく。
【0033】
請求項10の発明では、重力方向算出ステップが、加速度センサによって検知された加速度を累積加算し、これによって、ポインティング装置と共に運動するローカル座標系における重力方向が求まる。加速度方向算出ステップは、静止座標系における重力方向を方向算出ステップによって算出された重力方向と一致させるような回転処理を、加速度センサによって検知される加速度に対して施す。これによって、静止座標系における加速度の方向が求まる。第1方向判別ステップの判別は、かかる加速度方向算出ステップの算出結果、つまり静止座標系における加速度の方向に基づく。
【0034】
請求項10の発明によれば、静止座標系における加速度方向を用いて、ポインティング装置の姿勢に関わらず、的確なゲーム処理を行える。
【0035】
請求項11の発明に従うゲームプログラムは、請求項10に従属する。加速度センサは3方向の加速度成分を検出し、方向算出ステップおよび加速度算出ステップの各々はこれら3方向に対応する3つの加速度成分について算出を行う。
【0036】
請求項11の発明によれば、算出された加速度を3次元のゲーム画面表示に反映させることが可能となる。また、2次元のゲーム画面を表示する場合でも加速度を用いたゲーム進行の的確化が図れる。
【0037】
請求項12の発明に従うゲームプログラムは、請求項1ないし11のいずれかに従属する。ゲームシステムは、表示装置の画面近傍に設けられる複数の発光素子(24a,24b)をさらに備え、光学式ポインティング装置は、これら複数の発光素子を含む被写界を撮像する撮像装置(72)を含む。位置特定ステップは、撮像装置によって撮像された被写界像に基づいて、ポインティング装置の指し示す位置を特定する。
【0038】
請求項12の発明では、表示装置の画面近傍に複数の発光素子が設けられる。これら複数の発光素子を含む被写界は、光学式ポインティング装置に設けられた撮像装置によって撮像される。位置特定ステップは、撮像装置によって撮像された被写界像に基づいて、ポインティング装置の指し示す位置を特定する。
【0039】
請求項13の発明に従うゲームシステムは、ゲーム処理の進行に応じて更新されるゲーム画面を表示する表示装置(34)、表示装置によって表示されたゲーム画面内の任意の点を指し示すポインティング装置(26)、ポインティング装置に設けられる加速度センサ(68)、ポインティング装置によって指し示される点の位置を単位時間毎に特定する位置特定手段(S35)、位置特定手段によって特定される位置の変化を検出する位置変化検出手段(S41,S43,S93)、加速度センサによって検知される加速度に基づいてポインティング装置の運動方向を判別する第1方向判別手段(S97)、および位置変化検出手段によって位置変化が検出されたとき当該位置変化に基づいてゲーム処理を実行し、位置変化検出手段によって位置変化が検出されないときには第1方向判別手段によって判別された運動方向に基づいてゲーム処理を実行するゲーム処理手段(S25)を備える。
【0040】
請求項13の発明でも、請求項1の発明と同様、ポインティング装置による指し示し位置の特定が困難な状況でも、その運動方向を利用して支障なくゲーム処理を進行させることができる。
【発明の効果】
【0041】
この発明によれば、ポインティング装置によって指し示される位置の特定が困難な状況でも、支障なくゲーム処理を進行させることができる。
【0042】
この発明の上述の目的,その他の目的,特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【0043】
図1を参照して、この発明の一実施例であるゲームシステム10は、ビデオゲーム装置12を含む。ビデオゲーム装置12は、略立方体のハウジング14を含み、ハウジング14の上端には光ディスクドライブ16が設けられる。光ディスクドライブ16には、ゲームプログラム等を記憶した情報記憶媒体の一例である光ディスク18が装着される。ハウジング14の前面には複数の(この実施例では4つの)コネクタ20が設けられる。これらのコネクタ20は、ケーブル(図示せず)によってコントローラ(図示せず)をビデオゲーム装置12に接続するためのものである。
【0044】
ただしこの実施例では、微弱電波による無線送信機能を有するコントローラ26と、微弱電波による無線受信機能を有する無線受信ユニット22とが用いられる。すなわち、ビデオゲーム装置12のいずれか1つのコネクタ20に無線受信ユニット22が装着される。装着された無線受信ユニット22は、コントローラ26からの無線信号を受信し、受信された信号をコネクタ20を通してビデオゲーム装置12に入力する。なお、無線通信機能は、微弱電波を利用するものに限らず、赤外線など他の電磁波を利用するものであってもよい。
【0045】
コントローラ26は、平面矩形の長手形状を有し、片手で把持可能な大きさである。コントローラ26の上面には、操作スイッチ26Aが設けられる。なお、コントローラ26の形状は、平面矩形とは限らず、楕円形などでもよい。スイッチ26Aは、上面に限らず、下面,或いは側面などに設けられてもよい。操作スイッチ26Aは、1つの十字スイッチおよび複数のボタンスイッチ等で構成される。十字スイッチは、たとえばプレイヤオブジェクトの移動方向を指示するために用いられる。ボタンスイッチは、たとえばプレイヤオブジェクトの動作を指示するために利用される。十字スイッチまたは複数のボタンスイッチは、さらに、たとえばメニュー選択やポインタあるいはカーソル移動を制御するためにも利用される。
【0046】
ビデオゲーム装置12のハウジング14の前面であり、コネクタ20の下方には、1つまたは複数の(この実施例では2つの)メモリスロット28が設けられる。このメモリスロット28にはメモリカード30が挿入される。メモリカード30は、光ディスク18から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム10を利用してプレイしたゲームのゲームデータ(ゲームの結果データまたは途中データ)を保存(セーブ)しておいたりするために利用される。
【0047】
ビデオゲーム装置12のハウジング14の後面には、AVケーブルコネクタ(図示せず)が設けられ、そのコネクタを用いて、AVケーブル32を通してビデオゲーム装置12にモニタ34を接続する。このモニタ34は典型的にはカラーテレビジョン受像機であり、AVケーブル32は、ビデオゲーム装置12からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に入力する。したがって、カラーテレビ(モニタ)34の画面上にたとえば3次元(3D)ビデオゲームのゲーム画像が表示され、左右のスピーカ34aからゲーム音楽や効果音などのステレオゲーム音声が出力される。
【0048】
このゲームシステム10において、プレイヤがコントローラ26を利用してゲームをプレイするためには、プレイヤはまずビデオゲーム装置12の電源をオンし、次いで、ゲームのソフトウェアをストアしている適宜の光ディスク18を選択し、その光ディスク18をビデオゲーム装置12のディスクドライブ16にローディングする。応じて、ビデオゲーム装置12がその光ディスク18にストアされているソフトウェアに基づいてゲームを実行し始めるようにする。プレイヤはビデオゲーム装置12に入力を与えるためにコントローラ26を操作する。たとえば、操作スイッチ26Aのどれかを操作することによってゲームもしくは他のアプリケーションをスタートさせる。
【0049】
また、ディスプレイ34の画面近傍に、各々が赤外光を発する2つのLEDモジュール24aおよび24bを設置することで、コントローラ26はポインティングデバイスとしても機能する。すなわち、コントローラ26は、2つのLEDモジュール24aおよび24bの各々からの赤外光を撮影し、その撮影画像中の2つのマーカ(2個の赤外光源)の各々の位置や大きさの変化に応じた操作信号を取得する。この取得した操作信号に基づいてコントローラ26が指し示す画面上の位置が算出される。これにより、スイッチやボタンによる操作とは異なり、画面内における座標の直接入力や回転の直接入力が可能となる。このためコントローラ26は、ダイレクトポインティングデバイス(DPD)とも呼ばれる。
【0050】
図2は、図1実施例のビデオゲームシステム10の電気的な構成を示すブロック図である。ビデオゲーム装置12には、中央処理ユニット(以下、「CPU」という。)36が設けられる。このCPU36は、コンピュータ或いはプロセサなどとも呼ばれ、ビデオゲーム装置12の全体的な制御を担当する。CPU36ないしコンピュータは、ゲームプロセサとして機能し、このCPU36には、バスを介して、メモリコントローラ38が接続される。メモリコントローラ38は主として、CPU36の制御の下で、バスを介して接続されるメインメモリ40の書込みや読出しを制御する。このメモリコントローラ38にはGPU(Graphics Processing Unit:グラフィックス処理装置) 42が接続される。
【0051】
GPU42は、描画手段の一部を形成し、たとえばシングルチップASICで構成され、メモリコントローラ38を介してCPU36からのグラフィクスコマンド(graphics command :作画命令) を受け、そのコマンドに従って、ジオメトリユニット44およびレンダリングユニット46によって3次元(3D)ゲーム画像を生成する。つまり、ジオメトリユニット44は、3次元座標系の各種オブジェクトやオブジェクト(複数のポリゴンで構成されている。そして、ポリゴンとは少なくとも3つの頂点座標によって定義される多角形平面をいう。)の回転,移動,変形等の座標演算処理を行う。レンダリングユニット46は、各種オブジェクトの各ポリゴンにテクスチャ(Texture :模様画像)を貼り付けるなどの画像生成処理を施す。したがって、GPU42によって、ゲーム画面上に表示すべき3D画像データが作成され、その画像データがフレームバッファ48内に記憶される。
【0052】
なお、GPU42が作画コマンドを実行するにあたって必要なデータ(プリミティブまたはポリゴンやテクスチャ等)は、GPU42がメモリコントローラ38を介して、メインメモリ40から入手する。
【0053】
フレームバッファ48は、たとえばラスタスキャンモニタ34の1フレーム分の画像データを描画(蓄積)しておくためのメモリであり、GPU42によって1フレーム毎に書き換えられる。具体的には、フレームバッファ48は、1画素(ピクセル)毎に、画像の色情報を順序立てて記憶している。ここで、色情報は、R,G,B,Aについてのデータであり、たとえば、8ビットのR(赤)データ、8ビットのG(緑)データ、8ビットのB(青)データおよび8ビットのA(アルファ)データである。なお、Aデータは、マス
ク(マット画像)についてのデータである。後述のビデオI/F58がメモリコントローラ38を介してフレームバッファ48のデータを読み出すことによって、モニタ34の画面上に3Dゲーム画像が表示される。
【0054】
また、Zバッファ50は、フレームバッファ48に対応する画素数×1画素当たりの奥行きデータのビット数に相当する記憶容量を有し、フレームバッファ48の各記憶位置に対応するドットの奥行き情報または奥行きデータ(Z値)を記憶するものである。
【0055】
なお、フレームバッファ48およびZバッファ50は、ともにメインメモリ40の一部を用いて構成されてもよく、また、これらはGPU42の内部に設けられてもよい。
【0056】
メモリコントローラ38はまた、DSP(Digital Signal Processor)52を介して、オーディオ用のRAM(以下、「ARAM」という。)54に接続される。したがって、メモリコントローラ38は、メインメモリ40だけでなく、サブメモリとしてのARAM54の書込みおよび/または読出しを制御する。
【0057】
DSP52は、サウンドプロセサとして働き、メインメモリ40に記憶されたサウンドデータ(図示せず)を用いたり、ARAM54に書き込まれている音波形データ(図示せず)を用いたりして、ゲームに必要な音、音声或いは音楽に対応するオーディオデータを生成する。
【0058】
メモリコントローラ38は、さらに、バスによって、各インタフェース(I/F)56,58,60,62および64に接続される。コントローラI/F56は、無線受信ユニット22を介してビデオゲーム装置12に接続されるコントローラ26のためのインタフェースである。コントローラ26は、操作スイッチ26Aの操作信号で微弱電波を変調し、この微弱電波信号を送信する(詳細は後述)。無線受信ユニット22は、こうしてコントローラ26から送信される微弱電波信号を受信し、受信された微弱電波信号を操作信号に復調する。コントローラI/F56は、無線受信ユニット22によって復調された操作信号をメモリコントローラ38を通してCPU36に与える。
【0059】
ビデオI/F58は、フレームバッファ48にアクセスし、GPU42で作成した画像データを読み出して、画像信号または画像データ(ディジタルRGBAピクセル値)をAVケーブル32(図1)を介してモニタ34に与える。
【0060】
外部メモリI/F60は、ビデオゲーム装置12の前面に挿入されるメモリカード30(図1)をメモリコントローラ38に連係させる。それによって、メモリコントローラ38を介して、CPU36がこのメモリカード30にデータを書込み、またはメモリカード30からデータを読み出すことができる。オーディオI/F62は、メモリコントローラ38を通してDSP52から与えられるオーディオデータまたは光ディスク18から読み出されたオーディオストリームを受け、それらに応じたオーディオ信号(音声信号)をモニタ34のスピーカ34aに与える。
【0061】
そして、ディスクI/F64は、ディスクドライブ16をメモリコントローラ38に接続し、したがって、CPU36がディスクドライブ16を制御する。このディスクドライブ16によって光ディスク18から読み出されたプログラムデータやテクスチャデータ等が、CPU36の制御の下で、メインメモリ40に書き込まれる。
【0062】
コントローラ26の電気的な構成は、図3に示される。図3を参照して、コントローラ26は、撮像情報演算ユニット70を含む。撮像情報演算ユニット70は、コントローラ26の先端部分に設けられる赤外線撮像装置72と、この撮像装置72で撮影した画像データを処理するための画像処理回路74とを有する。撮像装置72は、図示するように、CMOSセンサやあるいはCCDのような固体撮像素子72cを含み、その撮像素子72cの前方には、赤外線フィルタ(赤外線だけを通すフィルタ)72aおよびレンズ72cを配置している。したがって、この撮像装置72では、赤外線だけを検出して画像データを作成する。そして、画像処理回路74は、撮像装置72から得られた赤外画像データを処理して、高輝度部分を検知し、それの重心位置や面積を検出して、それらのデータを出力する。この高輝度部分の位置や面積のデータが、画像処理回路74からCPU66に入力される。
【0063】
コントローラ26はまた、加速度センサ68を含む。加速度センサ68からは、X,YおよびZ(図1参照)の3軸の直線成分の加速度データ(加速度信号)が出力される。これらの3軸で構成されるXYZ座標系は、コントローラ26(加速度センサ68)と共に移動/回転する(以下“ローカル座標系”とも呼ぶ)。
【0064】
CPU66には、この加速度センサ68からの加速度データと、上述の操作スイッチ26Aからの操作信号とがさらに入力される。CPU66は、操作スイッチ26Aからの操作信号に基づいて、そのときどのスイッチやボタンが操作されているかを検出する。そして、この操作データを、加速度データおよび高輝度部分データとともに、一連のコントローラデータとして出力し、無線モジュール76に入力する。無線モジュール76は、所定周波数の搬送波をこのコントローラデータで変調し、その微弱電波信号をアンテナ78から放射する。
【0065】
ゲームシステム100でこのようなコントローラ26を利用してゲームをプレイするとき、プレイヤは、図4に示すように、一方の手でコントローラ26を把持する。そして、コントローラ26の先端部分の撮像装置72がディスプレイ34の画面を向くようにする。ディスプレイ34の画面近傍に設置された2つのLEDモジュール24aおよび24bからはそれぞれ赤外線が出力され、一方、プレイヤが把持したコントローラ26の撮像装置72には上述のように赤外線フィルタ72a(図3参照)が組み込まれている。
【0066】
画像処理回路74は、その赤外線を含む撮影画像を処理することによって、LEDモジュール24aおよび24bの位置や面積情報を高輝度点の情報として取得する。こうして取得された輝点の位置や大きさのデータがコントローラ26から無線(微弱電波)でビデオゲーム装置12に送信される。ゲーム装置12は、受信した輝点の位置や大きさのデータを用いて、コントローラ26による画面上の指示位置を算出する。具体的には、2つの輝点の中点の位置が、コントローラ26の向いている位置すなわち指示位置として採用される。プレイヤがコントローラ26を動かすと、輝点の位置や大きさのデータが変化するため、それを利用して、ビデオゲーム装置12のCPU36はコントローラ26の動きに対応した操作信号を取得することができ、それに従って画面の指示位置の変化に応じたゲーム処理を進行させることができる。
【0067】
このように、撮像情報演算ユニット70によってマーカ(この実施例ではLEDからの赤外光)を撮影し、その撮影画像中のマーカの位置や大きさの変化に応じた操作信号を取得することができるため、指で操作する操作スイッチや操作キーあるいは操作ボタンによる操作とは異なり、画面内における座標直接入力や回転の直接入力が可能となる。ただし、このような撮像情報演算ユニットの原理自体は、特許第3422383号等に記載されているようによく知られているので、ここでは、これ以上の説明は省略する。
【0068】
ところで、上記のような画像処理によるDPD機能は、撮像装置72の撮像エリア内にマーカが存在しなければ有効に働かない。ある種のゲームでは、こうして画像処理回路74から有効な操作信号(DPD座標データ、すなわちコントローラ26によって指し示される画面上の位置)が得られない期間、加速度センサ68からの加速度データが利用される。このようなゲームとしては、以下で説明する薪割りゲームがある。
【0069】
薪割りゲームでは、図5〜図7に示すように、ディスプレイ34に薪Wが表示される。プレイヤは、コントローラ26を斧Hに見立てて、表示された薪Wを割る。たとえば、プレイヤがコントローラ26を下向きに振り下ろせば、薪Wは縦に割れる(図5参照)。また、プレイヤがコントローラ26を斜め向きに振れば、薪Wは斜めに割れる(図6参照)。また、プレイヤがコントローラ26を横向きに振れば、薪Wは横に割れる(図7参照)。
【0070】
すなわち、プレイヤがコントローラ26を所望の向きに振ると、コントローラ26からはその運動に応じた加速度データが送信される。また、撮像装置72がマーカを捕捉している期間は、さらにDPD座標データが送信される。ビデオゲーム装置12は、コントローラ26からDPD座標データを受信できればこのDPD座標データに基づいて、これを受信できなければ加速度データに基づいて、コントローラ26の振り方向を算出する。そして、薪Wを算出された方向に切断する。
【0071】
なお、この実施例では、切断面は常に薪Wの中心を通る。このため、振り方向だけを算出しているが、DPD座標データまたは加速度データに基づいてさらに切断点の位置を求め、求められた切断点を通るように切断してもよい(図25,図26参照:後述)。
【0072】
図8には、薪割りゲームをプレイする場合のメインメモリ40のメモリマップが示される。メインメモリ40は、プログラム記憶領域100およびデータ記憶領域120を含む。図8を参照して、プログラム記憶領域100には、ゲーム処理プログラム102と、加速度検出プログラム104と、加速度補正プログラム106と、移動方向ベクトル算出プログラム108と、重力方向ベクトル算出プログラム110と、振り方向ベクトル算出プログラム112と、DPD座標検出プログラム114と、切断方向決定プログラム116とを含む。
【0073】
ゲーム処理プログラム102は、薪割りゲームの進行に必要な基本処理、たとえばコントローラ26からの信号を受信する受信処理,薪を割る動画像(図5〜図7参照)を表示するための画像処理などを実行する。加速度検出プログラム104は、コントローラ26からの信号に基づいてこのコントローラ26の加速度を検出する。
【0074】
加速度補正プログラム106は、加速度検出プログラム104によって検出された加速度を補正する。詳しくは、加速度センサは、X,YおよびZの各軸について−2.2G〜2.2Gの範囲の値を出力するような特性を持つ。従って、コントローラ26がこの範囲を超える加速度を持つ場合、加速度センサの出力は、図10(A)に示されるように−2.2Gおよび2.2Gの各位置で値がつぶれる。加速度補正プログラム106は、かかる出力値を図10(B)のように補正する。なお、図11,図12,図13(A)および図13(B)は、加速度補正プログラム106による補正方法を図解したものである(後述)。
【0075】
移動方向ベクトル算出プログラム108は、必要に応じて補正された後の加速度値に基づいて移動方向ベクトル(V:図9(A)参照)を算出する。重力方向ベクトル算出プログラム110は、必要に応じて補正された後の加速度値に基づいて重力方向ベクトル(Vg:図9(B)参照)を算出する。振り方向ベクトル算出プログラム112は、算出された移動方向ベクトルおよび算出された重力方向ベクトルに基づいて振り方向ベクトル(Vs:図9(C)参照)を算出する。
【0076】
DPD座標検出プログラム114は、コントローラ26からの信号に基づいてDPD座標を検出する。切断方向決定プログラム116は、算出された振り方向ベクトルおよび検出されたDPD座標のいずれかに基づいて切断方向を決定する。
【0077】
データ記憶領域120には、加速度バッファ122,補正済み加速度バッファ124,変数/フラグ保持領域126および行列保持領域128などが形成される。なお、図示は省略するが、ゲーム画面の画像データや、上記各プログラム(102〜116)による処理結果などもまた、データ記憶領域120に記憶される。
【0078】
加速度バッファ122は、加速度検出プログラム104によって検出された3成分の加速度のうち、Z成分が所定条件(後述)を満たす場合のX成分およびY成分を記憶する。補正済み加速度バッファ124は、加速度補正プログラム106によって補正された後のX成分およびY成分(以下、この補正後のX,Y成分からなる2次元ベクトルを単に“加速度ベクトル”と呼ぶ)を記憶する。変数/フラグ保持領域126は、各プログラムによって参照される変数やフラグ(たとえばbDPDDataEnable,nDataなど:後述)を保持する。行列保持領域128は、振り方向ベクトル算出プログラム112が振り方向ベクトルを算出する際に利用する回転行列(またはこれと同等の演算式:後述する式(3)および(4)を参照)を保持する。
【0079】
ここで、この実施例の加速度センサ出力に基づく振り方向決定方法について詳しく説明する。まず、その原理を図9(A)〜図9(C)により説明する。図9(A)を参照して、移動方向ベクトルVは、XY平面内におけるコントローラ26の移動方向を示す2次元単位ベクトルであって、補正済み加速度バッファ124内の加速度ベクトルに基づいて、次式(1)により算出される。
【0080】
=Σ〔|At+1−A|(At+1−A)〕 …(1)
ここで、Aは時刻tにおける加速度ベクトルであり、Σは振り始め時刻から振り終わり時刻までの総和を意味する。
【0081】
このように、単位時間あたりの加速度変化を示すベクトル(At+1−A)にその大きさ|At+1−A|を乗じ、これを振り始め時刻から振り終わり時刻までの期間に渡って積分する。このため、移動方向ベクトルVは、速度のディメンションを持つ。なお、加速度変化の大きさを乗じたのは、加速度変化の大きい部分を相対的に高く評価するためである。図9(A)のVは、上式(1)の算出結果を正規化したものである。
【0082】
こうして得られる移動方向ベクトルVはローカル座標系(X−Y座標系)に従うため、これを静止座標系(X0−Y0座標系:図1参照)に従うように回転させる必要がある。このための回転演算は、図9(B)に示すような重力方向ベクトルVから求まる。
【0083】
図9(B)の重力方向ベクトルVは、次式(2)により算出される。
【0084】
=ΣA …(2)
ここで、Aは時刻tにおける加速度ベクトルであり、Σは振り始め時刻から振り終わり時刻までの総和を意味する。
【0085】
このように、加速度ベクトルAを振り始め時刻から振り終わり時刻までの時間に渡って積分することで、コントローラ26の運動による加減速成分は相殺され、重力成分だけが抽出される。図9(B)のVは、上式(2)の算出結果を正規化したものである。
【0086】
こうして算出された重力方向ベクトルVを鉛直下向きに回転させるような演算を移動方向ベクトルVに対して施せば、図9(C)に示すような、静止座標系に従う振り方向ベクトルVが得られる。
【0087】
従って、振り方向ベクトルV=(sx,sy)は、V=(mx,my),V=(gx,gy)として、次式(3)および(4)により算出される。
【0088】
sx=−gy×mx+gx×my …(3)
sy=−gx×mx−gy×my …(4)
次に、図10(A)および図10(B)に示す加速度補正方法の詳細を図11,図12,図13(A)および図13(B)により説明する。なお、コントローラ26の加速度が加速度センサ68の検知範囲(−2.2G〜2.2G)内に収まれば、かかる補正は不要である。十分に広い検知範囲を有する加速度センサを用いる場合も同様である。
【0089】
この実施例の補正処理では、図11に示すような2次のベジェ曲線Cを利用する。図11を参照して、ベジェ曲線Cは、4つの制御点P〜Pおよびパラメータu(0≦u≦1)に対し、次式(5)〜(9)のように記述される。
【0090】
P=PBez0+PBez1+PBez2+PBez3 …(5)
Bez0=(1−u) …(6)
Bez1=3u(1−u) …(7)
Bez2=3u(1−u) …(8)
Bez3=u …(9)
従って、4つの制御点P〜Pを決めれば、パラメータuを0〜1の範囲で指定することで、曲線C上の任意の点Pを求めることができる。そこで、図11に示すように、値がつぶれる直前の加速度を制御点Pに対応させ、値がつぶれた直後の加速度を制御点Pに対応させる。そして、V=P−A,V=P−Bとして、残り2つの制御点PおよびPを次式(10)および(11)により計算する。
【0091】
=P+(V+V×K)×n×K …(10)
=P+(V+V×K)×n×K …(11)
ここで、nは値がつぶれた加速度点の個数(図11の例では黒点で示された4個)であり、KおよびKは認識具合調整用のスカラー値である。こうしてVやVにVを定数倍したものを乗じることで、VおよびVの一方が何らかのエラーによって適切でない場合でも、見当違いの方向に補正がなされることがないようにしている。
【0092】
また、Vは、補正前の加速度データ系列つまり加速度バッファ122(図8参照)内の加速度データの大まかな並び方向を示す単位ベクトルであり(図13(A)参照)、補正前の加速度データ系列に対して前述の式(1)を適用することにより得られる。
【0093】
なお、Vの向きは、補正する方向に合わせて(すなわちデータ系列をどちら向き膨らませるかに応じて)、適宜反転される。具体的には、(P+P)とVとの内積が負のとき(すなわち両者のなす角が鈍角のとき)だけ、Vを反転させる。たとえば図13(A)では、X=2.2GおよびX=−2.2Gの2箇所で補正が行われるが、前者すなわちX=2.2Gでの補正はVとは逆向きであるため、Vは図13(B)に示すように反転される。一方、後者での補正はVと同じ向きであるため、Vの反転は不要である。
【0094】
こうして4つの制御点P〜Pが求まれば、上式(5)〜(9)でパラメータuを変化させつつベジェ曲線C上のn個の点を求め、求められたn個の点を補正後の加速度データとする。そして、かかる補正計算を、値がつぶれている全ての箇所で実行する。たとえば図13(A)では、X=2.2Gの近傍で4個の点を求め、そしてX=−2.2Gの近傍で3個の点を求めることになる。
【0095】
薪割りゲームで切断方向を決定するにあたり、CPU36は、図14〜図19のフローチャートに従う処理を実行する。まず図14を参照して、ステップS1では、bDPDDataEnableに“false”をセットし、nDataには“0”をセットする。なお、bDPDDataEnableは有効なDPD座標が得られているかどうかを示すフラグであり、有効なDPD座標が得られないときは“false”がセットされ、有効なDPD座標が得られたとき“true”がセットされる。nDataは検出された加速度ベクトルの個数を意味する変数である。
【0096】
ステップS3では、加速度センサ68の検出値を取込み、取り込まれた値つまりX,Y,Zの3方向の加速度値をacc.x,acc.y,acc.zにそれぞれセットする。ステップS5ではacc.zが1.1Gを上回るか否かを判別し、NOであればステップS3に戻る。
【0097】
ステップS5でYESであれば、ステップS7に移って、1.1Gを上回ると判別されたacc.zに対応するacc.xおよびacc.y(X,Y成分からなる2次元の加速度ベクトル)を加速度バッファ122(図8参照)に記録する。そして、ステップS9でnDataをインクリメントした後、ステップS29に移る。
【0098】
ステップS5でNOであれば、nDataが定数D(たとえば“20”)を超えたか否かをステップS11で判別する。ステップS11でNO、すなわち加速度バッファ122に記録された加速度ベクトルの個数がD以下であれば、ステップS27でnDataに“0”をセットした後、ステップS29に進む。
【0099】
ステップS11でYESであれば、その絶対値が2.2Gを超えるような加速度成分(acc.xまたはacc.y)が加速度バッファ122内に存在するか否かをステップS13で判別する。ステップS13でNOであればステップS17に進み、YESであればステップS15で、図10〜図12,図13(A)および図13(B)に示すような加速度補正処理(前述)を実行する。補正後の加速度ベクトルは、補正済み加速度バッファ124に記録される。記録後、ステップS17に移る。
【0100】
ステップS17では、補正済み加速度バッファ124に記録された補正済み加速度ベクトル(補正が行われなかった場合には加速度バッファ122に記録された加速度ベクトル)に基づいて、移動方向ベクトルV(図9(A)参照)を算出する。ステップS19では、同じく補正済み加速度ベクトル(ないしは加速度ベクトル)に基づいて、重力方向ベクトルV(図9(B)参照)を算出する。ステップS21では、算出された移動方向ベクトルVおよび算出された重力方向ベクトルVに基づいて、振り方向ベクトルV(図9(C)参照)を算出する。
【0101】
ステップS23では、ステップS21で算出された振り方向ベクトルVまたは後述するステップS29〜S43で求められる2個のDPD座標間の傾きから、切断方向を決定する。そして、ステップS25で成功演出処理を実行し、ステップS1に戻る。成功演出処理では、決定された切断方向に応じて、図5〜図7のような画面が表示される。
【0102】
図15を参照して、ステップS29ではnDataが“0”よりも大きいか否かを判別し、ここでYESであればステップS33に移る。ステップS29でNOであれば、nData=0(すなわち、1.1Gより大きいZ軸方向の加速度が検出されていない、または1.1Gより大きいZ軸方向の加速度が連続して検出された個数が所定数(定数D)以下である)であるので、薪割り運動のような振り動作ではないと判断して、ステップS31でbDPDDataEnableに“false”をセットした後、ステップS33を経てステップS45に移る。すなわち、薪割り運動に基づいたDPD座標が得られないと判断して、有効なDPD座標が得られないことを示すフラグをセットする。ステップS33では、コントローラ26から有効なDPD座標(画面上の指示位置)が検出されたか否かを判別し、ここでNOであればステップS45に進む。
【0103】
ステップS33でYESであれば、ステップS35〜S43の一連の処理を経てステップS45に移る。ステップS35では、得られたDPD座標をDPDPosにセットする。ステップS37では、bDPDDataEnableが“true”であるか否かを判別する。ここでYESであればステップS43に進み、NOであればステップS39およびS41を経てステップS43に進む。
【0104】
ステップS39では有効なDPD座標が得られたと判断して、bDPDDataEnableに“true”をセットし、ステップS41では有効なDPD座標の最初の検出座標を示すDPDFirstにDPDPosをセットする。
【0105】
ステップS43では、有効なDPD座標の最後の検出座標を示すDPDLastにDPDPosをセットする。そしてステップS45で終了操作が行われたか否かを判別し、NOであればステップS3に戻り、処理を繰り返す。YESであれば、この切断方向決定処理を終了する。この図14および図15の処理を単位時間毎に繰り返し実行することによって、所定の加速度(Z軸方向に1.1Gより大きい加速度)が連続して検出されている間、DPDLastの値が更新されるので、最終的にその期間の最後のDPD座標がDPDLastにセットされる。
【0106】
上記ステップS17の移動方向ベクトル算出処理は、図16のサブルーチンに従う。図16を参照して、ステップS61では、前述の式(1)により移動方向ベクトルVを算出する(詳細は前述)。ステップS63では、算出された移動方向ベクトルVを正規化する。そして上位層のルーチンに復帰する。
【0107】
上記ステップS19の重力方向ベクトル算出処理は、図17のサブルーチンに従う。図17を参照して、ステップS71では、前述の式(2)により重力方向ベクトルVを算出する(詳細は前述)。ステップS73では、算出された重力方向ベクトルVを正規化する。そして上位層のルーチンに復帰する。
【0108】
上記ステップS21の振り方向ベクトル算出処理は、図18のサブルーチンに従う。図18を参照して、ステップS81では、移動方向ベクトルVおよび重力方向ベクトルVから、行列保持領域128に保持された回転行列(これは前述の式(3)および(4)と同等である)により、振り方向ベクトルVを算出する(詳細は前述)。そして上位層のルーチンに復帰する。
【0109】
上記ステップS23の切断方向決定処理は、図19のサブルーチンに従う。図19を参照して、ステップS91では、bDPDDataEnableが“true”であるか否かを判別し、YESであれば有効なDPD座標が得られているので、ステップS93で、DPDLastとDPDFirstとの差が“0”でないか否かを判別する。ここでYESであれば、すなわちDPDLast≠DPDFirstであれば、有効なDPD座標の開始点と終了点の座標変化に基づいてコントローラ26の振り方向が特定できるので、ステップS95で{DPDLast−DPDFirst}の傾き、すなわちDPDFirstからDPDLastに向かうベクトルの傾きを求め、これを切断方向とする。ステップS91およびS93の各々でNOであれば、有効なDPD座標の開始点と終了点の座標変化に基づくコントローラ26の振り方向が特定できないので、ステップS97に移り、ステップS21で求めた振り方向ベクトルVを切断方向とする。切断方向が決定されると、上位層のルーチンに復帰する。
【0110】
以上から明らかなように、この実施例(第1実施例)では、ゲームシステム(10)は、ゲーム処理の進行に応じて更新されるゲーム画面を表示する表示装置(34)と、表示装置によって表示されたゲーム画面内の任意の点を指し示すポインティング装置(26)と、ポインティング装置に設けられる加速度センサ(68)とを備える。ゲームシステム(10)のプロセサ(36)は、ポインティング装置によって指し示される点の位置を繰り返し特定し(S35)、特定される位置の変化を検出する(S41,S43,S93)。また、加速度センサによって検知される加速度に基づいてポインティング装置の運動方向を判別し(S97)、そして、位置変化が検出されたとき当該位置変化に基づいてゲーム処理を実行し、位置変化が検出されないときには判別された運動方向に基づいてゲーム処理を実行する(S25)。
【0111】
このように、ポインティング装置によって指し示される画面上の点の位置変化を検出できるときはこの位置変化に基づいてゲーム処理を実行し、位置変化を検出できないときは加速度センサの検知結果から判別される運動方向に基づいてゲーム処理を実行するので、ポインティング装置による指し示し位置の特定が困難な状況でも、その運動方向を利用してゲーム処理を支障なく進行させることができる。
【0112】
また、プロセサは、加速度センサによって検知される加速度が閾値以上であるか否かを判別し(S5)、加速度が閾値以上であると判別されている期間にだけ位置特定を行う。これにより、位置特定を効率よく行え、また、手ぶれなどプレイヤの意図しないポインティング装置の動きにより誤ってゲーム処理が進行するのを防ぐことができる。
【0113】
また、プロセサは、加速度センサによって検知される加速度の変化を累積加算することによって、ポインティング装置と共に運動するローカル座標系におけるポインティング装置の速度方向を算出する(S17)。また、加速度センサによって検知される加速度を累積加算することによってローカル座標系における重力方向を算出する(S19)。そして、算出された重力方向を静止座標系における重力方向と一致させるような回転演算を算出された速度方向に対して施すことによって、静止座標系における速度方向を算出する(S21)。これにより、静止座標系における速度方向を用いて、ポインティング装置の姿勢に関わらず、的確なゲーム処理を行える。
【0114】
また、上記の各算出処理は、加速度センサから出力されるXYZ方向の3加速度成分のうちXY方向に対応する2つの加速度成分について行われ、加速度の判別処理はZ方向に対応する加速度成分について行われる。このため、単一の3方向加速度センサを利用して、ゲーム進行の的確化および効率化が図れる。
【0115】
以下には、この発明の他の実施例について説明する。この実施例のハードウエア構成は前述の実施例と同様であり、図1〜図3を流用する。この実施例でも薪割りゲームをプレイするが、そのプレイ方法やゲーム画面は前実施例と同様なので、図4〜図7を流用する。この実施例の薪割りゲームでも、有効なDPD座標が得られた場合はこれに基づいて切断方向を決定し、そうでなければ加速度センサ68の出力値(XYZ3方向の加速度成分)から切断方向を決定する。前実施例との相違は、加速度センサ68の出力値から切断方向を決定する処理にある。
【0116】
すなわち、加速度センサ68の出力値から切断方向を決定する際、前実施例では、そのXY成分だけを2次元の加速度ベクトルとしてバッファに記録し、バッファに蓄積された加速度ベクトルから移動方向ベクトルおよび重力方向ベクトルを算出し、そしてX−Y空間内で(すなわちローカル座標系において)重力方向ベクトルを鉛直下方に向かせるような回転演算を移動方向ベクトルに対して施した。これにより、静止座標系における(すなわちX0−Y0空間内での)振り方向、つまり切断方向が求まる。
【0117】
一方、この実施例では、加速度センサ68の出力値つまりXYZ成分を有する3次元の加速度ベクトルをバッファに記録し、バッファに蓄積された加速度ベクトルを積算してtotalベクトル(すなわちローカル座標系における重力方向ベクトル)を求め、静止座標系における重力ベクトル方向(鉛直下方向)をtotalベクトル方向に向かせるような回転演算を加速度ベクトルに対して施し、回転後の加速度ベクトル(すなわち静止座標系における加速度ベクトル)から重力ベクトルを減算し、そして減算後の加速度ベクトルのXY成分を切断方向とする。
【0118】
薪割りゲームをプレイするときのメインメモリ40のメモリマップを図20に示す。図20を参照して、プログラム記憶領域100には、ゲーム処理プログラム202と、加速度検出プログラム204と、加速度ベクトル処理プログラム206と、DPD座標検出プログラム208と、切断方向決定プログラム210とを含む。
【0119】
ゲーム処理プログラム202は、図8のゲーム処理プログラム102と同様、薪割りゲームの進行に必要な基本処理を実行する。加速度検出プログラム204は、図8の加速度検出プログラム104と同様、コントローラ26の加速度を検出する。加速度ベクトル処理プログラム206は、加速度ベクトルからのtotalベクトルの算出,加速度ベクトルの回転,回転後の加速度ベクトルからの重力ベクトルの減算といった一連の処理を実行する。DPD座標検出プログラム208は、図8のDPD座標検出プログラム114と同様、DPD座標を検出する。切断方向決定プログラム210は、上記のような一連の処理を経た後の加速度ベクトルおよび検出されたDPD座標のいずれかに基づいて切断方向を決定する。
【0120】
データ記憶領域120には、加速度バッファ222,変数/フラグ保持領域224および行列保持領域226などが形成される。加速度バッファ222は、加速度検出プログラム104によって検出された3成分の加速度を記憶する。変数/フラグ保持領域224は、上記の各プログラム(202〜210)によって参照される変数やフラグを保持する。行列保持領域226は、加速度ベクトル処理プログラム206による回転処理で利用される姿勢変換行列を保持する。
【0121】
薪割りゲームで切断方向を決定するにあたり、CPU36は、図21〜図24のフローチャートに従う処理を実行する。まず図21を参照して、ステップS101では、bDPDDataEnableに“false”をセットし、nDataには“0”をセットする。ステップS103では、姿勢変換行列を求める(後述)。
【0122】
ステップS105では、まずコントローラ26から加速度を取得し、取得された加速度(X,Y,Z成分)をacc1(acc1.x,acc1.y,acc1.z)にセットし、acc1を姿勢変換行列で回転させ、そして回転結果をacc2にセットする。次に、acc2から重力ベクトルを減算し、減算結果をacc3にセットする。次に、acc3の大きさを求め、結果をsizeにセットする。
【0123】
ステップS107では、nDataが“0”より大きいか否かを判別し、NOであればステップS131に進む。YESであれば、ステップS109〜S123を経てステップS131に進む。
【0124】
ステップS109では、(m_acc.x,m_acc.y)と(acc3.x,acc3.y)との内積が負であるか否か、つまりこれら2つのベクトルのなす角が鈍角であるかを判別する。ここでm_acc.xおよびm_acc.yは、accの大きさが最大のときのacc.xおよびacc.yを意味する。要するに、振り動作の終わりに検出される逆向きの加速度を検出することによって振り動作が終わったか否かをここでは判別している。
【0125】
ステップS109でYESであれば、ステップS125でnDataが定数A以上であるか否かを判別する。ステップS125でNOであればステップS123に移り、YESであればステップS127で切断方向を決定(後述)した後、ステップS129で成功演出を行い、そしてステップS101に戻る。
【0126】
ステップS109でNOであれば、ステップS111でm_sizeがsizeよりも小さいか否かを判別する。ここでm_sizeはsizeの最大値を意味する。ステップS111でNOであればステップS115に進み、YESであればステップS113を経てステップS115に進む。ステップS113では、m_sizeにsizeをセットし、そしてacc3の大きさをsizeにセットする。
【0127】
ステップS115ではnDataをインクリメントし、続くステップS117でnDataが定数B(>定数A)よりも大きいか否かを判別する。ここでYESであればステップS127に移り、NOであればステップS119に進む。ステップS119では、過去n回分の加速度ベクトルを加速度バッファ222から取得し、取得されたn個の加速度ベクトルの各々の大きさを求め、求められた大きさが重力加速度に近いものの個数を計数し、そして計数結果をMにセットする。セット後、ステップS121に移る。
【0128】
ステップS121では、Mが定数(たとえば“5”)より大きいか否かを判別する。ここでNOであればステップS131に進み、YESであればステップS123を経てステップS131に移る。ステップS123では、nDataに“0”をセットする。なお、ステップS121およびS123は要するに、現在検出中の運動が薪割り運動であるのかどうか(すなわちプレイヤが薪を割るべくコントローラ26を振っているのかどうか)を判別して、薪割り運動でなければ(単なる回転運動などであれば)nDataをリセットするという処理である。
【0129】
図22を参照して、ステップS131では、nDataが“0”より大きいか否かを判別する。ここでYESであればステップS139に進み、NOであればステップS133〜S137を経てステップS139に進む。ステップS133では、bDPDDataEnableに“false”をセットする。ステップS135では、sizeが定数より大きいか否かを判別し、ここでNOであればステップS151に進む。ステップS135でYESであればステップS137で、m_sizeにsizeをセットし、m_accにacc3をセットし、そしてnDataに“1”をセットする。
【0130】
ステップS139では、コントローラ26から有効なDPD座標が得られたか否かを判別する。ここでNOであればステップS151に進み、YESであればステップS141〜S149を経てステップS151に進む。ステップS141では、取得されたDPD座標をDPDPosにセットする。ステップS143では、bDPDDataEnableが“true”であるか否かを判別する。ここでYESであればステップS149に進み、NOであればステップS145およびS147を経てステップS149に進む。
【0131】
ステップS145ではbDPDDataEnableに“true”をセットし、ステップS147ではDPDFirstにDPDPosをセットする。
【0132】
ステップS149では、DPDLastにDPDPosをセットする。そしてステップS151で終了操作が行われたか否かを判別し、NOであればステップS103に戻る。YESであれば、この切断方向決定処理を終了する。
【0133】
上記ステップS103の姿勢変換行列を求める処理は、図23のサブルーチンに従う。図23を参照して、ステップS161ではtotalおよびnData2の各々に“0”をセットし、ステップS163ではiに“0”をセットし、そしてステップS165〜S173のループ処理に入る。なお、totalは、検出された加速度ベクトルのうち重力加速度に近いものを加算した結果のベクトルであり、nData2は検出された加速度ベクトルのうち重力加速度に近いものの個数を意味する変数である。
【0134】
ステップS165では、iが“64”より小さいか否かを判別する。ステップS165でYESであれば、ステップS167でaccにi個前の加速度ベクトルをセットする。ステップS169では、accの大きさが0.8以上1.2以下であるか否かを判別する。ここでNOであればステップS173に進み、YESであればステップS171を経てステップS173に進む。ステップS171では、totalにaccを加算して、この加算結果をtotalとすると共に、nData2をインクリメントする。そしてステップS173でiをインクリメントした後、ステップS165に戻る。
【0135】
このような一連の処理が反復されることでiが“64”に達すると、ステップS165でNOと判別し、このループを抜けてステップS175に移る。ステップS175では、nData2が48より大きいか否かを判別する。つまり、過去64回分の加速度ベクトルの中に大きさが0.8〜1.2のものが48個以上含まれるかどうかが判別される。ここでYESであれば、静止座標系における重力ベクトル方向をtotalベクトル方向に回転させる行列(ないしは同等の演算式)を求め、これを姿勢変換行列として行列保持領域226に記録する。そして上位層のルーチンに復帰する。
【0136】
ステップS175でNOであればステップS179に移り、前回の姿勢変換行列つまり行列保持領域226に保持されている姿勢変換行列をステップS105の回転処理で使用することを決定する。そして上位層のルーチンに復帰する。
【0137】
上記ステップS127の切断方向決定処理は、図24のサブルーチンに従う。図24を参照して、ステップS191では、bDPDDataEnableが“true”であるか否かを判別し、YESであればステップS193で、DPDLastとDPDFirstとの差が“0”でないか否かを判別する。ここでYESであれば、ステップS195で{DPDLast−DPDFirst}の傾きを求め、これを切断方向とする。ステップS191およびS193の各々でNOであれば、ステップS197に移って、m_accのXY成分からなる2次元ベクトルの傾きを求め、これを切断方向とする。切断方向が決定されると、上位層のルーチンに復帰する
以上から明らかなように、この実施例(第2実施例)によれば、前実施例と同様、ポインティング装置(26)による指し示し位置の特定が困難な状況でも、その運動方向を利用してゲーム処理を進行させることができる。
【0138】
また、この実施例では、プロセサ(36)は、加速度センサ(68)によって検知された加速度を累積加算することによって、ポインティング装置と共に運動するローカル座標系における重力方向を算出(S165〜S177)する。また、静止座標系における重力方向を算出された重力方向と一致させるような回転処理を加速度センサによって検知される加速度に対して施すことによって、静止座標系における加速度の方向を算出する(S105)。これにより、静止座標系における加速度方向を用いて、ポインティング装置の姿勢に関わらず、的確なゲーム処理を行える。
【0139】
また、この実施例では、上記の各算出処理は、XYZ3方向に対応する3つの加速度成分について行うので、算出された加速度を3次元のゲーム画面に反映させることが可能となり、また、2次元のゲーム画面を表示する場合でも加速度を用いたゲーム進行の的確化が図れる。
【0140】
なお、上記2つの実施例(第1実施例および第2実施例)の各々では、所定位置(具体的には薪Wの中心:図5〜図7参照)を切断中心位置としたが、2つ以上の有効なDPD座標が得られた場合は、最初のDPD座標を切断開始位置とし、最後のDPD座標を切断終了位置としてもよい。そうでない場合(すなわち加速度センサ68の出力値に基づいて切断方向を決定する場合)には、所定位置を切断中心位置とする。
【0141】
第1実施例にこのような変更を加えるには、ステップS23とステップS25(図14参照)との間に切断位置決定ステップ(S24)を挿入すればよい。このステップS24は、図25のサブルーチンに従う。図25を参照して、ステップS91およびS93(図19参照)と同等のステップS201およびS203の各々でYESであれば、ステップS205でDPDFirst,DPDLastをそれぞれ切断開始位置,切断終了位置とする。ステップS201およびS203の各々でNOであれば、ステップS207で所定位置を切断中心位置とする。
【0142】
一方、第2実施例においては、ステップS127とステップS129(図21参照)との間に切断位置決定ステップ(S128)を挿入する。このステップS128は、図26のサブルーチンに従う。図26を参照して、ステップS191およびS193(図24参照)と同等のステップS211およびS213の各々でYESであれば、ステップS215でDPDFirst,DPDLastをそれぞれ切断開始位置,切断終了位置とする。ステップS211およびS213の各々でNOであれば、ステップS217で所定位置を切断中心位置とする。
【0143】
なお、上述の実施例では、ディスプレイ34の表示画面近傍にLEDモジュール24aおよび24bを設け、コントローラ26にLEDモジュール24aおよび24bから出力される赤外光を撮像するための撮像装置を設けることによってコントローラ26の位置を検出するようにしたが、これに限られる必要はない。例えば、コントローラ26にLEDモジュールを設け、ディスプレイ34の表示画面近傍に撮像装置を設けるようにしてもよい。また、撮像装置に代えて受光センサ等を用いてもよい。
【0144】
また、上述の実施例では、画面内の任意の点を指し示すポインティング装置として、撮像装置を備えたものを採用したが、画面の位置を指示できるものであれば、他の方法を用いてもよい。例えば、コントローラ26の十字キー等を操作することに画面内を移動するカーソルの位置によって任意の点を指し示すようにしてもよい。また、モニタ画面にタッチパネルを設置し、モニタをペン等で直接タッチすることによって画面内の任意の点を指示するようにしてもよい。また、マウス等の画面上の位置座標を指定する他のポインティングデバイスを用いて、当該マウス等から出力される出力値に基づいて画面内の任意の点を指示するようにしてもよい。このとき、ペンやマウス等の動きを検出可能な加速度センサ等をペンやマウス等に設けておけばよい。
【0145】
以上では、ゲームシステム10を用いて説明したが、この発明は、ゲーム処理の進行に応じて更新されるゲーム画面を表示する表示装置と、表示装置によって表示されたゲーム画面内の任意の点を指し示すポインティング装置と、ポインティング装置に設けられる加速度センサとを備えるシステムに適用できる。
【図面の簡単な説明】
【0146】
【図1】この発明の一実施例を示す図解図である。
【図2】図1実施例(第1実施例)の電気的な構成の一部を示すブロック図である。
【図3】図1実施例の電気的な構成の他の一部を示すブロック図である。
【図4】図1実施例でゲームをプレイする方法を示す図解図である。
【図5】図1実施例に適用されるゲーム画面の一例を示す図解図である。
【図6】図1実施例に適用されるゲーム画面の他の一例を示す図解図である。
【図7】図1実施例に適用されるゲーム画面のその他の一例を示す図解図である。
【図8】図1実施例に適用されるメモリマップを示す図解図である。
【図9】(A)〜(C)は図1実施例に適用される切断方向決定方法を示す図解図である。
【図10】(A)および(B)は図1実施例に適用される加速度補正方法を示す図解図である。
【図11】図10(A)および図10(B)の方法を詳細に説明するための図解図である。
【図12】図10(A)および図10(B)の方法を詳細に説明するための図解図である。
【図13】(A)および(B)は図10(A)および図10(B)の方法を詳細に説明するための図解図である。
【図14】図1実施例に適用されるCPU動作の一部を示すフロー図である。
【図15】図1実施例に適用されるCPU動作の他の一部を示すフロー図である。
【図16】図1実施例に適用されるCPU動作のその他の一部を示すフロー図である。
【図17】図1実施例に適用されるCPU動作のさらにその他の一部を示すフロー図である。
【図18】図1実施例に適用されるCPU動作の他の一部を示すフロー図である。
【図19】図1実施例に適用されるCPU動作のその他の一部を示すフロー図である。
【図20】他の実施例(第2実施例)に適用されるメモリマップを示す図解図である。
【図21】他の実施例に適用されるCPU動作の一部を示すフロー図である。
【図22】他の実施例に適用されるCPU動作の他の一部を示すフロー図である。
【図23】他の実施例に適用されるCPU動作のその他の一部を示すフロー図である。
【図24】他の実施例に適用されるCPU動作のさらにその他の一部を示すフロー図である。
【図25】その他の実施例(第1実施例の変形例)に適用されるCPU動作の一部を示すフロー図である。
【図26】さらにその他の実施例(第2実施例の変形例)に適用されるCPU動作の一部を示すフロー図である。
【符号の説明】
【0147】
10 …ゲームシステム
12 …ビデオゲーム装置
18 …光ディスク
24a,24b …LEDモジュール
22 …無線受信ユニット
26 …コントローラ
26A …操作スイッチ
34 …モニタ
36 …CPU
40 …メインメモリ
68 …加速度センサ
72 …撮像装置
74 …画像処理回路
76 …無線モジュール

【特許請求の範囲】
【請求項1】
ゲーム処理の進行に応じて更新されるゲーム画面を表示する表示装置と、前記表示装置によって表示されたゲーム画面内の任意の点を指し示すポインティング装置と、前記ポインティング装置に設けられる加速度センサとを備えるゲームシステムのプロセサに、
前記ポインティング装置によって指し示される点の位置を単位時間毎に特定する位置特定ステップ、
前記位置特定ステップによって特定される位置の変化を検出する位置変化検出ステップ、
前記加速度センサによって検知される加速度に基づいて前記ポインティング装置の運動方向を判別する第1方向判別ステップ、および
前記位置変化検出ステップによって位置変化が検出されたとき当該位置変化に基づいて前記ゲーム処理を実行し、前記位置変化検出ステップによって位置変化が検出されないときには前記第1方向判別ステップによって判別された運動方向に基づいて前記ゲーム処理を実行するゲーム処理ステップを実行させるための、ゲームプログラム。
【請求項2】
前記プロセサに、前記加速度センサによって検知される加速度が閾値以上であるか否かを判別する加速度判別ステップをさらに実行させ、
前記位置特定ステップは前記加速度判別ステップによって加速度が閾値以上であると判別されている期間にだけ位置特定を行う、請求項1記載のゲームプログラム。
【請求項3】
前記プロセサに、前記位置特定ステップによって前記期間内に検出された複数の位置のうち最初に検出された位置と最後に検出された位置とに基づいて前記ポインティング装置の運動方向を判別する第2方向判別ステップをさらに実行させる、請求項2記載のゲームプログラム。
【請求項4】
前記第1方向判別ステップは前記期間にだけ方向判別を行う、請求項3記載のゲームプログラム。
【請求項5】
前記ゲーム処理は前記ポインティング装置の運動に対応する前記ゲーム画面内の軌跡を決定する処理を含み、
前記ゲーム処理ステップは、前記位置変化検出ステップによって位置変化が検出されたとき前記位置特定ステップによって特定された複数の位置のうち最初に特定された位置と最後に特定された位置とに基づいて前記軌跡を決定し、前記位置変化検出ステップによって位置変化が検出されないときには前記第1方向判別ステップによって判別された運動方向と既定位置とに基づいて前記軌跡を決定する、請求項1ないし4のいずれかに記載のゲームプログラム。
【請求項6】
前記プロセサに、
前記加速度センサによって検知される加速度の変化を累積加算することによって前記ポインティング装置と共に運動するローカル座標系における当該ポインティング装置の速度方向を算出する第1方向算出ステップ、
前記加速度センサによって検知される加速度を累積加算することによって前記ローカル座標系における重力方向を算出する第2方向算出ステップ、および
前記第2方向算出ステップによって算出された重力方向を静止座標系における重力方向と一致させるような回転演算を前記第1方向算出ステップによって算出された速度方向に対して施すことによって前記静止座標系における速度方向を算出する第3方向算出ステップをさらに実行させ、
前記第1方向判別ステップの判別は前記第3方向算出ステップの算出結果に基づく、請求項1ないし5のいずれかに記載のゲームプログラム。
【請求項7】
前記加速度センサは3方向の加速度成分を検出し、
前記第1方向算出ステップ,前記第2方向算出ステップおよび前記回転演算ステップの各々は前記3方向のうちいずれか2つに対応する2つの加速度成分について算出を行い、
前記加速度判別ステップは前記3方向のうち残りの1つに対応する加速度成分について判別を行う、請求項6記載のゲームプログラム。
【請求項8】
前記加速度センサは所定の検知可能範囲を有し、
前記プロセサに、前記ポインティング装置の加速度が前記検知可能範囲を超えるとき前記加速度センサによって検知された加速度を補正する補正ステップをさらに実行させる、請求項6または7記載のゲームプログラム。
【請求項9】
前記補正ステップは前記ポインティング装置の加速度が前記検知可能範囲内にあるときに前記加速度センサによって検知された加速度で規定されるベジェ曲線を利用して補正を行う、請求項8記載のゲームプログラム。
【請求項10】
前記プロセサに、
前記加速度センサによって検知された加速度を累積加算することによって前記ポインティング装置と共に運動するローカル座標系における重力方向を算出する重力方向算出ステップ、および
静止座標系における重力方向を前記重力方向算出ステップによって算出された重力方向と一致させるような回転処理を前記加速度センサによって検知される加速度に対して施すことによって前記静止座標系における加速度の方向を算出する加速度方向算出ステップをさらに実行させ、
前記第1方向判別ステップの判別は前記加速度方向算出ステップの算出結果に基づく、請求項1ないし5のいずれかに記載のゲームプログラム。
【請求項11】
前記加速度センサは3方向の加速度成分を検出し、
前記方向算出ステップおよび前記加速度算出ステップの各々は前記3方向に対応する3つの加速度成分について算出を行う、請求項10記載のゲームプログラム。
【請求項12】
前記ゲームシステムは前記表示装置の画面近傍に設けられる複数の発光素子をさらに備え、
前記光学式ポインティング装置は前記複数の発光素子を含む被写界を撮像する撮像装置を含み、
前記位置特定ステップは前記撮像装置によって撮像された被写界像に基づいて前記ポインティング装置の指し示す位置を特定する、請求項1ないし11のいずれかに記載のゲームプログラム。
【請求項13】
ゲーム処理の進行に応じて更新されるゲーム画面を表示する表示装置、
前記表示装置によって表示されたゲーム画面内の任意の点を指し示すポインティング装置、
前記ポインティング装置に設けられる加速度センサ、
前記ポインティング装置によって指し示される点の位置を単位時間毎に特定する位置特定手段、
前記位置特定手段によって特定される位置の変化を検出する位置変化検出手段、
前記加速度センサによって検知される加速度に基づいて前記ポインティング装置の運動方向を判別する第1方向判別手段、および
前記位置変化検出手段によって位置変化が検出されたとき当該位置変化に基づいて前記ゲーム処理を実行し、前記位置変化検出手段によって位置変化が検出されないときには前記第1方向判別手段によって判別された運動方向に基づいて前記ゲーム処理を実行するゲーム処理手段を備える、ゲームシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate