説明

ゲームプログラムおよびゲーム装置

【構成】ゲーム装置12は複数のコントローラ34、36を含む。各コントローラ34、36にはその動きを検出するためにたとえば加速度センサが設けられる。各コントローラ34、36で検出された動作値の大きさが判別され、最も大きい動きを有効なものとしてゲーム処理が実行される。
【効果】複数のコントローラを動かしてその動きが最大の操作のみを有効にするといった新規な操作を行うことができる。

【発明の詳細な説明】
【技術分野】
【0001】
この発明はゲームプログラムおよびゲーム装置に関し、特にたとえば複数の操作装置の動きを検出する、ゲームプログラムおよびゲーム装置に関する。
【背景技術】
【0002】
操作装置の動きを取得して利用するゲームが知られている。たとえば、プレイヤが左右の手にグローブ(操作装置)をはめてプレイするゲーム装置が特許文献1および2に開示されている。
【0003】
特許文献1に記載された技術では、コントローラとしての左右一対のグローブユニットに、当該各グローブの前後(Y)、左右(X)および上下(Z)方向の3軸の加速度を検出する加速度センサがそれぞれ設けられており、当該加速度センサの出力波形の解析によってパンチ種類が識別される。具体的には、パンチの打ち始めから打ち終わりまでの区間をY軸加速度の波形から検出し、当該区間のX軸加速度およびZ軸加速度の波形からパンチ種類(ストレート、フック、およびアッパーパンチ)が判別され、パンチ種類に応じたゲーム処理が行われる。このとき、左右いずれの拳からのパンチかによって、対戦相手キャラクタが反対方向にふらつく演出表示が行われる。
【0004】
また、特許文献2に記載された技術では、特許文献1と同様に、コントローラとしての左右一対のグローブ型ケースにそれぞれ三軸加速度センサが設けられており、XYZ各方向の加速度からパンチの種類が判定される。具体的には、X>YかつX>Zのときストレートパンチであると判定し、Z>XかつZ>Yのときアッパーパンチであると判定し、X>ZかつY>Zのときフックパンチであると判定して、パンチの種類に応じたゲーム処理が行われる。
【特許文献1】特開2002−153673号公報
【特許文献2】特開2002−200339号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかしながら、上記特許文献に開示されたゲーム装置は、左右のグローブ(操作装置)の動きの大きさを判別して動きの大きい側のグローブの動作をゲームに反映させるものではなかった。すなわち、上記特許文献1に開示されたゲーム装置では、左右いずれの拳からのパンチかによってゲームの演出表示を異ならせているが、左右のパンチのいずれかを有効にするといった処理ではないので、両方のグローブから加速度が検出されたときは、両方の加速度を有効なものとしてゲームに反映させてしまうという問題があった。上記特許文献2に開示されたゲーム装置でも、両手の動作に対応する加速度信号に基づいてゲームを進行させるので、上記特許文献1と同様の問題があった。
【0006】
それゆえに、この発明の主たる目的は、新規な、ゲームプログラムおよびゲーム装置を提供することである。
【0007】
この発明の他の目的は、動きを検出する複数の操作装置を用いて新規な操作を行うことのできる、ゲームプログラムおよびゲーム装置を提供することである。
【0008】
この発明の他の目的は、同時に動かされる複数の操作装置のうちその動きが最も大きい操作装置の動きをゲームに反映することのできる、ゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【0009】
この発明は、上記の課題を解決するために、以下の構成を採用した。なお、括弧内の参照符号および補足説明等は、この発明の理解を助けるために後述する実施形態との対応関係を示したものであって、この発明を何ら限定するものではない。
【0010】
第1の発明は、動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置のコンピュータにおいて実行されるゲームプログラムである。このゲームプログラムは、動作値取得ステップ、動作値判別ステップ、および動作処理ステップをコンピュータに実行させる。動作値取得ステップは、各動き検出手段によって検出される動作値を取得する。動作値判別ステップは、動作値取得ステップによって取得された各動作値の大きさを判別する。動作処理ステップは、動作値判別ステップによってその値が最も大きいと判別された動作値を有効なものとして処理する。
【0011】
第1の発明では、ゲームプログラムは、複数の操作装置(14、34、36)を含むゲーム装置(12)のコンピュータ(44)において実行される。各操作装置はその動きを検出する動き検出手段(84、90)を有しており、動作取得ステップ(S21、S27、S51、S57)によって、各動き検出手段によって検出される動作値が取得される。取得された動作値の大きさの判別が動作値判別ステップ(S29、S31、S61、S63、S85、S93、S101、S109)によって行われる。動作処理ステップ(S133、S137、S141、S145)では、最大の動作値が有効なものとして処理される。
【0012】
第1の発明によれば、複数の操作装置で同時に動きが検出されたときであっても、動きのうち最も大きい動きを優先して、当該動きのみをゲームに反映することができる。また、複数の操作装置を動かして最も大きい動きの操作のみを有効にするといった新規な操作を行うことができる。
【0013】
第2の発明は、動作値取得ステップは、各動き検出手段によって単位時間毎に検出される動作値を取得し、動作値判別ステップは、動作値取得ステップによって取得された各動作値の単位時間における変化量をそれぞれ算出する変化量算出ステップを含み、各動作値として変化量算出ステップによって算出された各変化量の大きさを判別する、第1の発明に従属するゲームプログラムである。
【0014】
第2の発明では、動作値を判別する際に、変化量算出ステップ(S27、S57)によって各動作値の単位時間における変化量が算出され、各変化量の大きさが判別される。単位時間における変化量の大きさを比較するので、動きの検出精度を上げることができる。
【0015】
第3の発明は、動き検出手段は、複数の方向の動きをそれぞれ検出し、動作値取得ステップは、各方向の動作値を取得し、動作値判別ステップは、各操作装置ごとに各方向の動作値の大きさを判別して最も大きい動作値に対応する方向を当該操作装置の動き方向として特定する方向特定ステップを含み、方向特定ステップによって特定された各操作装置の方向にそれぞれ対応する各操作装置の動作値の大きさを判別する、第1または第2の発明に従属するゲームプログラムである。
【0016】
第3の発明では、各操作装置における複数の方向のそれぞれの動作値が取得される。動作値を判別する際に、方向特定ステップ(S33、S35、S65、S67)によって、各操作装置の各方向の動作値の大きさの判別によって最大の動作値に対応する方向が各操作装置の動き方向として特定される。各操作装置の特定された動き方向に対応する動作値の大きさを判別することによって、その動きが最も大きい操作の方向まで判別することができ、当該方向の動きを有効にして処理することができる。
【0017】
第4の発明は、動作値判別ステップは、動作値取得ステップによって取得された各動作値のうち、少なくともいずれか1つの動作値を補正する補正ステップを含み、補正ステップによって補正された動作値を含めて各動作値の大きさの判別を行う、第1ないし第3のいずれかの発明に従属するゲームプログラムである。
【0018】
第4の発明では、補正ステップ(S59)による補正によって動作値の大きさを検出された値から変化させることができる。そして、補正された動作値を含めて各動作値の大きさが判別される。たとえば、特定の操作装置の動作値や特定方向の動作値などを補正することによって、特定の操作装置や特定方向の操作を有効にし易くしたり、有効にし難くしたりすることができる。特に複数のプレイヤで遊ぶ場合には、特定の操作装置のプレイヤにハンデを与えるといった遊び方を提供することができる。
【0019】
第5の発明は、複数の操作装置は、プレイヤの右手で操作されるための第1操作装置と、プレイヤの左手で操作されるための第2操作装置とを含む、第1ないし第4のいずれかの発明に従属するゲームプログラムである。
【0020】
第5の発明では、プレイヤは右手に第1操作装置を左手に第2操作装置をそれぞれ持って操作することができる。最大の動作値を示す操作のみが有効にされるので、両手を同時に動かして操作しても、一方の手の操作に応じてゲームが行われることとなり、両手を同時に操作することが不自然なゲームにおいてその不自然さを防止することができる。
【0021】
第6の発明は、動き検出手段は、加速度センサである、第1ないし第5のいずれかの発明に従属するゲームプログラムである。
【0022】
第6の発明では、各操作装置の動きを加速度によって検出することができる。最大の加速度値や最大の加速度変化量などを示す操作を有効にしてゲームを実行することができる。
【0023】
第7の発明は、動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置である。このゲーム装置は、動作値取得手段、動作値判別手段、および動作処理手段を備える。動作値取得手段は、各動き検出手段によって検出される動作値を取得する。動作値判別手段は、動作値取得手段によって取得された各動作値の大きさを判別する。動作処理手段は、動作値判別手段によってその値が最も大きいと判別された動作値を有効なものとして処理する。
【0024】
第7の発明は、上述の第1の発明のゲームプログラムと同様の効果を奏する。
【発明の効果】
【0025】
この発明によれば、複数の操作装置の動きのうち最大の動きを有効にしてゲームに反映させることができる。また、複数の操作装置を同時に動かして、その動きが最も大きい操作のみを有効にするといった新規な操作を行うことができる。
【0026】
この発明の上述の目的,その他の目的,特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【発明を実施するための最良の形態】
【0027】
図1を参照して、この発明の一実施例であるゲームシステム10は、ゲーム装置12およびコントローラ14を含む。ゲーム装置12は据置型ゲーム装置である。コントローラ14は、ユーザないしプレイヤの入力装置ないし操作装置である。ゲーム装置12とコントローラ14とは無線によって接続される。
【0028】
ゲーム装置12は、略直方体のハウジング16を含み、ハウジング16の前面にはディスクスロット18およびメモリカードスロットカバー20が設けられる。ディスクスロット18から、ゲームプログラムおよびデータを記憶した情報記憶媒体の一例である光ディスク22(図2)が挿入されて、ハウジング16内のディスクドライブ24(図2)に装着される。メモリカードスロットカバー20の内側にはメモリカードスロットが設けられており、外部メモリカード26(図2)が挿入される。メモリカード26は、光ディスク22(図2)から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム10を利用してプレイされたゲームのゲームデータ(結果データまたは途中データ)を保存(セーブ)しておいたりするために利用される。また、上記ゲームデータの保存は、外部メモリカード26に代えて、たとえばフラッシュメモリ等の内部メモリに対して行うようにしてもよい。
【0029】
ゲーム装置12のハウジング16の後面には、AVケーブルコネクタ(図示せず)が設けられ、当該コネクタを用いて、ゲーム装置12はAVケーブル28を介してモニタ(ディスプレイ)30に接続される。このモニタ30は典型的にはカラーテレビジョン受像機であり、AVケーブル28は、ゲーム装置12からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に入力する。したがって、カラーテレビ(モニタ)30の画面上にたとえば3Dビデオゲームのゲーム画像が表示され、内蔵されるスピーカ32からゲーム音楽や効果音などのステレオゲーム音声が出力される。
【0030】
ゲーム装置12の電源は、一般的なACアダプタ(図示せず)によって与えられる。ACアダプタは家庭用の標準的な壁ソケットに差し込まれ、家庭用電源を、ゲーム装置12を駆動するのに適した低いDC電圧信号に変換する。他の実施例では、電源としてバッテリが用いられてもよい。
【0031】
コントローラ14は、詳細は後述されるが、それぞれが片手で把持可能な第1コントローラ34および第2コントローラ36を含む。第2コントローラ36の後端から延びるケーブル38の先端にはコネクタ40が設けられており、当該コネクタ40は、第1コントローラ34の後端面に設けられるコネクタ42(図3、図5)に接続される。第2コントローラ36の操作データないし入力データはケーブル38を介して第1コントローラ34に与えられる。第1コントローラ34は、第1コントローラ34自身の入力データと第2コントローラ36の入力データとを含むコントローラデータをゲーム装置12に送信する。
【0032】
このゲームシステム10において、ゲーム(または他のアプリケーション)をプレイするために、ユーザはまずゲーム装置12の電源をオンし、次いで、ユーザはビデオゲーム(もしくは実行したいと思う他のアプリケーション)を記憶している適宜の光ディスク22を選択し、その光ディスク22をゲーム装置12のディスクスロット18からディスクドライブ24にローディングする。これに応じて、ゲーム装置12がその光ディスク22に記憶されているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム装置12に入力を与えるためにコントローラ14を操作する。
【0033】
図2はゲームシステム10の電気的な構成を示すブロック図である。ゲーム装置12はCPU44を含む。このCPU44はゲームプロセッサとして機能し、ゲーム装置12の全体的な制御を担当するコンピュータである。CPU44には、バスを介してメモリコントローラ46が接続される。メモリコントローラ46は主として、CPU44の制御の下で、バスを介して接続されるメインメモリ48の書込みや読出しを制御する。このメモリコントローラ46にはGPU(Graphics Processing Unit) 50が接続される。
【0034】
GPU50は、描画手段の一部を形成し、たとえばシングルチップASICで構成され、メモリコントローラ46を介してCPU44からのグラフィクスコマンド(作画命令)を受け、そのコマンドに従って、ジオメトリユニット52およびレンダリングユニット54によって3Dのゲーム画像を生成する。つまり、ジオメトリユニット52は、3次元座標系の各種オブジェクトの回転,移動,変形等の座標演算処理を行う。オブジェクトは、複数のポリゴン(ポリゴンとは少なくとも3つの頂点座標によって定義される多角形平面をいう。)で構成されている。レンダリングユニット54は、各種オブジェクトの各ポリゴンにテクスチャ(模様画像)を貼り付ける処理などの画像生成処理を行う。したがって、GPU50によって、ゲーム画面上に表示すべき3Dの画像データが生成され、その画像データがフレームバッファ56内に記憶される。
【0035】
なお、GPU50が作画コマンドを実行するにあたって必要なデータ(プリミティブまたはポリゴンやテクスチャ等)は、GPU50がメモリコントローラ46を介してメインメモリ48から入手する。
【0036】
フレームバッファ56は、たとえばラスタスキャンモニタ30の1フレーム分の画像データを描画(蓄積)しておくためのメモリであり、GPU50によって1フレーム毎に書き換えられる。具体的には、フレームバッファ56は、1画素(ピクセル)毎に、画像の色情報を順序立てて記憶している。ここで、色情報は、R,G,B,Aについてのデータであり、たとえば、8ビットのR(赤)データ、8ビットのG(緑)データ、8ビットのB(青)データおよび8ビットのA(アルファ)データである。なお、Aデータは、マスク(マット画像)についてのデータである。後述のビデオI/F66がメモリコントローラ46を介してフレームバッファ56のデータを読み出すことによって、モニタ30の画面上にゲーム画像が表示される。
【0037】
また、Zバッファ58は、(フレームバッファ56に対応する画素数×1画素当たりの奥行きデータのビット数)に相当する記憶容量を有し、フレームバッファ56の各記憶位置に対応するドットの奥行き情報または奥行きデータ(Z値)を記憶する。
【0038】
なお、フレームバッファ56およびZバッファ58は、ともにメインメモリ48の一部を用いて構成されてもよく、また、これらはGPU50の内部に設けられてもよい。
【0039】
メモリコントローラ46はまた、DSP(Digital Signal Processor)60を介して、オーディオ用のRAM(以下、「ARAM」という。)62に接続される。したがって、メモリコントローラ46は、メインメモリ48だけでなく、サブメモリとしてのARAM62の書込みおよび/または読出しを制御する。
【0040】
DSP60は、サウンドプロセッサとして働き、メインメモリ48に記憶されたサウンドデータを用いたり、ARAM62に書き込まれている音波形(音色)データを用いたりして、ゲームに必要な音、音声或いは音楽に対応するオーディオデータを生成する。
【0041】
メモリコントローラ46は、バスを介してさらに各インタフェース(I/F)64,66,68,70および72に接続される。コントローラI/F64は、ゲーム装置12にBluetooth通信ユニット74を介して接続されるコントローラ14のためのインタフェースである。具体的に言うと、Bluetooth通信ユニット74は、本体側通信装置であり、コントローラ14側通信装置である無線モジュール76(図5)から送信されるコントローラデータ(入力データ)を受信する。コントローラI/F64は、Bluetooth通信ユニット74によって受信されたコントローラデータを、メモリコントローラ46を通してCPU44に与える。ビデオI/F66は、フレームバッファ56にアクセスし、GPU50によって生成された画像データを読み出して、画像信号または画像データ(ディジタルRGBAピクセル値)をAVケーブル28(図1)を介してモニタ30に与える。
【0042】
外部メモリI/F68は、ゲーム装置12の前面から挿入される外部メモリカード26をメモリコントローラ46に連係させる。それによって、メモリコントローラ46を介して、CPU44がこのメモリカード26にデータを書き込み、またはメモリカード26からデータを読み出すことができる。オーディオI/F70は、メモリコントローラ46を通してDSP60から与えられるオーディオデータまたは光ディスク22から読み出されたオーディオストリームを受け、それらに応じたオーディオ信号(音声信号)をモニタ30のスピーカ32に与える。
【0043】
ディスクI/F72は、ディスクドライブ24をメモリコントローラ46に接続し、したがって、CPU44がディスクドライブ24を制御する。このディスクドライブ24によって光ディスク22から読み出されたプログラムおよびデータが、CPU44の制御の下でメインメモリ48に書き込まれる。CPU44は、このプログラムに従ってゲームまたはアプリケーションのための処理を実行する。
【0044】
図3には第1コントローラ34の外観の一例が示される。図3(A)は、第1コントローラ34を上面後方から見た斜視図であり、図3(B)は、第1コントローラ34を下面前方から見た斜視図である。
【0045】
第1コントローラ34は、たとえばプラスチック成型によって形成されたハウジング78を有している。ハウジング78は、その前後方向(図3に示すZ軸方向)を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。一例として、ハウジング78は人間の掌とほぼ同じ長さまたは幅を持つ大きさをしている。プレイヤは、第1コントローラ34を用いて、それに設けられたボタンを押下することと、第1コントローラ34自体の位置や向きを変えることとによって、ゲーム操作を行うことができる。
【0046】
ハウジング78には、複数の操作ボタンが設けられる。すなわち、ハウジング78の上面には、十字キー80a、Xボタン80b、Yボタン80c、Aボタン80d、セレクトスイッチ80e、メニュースイッチ80f、およびスタートスイッチ80gが設けられる。一方、ハウジング78の下面には凹部が形成されており、当該凹部の後方側傾斜面にはBボタン80hが設けられる。これら各ボタン(スイッチ)80a−80hには、ゲーム装置12が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。また、ハウジング78の上面には、遠隔からゲーム装置12本体の電源をオン/オフするための電源スイッチ80iが設けられる。第1コントローラ34に設けられる各ボタン(スイッチ)は、包括的に参照符号80を用いて示されることもある。
【0047】
また、ハウジング78の後面には、上述のコネクタ42が設けられている。コネクタ42は、たとえば32ピンのエッジコネクタであり、第1コントローラ34に他の機器を接続するために利用される。この実施例では、コネクタ42には第2コントローラ36のコネクタ40が接続される。また、ハウジング78上面の後端側には複数のLED82が設けられ、この複数のLED82によって当該コントローラ14のコントローラ番号(コントローラの識別番号)が示される。ゲーム装置12には、たとえば最大4つのコントローラ14が接続可能であり、ゲーム装置12に複数のコントローラ14が接続される場合には、各コントローラ14には、たとえば接続順にコントローラ番号が付与される。各LED82はコントローラ番号と対応付けられており、当該コントローラ番号に対応するLED82が点灯される。
【0048】
また、第1コントローラ34のハウジング78内には加速度センサ84(図5)が設けられている。加速度センサ84としては、典型的には静電容量式の加速度センサが用いられ得る。加速度センサ84は、当該加速度センサの検出部に加わっている加速度のうち、センシング軸ごとの直線成分の加速度や重力加速度を検出する。加速度センサ84は、少なくとも2つの互いに直交する軸方向の加速度を検出する。たとえば、2軸または3軸の加速度センサの場合には、加速度センサの検出部に加わっている加速度を、各軸に沿った直線成分の加速度としてそれぞれ検出する。具体的には、この実施例では、3軸加速度センサが適用され、第1コントローラ34の上下方向(図3に示すY軸方向)、左右方向(図3に示すX軸方向)および前後方向(図3に示すZ軸方向)の3軸方向のそれぞれで加速度を検知する。この加速度センサ84の各軸ごとに検出される加速度に所定の演算処理を施すことによって、第1コントローラ34の傾きや回転を算出することが可能である。たとえば、加速度センサ84が静止した状態においては、常に重力加速度が加わっており、この重力加速度に対する各軸の傾きに応じた加速度が各軸ごとに検出される。具体的には、加速度センサ84が水平状態で静止している(すなわち、XおよびZ軸方向が水平方向であり、かつ、Y軸方向が鉛直方向である)ときには、加速度センサ84のY軸に1Gの重力加速度が加わり、他の軸X,Zの重力加速度はほぼ0となる。次に、加速度センサ84の姿勢が水平状態より傾くと、加速度センサ84の各軸方向と重力方向との角度に応じて、重力加速度が加速度センサ84の各軸に分散され、このとき、加速度センサ84の各軸の加速度値が検出される。このような各軸ごとの加速度値に演算を加えることによって、重力方向に対する加速度センサ84の姿勢を算出することができる。
【0049】
なお、加速度センサ84としては、ハウジング78の形状または第1コントローラ34の持たせ方の限定等に応じて、上下方向、左右方向および前後方向のうちいずれか2方向の加速度を検出する2軸加速度センサが用いられてもよい。場合によっては1軸加速度センサが用いられてもよい。
【0050】
図4には第2コントローラ36の外観の一例が示される。図4(A)は、第2コントローラ36を上面後方から見た斜視図であり、図4(B)は、第2コントローラ36を下面前方から見た斜視図である。なお、図4では、第2コントローラ36のケーブル38は省略されている。
【0051】
第2コントローラ36は、たとえばプラスチック成型によって形成されたハウジング86を有している。ハウジング86は、平面視では、前後方向(図4のZ軸方向)に略細長い楕円形状を有し、後端側の左右方向(図4のX軸方向)の幅が先端側のそれよりも狭くされている。また、ハウジング86は、側面視では、全体として湾曲した形状を有しており、先端側の水平部分から後端側に向かって下がるように湾曲している。ハウジング86は、第1コントローラ34と同様に、全体として大人や子供の片手で把持可能な大きさであるが、長手方向(Z軸方向)の長さは、第1コントローラ34のハウジング78よりもやや短くされている。この第2コントローラ36でも、プレイヤは、ボタンやスティックを操作することと、コントローラ自体の位置や向きを変えることとによって、ゲーム操作を行うことができる。
【0052】
ハウジング86の上面の先端側には、アナログジョイスティック88aが設けられる。ハウジング86の先端には、後方にやや傾斜する先端面が設けられており、この先端面には、上下方向(図4に示すY軸方向)に並べて、Zボタン88bおよびCボタン88cが設けられる。アナログジョイスティック88aおよび各ボタン88b,88cには、ゲーム装置12が実行するゲームプログラムに応じてそれぞれ適宜な機能が割り当てられる。第2コントローラ36に設けられるアナログジョイスティック88aおよび各ボタン88b,88cは、包括的に参照符号88を用いて示されることもある。
【0053】
また、第2コントローラ36のハウジング86内には加速度センサ90(図5)が設けられている。この加速度センサ90としては、第1コントローラ34の加速度センサ84と同様の加速度センサが適用される。具体的には、この実施例では3軸加速度センサが適用され、第2コントローラ36の上下方向(図4に示すY軸方向)、左右方向(図4に示すX軸方向)および前後方向(図4に示すZ軸方向)の3軸方向のそれぞれで加速度を検知する。したがって、第1コントローラ34の場合と同様に、検出された加速度に適宜な演算処理を施すことによって、第2コントローラ36の傾きや回転、重力方向に対する加速度センサ90の姿勢などを算出することができる。
【0054】
なお、図3に示した第1コントローラ34および図4に示した第2コントローラ36の形状や、ボタン(スイッチまたはスティック等)の形状、数および設置位置等は単なる一例に過ぎず、他の形状、数および設置位置等に適宜変更され得る。
【0055】
また、コントローラ14の電源は、第1コントローラ34内に取替可能に収容されるバッテリ(図示せず)によって与えられる。第2コントローラ36には、コネクタ42、コネクタ40およびケーブル38を介してこの電源が供給される。
【0056】
図5には、第1コントローラ34と第2コントローラ36とが接続されたときのコントローラ14の電気的構成の一例が示される。
【0057】
第1コントローラ34は、その内部に通信部92を備え、通信部92には、操作部80、加速度センサ84およびコネクタ42が接続される。操作部80は、上述の操作ボタンないし操作スイッチ80a‐80iを示す。操作部80が操作されると、その操作信号が通信部92に与えられる。
【0058】
加速度センサ84が検出した加速度を示すデータは、通信部92へ出力される。加速度センサ84は、たとえば最大200フレーム/秒程度のサンプリング周期を有する。
【0059】
コネクタ42には、第2コントローラ36から延びるケーブル38のコネクタ40が接続される。コネクタ40には、第2コントローラ36の操作部88および加速度センサ90が接続される。操作部88は、上述のスティック88aおよび操作ボタン88b、88cを示す。操作部88が操作されると、その操作信号がケーブル38、コネクタ40およびコネクタ42等を介して通信部92に与えられる。また、加速度センサ90も、加速度センサ84と同様のサンプリング周期を有しており、検出された加速度を示すデータを通信部92に与える。
【0060】
通信部92は、マイクロコンピュータ(マイコン)94、メモリ96、無線モジュール76およびアンテナ98を含む。マイコン94は、処理の際にメモリ96を記憶領域(作業領域やバッファ領域)として用いながら、無線モジュール76を制御して、取得したデータをゲーム装置12に送信したりゲーム装置12からのデータを受信したりする。
【0061】
操作部80および加速度センサ84ならびに操作部88および加速度センサ90からマイコン94へ出力されたデータは、一時的にメモリ96に格納される。通信部92からゲーム装置12のBluetooth通信ユニット74への無線送信は所定の周期毎に行われる。なお、ゲームの処理は1/60秒を単位として行われることが一般的であるので、第1コントローラ34からの送信はそれと同等かそれより短い周期で行うことが必要となる。マイコン94は、ゲーム装置12への送信タイミングが到来すると、メモリ96に格納されている操作部80および88の操作データならびに加速度センサ84および90の加速度データを含むデータを、コントローラデータとして無線モジュール76へ出力する。無線モジュール76は、Bluetooth(ブルートゥース)(登録商標)のような近距離無線通信技術を用いて、所定周波数の搬送波をコントローラデータで変調し、その微弱電波信号をアンテナ98から放射する。つまり、コントローラデータは、無線モジュール76で微弱電波信号に変調されて第1コントローラ34から送信される。微弱電波信号はゲーム装置12側のBluetooth通信ユニット74で受信される。受信された微弱電波信号について復調や復号を行うことによって、ゲーム装置12はコントローラデータを取得することができる。ゲーム装置12のCPU44は、コントローラ14から取得したコントローラデータに基づいてゲーム処理を行う。なお、第1コントローラ34とゲーム装置12との無線通信は、無線LANなど他の規格に従って実行されてもよい。
【0062】
このゲームシステム10では、プレイヤがコントローラ14を動かすことによってゲームに対する操作または入力を行うことができる。ゲームをプレイする際には、たとえば図6に示すように、プレイヤは、その右手で第1コントローラ34を持ち、その左手で第2コントローラ36を持つ。上述のように、第1コントローラ34には3軸方向の加速度を検出する加速度センサ84が内蔵され、第2コントローラ36にも同様の加速度センサ90が内蔵されている。第1コントローラ34および第2コントローラ36がそれぞれプレイヤによって動かされると、加速度センサ84および加速度センサ90によって、それぞれのコントローラ自身の動きを示す加速度値が検出される。ゲーム装置12では、当該検出された加速度値、すなわち、コントローラ34および36の動作値に応じてゲーム処理が実行される。また、別の表現を使えば、プレイヤは、コントローラ14を適宜に動かすことによって、ゲーム装置12に対して加速度を入力することができ、ゲーム装置12では当該加速度入力に応じてゲーム処理が実行される。
【0063】
この実施例では、第1コントローラ34および第2コントローラ36の動きによって、仮想ゲーム空間内のプレイヤキャラクタのアクションが制御される。図示は省略するが、プレイヤキャラクタは、その右手に剣をその左手に盾を持っている。プレイヤは、右手の第1コントローラ34の横方向(X軸方向)の動きによって、右手の剣を左右に振る動作をプレイヤキャラクタに行わせることができ、縦方向(Y軸方向)の動きによって、剣を縦に振る動作を行わせることができる。また、プレイヤは、左手の第2コントローラ36の前後方向(Z軸方向)の動きによって、左手の盾を前方に突き出す動作をプレイヤキャラクタに行わせることができる。さらに、プレイヤは、左手の第2コントローラ36の横方向(X軸方向)の動きによって、特殊な剣技として、回転しながら右手の剣を振る動作(回転切り)をプレイヤキャラクタに行わせることができる。このように、この実施例の仮想ゲームでは、プレイヤは、第1コントローラ34および第2コントローラ36によって、別々の操作対象としての剣および盾をそれぞれ操作することができる。また、プレイヤは、同一の操作対象としての剣を、2つのコントローラ(第1コントローラ34と第2コントローラ36)によって操作することができる。
【0064】
上述のようなプレイヤキャラクタの各動作は、攻撃動作であり、同時に実行されることが不可能な動作である。したがって、第1コントローラ34および第2コントローラ36を用いてそれぞれの所定の動きが同時に実行されたときには、プレイヤキャラクタにいずれの動作を実行させるかを決める必要がある。この実施例では、第1コントローラ34および第2コントローラ36で検出される動きの大きさを判別することによって、その動きを示す値が最も大きいと判別された動きを有効なものとして処理するようにした。これによって、第1コントローラ34および第2コントローラ36の動きのうち最も大きい動きに対応する動作をプレイヤキャラクタに行わせることができる。
【0065】
なお、この実施例では、上述のように、第1コントローラ34の動きが主にプレイヤキャラクタの右手に把持された剣の操作に対応付けられ、第2コントローラ36の動きが主にプレイヤキャラクタの左手に把持された盾の操作に対応付けられるので、プレイヤが第1コントローラ34を右手で把持し第2コントローラ36を左手に把持することが前提となっている。しかし、他の実施例では、たとえば、プレイヤの利き手を考慮して各コントローラの持ち手を選択可能にして、第1コントローラ34をプレイヤの利き手に把持させるとともに、第1コントローラ34に対応付けられたプレイヤキャラクタの剣をプレイヤの利き手と同じ側の手に把持させるようにしてもよい。つまり、プレイヤが左利きの場合、第1コントローラ34が左手で把持され、第2コントローラ36が右手に把持される。
【0066】
この実施例の仮想ゲームを実行する際のメモリマップの一例が図7に示される。メインメモリ48はプログラム記憶領域100およびデータ記憶領域102を含む。プログラムおよびデータの一部は、光ディスク22から一度に全部または必要に応じて部分的にかつ順次的に読み出され、メインメモリ48に記憶される。なお、図7にはメモリマップの一部のみが示されており、処理に必要な他のプログラムおよびデータも記憶される。
【0067】
プログラム記憶領域100において記憶領域104には、この実施例のゲームプログラムのメインルーチンを実行するためのゲームメイン処理プログラムが記憶されている。
【0068】
記憶領域106には加速度取得プログラムが記憶されている。このプログラムによって、第1コントローラ34および第2コントローラ36で検出された加速度が取得される。上述のように、Bluetooth通信ユニット74を介してコントローラ14からのコントローラデータが定期的に受信される。受信されたコントローラデータは、データ記憶領域102のコントローラデータバッファ118に記憶される。コントローラデータは、第1コントローラ34の入力データおよび第2コントローラ36の入力データを含み、したがって、コントローラデータは、第1コントローラ34の加速度センサ84で検出された加速度を示すデータおよび第2コントローラ36の加速度センサ90で検出された加速度を示すデータを含む。このプログラムによって、1フレームごとに、コントローラデータから各コントローラの加速度を取得する。なお、上述のように、加速度センサ84および90によって、各軸の加速度はゲーム装置12の1フレーム(たとえば1/60秒)よりも短いサンプリング周期(たとえば1/200秒)で検出されるので、コントローラデータには各軸ごとに複数の加速度値が含まれている。したがって、平均値、最大値、最小値などのような適宜な値を抽出することによって、現フレームにおける各軸の加速度を取得する。取得された第1コントローラ34の各軸加速度は、第1コントローラの加速度レジスタ120に記憶され、第2コントローラ36の各軸加速度は、第2コントローラの加速度レジスタ122に記憶される。
【0069】
記憶領域108には第1コントローラ加速度検出プログラムが記憶されている。このプログラムによって、第1コントローラ34における有効な動きが検出される。この実施例では、第1コントローラ34の動き方向が検出される。具体的には、第1コントローラ34の加速度センサ84で検出された各軸方向の加速度の大きさを判別して、最大値に対応する軸方向が第1コントローラ34の動き方向として特定される。また、この実施例では、現フレームで取得された加速度によって判別を行うのではなく、前フレームと現フレームの間での各軸加速度の変化量を算出して、当該算出された各軸の変化量の大きさによって判別が行われる。単位時間(この実施例では1フレーム)における各軸の加速度変化量の大きさを比較することによって、静止状態においても検出される重力加速度の影響を受けずに動きの検出精度を高めることができる。特定された動き方向は第1コントローラ34における有効な操作として認定され、当該動き方向を示す情報が第1コントローラ有効方向フラグに設定される。
【0070】
記憶領域110には第2コントローラ加速度検出プログラムが記憶されている。このプログラムによって、第2コントローラ36における有効な動きが検出され、この実施例では、第2コントローラ36の動き方向が検出される。具体的には、上述の第1コントローラ34の動き方向の検出と同様の処理を実行し、つまり、各軸の加速度変化量の大きさを判別して、最大の変化量に対応する軸方向が第2コントローラ36の動き方向として特定される。特定された動き方向は第2コントローラ36における有効な操作として認識され、当該動き方向を示す情報が第2コントローラ有効フラグに設定される。
【0071】
記憶領域112には加速度補正プログラムが記憶される。このプログラムによって、第1コントローラ34および第2コントローラ36のそれぞれの動き方向を検出する際に比較される各軸の加速度変化量が補正される。必ずしも全ての加速度変化量を補正しなくてよく、必要に応じて少なくとも1つの軸方向の加速度変化量が補正されればよい。補正は、たとえば算出された加速度変化量に定数を掛けることによって行われ、加速度変化量の大きさを増減させる。したがって、特定の軸方向または特定のコントローラの動作値に対してこの補正を行うことによって、特定の軸方向の動きや特定のコントローラの動きを有効にし易くしたり、逆に有効にし難くしたりすることができる。たとえば、この実施例では、第2コントローラ36のX軸方向の加速度変化量のみが補正されるように定められており、この第2コントローラ36のX軸方向の動きが他の動きよりも優先され易くなっている。上述のように、第2コントローラ36のX軸方向の動きは、プレイヤキャラクタの特殊攻撃である回転切り動作に対応付けられており、したがって、この実施例の仮想ゲームでは、特殊攻撃が発動され易くなっている。
【0072】
記憶領域114には優先判定プログラムが記憶されている。このプログラムによって、複数のコントローラで検出される動きのうちのいずれを優先するかが判定される。具体的には、各動きの大きさが判別され、最大値を示す動きが有効な動きとして特定される。この実施例では、上述の第1コントローラ加速度検出プログラムおよび第2コントローラ加速度検出プログラムによって、第1コントローラ34および第2コントローラ36の動き方向をそれぞれ検出するようにしているので、第1コントローラ34の動き方向に対応する加速度変化量および第2コントローラ36の動き方向に対応する加速度変化量の大きさが判別され、大きい方の動きが有効なものとして特定される。特定された動きが複数のコントローラ34、36の動きのうちの有効な操作として認定され、当該動きを示す情報が有効動作フラグに設定される。
【0073】
記憶領域116には有効動作実行プログラムが記憶される。このプログラムによって、有効な操作として特定された動きが処理される。この実施例では、有効な動きに基づくゲーム処理が実行され、当該動きに対応付けられた上述のようなアクションをプレイヤキャラクタに実行させる。
【0074】
データ記憶領域102の記憶領域118は、コントローラデータバッファであり、受信されたコントローラデータが記憶される。上述の加速度取得プログラムはコントローラデータから現フレームにおける加速度を取得する。
【0075】
記憶領域120は、第1コントローラ34の加速度レジスタであり、現フレームで取得されたX軸加速度値を記憶する現X加速度レジスタ、現フレームで取得されたY軸加速度値を記憶する現Y加速度レジスタ、前フレームで取得されたX軸加速度値を記憶する前X加速度レジスタ、前フレームで取得されたY軸加速度値を記憶する前Y加速度レジスタを含む。なお、この実施例では、第1コントローラ34のZ軸加速度はプレイヤキャラクタの動作に対応付けられていないので、記憶領域120に登録されない。
【0076】
記憶領域122は、第2コントローラ36の加速度レジスタであり、現フレームで取得されたX軸加速度値を記憶する現X加速度レジスタ、現フレームで取得されたZ軸加速度値を記憶する現Z加速度レジスタ、前フレームで取得されたX軸加速度値を記憶する前X加速度レジスタ、前フレームで取得されたZ軸加速度値を記憶する前Z加速度レジスタを含む。なお、この実施例では、第2コントローラ36のY軸加速度はプレイヤキャラクタの動作に対応付けられていないので、記憶領域122に登録されない。
【0077】
記憶領域124には第1コントローラ34の加速度変化量が記憶される。この実施例では、X軸加速度の変化量を示す第1X変化量、およびY軸加速度の変化量を示す第1Y変化量が記憶される。加速度変化量は、第1コントローラの加速度レジスタ120の現フレームと前フレームの加速度値の差をとることによって算出される。
【0078】
記憶領域126には第2コントローラ36の加速度変化量が記憶される。この実施例では、X軸加速度の変化量を示す第2X変化量、およびZ軸加速度の変化量を示す第2Z変化量が記憶される。加速度変化量は、第2コントローラの加速度レジスタ122の現フレームと前フレームの加速度値の差をとることによって算出される。
【0079】
なお、記憶領域124および記憶領域126には、加速度補正プログラムによる補正が行われたときは、補正された値が記憶される。
【0080】
記憶領域128には第1コントローラ有効方向フラグが記憶される。このフラグは第1コントローラ34の有効な動きの方向を示す。この実施例では、有効な動き方向がX軸方向の場合、1が記憶され、Y軸方向の場合、2が記憶される。
【0081】
記憶領域130には第2コントローラ有効方向フラグが記憶される。このフラグは第2コントローラ36の有効な動きの方向を示す。この実施例では、有効な動き方向がX軸方向の場合、1が記憶され、Z軸方向の場合、3が記憶される。
【0082】
記憶領域132には有効動作フラグが記憶される。このフラグは第1コントローラ34および第2コントローラ36の動き方向のうちの有効な動き方向を示す。この実施例では、有効な動き方向が第1コントローラ34のXおよびY軸方向の場合、それぞれ1および2が記憶され、第2コントローラ36のXおよびZ軸方向の場合、それぞれ3および4が記憶される。
【0083】
図8にはゲーム装置12のCPU44のゲーム動作の一例が示される。図8のステップS1からS9の処理は単位時間(1フレーム)ごとに実行される。処理を開始すると、ステップS1で、CPU44は第1コントローラ加速度検出処理を実行し、これによって、第1コントローラ34の有効な動きが検出される。第1コントローラ加速度検出処理の詳細は図9に示される。
【0084】
図9のステップS21で、CPU44は、記憶領域118に記憶されている第1コントローラ34の入力データから、現フレームにおけるX軸加速度およびY軸加速度を取得する。次に、ステップS23で、CPU44は、取得したX軸加速度およびY軸加速度をそれぞれ第1コントローラの加速度レジスタ120の現X加速度レジスタおよび現Y加速度レジスタに書き込む。
【0085】
続いて、ステップS25で、CPU44は第1コントローラの加速度レジスタ120の前X加速度レジスタおよび前Y加速度レジスタにデータが記憶されているか否かを判断する。ステップS25で“NO”の場合、処理はステップS37に進む。
【0086】
一方、ステップS25で“YES”の場合、CPU44は、ステップS27で第1コントローラの加速度レジスタ120を参照してXおよびY軸それぞれの加速度変化量を算出する。X軸加速度の変化量を示す第1X変化量は現X加速度から前X加速度を減算することによって算出されて記憶領域124に記憶される。また、Y軸加速度の変化量を示す第1Y変化量は現Y加速度から前Y加速度を減算することよって算出されて記憶領域124に記憶される。
【0087】
続くステップS29からS35で、加速度変化量の大きさを判別して、最大値に対応する方向を第1コントローラ34の動き方向として特定する。具体的には、ステップS29では、CPU44は第1X変化量と第1Y変化量とが0に等しいか否かを判断する。ステップS29で“YES”の場合、つまり、X軸方向とY軸方向ともに加速度に変化がない場合には、第1コントローラ34を用いた新たな動きが開始されていないとみなせるので、処理はそのままステップS37へ進む。
【0088】
ステップS29で“NO”の場合には、CPU44は、ステップS31で第1X変化量が第1Y変化量以上であるか否かを判断する。ステップS31で“YES”の場合、つまり、第1X変化量が最大であると判別される場合、X軸方向が第1コントローラ34の動き方向として特定される。CPU44は、ステップS33で、第1コントローラ有効方向フラグに1を設定する。つまり、CPU44は記憶領域128にX軸方向を示す値「1」を記憶する。
【0089】
一方、ステップS31で“NO”の場合、つまり、第1Y変化量が最大であると判別される場合には、Y軸方向が第1コントローラ34の動き方向として特定される。CPU44は、ステップS35で、第1コントローラ有効方向フラグに2を設定する。つまり、CPU44は記憶領域128にY軸方向を示す値「2」を記憶する。
【0090】
続いて、ステップS37では、CPU44は、次フレームでの変化量算出のために、第1コントローラの加速度レジスタ120の現X加速度レジスタおよび現Y加速度レジスタの値をそれぞれ前X加速度レジスタおよび前Y加速度レジスタに書き込む。この第1コントローラ加速度検出処理を終了すると、処理は図8のステップS3に戻る。
【0091】
図8のステップS3では、CPU44は第2コントローラ加速度検出処理を実行し、これによって、第2コントローラ36の有効な動きが検出される。第2コントローラ加速度検出処理の詳細は図10に示される。
【0092】
図10のステップS51で、CPU44は、記憶領域118に記憶されている第2コントローラの入力データから現フレームにおけるX軸加速度およびZ軸加速度を取得する。次に、ステップS53で、CPU44は、取得したX軸加速度およびZ軸加速度をそれぞれ第2コントローラの加速度レジスタ122の現X加速度レジスタおよび現Z加速度レジスタに書き込む。
【0093】
続いて、ステップS55で、CPU44は第2コントローラの加速度レジスタ122の前X加速度レジスタおよび前Z加速度レジスタにデータが記憶されているか否かを判断する。ステップS55で“NO”の場合、処理はステップS69に進む。
【0094】
一方、ステップS55で“YES”の場合、CPU44は、ステップS57で第2コントローラの加速度レジスタ122を参照してXおよびZ軸それぞれの加速度変化量を算出する。X軸加速度の変化量を示す第2X変化量は現X加速度から前X加速度を減算することによって算出されて記憶領域126に記憶される。また、Z軸加速度の変化量を示す第2Z変化量は現Z加速度から前Z加速度を減算することよって算出されて記憶領域126に記憶される。
【0095】
さらに、ステップS59で、CPU44は第2X変化量を補正する。たとえば、記憶領域126に記憶された第2X変化量に定数(たとえば1.4)を掛けることによって補正値を算出し、当該補正値を記憶領域126に第2X変化量として記憶する。このように、この実施例では、第2コントローラ36のX軸方向の動きが有効にされ易いように定められており、したがって、第2コントローラのX軸方向の動きに対応付けられたゲーム処理(プレイヤキャラクタの回転切り動作)が発動され易くなっている。
【0096】
続くステップS61からS67で、CPU44は、加速度変化量の大きさを判別して、最大値に対応する方向を第2コントローラ34の動き方向として特定する。具体的には、ステップS61では、CPU44は第2X変化量と第2Z変化量とが0に等しいか否かを判断する。ステップS61で“YES”の場合、つまり、X軸方向とZ軸方向ともに加速度に変化がない場合には、第2コントローラ36を用いた新たな動きが開始されていないとみなせるので、処理はそのままステップS69へ進む。
【0097】
ステップS61で“NO”の場合には、CPU44は、ステップS63で第2X変化量が第2Z変化量以上であるか否かを判断する。ステップS63で“YES”の場合、つまり、第2X変化量が最大であると判別される場合、X軸方向が第2コントローラ36の動き方向として特定される。CPU44は、ステップS65で、第2コントローラ有効方向フラグに1を設定する。つまり、CPU44は記憶領域130にX軸方向を示す値「1」を記憶する。
【0098】
一方、ステップS63で“NO”の場合、つまり、第2Z変化量が最大であると判別される場合には、Z軸方向が第2コントローラ36の動き方向として特定される。CPU44は、ステップS67で、第2コントローラ有効方向フラグに3を設定する。つまり、CPU44は記憶領域130にZ軸方向を示す値「3」を記憶する。
【0099】
続いて、ステップS69では、CPU44は、次フレームでの変化量算出のために、第2コントローラの加速度レジスタ122の現X加速度レジスタおよび現Z加速度レジスタの値をそれぞれ前X加速度レジスタおよび前Z加速度レジスタに書き込む。この第2コントローラ加速度検出処理を終了すると、処理は図8のステップS5に戻る。
【0100】
図8のステップS5では、CPU44は優先判定処理を実行し、これによって、第1コントローラ34および第2コントローラ36のいずれの動きを有効とするかを判定する。優先判定処理の詳細は図11および図12に示される。
【0101】
図11のステップS81で、CPU44は、記憶領域128を参照して第1コントローラ有効方向フラグに1が設定されているか否かを判断する。ステップS81で“YES”の場合、つまり、第1コントローラ34の動き方向がX軸方向である場合、CPU44は、ステップS83で記憶領域130を参照して第2コントローラ有効フラグに1が設定されているか否かを判断する。ステップS83で“YES”の場合、つまり、第2コントローラ36の動き方向がX軸方向である場合には、CPU44は、ステップS85で、記憶領域124および126を参照して、第1X変化量が第2X変化量以上であるか否かを判断する。ステップS85で“YES”の場合、つまり、第1X変化量が最大であると判別される場合には、第1コントローラ34のX軸方向の動きが有効であると決定され、CPU44は、ステップS87で有効動作フラグに1を設定する。つまり、CPU44は、記憶領域132に第1コントローラ34のX軸方向の動きを示す値「1」を記憶する。一方、ステップS85で“NO”の場合、つまり、第2X変化量が最大であると判別される場合には、第2コントローラ36のX軸方向の動きが有効であると決定され、CPU44は、ステップS89で有効動作フラグに3を設定する。つまり、CPU44は、記憶領域132に第2コントローラ36のX軸方向の動きを示す値「3」を記憶する。
【0102】
一方、ステップS83で“NO”の場合、CPU44はステップS91で第2コントローラ有効方向フラグに3が設定されているか否かを判断する。ステップS91で“YES”の場合、つまり、第2コントローラ36の動き方向がZ軸方向である場合には、CPU44は、ステップS93で第1X変化量が第2Z変化量以上であるか否かを判断する。ステップS93で“NO”の場合、つまり、第2Z変化量が最大であると判別される場合には、第2コントローラ36のZ軸方向の動きが有効であると決定され、CPU44は、ステップS95で有効動作フラグに4を設定する。つまり、CPU44は、記憶領域132に第2コントローラ36のZ軸方向の動きを示す値「4」を記憶する。
【0103】
また、ステップS93で“YES”の場合、つまり、第1X変化量が最大であると判別される場合、処理は上述のステップS87に進む。また、ステップS91で“NO”の場合、つまり、第2コントローラ36で有効な動き方向が特定されていない(動作が行われていない)場合にも、第1X変化量が最大であると判別されるので、処理は上述のステップS87に進む。ステップS87、S89またはS95を終了すると、この優先判定処理が終了され、処理は図8のステップS7に戻る。
【0104】
また、ステップS81で“NO”の場合には、図12のステップS97で、CPU44は第1コントローラ有効フラグに2が設定されているか否かを判断する。ステップS97で“YES”の場合、つまり、第1コントローラ34の動き方向がY軸方向である場合には、CPU44は、ステップS99で第2コントローラ有効フラグに1が設定されているか否かを判断する。ステップS99で“YES”の場合、つまり、第2コントローラ36の動き方向がX軸方向である場合には、CPU44は、ステップS101で第1Y変化量が第2X変化量以上であるか否かを判断する。ステップS101で“YES”の場合、つまり、第1Y変化量が最大であると判別される場合には、第1コントローラ34のY軸方向の動きが有効であると決定され、CPU44は、ステップS103で有効動作フラグに2を設定する。つまり、CPU44は記憶領域132に第1コントローラ34のY軸方向の動きを示す値「2」を記憶する。一方、ステップS101で“NO”の場合、つまり、第2X変化量が最大であると判別される場合には、第2コントローラ36のX軸方向の動きが有効であると決定され、CPU44はステップS105で有効動作フラグに3を設定する。
【0105】
一方、ステップS99で“NO”の場合には、CPU44は、ステップS107で第2コントローラ有効方向フラグに3が設定されているか否かを判断する。ステップS107で“YES”の場合、つまり、第2コントローラ36の動き方向がZ軸方向である場合には、CPU44は、ステップS109で第1Y変化量が第2Z変化量以上であるか否かを判断する。ステップS109で“NO”の場合、つまり、第2Z変化量が最大であると判別される場合には、第2コントローラ36のZ軸方向の動きが有効であると決定され、CPU44はステップS111で有効動作フラグに4を設定する。
【0106】
また、ステップS109で“YES”の場合、つまり、第1Y変化量が最大であると判別される場合、処理は上述のステップS103に進む。また、ステップS107で“NO”の場合、つまり、第2コントローラ36で有効な動き方向が特定されていない場合にも、第1Y変化量が最大であると判別されるので、処理は上述のステップS103に進む。ステップS103、S105またはS111を終了すると、この優先判定処理が終了され、処理は図8のステップS7に戻る。
【0107】
一方、ステップS97で“NO”の場合、つまり、第1コントローラ34の有効な動き方向が特定されていない場合には、CPU44は、ステップS113で第2コントローラ有効方向フラグに1が設定されているか否かを判断する。ステップS113で“YES”の場合には、第2コントローラ36の動き方向としてのX軸方向に対応する動きが最大であると判別されるので、第2コントローラ36のX軸方向の動きが有効な動きとして決定される。CPU44は、ステップS115で有効動作フラグに3を設定する。
【0108】
また、ステップS113で“NO”の場合には、CPU44はステップS117で第2コントローラ有効方向フラグに3が設定されているか否かを判断する。ステップS117で“YES”の場合には、第2コントローラ36の動き方向としてのZ軸方向に対応する動きが最大であると判別されるので、第2コントローラ36のZ軸方向の動きが有効な動きとして決定される。CPU44は、ステップS119で有効動作フラグに4を設定する。ステップS115またはステップS119を終了すると、この優先判定処理が終了され、処理は図8のステップS7に戻る。
【0109】
また、ステップS117で“NO”の場合、つまり、第2コントローラ36でも有効な動き方向が特定されていない場合には、全コントローラでの有効な動きを決定することができないので、有効動作フラグが設定されずにこの優先判定処理が終了される。
【0110】
図8のステップS7では、CPU44は有効動作処理を実行し、これによって、有効な動きに応じたゲーム処理が実行される。有効動作処理の詳細は図13に示される。
【0111】
図13のステップS131で、CPU44は記憶領域132を参照して有効動作フラグに1が設定されているか否かを判断する。ステップS131で“YES”の場合、つまり、第1コントローラ34のX軸方向の動きが有効である場合には、CPU44は、ステップS133で第1X変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが剣を左右に振る動作を行う画像が生成されてモニタ34に表示される。
【0112】
ステップS131で“NO”の場合、CPU44はステップS135で有効動作フラグに2が設定されているか否かを判断する。ステップS135で“YES”の場合、つまり、第1コントローラ34のY軸方向の動きが有効である場合には、CPU44は、ステップS137で第1Y変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが剣を縦に振る動作を行う画像が生成されてモニタ34に表示される。
【0113】
ステップS135で“NO”の場合、CPU44は、ステップS139で有効動作フラグに3が設定されているか否かを判断する。ステップS139で“YES”の場合、つまり、第2コントローラ36のX軸方向の動きが有効である場合には、CPU44は、ステップS141で第2X変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが回転しながら剣を振り回す動作を行う画像が生成されてモニタ34に表示される。
【0114】
ステップS139で“NO”の場合、CPU44は、ステップS143で有効動作フラグに4が設定されているか否かを判断する。ステップS143で“YES”の場合、つまり、第2コントローラ36のZ軸方向の動きが有効である場合には、CPU44は、ステップS145で第2Z変化量に基づくゲーム処理を実行する。これによって、プレイヤキャラクタが盾を前方に突き出す動作(盾アタック)を行う画像が生成されてモニタ34に表示される。
【0115】
ステップS133、S137、S141またはS145を終了し、あるいはステップS143で“NO”の場合には、CPU44は、ステップS147で第1コントローラ有効方向フラグおよび第2コントローラ有効方向フラグをリセットする。さらに、ステップS149で、CPU44は有効動作フラグをリセットする。この有効動作処理が終了されると、処理は図8のステップS9へ戻る。
【0116】
図8のステップS9では、CPU44はゲーム終了であるか否かを判断する。たとえば、ゲームクリア条件またはゲームオーバ条件が満足されたか否かが判断される。ステップS9で“NO”の場合、ゲームを続行すべく、処理はステップS1に戻る。一方、“YES”の場合にはゲームを終了する。
【0117】
この実施例によれば、複数のコントローラ34、36の動きのうち最も大きい動きを有効なものとして処理するようにしたので、動きが最も大きいコントローラ34、36の動きをゲームに反映することができる。また、動きを検出する複数のコントローラ34、36を動かして、その動きが最も大きいものの操作のみを有効にするといった新規な操作を行うことができる。上述の剣と盾で戦うゲームの場合には、たとえば、プレイヤは右手の第1コントローラ34を動かして剣を左右や縦に振ることによって敵キャラクタへの攻撃を続けながら、所望のタイミングで左手の第2コントローラ36を強くあるいは大きく動かすことによって、回転切りを発動させたり盾を突き出したりすることができる。このように、各コントローラ34、36の動きを一つ一つ区切るような操作を行う必要がなく、各コントローラ34、36を連続的に動かしながらゲームをプレイすることができる。
【0118】
また、多軸加速度センサを用いて複数の方向の動きを検出するので、各コントローラ34、36において複数の方向の動作値を比較することによって最も大きい動作値に対応する方向を当該コントローラ34、36の動き方向として特定することができる。さらに他のコントローラ34、36の動作値と比較することによって、複数のコントローラ34、36のうち最も大きい操作の方向も判別することができる。
【0119】
また、プレイヤの右手で操作される第1コントローラ34と左手で操作される第2コントローラ36の最も大きい動きのみが有効にされるので、両手を同時に動かして操作しても、一方の手の操作に応じてゲームが行われることとなり、したがって、両手を同時に操作することが不自然なゲームにおいて、不自然さを防止することができる。上述のプレイヤキャラクタが剣と盾を持って戦うようなゲームでは、剣で切る動作と盾を突き出す動作とが同時に実行されるような事態を防止できる。また、たとえばボクシングゲームでは、両手で同時にパンチが打たれるような不自然な動作を防止できる。特に、ボクシングゲーム等では一方の手でパンチを繰り出そうとすると、勢いをつけるために他方の手は助走をつけるような動作を無意識にしてしまうことが多いので、両方のコントローラ34、36から加速度が検出されることが多くなってしまうが、このような場合にも最も大きい動きのみを有効にすることによって実際のパンチの動作のみを有効にしてゲームに反映させることができる。
【0120】
なお、上述の実施例では、コントローラ34、36の動きとして各軸方向の加速度変化量を算出して、各変化量の大きさを判別するようにしていた。しかし、他の実施例では、単純に或る時刻において検出される各軸方向の加速度値の大きさを判別するようにしてもよい。
【0121】
また、上述の各実施例のゲームシステム10では、1人のプレイヤが2つのコントローラ34および36を用いてプレイするゲームが実行された。しかし、他の実施例では、複数のプレイヤがそれぞれコントローラ14を用いてプレイするマルチプレイヤゲームが実行されてもよい。なお、各プレイヤの使用するコントローラ14は、第1コントローラ34のみであってもよいし、上述の実施例と同様に第1コントローラ34と第2コントローラ36の両方であってもよい。この実施例でも、各プレイヤのコントローラ14で検出される動きの大きさを判別して、最も大きい値の動きを検出したコントローラ14の動きを有効なものとして処理する。したがって、たとえばコントローラ14を誰が一番速く振ることができるかを競うような新規なゲームを提案することができる。また、プレイヤの選択やレベル設定等に応じて特定のプレイヤのコントローラ14の動作値に対して補正を行うことによって、特定プレイヤにハンデを与えるといった遊び方を提供することができる。
【0122】
また、上述の各実施例では、コントローラ34、36の動作値を検出するための装置として加速度センサ84、90が使用された。しかし、他の実施例では、加速度センサ84、90に代えて、コントローラにジャイロセンサを設けることによって、当該コントローラの動作値を検出するようにしてもよい。なお、上述のように、加速度センサは、加速運動や重力加速度の影響を受けて、各センシング軸方向の直線成分の加速度を軸毎に検出する。しかし、加速度センサは、当該加速度センサの軸心周りに回転させても、重力加速度以外の各軸ごとの加速度は検出することができない。一方、ジャイロセンサは、加速度センサとは異なり、その中の1つまたは複数のジャイロスコープ素子によって規定される軸周りの回転(または角速度)を直接検出することができる。しかしながら、ジャイロセンサは、回転を伴わない直線的な加速を検出することができない。したがって、加速度センサとジャイロセンサとの間の上述のような相違のために、加速度センサをジャイロセンサに単に置換しただけでは、同一の機能を実現することができないので、この実施例では、ジャイロセンサの出力信号に適宜な処理を施すように変更される必要がある。たとえば、ジャイロセンサによって或る状態からの姿勢の傾きを算出する場合には、まずジャイロセンサの検出開始の状態において傾きの値を初期化する。そして、この時点からの当該ジャイロセンサから出力される角速度データを積分する。さらに、上記初期化された傾きの値からの傾きの変化量を算出することによって、初期化時点の姿勢に対する角度を求めることができる。つまり、或る時点を基準とする相対的な角度を求めることができる。この算出された角度をコントローラの動きとみなし、当該角度の大きさを判別することによって、最も大きい角度に対応する方向あるいはコントローラの動きを有効なものとして特定することができる。なお、ジャイロセンサを搭載したデバイスの重力方向を基準とする姿勢が必要な場合には、当該デバイスを重力方向を基準とした状態(例えば水平に保った状態)で初期化する必要がある。一方、加速度センサを搭載したデバイスの場合には、加速度センサが重力方向を基準とするため初期化の必要がないというメリットを有する。
【図面の簡単な説明】
【0123】
【図1】この発明の一実施例のゲームシステムの概要を示す外観図である。
【図2】ゲームシステムの電気的構成の一例を示すブロック図である。
【図3】第1コントローラの外観の一例を示す図解図であり、図3(A)は後方上側から見た斜視図であり、図3(B)は前方下側から見た斜視図である。
【図4】第2コントローラの外観の一例を示す図解図であり、図4(A)は後方上側から見た斜視図であり、図4(B)は前方下側から見た斜視図である。
【図5】コントローラの電気的構成の一例を示すブロック図である。
【図6】プレイヤの右手および左手でそれぞれ把持された第1コントローラおよび第2コントローラを示す図解図である。
【図7】メモリマップの一例を示す図解図である。
【図8】ゲーム装置のCPUのゲーム動作の一例を示すフロー図である。
【図9】図8の第1コントローラ加速度検出処理の動作の一例を示すフロー図である。
【図10】図8の第2コントローラ加速度検出処理の動作の一例を示すフロー図である。
【図11】図8の優先判定処理の動作の一例の一部を示すフロー図である。
【図12】図11の続きを示すフロー図である。
【図13】図8の有効動作処理の動作の一例の一部を示すフロー図である。
【符号の説明】
【0124】
10 …ゲームシステム
12 …ゲーム装置
14 …コントローラ
22 …光ディスク
30 …モニタ
34 …第1コントローラ
36 …第2コントローラ
44 …CPU
48 …メインメモリ
50 …GPU
84,90 …加速度センサ

