(57)【要約】  【構成】ゲーム装置１２は複数のコントローラ３４、３６を含む。各コントローラ３４、３６にはその動きを検出するためにたとえば加速度センサが設けられる。各コントローラ３４、３６で検出された動作値の大きさが判別され、最も大きい動きを有効なものとしてゲーム処理が実行される。  【効果】複数のコントローラを動かしてその動きが最大の操作のみを有効にするといった新規な操作を行うことができる。【選択図】  図１
2008119345.tif 000002
【特許請求の範囲】
【請求項１】
動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置のコンピュータにおいて実行されるゲームプログラムであって、
前記各動き検出手段によって検出される動作値を取得する動作値取得ステップ、
前記動作値取得ステップによって取得された各動作値の大きさを判別する動作値判別ステップ、および
前記動作値判別ステップによってその値が最も大きいと判別された動作値を有効なものとして処理する動作処理ステップを前記コンピュータに実行させる、ゲームプログラム。
【請求項２】
前記動作値取得ステップは、前記各動き検出手段によって単位時間毎に検出される動作値を取得し、
前記動作値判別ステップは、前記動作値取得ステップによって取得された各動作値の単位時間における変化量をそれぞれ算出する変化量算出ステップを含み、前記各動作値として前記変化量算出ステップによって算出された各変化量の大きさを判別する、請求項１記載のゲームプログラム。
【請求項３】
前記動き検出手段は、複数の方向の動きをそれぞれ検出し、
前記動作値取得ステップは、前記各方向の動作値を取得し、
前記動作値判別ステップは、前記各操作装置ごとに前記各方向の動作値の大きさを判別して最も大きい動作値に対応する方向を当該操作装置の動き方向として特定する方向特定ステップを含み、前記方向特定ステップによって特定された前記各操作装置の方向にそれぞれ対応する前記各操作装置の動作値の大きさを判別する、請求項１または２記載のゲームプログラム。
【請求項４】
前記動作値判別ステップは、前記動作値取得ステップによって取得された各動作値のうち、少なくともいずれか１つの動作値を補正する補正ステップを含み、前記補正ステップによって補正された動作値を含めて前記各動作値の大きさの判別を行う、請求項１ないし３のいずれかに記載のゲームプログラム。
【請求項５】
前記複数の操作装置は、プレイヤの右手で操作されるための第１操作装置と、前記プレイヤの左手で操作されるための第２操作装置とを含む、請求項１ないし４のいずれかに記載のゲームプログラム。
【請求項６】
前記動き検出手段は、加速度センサである、請求項１ないし５のいずれかに記載のゲームプログラム。
【請求項７】
動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置であって、
前記各動き検出手段によって検出される動作値を取得する動作値取得手段、
前記動作値取得手段によって取得された各動作値の大きさを判別する動作値判別手段、および
前記動作値判別手段によってその値が最も大きいと判別された動作値を有効なものとして処理する動作処理手段を備える、ゲーム装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はゲームプログラムおよびゲーム装置に関し、特にたとえば複数の操作装置の動きを検出する、ゲームプログラムおよびゲーム装置に関する。
【背景技術】
【０００２】
操作装置の動きを取得して利用するゲームが知られている。たとえば、プレイヤが左右の手にグローブ（操作装置）をはめてプレイするゲーム装置が特許文献１および２に開示されている。
【０００３】
特許文献１に記載された技術では、コントローラとしての左右一対のグローブユニットに、当該各グローブの前後（Ｙ）、左右（Ｘ）および上下（Ｚ）方向の３軸の加速度を検出する加速度センサがそれぞれ設けられており、当該加速度センサの出力波形の解析によってパンチ種類が識別される。具体的には、パンチの打ち始めから打ち終わりまでの区間をＹ軸加速度の波形から検出し、当該区間のＸ軸加速度およびＺ軸加速度の波形からパンチ種類（ストレート、フック、およびアッパーパンチ）が判別され、パンチ種類に応じたゲーム処理が行われる。このとき、左右いずれの拳からのパンチかによって、対戦相手キャラクタが反対方向にふらつく演出表示が行われる。
【０００４】
また、特許文献２に記載された技術では、特許文献１と同様に、コントローラとしての左右一対のグローブ型ケースにそれぞれ三軸加速度センサが設けられており、ＸＹＺ各方向の加速度からパンチの種類が判定される。具体的には、Ｘ＞ＹかつＸ＞Ｚのときストレートパンチであると判定し、Ｚ＞ＸかつＺ＞Ｙのときアッパーパンチであると判定し、Ｘ＞ＺかつＹ＞Ｚのときフックパンチであると判定して、パンチの種類に応じたゲーム処理が行われる。
【特許文献１】特開２００２−１５３６７３号公報
【特許文献２】特開２００２−２００３３９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記特許文献に開示されたゲーム装置は、左右のグローブ（操作装置）の動きの大きさを判別して動きの大きい側のグローブの動作をゲームに反映させるものではなかった。すなわち、上記特許文献１に開示されたゲーム装置では、左右いずれの拳からのパンチかによってゲームの演出表示を異ならせているが、左右のパンチのいずれかを有効にするといった処理ではないので、両方のグローブから加速度が検出されたときは、両方の加速度を有効なものとしてゲームに反映させてしまうという問題があった。上記特許文献２に開示されたゲーム装置でも、両手の動作に対応する加速度信号に基づいてゲームを進行させるので、上記特許文献１と同様の問題があった。
【０００６】
それゆえに、この発明の主たる目的は、新規な、ゲームプログラムおよびゲーム装置を提供することである。
【０００７】
この発明の他の目的は、動きを検出する複数の操作装置を用いて新規な操作を行うことのできる、ゲームプログラムおよびゲーム装置を提供することである。
【０００８】
この発明の他の目的は、同時に動かされる複数の操作装置のうちその動きが最も大きい操作装置の動きをゲームに反映することのできる、ゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【０００９】
この発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、この発明の理解を助けるために後述する実施形態との対応関係を示したものであって、この発明を何ら限定するものではない。
【００１０】
第１の発明は、動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置のコンピュータにおいて実行されるゲームプログラムである。このゲームプログラムは、動作値取得ステップ、動作値判別ステップ、および動作処理ステップをコンピュータに実行させる。動作値取得ステップは、各動き検出手段によって検出される動作値を取得する。動作値判別ステップは、動作値取得ステップによって取得された各動作値の大きさを判別する。動作処理ステップは、動作値判別ステップによってその値が最も大きいと判別された動作値を有効なものとして処理する。
【００１１】
第１の発明では、ゲームプログラムは、複数の操作装置（１４、３４、３６）を含むゲーム装置（１２）のコンピュータ（４４）において実行される。各操作装置はその動きを検出する動き検出手段（８４、９０）を有しており、動作取得ステップ（Ｓ２１、Ｓ２７、Ｓ５１、Ｓ５７）によって、各動き検出手段によって検出される動作値が取得される。取得された動作値の大きさの判別が動作値判別ステップ（Ｓ２９、Ｓ３１、Ｓ６１、Ｓ６３、Ｓ８５、Ｓ９３、Ｓ１０１、Ｓ１０９）によって行われる。動作処理ステップ（Ｓ１３３、Ｓ１３７、Ｓ１４１、Ｓ１４５）では、最大の動作値が有効なものとして処理される。
【００１２】
第１の発明によれば、複数の操作装置で同時に動きが検出されたときであっても、動きのうち最も大きい動きを優先して、当該動きのみをゲームに反映することができる。また、複数の操作装置を動かして最も大きい動きの操作のみを有効にするといった新規な操作を行うことができる。
【００１３】
第２の発明は、動作値取得ステップは、各動き検出手段によって単位時間毎に検出される動作値を取得し、動作値判別ステップは、動作値取得ステップによって取得された各動作値の単位時間における変化量をそれぞれ算出する変化量算出ステップを含み、各動作値として変化量算出ステップによって算出された各変化量の大きさを判別する、第１の発明に従属するゲームプログラムである。
【００１４】
第２の発明では、動作値を判別する際に、変化量算出ステップ（Ｓ２７、Ｓ５７）によって各動作値の単位時間における変化量が算出され、各変化量の大きさが判別される。単位時間における変化量の大きさを比較するので、動きの検出精度を上げることができる。
【００１５】
第３の発明は、動き検出手段は、複数の方向の動きをそれぞれ検出し、動作値取得ステップは、各方向の動作値を取得し、動作値判別ステップは、各操作装置ごとに各方向の動作値の大きさを判別して最も大きい動作値に対応する方向を当該操作装置の動き方向として特定する方向特定ステップを含み、方向特定ステップによって特定された各操作装置の方向にそれぞれ対応する各操作装置の動作値の大きさを判別する、第１または第２の発明に従属するゲームプログラムである。
【００１６】
第３の発明では、各操作装置における複数の方向のそれぞれの動作値が取得される。動作値を判別する際に、方向特定ステップ（Ｓ３３、Ｓ３５、Ｓ６５、Ｓ６７）によって、各操作装置の各方向の動作値の大きさの判別によって最大の動作値に対応する方向が各操作装置の動き方向として特定される。各操作装置の特定された動き方向に対応する動作値の大きさを判別することによって、その動きが最も大きい操作の方向まで判別することができ、当該方向の動きを有効にして処理することができる。
【００１７】
第４の発明は、動作値判別ステップは、動作値取得ステップによって取得された各動作値のうち、少なくともいずれか１つの動作値を補正する補正ステップを含み、補正ステップによって補正された動作値を含めて各動作値の大きさの判別を行う、第１ないし第３のいずれかの発明に従属するゲームプログラムである。
【００１８】
第４の発明では、補正ステップ（Ｓ５９）による補正によって動作値の大きさを検出された値から変化させることができる。そして、補正された動作値を含めて各動作値の大きさが判別される。たとえば、特定の操作装置の動作値や特定方向の動作値などを補正することによって、特定の操作装置や特定方向の操作を有効にし易くしたり、有効にし難くしたりすることができる。特に複数のプレイヤで遊ぶ場合には、特定の操作装置のプレイヤにハンデを与えるといった遊び方を提供することができる。
【００１９】
第５の発明は、複数の操作装置は、プレイヤの右手で操作されるための第１操作装置と、プレイヤの左手で操作されるための第２操作装置とを含む、第１ないし第４のいずれかの発明に従属するゲームプログラムである。
【００２０】
第５の発明では、プレイヤは右手に第１操作装置を左手に第２操作装置をそれぞれ持って操作することができる。最大の動作値を示す操作のみが有効にされるので、両手を同時に動かして操作しても、一方の手の操作に応じてゲームが行われることとなり、両手を同時に操作することが不自然なゲームにおいてその不自然さを防止することができる。
【００２１】
第６の発明は、動き検出手段は、加速度センサである、第１ないし第５のいずれかの発明に従属するゲームプログラムである。
【００２２】
第６の発明では、各操作装置の動きを加速度によって検出することができる。最大の加速度値や最大の加速度変化量などを示す操作を有効にしてゲームを実行することができる。
【００２３】
第７の発明は、動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置である。このゲーム装置は、動作値取得手段、動作値判別手段、および動作処理手段を備える。動作値取得手段は、各動き検出手段によって検出される動作値を取得する。動作値判別手段は、動作値取得手段によって取得された各動作値の大きさを判別する。動作処理手段は、動作値判別手段によってその値が最も大きいと判別された動作値を有効なものとして処理する。
【００２４】
第７の発明は、上述の第１の発明のゲームプログラムと同様の効果を奏する。
【発明の効果】
【００２５】
この発明によれば、複数の操作装置の動きのうち最大の動きを有効にしてゲームに反映させることができる。また、複数の操作装置を同時に動かして、その動きが最も大きい操作のみを有効にするといった新規な操作を行うことができる。
【００２６】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【００２７】
図１を参照して、この発明の一実施例であるゲームシステム１０は、ゲーム装置１２およびコントローラ１４を含む。ゲーム装置１２は据置型ゲーム装置である。コントローラ１４は、ユーザないしプレイヤの入力装置ないし操作装置である。ゲーム装置１２とコントローラ１４とは無線によって接続される。
【００２８】
ゲーム装置１２は、略直方体のハウジング１６を含み、ハウジング１６の前面にはディスクスロット１８およびメモリカードスロットカバー２０が設けられる。ディスクスロット１８から、ゲームプログラムおよびデータを記憶した情報記憶媒体の一例である光ディスク２２（図２）が挿入されて、ハウジング１６内のディスクドライブ２４（図２）に装着される。メモリカードスロットカバー２０の内側にはメモリカードスロットが設けられており、外部メモリカード２６（図２）が挿入される。メモリカード２６は、光ディスク２２（図２）から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム１０を利用してプレイされたゲームのゲームデータ（結果データまたは途中データ）を保存（セーブ）しておいたりするために利用される。また、上記ゲームデータの保存は、外部メモリカード２６に代えて、たとえばフラッシュメモリ等の内部メモリに対して行うようにしてもよい。
【００２９】
ゲーム装置１２のハウジング１６の後面には、ＡＶケーブルコネクタ（図示せず）が設けられ、当該コネクタを用いて、ゲーム装置１２はＡＶケーブル２８を介してモニタ（ディスプレイ）３０に接続される。このモニタ３０は典型的にはカラーテレビジョン受像機であり、ＡＶケーブル２８は、ゲーム装置１２からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に入力する。したがって、カラーテレビ（モニタ）３０の画面上にたとえば３Ｄビデオゲームのゲーム画像が表示され、内蔵されるスピーカ３２からゲーム音楽や効果音などのステレオゲーム音声が出力される。
【００３０】
ゲーム装置１２の電源は、一般的なＡＣアダプタ（図示せず）によって与えられる。ＡＣアダプタは家庭用の標準的な壁ソケットに差し込まれ、家庭用電源を、ゲーム装置１２を駆動するのに適した低いＤＣ電圧信号に変換する。他の実施例では、電源としてバッテリが用いられてもよい。
【００３１】
コントローラ１４は、詳細は後述されるが、それぞれが片手で把持可能な第１コントローラ３４および第２コントローラ３６を含む。第２コントローラ３６の後端から延びるケーブル３８の先端にはコネクタ４０が設けられており、当該コネクタ４０は、第１コントローラ３４の後端面に設けられるコネクタ４２（図３、図５）に接続される。第２コントローラ３６の操作データないし入力データはケーブル３８を介して第１コントローラ３４に与えられる。第１コントローラ３４は、第１コントローラ３４自身の入力データと第２コントローラ３６の入力データとを含むコントローラデータをゲーム装置１２に送信する。
【００３２】
このゲームシステム１０において、ゲーム（または他のアプリケーション）をプレイするために、ユーザはまずゲーム装置１２の電源をオンし、次いで、ユーザはビデオゲーム（もしくは実行したいと思う他のアプリケーション）を記憶している適宜の光ディスク２２を選択し、その光ディスク２２をゲーム装置１２のディスクスロット１８からディスクドライブ２４にローディングする。これに応じて、ゲーム装置１２がその光ディスク２２に記憶されているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム装置１２に入力を与えるためにコントローラ１４を操作する。
【００３３】
図２はゲームシステム１０の電気的な構成を示すブロック図である。ゲーム装置１２はＣＰＵ４４を含む。このＣＰＵ４４はゲームプロセッサとして機能し、ゲーム装置１２の全体的な制御を担当するコンピュータである。ＣＰＵ４４には、バスを介してメモリコントローラ４６が接続される。メモリコントローラ４６は主として、ＣＰＵ４４の制御の下で、バスを介して接続されるメインメモリ４８の書込みや読出しを制御する。このメモリコントローラ４６にはＧＰＵ(Graphics Processing Unit) ５０が接続される。
【００３４】
ＧＰＵ５０は、描画手段の一部を形成し、たとえばシングルチップＡＳＩＣで構成され、メモリコントローラ４６を介してＣＰＵ４４からのグラフィクスコマンド(作画命令)を受け、そのコマンドに従って、ジオメトリユニット５２およびレンダリングユニット５４によって３Ｄのゲーム画像を生成する。つまり、ジオメトリユニット５２は、３次元座標系の各種オブジェクトの回転，移動，変形等の座標演算処理を行う。オブジェクトは、複数のポリゴン（ポリゴンとは少なくとも３つの頂点座標によって定義される多角形平面をいう。）で構成されている。レンダリングユニット５４は、各種オブジェクトの各ポリゴンにテクスチャ（模様画像）を貼り付ける処理などの画像生成処理を行う。したがって、ＧＰＵ５０によって、ゲーム画面上に表示すべき３Ｄの画像データが生成され、その画像データがフレームバッファ５６内に記憶される。
【００３５】
なお、ＧＰＵ５０が作画コマンドを実行するにあたって必要なデータ（プリミティブまたはポリゴンやテクスチャ等）は、ＧＰＵ５０がメモリコントローラ４６を介してメインメモリ４８から入手する。
【００３６】
フレームバッファ５６は、たとえばラスタスキャンモニタ３０の１フレーム分の画像データを描画（蓄積）しておくためのメモリであり、ＧＰＵ５０によって１フレーム毎に書き換えられる。具体的には、フレームバッファ５６は、１画素（ピクセル）毎に、画像の色情報を順序立てて記憶している。ここで、色情報は、Ｒ，Ｇ，Ｂ，Ａについてのデータであり、たとえば、８ビットのＲ（赤）データ、８ビットのＧ（緑）データ、８ビットのＢ（青）データおよび８ビットのＡ（アルファ）データである。なお、Ａデータは、マスク（マット画像）についてのデータである。後述のビデオＩ／Ｆ６６がメモリコントローラ４６を介してフレームバッファ５６のデータを読み出すことによって、モニタ３０の画面上にゲーム画像が表示される。
【００３７】
また、Ｚバッファ５８は、（フレームバッファ５６に対応する画素数×１画素当たりの奥行きデータのビット数）に相当する記憶容量を有し、フレームバッファ５６の各記憶位置に対応するドットの奥行き情報または奥行きデータ（Ｚ値）を記憶する。
【００３８】
なお、フレームバッファ５６およびＺバッファ５８は、ともにメインメモリ４８の一部を用いて構成されてもよく、また、これらはＧＰＵ５０の内部に設けられてもよい。
【００３９】
メモリコントローラ４６はまた、ＤＳＰ(Digital Signal Processor)６０を介して、オーディオ用のＲＡＭ（以下、「ＡＲＡＭ」という。）６２に接続される。したがって、メモリコントローラ４６は、メインメモリ４８だけでなく、サブメモリとしてのＡＲＡＭ６２の書込みおよび／または読出しを制御する。
【００４０】
ＤＳＰ６０は、サウンドプロセッサとして働き、メインメモリ４８に記憶されたサウンドデータを用いたり、ＡＲＡＭ６２に書き込まれている音波形（音色）データを用いたりして、ゲームに必要な音、音声或いは音楽に対応するオーディオデータを生成する。
【００４１】
メモリコントローラ４６は、バスを介してさらに各インタフェース（Ｉ／Ｆ）６４，６６，６８，７０および７２に接続される。コントローラＩ／Ｆ６４は、ゲーム装置１２にＢｌｕｅｔｏｏｔｈ通信ユニット７４を介して接続されるコントローラ１４のためのインタフェースである。具体的に言うと、Ｂｌｕｅｔｏｏｔｈ通信ユニット７４は、本体側通信装置であり、コントローラ１４側通信装置である無線モジュール７６（図５）から送信されるコントローラデータ（入力データ）を受信する。コントローラＩ／Ｆ６４は、Ｂｌｕｅｔｏｏｔｈ通信ユニット７４によって受信されたコントローラデータを、メモリコントローラ４６を通してＣＰＵ４４に与える。ビデオＩ／Ｆ６６は、フレームバッファ５６にアクセスし、ＧＰＵ５０によって生成された画像データを読み出して、画像信号または画像データ（ディジタルＲＧＢＡピクセル値）をＡＶケーブル２８（図１）を介してモニタ３０に与える。
【００４２】
外部メモリＩ／Ｆ６８は、ゲーム装置１２の前面から挿入される外部メモリカード２６をメモリコントローラ４６に連係させる。それによって、メモリコントローラ４６を介して、ＣＰＵ４４がこのメモリカード２６にデータを書き込み、またはメモリカード２６からデータを読み出すことができる。オーディオＩ／Ｆ７０は、メモリコントローラ４６を通してＤＳＰ６０から与えられるオーディオデータまたは光ディスク２２から読み出されたオーディオストリームを受け、それらに応じたオーディオ信号（音声信号）をモニタ３０のスピーカ３２に与える。
【００４３】
ディスクＩ／Ｆ７２は、ディスクドライブ２４をメモリコントローラ４６に接続し、したがって、ＣＰＵ４４がディスクドライブ２４を制御する。このディスクドライブ２４によって光ディスク２２から読み出されたプログラムおよびデータが、ＣＰＵ４４の制御の下でメインメモリ４８に書き込まれる。ＣＰＵ４４は、このプログラムに従ってゲームまたはアプリケーションのための処理を実行する。
【００４４】
図３には第１コントローラ３４の外観の一例が示される。図３（Ａ）は、第１コントローラ３４を上面後方から見た斜視図であり、図３（Ｂ）は、第１コントローラ３４を下面前方から見た斜視図である。
【００４５】
第１コントローラ３４は、たとえばプラスチック成型によって形成されたハウジング７８を有している。ハウジング７８は、その前後方向（図３に示すＺ軸方向）を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。一例として、ハウジング７８は人間の掌とほぼ同じ長さまたは幅を持つ大きさをしている。プレイヤは、第１コントローラ３４を用いて、それに設けられたボタンを押下することと、第１コントローラ３４自体の位置や向きを変えることとによって、ゲーム操作を行うことができる。
【００４６】
ハウジング７８には、複数の操作ボタンが設けられる。すなわち、ハウジング７８の上面には、十字キー８０ａ、Ｘボタン８０ｂ、Ｙボタン８０ｃ、Ａボタン８０ｄ、セレクトスイッチ８０ｅ、メニュースイッチ８０ｆ、およびスタートスイッチ８０ｇが設けられる。一方、ハウジング７８の下面には凹部が形成されており、当該凹部の後方側傾斜面にはＢボタン８０ｈが設けられる。これら各ボタン（スイッチ）８０ａ−８０ｈには、ゲーム装置１２が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。また、ハウジング７８の上面には、遠隔からゲーム装置１２本体の電源をオン／オフするための電源スイッチ８０ｉが設けられる。第１コントローラ３４に設けられる各ボタン（スイッチ）は、包括的に参照符号８０を用いて示されることもある。
【００４７】
また、ハウジング７８の後面には、上述のコネクタ４２が設けられている。コネクタ４２は、たとえば３２ピンのエッジコネクタであり、第１コントローラ３４に他の機器を接続するために利用される。この実施例では、コネクタ４２には第２コントローラ３６のコネクタ４０が接続される。また、ハウジング７８上面の後端側には複数のＬＥＤ８２が設けられ、この複数のＬＥＤ８２によって当該コントローラ１４のコントローラ番号（コントローラの識別番号）が示される。ゲーム装置１２には、たとえば最大４つのコントローラ１４が接続可能であり、ゲーム装置１２に複数のコントローラ１４が接続される場合には、各コントローラ１４には、たとえば接続順にコントローラ番号が付与される。各ＬＥＤ８２はコントローラ番号と対応付けられており、当該コントローラ番号に対応するＬＥＤ８２が点灯される。
【００４８】
また、第１コントローラ３４のハウジング７８内には加速度センサ８４（図５）が設けられている。加速度センサ８４としては、典型的には静電容量式の加速度センサが用いられ得る。加速度センサ８４は、当該加速度センサの検出部に加わっている加速度のうち、センシング軸ごとの直線成分の加速度や重力加速度を検出する。加速度センサ８４は、少なくとも２つの互いに直交する軸方向の加速度を検出する。たとえば、２軸または３軸の加速度センサの場合には、加速度センサの検出部に加わっている加速度を、各軸に沿った直線成分の加速度としてそれぞれ検出する。具体的には、この実施例では、３軸加速度センサが適用され、第１コントローラ３４の上下方向（図３に示すＹ軸方向）、左右方向（図３に示すＸ軸方向）および前後方向（図３に示すＺ軸方向）の３軸方向のそれぞれで加速度を検知する。この加速度センサ８４の各軸ごとに検出される加速度に所定の演算処理を施すことによって、第１コントローラ３４の傾きや回転を算出することが可能である。たとえば、加速度センサ８４が静止した状態においては、常に重力加速度が加わっており、この重力加速度に対する各軸の傾きに応じた加速度が各軸ごとに検出される。具体的には、加速度センサ８４が水平状態で静止している（すなわち、ＸおよびＺ軸方向が水平方向であり、かつ、Ｙ軸方向が鉛直方向である）ときには、加速度センサ８４のＹ軸に１Ｇの重力加速度が加わり、他の軸Ｘ，Ｚの重力加速度はほぼ０となる。次に、加速度センサ８４の姿勢が水平状態より傾くと、加速度センサ８４の各軸方向と重力方向との角度に応じて、重力加速度が加速度センサ８４の各軸に分散され、このとき、加速度センサ８４の各軸の加速度値が検出される。このような各軸ごとの加速度値に演算を加えることによって、重力方向に対する加速度センサ８４の姿勢を算出することができる。
【００４９】
なお、加速度センサ８４としては、ハウジング７８の形状または第１コントローラ３４の持たせ方の限定等に応じて、上下方向、左右方向および前後方向のうちいずれか２方向の加速度を検出する２軸加速度センサが用いられてもよい。場合によっては１軸加速度センサが用いられてもよい。
【００５０】
図４には第２コントローラ３６の外観の一例が示される。図４（Ａ）は、第２コントローラ３６を上面後方から見た斜視図であり、図４（Ｂ）は、第２コントローラ３６を下面前方から見た斜視図である。なお、図４では、第２コントローラ３６のケーブル３８は省略されている。
【００５１】
第２コントローラ３６は、たとえばプラスチック成型によって形成されたハウジング８６を有している。ハウジング８６は、平面視では、前後方向（図４のＺ軸方向）に略細長い楕円形状を有し、後端側の左右方向（図４のＸ軸方向）の幅が先端側のそれよりも狭くされている。また、ハウジング８６は、側面視では、全体として湾曲した形状を有しており、先端側の水平部分から後端側に向かって下がるように湾曲している。ハウジング８６は、第１コントローラ３４と同様に、全体として大人や子供の片手で把持可能な大きさであるが、長手方向（Ｚ軸方向）の長さは、第１コントローラ３４のハウジング７８よりもやや短くされている。この第２コントローラ３６でも、プレイヤは、ボタンやスティックを操作することと、コントローラ自体の位置や向きを変えることとによって、ゲーム操作を行うことができる。
【００５２】
ハウジング８６の上面の先端側には、アナログジョイスティック８８ａが設けられる。ハウジング８６の先端には、後方にやや傾斜する先端面が設けられており、この先端面には、上下方向（図４に示すＹ軸方向）に並べて、Ｚボタン８８ｂおよびＣボタン８８ｃが設けられる。アナログジョイスティック８８ａおよび各ボタン８８ｂ，８８ｃには、ゲーム装置１２が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。第２コントローラ３６に設けられるアナログジョイスティック８８ａおよび各ボタン８８ｂ，８８ｃは、包括的に参照符号８８を用いて示されることもある。
【００５３】
また、第２コントローラ３６のハウジング８６内には加速度センサ９０（図５）が設けられている。この加速度センサ９０としては、第１コントローラ３４の加速度センサ８４と同様の加速度センサが適用される。具体的には、この実施例では３軸加速度センサが適用され、第２コントローラ３６の上下方向（図４に示すＹ軸方向）、左右方向（図４に示すＸ軸方向）および前後方向（図４に示すＺ軸方向）の３軸方向のそれぞれで加速度を検知する。したがって、第１コントローラ３４の場合と同様に、検出された加速度に適宜な演算処理を施すことによって、第２コントローラ３６の傾きや回転、重力方向に対する加速度センサ９０の姿勢などを算出することができる。
【００５４】
なお、図３に示した第１コントローラ３４および図４に示した第２コントローラ３６の形状や、ボタン（スイッチまたはスティック等）の形状、数および設置位置等は単なる一例に過ぎず、他の形状、数および設置位置等に適宜変更され得る。
【００５５】
また、コントローラ１４の電源は、第１コントローラ３４内に取替可能に収容されるバッテリ（図示せず）によって与えられる。第２コントローラ３６には、コネクタ４２、コネクタ４０およびケーブル３８を介してこの電源が供給される。
【００５６】
図５には、第１コントローラ３４と第２コントローラ３６とが接続されたときのコントローラ１４の電気的構成の一例が示される。
【００５７】
第１コントローラ３４は、その内部に通信部９２を備え、通信部９２には、操作部８０、加速度センサ８４およびコネクタ４２が接続される。操作部８０は、上述の操作ボタンないし操作スイッチ８０ａ‐８０ｉを示す。操作部８０が操作されると、その操作信号が通信部９２に与えられる。
【００５８】
加速度センサ８４が検出した加速度を示すデータは、通信部９２へ出力される。加速度センサ８４は、たとえば最大２００フレーム／秒程度のサンプリング周期を有する。
【００５９】
コネクタ４２には、第２コントローラ３６から延びるケーブル３８のコネクタ４０が接続される。コネクタ４０には、第２コントローラ３６の操作部８８および加速度センサ９０が接続される。操作部８８は、上述のスティック８８ａおよび操作ボタン８８ｂ、８８ｃを示す。操作部８８が操作されると、その操作信号がケーブル３８、コネクタ４０およびコネクタ４２等を介して通信部９２に与えられる。また、加速度センサ９０も、加速度センサ８４と同様のサンプリング周期を有しており、検出された加速度を示すデータを通信部９２に与える。
【００６０】
通信部９２は、マイクロコンピュータ（マイコン）９４、メモリ９６、無線モジュール７６およびアンテナ９８を含む。マイコン９４は、処理の際にメモリ９６を記憶領域（作業領域やバッファ領域）として用いながら、無線モジュール７６を制御して、取得したデータをゲーム装置１２に送信したりゲーム装置１２からのデータを受信したりする。
【００６１】
操作部８０および加速度センサ８４ならびに操作部８８および加速度センサ９０からマイコン９４へ出力されたデータは、一時的にメモリ９６に格納される。通信部９２からゲーム装置１２のＢｌｕｅｔｏｏｔｈ通信ユニット７４への無線送信は所定の周期毎に行われる。なお、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、第１コントローラ３４からの送信はそれと同等かそれより短い周期で行うことが必要となる。マイコン９４は、ゲーム装置１２への送信タイミングが到来すると、メモリ９６に格納されている操作部８０および８８の操作データならびに加速度センサ８４および９０の加速度データを含むデータを、コントローラデータとして無線モジュール７６へ出力する。無線モジュール７６は、Ｂｌｕｅｔｏｏｔｈ（ブルートゥース）（登録商標）のような近距離無線通信技術を用いて、所定周波数の搬送波をコントローラデータで変調し、その微弱電波信号をアンテナ９８から放射する。つまり、コントローラデータは、無線モジュール７６で微弱電波信号に変調されて第１コントローラ３４から送信される。微弱電波信号はゲーム装置１２側のＢｌｕｅｔｏｏｔｈ通信ユニット７４で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置１２はコントローラデータを取得することができる。ゲーム装置１２のＣＰＵ４４は、コントローラ１４から取得したコントローラデータに基づいてゲーム処理を行う。なお、第１コントローラ３４とゲーム装置１２との無線通信は、無線ＬＡＮなど他の規格に従って実行されてもよい。
【００６２】
このゲームシステム１０では、プレイヤがコントローラ１４を動かすことによってゲームに対する操作または入力を行うことができる。ゲームをプレイする際には、たとえば図６に示すように、プレイヤは、その右手で第１コントローラ３４を持ち、その左手で第２コントローラ３６を持つ。上述のように、第１コントローラ３４には３軸方向の加速度を検出する加速度センサ８４が内蔵され、第２コントローラ３６にも同様の加速度センサ９０が内蔵されている。第１コントローラ３４および第２コントローラ３６がそれぞれプレイヤによって動かされると、加速度センサ８４および加速度センサ９０によって、それぞれのコントローラ自身の動きを示す加速度値が検出される。ゲーム装置１２では、当該検出された加速度値、すなわち、コントローラ３４および３６の動作値に応じてゲーム処理が実行される。また、別の表現を使えば、プレイヤは、コントローラ１４を適宜に動かすことによって、ゲーム装置１２に対して加速度を入力することができ、ゲーム装置１２では当該加速度入力に応じてゲーム処理が実行される。
【００６３】
この実施例では、第１コントローラ３４および第２コントローラ３６の動きによって、仮想ゲーム空間内のプレイヤキャラクタのアクションが制御される。図示は省略するが、プレイヤキャラクタは、その右手に剣をその左手に盾を持っている。プレイヤは、右手の第１コントローラ３４の横方向（Ｘ軸方向）の動きによって、右手の剣を左右に振る動作をプレイヤキャラクタに行わせることができ、縦方向（Ｙ軸方向）の動きによって、剣を縦に振る動作を行わせることができる。また、プレイヤは、左手の第２コントローラ３６の前後方向（Ｚ軸方向）の動きによって、左手の盾を前方に突き出す動作をプレイヤキャラクタに行わせることができる。さらに、プレイヤは、左手の第２コントローラ３６の横方向（Ｘ軸方向）の動きによって、特殊な剣技として、回転しながら右手の剣を振る動作（回転切り）をプレイヤキャラクタに行わせることができる。このように、この実施例の仮想ゲームでは、プレイヤは、第１コントローラ３４および第２コントローラ３６によって、別々の操作対象としての剣および盾をそれぞれ操作することができる。また、プレイヤは、同一の操作対象としての剣を、２つのコントローラ（第１コントローラ３４と第２コントローラ３６）によって操作することができる。
【００６４】
上述のようなプレイヤキャラクタの各動作は、攻撃動作であり、同時に実行されることが不可能な動作である。したがって、第１コントローラ３４および第２コントローラ３６を用いてそれぞれの所定の動きが同時に実行されたときには、プレイヤキャラクタにいずれの動作を実行させるかを決める必要がある。この実施例では、第１コントローラ３４および第２コントローラ３６で検出される動きの大きさを判別することによって、その動きを示す値が最も大きいと判別された動きを有効なものとして処理するようにした。これによって、第１コントローラ３４および第２コントローラ３６の動きのうち最も大きい動きに対応する動作をプレイヤキャラクタに行わせることができる。
【００６５】
なお、この実施例では、上述のように、第１コントローラ３４の動きが主にプレイヤキャラクタの右手に把持された剣の操作に対応付けられ、第２コントローラ３６の動きが主にプレイヤキャラクタの左手に把持された盾の操作に対応付けられるので、プレイヤが第１コントローラ３４を右手で把持し第２コントローラ３６を左手に把持することが前提となっている。しかし、他の実施例では、たとえば、プレイヤの利き手を考慮して各コントローラの持ち手を選択可能にして、第１コントローラ３４をプレイヤの利き手に把持させるとともに、第１コントローラ３４に対応付けられたプレイヤキャラクタの剣をプレイヤの利き手と同じ側の手に把持させるようにしてもよい。つまり、プレイヤが左利きの場合、第１コントローラ３４が左手で把持され、第２コントローラ３６が右手に把持される。
【００６６】
この実施例の仮想ゲームを実行する際のメモリマップの一例が図７に示される。メインメモリ４８はプログラム記憶領域１００およびデータ記憶領域１０２を含む。プログラムおよびデータの一部は、光ディスク２２から一度に全部または必要に応じて部分的にかつ順次的に読み出され、メインメモリ４８に記憶される。なお、図７にはメモリマップの一部のみが示されており、処理に必要な他のプログラムおよびデータも記憶される。
【００６７】
プログラム記憶領域１００において記憶領域１０４には、この実施例のゲームプログラムのメインルーチンを実行するためのゲームメイン処理プログラムが記憶されている。
【００６８】
記憶領域１０６には加速度取得プログラムが記憶されている。このプログラムによって、第１コントローラ３４および第２コントローラ３６で検出された加速度が取得される。上述のように、Ｂｌｕｅｔｏｏｔｈ通信ユニット７４を介してコントローラ１４からのコントローラデータが定期的に受信される。受信されたコントローラデータは、データ記憶領域１０２のコントローラデータバッファ１１８に記憶される。コントローラデータは、第１コントローラ３４の入力データおよび第２コントローラ３６の入力データを含み、したがって、コントローラデータは、第１コントローラ３４の加速度センサ８４で検出された加速度を示すデータおよび第２コントローラ３６の加速度センサ９０で検出された加速度を示すデータを含む。このプログラムによって、１フレームごとに、コントローラデータから各コントローラの加速度を取得する。なお、上述のように、加速度センサ８４および９０によって、各軸の加速度はゲーム装置１２の１フレーム（たとえば１／６０秒）よりも短いサンプリング周期（たとえば１／２００秒）で検出されるので、コントローラデータには各軸ごとに複数の加速度値が含まれている。したがって、平均値、最大値、最小値などのような適宜な値を抽出することによって、現フレームにおける各軸の加速度を取得する。取得された第１コントローラ３４の各軸加速度は、第１コントローラの加速度レジスタ１２０に記憶され、第２コントローラ３６の各軸加速度は、第２コントローラの加速度レジスタ１２２に記憶される。
【００６９】
記憶領域１０８には第１コントローラ加速度検出プログラムが記憶されている。このプログラムによって、第１コントローラ３４における有効な動きが検出される。この実施例では、第１コントローラ３４の動き方向が検出される。具体的には、第１コントローラ３４の加速度センサ８４で検出された各軸方向の加速度の大きさを判別して、最大値に対応する軸方向が第１コントローラ３４の動き方向として特定される。また、この実施例では、現フレームで取得された加速度によって判別を行うのではなく、前フレームと現フレームの間での各軸加速度の変化量を算出して、当該算出された各軸の変化量の大きさによって判別が行われる。単位時間（この実施例では１フレーム）における各軸の加速度変化量の大きさを比較することによって、静止状態においても検出される重力加速度の影響を受けずに動きの検出精度を高めることができる。特定された動き方向は第１コントローラ３４における有効な操作として認定され、当該動き方向を示す情報が第１コントローラ有効方向フラグに設定される。
【００７０】
記憶領域１１０には第２コントローラ加速度検出プログラムが記憶されている。このプログラムによって、第２コントローラ３６における有効な動きが検出され、この実施例では、第２コントローラ３６の動き方向が検出される。具体的には、上述の第１コントローラ３４の動き方向の検出と同様の処理を実行し、つまり、各軸の加速度変化量の大きさを判別して、最大の変化量に対応する軸方向が第２コントローラ３６の動き方向として特定される。特定された動き方向は第２コントローラ３６における有効な操作として認識され、当該動き方向を示す情報が第２コントローラ有効フラグに設定される。
【００７１】
記憶領域１１２には加速度補正プログラムが記憶される。このプログラムによって、第１コントローラ３４および第２コントローラ３６のそれぞれの動き方向を検出する際に比較される各軸の加速度変化量が補正される。必ずしも全ての加速度変化量を補正しなくてよく、必要に応じて少なくとも１つの軸方向の加速度変化量が補正されればよい。補正は、たとえば算出された加速度変化量に定数を掛けることによって行われ、加速度変化量の大きさを増減させる。したがって、特定の軸方向または特定のコントローラの動作値に対してこの補正を行うことによって、特定の軸方向の動きや特定のコントローラの動きを有効にし易くしたり、逆に有効にし難くしたりすることができる。たとえば、この実施例では、第２コントローラ３６のＸ軸方向の加速度変化量のみが補正されるように定められており、この第２コントローラ３６のＸ軸方向の動きが他の動きよりも優先され易くなっている。上述のように、第２コントローラ３６のＸ軸方向の動きは、プレイヤキャラクタの特殊攻撃である回転切り動作に対応付けられており、したがって、この実施例の仮想ゲームでは、特殊攻撃が発動され易くなっている。
【００７２】
記憶領域１１４には優先判定プログラムが記憶されている。このプログラムによって、複数のコントローラで検出される動きのうちのいずれを優先するかが判定される。具体的には、各動きの大きさが判別され、最大値を示す動きが有効な動きとして特定される。この実施例では、上述の第１コントローラ加速度検出プログラムおよび第２コントローラ加速度検出プログラムによって、第１コントローラ３４および第２コントローラ３６の動き方向をそれぞれ検出するようにしているので、第１コントローラ３４の動き方向に対応する加速度変化量および第２コントローラ３６の動き方向に対応する加速度変化量の大きさが判別され、大きい方の動きが有効なものとして特定される。特定された動きが複数のコントローラ３４、３６の動きのうちの有効な操作として認定され、当該動きを示す情報が有効動作フラグに設定される。
【００７３】
記憶領域１１６には有効動作実行プログラムが記憶される。このプログラムによって、有効な操作として特定された動きが処理される。この実施例では、有効な動きに基づくゲーム処理が実行され、当該動きに対応付けられた上述のようなアクションをプレイヤキャラクタに実行させる。
【００７４】
データ記憶領域１０２の記憶領域１１８は、コントローラデータバッファであり、受信されたコントローラデータが記憶される。上述の加速度取得プログラムはコントローラデータから現フレームにおける加速度を取得する。
【００７５】
記憶領域１２０は、第１コントローラ３４の加速度レジスタであり、現フレームで取得されたＸ軸加速度値を記憶する現Ｘ加速度レジスタ、現フレームで取得されたＹ軸加速度値を記憶する現Ｙ加速度レジスタ、前フレームで取得されたＸ軸加速度値を記憶する前Ｘ加速度レジスタ、前フレームで取得されたＹ軸加速度値を記憶する前Ｙ加速度レジスタを含む。なお、この実施例では、第１コントローラ３４のＺ軸加速度はプレイヤキャラクタの動作に対応付けられていないので、記憶領域１２０に登録されない。
【００７６】
記憶領域１２２は、第２コントローラ３６の加速度レジスタであり、現フレームで取得されたＸ軸加速度値を記憶する現Ｘ加速度レジスタ、現フレームで取得されたＺ軸加速度値を記憶する現Ｚ加速度レジスタ、前フレームで取得されたＸ軸加速度値を記憶する前Ｘ加速度レジスタ、前フレームで取得されたＺ軸加速度値を記憶する前Ｚ加速度レジスタを含む。なお、この実施例では、第２コントローラ３６のＹ軸加速度はプレイヤキャラクタの動作に対応付けられていないので、記憶領域１２２に登録されない。
【００７７】
記憶領域１２４には第１コントローラ３４の加速度変化量が記憶される。この実施例では、Ｘ軸加速度の変化量を示す第１Ｘ変化量、およびＹ軸加速度の変化量を示す第１Ｙ変化量が記憶される。加速度変化量は、第１コントローラの加速度レジスタ１２０の現フレームと前フレームの加速度値の差をとることによって算出される。
【００７８】
記憶領域１２６には第２コントローラ３６の加速度変化量が記憶される。この実施例では、Ｘ軸加速度の変化量を示す第２Ｘ変化量、およびＺ軸加速度の変化量を示す第２Ｚ変化量が記憶される。加速度変化量は、第２コントローラの加速度レジスタ１２２の現フレームと前フレームの加速度値の差をとることによって算出される。
【００７９】
なお、記憶領域１２４および記憶領域１２６には、加速度補正プログラムによる補正が行われたときは、補正された値が記憶される。
【００８０】
記憶領域１２８には第１コントローラ有効方向フラグが記憶される。このフラグは第１コントローラ３４の有効な動きの方向を示す。この実施例では、有効な動き方向がＸ軸方向の場合、１が記憶され、Ｙ軸方向の場合、２が記憶される。
【００８１】
記憶領域１３０には第２コントローラ有効方向フラグが記憶される。このフラグは第２コントローラ３６の有効な動きの方向を示す。この実施例では、有効な動き方向がＸ軸方向の場合、１が記憶され、Ｚ軸方向の場合、３が記憶される。
【００８２】
記憶領域１３２には有効動作フラグが記憶される。このフラグは第１コントローラ３４および第２コントローラ３６の動き方向のうちの有効な動き方向を示す。この実施例では、有効な動き方向が第１コントローラ３４のＸおよびＹ軸方向の場合、それぞれ１および２が記憶され、第２コントローラ３６のＸおよびＺ軸方向の場合、それぞれ３および４が記憶される。
【００８３】
図８にはゲーム装置１２のＣＰＵ４４のゲーム動作の一例が示される。図８のステップＳ１からＳ９の処理は単位時間（１フレーム）ごとに実行される。処理を開始すると、ステップＳ１で、ＣＰＵ４４は第１コントローラ加速度検出処理を実行し、これによって、第１コントローラ３４の有効な動きが検出される。第１コントローラ加速度検出処理の詳細は図９に示される。
【００８４】
図９のステップＳ２１で、ＣＰＵ４４は、記憶領域１１８に記憶されている第１コントローラ３４の入力データから、現フレームにおけるＸ軸加速度およびＹ軸加速度を取得する。次に、ステップＳ２３で、ＣＰＵ４４は、取得したＸ軸加速度およびＹ軸加速度をそれぞれ第１コントローラの加速度レジスタ１２０の現Ｘ加速度レジスタおよび現Ｙ加速度レジスタに書き込む。
【００８５】
続いて、ステップＳ２５で、ＣＰＵ４４は第１コントローラの加速度レジスタ１２０の前Ｘ加速度レジスタおよび前Ｙ加速度レジスタにデータが記憶されているか否かを判断する。ステップＳ２５で“ＮＯ”の場合、処理はステップＳ３７に進む。
【００８６】
一方、ステップＳ２５で“ＹＥＳ”の場合、ＣＰＵ４４は、ステップＳ２７で第１コントローラの加速度レジスタ１２０を参照してＸおよびＹ軸それぞれの加速度変化量を算出する。Ｘ軸加速度の変化量を示す第１Ｘ変化量は現Ｘ加速度から前Ｘ加速度を減算することによって算出されて記憶領域１２４に記憶される。また、Ｙ軸加速度の変化量を示す第１Ｙ変化量は現Ｙ加速度から前Ｙ加速度を減算することよって算出されて記憶領域１２４に記憶される。
【００８７】
続くステップＳ２９からＳ３５で、加速度変化量の大きさを判別して、最大値に対応する方向を第１コントローラ３４の動き方向として特定する。具体的には、ステップＳ２９では、ＣＰＵ４４は第１Ｘ変化量と第１Ｙ変化量とが０に等しいか否かを判断する。ステップＳ２９で“ＹＥＳ”の場合、つまり、Ｘ軸方向とＹ軸方向ともに加速度に変化がない場合には、第１コントローラ３４を用いた新たな動きが開始されていないとみなせるので、処理はそのままステップＳ３７へ進む。
【００８８】
ステップＳ２９で“ＮＯ”の場合には、ＣＰＵ４４は、ステップＳ３１で第１Ｘ変化量が第１Ｙ変化量以上であるか否かを判断する。ステップＳ３１で“ＹＥＳ”の場合、つまり、第１Ｘ変化量が最大であると判別される場合、Ｘ軸方向が第１コントローラ３４の動き方向として特定される。ＣＰＵ４４は、ステップＳ３３で、第１コントローラ有効方向フラグに１を設定する。つまり、ＣＰＵ４４は記憶領域１２８にＸ軸方向を示す値「１」を記憶する。
【００８９】
一方、ステップＳ３１で“ＮＯ”の場合、つまり、第１Ｙ変化量が最大であると判別される場合には、Ｙ軸方向が第１コントローラ３４の動き方向として特定される。ＣＰＵ４４は、ステップＳ３５で、第１コントローラ有効方向フラグに２を設定する。つまり、ＣＰＵ４４は記憶領域１２８にＹ軸方向を示す値「２」を記憶する。
【００９０】
続いて、ステップＳ３７では、ＣＰＵ４４は、次フレームでの変化量算出のために、第１コントローラの加速度レジスタ１２０の現Ｘ加速度レジスタおよび現Ｙ加速度レジスタの値をそれぞれ前Ｘ加速度レジスタおよび前Ｙ加速度レジスタに書き込む。この第１コントローラ加速度検出処理を終了すると、処理は図８のステップＳ３に戻る。
【００９１】
図８のステップＳ３では、ＣＰＵ４４は第２コントローラ加速度検出処理を実行し、これによって、第２コントローラ３６の有効な動きが検出される。第２コントローラ加速度検出処理の詳細は図１０に示される。
【００９２】
図１０のステップＳ５１で、ＣＰＵ４４は、記憶領域１１８に記憶されている第２コントローラの入力データから現フレームにおけるＸ軸加速度およびＺ軸加速度を取得する。次に、ステップＳ５３で、ＣＰＵ４４は、取得したＸ軸加速度およびＺ軸加速度をそれぞれ第２コントローラの加速度レジスタ１２２の現Ｘ加速度レジスタおよび現Ｚ加速度レジスタに書き込む。
【００９３】
続いて、ステップＳ５５で、ＣＰＵ４４は第２コントローラの加速度レジスタ１２２の前Ｘ加速度レジスタおよび前Ｚ加速度レジスタにデータが記憶されているか否かを判断する。ステップＳ５５で“ＮＯ”の場合、処理はステップＳ６９に進む。
【００９４】
一方、ステップＳ５５で“ＹＥＳ”の場合、ＣＰＵ４４は、ステップＳ５７で第２コントローラの加速度レジスタ１２２を参照してＸおよびＺ軸それぞれの加速度変化量を算出する。Ｘ軸加速度の変化量を示す第２Ｘ変化量は現Ｘ加速度から前Ｘ加速度を減算することによって算出されて記憶領域１２６に記憶される。また、Ｚ軸加速度の変化量を示す第２Ｚ変化量は現Ｚ加速度から前Ｚ加速度を減算することよって算出されて記憶領域１２６に記憶される。
【００９５】
さらに、ステップＳ５９で、ＣＰＵ４４は第２Ｘ変化量を補正する。たとえば、記憶領域１２６に記憶された第２Ｘ変化量に定数（たとえば１．４）を掛けることによって補正値を算出し、当該補正値を記憶領域１２６に第２Ｘ変化量として記憶する。このように、この実施例では、第２コントローラ３６のＸ軸方向の動きが有効にされ易いように定められており、したがって、第２コントローラのＸ軸方向の動きに対応付けられたゲーム処理（プレイヤキャラクタの回転切り動作）が発動され易くなっている。
【００９６】
続くステップＳ６１からＳ６７で、ＣＰＵ４４は、加速度変化量の大きさを判別して、最大値に対応する方向を第２コントローラ３４の動き方向として特定する。具体的には、ステップＳ６１では、ＣＰＵ４４は第２Ｘ変化量と第２Ｚ変化量とが０に等しいか否かを判断する。ステップＳ６１で“ＹＥＳ”の場合、つまり、Ｘ軸方向とＺ軸方向ともに加速度に変化がない場合には、第２コントローラ３６を用いた新たな動きが開始されていないとみなせるので、処理はそのままステップＳ６９へ進む。
【００９７】
ステップＳ６１で“ＮＯ”の場合には、ＣＰＵ４４は、ステップＳ６３で第２Ｘ変化量が第２Ｚ変化量以上であるか否かを判断する。ステップＳ６３で“ＹＥＳ”の場合、つまり、第２Ｘ変化量が最大であると判別される場合、Ｘ軸方向が第２コントローラ３６の動き方向として特定される。ＣＰＵ４４は、ステップＳ６５で、第２コントローラ有効方向フラグに１を設定する。つまり、ＣＰＵ４４は記憶領域１３０にＸ軸方向を示す値「１」を記憶する。
【００９８】
一方、ステップＳ６３で“ＮＯ”の場合、つまり、第２Ｚ変化量が最大であると判別される場合には、Ｚ軸方向が第２コントローラ３６の動き方向として特定される。ＣＰＵ４４は、ステップＳ６７で、第２コントローラ有効方向フラグに３を設定する。つまり、ＣＰＵ４４は記憶領域１３０にＺ軸方向を示す値「３」を記憶する。
【００９９】
続いて、ステップＳ６９では、ＣＰＵ４４は、次フレームでの変化量算出のために、第２コントローラの加速度レジスタ１２２の現Ｘ加速度レジスタおよび現Ｚ加速度レジスタの値をそれぞれ前Ｘ加速度レジスタおよび前Ｚ加速度レジスタに書き込む。この第２コントローラ加速度検出処理を終了すると、処理は図８のステップＳ５に戻る。
【０１００】
図８のステップＳ５では、ＣＰＵ４４は優先判定処理を実行し、これによって、第１コントローラ３４および第２コントローラ３６のいずれの動きを有効とするかを判定する。優先判定処理の詳細は図１１および図１２に示される。
【０１０１】
図１１のステップＳ８１で、ＣＰＵ４４は、記憶領域１２８を参照して第１コントローラ有効方向フラグに１が設定されているか否かを判断する。ステップＳ８１で“ＹＥＳ”の場合、つまり、第１コントローラ３４の動き方向がＸ軸方向である場合、ＣＰＵ４４は、ステップＳ８３で記憶領域１３０を参照して第２コントローラ有効フラグに１が設定されているか否かを判断する。ステップＳ８３で“ＹＥＳ”の場合、つまり、第２コントローラ３６の動き方向がＸ軸方向である場合には、ＣＰＵ４４は、ステップＳ８５で、記憶領域１２４および１２６を参照して、第１Ｘ変化量が第２Ｘ変化量以上であるか否かを判断する。ステップＳ８５で“ＹＥＳ”の場合、つまり、第１Ｘ変化量が最大であると判別される場合には、第１コントローラ３４のＸ軸方向の動きが有効であると決定され、ＣＰＵ４４は、ステップＳ８７で有効動作フラグに１を設定する。つまり、ＣＰＵ４４は、記憶領域１３２に第１コントローラ３４のＸ軸方向の動きを示す値「１」を記憶する。一方、ステップＳ８５で“ＮＯ”の場合、つまり、第２Ｘ変化量が最大であると判別される場合には、第２コントローラ３６のＸ軸方向の動きが有効であると決定され、ＣＰＵ４４は、ステップＳ８９で有効動作フラグに３を設定する。つまり、ＣＰＵ４４は、記憶領域１３２に第２コントローラ３６のＸ軸方向の動きを示す値「３」を記憶する。
【０１０２】
一方、ステップＳ８３で“ＮＯ”の場合、ＣＰＵ４４はステップＳ９１で第２コントローラ有効方向フラグに３が設定されているか否かを判断する。ステップＳ９１で“ＹＥＳ”の場合、つまり、第２コントローラ３６の動き方向がＺ軸方向である場合には、ＣＰＵ４４は、ステップＳ９３で第１Ｘ変化量が第２Ｚ変化量以上であるか否かを判断する。ステップＳ９３で“ＮＯ”の場合、つまり、第２Ｚ変化量が最大であると判別される場合には、第２コントローラ３６のＺ軸方向の動きが有効であると決定され、ＣＰＵ４４は、ステップＳ９５で有効動作フラグに４を設定する。つまり、ＣＰＵ４４は、記憶領域１３２に第２コントローラ３６のＺ軸方向の動きを示す値「４」を記憶する。
【０１０３】
また、ステップＳ９３で“ＹＥＳ”の場合、つまり、第１Ｘ変化量が最大であると判別される場合、処理は上述のステップＳ８７に進む。また、ステップＳ９１で“ＮＯ”の場合、つまり、第２コントローラ３６で有効な動き方向が特定されていない（動作が行われていない）場合にも、第１Ｘ変化量が最大であると判別されるので、処理は上述のステップＳ８７に進む。ステップＳ８７、Ｓ８９またはＳ９５を終了すると、この優先判定処理が終了され、処理は図８のステップＳ７に戻る。
【０１０４】
また、ステップＳ８１で“ＮＯ”の場合には、図１２のステップＳ９７で、ＣＰＵ４４は第１コントローラ有効フラグに２が設定されているか否かを判断する。ステップＳ９７で“ＹＥＳ”の場合、つまり、第１コントローラ３４の動き方向がＹ軸方向である場合には、ＣＰＵ４４は、ステップＳ９９で第２コントローラ有効フラグに１が設定されているか否かを判断する。ステップＳ９９で“ＹＥＳ”の場合、つまり、第２コントローラ３６の動き方向がＸ軸方向である場合には、ＣＰＵ４４は、ステップＳ１０１で第１Ｙ変化量が第２Ｘ変化量以上であるか否かを判断する。ステップＳ１０１で“ＹＥＳ”の場合、つまり、第１Ｙ変化量が最大であると判別される場合には、第１コントローラ３４のＹ軸方向の動きが有効であると決定され、ＣＰＵ４４は、ステップＳ１０３で有効動作フラグに２を設定する。つまり、ＣＰＵ４４は記憶領域１３２に第１コントローラ３４のＹ軸方向の動きを示す値「２」を記憶する。一方、ステップＳ１０１で“ＮＯ”の場合、つまり、第２Ｘ変化量が最大であると判別される場合には、第２コントローラ３６のＸ軸方向の動きが有効であると決定され、ＣＰＵ４４はステップＳ１０５で有効動作フラグに３を設定する。
【０１０５】
一方、ステップＳ９９で“ＮＯ”の場合には、ＣＰＵ４４は、ステップＳ１０７で第２コントローラ有効方向フラグに３が設定されているか否かを判断する。ステップＳ１０７で“ＹＥＳ”の場合、つまり、第２コントローラ３６の動き方向がＺ軸方向である場合には、ＣＰＵ４４は、ステップＳ１０９で第１Ｙ変化量が第２Ｚ変化量以上であるか否かを判断する。ステップＳ１０９で“ＮＯ”の場合、つまり、第２Ｚ変化量が最大であると判別される場合には、第２コントローラ３６のＺ軸方向の動きが有効であると決定され、ＣＰＵ４４はステップＳ１１１で有効動作フラグに４を設定する。
【０１０６】
また、ステップＳ１０９で“ＹＥＳ”の場合、つまり、第１Ｙ変化量が最大であると判別される場合、処理は上述のステップＳ１０３に進む。また、ステップＳ１０７で“ＮＯ”の場合、つまり、第２コントローラ３６で有効な動き方向が特定されていない場合にも、第１Ｙ変化量が最大であると判別されるので、処理は上述のステップＳ１０３に進む。ステップＳ１０３、Ｓ１０５またはＳ１１１を終了すると、この優先判定処理が終了され、処理は図８のステップＳ７に戻る。
【０１０７】
一方、ステップＳ９７で“ＮＯ”の場合、つまり、第１コントローラ３４の有効な動き方向が特定されていない場合には、ＣＰＵ４４は、ステップＳ１１３で第２コントローラ有効方向フラグに１が設定されているか否かを判断する。ステップＳ１１３で“ＹＥＳ”の場合には、第２コントローラ３６の動き方向としてのＸ軸方向に対応する動きが最大であると判別されるので、第２コントローラ３６のＸ軸方向の動きが有効な動きとして決定される。ＣＰＵ４４は、ステップＳ１１５で有効動作フラグに３を設定する。
【０１０８】
また、ステップＳ１１３で“ＮＯ”の場合には、ＣＰＵ４４はステップＳ１１７で第２コントローラ有効方向フラグに３が設定されているか否かを判断する。ステップＳ１１７で“ＹＥＳ”の場合には、第２コントローラ３６の動き方向としてのＺ軸方向に対応する動きが最大であると判別されるので、第２コントローラ３６のＺ軸方向の動きが有効な動きとして決定される。ＣＰＵ４４は、ステップＳ１１９で有効動作フラグに４を設定する。ステップＳ１１５またはステップＳ１１９を終了すると、この優先判定処理が終了され、処理は図８のステップＳ７に戻る。
【０１０９】
また、ステップＳ１１７で“ＮＯ”の場合、つまり、第２コントローラ３６でも有効な動き方向が特定されていない場合には、全コントローラでの有効な動きを決定することができないので、有効動作フラグが設定されずにこの優先判定処理が終了される。
【０１１０】
図８のステップＳ７では、ＣＰＵ４４は有効動作処理を実行し、これによって、有効な動きに応じたゲーム処理が実行される。有効動作処理の詳細は図１３に示される。
【０１１１】
図１３のステップＳ１３１で、ＣＰＵ４４は記憶領域１３２を参照して有効動作フラグに１が設定されているか否かを判断する。ステップＳ１３１で“ＹＥＳ”の場合、つまり、第１コントローラ３４のＸ軸方向の動きが有効である場合には、ＣＰＵ４４は、ステップＳ１３３で第１Ｘ変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが剣を左右に振る動作を行う画像が生成されてモニタ３４に表示される。
【０１１２】
ステップＳ１３１で“ＮＯ”の場合、ＣＰＵ４４はステップＳ１３５で有効動作フラグに２が設定されているか否かを判断する。ステップＳ１３５で“ＹＥＳ”の場合、つまり、第１コントローラ３４のＹ軸方向の動きが有効である場合には、ＣＰＵ４４は、ステップＳ１３７で第１Ｙ変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが剣を縦に振る動作を行う画像が生成されてモニタ３４に表示される。
【０１１３】
ステップＳ１３５で“ＮＯ”の場合、ＣＰＵ４４は、ステップＳ１３９で有効動作フラグに３が設定されているか否かを判断する。ステップＳ１３９で“ＹＥＳ”の場合、つまり、第２コントローラ３６のＸ軸方向の動きが有効である場合には、ＣＰＵ４４は、ステップＳ１４１で第２Ｘ変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが回転しながら剣を振り回す動作を行う画像が生成されてモニタ３４に表示される。
【０１１４】
ステップＳ１３９で“ＮＯ”の場合、ＣＰＵ４４は、ステップＳ１４３で有効動作フラグに４が設定されているか否かを判断する。ステップＳ１４３で“ＹＥＳ”の場合、つまり、第２コントローラ３６のＺ軸方向の動きが有効である場合には、ＣＰＵ４４は、ステップＳ１４５で第２Ｚ変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが盾を前方に突き出す動作（盾アタック）を行う画像が生成されてモニタ３４に表示される。
【０１１５】
ステップＳ１３３、Ｓ１３７、Ｓ１４１またはＳ１４５を終了し、あるいはステップＳ１４３で“ＮＯ”の場合には、ＣＰＵ４４は、ステップＳ１４７で第１コントローラ有効方向フラグおよび第２コントローラ有効方向フラグをリセットする。さらに、ステップＳ１４９で、ＣＰＵ４４は有効動作フラグをリセットする。この有効動作処理が終了されると、処理は図８のステップＳ９へ戻る。
【０１１６】
図８のステップＳ９では、ＣＰＵ４４はゲーム終了であるか否かを判断する。たとえば、ゲームクリア条件またはゲームオーバ条件が満足されたか否かが判断される。ステップＳ９で“ＮＯ”の場合、ゲームを続行すべく、処理はステップＳ１に戻る。一方、“ＹＥＳ”の場合にはゲームを終了する。
【０１１７】
この実施例によれば、複数のコントローラ３４、３６の動きのうち最も大きい動きを有効なものとして処理するようにしたので、動きが最も大きいコントローラ３４、３６の動きをゲームに反映することができる。また、動きを検出する複数のコントローラ３４、３６を動かして、その動きが最も大きいものの操作のみを有効にするといった新規な操作を行うことができる。上述の剣と盾で戦うゲームの場合には、たとえば、プレイヤは右手の第１コントローラ３４を動かして剣を左右や縦に振ることによって敵キャラクタへの攻撃を続けながら、所望のタイミングで左手の第２コントローラ３６を強くあるいは大きく動かすことによって、回転切りを発動させたり盾を突き出したりすることができる。このように、各コントローラ３４、３６の動きを一つ一つ区切るような操作を行う必要がなく、各コントローラ３４、３６を連続的に動かしながらゲームをプレイすることができる。
【０１１８】
また、多軸加速度センサを用いて複数の方向の動きを検出するので、各コントローラ３４、３６において複数の方向の動作値を比較することによって最も大きい動作値に対応する方向を当該コントローラ３４、３６の動き方向として特定することができる。さらに他のコントローラ３４、３６の動作値と比較することによって、複数のコントローラ３４、３６のうち最も大きい操作の方向も判別することができる。
【０１１９】
また、プレイヤの右手で操作される第１コントローラ３４と左手で操作される第２コントローラ３６の最も大きい動きのみが有効にされるので、両手を同時に動かして操作しても、一方の手の操作に応じてゲームが行われることとなり、したがって、両手を同時に操作することが不自然なゲームにおいて、不自然さを防止することができる。上述のプレイヤキャラクタが剣と盾を持って戦うようなゲームでは、剣で切る動作と盾を突き出す動作とが同時に実行されるような事態を防止できる。また、たとえばボクシングゲームでは、両手で同時にパンチが打たれるような不自然な動作を防止できる。特に、ボクシングゲーム等では一方の手でパンチを繰り出そうとすると、勢いをつけるために他方の手は助走をつけるような動作を無意識にしてしまうことが多いので、両方のコントローラ３４、３６から加速度が検出されることが多くなってしまうが、このような場合にも最も大きい動きのみを有効にすることによって実際のパンチの動作のみを有効にしてゲームに反映させることができる。
【０１２０】
なお、上述の実施例では、コントローラ３４、３６の動きとして各軸方向の加速度変化量を算出して、各変化量の大きさを判別するようにしていた。しかし、他の実施例では、単純に或る時刻において検出される各軸方向の加速度値の大きさを判別するようにしてもよい。
【０１２１】
また、上述の各実施例のゲームシステム１０では、１人のプレイヤが２つのコントローラ３４および３６を用いてプレイするゲームが実行された。しかし、他の実施例では、複数のプレイヤがそれぞれコントローラ１４を用いてプレイするマルチプレイヤゲームが実行されてもよい。なお、各プレイヤの使用するコントローラ１４は、第１コントローラ３４のみであってもよいし、上述の実施例と同様に第１コントローラ３４と第２コントローラ３６の両方であってもよい。この実施例でも、各プレイヤのコントローラ１４で検出される動きの大きさを判別して、最も大きい値の動きを検出したコントローラ１４の動きを有効なものとして処理する。したがって、たとえばコントローラ１４を誰が一番速く振ることができるかを競うような新規なゲームを提案することができる。また、プレイヤの選択やレベル設定等に応じて特定のプレイヤのコントローラ１４の動作値に対して補正を行うことによって、特定プレイヤにハンデを与えるといった遊び方を提供することができる。
【０１２２】
また、上述の各実施例では、コントローラ３４、３６の動作値を検出するための装置として加速度センサ８４、９０が使用された。しかし、他の実施例では、加速度センサ８４、９０に代えて、コントローラにジャイロセンサを設けることによって、当該コントローラの動作値を検出するようにしてもよい。なお、上述のように、加速度センサは、加速運動や重力加速度の影響を受けて、各センシング軸方向の直線成分の加速度を軸毎に検出する。しかし、加速度センサは、当該加速度センサの軸心周りに回転させても、重力加速度以外の各軸ごとの加速度は検出することができない。一方、ジャイロセンサは、加速度センサとは異なり、その中の１つまたは複数のジャイロスコープ素子によって規定される軸周りの回転（または角速度）を直接検出することができる。しかしながら、ジャイロセンサは、回転を伴わない直線的な加速を検出することができない。したがって、加速度センサとジャイロセンサとの間の上述のような相違のために、加速度センサをジャイロセンサに単に置換しただけでは、同一の機能を実現することができないので、この実施例では、ジャイロセンサの出力信号に適宜な処理を施すように変更される必要がある。たとえば、ジャイロセンサによって或る状態からの姿勢の傾きを算出する場合には、まずジャイロセンサの検出開始の状態において傾きの値を初期化する。そして、この時点からの当該ジャイロセンサから出力される角速度データを積分する。さらに、上記初期化された傾きの値からの傾きの変化量を算出することによって、初期化時点の姿勢に対する角度を求めることができる。つまり、或る時点を基準とする相対的な角度を求めることができる。この算出された角度をコントローラの動きとみなし、当該角度の大きさを判別することによって、最も大きい角度に対応する方向あるいはコントローラの動きを有効なものとして特定することができる。なお、ジャイロセンサを搭載したデバイスの重力方向を基準とする姿勢が必要な場合には、当該デバイスを重力方向を基準とした状態（例えば水平に保った状態）で初期化する必要がある。一方、加速度センサを搭載したデバイスの場合には、加速度センサが重力方向を基準とするため初期化の必要がないというメリットを有する。
【図面の簡単な説明】
【０１２３】
【図１】この発明の一実施例のゲームシステムの概要を示す外観図である。
【図２】ゲームシステムの電気的構成の一例を示すブロック図である。
【図３】第１コントローラの外観の一例を示す図解図であり、図３（Ａ）は後方上側から見た斜視図であり、図３（Ｂ）は前方下側から見た斜視図である。
【図４】第２コントローラの外観の一例を示す図解図であり、図４（Ａ）は後方上側から見た斜視図であり、図４（Ｂ）は前方下側から見た斜視図である。
【図５】コントローラの電気的構成の一例を示すブロック図である。
【図６】プレイヤの右手および左手でそれぞれ把持された第１コントローラおよび第２コントローラを示す図解図である。
【図７】メモリマップの一例を示す図解図である。
【図８】ゲーム装置のＣＰＵのゲーム動作の一例を示すフロー図である。
【図９】図８の第１コントローラ加速度検出処理の動作の一例を示すフロー図である。
【図１０】図８の第２コントローラ加速度検出処理の動作の一例を示すフロー図である。
【図１１】図８の優先判定処理の動作の一例の一部を示すフロー図である。
【図１２】図１１の続きを示すフロー図である。
【図１３】図８の有効動作処理の動作の一例の一部を示すフロー図である。
【符号の説明】
【０１２４】
１０  …ゲームシステム
１２  …ゲーム装置
１４  …コントローラ
２２  …光ディスク
３０  …モニタ
３４  …第１コントローラ
３６  …第２コントローラ
４４  …ＣＰＵ
４８  …メインメモリ
５０  …ＧＰＵ
８４，９０  …加速度センサ
【図１】
2008119345.tif 000003
【図２】
2008119345.tif 000004
【図３】
2008119345.tif 000005
【図４】
2008119345.tif 000006
【図５】
2008119345.tif 000007
【図６】
2008119345.tif 000008
【図７】
2008119345.tif 000009
【図８】
2008119345.tif 000010
【図９】
2008119345.tif 000011
【図１０】
2008119345.tif 000012
【図１１】
2008119345.tif 000013
【図１２】
2008119345.tif 000014
【図１３】
2008119345.tif 000015