説明

ゲームプログラム及びゲーム装置

【課題】複数の加速度センサ、または、動きまたは姿勢を検出可能な複数のセンサを利用するゲーム装置において、プレイ中の動きの自由度が高くダイナミックなプレイを可能とし、さらに直感的な動作入力を可能とすること。
【解決手段】コントローラの第1ユニットに設けられた第1加速度センサの出力に基づいて第1ユニットの傾きを検出し、第1ユニットとは独立した第2ユニットに設けられた第2加速度センサの出力に基づいて第2ユニットの傾きを検出する。そして、検出された第1ユニットの傾きと第2ユニットの傾きの差分を検出し、検出された差分を用いてゲーム制御を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は複数の加速度センサ、または、動きまたは姿勢を検出可能な複数のセンサによってゲーム制御を行うゲームプログラム及びゲーム装置に関する。
【背景技術】
【0002】
特許文献1には、1つのハウジング内に2つの加速度センサ(異なる軸の加速度を計測したり、直線と回転を計測する)を設けることが開示されている。
特許文献2には、2つの加速度センサでそれぞれ異なるゲーム入力を行う技術が開示されている。
特許文献3には、コントローラとして2つのレバーを用いる技術が開示されている。
特許文献4には、ニュートラルポジションの設定に関する技術が開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開平10−21000号公報
【特許文献2】特開2002−153673号公報
【特許文献3】特開平6−277363号公報
【特許文献4】特開2001−170358号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、特許文献1の技術だと、両手の動きが固定され、ゲームプレイ中のプレイヤの動きの自由度が少ない(ダイナミックなプレイができない)という問題がある。
また、特許文献2の技術だと、2つの加速度センサによる入力が独立した入力としてゲームで利用されるだけであり、興趣性のある操作感は得られない。
また、特許文献3の技術だと、ゲームプレイ中のプレイヤの動きの自由度が少ないという問題がある。
また、特許文献4の技術だと、1つのセンサに関するものであり、複数のセンサを備えたシステムにおけるニュートラルポジションの設定について開示するものではない。
また、これらの技術はいずれも、センサによる複数の方向の動きの検出を有効に利用したものではない。
本発明は、上記のうちの少なくともいずれか1つを課題とする。
【0005】
本発明は、下記のうち少なくとも1つを目的とする。
(1)複数の加速度センサ、または動きまたは姿勢を検出可能な複数のセンサによってゲーム制御を行う際に、ゲームプレイ中のプレイヤの動きの自由度が高く、ダイナミックな入力操作を可能とするゲームプログラム及びゲーム装置を提供すること
(2)複数のセンサによってゲーム制御を行なう場合のニュートラルポジションを適切に設定することを可能にするゲームプログラム及びゲーム装置を提供すること
(3)動きを検出可能なセンサによる複数の方向の動きの検出を有効に利用したゲームプログラム及びゲーム装置を提供すること
【課題を解決するための手段】
【0006】
上記目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号は本発明の理解を助けるために図面との対応関係の一例を示したものであって、本発明の範囲を何ら限定するものではない。
【0007】
本発明の一実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた加速度センサまたはジャイロセンサである第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた加速度センサまたはジャイロセンサである第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングの姿勢を検出する第1姿勢検出手段(S104)、
前記第2センサの出力に基づいて前記第2ハウジングの姿勢を検出する第2姿勢検出手段(S108)、
前記第1姿勢検出手段によって検出された前記第1ハウジングの姿勢と、前記第2姿勢検出手段によって検出された前記第2ハウジングの姿勢の差分を検出する姿勢差分検出手段(S116)、および
前記姿勢差分検出手段によって検出された差分を用いてゲーム制御を行うゲーム制御手段(S118)として機能させるためのゲームプログラムである。
【0008】
上記構成により、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイを許容する。また、姿勢の差分により制御するので、直感的な動作入力を許容する。
【0009】
なお、前記ゲームプログラムは、前記第1姿勢検出手段によって検出された前記第1ハウジングの姿勢と、前記第2姿勢検出手段によって検出された前記第2ハウジングの姿勢の平均を検出する姿勢平均検出手段(S124)として前記コンピュータをさらに機能させ、
前記ゲーム制御手段は、前記姿勢差分検出手段によって検出された差分および前記姿勢平均検出手段によって検出された前記平均の両方を用いてゲーム制御を行ってもよい(S126)。
【0010】
上記構成により、両手の動きによって自在にゲーム制御可能である。
【0011】
なお、例えば、差分に基いてゲームオブジェクトの第1動作を制御し、平均に基いて、当該ゲームオブジェクトの第2動作を制御してもよい。「姿勢の差分」とは、例えば、所定の軸についての回転角度の差分であってもよいし、各軸についての回転角度の差分であってもよい。
【0012】
なお、前記ゲーム制御手段は、前記差分検出手段によって検出された前記差分を用いてゲームオブジェクトの第1動作を制御する第1動作制御手段(S118)を含み、
前記ゲームプログラムは、前記第1ハウジングまたは前記第2ハウジングに設けられたスイッチの出力に基づいて前記ゲームオブジェクトの第2動作を制御する第2動作制御手段(S164)として前記コンピュータをさらに機能させてもよい。
【0013】
上記構成により、プレイ中の姿勢の自由度が高まる。
【0014】
なお、前記姿勢を検出するための第1センサ及び第2センサは、加速度センサであり、
前記第1姿勢検出手段および第2姿勢検出手段は、前記第1ハウジングおよび第2ハウジングの傾きを検出するものであり、
前記第1姿勢検出手段は、前記第1センサの出力に基づいて、前記第1ハウジングが静止しているかどうかを判断する第1ハウジング状態判断手段(S156)を含み、
前記第1姿勢検出手段は、前記第1ハウジング状態判断手段によって前記第1ハウジングが静止していると判断された場合に、前記第1センサの出力に基づいて検出される前記
第1ハウジングの傾きを、有効な検出結果として出力し(S158)、
前記第2姿勢検出手段は、前記第2センサの出力に基づいて、前記第2ハウジングが静止しているかどうかを判断する第2ハウジング状態判断手段(S156)を含み、
前記第2姿勢検出手段は、前記第2ハウジング状態判断手段によって前記第2ハウジングが静止していると判断された場合に、前記第2センサの出力に基づいて検出される前記第2ハウジングの傾きを、有効な検出結果として出力してもよい(S158)。
【0015】
上記構成により、プレイ中の不意の動きによるセンサ出力を確実に排除できる。
【0016】
なお、ハウジング状態判断手段は、例えば、加速度センサの出力ベクトルの大きさが、当該加速度センサが重力のみを検出する場合の出力ベクトルの大きさとほぼ一致する(ある程度余裕をみてもよい)場合に、静止していると判断する。
【0017】
なお、前記ゲーム制御手段は、前記第1ハウジング状態判断手段によって前記第1ハウジングが静止していると判断され、かつ、前記第2ハウジング状態判断手段によって前記第2ハウジングが静止していると判断されたときのみ、前記姿勢差分検出手段によって検出された差分を用いてゲーム制御を行ってもよい。
【0018】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた加速度センサまたはジャイロセンサである第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた加速度センサまたはジャイロセンサである第2センサ(761)の出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて、ゲーム制御用ベクトルの方向を決定する方向決定手段(S410)、
前記第2センサの出力に基づいて、前記ゲーム制御用ベクトルの大きさを決定する大きさ決定手段(S414)、および
前記ベクトル方向決定手段および前記ベクトル大きさ決定手段によって決定された前記ゲーム制御用ベクトルを用いてゲーム制御を行うゲーム制御手段(S418)として機能させるためのゲームプログラムである。
【0019】
上記構成により、プレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイを許容する。
【0020】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた動きを検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた動きを検出可能な第2センサ(761)の出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングの動きを検出する第1動き操作検出手段(S236)、
前記第2センサの出力に基づいて前記第2ハウジングの動きを検出する第2動き操作検出手段(S250)、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に前記第2ハウジングの動き検出があったかどうかを検出する同時入力検出手段(S254)、および
前記第1ハウジングの動き検出があってから同時入力受付時間以内に前記第2ハウジングの動き検出があったことを前記同時入力検出手段が検出したときに第1ゲーム処理を実
行するゲーム制御手段(S256)として機能させるためのゲームプログラムである。
【0021】
上記構成により、同時の動き操作をゲーム入力に利用することができる(同時の動き操作のタイミング差を許容する)。
【0022】
なお、同時入力受付時間は、第1ハウジングの動き検出に関連して決定されるタイミングからの所定時間であって、一定時間であってもよいし、ゲーム状況やレベルなどに応じて変化してもよい。「動き検出に関連して決定されるタイミング」とは、動き検出の対象となった動き入力における所定のタイミングであり、例えば、当該動き検出があった時点や、当該動き検出に係る動きにおける所定時点(例えば、当該動きの開始点や終了点や所定の中間点など)が挙げられる。
さらに、同時入力検出手段が、第1動き操作検出手段および第2動き操作検出手段の検出結果に基づいて、第2ハウジングの動き検出があってから同時入力受付時間以内に第1ハウジングの動き検出があったかどうかを検出し、第2ハウジングの動き検出があってから同時入力受付時間以内に第1ハウジングの動き検出があったことを同時入力検出手段が検出したときに第1ゲーム処理を実行するようにしてもよい。
【0023】
なお、前記ゲーム制御手段は、前記第1動き操作検出手段によって前記第1ハウジングの動き検出があってから、同時入力受付時間以内に前記第2ハウジングの動き検出があったことが前記同時入力検出手段によって検出されなかった場合には、前記第1ゲーム処理とは異なる第2ゲーム処理を実行してもよい(S216)。
【0024】
上記構成により、同時の動き操作とともに片方の動き操作をゲーム入力に利用することができる。
【0025】
なお、ゲーム制御手段は、さらに、第2動き操作検出手段によって第2ハウジングの動き検出があってから、同時入力受付時間以内に第1ハウジングの動き検出があったことが同時入力検出手段によって検出されなかった場合には、第1ゲーム処理および第2ゲーム処理とは異なる第3ゲーム処理を実行してもよい。
【0026】
なお、前記ゲーム制御手段は、前記同時入力受付時間内に前記第2ハウジングの動き検出があったことが前記同時入力検出手段によって検出されたときには、前記第1ゲーム処理を実行し、前記同時入力受付時間内に前記第2ハウジングの動き検出があったことが前記同時入力検出手段によって検出されることなく前記同時入力受付時間が経過した時点で、前記第2ゲーム処理を実行してもよい。
【0027】
なお、前記第1動き操作検出手段は、前記第1ハウジングの動き検出に関連して決定されるタイミングから受付禁止時間が経過するまでは、当該第1ハウジングの動き検出を新たに検出せず、
前記第2動き操作検出手段は、前記第2ハウジングの動き検出があったことを検出してから受付禁止時間が経過するまでは、当該第2ハウジングの動き検出を新たに検出しないようにしてもよい。
【0028】
上記構成により、一度の動き操作によりしばらくの間は入力が続いてしまう問題を解決できる。
【0029】
なお、受付禁止時間は、ハウジングの動き検出に関連して決定されるタイミングからの所定時間であり、一定時間であってもよいし、ゲーム状況やレベルなどに応じて変化してもよい。
【0030】
なお、前記第1ハウジングおよび前記第2ハウジングのいずれか一方の動き検出があってから所定時間以内に他方の動き検出があったことを前記同時入力検出手段による同時入力検出に関連して決定されるタイミングから同時入力後受付禁止時間が経過するまでは、前記第1動き操作検出手段および前記第2動き操作検出手段は、前記第1ハウジングおよび前記第2ハウジングの動き検出を新たに検出しないようにしてもよい。
【0031】
上記構成により、両方が入力できない状態になったときに、再度入力を許容するタイミングをあわせる
【0032】
なお、同時入力後受付禁止時間は、同時入力検出手段による同時入力検出に関連して決定されるタイミングからの所定時間であり、一定時間であってもよいし、ゲーム状況やレベルなどに応じて変化してもよい。また、受付禁止時間と同一時間であってもよいし、それより長い時間であってもよい。「同時入力検出に関連して決定されるタイミング」とは、同時入力検出の対象となった入力における所定タイミングであり、例えば、当該同時入力検出があった時点や、当該同時入力検出に係る入力における所定時点(例えば、当該同時入力の開始点や終了点や所定の中間点など)が挙げられる。
【0033】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた動きを検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた動きを検出可能な第2センサ(761)の出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングの動きおよびその強さを検出する第1動き検出手段(S236)、
前記第2センサの出力に基づいて前記第2ハウジングの動きおよびその強さを検出する第2動き検出手段(S250)、
前記第1動き検出手段および前記第2動き検出手段の検出結果に基づいて、前記第1ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に前記第2ハウジングの動き検出があったかどうかを検出する同時入力検出手段(S254)、および
前記第1ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に前記第2ハウジングの動き検出があったことを前記同時入力検出手段が検出したときに、前記第1動き検出手段によって検出された前記第1ハウジングの動きの強さと、前記第2動き検出手段によって検出された前記第2ハウジングの動きの強さを利用して第1ゲーム処理を実行するゲーム制御手段(S256)として機能させるためのゲームプログラムである。
【0034】
上記構成により、同時の動き操作かつ動きの大きさを利用したゲーム入力に利用することができる(同時の動き操作のタイミング差を許容する)。
【0035】
なお、さらに、同時入力検出手段が、第1動き検出手段および第2動き検出手段の検出結果に基づいて、第2ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に第1ハウジングの動き検出があったかどうかを検出し、第2ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に第1ハウジングの動き検出があったことを同時入力検出手段が検出したときに、第1動き検出手段によって検出された第1ハウジングの動きの強さと、第2動き検出手段によって検出された第2ハウジングの動きの強さを利用して第1ゲーム処理を実行するようにしてもよい。
【0036】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた動きを検出可能な第1センサ(701)と、前記
第1ハウジングとは独立した第2ハウジング(77)に設けられた動きを検出可能な第2センサ(761)の出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングの動きを検出する第1動き操作検出手段(S302)、
前記第2センサの出力に基づいて前記第2ハウジングの動きを検出する第2動き操作検出手段(S318)、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き操作が行われたときに、当該動き操作から過去一定時間以内に前記第2ハウジングの動き操作が行われていたかどうかを検出する同時入力検出手段(S312)、および
(a)前記第1ハウジングの動き操作が行われたときに、当該動き操作から過去一定時間以内に前記第2ハウジングの動き操作が行われていたことが前記同時入力検出手段によって検出された場合にはゲームオブジェクトに第1動作を行わせ、(b)前記第1ハウジングの動き操作が行われたときに、当該動き操作から過去一定時間以内に前記第2ハウジングの動き操作が行われていたことが前記同時入力検出手段によって検出されなかった場合には前記ゲームオブジェクトに前記第1動作とは異なる第2動作を行わせるゲーム制御手段(S314、S316)として機能させるためのゲームプログラムである。
【0037】
上記構成により、同時の動き操作を利用したゲーム入力に利用することができる(同時の動き操作のタイミング差を許容する)。
【0038】
なお、同時入力検出手段は、第1動き操作検出手段および第2動き操作検出手段の検出結果に基づいて、第2ハウジングの動き操作が行われたときに、当該動き操作から過去一定時間以内に第1ハウジングの動き操作が行われていたかどうかを検出し、検出された場合に第1動作を行なわせ、検出されなかった場合に第3動作を行わせるようにしてもよい。また、第1動き操作検出手段または第2動き操作検出手段によって第1ハウジングまたは第2ハウジングの動きが検出されるごとに、同時入力検出手段による検出をおこなって、第1動作または第2動作もしくは第3動作をおこなわせるようにしてもよい。
【0039】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた傾きを検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた傾きを検出可能な第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
プレイヤからの基準値設定指示を検出する基準値設定指示検出手段(S134)、
前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1戦差の出力値および/または前記第2センサの出力値に基づいて、第1基準値および第2基準値を設定する基準値設定手段(S146)、
前記第1センサの出力および前記第1基準値に基いて前記第1ハウジングの姿勢を検出する第1姿勢検出手段(S104、S112)、
前記第2センサの出力および前記第2基準値に基いて前記第2ハウジングの姿勢を検出する第2姿勢検出手段(S108、S114)、
前記第1姿勢検出手段による第1ハウジングの姿勢と、前記第2姿勢検出手段による第2ハウジングの姿勢の差分を検出する姿勢差分検出手段(S116)、および
前記姿勢差分検出手段によって検出された差分を用いてゲーム制御を行うゲーム制御手段(S118)として機能させるためのゲームプログラムである。
【0040】
上記構成により、2つの傾きセンサを利用したゲームでプレイヤが好きな姿勢でプレイできる。
【0041】
なお、基準値設定手段は、センサの出力値自体を基準値として設定してもよいし、当該出力地から傾き値を演算した結果を基準値として設定してもよい。第1基準値と第2基準値が同一値の場合には、1つのデータを記憶するのみでもよい。
【0042】
なお、前記基準値設定手段は、前記基準値設定指示検出手段によって単一の前記基準値設定指示が検出されたことに応じて、同一タイミングで、前記第1基準値および前記第2基準値を一度に設定してもよい。
【0043】
上記構成により、差分がないのにゲーム入力されることを防ぐができる。
【0044】
なお、前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1センサの出力値と、前記第2センサの出力値とに基く所定の演算をした値を、前記第1基準値および前記第2基準値として共通に設定してもよい。
【0045】
上記構成により、差分がないのにゲーム入力されることを防ぐ
【0046】
なお、所定の演算は例えば平均である。第1ハウジングと第2ハウジングの大きさや形状、操作部の有無、左手用か右手用かなどに応じて重み付けをしてもよい。
【0047】
なお、前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1センサまたは前記第2センサのいずれか一方の出力値に基く値を、前記第1基準値および前記第2基準値として共通に設定してもよい。
【0048】
上記構成により、差分がないのにゲーム入力されることを防ぐ
【0049】
なお、前記第1ハウジングおよび/または前記第2ハウジングには、プレイヤが前記基準値設定指示を入力するためのスイッチが設けられており、
前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1ハウジングおよび前記第2ハウジングのうち、当該基準値設定指示の入力に用いられたスイッチが設けられてない方のハウジングに設けられたセンサの検出値に基いて、前記第1基準値および前記第2基準値を共通に設定してもよい。
【0050】
上記構成により、ボタンによるぶれの影響をなくす
【0051】
なお、前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1センサの出力値と前記第2センサの出力値に基づいて前記第1ハウジングと前記第2ハウジングの傾きの差分が一定範囲内か否かを判断する基準値設定時差分検出手段(S148)を含み、
前記基準値設定手段は、(a)前記基準値設定時差分検出手段によって一定範囲内であると判断された場合には、前記第1センサの出力値および前記第2センサの出力値に基いて、第1基準値および第2基準値をそれぞれ設定し、(b)前記基準値設定時差分検出手段によって一定範囲内でないと判断された場合にはエラー処理を行ってもよい。
【0052】
上記構成により、差分がないのにゲーム入力されることを防ぐ
【0053】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた加速度センサまたはジャイロセンサである第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた加速度センサまたはジャイロセンサである第2センサ(761)の出力を利用してゲー
ム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいてゲームオブジェクトの姿勢を制御する姿勢制御手段(S410)、および
前記第2センサの出力に基づいて前記ゲームオブジェクトの移動を制御する移動制御手段(S416)として機能させるためのゲームプログラムである。
【0054】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた少なくとも2軸方向の動きを検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた少なくとも2軸方向の動きを検出可能な第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段(S542)、
前記第2センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向を検出する第2動き方向検出手段(S570)、
前記第1動き方向検出手段によって検出された前記第1動き方向と、前記第2動き方向検出手段によって検出された前記第2動き方向とを合成することによって合成方向を決定する合成方向決定手段(S552)、および
前記合成方向決定手段によって決定された前記合成方向を用いてゲーム制御を行うゲーム制御手段(S554)として機能させるためのゲームプログラムである。
【0055】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた動きを検出するための第1センサ(701)と、前記第1ハウジングとは独立した動きを検出するための第2ハウジング(77)に設けられた第2センサ(761)の出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングの動きの強さを検出する第1強さ検出手段(S542)、
前記第2センサの出力に基づいて前記第2ハウジングの動きの強さを検出する第2強さ検出手段(S570)、
前記第1強さ検出手段によって検出された前記第1ハウジングの動きの強さと、前記第2強さ検出手段によって検出された前記第2ハウジングの動きの強さとを合成することによって合成強さを決定する合成強さ決定手段(S552)、および
前記合成強さ決定手段によって決定された前記合成強さを用いてゲーム制御を行うゲーム制御手段(S554)として機能させるためのゲームプログラムである。
【0056】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた少なくとも2軸方向の動きを検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた少なくとも2軸方向の動きを検出可能な第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段(S542)、
前記第2加速度センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向を検出する第2動き方向検出手段(S570)、
前記第1動き方向検出手段によって検出された前記第1動き方向と、前記第2動き方向検出手段によって検出された前記第2動き方向とが所定の関係を満たすかどうかを判定す
る動き方向関係判定手段(S550)、および
前記動き方向関係判定手段によって前記第1動き方向と前記第2動き方向が前記所定の関係を満たすと判定されたときに、前記第1ハウジングおよび前記第2ハウジングの少なくとも一方のハウジングの動き方向および/または動き強さに基づいてゲーム制御を行うゲーム制御手段(S552)として機能させるためのゲームプログラムである。
【0057】
なお、動き方向関係判定手段は、例えば、第1動き方向と第2動き方向が略一致することを判定してもよいし、略反対方向であることを判定してもよいし、所定の角度をなすことなどを判定してもよい。また、2次元の方向(所定の2つの方向成分)を比較してもよいし、3次元の方向を比較しても良い。
【0058】
また、ゲーム制御手段は、動き方向関係判定手段により所定の関係を満たすと判定されたときに、第1ハウジングまたは第2ハウジングのいずれか一方の動き方向に基いてゲーム制御をおこなってもよいし、両方の動き方向に基いて(例えば、加算や平均などの所定演算をして)、ゲーム制御をおこなっても良い。また、動き方向ではなく動き強さに基いてもよいし、動き方向と動き強さの両方に基いてゲーム制御をおこなってもよい。
【0059】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた少なくとも2軸方向の動きを検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた少なくとも2軸方向の動きを検出可能な第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングの動きを検出する第1動き操作検出手段(S542)、
前記第2センサの出力に基づいて前記第2ハウジングの動きを検出する第2動き操作検出手段(S570)、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き検出のタイミングと、前記第2ハウジングの動き検出のタイミングとが所定の関係を満たすかどうかを判定する動きタイミング関係判定手段(S548)、および
前記動きタイミング関係判定手段によって前記第1ハウジングの動き検出のタイミングと前記第2ハウジングの動き検出のタイミングが前記所定の関係を満たすと判定されたときに、前記第1ハウジングおよび前記第2ハウジングの少なくとも一方のハウジングの動き方向および/または動き強さに基づいてゲーム制御を行うゲーム制御手段(S552)として機能させるためのゲームプログラムである。
【0060】
なお、動きタイミング関係判定手段は、例えば、第1動きタイミングと第2動きタイミングが略一致することを判定してもよいし、所定間隔であることなどを判定してもよい。また、ゲーム制御手段は、動きタイミング関係判定手段により所定の関係を満たすと判定されたときに、第1ハウジングまたは第2ハウジングのいずれか一方の動き方向に基いてゲーム制御をおこなってもよいし、両方の動き方向に基いて(例えば、加算や平均などの所定演算をして)、ゲーム制御をおこなっても良い。また、動き方向ではなく動き強さに基いてもよいし、動き方向と動き強さの両方に基いてゲーム制御をおこなってもよい。
【0061】
なお、前記ゲーム制御手段は、前記第1ハウジングおよび前記第2ハウジングの両方のハウジングの動き方向および/または動き強さに基づいてゲーム制御を行ってもよい。
【0062】
なお、前記ゲーム制御手段は、前記第1ハウジングおよび前記第2ハウジングの両方のハウジングの動き方向および動き強さに基づいてゲーム制御を行ってもよい。
【0063】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた少なくとも2軸方向の動き検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた少なくとも2軸方向の動きを検出可能な第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段(S542)、
前記第2センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向を検出する第2動き方向検出手段(S570)、
前記第1動き方向検出手段によって検出された前記第1動き方向と、前記第2動き方向検出手段によって検出された前記第2動き方向とが所定の関係を満たすかどうかを判定する動き向関係判定手段(S550)、および
前記動き方向関係判定手段によって前記第1動き方向と前記第2動き方向が前記所定の関係を満たすと判定されたときに、ゲームオブジェクトに特定の動作を行わせるゲーム制御手段(554)として機能させるためのゲームプログラムである。
【0064】
なお、動き方向関係判定手段は、例えば、第1動き方向と第2動き方向が略一致することを判定してもよいし、略反対方向であることを判定してもよいし、所定の角度をなすことなどを判定してもよい。また、動き方向関係判定手段によって第1動き方向と第2動き方向との関係が複数の候補のうちのどの関係かを判定し、当該判定に応じて複数の特定の動作のうちから1つの特定の動作を決定してもよい。
【0065】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた動きを検出するための第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた動きを検出するための第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングの動きおよびその強さを検出する第1動き操作検出手段(S236)、
前記第2センサの出力に基づいて前記第2ハウジングの動きおよびその強さを検出する第2動き操作検出手段(S250)、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き検出のタイミングと、前記第2ハウジングの動き検出のタイミングとが所定の関係を満たすかどうかを判定する動きタイミング関係判定手段(S240)、および
前記動きタイミング関係判定手段によって前記第1ハウジングの動き検出のタイミングと前記第2ハウジングの動き検出のタイミングが前記所定の関係を満たすと判定されたときに、ゲームオブジェクトに特定の動作を行わせるゲーム制御手段(S242)として機能させるためのゲームプログラムである。
【0066】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた少なくとも2軸方向の動きを検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた少なくとも2軸方向の動きを検出可能な第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段(S748)、
前記第2センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向
を検出する第2動き方向検出手段(S782)、
前記第1動き方向検出手段によって検出された前記第1動き方向が第1範囲内であり、かつ前記第2動き方向検出手段によって検出された前記第2動き方向が第2範囲内であるときに、前記第1動き方向と前記第2動き方向に基づいてゲーム制御を行うゲーム制御手段(S752、S786、S758)として機能させるためのゲームプログラムである。
【0067】
なお、第1範囲と第2範囲は重複しない範囲としてもよいし、一部重複する範囲としてもよいが、完全には一致しない範囲である。
【0068】
本発明の他の実施例に係るゲームプログラムは、
第1ハウジング(71)に設けられた動きまたは姿勢を検出可能な第1センサ(701)と、前記第1ハウジングとは独立した第2ハウジング(77)に設けられた動きまたは姿勢を検出可能な第2センサ(761)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記第1センサの出力に基づいて第1ゲーム処理を実行する第1ゲーム制御手段(S410)、
前記第2センサの出力に基づいて第2ゲーム処理を実行する第2ゲーム制御手段(S416)、および
プレイヤの指示に応じて、前記第1ゲーム制御手段が前記第1ゲーム処理のために参照するセンサを前記第1センサから前記第2センサに変更し、かつ前記第2ゲーム制御手段が前記第2ゲーム処理のために参照するセンサを前記第2センサから前記第1センサに変更する参照センサ交換手段(S404)として機能させるためのゲームプログラムである。
【0069】
本発明の他の実施例に係るゲームプログラムは、
少なくとも、第1軸、第2軸の2軸方向の動きを検出可能なセンサ(701)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記センサの前記第1軸方向の動きを検出する動き検出手段(S742)、および
前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出に関連して決定される時点または期間において出力された前記センサの前記第2軸方向の出力に基いてゲーム制御を行うゲーム制御手段(S718)として機能させるためのゲームプログラムである。
【0070】
なお、「検出に関連して決定される時点または期間」とは、以下が考えられる。なお、第1軸方向の動き入力と第2軸方向の動き入力との連続性を保つために、第1軸方向の動き入力における所定時点から所定時間以上離れない時点または期間とするのが好ましい。(1)検出の対象となった第1軸方向の動き入力における所定時点を基準として決定される時点または期間(「検出の対象となった第1軸方向の動き入力における所定時点」は、当該第1軸方向の動きが検出された時点や、当該動き入力の開始点や終了点や所定の中間点など))
(2)検出の対象となった第1軸方向の動き入力における所定時点を基準として決定される期間内に第2軸方向の動きが検出されたときに当該第2軸方向の動きにおける所定時点または所定期間
【0071】
上記(1)には以下が考えられる
(a)第1軸方向の動き入力における所定時点(以下第1時点)と同一の時点
(b)第1時点より所定時間だけ前の時点
(c)第1時点より所定時間だけ後の時点
(d)[第1時点より所定時間だけ前〜第1時点]の期間
(e)[第1時点〜第1時点より所定時間だけ後の時点]の期間
(f)[第1時点より第1時間だけ前の時点〜第1時点より第2時間だけ前の時点]の期間(第1時間>第2時間)
(g)[第1時点より第1時間だけ後の時点〜第1時点より第2時間だけ後の時点]の期間(第1時間<第2時間)
(h)[第1時点より第1時間だけ前の時点〜第1時点より第2時間だけ後の時点]の期間
【0072】
上記(2)について、動き検出手段が「振り動作」を検出する場合、上記(a)〜(h)のような時点または期間において、第2軸における振りが検出されるか否かを検出して、当該検出があったときには、当該第2軸における振りの期間(振り開始から終了まで[加速度の立ち上がり→最大→0→反対方向の加速度検出→反対方向最大→0]、または、その一部[例えば、加速度の立ち上がり→最大→0の期間、または、反対方向の加速度検出→反対方向最大→0までの期間)としてもよい。
【0073】
なお、第1時点より前の時点または期間とする場合は、第2軸方向への入力をした後、第1軸方向への入力をすることにより、当該第2軸方向への入力を有効にするという入力方法となり(第2軸方向への入力をした場合であってもその後第1軸方向への入力をしない場合には、当該第2軸方向への入力は有効な入力とならない)、第1時点より後の時点または期間とする場合は、第1軸方向への入力をした後、第2軸方向への入力を受け付けるという入力方法となる(第2軸方向への入力をした場合であってもその前に第1軸方向への入力をしていない場合には、当該第2軸方向への入力は有効な入力とならない)。また、第1時点をまたぐ期間とする場合には、第1軸方向への入力により有効入力であることを示しつつ第2軸方向の入力をおこなうという入力方法となる(第1軸方向への入力をしながら第2軸方向への入力をしない場合は、当該第2軸方向への入力は有効とならない)。
【0074】
「出力された前記加速度センサの前記第2軸方向の出力に基いてゲーム制御を行う」について、期間による場合は、その期間内の、第2軸方向の出力の合計/平均(加重平均も可)/最大値/積分などを利用する、あるいは、その期間内の連続する出力の差分を利用するなどが考えられる。
【0075】
本発明の他の実施例に係るゲームプログラムは、
第1軸、第2軸、第3軸の3軸方向の動きを検出可能なセンサ(701)の出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置(3)のコンピュータ(30)を、
前記センサの前記第1軸方向の動きを検出する動き検出手段(S742)、および
前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出された時点を基準として決定される時点または期間において出力された前記センサの前記第2軸方向の出力と前記第3軸方向の出力により示される方向を用いてゲーム制御を行うゲーム制御手段(S718)として機能させるためのゲームプログラムである。
【0076】
なお、前記ゲーム制御手段は、前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出された時点を基準として決定される時点または期間において出力された前記センサの前記第2軸方向の出力に加えて、当該第1軸方向の動きに係る前記センサの前記第1軸方向の出力の大きさを用いてゲーム制御を行ってもよい。
【0077】
なお、前記ゲーム制御手段は、前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出された時点を基準として決定される時点または期間における、第2軸方向の動きの有無を検出し(S750)、第2軸方向の動きが検出されたときに、当
該第2軸方向の出力を用いてゲーム制御を行ってもよい。
【0078】
なお、「姿勢を検出可能なセンサ」とは、加速度センサ、ジャイロセンサなど、姿勢を検出可能なセンサであり、さらに言えば、自ら(自らが設けられるハウジング)の姿勢を検出可能なセンサである。また、「姿勢」とは、代表的には、傾き(重力方向に対する傾き;言い換えると、水平軸を中心とする回転角度)であるが、水平軸以外の軸を中心とする回転角度などであってもよい。
【0079】
また、「傾きを検出可能なセンサ」とは、加速度センサなど、傾きを検出可能なセンサであり、さらに言えば、自ら(自らが設けられるハウジング)の傾きを検出可能なセンサである。
【0080】
また、「動きを検出可能なセンサ」とは、加速度センサ、ジャイロセンサなど、動きを検出可能なセンサであり、さらに言えば、自ら(自らが設けられるハウジング)の動きを検出可能なセンサである。
【0081】
また、「動き操作検出手段」は、ハウジングが単に動いたことを検出してもよいし、ハウジングが所定の動き(例えば振りなど)をしたことを検出してもよい。
【0082】
ここで、加速度センサは、加速運動や重力加速度の影響を受けて、各センシング軸方向の直線成分の加速度を軸毎に検出する。一方、ジャイロスコープは、回転にともなう角速度を検出する。加速度センサは、当該加速度センサの軸心周りに回転させても、重力加速度以外の各軸ごとの加速度は検出することができない。一方、ジャイロスコープは、回転を伴わない直線的な加速を検出することができない。従って、加速度センサをジャイロスコープに、ジャイロスコープを加速度センサに単に置換しただけでは、同一の機能を実現することができない。一方、加速度センサとジャイロスコープの違いを吸収するための複雑な処理を付加することで、加速度センサをジャイロスコープ、ジャイロスコープを加速度センサに置き換えて利用することもできる。
加速度センサは、各軸に沿った直線成分の加速度を検出しており、回転や傾きを直接検出することはできない。このため、加速度センサを搭載したデバイスの姿勢の回転や傾きは、加速度センサの各軸ごとに検出される加速度に所定の演算処理を施すことによって算出している。例えば、加速度センサが静止した状態においては、常に重力加速度が加わっているので、その重力加速度に対する各軸の傾き応じた加速度が各軸ごとに検出される。具体的には、加速度センサが水平状態で静止しているとき、加速度センサのy軸に1Gの重力加速度が加わり、他の軸の重力加速度はほぼ0となる。次に、加速度センサの姿勢が水平状態より傾くと、加速度センサの各軸方向と重力方向と角度に応じて、重力加速度が加速度センサの各軸に分散される。このとき、加速度センサの各軸の加速度値が検出される。このような各軸ごとの加速度値に演算を加えることにより、重力方向に対する加速度センサの姿勢を算出することができる。また、回転の場合には、姿勢変化の連続的なものと考えられるので、ある時点の姿勢の傾きからある時点の姿勢の傾きのまでを算出することにより回転角度をソフトウェア処理によって算出することもできる。
一方、例えばジャイロスコープによって有る状態からの姿勢の傾きを算出する場合には、まずジャイロスコープの検出開始の状態において傾きの値を初期化する。そして、この時点からの当該ジャイロスコープから出力される角速度データを積分する。さらに、前記初期化された傾きの値からの傾きの変化量を算出することにより、初期化時点の姿勢に対する角度を求めることができる。つまり、有る時点を基準とする相対的な角度を求めることができる。なお、ジャイロスコープを搭載したデバイスの重力方向を基準とする姿勢が必要な場合には、当該デバイスを重力方向を基準とした状態(例えば水平に保った状態)で初期化する必要がある。一方、加速度センサを搭載したデバイスの場合には、加速度センサが重力方向を基準とするため初期化の必要がないというメリットを有する。
【発明の効果】
【0083】
本発明によれば、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイを許容する。また、姿勢の差分によりゲーム制御するので、直感的な動作入力を許容する。
【図面の簡単な説明】
【0084】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】ゲーム装置3の機能ブロック図
【図3】コントローラ7の外観構成を示す斜視図
【図4】コアユニット70の上筐体を外した状態を示す斜視図
【図5】サブユニット76の上筐体を外した状態を示す斜視図
【図6】コントローラ7の構成を示すブロック図
【図7】コントローラ7を用いてゲーム操作するときの状態を概説する図解図
【図8】第1の実施形態におけるゲーム画像例
【図9】第1の実施形態におけるプレイヤの操作とキャラクタの動作との対応関係の一例を示す図
【図10】第1の実施形態におけるメインメモリのメモリマップ
【図11】第1の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図12】第1の実施形態におけるニュートラルポジション設定処理の詳細を示すフローチャート
【図13】第1の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図14】第1の実施形態における傾き検出の詳細を示すフローチャート
【図15】第1の実施形態における向きベクトルの変更方法の一例を示す図
【図16】第1の実施形態における操作ユニットの傾きと傾き検出の検出結果との対応関係を示す図
【図17】第1の実施形態の変形例におけるプレイヤの操作とキャラクタの動作との対応関係の一例を示す図
【図18】第1の実施形態の変形例におけるCPUの処理の流れを示すフローチャート
【図19】第2の実施形態におけるゲーム画像例
【図20】第2の実施形態におけるプレイヤの操作とキャラクタの動作との対応関係の一例を示す図
【図21】第2の実施形態におけるメインメモリのメモリマップ
【図22】第2の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図23】第2の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図24】第2の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図25】第2の実施形態における振り強さ検出の詳細を示すフローチャート
【図26】第3の実施形態におけるプレイヤの操作とキャラクタの動作との対応関係の一例を示す図
【図27】第3の実施形態におけるメインメモリのメモリマップ
【図28】第3の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図29】第3の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図30】第3の実施形態における振り操作検出の詳細を示すフローチャート
【図31】第4の実施形態におけるプレイヤの操作とキャラクタの動作との対応関係の一例を示す図
【図32】第4の実施形態におけるメインメモリのメモリマップ
【図33】第4の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図34】第4の実施形態における傾き検出の詳細を示すフローチャート
【図35】第4の実施形態における振り操作検出の詳細を示すフローチャート
【図36】第4の実施形態における操作ユニットの傾きと傾き検出の検出結果との対応関係を示す図
【図37】第4の実施形態における向きベクトルの変更方法の一例を示す図
【図38】第5の実施形態におけるプレイヤの操作とキャラクタの動作との対応関係の一例を示す図
【図39】第5の実施形態におけるメインメモリのメモリマップ
【図40】第5の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図41】第5の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図42】第5の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図43】第5の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図44】第5の実施形態における振り方向検出の詳細を示すフローチャート
【図45】第5の実施形態における速度ベクトルの変更方法の一例を示す図
【図46】第5の実施形態における速度ベクトルの変更方法の一例を示す図
【図47】第6の実施形態におけるプレイヤの操作の一例を示す図
【図48】第6の実施形態におけるメインメモリのメモリマップ
【図49】第6の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図50】第6の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図51】第6の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図52】第6の実施形態におけるCPUの処理の流れを示すフローチャートの一部
【図53】第6の実施形態における振り強さ検出の詳細を示すフローチャート
【図54】第6の実施形態における速度ベクトルの変更方法の一例を示す図
【図55】第6の実施形態における速度ベクトルの変更方法の一例を示す図
【図56】第6の実施形態におけるプレイヤの操作と加速度センサの出力との対応関係を示す図
【図57】第6の実施形態におけるプレイヤの操作と加速度センサの出力との対応関係を示す図
【発明を実施するための形態】
【0085】
図1を参照して、本発明の一実施形態に係るゲームシステム1について説明する。なお、図1は、当該ゲームシステム1を説明するための外観図である。以下、据置型ゲーム装置を一例にして、本発明のゲームシステム1について説明する。
【0086】
図1において、当該ゲームシステム1は、家庭用テレビジョン受像機等のスピーカ2aを備えたディスプレイ(以下、モニタと記載する)2に、接続コードを介して接続される据置型ゲーム装置(以下、単にゲーム装置と記載する)3および当該ゲーム装置3に操作情報を与えるコントローラ7によって構成される。ゲーム装置3は、接続端子を介して受信ユニット6が接続される。受信ユニット6は、コントローラ7から無線送信される送信データを受信し、コントローラ7とゲーム装置3とは無線通信によって接続される。また、ゲーム装置3には、当該ゲーム装置3に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置3の上部主面には、当該ゲーム装置3の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、およびゲーム装置3上部の蓋を開くOPENスイッチが設けられている。ここで、プレイヤがOPENスイッチを押下することによって上記蓋が開き、光ディスク4の脱着が可能となる。
【0087】
また、ゲーム装置3には、セーブデータ等を固定的に記憶するバックアップメモリ等を搭載する外部メモリカード5が必要に応じて着脱自在に装着される。ゲーム装置3は、光ディスク4に記憶されたゲームプログラムなどを実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置3は、外部メモリカード5に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置3のプレイヤは、モニタ2に表示さ
れたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0088】
コントローラ7は、その内部に備える通信部75(図6参照)から受信ユニット6が接続されたゲーム装置3へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて送信データを無線送信する。コントローラ7は、2つのコントロールユニット(コアユニット70およびサブユニット76)が屈曲自在な接続ケーブル79を介して互いに接続されて構成されており、主にモニタ2に表示されるゲーム空間に登場するプレイヤオブジェクトを操作するための操作手段である。コアユニット70およびサブユニット76は、それぞれ複数の操作ボタン、キー、およびスティック等の操作部が設けられている。また、後述により明らかとなるが、コアユニット70は、当該コアユニット70から見た画像を撮像するための撮像情報演算部74(図6参照)を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール8Lおよび8Rが設置される。これらLEDモジュール8Lおよび8Rは、それぞれモニタ2の前方に向かって赤外光を出力する。なお、本実施例では、コアユニット70とサブユニット76を屈曲自在なケーブルで接続したが、サブユニット76に無線ユニットを搭載することで、接続ケーブル79をなくすこともできる。例えば、無線ユニットとしてBluetooth(登録商標)ユニットをサブユニット76に搭載することで、サブユニット76からコアユニット70へ操作データを送信することが可能になる。
【0089】
次に、図2を参照して、ゲーム装置3の構成について説明する。なお、図2は、ゲーム装置3の機能ブロック図である。
【0090】
図2において、ゲーム装置3は、各種プログラムを実行する例えばリスク(RISC)CPU(セントラルプロセッシングユニット)30を備える。CPU30は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ33等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU30には、メモリコントローラ31を介して、GPU(Graphics Processing Unit)32、メインメモリ33、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35が接続される。また、メモリコントローラ31には、所定のバスを介して、コントローラI/F(インターフェース)36、ビデオI/F37、外部メモリI/F38、オーディオI/F39、およびディスクI/F41が接続され、それぞれ受信ユニット6、モニタ2、外部メモリカード5、スピーカ2a、およびディスクドライブ40が接続されている。
【0091】
GPU32は、CPU30の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU32は、図示しない画像処理専用のメモリやメインメモリ33の一部の記憶領域を用いて画像処理を行う。GPU32は、これらを用いてモニタ2に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ31およびビデオI/F37を介してモニタ2に出力する。
【0092】
メインメモリ33は、CPU30で使用される記憶領域であって、CPU30の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ33は、CPU30によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ33に記憶されたゲームプログラムや各種データ等がCPU30によって実行される。
【0093】
DSP34は、ゲームプログラム実行時にCPU30において生成されるサウンドデー
タ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM35が接続される。ARAM35は、DSP34が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP34は、ARAM35に記憶されたサウンドデータを読み出し、メモリコントローラ31およびオーディオI/F39を介してモニタ2に備えるスピーカ2aに出力させる。
【0094】
メモリコントローラ31は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。コントローラI/F36は、例えば4つのコントローラI/Fで構成され、それらが有するコネクタを介して嵌合可能な外部機器とゲーム装置3とを通信可能に接続する。例えば、受信ユニット6は、上記コネクタと嵌合し、コントローラI/F36を介してゲーム装置3と接続される。上述したように受信ユニット6は、コントローラ7からの送信データを受信し、コントローラI/F36を介して当該送信データをCPU30へ出力する。ビデオI/F37には、モニタ2が接続される。外部メモリI/F38には、外部メモリカード5が接続され、その外部メモリカード5に設けられたバックアップメモリ等とアクセス可能となる。オーディオI/F39にはモニタ2に内蔵されるスピーカ2aが接続され、DSP34がARAM35から読み出したサウンドデータやディスクドライブ40から直接出力されるサウンドデータをスピーカ2aから出力可能に接続される。ディスクI/F41には、ディスクドライブ40が接続される。ディスクドライブ40は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置3のバスやオーディオI/F39に出力する。
【0095】
次に、図3を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の外観構成を示す斜視図である。
【0096】
図3において、コントローラ7は、コアユニット70とサブユニット76とが接続ケーブル79で接続されて構成されている。コアユニット70は、ハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。一方、サブユニット76は、ハウジング77を有しており、当該ハウジング77に複数の操作部78が設けられている。そして、コアユニット70とサブユニット76とは、接続ケーブル79によって接続されている。
【0097】
接続ケーブル79の一方端にはコアユニット70のコネクタ73(図4参照)に着脱自在なコネクタ791が設けられており、接続ケーブル79の他方端は固定的にサブユニット76と接続されている。そして、接続ケーブル79のコネクタ791は、コアユニット70の底面に設けられたコネクタ73と嵌合し、コアユニット70とサブユニット76とが当該接続ケーブル79を介して接続される。
【0098】
コアユニット70は、例えばプラスチック成型によって形成されたハウジング71を有している。ハウジング71は、略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0099】
ハウジング71の表面の中央に、方向指示手段である十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(上下左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって上下左右いずれかの方向が選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。なお、十字キー72aの代わりに360°指示可能なジョイスティックを設けても良い。
【0100】
ハウジング71の表面の十字キー72aより底面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72b〜72gは、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられる。
【0101】
また、ハウジング71の表面の十字キー72aより上面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置3本体の電源をオン/オフする電源スイッチである。
【0102】
また、ハウジング71の表面の操作ボタン72cより底面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コアユニット70から受信ユニット6へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
【0103】
また、ハウジング71の表面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ706(図4参照)からの音を外部に放出するための音抜き孔が形成されている。
【0104】
一方、ハウジング71の裏面には、プレイヤがコアユニット70を把持したときに当該プレイヤの人差し指または中指が位置するような位置に、操作ボタン(図示せず)が設けられる。この操作ボタンは、例えばBボタンとして機能する操作部であり、例えばシューティングゲームにおけるトリガスイッチとして用いられる。
【0105】
また、ハウジング71の上面には、撮像情報演算部74(図6参照)の一部を構成する撮像素子743(図6参照)が設けられる。ここで、撮像情報演算部74は、コアユニット70が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコアユニット70の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング71の底面には、コネクタ73(図4参照)が設けられている。コネクタ73は、例えば32ピンのエッジコネクタであり、接続ケーブル79のコネクタ791と嵌合して接続するために利用される。
【0106】
次に、図4を参照して、コアユニット70の内部構造について説明する。なお、図4は、コアユニット70の上筐体(ハウジング71の一部)を外した状態を示す斜視図である。
【0107】
図4において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、スピーカ706、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイクロコンピュータ(Micro Computer:マイコン)751等(図6参照)に接続される。なお、加速度センサ701が基盤700の中央部ではなく周辺部に設けられていることにより、コアユニット70の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分の含まれる加
速度を検出することができるので、所定の演算により、検出される加速度データからコアユニット70の回転を良好な感度で判定することができる。
【0108】
一方、基板700の下主面上には、撮像情報演算部74やコネクタ73が取り付けられる。
【0109】
図3および図5を参照して、サブユニット76について説明する。なお、図5は、サブユニット76の上筐体(ハウジング77の一部)を外した状態を示す斜視図である。
【0110】
図3において、サブユニット76は、例えばプラスチック成型によって形成されたハウジング77を有している。ハウジング77は、全体として大人や子供の片手で把持可能な大きさである。
【0111】
ハウジング77の表面に、方向指示手段であるスティック78aが設けられる。スティック78aは、ハウジング77の表面から突出した傾倒可能なスティックを倒すことによって、傾倒方向に応じて操作信号を出力する操作部である。例えば、プレイヤがスティック先端を360°任意の方向に傾倒することによって任意の方向や位置を指定することができ、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。なお、スティック78aの代わりに十字キーを設けても良い。
【0112】
サブユニット76のハウジング77の上面に、複数の操作ボタン78dおよび78eが設けられる(図5参照)。操作ボタン78dおよび78eは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン78dおよび78eに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン78dおよび78eには、XボタンおよびYボタン等としての機能が割り当てられる。これら操作ボタン78dおよび78eは、ゲーム装置3が実行するゲームプログラムに応じてそれぞれの機能が割り当てられる。
【0113】
図5において、ハウジング77の内部には基板が固設されており、当該基板の上主面上にスティック78aおよび加速度センサ761等が設けられる。そして、これらは、基板等に形成された配線(図示せず)を介して接続ケーブル79と接続されている。
【0114】
次に、図6を参照して、コントローラ7の内部構成について説明する。なお、図6は、コントローラ7の構成を示すブロック図である。
【0115】
図6において、コアユニット70は、上述した操作部72、撮像情報演算部74、加速度センサ701、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。また、サブユニット76は、上述した操作部78および加速度センサ761を備えており、接続ケーブル79とコネクタ791およびコネクタ73とを介して、マイコン751と接続されている。
【0116】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コアユニット70の上面から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結
果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コアユニット70のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。しかしながら、ハウジング71は、サブユニット76とは屈曲自在な接続ケーブル79によって接続されているため、サブユニット76の方向や位置を変更しても撮像情報演算部74の撮像方向が変化することはない。この撮像情報演算部74から出力される処理結果データに基づいて、コアユニット70の位置や動きに応じた信号を得ることができる。
【0117】
コアユニット70は、本実施例では、加速度センサを備える。ここで、コアユニット70は、3軸(図4のX軸、Y軸、Z軸)の加速度センサ701を備えていることが好ましい。また、サブユニット76は、3軸(図5のX軸、Y軸、Z軸)の加速度センサ761を備えていることが好ましい。この3軸の加速度センサ701および761は、それぞれ3方向、すなわち、X軸方向(左側面→右側面方向)、Y軸方向(上面→底面方向)、Z軸方向(表面→裏面方向)で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、X軸方向およびY軸方向(または他の対になった方向)のそれぞれに沿った直線加速度のみを検知する2軸の加速度検出手段を使用してもよい。さらにはX軸方向(または他の方向)に沿った直線加速度のみを検知する1軸の加速度検出手段を使用してもよい。例えば、この3軸または2軸または1軸の加速度センサ701および761は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701および761は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であってもよい。また、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて3軸または2軸または1軸の加速度センサ701および761が提供されてもよい。
【0118】
当業者には公知であるように、加速度センサ701および761に用いられるような加速度検出手段は、加速度センサの持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701および761からの直接の出力は、その各軸に沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701および761は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【0119】
しかしながら、加速度センサ701および761からそれぞれ出力される加速度の信号に対して追加の処理を行うことによって、コアユニット70およびサブユニット76に関するさらなる情報をそれぞれ推測または算出することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度(重力加速度)が検知されると、加速度センサ701および761からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象(コアユニット70またはサブユニット76)の傾きをそれぞれ推測することができる。このように、加速度センサ701および761をマイコン751(または他のプロセッサ)と組み合わせて用いることによって、コアユニット70およびサブユニット76の傾き、姿勢または位置を決定することができる。同様に、加速度センサ701を備えるコアユニット70または加速度センサ761を備えるサブユニット76が、ここで説明されているように、例えばユーザの手で動的に加速されてそれぞれ動かされる場合に、加速度センサ701および761によって生成される加速度信号をそれぞれ処理することによって、コアユニット70およびサブユニット76のさまざまな動きおよび/または位置をそれぞれ算出または推測することができる。他の実施例では、加速度センサ701および761は、信号をマイコン751に
出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置をそれぞれ備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサが静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角に変換するものであってもよい。加速度センサ701および761でそれぞれ検知された加速度を示すデータは通信部75に出力される。
【0120】
通信部75は、マイコン751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置3からのデータに応じて、サウンドIC707の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置3から送信されたサウンドデータ等を処理する。
【0121】
コアユニット70に設けられた操作部72からの操作信号(コアキーデータ)、加速度センサ701からの加速度信号(コア加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。また、接続ケーブル79を介して、サブユニット76に設けられた操作部78からの操作信号(サブキーデータ)および加速度センサ761からの加速度信号(サブ加速度データ)は、マイコン751に出力される。マイコン751は、入力した各データ(コアキーデータ、サブキーデータ、コア加速度データ、サブ加速度データ、処理結果データ)を受信ユニット6へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から受信ユニット6への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期でデータを収集して送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(Bluetooth;登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、受信ユニット6への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばブルートゥース(登録商標)の技術に基づいて、所定周波数の搬送波を用いて操作情報で変調し、その微弱電波信号をアンテナ754から放射する。つまり、コアユニット70に設けられた操作部72からのコアキーデータ、サブユニット76に設けられた操作部78からのサブキーデータ、コアユニット70に設けられた加速度センサ701からのコア加速度データ、サブユニット76に設けられた加速度センサ761からのサブ加速度データ、および撮像情報演算部74からの処理結果データは、無線モジュール753で微弱電波信号に変調されてコアユニット70から放射される。そして、ゲーム装置3の受信ユニット6でその微弱電波信号を受信し、ゲーム装置3で当該微弱電波信号を復調や復号することによって、一連の操作情報(コアキーデータ、サブキーデータ、コア加速度データ、サブ加速度データ、および処理結果データ)を取得することができる。そして、ゲーム装置3のCPU30は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Bluetooth(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【0122】
図7に示すように、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、プレイヤは、一方の手(例えば右手)でコアユニット70を把持し、他方の手(例えば左手)でサブユニット76を把持する。
【0123】
上述したように、コアユニット70に設けられた加速度センサ701からの出力(コア加速度データ)を用いることによって、コアユニット70の傾き、姿勢、位置、または、動き(移動や振りなど)を決定することができる。つまり、プレイヤがコアユニット70
を把持した手を上下左右等に動かすことによって、コアユニット70は、プレイヤの手の運動や向きに応じた操作入力手段として機能する。また、上述したようにサブユニット76に設けられた加速度センサ761からの出力(サブ加速度データ)を用いることによって、サブユニット76の傾き、姿勢、位置、または、動き(移動や振りなど)を決定することができる。つまり、プレイヤがサブユニット76を把持した手を上下左右等に動かすことによって、サブユニット76は、プレイヤの手の運動や向きに応じた操作入力手段として機能する。これによって、プレイヤが両方の手に別々のユニットを把持してそれぞれの手自体を動かして操作するような入力を行うことができる。したがって、コアユニット70およびサブユニット76は、従来のゲーム機用コントローラを単に左右に分離できるように構成しただけでなく、プレイヤの左右の手が自由になると同時に、従来のゲーム機用コントローラでは不可能であった新たな操作が可能となっている。また、コントローラ自体の操作の自由度が著しく向上しているため、臨場感のあるゲーム操作を実現できる。
【0124】
なお、上述した説明では、コントローラ7とゲーム装置3とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置3とがケーブルを介して電気的に接続されてもかまわない。この場合、コアユニット70に接続されたケーブルをゲーム装置3の接続端子に接続する。
【0125】
また、コントローラ7を構成するコアユニット70およびサブユニット76のうち、コアユニット70のみに通信部75を設けたが、サブユニット76に受信ユニット6へ送信データを無線送信(または有線通信)する通信部を設けてもかまわない。また、コアユニット70およびサブユニット76それぞれに上記通信部を設けてもかまわない。例えば、コアユニット70およびサブユニット76に設けられた通信部がそれぞれ受信ユニット6へ送信データを無線送信してもいいし、サブユニット76の通信部からコアユニット70へ送信データを無線送信してコアユニット70の通信部75で受信した後、コアユニット70の通信部75がサブユニット76の送信データと共にコアユニット70の送信データを受信ユニット6へ無線送信してもいい。これらの場合、コアユニット70とサブユニット76とを電気的に接続する接続ケーブル79が不要となる。
【0126】
また、コントローラ7から無線送信される送信データを受信する受信手段として、ゲーム装置3の接続端子に接続された受信ユニット6を用いて説明したが、ゲーム装置3の本体内部に設けられた受信モジュールによって当該受信手段を構成してもかまわない。この場合、受信モジュールが受信した送信データは、所定のバスを介してCPU30に出力される。
【0127】
以下、上記のようなゲームシステム1を用いて実現される本発明の種々の実施形態について説明する。なお、以下では説明を分かり易くするために、コアユニット70およびサブユニット76を、それぞれ第1ユニット、第2ユニットと称し、コアユニット70に設けられた加速度センサ701およびサブユニット76に設けられた加速度センサ761を、それぞれ第1加速度センサ、第2加速度センサと称す。
【0128】
(第1の実施形態)
図8は、第1の実施形態における表示画像の一例である。モニタ2の画面には、プレイヤによって操作されるキャラクタ(ゲームオブジェクト)を含む3次元の仮想ゲーム世界の様子が表示される。本実施形態ではキャラクタは戦車に乗っている。プレイヤは、第1ユニットまたは第2ユニットを傾ける(すなわち、水平軸を中心として回転させる)ことによって、キャラクタの動作を制御することができる。なお、以下の説明では、加速度センサのX軸正方向が水平方向かつプレイヤの右方向であり、Y軸正方向が鉛直下方向であり、Z軸正方向が水平方向かつプレイヤの前方向であるという前提で説明するが、加速度センサの軸方向と現実世界の方向との関係はこの前提に限られるものではない。
【0129】
図9に、第1の実施形態におけるプレイヤの操作とキャラクタの動作の対応関係の一例を示す。第1ユニットが第2ユニットよりも相対的に向こう側(図16参照)に傾けられた場合にはキャラクタは左旋回し、第2ユニットが第1ユニットよりも相対的に向こう側に傾けられた場合にはキャラクタは右旋回する。また、第1ユニットと第2ユニットが平均的に向こう側に傾けられた場合にはキャラクタは前進し、平均的に手前側(図16参照)に傾けられた場合にはキャラクタは後退する。なお、図9において、紙面の奥側がキャラクタの進行方向(前方)であり、紙面の手前側がキャラクタの後方である。
【0130】
図10は、第1の実施形態におけるメインメモリ33のメモリマップの一例である。メインメモリ33には、ゲームプログラム100、ゲーム画像データ102、キャラクタ制御データ104、第1傾き値106、第2傾き値108、第1基準値110、および第2基準値112が格納される。なお、ゲームプログラム100、ゲーム画像データ102は光ディスク4に記憶されており、適宜メインメモリ33にコピーされて使用される。また、必要に応じて第1基準値110や第2基準値112も同様に光ディスク4に記憶してメインメモリにコピーして使用しても良い。
【0131】
ゲーム画像データ102は、ゲーム画像を生成するためのデータ(ポリゴンデータやテクスチャデータなど)であり、キャラクタ画像を生成するためのデータおよび背景画像を生成するためのデータを含んでいる。
【0132】
キャラクタ制御データ104は、キャラクタを制御するためのデータであって、ゲーム世界(仮想的な3次元空間)におけるキャラクタの現在位置を示す現在位置データと、キャラクタの移動速度の大きさを示す速度データと、キャラクタの進行方向を示す向きベクトルとを含んでいる。現在位置データは3次元座標値で表されるデータであり、速度データはスカラー値で表されるデータであり、向きベクトルは3次元の単位ベクトルで表されるデータである。なお、速度データの代わりに速度ベクトルを用いても良い。
【0133】
第1傾き値106は、第1加速度センサの出力値に基づいて検出される第1ユニットの傾きを表す値である。第2傾き値108は、第2加速度センサの出力値に基づいて検出される第2ユニットの傾きを表す値である。第1基準値110は、第1ユニットの傾きの基準値である。第2基準値112は、第2ユニットの傾きの基準値である。
【0134】
次に、図11〜図14のフローチャートを参照して、ゲームプログラム100に基づくCPU30の処理の流れを説明する。
【0135】
図11において、ゲームプログラム100の実行が開始されると、CPU30は、まずステップS100でニュートラルポジション設定処理を実行する。ニュートラルポジション設定処理とは、第1ユニットの傾きの基準値(第1基準値110)と第2ユニットの傾きの基準値(第2基準値112)を決定するための処理である。以下、図12を参照して、ニュートラルポジション設定処理の詳細を説明する。
【0136】
図12のステップS134で、CPU30は、コントローラ7から送信される操作情報に基づいて、プレイヤによって設定ボタン(ニュートラルポジションの設定をプレイヤが指示するためのボタン)が押されたかどうかを判断する。この設定ボタンは、第1ユニットのみに設けられていてもよいし、第2ユニットのみに設けられていてもよいし、第1ユニットと第2ユニットの両方に設けられていてもよい。さらには、設定ボタンを押す替わりに、プレイヤがマイクロフォンに向かって音声を発することによってニュートラルポジションの設定を指示できるようにしてもよい。なお、ここでは設定ボタンが第1ユニットのみに設けられているものとして説明する。プレイヤによって設定ボタンが押されたこと
が検出された場合には処理はステップS136に進み、プレイヤによって設定ボタンが押されたことが検出されない場合にはステップS134の処理を繰り返す(すなわちプレイヤによって設定ボタンが押されるまで待機する)。
【0137】
ステップS136では、一定時間(例えば10フレーム期間)だけ待機する。これは、プレイヤが設定ボタンから指を離した直後は設定ボタンが設けられているユニット(ここでは第1ユニット)が揺れている可能性があり、そのために第1基準値が正しく設定されない可能性があるからである。
【0138】
ステップS138では、第1加速度センサの出力値(出力ベクトル)を取得する。ここでは、第1加速度センサのX軸方向の出力値をAx1とし、Y軸方向の出力値をAy1とし、Z軸方向の出力値をAz1とする。なお、所定期間分(例えば3秒程度)の加速度センサの出力値を常に記憶しておき、プレイヤが設定ボタンを押したときにそれより所定時間だけ前に出力された出力値を利用してもよいし、設定ボタンを押す前または後のある期間の出力値の平均を採用しても良い。(第2加速度センサについても同様)
【0139】
ステップS140では、ステップS138で取得した第1加速度センサの出力ベクトル(Ax1,Ay1,Az1)の大きさ(すなわち、√(Ax12+Ay12+Az12))
が0.8〜1.2の範囲内かどうか、すなわち第1ユニットが静止しているかどうかを判断する。第1加速度センサおよび第2加速度センサの出力ベクトルは、静止状態(すなわち重力加速度の影響のみを受けている状態)において1.0の大きさとなるように設定されている。したがって、第1加速度センサの出力ベクトルの大きさが1.0または1.0に近い値である場合には、第1ユニットがほぼ静止していると判断することができる。逆に、第1加速度センサの出力ベクトルの大きさが1.0から大きく離れた値である場合には、第1ユニットが移動していると判断することができる。第1加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内であった場合には、処理はステップS142に進む。第1加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内でなかった場合には、第1ユニットが移動していると第1基準値が正しく設定できないので、処理はステップS134に戻る。なお、0.8〜1.2という値は例であり、本質的には、1.0の近傍の値であることが判断される。なお、本実施例では、加速度センサのX方向成分(Ax)は使用しないので、プレイヤは基本的にコントローラ7をX方向に傾けずにプレイするものであり、ステップS138で取得した第1加速度センサの出力のX方向成分が一定値より大きいときには、適切なニュートラルポジションが設定されていないとして、ステップS134に戻るようにしても良い。(第2加速度センサについても同様)
【0140】
ステップS142では、第2加速度センサの出力値(出力ベクトル)を取得する。ここでは、第2加速度センサのX軸方向の出力値をAx2とし、Y軸方向の出力値をAy2とし、Z軸方向の出力値をAz2とする。
【0141】
ステップS144では、ステップS142で取得した第2加速度センサの出力ベクトル(Ax2,Ay2,Az2)の大きさ(すなわち、√(Ax22+Ay22+Az22))
が0.8〜1.2の範囲内かどうか、すなわち第2ユニットが静止しているかどうかを判断する。第2加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内であった場合には、処理はステップS146に進む。第2加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内でなかった場合には、第2ユニットが移動していると第2基準値が正しく設定できないので、処理はステップS134に戻る。
【0142】
ステップS146では、arctan(Az1/Ay1)(これは第1ユニットのX軸(水平軸)周りの傾きを表している;図16における角度Θ)を算出し、算出された値を第1基準値110として設定する。同様に、arctan(Az2/Ay2)(これは第
2ユニットのX軸周りの傾きを表している;図16における角度Θ)を算出し、算出された値を第2基準値112として設定する。なお、(Ay1,Az1)を基準値として設定してもよい。
【0143】
なお、ここではステップS138で取得した第1加速度センサの値のみに基づいて第1基準値110を設定しているが、第1加速度センサの値を時間をずらして複数回取得し、それらの平均に基づいて第1基準値110を設定してもよい。これにより、ニュートラルポジション設定時の第1ユニットの揺れの影響を抑えることができる。第2基準値112についても同様である。
【0144】
ステップS148では、第1基準値110と第2基準値112の差が所定値以内かどうかを判断する。第1基準値110と第2基準値112の差が所定値以内であった場合には、ニュートラルポジション設定処理を終了し、処理は図11のステップS102に進む。第1基準値110と第2基準値112の差が所定値を超えていた場合には、処理はステップS134に戻り、第1基準値110および第2基準値112の再設定を行う。
【0145】
なお、ステップS148において、第1基準値110と第2基準値112の差が所定値を超えていた場合に第1基準値110および第2基準値112の再設定を行うようにしている理由は、そのような第1基準値110および第2基準値112をそのまま利用してゲームをプレイすると良好な操作性が得られないことが予想されるためである。すなわち、本実施形態では図9で示したように、第1ユニットが第2ユニットよりも相対的に向こう側に傾けられたときにキャラクタが左旋回し、第2ユニットが第1ユニットよりも相対的に向こう側に傾けられたときにキャラクタが右旋回するが、第1基準値110と第2基準値112がずれている場合には、プレイヤが第1ユニットと第2ユニットを平行に揃えて構えた場合でもキャラクタが右旋回または左旋回してしまうことになり、プレイヤに違和感を与えてしまうからである。
【0146】
なお、ゲームの種類によっては、第1基準値110と第2基準値112のずれが特に問題にならないので、その場合にはステップS148の判断を省略しても構わない。
【0147】
また、本実施形態では、プレイヤが第1ユニットに設けられた設定ボタンを押すと、第1基準値110の設定と第2基準値112の設定が一度に行われる例について説明したが、本発明はこれに限定されない。例えば、第1ユニットと第2ユニットのそれぞれに設定ボタンが設けられており、プレイヤが第1ユニットに設けられた設定ボタンを押したときには第1基準値110が設定され、その後、プレイヤが第2ユニットに設けられた設定ボタンを押したときには第2基準値112が設定されるようにしてもよい。ただし、この場合には第1基準値110と第2基準値112がずれやすくなるため、本実施形態のように第1基準値110の設定と第2基準値112の設定がほぼ同じタイミングで行われるのが好ましい。
【0148】
なお、本実施形態では第1基準値110と第2基準値112をそれぞれ個別に設定する例を説明したが、上述した違和感を完全になくすために、第1基準値110と第2基準値112に共通の値を設定するようにしてもよい。例えば、ステップS146におけるarctan(Az1/Ay1)とarctan(Az2/Ay2)の平均値を、第1基準値110と第2基準値112に共通に設定してもよい。また、arctan(Az1/Ay1)またはarctan(Az2/Ay2)のいずれか一方のみを算出し、この算出結果を第1基準値110と第2基準値112に共通に設定してもよい。この場合、プレイヤが設定ボタンを押したときの操作ユニットのぶれの影響を避けるために、第1ユニットおよび第2ユニットのうち、プレイヤが押した設定ボタンが設けられていない方の操作ユニットの加速度センサの出力値に基づいて、第1基準値110と第2基準値112を共通に設
定するのが好ましい。
【0149】
図11において、ニュートラルポジション設定処理が終わると、CPU30はステップS102で、ゲーム処理に利用する各種データ(キャラクタ制御データ104や第1傾き値106など)の初期化を行い、キャラクタを含むゲーム画像を生成してモニタ2の画面に表示する。
【0150】
ステップS104では、第1ユニットに関する傾き検出を行う。以下、この傾き検出の詳細を図14を参照して説明する。
【0151】
図14のステップS154では、加速度センサ(ここでは第1加速度センサ)の出力値(出力ベクトル)を取得する。ここでは、加速度センサのX軸方向の出力値をAx1とし、Y軸方向の出力値をAy1とし、Z軸方向の出力値をAz1とする。
【0152】
ステップS156では、ステップS154で取得した第1加速度センサの出力ベクトル(Ax1,Ay1,Az1)の大きさ(すなわち、√(Ax12+Ay12+Az12))
が0.8〜1.2の範囲内かどうか、すなわち第1ユニットが静止しているかどうかを判断する。第1加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内であった場合には、処理はステップS158に進む。第1加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内でなかった場合には、処理はステップS160に進む。
【0153】
ステップS158では、arctan(Az1/Ay1)(これは第1ユニットのX軸周りの傾きを表している;図16における角度Θ)を算出し、算出された値を傾き検出の戻り値として返す。この戻り値は、メインメモリ33に第1傾き値106として格納される。その後、処理は図11のステップS106に進む。
【0154】
ステップS160では、第1ユニットが移動していると第1ユニットの傾きが正しく検出できないので、傾き検出結果としてエラーを返し、傾き検出を終了し、処理は図11のステップS106に進む。
【0155】
ステップS106では、ステップS106の傾き検出結果がエラーかどうかを判断し、エラーであった場合には処理は図13のステップS150に進み、エラーでなかった場合には処理はステップS108に進む。
【0156】
ステップS108では、第2ユニットに関して、ステップS104と同様に傾き検出を行う。すなわち、第2加速度センサの出力ベクトル(Ax2,Ay2,Az2)の大きさが0.8〜1.2の範囲内であった場合には、arctan(Az2/Ay2)(これは第2ユニットのX軸周りの傾きを表している;図16における角度Θ)の値が、メインメモリ33に第2傾き値108として格納される。
【0157】
ステップS110では、ステップS108の傾き検出結果がエラーかどうかを判断し、エラーであった場合には処理は図13のステップS150に進み、エラーでなかった場合には処理はステップS112に進む。
【0158】
ステップS112では、第1傾き値106を第1基準値110に基づいて補正する。具体的には、第1傾き値106と第1基準値110との差分を算出し、この算出結果を新たな第1傾き値106としてメインメモリ33に上書きする。
【0159】
ステップS114では、第2傾き値108を第2基準値112に基づいて補正する。具体的には、第2傾き値108と第2基準値112との差分を算出し、この算出結果を新た
な第2傾き値108としてメインメモリ33に上書きする。
【0160】
ステップS116では、第1傾き値106から第2傾き値108を引いた結果の値がS1(正の閾値)よりも大きいかどうかを判断する。第1傾き値106から第2傾き値108を引いた結果の値がS1よりも大きい場合(すなわち第1ユニットが第2ユニットよりも相対的に向こう側に傾けられた場合)には、処理はステップS118に進み、S1よりも大きくない場合には処理はステップS120に進む。
【0161】
ステップS118では、キャラクタが左旋回するように向きベクトルを変更する。向きベクトルの変更方法としては種々の方法が考えられる。本実施形態では、一例として、図15に示すように、キャラクタの現在位置における地面の法線ベクトルおよび現在の向きベクトルの両方に対して垂直かつ所定の大きさを有する左旋回ベクトルと、現在の向きベクトルとを合成することによって合成ベクトルを求め、この合成ベクトルと同じ方向を有する単位ベクトルを新しい向きベクトルとして決定する。
【0162】
ステップS120では、第1傾き値106から第2傾き値108を引いた結果の値が−S1よりも小さいかどうかを判断する。第1傾き値106から第2傾き値108を引いた結果の値が−S1よりも小さい場合(すなわち第2ユニットが第1ユニットよりも相対的に向こう側に傾けられた場合)には、処理はステップS122に進み、−S1よりも小さくない場合には処理はステップS124に進む。
【0163】
ステップS122では、キャラクタが右旋回するように向きベクトルを変更する。
【0164】
ステップS124では、第1傾き値106と第2傾き値108の平均値がS2(正の閾値)よりも大きいかどうかを判断する。第1傾き値106と第2傾き値108の平均値がS2よりも大きい場合(すなわち第1ユニットと第2ユニットが平均的に向こう側に傾けられた場合)には、処理はステップS126に進み、S2よりも大きくない場合には処理はステップS128に進む。
【0165】
ステップS126では、第1傾き値106と第2傾き値108の平均値に応じて正の速度データを設定する。例えば、平均値に比例した絶対値を有する正の速度データを設定する。その後、処理は図13のステップS150に進む。
【0166】
ステップS128では、第1傾き値106と第2傾き値108の平均値が−S2よりも小さいかどうかを判断する。第1傾き値106と第2傾き値108の平均値が−S2よりも小さい場合(すなわち第1ユニットと第2ユニットが平均的に手前側に傾けられた場合)には、処理はステップS130に進み、−S2よりも小さくない場合には処理はステップS132に進む。
【0167】
ステップS130では、第1傾き値106と第2傾き値108の平均値に応じて負の速度データを設定する。例えば、平均値に比例した絶対値を有する負の速度データを設定する。その後、処理は図13のステップS150に進む。
【0168】
ステップS132では、速度データを0に設定し、処理は図13のステップS150に進む。
【0169】
図13のステップS150では、速度データと向きベクトルに基づいて、現在位置データを更新する。これにより、ゲーム世界のキャラクタは、向きベクトルが示す方向に向かって速度データが示す距離だけ移動する。
【0170】
ステップS152では、モニタ2に表示されているゲーム画像を、現在位置データに基づいて更新し、処理は図11のステップS104に戻る。その後、以上のような処理が繰り返されることにより、プレイヤの操作に応じてゲーム画像が随時変化する。
【0171】
以上のように、本実施形態によれば、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイが可能となる。また、2つの操作ユニットの傾きの差分によりキャラクタを制御することができるので、直感的な操作が可能となり、良好な操作性が得られる。
【0172】
なお、本実施形態では3軸の加速度センサを用いる例を説明したが、1軸の加速度センサを用いても操作ユニットの傾きを検出することができる(例えば、図16におけるZ軸の出力値だけを参照しても、操作ユニットの傾きを検出することができる)ため、本実施形態と同様の効果を得ることができる。
【0173】
なお、本実施形態では、第1ユニットの傾きと第2ユニットの傾きの差分と、第1ユニットの傾きと第2ユニットの傾きの平均値とを利用してキャラクタの動作を制御する例を説明したが、例えば、第1ユニットの傾きと第2ユニットの傾きの平均値を用いずに差分だけを利用するようなゲームを実現することも可能である。以下、このような第1ユニットの傾きと第2ユニットの傾きの差分だけを利用する例を、本実施形態の変形例として説明する。
【0174】
図17に、第1の実施形態の変形例におけるプレイヤの操作とキャラクタの動作の対応関係の一例を示す。第1ユニットが第2ユニットよりも相対的に向こう側に傾けられた場合にはキャラクタは左旋回し、第2ユニットが第1ユニットよりも相対的に向こう側に傾けられた場合にはキャラクタは右旋回する。また、加速ボタンが押された場合にはその時点での進行方向にキャラクタが加速する。
【0175】
図18を参照して、第1の実施形態の変形例におけるCPU30の処理の流れを説明する。ただし、図18において、図11と同じ処理については同じ参照符号を付し、説明を省略する。
【0176】
ステップS162よりも前の処理においては、第1ユニットの傾きと第2ユニットの傾きの差分に応じてキャラクタを左旋回または右旋回させる処理が行われる。
【0177】
ステップS162で、CPU30は、プレイヤによって加速ボタンが押されたかどうかを判断する。加速ボタンは第1ユニットにのみ設けられていてもよいし、第2ユニットのみに設けられていてもよいし、第1ユニットと第2ユニットの両方にそれぞれ設けられていてもよい。加速ボタンが押された場合には、処理はステップS164に進み、加速ボタンが押されていない場合には、処理はステップS166に進む。
【0178】
ステップS164では、速度データを所定量だけ増加させる。
【0179】
ステップS166では、速度データを所定量だけ減少させる。
【0180】
ステップS164またはステップS166よりも後の処理については図13の処理と同じである。
【0181】
以上のように、この変形例においては、第1ユニットの傾きと第2ユニットの傾きの絶対値を用いずに差分だけを利用してゲームをプレイすることができるため、例えば床に仰向けで寝転がってもゲームを問題無くプレイすることが可能となり、ゲームプレイ中のプ
レイヤの姿勢の自由度が増す。
【0182】
(第2の実施形態)
図19は、第2の実施形態における表示画像の一例である。モニタ2の画面には、プレイヤによって操作されるキャラクタ(ゲームオブジェクト)を含む3次元の仮想ゲーム世界の様子が表示される。本実施形態ではキャラクタはそりに乗っており、そりは5匹の恐竜(恐竜A〜恐竜E)によって引っ張られている。プレイヤは、第1ユニットまたは第2ユニットを振ることによって、キャラクタの動作を制御することができる。なお、本実施形態では、プレイヤが、第1ユニットを左手で把持し、第2ユニットを右手で把持するとして説明する(ただし、逆の対応関係でもかまわない)。
【0183】
図20に、第2の実施形態におけるプレイヤの操作とキャラクタの動作の対応関係の一例を示す。第1ユニットのみが振られた場合にはキャラクタは右旋回(進行方向を右に変更)し、第2ユニットのみが振られた場合にはキャラクタは左旋回(進行方向を左に変更)する。また、第1ユニットと第2ユニットが同時に振られた場合にはキャラクタはその時点での進行方向に加速する。
なお、第1ユニットのみが振られた場合にキャラクタが左方向に進み、第2ユニットのみが振られた場合に右方向に進み、同時に振られた場合に前方に進むようにしてもよい。
【0184】
図21は、第2の実施形態におけるメインメモリ33のメモリマップの一例である。メインメモリ33には、ゲームプログラム200、ゲーム画像データ202、キャラクタ制御データ204、第1振り強さ値206、第2振り強さ値208、第1入力フラグ210、第2入力フラグ212、同時入力フラグ214、第1タイマ216、第2タイマ218、および同時入力タイマ220が格納される。
【0185】
ゲーム画像データ202およびキャラクタ制御データ104については、第1の実施形態と同様のため、説明を省略する。
【0186】
第1振り強さ値206は、第1加速度センサの出力値に基づいて検出される第1ユニットの振りの強さを表す値である。第2振り強さ値208は、第2加速度センサの出力値に基づいて検出される第2ユニットの振りの強さを表す値である。
【0187】
第1入力フラグ210は、第1ユニットが振られたことを示すフラグであり、第1ユニットが振られたことが検出されたときにオンされる。第2入力フラグ212は、第2ユニットが振られたことを示すフラグであり、第2ユニットが振られたことが検出されたときにオンされる。同時入力フラグ214は、第1ユニットと第2ユニットが同時に振られたことを示すフラグであり、第1ユニットと第2ユニットが同時に振られたことが検出されたときにオンされる。
【0188】
第1タイマ216は、第1ユニットが振られたことが検出されてからの経過時間(経過フレーム数)を示す値である。第2タイマ218は、第2ユニットが振られたことが検出されてからの経過時間(経過フレーム数)を示す値である。同時入力タイマ220は、第1ユニットと第2ユニットが同時に振られたことが検出されてからの経過時間(経過フレーム数)を示す値である。
【0189】
次に、図22〜図25のフローチャートを参照して、ゲームプログラム200に基づくCPU30の処理の流れを説明する。なお、ステップS202からS266までの処理が1フレームごとに繰り返される。
【0190】
図22において、ゲームプログラム200の実行が開始されると、CPU30は、まず
ステップS200で、ゲーム処理に利用する各種データ(キャラクタ制御データ204や第1振り強さ値206や第1入力フラグ210や第1タイマ216など)の初期化を行い、キャラクタを含むゲーム画像を生成してモニタ2の画面に表示する。
【0191】
ステップS202では、同時入力フラグ214がオンであるかどうかを判断し、同時入力フラグ214がオンである場合には処理はステップS204に進み、オンでない場合には処理はステップS210に進む。
【0192】
ステップS204では、同時入力タイマ220に1を加算する。
【0193】
ステップS206では、同時入力タイマ220が20以上であるかどうかを判断し、同時入力タイマ220が20以上である場合には処理はステップS208に進み、20以上でない場合には処理は図24のステップS262に進む。
【0194】
ステップS208では、同時入力フラグ214をオフにし、処理は図24のステップS262に進む。
【0195】
以上のように、同時入力フラグ214がオンになってから(すなわち、第1ユニットと第2ユニットが同時に振られたことが検出されてから)20フレーム期間が経過するまでの間は、第1ユニットの振り強さ検出(後述のステップS236)も第2ユニットの振り強さ検出(後述のステップS250)も行われず、すなわちプレイヤによる第1ユニットの振り操作も第2ユニットの振り操作も受け付けられない状態となる。これにより、プレイヤが行った一回の同時振り操作が、複数フレームにわたって連続して検出されてしまうことを防止することができる。
【0196】
ステップS210では、第1入力フラグ210がオンであるかどうかを判断し、第1入力フラグ210がオンである場合には処理はステップS212に進み、オンでない場合には処理はステップS222に進む。
【0197】
ステップS212では、第1タイマ216に1を加算する。
【0198】
ステップS214では、第1タイマ216が5であるかどうかを判断し、第1タイマ216が5である場合(すなわち、第1ユニットの振りが検出された後、第2ユニットの振りが検出されないまま5フレーム経過したとき=第1ユニットのみが振られた場合)には処理はステップS216に進み、5でない場合には処理はステップS218に進む。
【0199】
ステップS216では、キャラクタが右旋回するように向きベクトルを変更する。向きベクトルの変更方法については第1の実施形態と同様である。
【0200】
ステップS218では、第1タイマ216が10より大きいかどうかを判断し、第1タイマ216が10より大きい場合には処理はステップS220に進み、10より大きくない場合には処理はステップS222に進む。
【0201】
ステップS220では、第1入力フラグ210をオフにする。
【0202】
以上のように、第1入力フラグ210がオンになってから(すなわち、第1ユニットが振られたことが検出されてから)10フレーム期間が経過するまでの間は、第1ユニットの振り強さ検出(後述のステップS236)が行われず、すなわちプレイヤによる第1ユニットの振り操作が受け付けられない状態となる。これにより、プレイヤが行った一回の振り操作が、複数フレームにわたって連続して検出されてしまうことを防止することがで
きる。
【0203】
なお、後述の説明により明らかとなるが、第1入力フラグ210がオンになってから5フレーム期間が経過するまでの間に第2ユニットが振られたことが検出された場合には、その時点で同時入力フラグ214がオンになるので、その時点からさらに20フレーム期間が経過するまでの間は、プレイヤによる第1ユニットの振り操作が受け付けられない状態となる。なお、同時入力フラグ214がオフになると、第1ユニットの振り強さ検出(後述のステップS236)と第2ユニットの振り強さ検出(後述のステップS250)が同時に再開されるので、第1ユニットの振り操作の受け付け再開タイミングと第2ユニットの振り操作の受け付け再開タイミングが一致することになる。
【0204】
ステップS222では、第2入力フラグ212がオンであるかどうかを判断し、第2入力フラグ212がオンである場合には処理はステップS224に進み、オンでない場合には処理は図23のステップS234に進む。
【0205】
ステップS224では、第2タイマ218に1を加算する。
【0206】
ステップS226では、第2タイマ218が5であるかどうかを判断し、第2タイマ218が5である場合(すなわち、第2ユニットのみが振られた場合)には処理はステップS228に進み、5でない場合には処理はステップS230に進む。
【0207】
ステップS228では、キャラクタが左旋回するように向きベクトルを変更する。
【0208】
ステップS230では、第2タイマ218が10より大きいかどうかを判断し、第2タイマ218が10より大きい場合には処理はステップS232に進み、10より大きくない場合には処理は図23のステップS234に進む。
【0209】
ステップS232では、第2入力フラグ212をオフにする。
【0210】
以上のように、第2入力フラグ212がオンになってから(すなわち、第2ユニットが振られたことが検出されてから)10フレーム期間が経過するまでの間は、第2ユニットの振り強さ検出(後述のステップS250)が行われず、すなわちプレイヤによる第2ユニットの振り操作が受け付けられない状態となる。これにより、プレイヤが行った一回の振り操作が、複数フレームにわたって連続して検出されてしまうことを防止することができる。
【0211】
なお、後述の説明により明らかとなるが、第2入力フラグ212がオンになってから5フレーム期間が経過するまでの間に第1ユニットが振られたことが検出された場合には、その時点で同時入力フラグ214がオンになるので、その時点からさらに20フレーム期間が経過するまでの間は、プレイヤによる第2ユニットの振り操作が受け付けられない状態となる。なお、同時入力フラグ214がオフになると、第1ユニットの振り強さ検出(後述のステップS236)と第2ユニットの振り強さ検出(後述のステップS250)が同時に再開されるので、第1ユニットの振り操作の受け付け再開タイミングと第2ユニットの振り操作の受け付け再開タイミングが一致することになる。すなわち、後述の通り、本実施例では、第1ユニットの振り検出のタイミングと第2ユニットの振り検出のタイミングが多少ずれていても同時振りと認識するが、この場合でも、第1ユニットの受付再開タイミングと第2ユニットの受付再開タイミングが同時となるので、同時振り操作後に再度同時振り操作をした場合に、後の同時振り操作において片方の振り検出だけがされるような問題を解決できる。なお、同時入力フラグがオンになった後の受け付け禁止期間を、10フレーム(すなわち、第1ユニットや第2ユニットのみが振られた後の受け付け禁止
期間と同じ期間)としてもよい。また、同時入力フラグがオンになった場合の受け付け禁止期間は、本実施例では、2つの振り検出タイミングのうち、後の振りタイミングを始期としたが、先の振りタイミングを始期としてそこから20フレームなどとしてもよく、また、中間のタイミング(先の振りタイミングと後の振りタイミングの間のタイミング(例えば、ちょうど真ん中Nタイミングなど)としてもよい。
【0212】
図23のステップS234では、第1入力フラグ210がオンであるかどうかを判断し、第1入力フラグ210がオンである場合には処理はステップS248に進み、オンでない場合には処理はステップS236に進む。
【0213】
ステップS236では、第1ユニットに関する振り強さ検出を行う。以下、この振り強さ検出の詳細を図25を参照して説明する。
【0214】
図25のステップS268では、加速度センサ(ここでは第1加速度センサ)の出力値(出力ベクトル)を取得する。ここでは、加速度センサのX軸方向の出力値をAxとし、Y軸方向の出力値をAyとし、Z軸方向の出力値をAzとする。
【0215】
ステップS270では、ステップS268で取得した第1加速度センサの出力ベクトル(Ax,Ay,Az)の大きさ(すなわち、√(Ax2+Ay2+Az2))がK(Kは所
定値)よりも大きいかどうかを判断する。第1加速度センサの出力ベクトルの大きさがKよりも大きい場合(振り操作があったと判断される)には、処理はステップS272に進み、第1加速度センサの出力ベクトルの大きさがKよりも大きくない場合(振り操作がなかったと判断される)には、処理はステップS274に進む。
【0216】
ステップS272では、第1加速度センサの出力ベクトルの大きさを、振り強さ検出の戻り値Xとして返す。通常、第1ユニットを勢いよく振るほど第1加速度センサの出力ベクトルの大きさはより大きくなるので、この戻り値Xは、第1ユニットの振りの強さを反映する値となる。その後、処理は図23のステップS238に進む。なお、このフローチャートでは、出力ベクトルの大きさがKより大きくなったときに、すぐにそのときの出力ベクトルの大きさを戻り値Xとして返すようになっているが、変形例として、出力ベクトルの大きさがKより大きくなった後、そのことを示す状態フラグを保持しておいて、その後出力ベクトルが最大となったとき(出力ベクトルの大きさが増加した後減少する地点)の出力ベクトル値を返すようにしてもよい。
【0217】
なお、本実施例では、単に、出力ベクトルの大きさが所定以上であることを振り操作の判定条件としたが、より正確に振りの判定をしてもよい。すなわち、振り操作があったとき、一般的には、加速度センサの出力は以下のように変化する。
(a)0→(b)出力増加→(c)最大→(d)出力減少→(e)0→(f)反対方向への出力増加→(g)反対方向への出力最大→(h)反対方向への出力減少→(i)0
そこで、現在から所定期間前までにおける加速度センサの出力値の履歴を常に保存しておいて、当該履歴が上記のような出力遷移になっているかを検出するようにしてもよい。また、処理を簡略化して、当該履歴が上記のような出力遷移の一部と一致しているかを検出するようにしてもよい。また、この場合、(a)から(i)のうちどの時点の出力値を利用するかは任意に決めて良い((a)から(j)以外の点、例えば、出力増加中の所定閾値になった時点などでも良い)。
【0218】
また、振り操作の検出に代えて、所定動作(所定パターンの動き操作)を検出するようにしてもよい。例えば、所定方向に動かす動作などが考えられる。この場合も、加速度センサの出力値の履歴を保存しておいて、当該履歴が所定パターンと一致するかどうかを検出するようにしてもよい。
【0219】
上述の変形例は、本実施形態以外の実施形態についても同様に当てはまる。
【0220】
ステップS274では、振り強さ検出の検出結果として、「振り操作なし」を示す値を返す。その後、処理は図23のステップS238に進む。
【0221】
ステップS238では、ステップS236の振り強さ検出の検出結果に基づいて、第1ユニットの振り操作があったかどうかを判断し、第1ユニットの振り操作があった場合には処理はステップS240に進み、第1ユニットの振り操作がなかった場合には処理はステップS248に進む。
【0222】
ステップS240では、第2入力フラグ212がオンでありかつ第2タイマ218が4以下であるかどうかを判断する。第2入力フラグ212がオンであり、なおかつ第2タイマ218が4以下である場合(すなわち第1ユニットと第2ユニットがほぼ同時に振られた場合)には、処理はステップS242に進み、第2入力フラグ212がオンでない、もしくは第2タイマ218が4以下でない場合には、処理はステップS246に進む。なお、第2ユニットが振られてから4フレーム期間の間に第1ユニットが振られた場合に「第1ユニットと第2ユニットが同時に振られた」と判断しているのは、プレイヤが第1ユニットと第2ユニットを同時に振ったつもりでも、それらの振り操作が必ずしも厳密に同時とは限らないからである。つまり、第1ユニットが振られたことが検出されたタイミングと第2ユニットが振られたことが検出されたタイミングとの間に数フレーム期間の間隔があった場合でも「第1ユニットと第2ユニットが同時に振られた」と判断することで、より良好な操作性が得られる。
【0223】
ステップS242では、ステップS236の第1ユニットに関する振り強さ検出の戻り値X(第1ユニットの振りの強さを反映する値)と、後述するステップS260で設定された第2振り強さ値208(第2ユニットの振りの強さを反映する値)とに応じて、キャラクタの速度データを増加させる。例えば、現在の速度データに戻り値Xに比例した数値と第2振り強さ値208に比例した数値を乗算することによって、新たな速度データを決定してもよい。または、戻り値Xに第1係数を掛けた数値と、第2振り強さ値に第2係数を掛けた数値を現在の速度データに加算してもよい(第1係数と第2係数は同じであってもよいし、異なっても良い)。または、戻り値Xと第2振り強さ値の平均値に所定係数を掛けた数値を現在の速度データに加算してもよい。
なお、振りの強さ検出の戻り値として、加速度センサの出力値のうち所定方向の成分の大きさのみを利用しても良い。
【0224】
ステップS244では、同時入力フラグ214をオンにし、同時入力タイマ220を0にリセットしてスタートさせ、第2入力フラグ212をオフにする。
【0225】
ステップS246では、第1入力フラグ210をオンにし、第1タイマ216を0にリセットしてスタートさせ、第1振り強さ値206にステップS236の第1ユニットの振り強さ検出の戻り値Xを設定する。
【0226】
ステップS248では、第2入力フラグ212がオンであるかどうかを判断し、第2入力フラグ212がオンである場合には処理はステップS250に進み、オンでない場合には処理は図24のステップS262に進む。
【0227】
ステップS250では、第2ユニットに関して、ステップS236と同様に振り強さ検出を行う。すなわち、第2加速度センサの出力ベクトルの大きさがKより大きい場合には、振り強さ検出の戻り値Xとして、第2加速度センサの出力ベクトルの大きさ(第2ユニ
ットの振りの強さを反映する値)が返される。
【0228】
ステップS252では、ステップS250の振り強さ検出の検出結果に基づいて、第2ユニットの振り操作があったかどうかを判断し、第2ユニットの振り操作があった場合には処理はステップS254に進み、第2ユニットの振り操作がなかった場合には処理は図24のステップS262に進む。
【0229】
ステップS254では、第1入力フラグ210がオンでありかつ第1タイマ216が4以下であるかどうかを判断する。第1入力フラグ210がオンであり、なおかつ第1タイマ216が4以下である場合(すなわち第1ユニットと第2ユニットがほぼ同時に振られた場合)には、処理はステップS256に進み、第1入力フラグ210がオンでない、もしくは第1タイマ216が4以下でない場合には、処理はステップS260に進む。
【0230】
ステップS256では、ステップS250の第2ユニットに関する振り強さ検出の戻り値X(第2ユニットの振りの強さを反映する値)と、ステップS246で設定された第1振り強さ値206(第1ユニットの振りの強さを反映する値)とに応じて、速度データを増加させる。例えば、現在の速度データに戻り値Xに比例した数値と第1振り強さ値206に比例した数値を乗算することによって、新たな速度データを決定してもよい。
【0231】
ステップS258では、同時入力フラグ214をオンにし、同時入力タイマ220を0にリセットし、第1入力フラグ210をオフにする。
【0232】
ステップS260では、第2入力フラグ212をオンにし、第2タイマ218を0にリセットし、第2振り強さ値208にステップS250の第2ユニットの振り強さ検出の戻り値Xを設定する。
【0233】
図24のステップS262では、速度データと向きベクトルに基づいて、現在位置データを更新する。これにより、ゲーム世界のキャラクタは、向きベクトルが示す方向に向かって速度データが示す距離だけ移動する。
【0234】
ステップS264では、モニタ2に表示されているゲーム画像を、現在位置データに基づいて更新する。
【0235】
ステップS266では、速度データを所定量だけ減少する。これは、ソリと地面の摩擦の影響をキャラクタの速度に反映させるための処理である。
【0236】
その後、以上のような処理が繰り返されることにより、プレイヤの操作に応じてゲーム画像が随時変化する。
【0237】
以上のように、本実施形態によれば、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイが可能となる。また、操作ユニットを振ることによってキャラクタを制御することができるので、直感的な操作が可能となり、良好な操作性が得られる。また、操作ユニットを強く振るほどキャラクタの加速度が大きくなるので、より直感的な操作が可能となる。
【0238】
なお、本実施形態では3軸の加速度センサを用いる例を説明したが、1軸の加速度センサを用いても操作ユニットの振り操作および振り強さを検出することができる(例えば、図16におけるZ軸の出力値だけを参照しても、操作ユニットが振られたことと、その強さを検出することができる)ため、本実施形態と同様の効果を得ることができる。
【0239】
(第3の実施形態)
第3の実施形態における表示画像は、例えば図19と同様である。本実施形態では、プレイヤは、第1ユニットまたは第2ユニットを振ることによって、キャラクタの動作を制御することができる。
【0240】
図26に、第3の実施形態におけるプレイヤの操作とキャラクタの動作の対応関係の一例を示す。第1ユニットが連続して振られた場合にはキャラクタは右旋回し、第2ユニットが連続して振られた場合にはキャラクタは左旋回する。また、第1ユニットと第2ユニットが交互に振られた場合にはキャラクタはその時点での進行方向に加速する。
【0241】
図27は、第3の実施形態におけるメインメモリ33のメモリマップの一例である。メインメモリ33には、ゲームプログラム300、ゲーム画像データ302、キャラクタ制御データ304、操作履歴情報306、および振り間隔タイマ308が格納される。
【0242】
ゲーム画像データ302およびキャラクタ制御データ304については、第1の実施形態と同様のため、説明を省略する。
【0243】
操作履歴情報306は、プレイヤによって振られた操作ユニットの種類(第1ユニットまたは第2ユニット)を過去2回分について示す情報である。
【0244】
振り間隔タイマ308は、プレイヤが第1ユニットまたは第2ユニットを直前に振ってからの経過時間(経過フレーム数)を示す値である。
【0245】
次に、図28〜図30のフローチャートを参照して、ゲームプログラム300に基づくCPU30の処理の流れを説明する。
【0246】
図28において、ゲームプログラム300の実行が開始されると、CPU30は、まずステップS300で、ゲーム処理に利用する各種データ(キャラクタ制御データ204や操作履歴情報306や振り間隔タイマ308など)の初期化を行い、キャラクタを含むゲーム画像を生成してモニタ2の画面に表示する。
【0247】
ステップS302では、第1ユニットに関する振り操作検出を行う。以下、この振り操作検出の詳細を図30を参照して説明する。
【0248】
図30のステップS346では、加速度センサ(ここでは第1加速度センサ)の出力値(出力ベクトル)を取得する。ここでは、加速度センサのX軸方向の出力値をAxとし、Y軸方向の出力値をAyとし、Z軸方向の出力値をAzとする。
【0249】
ステップS348では、ステップS346で取得した第1加速度センサの出力ベクトル(Ax,Ay,Az)の大きさがK(Kは所定値)よりも大きいかどうかを判断する。第1加速度センサの出力ベクトルの大きさがKよりも大きい場合には、処理はステップS350に進み、第1加速度センサの出力ベクトルの大きさがKよりも大きくない場合には、処理はステップS352に進む。
【0250】
ステップS350では、振り操作検出の検出結果として、「振り操作あり」を示す値を返す。その後、処理は図28のステップS304に進む。
【0251】
ステップS352では、振り操作検出の検出結果として、「振り操作なし」を示す値を返す。その後、処理は図28のステップS304に進む。
【0252】
ステップS304では、ステップS302の振り操作検出の検出結果に基づいて、第1ユニットの振り操作があったかどうかを判断し、第1ユニットの振り操作があった場合には処理はステップS306に進み、第1ユニットの振り操作がなかった場合には処理は図29のステップS318に進む。
【0253】
ステップS306では、操作履歴情報306を更新する。具体的には、「前回振られた操作ユニット」に更新前の「今回振られた操作ユニット」の値を設定した後、「今回振られた操作ユニット」に第1ユニットを示す値を設定する。
【0254】
ステップS308では、振り間隔タイマ308を0にリセットする。
【0255】
ステップS310では、今回検出された振り操作が「連続振りの一振り目」かどうかを判断する。より具体的には、操作履歴情報306を参照し、「前回振られた操作ユニット」に第1ユニットおよび第2ユニットのいずれの操作ユニットを示す値も格納されていない場合に、今回検出された振り操作が「連続振りの一振り目」であると判断する。なお、本実施形態では、前回の振り操作と今回の振り操作の時間間隔が60フレーム期間を超えている場合に、今回の振り操作を「連続振りの一振り目」とみなしている。今回検出された振り操作が「連続振りの一振り目」である場合には処理は図29のステップS318に進み、今回検出された振り操作が「連続振りの一振り目」でない場合には処理はステップS312に進む。
【0256】
ステップS312では、操作履歴情報306を参照して、前回振られた操作ユニットが第1ユニットかどうかを判断する。前回振られた操作ユニットが第1ユニットである場合(すなわち第1ユニットが連続して振られた場合)には処理はステップS316に進み、前回振られた操作ユニットが第1ユニットでない場合(すなわち、前回振られた操作ユニットが第2ユニットの場合=第1ユニットと第2ユニットが交互に振られた場合)には処理はステップS314に進む。
【0257】
ステップS314では、速度データを所定量だけ増加させる。なお、変形例として、ステップS302で第1ユニットの振り操作を検出するときに、第2の実施形態と同様に振り強さを検出し、第1ユニットの振り強さが大きいほど速度データをより大きく増加させてもよい。また、前回ユニットが振られたときの振り強さを記憶しておいて、当該振り強さと、今回の第1ユニットの振り強さの両方に基いて速度データを増加させてもよい(例えば、2つの振り強さの合計や平均(加重平均も可、過去の振り強さほど小さい係数にするなど)などに基いて速度データの増加量を決定するなど)。また、第1ユニットと第2ユニットの交互振り操作が続く限り、各回の振りの強さを合計したり平均したりして、当該合計値や平均値などに基いて速度データを増加する量を決定してもよい。
【0258】
ステップS316では、キャラクタが右旋回するように向きベクトルを変更する。ここでも、第1ユニットの振り強さが大きいほどキャラクタをより大きく旋回させてもよい。また、前回ユニットが振られたときの振り強さを記憶しておいて、当該振り強さと、今回の第1ユニットの振り強さの両方に基いて旋回の大きさを決定してもよい。また、第1ユニットの連続入力が続く限り、各回の振りの強さを合計したり平均したりして、当該合計値や平均値などに基いて旋回の大きさを決定してもよい。
【0259】
図29のステップS318では、第2ユニットに関して、ステップS302と同様に振り操作検出を行う。
【0260】
ステップS320では、ステップS318の振り操作検出の検出結果に基づいて、第2ユニットの振り操作があったかどうかを判断し、第2ユニットの振り操作があった場合に
は処理はステップS322に進み、第2ユニットの振り操作がなかった場合には処理はステップS334に進む。
【0261】
ステップS322では、操作履歴情報306を更新する。具体的には、「前回振られた操作ユニット」に更新前の「今回振られた操作ユニット」の値を設定した後、「今回振られた操作ユニット」に第2ユニットを示す値を設定する。
【0262】
ステップS324では、振り間隔タイマ308を0にリセットする。
【0263】
ステップS326では、今回検出された振り操作が「連続振りの一振り目」かどうかを判断する。今回検出された振り操作が「連続振りの一振り目」である場合には処理はステップS334に進み、今回検出された振り操作が「連続振りの一振り目」でない場合には処理はステップS328に進む。
【0264】
ステップS328では、操作履歴情報306を参照して、前回振られた操作ユニットが第2ユニットかどうかを判断する。前回振られた操作ユニットが第2ユニットである場合(すなわち第2ユニットが連続して振られた場合)には処理はステップS332に進み、前回振られた操作ユニットが第2ユニットでない場合(すなわち、前回振られた操作ユニットが第1ユニットである場合=第1ユニットと第2ユニットが交互に振られた場合)には処理はステップS330に進む。
【0265】
ステップS330では、速度データを所定量だけ増加させる。なお、変形例として、ステップS318で第2ユニットの振り操作を検出するときに、第2の実施形態と同様に振り強さも検出し、第2ユニットの振り強さが大きいほど速度データをより大きく増加させてもよい。
【0266】
ステップS332では、キャラクタが左旋回するように向きベクトルを変更する。ここでも、第2ユニットの振り強さが大きいほどキャラクタをより大きく旋回させてもよい。
【0267】
ステップS334では、振り間隔タイマ308に1を加算する。
【0268】
ステップS336では、振り間隔タイマ308が60を超えたかどうかを判断する。振り間隔タイマ308が60を超えた場合には処理はステップS338に進み、振り間隔タイマ308が60を超えていない場合には処理はステップS340に進む。
【0269】
ステップS338では、操作履歴情報306をクリアする。
【0270】
ステップS340では、速度データと向きベクトルに基づいて、現在位置データを更新する。これにより、ゲーム世界のキャラクタは、向きベクトルが示す方向に向かって速度データが示す距離だけ移動する。
【0271】
ステップS342では、モニタ2に表示されているゲーム画像を、現在位置データに基づいて更新する。
【0272】
ステップS344では、速度データを所定量だけ減少する。その後、処理は図28のステップS302に戻る。
【0273】
以上のように、本実施形態によれば、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイが可能となる。また、操作ユニットを振ることによってキャラクタを制御することができるので、直感
的な操作が可能となり、良好な操作性が得られる。
【0274】
なお、本実施形態では3軸の加速度センサを用いる例を説明したが、第2の実施形態と同様に、1軸の加速度センサを用いても本実施形態と同様の効果を得ることができる。
【0275】
なお、本実施形態では、第1ユニットの連続振り、第2ユニットの連続振り、第1ユニットと第2ユニットの交互振りを検出して、それぞれの検出に応じたゲーム制御をおこなったが、変形例として、連続する振りパターンが所定パターンであることを検出するようにしてもよい。例えば、第1ユニット振り→第2ユニット振り→第2ユニット振り→第1ユニット振りというパターン(このパターンに限らず、適宜パターンが設定されてよい)になったことを検出して、所定のゲーム処理(例えば、キャラクタに攻撃動作をさせるなど)をしてもよい。
【0276】
また、本実施例では、各回の振りの間隔が所定時間以内(60フレーム以内)であるときに連続した振りまたは交互の振りであると判断したが、これに限らず、一回目の振りから所定時間以内の振りを連続した振りまたは交互の振りであると判断してもよいし、振りが連続するほど、許容する間隔を長くする(または短くする)ようにしてもよい。
【0277】
(第4の実施形態)
第4の実施形態における表示画像は、例えば図19と同様である。本実施形態では、第1ユニットおよび第2ユニットのうちの一方を傾け操作用ユニットとして利用し、他方を振り操作用ユニットとして利用する。プレイヤは、傾け操作用ユニットを傾けたり、振り操作用ユニットを振ったりすることによって、キャラクタの動作を制御することができる。
【0278】
図31に、第4の実施形態におけるプレイヤの操作とキャラクタの動作の対応関係の一例を示す。傾け操作用ユニットが右側に傾けられた場合にはキャラクタは右旋回し、傾け操作用ユニットが左側に傾けられた場合にはキャラクタは左旋回する。また、振り操作用ユニットが振られた場合にはキャラクタはその時点での進行方向に加速する。
【0279】
図32は、第4の実施形態におけるメインメモリ33のメモリマップの一例である。メインメモリ33には、ゲームプログラム400、ゲーム画像データ402、キャラクタ制御データ404、傾け操作用ユニット指定データ406、および振り操作用ユニット指定データ408が格納される。
【0280】
ゲーム画像データ402およびキャラクタ制御データ404については、第1の実施形態と同様のため、説明を省略する。
【0281】
傾け操作用ユニット指定データ406は、第1ユニットおよび第2ユニットのいずれの操作ユニットを傾け操作用ユニットとして利用するかを示すデータである。また、振り操作用ユニット指定データ408は、第1ユニットおよび第2ユニットのいずれの操作ユニットを振り操作用ユニットとして利用するかを示すデータである。
【0282】
次に、図33〜図35のフローチャートを参照して、ゲームプログラム400に基づくCPU30の処理の流れを説明する。
【0283】
図33において、ゲームプログラム400の実行が開始されると、CPU30は、まずステップS400で、ゲーム処理に利用する各種データ(キャラクタ制御データ204など)の初期化を行い、傾け操作用ユニット指定データ406に第1ユニットを示す1を初期値として格納し、振り操作用ユニット指定データ408に第2ユニットを示す2を初期
値として格納する。さらに、キャラクタを含むゲーム画像を生成してモニタ2の画面に表示する。
【0284】
ステップS402では、プレイヤによって操作ボタン等を用いてユニット役割交換指示が入力されたかどうかを判断し、ユニット役割交換指示があった場合には処理はステップS404に進み、ユニット役割交換指示がなかった場合には処理はステップS406に進む。
【0285】
ステップS404では、傾け操作用ユニット指定データ406の値と、振り操作用ユニット指定データ408の値を入れ替える。
【0286】
上記のような処理により、プレイヤは、好みまたは状況に応じて、第1ユニットの役割と第2ユニットの役割を適宜に変更することができる。なお、このような第1ユニットの役割と第2ユニットの役割の変更は、他の実施形態においても同様の方法で実現可能である。
【0287】
ステップS406では、傾け操作用ユニットに関する傾き検出を行う。以下、この傾き検出の詳細を図34を参照して説明する。
【0288】
図34のステップS424では、傾け操作用ユニットに設けられている加速度センサの出力値(出力ベクトル)を取得する。ここでは、加速度センサのX軸方向の出力値をAxとし、Y軸方向の出力値をAyとし、Z軸方向の出力値をAzとする。
【0289】
ステップS426では、ステップS424で取得した加速度センサの出力ベクトル(Ax,Ay,Az)の大きさが0.8〜1.2の範囲内かどうかを判断する。加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内であった場合には、処理はステップS428に進む。加速度センサの出力ベクトルの大きさが0.8〜1.2の範囲内でなかった場合には、処理はステップS430に進む。
【0290】
ステップS428では、arctan(Ax/Ay)(これは傾け操作用ユニットのZ軸周りの傾きを表している;図36における角度Θ)を算出し、算出された値を傾き検出の戻り値Θとして返す。その後、処理は図33のステップS408に進む。
【0291】
ステップS430では、傾き検出結果としてエラーを返し、傾き検出を終了し、処理は図33のステップS408に進む。
【0292】
ステップS408では、ステップS406の傾き検出結果がエラーかどうかを判断し、エラーであった場合には処理はステップS412に進み、エラーでなかった場合には処理はステップS410に進む。
【0293】
ステップS410では、ステップS406の傾き検出結果の戻り値Θに応じて向きベクトルを回転させる。向きベクトルの変更方法としては種々の方法が考えられる。本実施形態では、一例として、図37に示すように、キャラクタの現在位置における地面の法線ベクトルを回転軸として現在の向きベクトルを戻り値Θだけ回転させることによって得られるベクトルを、新しい向きベクトルとして決定する。
【0294】
ステップS412では、振り操作用ユニットに関する振り操作検出を行う。以下、この振り操作検出の詳細を図35を参照して説明する。
【0295】
図35のステップS432では、振り操作用ユニットに設けられた加速度センサの出力
値(出力ベクトル)を取得する。ここでは、加速度センサのX軸方向の出力値をAxとし、Y軸方向の出力値をAyとし、Z軸方向の出力値をAzとする。
【0296】
ステップS434では、ステップS432で取得した加速度センサの出力ベクトル(Ax,Ay,Az)の大きさがK(Kは所定値)よりも大きいかどうかを判断する。加速度センサの出力ベクトルの大きさがKよりも大きい場合には、処理はステップS436に進み、加速度センサの出力ベクトルの大きさがKよりも大きくない場合には、処理はステップS438に進む。
【0297】
ステップS436では、振り操作検出の検出結果として、「振り操作あり」を示す値を返す。その後、処理は図33のステップS414に進む。
【0298】
ステップS438では、振り操作検出の検出結果として、「振り操作なし」を示す値を返す。その後、処理は図33のステップS414に進む。
【0299】
ステップS414では、ステップS412の振り操作検出の検出結果に基づいて、振り操作用ユニットの振り操作があったかどうかを判断し、振り操作用の振り操作があった場合には処理はステップS416に進み、振り操作用ユニットの振り操作がなかった場合には処理はステップS418に進む。
【0300】
ステップS416では、速度データを所定量だけ増加させる。なお、変形例として、ステップS412で振り操作用ユニットの振り操作を検出するときに、第2の実施形態と同様に振り強さも検出し、振り操作用ユニットの振り強さが大きいほど速度データをより大きく増加させてもよい。
【0301】
ステップS418では、速度データと向きベクトルに基づいて、現在位置データを更新する。これにより、ゲーム世界のキャラクタは、向きベクトルが示す方向に向かって速度データが示す距離だけ移動する。
【0302】
ステップS420では、モニタ2に表示されているゲーム画像を、現在位置データに基づいて更新する。
【0303】
ステップS422では、速度データを所定量だけ減少する。その後、処理はステップS402に戻る。
【0304】
以上のように、本実施形態によれば、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイが可能となる。また、傾け操作用ユニットを傾けることによってキャラクタを旋回させ、振り操作用ユニットを振ることによってキャラクタを加速させることができるので、直感的な操作が可能となり、良好な操作性が得られる。
【0305】
なお、本実施形態では3軸の加速度センサを用いる例を説明したが、第1の実施形態および第2の実施形態と同様に、1軸の加速度センサを用いても本実施形態と同様の効果を得ることができる。
【0306】
また、後述する実施形態のように、振り操作用ユニットが振られたときの振り操作の方向を検出し、検出された方向に応じてキャラクタの加速方向やその大きさを変化させてもよい。
【0307】
(第5の実施形態)
第5の実施形態における表示画像は、例えば図19と同様である。本実施形態では、第1ユニットおよび第2ユニットが振られた方向(動いた方向)に基づいてキャラクタの動作が制御される。
【0308】
図38に、第5の実施形態におけるプレイヤの操作とキャラクタの動作の対応関係の一例を示す。第1ユニットまたは第2ユニットのいずれか一方の操作ユニットのみが斜め右向こう側(右斜め前方;なお、前方とはプレイヤが向いている方向)に振られた場合には、キャラクタは右前方に向かって少しだけ加速する。第1ユニットまたは第2ユニットのいずれか一方の操作ユニットのみが斜め左手前側(左斜め後方:なお、後方とはプレイヤが向いている方向と逆方向)に振られた場合には、キャラクタは左後方に向かって少しだけ加速する。このように本実施形態では、基本的には操作ユニットが振られた方向(現実世界におけるプレイヤ前方を基準とする方向)に対応する方向(仮想空間におけるキャラクタ前方を基準とする方向)にキャラクタが加速する。
【0309】
また、第1ユニットと第2ユニットが同時に斜め右向こう側に振られた場合には、キャラクタは右前方に向かって大きく加速する。このように本実施形態では、第1ユニットと第2ユニットが同時に振られ、かつそれらの振られた方向が一致している場合には、キャラクタが大きく加速する。
【0310】
また、第1ユニットまたは第2ユニットのいずれか一方の操作ユニットが右側に振られ、他方のユニットが向こう側に振られた場合には、キャラクタは右前方に少しだけ加速する。このように本実施形態では、第1ユニットと第2ユニットが同時に振られ、かつそれらの方向が一致していない場合には、第1ユニットが振られた方向と第2ユニットが振られた方向とを合成した方向に基づいて、キャラクタの加速方向が決定される。
【0311】
また、第1ユニットと第2ユニットが同時にかつ互いに逆側に振られた場合には、キャラクタは停止する。
【0312】
図39は、第5の実施形態におけるメインメモリ33のメモリマップの一例である。メインメモリ33には、ゲームプログラム500、ゲーム画像データ502、キャラクタ制御データ504、第1振り方向ベクトル506、第2振り方向ベクトル508、第1入力フラグ510、第2入力フラグ512、同時入力フラグ514、第1タイマ516、第2タイマ518、同時入力タイマ520、第1サンプリングデータ522、および第2サンプリングデータ524が格納される。
【0313】
ゲーム画像データ502については、第1の実施形態と同様のため、説明を省略する。
【0314】
キャラクタ制御データ504は、現在位置データと、キャラクタの移動速度の大きさと方向を示す速度ベクトルと、キャラクタの姿勢を示す姿勢マトリクスとを含んでいる。現在位置データは3次元座標値で表されるデータであり、速度ベクトルは3次元のベクトルで表されるデータである。姿勢マトリクスは、キャラクタの前方を示す3次元の単位ベクトルである前方ベクトルと、キャラクタの右手方向を示す3次元の単位ベクトルである右方ベクトルと、キャラクタの上方を示す3次元の単位ベクトルである上方ベクトルの3つの単位ベクトルの集合である。
【0315】
第1振り方向ベクトル506は、ユーザによって第1ユニットが振られた方向を示すベクトルである。第2振り方向ベクトル508は、ユーザによって第2ユニットが振られた方向を示すベクトルである。
【0316】
第1入力フラグ510、第2入力フラグ512、同時入力フラグ514、第1タイマ5
16、第2タイマ518、および同時入力タイマ520については、第2の実施形態と同様であるので説明を省略する。
【0317】
第1サンプリングデータ522は、第1ユニットに設けられた第1加速度センサの出力値の直近の60フレーム分のサンプリングデータである。第2サンプリングデータ524は、第2ユニットに設けられた第2加速度センサの出力値の直近の60フレーム分のサンプリングデータである。
【0318】
次に、図40〜図44のフローチャートを参照して、ゲームプログラム500に基づくCPU30の処理の流れを説明する。
【0319】
図40において、ゲームプログラム500の実行が開始されると、CPU30は、まずステップS500で、ゲーム処理に利用する各種データ(キャラクタ制御データ204や第1振り方向ベクトル506や第1入力フラグ510や第1タイマ516や第1サンプリングデータ522など)の初期化を行い、キャラクタを含むゲーム画像を生成してモニタ2の画面に表示する。
【0320】
ステップS502では、第1加速度センサの出力値と第2加速度センサの出力値を取得し、第1サンプリングデータ522および第2サンプリングデータ524を更新する。
【0321】
ステップS504では、同時入力フラグ514がオンであるかどうかを判断し、同時入力フラグ514がオンである場合には処理はステップS506に進み、オンでない場合には処理はステップS512に進む。
【0322】
ステップS506では、同時入力タイマ520に1を加算する。
【0323】
ステップS508では、同時入力タイマ520が20以上であるかどうかを判断し、同時入力タイマ520が20以上である場合には処理はステップS510に進み、20以上でない場合には処理は図43のステップS596に進む。
【0324】
ステップS510では、同時入力フラグ514をオフにし、処理は図43のステップS596に進む。
【0325】
ステップS512では、第1入力フラグ510がオンであるかどうかを判断し、第1入力フラグ510がオンである場合には処理はステップS514に進み、オンでない場合には処理はステップS526に進む。
【0326】
ステップS514では、第1タイマ516に1を加算する。
【0327】
ステップS516では、第1タイマ516が5であるかどうかを判断し、第1タイマ516が5である場合(すなわち、第1ユニットのみが振られた場合)には処理はステップS518に進み、5でない場合には処理はステップS522に進む。
【0328】
ステップS518では、第1ユニットの振り方向検出(後述のステップS542)によって検出された第1振り方向ベクトル506に基づいて速度ベクトルを変更する。速度ベクトルの変更方法としては種々の方法が考えられる。本実施形態では、一例として、図45に示すように、第1振り方向ベクトル506のX軸値をa1、Z軸値をb1とすると、現在のベクトルと、(右方ベクトル×a1+前方ベクトル×b1)で表されるベクトルとを合成することによって、新しい速度ベクトルを決定する。したがって、第1振り方向ベクトル506のX軸値が大きいほど、キャラクタは右方ベクトルの方向に大きく加速し、
第1振り方向ベクトル506のZ軸値が大きいほど、キャラクタは前方ベクトルの方向に大きく加速する。
【0329】
ステップS520では、前方ベクトルの方向が、ステップS518で更新された速度ベクトルの方向に一致するように、姿勢マトリクスを更新する。
【0330】
ステップS522では、第1タイマ516が10より大きいかどうかを判断し、第1タイマ516が10より大きい場合には処理はステップS524に進み、10より大きくない場合には処理はステップS526に進む。
【0331】
ステップS524では、第1入力フラグ510をオフにする。
【0332】
ステップS526では、第2入力フラグ512がオンであるかどうかを判断し、第2入力フラグ512がオンである場合には処理はステップS528に進み、オンでない場合には処理は図41のステップS540に進む。
【0333】
ステップS528では、第2タイマ518に1を加算する。
【0334】
ステップS530では、第2タイマ518が5であるかどうかを判断し、第2タイマ518が5である場合(すなわち、第2ユニットのみが振られた場合)には処理はステップS532に進み、5でない場合には処理はステップS536に進む。
【0335】
ステップS532では、第2ユニットの振り方向検出(後述のステップS570)によって検出された第2振り方向ベクトル508に基づいて速度ベクトルを変更する。速度ベクトルの変更方法は、前述のステップS518と同様である。
【0336】
ステップS534では、前方ベクトルの方向が、ステップS532で更新された速度ベクトルの方向に一致するように、姿勢マトリクスを更新する。
【0337】
ステップS536では、第2タイマ518が10より大きいかどうかを判断し、第2タイマ518が10より大きい場合には処理はステップS538に進み、10より大きくない場合には処理は図41のステップS540に進む。
【0338】
ステップS538では、第2入力フラグ512をオフにする。
【0339】
図41のステップS540では、第1入力フラグ510がオンであるかどうかを判断し、第1入力フラグ510がオンである場合には処理は図42のステップS568に進み、オンでない場合には処理はステップS542に進む。
【0340】
ステップS542では、第1ユニットに関する振り方向検出を行う。以下、この振り方向検出の詳細を図44を参照して説明する。
【0341】
図44のステップS604では、第1サンプリングデータ522を参照し、2番目に新しい第1加速度センサの検出値(Ax,Ay,Az)のX軸値とZ軸値で示されるベクトル(以下、XZベクトルと称す)の大きさ(すなわち、√(Ax2+Az2))がL(Lは所定値)よりも大きいかどうかを判断する。2番目に新しい第1加速度センサの検出値のXZベクトルの大きさがLよりも大きい場合(振り操作があったと判断される)には、処理はステップS606に進み、Lよりも大きくない場合(振り操作がなかったと判断される)には、処理はステップS610に進む。
【0342】
ステップS606では、第1サンプリングデータ522を参照し、2番目に新しい第1加速度センサの検出値のXZベクトルの大きさが、最新の第1加速度センサの検出値のXZベクトルの大きさよりも大きいかどうかを判断する。これは、第1加速度センサに対して、XZ平面と平行な方向に最も大きい力が加わったタイミングを検出するための処理である。プレイヤが第1ユニットをXZ平面と平行な方向に振ると、振り始め直後と振り終わり間際において第1ユニット(第1加速度センサ)にプレイヤによって大きな力が加えられるので、第1加速度センサの検出値のXZベクトルの大きさは、振り始め直後と振り終わり間際において極大となる。2番目に新しい第1加速度センサの検出値のXZベクトルの大きさが、最新の第1加速度センサの検出値のXZベクトルの大きさよりも大きい場合(すなわち第1加速度センサの検出値のXZベクトルの大きさが極大値となった直後)には、処理はステップS608に進み、2番目に新しい第1加速度センサの検出値のXZベクトルの大きさが、最新の第1加速度センサの検出値のXZベクトルの大きさよりも大きくない場合には、処理はステップS610に進む。
【0343】
ステップS608では、振り方向検出の戻り値として、2番目に新しい第1加速度センサの検出値のXZベクトル(Ax,Az)を返す。このXZベクトル(Ax,Az)は、プレイヤが第1ユニットを振ったときに、第1ユニットに加えられた力の方向(すなわち第1ユニットが振られた方向)を示している。その後、処理は図41のステップS544に進む。
なお、XZベクトルがL以上である期間のXZベクトルを平均することなどにより振り方向を求めても良い。
【0344】
なお、振り方向検出によって検出されるXZベクトルは、振り方向の検出方法によっては実際に操作ユニットが振られたときの移動方向とは逆方向を示す場合がある。このような場合には、振り方向検出の戻り値として、検出されたXZベクトルに−1を乗算した結果の値を返せばよい。
【0345】
ステップS610では、振り方向検出の戻り値として、「振り操作なし」を示す値を返す。その後、処理は図41のステップS544に進む。
【0346】
ステップS544では、ステップS542の振り方向検出の検出結果に基づいて、第1ユニットの振り操作があったかどうかを判断し、第1ユニットの振り操作があった場合には処理はステップS546に進み、第1ユニットの振り操作がなかった場合には処理は図42のステップS568に進む。
【0347】
ステップS546では、第1振り方向ベクトル506に、ステップS542の振り方向検出の戻り値(すなわち第1ユニットが振られた方向を示すベクトル)を設定する。
【0348】
ステップS548では、第2入力フラグ512がオンでありかつ第2タイマ518が4以下であるかどうかを判断する。第2入力フラグ512がオンであり、なおかつ第2タイマ518が4以下である場合(すなわち第1ユニットと第2ユニットがほぼ同時に振られた場合)には、処理はステップS550に進み、第2入力フラグ512がオンでない、もしくは第2タイマ518が4以下でない場合には、処理はステップS566に進む。
【0349】
ステップS550では、第1振り方向ベクトル506と、後述のステップS574で設定された第2振り方向ベクトル508(第2ユニットが振られた方向を示すベクトル)のなす角度が−30°〜30°の範囲内であるかどうかを判断する。第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が−30°〜30°の範囲内であった場合(すなわち第1ユニットと第2ユニットがほぼ同じ方向に振られた場合)には、処理はステップS552に進み、第1振り方向ベクトル506と第2振り方向ベクトル508の
なす角度が−30°〜30°の範囲内でなかった場合には、処理はステップS558に進む。なお、−30°〜30°という値は一例であり、これより狭い範囲であってもよいし、広い範囲であってもよく、ほぼ同じ方向であるとみなされる範囲であれば良い。
【0350】
ステップS552では、第1振り方向ベクトル506と第2振り方向ベクトル508に基づいて速度ベクトルを変更する。速度ベクトルの変更方法としては種々の方法が考えられる。本実施形態では、一例として、図46に示すように、第1振り方向ベクトル506と第2振り方向ベクトル508を合成して合成振り方向ベクトルを求める。そして、この合成振り方向ベクトルのX軸値をa3、Z軸値をb3とすると、現在のベクトルと、(右方ベクトル×a3+前方ベクトル×b3)×α(所定の定数)で表されるベクトルとを合成することによって、新しい速度ベクトルを決定する。αは定数であって、ステップS552ではα=2となる。つまり、ステップS552では、現在のベクトルと大きさを2倍にした合成ベクトルとを合成することによって、新しい速度ベクトルが決定される。なお、ステップS552において、第1振り方向ベクトルまたは第2振り方向ベクトルを2倍したベクトルを合成ベクトルとみなしてもよい。
【0351】
ステップS554では、前方ベクトルの方向が、ステップS552で更新された速度ベクトルの方向に一致するように、姿勢マトリクスを更新する。
【0352】
ステップS556では、同時入力フラグ514をオンにし、同時入力タイマ520を0にリセットし、第2入力フラグ512をオフにする。
【0353】
ステップS558では、第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が150°〜180°の範囲内または−150°〜−180°の範囲内であるかどうかを判断する。第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が150°〜180°の範囲内または−150°〜−180°の範囲内であった場合(すなわち第1ユニットと第2ユニットがほぼ逆方向に振られた場合)には、処理はステップS560に進む。第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が150°〜180°の範囲内でなく、かつ−150°〜−180°の範囲内でもなかった場合には、処理はステップS562に進む。なお、150°〜180°、−150°〜−180°という値は一例であり、これより狭い範囲であってもよいし、広い範囲であってもよく、ほぼ逆方向であるとみなされる範囲であれば良い。
【0354】
ステップS560では、速度ベクトルを0に変更し、処理はステップS556に進む。
【0355】
ステップS562では、ステップS552と同様に、第1振り方向ベクトル506と第2振り方向ベクトル508を合成して合成振り方向ベクトルを求め、そして、この合成振り方向ベクトルのX軸値をa3、Z軸値をb3とすると、現在のベクトルと、(右方ベクトル×a3+前方ベクトル×b3)×α(所定の定数)で表されるベクトルとを合成することによって、新しい速度ベクトルを決定する。ステップS562ではα=1.5となる。つまり、ステップS562では、現在のベクトルと大きさを1.5倍にした合成ベクトルとを合成することによって、新しい速度ベクトルが決定される。
【0356】
ステップS564では、前方ベクトルの方向が、ステップS562で更新された速度ベクトルの方向に一致するように、姿勢マトリクスを更新する。
【0357】
ステップS566では、第1入力フラグ510をオンにし、第1タイマ516を0にリセットする。
【0358】
図42のステップS568では、第2入力フラグ512がオンであるかどうかを判断し
、第2入力フラグ512がオンである場合には処理は図43のステップS596に進み、オンでない場合には処理はステップS570に進む。
【0359】
ステップS570では、第2ユニットに関する振り方向検出を行う。以下、この振り方向検出の詳細を図44を参照して説明する。
【0360】
図44のステップS604では、第2サンプリングデータ524を参照し、2番目に新しい第2加速度センサの検出値のXZベクトルの大きさがLよりも大きいかどうかを判断する。2番目に新しい第2加速度センサの検出値のXZベクトルの大きさがLよりも大きい場合(振り操作があったと判断される)には、処理はステップS606に進み、Lよりも大きくない場合(振り操作がなかったと判断される)には、処理はステップS610に進む。
【0361】
ステップS606では、第2サンプリングデータ524を参照し、2番目に新しい第2加速度センサの検出値のXZベクトルの大きさが、最新の第2加速度センサの検出値のXZベクトルの大きさよりも大きいかどうかを判断する。2番目に新しい第2加速度センサの検出値のXZベクトルの大きさが、最新の第2加速度センサの検出値のXZベクトルの大きさよりも大きい場合(すなわち第2加速度センサの検出値のXZベクトルの大きさが極大値となった直後)には、処理はステップS608に進み、2番目に新しい第2加速度センサの検出値のXZベクトルの大きさが、最新の第2加速度センサの検出値のXZベクトルの大きさよりも大きくない場合には、処理はステップS610に進む。
【0362】
ステップS608では、振り方向検出の戻り値として、2番目に新しい第2加速度センサの検出値のXZベクトル(Ax,Az)を返す。このXZベクトル(Ax,Az)は、プレイヤが第2ユニットを振ったときに、第2ユニットに加えられた力の方向(すなわち第2ユニットが振られた方向)を示している。その後、処理は図42のステップS572に進む。
【0363】
ステップS610では、振り方向検出の戻り値として、「振り操作なし」を示す値を返す。その後、処理は図42のステップS572に進む。
【0364】
ステップS572では、ステップS570の振り方向検出の検出結果に基づいて、第2ユニットの振り操作があったかどうかを判断し、第2ユニットの振り操作があった場合には処理はステップS574に進み、第2ユニットの振り操作がなかった場合には処理は図43のステップS596に進む。
【0365】
ステップS574では、第2振り方向ベクトル508に、ステップS570の振り方向検出の戻り値(すなわち第2ユニットが振られた方向を示すベクトル)を設定する。
【0366】
ステップS576では、第1入力フラグ510がオンでありかつ第1タイマ516が4以下であるかどうかを判断する。第1入力フラグ510がオンであり、なおかつ第1タイマ516が4以下である場合(すなわち第1ユニットと第2ユニットがほぼ同時に振られた場合)には、処理はステップS578に進み、第2入力フラグ512がオンでない、もしくは第2タイマ518が4以下でない場合には、処理はステップS594に進む。
【0367】
ステップS578では、第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が−30°〜30°の範囲内であるかどうかを判断する。第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が−30°〜30°の範囲内であった場合(すなわち第1ユニットと第2ユニットがほぼ同じ方向に振られた場合)には、処理はステップS580に進み、第1振り方向ベクトル506と第2振り方向ベクトル508の
なす角度が−30°〜30°の範囲内でなかった場合には、処理はステップS586に進む。
【0368】
ステップS580では、前述のステップS552と同様に、現在のベクトルと大きさを2倍にした合成ベクトルとを合成することによって、新しい速度ベクトルを決定する。
【0369】
ステップS582では、前方ベクトルの方向が、ステップS580で更新された速度ベクトルの方向に一致するように、姿勢マトリクスを更新する。
【0370】
ステップS584では、同時入力フラグ514をオンにし、同時入力タイマ520を0にリセットし、第1入力フラグ510をオフにする。
【0371】
ステップS586では、第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が150°〜180°の範囲内または−150°〜−180°の範囲内であるかどうかを判断する。第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が150°〜180°の範囲内または−150°〜−180°の範囲内であった場合(すなわち第1ユニットと第2ユニットがほぼ逆方向に振られた場合)には、処理はステップS588に進む。第1振り方向ベクトル506と第2振り方向ベクトル508のなす角度が150°〜180°の範囲内でなく、かつ−150°〜−180°の範囲内でもなかった場合には、処理はステップS590に進む。
【0372】
ステップS588では、速度ベクトルを0に変更し、処理はステップS584に進む。
【0373】
ステップS590では、ステップS562と同様に、現在のベクトルと大きさを1.5倍にした合成ベクトルとを合成することによって、新しい速度ベクトルを決定する。
【0374】
ステップS592では、前方ベクトルの方向が、ステップS590で更新された速度ベクトルの方向に一致するように、姿勢マトリクスを更新する。
【0375】
ステップS594では、第2入力フラグ512をオンにし、第2タイマ518を0にリセットする。
【0376】
図43のステップS596では、速度ベクトルに基づいて、現在位置データを更新する。
【0377】
ステップS598では、モニタ2に表示されているゲーム画像を、現在位置データと姿勢マトリクスに基づいて更新する。
【0378】
ステップS600では、地形の影響を反映して姿勢マトリクスおよび速度ベクトルを更新する。これは、例えばキャラクタが急な坂を上るときにキャラクタの姿勢をやや仰向けに傾けるとともに、キャラクタの進行方向を坂に沿わせるための処理である。
【0379】
ステップS602では、速度データを所定量だけ減少する。その後、処理は図40のステップS502に戻る。
【0380】
その後、以上のような処理が繰り返されることにより、プレイヤの操作に応じてゲーム画像が随時変化する。
【0381】
本実施形態の処理をまとめると、以下の通りとなる。
(1)第1ユニットと第2ユニットが異なるタイミングで振られたとき→それぞれの振り
方向ベクトルに基いて速度ベクトルが更新される。
(2)第1ユニットと第2ユニットがほぼ同時にほぼ同じ方向に振られたとき→合成ベクトルを2倍したベクトルに基いて速度ベクトルが更新される。
(3)第1ユニットと第2ユニットがほぼ同時に異なる方向(ほぼ逆方向を除く)に振られたとき→合成ベクトルを1.5倍したベクトルに基いて速度ベクトルが更新される。
(4)第1ユニットと第2ユニットがほぼ同時にほぼ逆方向に振られたとき→速度ベクトルが0になる(停止する)。
このように、第1ユニットの振りと第2ユニットの振りのタイミングや相対的方向に基いて、異なるゲーム処理をおこなうため、プレイヤに多様な入力を可能にする。
【0382】
以上のように、本実施形態によれば、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイが可能となる。また、操作ユニットを振ることによってキャラクタを制御することができるので、直感的な操作が可能となり、良好な操作性が得られる。また、2つの操作ユニットを同時に振る際の振る方向が近いほどキャラクタの加速度が大きくなるので、より直感的な操作が可能となる。
【0383】
なお、本実施形態では3軸の加速度センサを用いる例を説明したが、2軸の加速度センサを用いても操作ユニットの振り方向を検出することができる(例えば、図44ではX軸とZ軸の2軸の出力値を参照して、操作ユニットが振られたことと、その方向を検出している)ため、本実施形態と同様の効果を得ることができる。
【0384】
また、本実施形態では、第1ユニットと第2ユニットのいずれか一方だけが振られたときに、その振られた方向に応じてキャラクタを加速させる例を説明したが、これに替えて、第1ユニットと第2ユニットのいずれか一方だけが振られたときにはキャラクタを加速させず、第1ユニットと第2ユニットの両方がほぼ同時に振られたときにだけキャラクタを加速させるようにしてもよい。
【0385】
なお、本実施形態では、振り方向検出において、加速度センサの出力(本実施形態では特にXZベクトル)の大きさが極大値となったことが検出されたときに、その時点近傍の加速度センサの出力に基づいて操作ユニットの振り方向を検出したが、本発明はこれに限らず、他の任意の方法で操作ユニットの振り方向を検出してもよい。例えば、加速度センサのXZベクトルの大きさが一旦所定値を超えてから0に戻ったときに、その期間内のサンプリングデータを参照して、その期間内の加速度センサのXYベクトルのうちで大きさが最大のものを振り方向ベクトルとして設定してもよいし、その期間内の加速度センサのXYベクトルを平均したものを振り方向ベクトルとして設定してもよいし、その期間内の加速度センサのXYベクトルを合成したものを振り方向ベクトルとして設定してもよい。また、加速度センサの出力を積分することによって操作ユニットの移動速度を算出し、こうして算出された移動速度が一定以上である期間の加速度センサの出力に基づいて操作ユニットの振り方向を検出してもよい。
【0386】
また、本実施形態では振りを検出したが、これに限らず、操作ユニットの動きを検出し、その動きの方向とタイミングに基いておこなってもよい。
【0387】
(第6の実施形態)
第6の実施形態における表示画像は、例えば図19と同様である。本実施形態では、第1ユニットおよび第2ユニットが振られた方向に基づいてキャラクタの動作が制御される。
【0388】
図47に、第6の実施形態におけるプレイヤの操作方法の一例を示す。本実施形態では
、プレイヤは、方向指示操作(操作ユニットを水平方向に動かす操作)によって方向を指示し、その後、トリガ操作(操作ユニットを鉛直下方に動かす操作)を行うことによって、方向指示操作によって指示した方向の入力を確定させることができる。方向指示操作における第1ユニットおよび第2ユニットの操作方向と、キャラクタの動作との対応関係は、いくつかの点を除けば図38と同じである。なお、以下では、操作ユニットを動かす操作の一例として振る操作を採用する場合について説明するが、本発明は振り操作に限られず、操作ユニットの動きを検出し、その動きの方向と大きさによっておこなえば十分である。
【0389】
図48は、第6の実施形態におけるメインメモリ33のメモリマップの一例である。メインメモリ33には、ゲームプログラム703、ゲーム画像データ704、キャラクタ制御データ705、第1振り方向ベクトル709、第2振り方向ベクトル710、第1入力フラグ711、第2入力フラグ712、同時入力フラグ714、第1タイマ716、第2タイマ718、同時入力タイマ720、第1サンプリングデータ722、第2サンプリングデータ724、第1トリガ操作強さ値726、および第2トリガ操作強さ値728が格納される。
【0390】
ゲーム画像データ704、キャラクタ制御データ705、第1振り方向ベクトル709、第2振り方向ベクトル710、第1入力フラグ711、第2入力フラグ712、同時入力フラグ714、第1タイマ716、第2タイマ718、同時入力タイマ720、第1サンプリングデータ722、および第2サンプリングデータ724については、第5の実施形態と同様のため、説明を省略する。
【0391】
第1トリガ操作強さ値726は、第1ユニットによるトリガ操作時の振りの強さを示す値である。第2トリガ操作強さ値728は、第2ユニットによるトリガ操作時の振りの強さを示す値である。
【0392】
次に、図49〜図53のフローチャートを参照して、ゲームプログラム703に基づくCPU30の処理の流れを説明する。
【0393】
図49において、ステップS700、S702、S704、S706、S708、S710、S712、S714、S716については前述した第5の実施形態と同様なので説明を省略する。
【0394】
ステップS718では、CPU30は、後述するステップS748で第1サンプリングデータ722に基づいて算出される第1振り方向ベクトル709(すなわち、第1ユニットによる方向指示操作時に、第1ユニットがプレイヤによって振られた方向を示すベクトル)と、後述するステップS742の第1ユニットに関する振り強さ検出の検出結果に応じて設定される第1トリガ操作強さ値726(すなわち、第1ユニットによるトリガ操作時に、第1ユニットがプレイヤによって振られた強さを示すベクトル)とに基づいて、速度ベクトルを変更する。速度ベクトルの変更方法としては種々の方法が考えられる。本実施形態では、一例として、図54に示すように、第1振り方向ベクトル709のX軸値をa1、Z軸値をb1とし、第1トリガ操作強さ値726をβ1とすると、現在のベクトルと、(右方ベクトル×a1+前方ベクトル×b1)×βで表されるベクトルとを合成することによって、新しい速度ベクトルを決定する。したがって、第1トリガ操作強さ値726が大きいほどキャラクタの加速度が大きくなる。
【0395】
ステップS720、S722、S724、S726、S728、S730については前述した第5の実施形態と同様なので説明を省略する。
【0396】
ステップS732では、後述するステップS782で第2サンプリングデータ724に基づいて算出される第2振り方向ベクトル710(すなわち、第2ユニットによる方向指示操作時に、第2ユニットがプレイヤによって振られた方向を示すベクトル)と、後述するステップS776の第2ユニットに関する振り強さ検出の検出結果に応じて設定される第2トリガ操作強さ値728(すなわち、第2ユニットによるトリガ操作時に、第2ユニットがプレイヤによって振られた強さを示すベクトル)とに基づいて、速度ベクトルを変更する。例えば、第2振り方向ベクトル710のX軸値をa2、Z軸値をb2とし、第2トリガ操作強さ値728をβとすると、現在のベクトルと、(右方ベクトル×a2+前方ベクトル×b2)×βで表されるベクトルとを合成することによって、新しい速度ベクトルを決定する。したがって、第2トリガ操作強さ値728が大きいほどキャラクタの加速度が大きくなる。
【0397】
ステップS734、S736、S738、および図50のステップS740については前述した第5の実施形態と同様なので説明を省略する。
【0398】
図50のステップS742では、第1ユニットに関する振り強さ検出を行う。以下、この振り強さ検出の詳細を図53を参照して説明する。
【0399】
図53のステップS816では、第1サンプリングデータ722を参照し、2番目に新しい第1加速度センサの検出値(Ax,Ay,Az)のY軸値AyがM(Mは所定値であり、1より大きな値)よりも大きいかどうかを判断する。2番目に新しい第1加速度センサの検出値のY軸値がMよりも大きい場合(振り操作があったと判断される)には、処理はステップS818に進み、Mよりも大きくない場合(振り操作がなかったと判断される)には、処理はステップS822に進む。
【0400】
ステップS818では、第1サンプリングデータ722を参照し、2番目に新しい第1加速度センサの検出値のY軸値が、最新の第1加速度センサの検出値のY軸値よりも大きいかどうかを判断する。これは、第1加速度センサに対して、Y軸方向に最も大きい力が加わったタイミングを検出するための処理である。プレイヤが第1ユニットをY軸方向に振ると、図54に示すように、第1加速度センサの検出値のY軸値は、振り始め直後に極小となり、振り終わり間際において極大となる。したがって、ステップS818の判断結果が肯定となるのは、図56のT1のタイミングである。2番目に新しい第1加速度センサの検出値のY軸値が、最新の第1加速度センサの検出値のY軸値よりも大きい場合(すなわち第1加速度センサの検出値のY軸値の大きさが極大値となった直後)には、処理はステップS820に進み、2番目に新しい第1加速度センサの検出値のY軸値が、最新の第1加速度センサの検出値のY軸値よりも大きくない場合には、処理はステップS822に進む。
【0401】
ステップS820では、振り強さ検出の戻り値として、2番目に新しい第1加速度センサの検出値のY軸値Ayを返す。このY軸値Ayは、プレイヤが第1ユニットによるトリガ操作を行ったときに、第1ユニットに加えられた力の大きさ(すなわち第1ユニットが振られた強さ)を示している。その後、処理は図50のステップS744に進む。
【0402】
ステップS822では、振り強さ検出の戻り値として、「トリガ操作なし」を示す値を返す。その後、処理は図50のステップS744に進む。
【0403】
ステップS744では、ステップS742の振り強さ検出の検出結果に基づいて、第1ユニットによるトリガ操作があったかどうかを判断し、第1ユニットによるトリガ操作があった場合には処理はステップS746に進み、第1ユニットによるトリガ操作がなかった場合には処理は図51のステップS774に進む。
【0404】
ステップS746では、第1トリガ操作強さ値の戻り値(すなわち第1ユニットによるトリガ操作時に第1ユニットが振られた強さを示す値)を設定する。
【0405】
ステップS748では、第1サンプリングデータ722に基づいて、第1ユニットによる方向指示操作時に第1ユニットが振られた方向を検出し、その算出結果を第1振り方向ベクトル709に設定する。方向指示操作時に第1ユニットが振られた方向を検出する方法としては種々の方法が考えられる。図56は、方向指示操作時において、プレイヤが操作ユニットを斜め左前方に振ったときの加速度センサのX軸方向およびZ軸方向の出力値の遷移を示している。
【0406】
本実施形態では、一例として、トリガ操作が検出された時点(図中のT1)で、直近の60フレーム期間のサンプリングデータを参照して操作ユニットが振られた方向を検出する。具体的には、サンプリングデータを参照して、X軸値およびZ軸値の符号が反転した時点(図中のT2)を検出し、T2以降の各フレームで検出されたX軸値およびZ軸値で示されるXZベクトルを平均することで、操作ユニットが振られた方向を検出する。図56の例では、T2以降のX軸値の平均値が負であり(これは操作ユニットがX軸の負方向に振られたことを意味する)、T2以降のZ軸値の平均値が正であり(これは操作ユニットがZ軸の正方向に振られたことを意味する)、さらにこれらの平均値の絶対値がほぼ等しいことから、プレイヤの前方から左に45°ずれた方向に向かって操作ユニットが振られたことが分かる。なお、T2を検出するために、サンプリングデータが直近の60フレームでは不十分な場合には、より長い期間のサンプリングデータを記憶するようにしてもよい。しかしながら、サンプリングデータを十分長い期間とった場合であっても、トリガ操作が検出された時点(T1)より前の所定期間内(許容期間)に、方向指示操作を示すAx、Azの出力が無い場合(例えば、図6示すような遷移の出力が無い場合、または、単にAx、Azの出力が0である場合など)には、方向指示操作とトリガ操作が連続しておこなわれていないとして、その操作を無効とするのが好ましい。なお、トリガ操作が検出された時点の代わりに、振り動作開始時点や振り動作終了時点やその中間の時点などを上記許容期間の基点としてもよい。
【0407】
なお、方向指示操作時に操作ユニットが振られた方向を検出する他の方法として、図56における振り動作の開始から符号が反転するタイミングT2までの期間のX軸、Z軸の各軸の平均値を求めてもよい。この場合、最終的に得られるXZベクトルが示す方向は、操作ユニットが振られたときの移動方向とは逆の方向となる。
【0408】
また、方向指示操作時に操作ユニットが振られた方向を検出するさらに他の方法として、加速度センサのX軸およびZ軸の値をそのまま利用するのではなく、各フレーム間での加速度センサのXZベクトルの差分ベクトル(この差分ベクトルの方向は操作ユニットの移動方向を反映している)をそれぞれ算出し、大きさが最も大きい差分ベクトルを、方向指示操作時に操作ユニットが振られた方向として検出してもよい。
【0409】
なお、操作ユニットが振られたときには、図56に示すように、各軸の値は0→正→0→負→0、もしくは0→負→0→正→0というように遷移する。したがって、サンプリングデータを参照して、過去60フレームの間にこのようなパターンが見られたときに、トリガ操作の前に方向指示操作が行われていたと判定し、それからその方向指示操作時の操作ユニットの振り方向を検出するようにすれば、より正確な検出が可能となる。
【0410】
なお、ステップS748の変形例として、第1ユニットによる方向指示操作時に第1ユニットが振られた方向を検出するときに、第1ユニットによる方向指示操作時に第2ユニットも同時に振られていたかどうかを第2サンプリングデータ724に基づいて判断し、
第1ユニットによる方向指示操作時に第2ユニットも同時に振られていた場合には第1振り方向ベクトル709の設定をキャンセルするようにしてもよい。これにより、「方向指示操作時に第1ユニットと第2ユニットの両方を一緒に振ってはいけない」という新たな操作要件をプレイヤに課すことができる。
【0411】
ステップS750では、ステップS748で設定された第1振り方向ベクトル709の大きさが所定値よりも大きいかどうかを判断し、所定値よりも大きい場合は、処理はステップS752に進み、所定値よりも大きくない場合は、処理は図51のステップS774に進む。
【0412】
ステップS752では、第1振り方向ベクトル709の方向が0°〜90°の範囲内または−90°〜0°の範囲内かどうかを判断する。なお、第1振り方向ベクトル709のX軸値をAx、Z軸値をAzとすると、第1振り方向ベクトル709の方向はarctan(Ax/Az)で表される。第1振り方向ベクトル709の方向が0°〜90°の範囲内または−90°〜0°の範囲内である場合には、処理はステップS754に進み、第1振り方向ベクトル709の方向が0°〜90°の範囲内でなく、かつ−90°〜0°の範囲内でもない場合には、処理は図51のステップS774に進む。これにより、第1ユニットによる方向指示操作でプレイヤが指示可能な方向の範囲を、0°〜90°の範囲内(すなわちX軸の正の方向とZ軸の正の方向の間の範囲内)または−90°〜0°の範囲内(すなわちX軸の正の方向とZ軸の負の方向の間の範囲内)に制限することができる。すなわち、第1ユニットを右手で把持し、第2ユニットを左手で把持するとして、第1ユニットの振りの範囲を右領域に限定することができる。一方、後述の通り、第2ユニットは振りの範囲を左領域に限定するので、第1ユニットと第2ユニットの役割を分担し、また、第1ユニットと第2ユニットが衝突することを回避することができる。
【0413】
ステップS754、S756については前述した第5の実施形態と同様なので説明を省略する。
【0414】
ステップS758では、第1振り方向ベクトル709、第2振り方向ベクトル710、第1トリガ操作強さ値726、および第2トリガ操作強さ値728に基づいて、速度ベクトルを変更する。具体的には、図57に示すように、第1振り方向ベクトル709と第2振り方向ベクトル710を合成して合成振り方向ベクトルを求め、そして、この合成振り方向ベクトルのX軸値をa3、Z軸値をb3とすると、現在のベクトルと、(右方ベクトル×a3+前方ベクトル×b3)×α(所定の定数)×β(所定の定数)で表されるベクトルとを合成することによって、新しい速度ベクトルを決定する。αは定数であって、ステップS758ではα=2となる。βは、第1トリガ操作強さ値726と第2トリガ操作強さ値728の和に比例した値である。したがって、第1トリガ操作強さ値726と第2トリガ操作強さ値728の和が大きいほどキャラクタの加速度が大きくなる。
【0415】
なお、ステップS758において、第1振り方向ベクトルまたは第2振り方向ベクトルを2倍したベクトルを合成ベクトルとみなしてもよい。また、第1トリガ操作強さ値と第2トリガ操作強さ値のいずれか一方のみを利用するようにしてもよい。
【0416】
ステップS760、S762、S764については前述した第5の実施形態と同様なので説明を省略する。
【0417】
ステップS766では、ステップS758と同様にして速度ベクトルを変更する。ただし、ステップS760ではα=1.5となる。
【0418】
ステップS768、S770、S772については前述した第5の実施形態と同様なの
で説明を省略する。
【0419】
図51および図52の処理については、図50のフローチャートの説明や、第5の実施形態の説明から、当業者には明らかだと思われるので、説明を省略する。
【0420】
以上のように、本実施形態によれば、プレイヤはプレイ中にそれぞれの手を自由に動かすことができるので、プレイ中の動きの自由度が高くダイナミックなプレイが可能となる。また、操作ユニットを振ることによってキャラクタを制御することができるので、直感的な操作が可能となり、良好な操作性が得られる。また、2つの操作ユニットを同時に振る際の振る方向が近いほどキャラクタの加速度が大きくなるので、より直感的な操作が可能となる。
【0421】
なお、本実施形態では3軸の加速度センサを用いる例を説明したが、2軸の加速度センサを用いても、そのうちの1軸の加速度センサによって方向指示操作を検出し、残りの1軸の加速度センサによってトリガ操作を検出することができるため、本実施形態と同様の効果を得ることができる。
【0422】
また、本実施形態では、第1ユニットと第2ユニットの2つの操作ユニットを使ってキャラクタの動作を制御する例を説明したが、これに替えて、1つの操作ユニットだけを利用して方向指示操作およびトリガ操作を行ってキャラクタの動作を制御するようにしてもよい。
【0423】
さらに、本実施形態では、方向指示操作の後トリガ操作をおこなうものとしたが、トリガ操作の後方向指示操作をおこなうようにしてもよい。この場合、方向指示操作が検出されたときに(すなわち、Ax、Azの出力が方向指示操作を示すものであるときに)、サンプリングデータを参照して、その時点より過去の所定期間内にトリガ操作を示すAyがあるか否かを判断し、肯定判断の場合に、当該方向指示操作に係る振り方向ベクトルを利用してゲーム処理をおこなってもよい。また、方向指示操作とトリガ操作を同時におこなうようにしてもよい。この場合、トリガ操作または方向指示操作のいずれか一方が検出されたときに、サンプリングデータを参照して、その時点の前後所定期間内に他方を示す出力があるか否かを判断して、肯定判断の場合に、方向指示操作に係る振り方向ベクトルを利用してゲーム処理をおこなってもよい。
【0424】
さらに、本実施形態では、トリガ操作が検出されたときに、サンプリングデータを参照することにより、過去の所定期間内に方向指示操作があったか否かを判断するようにしたが、方向指示操作があったときに、その後所定期間内にトリガ操作があるか否かを監視するようにしてもよい。
【0425】
なお、以上の実施形態では、プレイヤがゲームオブジェクトを制御する例を説明したが、本発明はこれに限定されない。例えば、第1加速度センサの出力(傾きなど)に応じて仮想ゲーム世界に設定された仮想カメラの傾きを変化させると同時に、第2加速度センサの出力(振り強さ、振り方向など)に応じてゲームオブジェクトの動作を変化させるようにしてもよい。
【符号の説明】
【0426】
1 ゲームシステム
2 モニタ
2a スピーカ
3 ゲーム装置
30 CPU
31 メモリコントローラ
32 GPU
33 メインメモリ
34 DSP
35 ARAM
36 コントローラI/F
37 ビデオI/F
38 外部メモリI/F
39 オーディオI/F
4 光ディスク
40 ディスクドライブ
41 ディスクI/F
5 外部メモリカード
6 受信ユニット
7 コントローラ
70 コアユニット
700 基板
701 加速度センサ
702 LED
706 スピーカ
707 サウンドIC
708 アンプ
71 ハウジング
72 操作部
73 コネクタ
74 撮像情報演算部
741 赤外線フィルタ
742 レンズ
743 撮像素子
744 画像処理回路
75 通信部
751 マイコン
752 メモリ
753 無線モジュール
754 アンテナ
76 サブユニット
761 加速度センサ
77 ハウジング
78 操作部
79 接続ケーブル
791 コネクタ
8 LEDモジュール

【特許請求の範囲】
【請求項1】
第1ハウジングに設けられた加速度センサまたはジャイロセンサである第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた加速度センサまたはジャイロセンサである第2センサの出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて、ゲーム制御用ベクトルの方向を決定する方向決定手段、
前記第2センサの出力に基づいて、前記ゲーム制御用ベクトルの大きさを決定する大きさ決定手段、および
前記ベクトル方向決定手段および前記ベクトル大きさ決定手段によって決定された前記ゲーム制御用ベクトルを用いてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項2】
第1ハウジングに設けられた動きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた動きを検出可能な第2センサの出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングの動きを検出する第1動き操作検出手段、
前記第2センサの出力に基づいて前記第2ハウジングの動きを検出する第2動き操作検出手段、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に前記第2ハウジングの動き検出があったかどうかを検出する同時入力検出手段、および
前記第1ハウジングの動き検出があってから同時入力受付時間以内に前記第2ハウジングの動き検出があったことを前記同時入力検出手段が検出したときに第1ゲーム処理を実行するゲーム制御手段として機能させるためのゲームプログラム。
【請求項3】
前記ゲーム制御手段は、前記第1動き操作検出手段によって前記第1ハウジングの動き検出があってから、同時入力受付時間以内に前記第2ハウジングの動き検出があったことが前記同時入力検出手段によって検出されなかった場合には、前記第1ゲーム処理とは異なる第2ゲーム処理を実行する、請求項2に記載のゲームプログラム。
【請求項4】
前記ゲーム制御手段は、前記同時入力受付時間内に前記第2ハウジングの動き検出があったことが前記同時入力検出手段によって検出されたときには、前記第1ゲーム処理を実行し、前記同時入力受付時間内に前記第2ハウジングの動き検出があったことが前記同時入力検出手段によって検出されることなく前記同時入力受付時間が経過した時点で、前記第2ゲーム処理を実行する、請求項3に記載のゲームプログラム。
【請求項5】
前記第1動き操作検出手段は、前記第1ハウジングの動き検出に関連して決定されるタイミングから受付禁止時間が経過するまでは、当該第1ハウジングの動き検出を新たに検出せず、
前記第2動き操作検出手段は、前記第2ハウジングの動き検出があったことを検出してから受付禁止時間が経過するまでは、当該第2ハウジングの動き検出を新たに検出しない、請求項2に記載のゲームプログラム。
【請求項6】
前記第1ハウジングおよび前記第2ハウジングのいずれか一方の動き検出があってから所定時間以内に他方の動き検出があったことを前記同時入力検出手段による同時入力検出に関連して決定されるタイミングから同時入力後受付禁止時間が経過するまでは、前記第1動き操作検出手段および前記第2動き操作検出手段は、前記第1ハウジングおよび前記
第2ハウジングの動き検出を新たに検出しない、請求項5に記載のゲームプログラム。
【請求項7】
第1ハウジングに設けられた動きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた動きを検出可能な第2センサの出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングの動きおよびその強さを検出する第1動き検出手段、
前記第2センサの出力に基づいて前記第2ハウジングの動きおよびその強さを検出する第2動き検出手段、
前記第1動き検出手段および前記第2動き検出手段の検出結果に基づいて、前記第1ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に前記第2ハウジングの動き検出があったかどうかを検出する同時入力検出手段、および
前記第1ハウジングの動き検出に関連して決定されるタイミングから同時入力受付時間以内に前記第2ハウジングの動き検出があったことを前記同時入力検出手段が検出したときに、前記第1動き検出手段によって検出された前記第1ハウジングの動きの強さと、前記第2動き検出手段によって検出された前記第2ハウジングの動きの強さを利用して第1ゲーム処理を実行するゲーム制御手段として機能させるためのゲームプログラム。
【請求項8】
第1ハウジングに設けられた動きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた動きを検出可能な第2センサの出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングの動きを検出する第1動き操作検出手段、
前記第2センサの出力に基づいて前記第2ハウジングの動きを検出する第2動き操作検出手段、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き操作が行われたときに、当該動き操作から過去一定時間以内に前記第2ハウジングの動き操作が行われていたかどうかを検出する同時入力検出手段、および
(a)前記第1ハウジングの動き操作が行われたときに、当該動き操作から過去一定時間以内に前記第2ハウジングの動き操作が行われていたことが前記同時入力検出手段によって検出された場合にはゲームオブジェクトに第1動作を行わせ、(b)前記第1ハウジングの動き操作が行われたときに、当該動き操作から過去一定時間以内に前記第2ハウジングの動き操作が行われていたことが前記同時入力検出手段によって検出されなかった場合には前記ゲームオブジェクトに前記第1動作とは異なる第2動作を行わせるゲーム制御手段として機能させるためのゲームプログラム。
【請求項9】
第1ハウジングに設けられた傾きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた傾きを検出可能な第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
プレイヤからの基準値設定指示を検出する基準値設定指示検出手段、
前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1戦差の出力値および/または前記第2センサの出力値に基づいて、第1基準値および第2基準値を設定する基準値設定手段、
前記第1センサの出力および前記第1基準値に基いて前記第1ハウジングの姿勢を検出する第1姿勢検出手段、
前記第2センサの出力および前記第2基準値に基いて前記第2ハウジングの姿勢を検出する第2姿勢検出手段、
前記第1姿勢検出手段による第1ハウジングの姿勢と、前記第2姿勢検出手段による第2ハウジングの姿勢の差分を検出する姿勢差分検出手段、および
前記姿勢差分検出手段によって検出された差分を用いてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項10】
前記基準値設定手段は、前記基準値設定指示検出手段によって単一の前記基準値設定指示が検出されたことに応じて、同一タイミングで、前記第1基準値および前記第2基準値を一度に設定する、請求項9に記載のゲームプログラム。
【請求項11】
前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1センサの出力値と、前記第2センサの出力値とに基く所定の演算をした値を、前記第1基準値および前記第2基準値として共通に設定する、請求項9に記載のゲームプログラム。
【請求項12】
前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1センサまたは前記第2センサのいずれか一方の出力値に基く値を、前記第1基準値および前記第2基準値として共通に設定する、請求項9に記載のゲームプログラム。
【請求項13】
前記第1ハウジングおよび/または前記第2ハウジングには、プレイヤが前記基準値設定指示を入力するためのスイッチが設けられており、
前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1ハウジングおよび前記第2ハウジングのうち、当該基準値設定指示の入力に用いられたスイッチが設けられてない方のハウジングに設けられたセンサの検出値に基いて、前記第1基準値および前記第2基準値を共通に設定する、請求項12に記載のゲームプログラム。
【請求項14】
前記基準値設定手段は、前記基準値設定指示検出手段によって基準値設定指示が検出されたときに、前記第1センサの出力値と前記第2センサの出力値に基づいて前記第1ハウジングと前記第2ハウジングの傾きの差分が一定範囲内か否かを判断する基準値設定時差分検出手段を含み、
前記基準値設定手段は、(a)前記基準値設定時差分検出手段によって一定範囲内であると判断された場合には、前記第1センサの出力値および前記第2センサの出力値に基いて、第1基準値および第2基準値をそれぞれ設定し、(b)前記基準値設定時差分検出手段によって一定範囲内でないと判断された場合にはエラー処理を行う、請求項9に記載のゲームプログラム。
【請求項15】
第1ハウジングに設けられた加速度センサまたはジャイロセンサである第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた加速度センサまたはジャイロセンサである第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいてゲームオブジェクトの姿勢を制御する姿勢制御手段、および
前記第2センサの出力に基づいて前記ゲームオブジェクトの移動を制御する移動制御手段として機能させるためのゲームプログラム。
【請求項16】
第1ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段、
前記第2センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向を検出する第2動き方向検出手段、
前記第1動き方向検出手段によって検出された前記第1動き方向と、前記第2動き方向検出手段によって検出された前記第2動き方向とを合成することによって合成方向を決定する合成方向決定手段、および
前記合成方向決定手段によって決定された前記合成方向を用いてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項17】
第1ハウジングに設けられた動きを検出するための第1センサと、前記第1ハウジングとは独立した動きを検出するための第2ハウジングに設けられた第2センサの出力を利用してゲーム処理を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングの動きの強さを検出する第1強さ検出手段、
前記第2センサの出力に基づいて前記第2ハウジングの動きの強さを検出する第2強さ検出手段、
前記第1強さ検出手段によって検出された前記第1ハウジングの動きの強さと、前記第2強さ検出手段によって検出された前記第2ハウジングの動きの強さとを合成することによって合成強さを決定する合成強さ決定手段、および
前記合成強さ決定手段によって決定された前記合成強さを用いてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項18】
第1ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段、
前記第2加速度センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向を検出する第2動き方向検出手段、
前記第1動き方向検出手段によって検出された前記第1動き方向と、前記第2動き方向検出手段によって検出された前記第2動き方向とが所定の関係を満たすかどうかを判定する動き方向関係判定手段、および
前記動き方向関係判定手段によって前記第1動き方向と前記第2動き方向が前記所定の関係を満たすと判定されたときに、前記第1ハウジングおよび前記第2ハウジングの少なくとも一方のハウジングの動き方向および/または動き強さに基づいてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項19】
第1ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングの動きを検出する第1動き操作検出手段、
前記第2センサの出力に基づいて前記第2ハウジングの動きを検出する第2動き操作検出手段、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き検出のタイミングと、前記第2ハウジングの動き検出のタイミングとが所定の関係を満たすかどうかを判定する動きタイミング関係判定手段、および
前記動きタイミング関係判定手段によって前記第1ハウジングの動き検出のタイミングと前記第2ハウジングの動き検出のタイミングが前記所定の関係を満たすと判定されたと
きに、前記第1ハウジングおよび前記第2ハウジングの少なくとも一方のハウジングの動き方向および/または動き強さに基づいてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項20】
前記ゲーム制御手段は、前記第1ハウジングおよび前記第2ハウジングの両方のハウジングの動き方向および/または動き強さに基づいてゲーム制御を行う、請求項18または請求項19に記載のゲームプログラム。
【請求項21】
前記ゲーム制御手段は、前記第1ハウジングおよび前記第2ハウジングの両方のハウジングの動き方向および動き強さに基づいてゲーム制御を行う、請求項18または請求項19に記載のゲームプログラム。
【請求項22】
第1ハウジングに設けられた少なくとも2軸方向の動き検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段、
前記第2センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向を検出する第2動き方向検出手段、
前記第1動き方向検出手段によって検出された前記第1動き方向と、前記第2動き方向検出手段によって検出された前記第2動き方向とが所定の関係を満たすかどうかを判定する動き向関係判定手段、および
前記動き方向関係判定手段によって前記第1動き方向と前記第2動き方向が前記所定の関係を満たすと判定されたときに、ゲームオブジェクトに特定の動作を行わせるゲーム制御手段として機能させるためのゲームプログラム。
【請求項23】
第1ハウジングに設けられた動きを検出するための第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた動きを検出するための第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングの動きおよびその強さを検出する第1動き操作検出手段、
前記第2センサの出力に基づいて前記第2ハウジングの動きおよびその強さを検出する第2動き操作検出手段、
前記第1動き操作検出手段および前記第2動き操作検出手段の検出結果に基づいて、前記第1ハウジングの動き検出のタイミングと、前記第2ハウジングの動き検出のタイミングとが所定の関係を満たすかどうかを判定する動きタイミング関係判定手段、および
前記動きタイミング関係判定手段によって前記第1ハウジングの動き検出のタイミングと前記第2ハウジングの動き検出のタイミングが前記所定の関係を満たすと判定されたときに、ゲームオブジェクトに特定の動作を行わせるゲーム制御手段として機能させるためのゲームプログラム。
【請求項24】
第1ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた少なくとも2軸方向の動きを検出可能な第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて前記第1ハウジングが動いた方向を示す第1動き方向を検出する第1動き方向検出手段、
前記第2センサの出力に基づいて前記第2ハウジングが動いた方向を示す第2動き方向を検出する第2動き方向検出手段、
前記第1動き方向検出手段によって検出された前記第1動き方向が第1範囲内であり、かつ前記第2動き方向検出手段によって検出された前記第2動き方向が第2範囲内であるときに、前記第1動き方向と前記第2動き方向に基づいてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項25】
第1ハウジングに設けられた動きまたは姿勢を検出可能な第1センサと、前記第1ハウジングとは独立した第2ハウジングに設けられた動きまたは姿勢を検出可能な第2センサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記第1センサの出力に基づいて第1ゲーム処理を実行する第1ゲーム制御手段、
前記第2センサの出力に基づいて第2ゲーム処理を実行する第2ゲーム制御手段、および
プレイヤの指示に応じて、前記第1ゲーム制御手段が前記第1ゲーム処理のために参照するセンサを前記第1センサから前記第2センサに変更し、かつ前記第2ゲーム制御手段が前記第2ゲーム処理のために参照するセンサを前記第2センサから前記第1センサに変更する参照センサ交換手段として機能させるためのゲームプログラム。
【請求項26】
少なくとも、第1軸、第2軸の2軸方向の動きを検出可能なセンサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記センサの前記第1軸方向の動きを検出する動き検出手段、および
前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出に関連して決定される時点または期間において出力された前記センサの前記第2軸方向の出力に基いてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項27】
第1軸、第2軸、第3軸の3軸方向の動きを検出可能なセンサの出力を利用してゲーム制御を行うためのゲームプログラムであって、ゲーム装置のコンピュータを、
前記センサの前記第1軸方向の動きを検出する動き検出手段、および
前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出された時点を基準として決定される時点または期間において出力された前記センサの前記第2軸方向の出力と前記第3軸方向の出力により示される方向を用いてゲーム制御を行うゲーム制御手段として機能させるためのゲームプログラム。
【請求項28】
前記ゲーム制御手段は、前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出された時点を基準として決定される時点または期間において出力された前記センサの前記第2軸方向の出力に加えて、当該第1軸方向の動きに係る前記センサの前記第1軸方向の出力の大きさを用いてゲーム制御を行う、請求項26に記載のプログラム。
【請求項29】
前記ゲーム制御手段は、前記動き検出手段によって前記第1軸方向の動きが検出されたときに、当該検出された時点を基準として決定される時点または期間における、第2軸方向の動きの有無を検出し、第2軸方向の動きが検出されたときに、当該第2軸方向の出力を用いてゲーム制御を行う、請求項26に記載のゲームプログラム。

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

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate

【図39】
image rotate

【図40】
image rotate

【図41】
image rotate

【図42】
image rotate

【図43】
image rotate

【図44】
image rotate

【図45】
image rotate

【図46】
image rotate

【図47】
image rotate

【図48】
image rotate

【図49】
image rotate

【図50】
image rotate

【図51】
image rotate

【図52】
image rotate

【図53】
image rotate

【図54】
image rotate

【図55】
image rotate

【図56】
image rotate

【図57】
image rotate


【公開番号】特開2013−78613(P2013−78613A)
【公開日】平成25年5月2日(2013.5.2)
【国際特許分類】
【出願番号】特願2012−281204(P2012−281204)
【出願日】平成24年12月25日(2012.12.25)
【分割の表示】特願2012−104773(P2012−104773)の分割
【原出願日】平成18年5月1日(2006.5.1)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】