【特許請求の範囲】
【請求項1】
動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置のコンピュータにおいて実行されるゲームプログラムであって、
前記各動き検出手段によって検出される動作値を取得する動作値取得ステップ、
前記動作値取得ステップによって取得された各動作値の大きさを判別する動作値判別ステップ、および
前記動作値判別ステップによってその値が最も大きいと判別された動作値を有効なものとして処理する動作処理ステップを前記コンピュータに実行させる、ゲームプログラム。
【請求項2】
前記動作値取得ステップは、前記各動き検出手段によって単位時間毎に検出される動作値を取得し、
前記動作値判別ステップは、前記動作値取得ステップによって取得された各動作値の単位時間における変化量をそれぞれ算出する変化量算出ステップを含み、前記各動作値として前記変化量算出ステップによって算出された各変化量の大きさを判別する、請求項1記載のゲームプログラム。
【請求項3】
前記動き検出手段は、複数の方向の動きをそれぞれ検出し、
前記動作値取得ステップは、前記各方向の動作値を取得し、
前記動作値判別ステップは、前記各操作装置ごとに前記各方向の動作値の大きさを判別して最も大きい動作値に対応する方向を当該操作装置の動き方向として特定する方向特定ステップを含み、前記方向特定ステップによって特定された前記各操作装置の方向にそれぞれ対応する前記各操作装置の動作値の大きさを判別する、請求項1または2記載のゲームプログラム。
【請求項4】
前記動作値判別ステップは、前記動作値取得ステップによって取得された各動作値のうち、少なくともいずれか1つの動作値を補正する補正ステップを含み、前記補正ステップによって補正された動作値を含めて前記各動作値の大きさの判別を行う、請求項1ないし3のいずれかに記載のゲームプログラム。
【請求項5】
前記複数の操作装置は、プレイヤの右手で操作されるための第1操作装置と、前記プレイヤの左手で操作されるための第2操作装置とを含む、請求項1ないし4のいずれかに記載のゲームプログラム。
【請求項6】
前記動き検出手段は、加速度センサである、請求項1ないし5のいずれかに記載のゲームプログラム。
【請求項7】
動きを検出する動き検出手段をそれぞれが有する複数の操作装置を含むゲーム装置であって、
前記各動き検出手段によって検出される動作値を取得する動作値取得手段、
前記動作値取得手段によって取得された各動作値の大きさを判別する動作値判別手段、および
前記動作値判別手段によってその値が最も大きいと判別された動作値を有効なものとして処理する動作処理手段を備える、ゲーム装置。

【図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


【公開番号】特開2008−119345(P2008−119345A)
【公開日】平成20年5月29日(2008.5.29)
【国際特許分類】
【出願番号】特願2006−308593(P2006−308593)
【出願日】平成18年11月15日(2006.11.15)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Bluetooth
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】