ゲームプログラムおよびゲーム装置
【課題】入力装置自体の動きを適切に反映したゲーム処理を行うゲームプログラムおよびゲーム装置を提供する。
【解決手段】入力装置自体の動きに応じて変化する出力データを取得し、メモリに記憶する。記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出し、連続する極値を示す出力データが取得された時間間隔および極値を検出してからの時間経過を計測する。そして、計測された時間経過および算出された時間間隔を所定の関数に代入することによりゲーム入力データを算出し、ゲーム入力データを用いてゲーム処理を実行する。
【解決手段】入力装置自体の動きに応じて変化する出力データを取得し、メモリに記憶する。記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出し、連続する極値を示す出力データが取得された時間間隔および極値を検出してからの時間経過を計測する。そして、計測された時間経過および算出された時間間隔を所定の関数に代入することによりゲーム入力データを算出し、ゲーム入力データを用いてゲーム処理を実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ゲームプログラムおよびゲーム装置に関し、より特定的には、入力装置自体の動きに応じてゲーム処理を行うゲームプログラムおよびゲーム装置に関する。
【背景技術】
【0002】
従来、ゴルフクラブや野球のバット等のような棒状物を振る動作を入力するゲーム(ゴルフゲームや野球ゲーム)がある。これらのゲームにおいては、上記棒状物を振る動作を入力するためのコントローラに、スイッチを利用したボタンやレバー等を用いていた。
【0003】
また、上記ボタンやレバー等を用いずに振る動作を入力する棒状のコントローラ(入力制御装置)も開示されている(例えば、特許文献1参照)。上記特許文献1で開示されたコントローラは、加速度センサを内蔵している。そして、プレイヤは、上記棒状のコントローラを手に持ち、実際に振る動作を行う。例えば、剣劇を体感できる3Dゲームのような場合は、上記棒状のコントローラを刀剣に見立て、プレイヤがコントローラで刀剣を振るような動作を行う。そのとき、コントローラに内蔵された加速度センサからプレイヤの動作に応じたデータが出力される。そして、加速度センサから出力されるデータに基づいて、ゲーム空間内における刀剣の移動データが決められ、プレイヤの動作に応じてプレイヤオブジェクトが刀剣を振る動作がゲーム画像として表示される。
【特許文献1】特開2000−308756号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、上記特許文献1に開示された入力制御装置(コントローラ)においては、プレイヤが入力制御装置を振り動かす動作に追随できないことがある。例えば、プレイヤが上記棒状のコントローラを激しく振った場合等は、その振る動作の速さに加速度センサの検出速度や出力データを演算する速度が追いつかない。その結果、プレイヤが実際に振り動かした操作とは異なる動きを示す移動データが求められることがあった。そのため、プレイヤが意図した動作がゲーム画像に表現されずに、プレイヤの振り動作とはかけ離れた動作が表示されたり、全く反映されていない動作が表示されたりすることがあり、ゲームの興趣を低下させていた。
【0005】
それ故に、本発明の目的は、入力装置自体の動きを適切に反映したゲーム処理を行うゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【0006】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【0007】
第1の発明は、ゲームを実行するゲーム装置(5)のコンピュータ(30)で実行されるゲームプログラムである。ゲームプログラムは、出力データ取得手段(ステップ17を実行するCPU30、以下、単にステップ番号のみ記載する)、出力データ記憶手段(S17)、ピーク値検出手段(S81)、ピーク間隔算出手段(S81)、計測手段(S81)、ゲーム入力データ算出手段(S89、S92)、およびゲーム処理手段(S92、S22)として、コンピュータを機能させる。出力データ取得手段は、入力装置(7)自体の動きに応じて変化する出力データ(Da)を取得する。出力データ記憶手段は、出力データ取得手段が取得した出力データの履歴をメモリ(33)に記憶する。ピーク値検出手段は、出力データ記憶手段で記憶された出力データの履歴(AccBuffer)から、当該出力データが示す値の連続する極値を検出する。ピーク間隔算出手段は、ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔(index[Ms+1]−Index[Ms])を算出する。計測手段は、ピーク値検出手段が極値を検出してからの時間経過(Index[Ms])を計測する。ゲーム入力データ算出手段は、計測手段によって計測された時間経過およびピーク間隔算出手段によって算出された時間間隔を所定の関数に代入(θcを算出する関数に比率aを代入)することによりゲーム入力データ(θc)を算出する。ゲーム処理手段は、ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行する。
【0008】
なお、上記ピーク値検出手段は、極大値および極小値を両方検出対象としてもよいし、極大値のみを検出対象としてもよいし、極小値のみを検出対象としてもよい。また、上記ピーク値検出手段は、極値の検出を継続的に繰り返して行ってもかまわない。
【0009】
また、上記ピーク間隔算出手段は、極大値と極小値との時間間隔を算出してもよいし、極大値間の時間間隔を算出してもよいし、極小値間の時間間隔を算出してもよい。ここで、上記ピーク間隔算出手段は、時間間隔を少なくとも1回算出すればよいが、複数回繰り返して時間間隔を算出してもよい。例えば、ピーク値検出手段が極値を検出するごとに、時間間隔を算出してもよいし、所定条件ごと(例えば、ピーク値検出手段が極値を所定回数検出した場合や、所定時間が経過した場合など)に時間間隔を算出してもよい。また、上記ピーク間隔算出手段は、出力データ取得手段が所定時間間隔で出力データを取得する場合には、出力データを取得する間隔を用いて時間間隔を算出することができるし、そうでない場合は、出力データの出力時刻データを履歴に記憶して当該時刻データに基づいて時間間隔を算出することができる。
【0010】
また、上記計測手段は、ピーク値検出手段が極値の検出を繰り返す場合には、ピーク値検出手段による直近の極値検出からの時間経過を計測してもよい。また、上記計測手段は、ピーク値検出手段が所定条件を満たす極値を検出したときに、当該検出からの時間経過を計測してもよい。
【0011】
また、上記ゲーム入力データ算出手段は、ピーク間隔算出手段が繰り返して時間間隔を算出する場合には、ピーク間隔算出手段が算出した最新の時間間隔を用いてもよい。
【0012】
第2の発明は、上記第1の発明において、ピーク値検出手段は、極値を繰り返して検出する。ピーク間隔算出手段は、ピーク値検出手段によって極値が検出されるごとに、ピーク値検出手段によって検出された最新の極値と当該極値の1つ前に検出された極値との間の時間間隔を算出する。計測手段は、ピーク値検出手段が最新の極値を検出した時点からの経過時間を計測する。ゲーム入力データ算出手段は、ピーク間隔算出手段によって算出された最新の時間間隔を用いてゲーム入力データを算出する。
【0013】
例えば、上記出力データ記憶手段は、出力データ取得手段が出力データを取得するごとに、取得した出力データをメモリに記憶し、上記ピーク値検出手段は、出力データがメモリに記憶されるごとに、極値の検出をおこなう。
【0014】
第3の発明は、上記第1の発明において、ゲーム入力データ算出手段は、出力データの履歴が示す値を用いて、周期性をもって極大値および極小値を順次繰り返して当該値が推移していることを擬する周期関数を、所定の関数として設定する。
【0015】
第4の発明は、上記第1の発明において、ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がTだけ変化するごとに極値を繰り返してとり、かつ、所定値が代入された際に極値をとる関数である。ゲーム入力データ算出手段は、時間間隔に対する時間経過の割合をTに乗算した値に所定値を加算した値を、所定の関数に代入することにより、ゲーム入力データを算出する。
【0016】
第5の発明は、上記第1の発明において、ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がT/2だけ変化するごとに極大値と極小値とを繰り返してとる関数である。ピーク値検出手段は、極大値および極小値の両方を検出する。ピーク間隔算出手段は、連続する極大値と極小値との間の時間間隔を算出する。ゲーム入力データ算出手段は、時間間隔に対する時間経過の割合をT/2に乗算した値に所定値を加算した値を、所定の関数に代入することにより、ゲーム入力データを算出する。
【0017】
第6の発明は、上記第5の発明において、ゲーム入力データ算出手段が用いる所定の関数は、所定値が代入された際に極大値または極小値をとる関数である。ピーク値検出手段は、極大値と極小値とを繰り返して検出する。ピーク間隔算出手段は、ピーク値検出手段によって極大値または極小値のいずれか検出されるごとに、ピーク値検出手段によって検出された最新の極大値または極小値の一方と当該検出の1つ前に検出された極大値または極小値の他方との間の時間間隔を算出する。計測手段は、ピーク値検出手段が最新の極大値または極小値を検出した時点からの経過時間を計測する。ゲーム入力データ算出手段は、ピーク間隔算出手段によって算出された最新の時間間隔を用いてゲーム入力データを算出し、かつ、ピーク値検出手段により検出された最新の極値が極小値のときには、算出されたゲーム入力データの正負を反転する。
【0018】
第7の発明は、上記第4の発明において、ゲーム入力データ算出手段が用いる所定の関数は、正弦関数である。ピーク値検出手段は、極大値または極小値のいずれか一方を検出する。ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出する。ゲーム入力データ算出手段は、360度に割合を乗算した値を正弦関数に代入することにより、ゲーム入力データを算出する。
【0019】
第8の発明は、上記第5の発明において、ゲーム入力データ算出手段が用いる所定の関数は、正弦関数である。ゲーム入力データ算出手段は、180度に割合を乗算した値を正弦関数に代入することにより、ゲーム入力データを算出する。
【0020】
第9の発明は、上記第4の発明において、ゲーム入力データ算出手段が用いる所定の関数は、余弦関数である。ピーク値検出手段は、極大値または極小値のいずれか一方を検出する。ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出する。ゲーム入力データ算出手段は、360度に割合を乗算した値にn倍の円周率(nは自然数)を加算または減算した値を余弦関数に代入することにより、ゲーム入力データを算出する。
【0021】
第10の発明は、上記第5の発明において、ゲーム入力データ算出手段が用いる所定の関数は、余弦関数である。ゲーム入力データ算出手段は、円周率に割合を乗算した値にn倍の180度(nは自然数)を加算または減算した値を余弦関数に代入することにより、ゲーム入力データを算出する。
【0022】
第11の発明は、上記第1の発明において、入力装置には、少なくとも2方向に生じる加速度をそれぞれ検出して、当該検出結果を出力データとして出力する加速度検出部(701)が設けられる。出力データ取得手段は、加速度検出部から出力された出力データに基づいて、入力装置の2方向に生じる加速度を示すデータを取得する。
【0023】
第12の発明は、上記第11の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが入力装置を反復的に傾ける操作をしたときに、当該操作の操作力による加速度が生じる方向である。
【0024】
第13の発明は、上記第11の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが入力装置を反復的に傾ける操作をしたときに、当該操作による入力装置における所定箇所の移動の軌跡となる円弧の接線方向である。
【0025】
第14の発明は、上記第11の発明において、ゲーム入力データ算出手段は、ピーク値検出手段によってn個(nは2以上の自然数)の極値が検出されたときに、計測手段によって計測された時間経過およびピーク間隔算出手段によって算出された時間間隔を所定の関数に代入することによりゲーム入力データを算出する。ゲーム入力データ算出手段は、ピーク値検出手段によってn個の極値が検出されないときには、出力データが示す2方向に生じる加速度に基づいて、入力装置に生じる重力方向に対する入力装置の角度を示す角度データを算出し、当該角度データをゲーム入力データとする。
【0026】
第15の発明は、上記第14の発明において、ゲームは、2方向が実空間の鉛直面に存在するように入力装置を配置しつつ、入力装置を反復的に傾ける操作をさせるゲームである。
【0027】
ここで、本願発明は、典型的に入力装置の重力方向に対する傾きを反復的に変化させる操作をプレイヤにさせるようなゲームに用いられるものである。さらに言えば、第14および第15の発明における「2方向」が実空間の鉛直面上に存在するように入力装置を把持させ、第1方向および第2方向の両方が鉛直面上に存在する状態を維持したまま入力装置を傾ける操作をさせるものである。典型的には、そのような操作をすべきことが取扱説明書や画面上で指示または暗示され、プレイヤはそれに従って操作する。また、「2方向」は直交する方向であってもよい。例えば、入力装置における前方向(後述の図3におけるZ軸正方向)、後方向(後述の図3におけるZ軸負方向)、上方向(同図におけるY軸正方向)、下方向(同図におけるY軸負方向)、左方向(同図におけるX軸正方向)、右方向(同図におけるX軸負方向)のうちのいずれか2つとするのが典型的である。なお、前後方向・上下方向・左右方向とは、入力装置において互いに直交する3方向であり、プレイヤが入力装置を基準姿勢で把持したときの状態において前後方向・上下方向・左右方向のいずれかが特定されるものであって、通常は、入力装置のハウジングの形状に従って特定される方向である。また、上記入力装置を長細形状に形成する場合には、入力装置の長手方向を1方向とし、短手方向を他の1方向としてもよい。さらには、入力装置が長手方向に延在するとともに、長手方向軸線周りの周囲面に掌を接触させるようにして握ることによって把持されるように形成しても良く、この場合、当該長手方向を1方向とし、それと直交する方向を他の1方向としても良い。
【0028】
第16の発明は、上記第11の発明において、判断手段として、さらにコンピュータを機能させる。判断手段は、計測手段により計測された時間経過が、ピーク間隔算出手段が算出した時間間隔のn倍(n>1)以上に達したことを判断する。ゲーム入力データ算出手段は、判断手段が肯定の判断をしたときに、出力データが示す2方向に生じる加速度に基づいて、入力装置に生じる重力方向に対する入力装置の角度を示す角度データを算出し、当該角度データをゲーム入力データとする。
【0029】
第17の発明は、上記第1の発明において、ゲーム入力データ算出手段が用いる所定の関数は、ピーク間隔算出手段が算出した時間間隔を周期の半分とした正弦関数または余弦関数である。
【0030】
第18の発明は、上記第1の発明において、ピーク値検出手段は、極大値および極小値の両方を検出する。そして、差分算出手段(S88)として、さらにコンピュータを機能させる。差分算出手段は、ピーク値検出手段が検出した極大値と極小値との差分を算出する。ゲーム入力データ算出手段が用いる所定の関数は、差分算出手段が算出した差分値に基づいた値を振幅とする周期関数である。
【0031】
第19の発明は、上記第1の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。そして、終了判定手段(S87)として、さらにコンピュータを機能させる。終了判定手段は、計測手段により計測された時間経過が、ピーク間隔算出手段が算出した時間間隔の所定倍以上(1.5倍以上)に達したとき(S87でYes)、入力装置を反復的に傾ける操作が終了したと判定する。
【0032】
第20の発明は、上記第1の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。そして、停止判定手段(S83、S86)として、さらにコンピュータを機能させる。停止判定手段は、ピーク値検出手段によって1つ以下の極値が検出されたとき(S83でNo、S86でNo)、入力装置を反復的に傾ける操作が行われていないと判定する。
【0033】
第21の発明は、上記第19または第20の発明において、姿勢算出手段(S18)として、さらにコンピュータを機能させる。姿勢算出手段は、終了判定手段が入力装置を反復的に傾ける操作が終了したと判定したとき、または停止判定手段が入力装置を反復的に傾ける操作が行われていないと判定しているとき(Cfrg=false)、出力データ取得手段が取得した最新の出力データが示す値を用いて、当該入力装置自体の姿勢(θs)を算出する。ゲーム入力データ算出手段は、終了判定手段が入力装置を反復的に傾ける操作が終了したと判定したとき、または停止判定手段が入力装置を反復的に傾ける操作が行われていないと判定しているとき、姿勢算出手段が算出した姿勢を用いてゲーム入力データを算出する。
【0034】
第22の発明は、上記第1の発明において、ゲーム処理手段は、ゲーム入力データを用いて、仮想ゲーム世界におけるオブジェクトの傾き(θobj)を変化させる。そして、表示制御手段(S23)として、さらにコンピュータを機能させる。表示制御手段は、ゲーム処理手段が変化させたオブジェクトの傾きに応じて、仮想ゲーム世界でオブジェクトを傾斜させて当該オブジェクトを表示装置(2)に表示する。
【0035】
第23の発明は、上記第1の発明において、ゲーム処理手段は、ゲーム入力データを用いて、仮想ゲーム世界においてオブジェクトが移動したことにより発生する周りの環境への影響力を変化させ、当該影響力に応じて当該仮想ゲーム世界で当該オブジェクト以外のオブジェクトに対して所定の影響を与える。
【0036】
第24の発明は、ゲームを実行するゲーム装置である。ゲーム装置は、出力データ取得手段、出力データ記憶手段、ピーク値検出手段、ピーク間隔算出手段、計測手段、ゲーム入力データ算出手段、およびゲーム処理手段を備える。出力データ取得手段は、入力装置自体の動きに応じて変化する出力データを取得する。出力データ記憶手段は、出力データ取得手段が取得した出力データの履歴をメモリに記憶する。ピーク値検出手段は、出力データ記憶手段で記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出する。ピーク間隔算出手段は、ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔を算出する。計測手段は、ピーク値検出手段が極値を検出してからの時間経過を計測する。ゲーム入力データ算出手段は、計測手段によって計測された時間経過およびピーク間隔算出手段によって算出された時間間隔を所定の関数に代入することによりゲーム入力データを算出する。ゲーム処理手段は、ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行する。
【発明の効果】
【0037】
上記第1の発明によれば、プレイヤが入力装置を振り動かすような操作に応じて、当該入力装置自体の動きを適切に反映したゲーム処理を行うことができる。そのため、プレイヤが意図した動作に応じたゲーム処理が行われ、プレイヤの振り動かし動作と同期した処理によってゲームの興趣を向上させることができる。
【0038】
上記第2の発明によれば、直近の極値からの経過時間に基づいて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0039】
上記第3の発明によれば、プレイヤが入力装置を規則性を持って振り動かした場合、その振る動作に応じて出力される出力データが示す値の周期性を用いて極大値および極小値間の推移を擬することによって、プレイヤが実際に振り動かした操作と一致するゲーム入力データを得ることができる。
【0040】
上記第4の発明によれば、関数の周期、極値の時間間隔、および極値からの経過時間との関係に基づいて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0041】
上記第5の発明によれば、関数の周期、極大値と極小値との時間間隔、および直近の極値からの経過時間との関係に基づいて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0042】
上記第6の発明によれば、直近の極値の種別(極大値、極小値)に応じてゲーム入力データの正負を反転することによって、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0043】
上記第7および第8の発明によれば、正弦関数の周期を実際に振り動かす操作の周期に当てはめて、ゲーム入力データを算出することができる。
【0044】
上記第9および第10の発明によれば、余弦関数の周期を実際に振り動かす操作の周期に当てはめて、ゲーム入力データを算出することができる。
【0045】
上記第11の発明によれば、入力装置に生じる加速度に応じて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0046】
上記第12および第13の発明によれば、プレイヤに入力装置を反復的に傾ける操作をさせるようなゲームにおいて、実際に入力装置を振り動かした操作を擬したゲーム入力データを算出することができる。
【0047】
上記第14の発明によれば、プレイヤに入力装置を反復的に傾けていないとき、当該入力装置の静的な角度を擬したゲーム入力データを算出することができる。
【0048】
上記第15の発明によれば、プレイヤに入力装置を実空間の垂直方向に振り動かす操作をさせるようなゲームにおいて、実際に入力装置を振り動かした操作を擬したゲーム入力データを算出することができる。
【0049】
上記第16の発明によれば、プレイヤに入力装置を反復的に傾ける操作を終了したとき、当該入力装置の静的な角度を擬したゲーム入力データを算出することができる。
【0050】
上記第17の発明によれば、代表的な周期関数である正弦関数または余弦関数を用いて、出力データが示す値の周期性を適切に擬することができる。
【0051】
上記第18の発明によれば、プレイヤが入力装置自体に加える動きの強さにも応じて、プレイヤが実際に振り動かした操作を擬したゲーム入力データが得られる。そのため、プレイヤが意図した動作に応じたゲーム処理が行われ、プレイヤの振り動かす強さと同期した処理によってゲームの興趣を向上させることができる。
【0052】
上記第19の発明によれば、プレイヤが入力装置を振り動かすことを終了したことを、出力データを用いて判定することができる。
【0053】
上記第20の発明によれば、プレイヤが入力装置を振り動かしていないことを、出力データを用いて判定することができる。
【0054】
上記第21の発明によれば、プレイヤが入力装置を振り動かすことを終了した、またはプレイヤが入力装置を振り動かしていないとき、入力装置の静的な姿勢に応じてゲーム入力データが得られる。そのため、プレイヤが意図した動作に応じたゲーム処理が行われ、プレイヤが静的に入力装置の姿勢を変化させる操作と同期した処理によってゲームの興趣を向上させることができる。
【0055】
上記第22の発明によれば、入力装置自体の傾きを適切にオブジェクトの傾きに反映させたゲーム画像を表示することができる。
【0056】
上記第23の発明によれば、入力装置を振り動かす操作に応じてオブジェクトを移動させ、当該移動に応じて周辺の他のオブジェクトに所定の影響を与えるようなゲームを実現することができる。
【0057】
また、本発明のゲーム装置によれば、上述したゲームプログラムと同様の効果を得ることができる。
【発明を実施するための最良の形態】
【0058】
図1を参照して、本発明の一実施形態に係るゲーム装置について説明する。以下、説明を具体的にするために、当該ゲーム装置の一例の据置型のゲーム装置を含むゲームシステムについて説明する。なお、図1は据置型のゲーム装置3を含むゲームシステム1の外観図であり、図2はゲーム装置本体5のブロック図である。以下、当該ゲームシステム1について説明する。
【0059】
図1において、ゲームシステム1は、表示手段の一例の家庭用テレビジョン受像機(以下、モニタと記載する)2と、当該モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置本体5から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明の情報処理プログラムの一例のゲームプログラムを記録した光ディスク4と、当該光ディスク4のゲームプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体5に与えるためのコントローラ7とを備えている。
【0060】
また、ゲーム装置本体5は、通信ユニット6を内蔵する。通信ユニット6は、コントローラ7から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7とゲーム装置本体5とを無線通信によって接続する。さらに、ゲーム装置本体5には、当該ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置本体5の前部主面には、当該ゲーム装置本体5の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトスイッチ等が設けられている。
【0061】
また、ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ38が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置本体5は、フラッシュメモリ38に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置本体5のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0062】
コントローラ7は、通信ユニット6を内蔵するゲーム装置本体5へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて操作情報等の送信データを無線送信する。コントローラ7は、主にモニタ2の表示画面に表示されるゲーム空間に登場するプレイヤキャラクタ等を操作したりするための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キーやスティック等を含む)が設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって例えば赤外光を出力する。また、コントローラ7は、ゲーム装置本体5の通信ユニット6から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
【0063】
図2において、ゲーム装置本体5は、各種プログラムを実行する例えばCPU(セントラルプロセッシングユニット)30を備える。CPU30は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ33等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU30には、メモリコントローラ31を介して、GPU(Graphics Processing Unit)32、メインメモリ33、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35などが接続される。また、メモリコントローラ31には、所定のバスを介して、通信ユニット6、ビデオI/F(インターフェース)37、フラッシュメモリ38、オーディオI/F39、およびディスクI/F41が接続され、それぞれのインターフェースにモニタ2、スピーカ2a、およびディスクドライブ40が接続されている。
【0064】
GPU32は、CPU30の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU32は、図示しない画像処理専用のメモリやメインメモリ33の一部の記憶領域を用いて画像処理を行う。GPU32は、これらを用いてモニタ2に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ31およびビデオI/F37を介してモニタ2に出力する。
【0065】
メインメモリ33は、CPU30で使用される記憶領域であって、CPU30の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ33は、CPU30によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ33に記憶されたゲームプログラムや各種データ等が、CPU30によって実行される。
【0066】
DSP34は、ゲームプログラム実行時にCPU30において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM35が接続される。ARAM35は、DSP34が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP34は、ARAM35に記憶されたサウンドデータを読み出し、メモリコントローラ31およびオーディオI/F39を介してモニタ2に備えるスピーカ2aに出力させる。
【0067】
メモリコントローラ31は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。上述したように通信ユニット6は、コントローラ7からの送信データを受信し、当該送信データをCPU30へ出力する。また、通信ユニット6は、CPU30から出力された送信データをコントローラ7の通信部75へ送信する。ビデオI/F37には、モニタ2が接続される。オーディオI/F39にはモニタ2に内蔵されるスピーカ2aが接続され、DSP34がARAM35から読み出したサウンドデータやディスクドライブ40から直接出力されるサウンドデータをスピーカ2aから出力可能に接続される。ディスクI/F41には、ディスクドライブ40が接続される。ディスクドライブ40は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置本体5のバスやオーディオI/F39に出力する。
【0068】
図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た斜視図である。図4は、コントローラ7を下面前方から見た斜視図である。
【0069】
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0070】
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【0071】
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に4つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。
【0072】
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72a〜72gは、ゲーム装置本体5が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0073】
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置本体5の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0074】
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7から通信ユニット6へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
【0075】
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図5のスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
【0076】
一方、ハウジング71下面には、凹部が形成されている。ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
【0077】
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング70の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【0078】
ここで、以下の説明を具体的にするために、コントローラ7に対して設定する座標系について定義する。図3および図4に示すように、互いに直交するXYZ軸をコントローラ7に対して定義する。具体的には、コントローラ7の前後方向となるハウジング71の長手方向をZ軸とし、コントローラ7の前面(撮像情報演算部74が設けられている面)方向をZ軸正方向とする。また、コントローラ7の上下方向をY軸とし、ハウジング71の上面(操作ボタン72aが設けられた面)方向をY軸正方向とする。さらに、コントローラ7の左右方向をX軸とし、ハウジング71の右側面(図3では表されている側面)方向をX軸正方向とする。
【0079】
次に、図5および図6を参照して、コントローラ7の内部構造について説明する。なお、図5は、コントローラ7の上筐体(ハウジング71の一部)を外した状態を後面側から見た斜視図である。図6は、コントローラ7の下筐体(ハウジング71の一部)を外した状態を前面側から見た斜視図である。ここで、図6に示す基板700は、図5に示す基板700の裏面から見た斜視図となっている。
【0080】
図5において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751等(図6、図7参照)に接続される。また、無線モジュール753(図7参照)およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。また、加速度センサ701は、操作ボタン72dの左側の基板700上(つまり、基板700の中央部ではなく周辺部)に設けられる。したがって、加速度センサ701は、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ7の回転を良好な感度でゲーム装置本体5等が判定することができる。
【0081】
一方、図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体5から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。
【0082】
そして、基板700の下主面上には、バイブレータ704が取り付けられる。バイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704は、基板700等に形成された配線によってマイコン751と接続され、ゲーム装置本体5から送信された振動データに応じてその作動をオン/オフする。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
【0083】
次に、図7を参照して、コントローラ7の内部構成について説明する。なお、図7は、コントローラ7の構成を示すブロック図である。
【0084】
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。
【0085】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コントローラ7のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。
【0086】
コントローラ7は、3軸(X、Y、Z軸)の加速度センサ701を備えていることが好ましい。この3軸の加速度センサ701は、3方向、すなわち、上下方向(図3に示すY軸)、左右方向(図3に示すX軸)、および前後方向(図3に示すZ軸)で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、少なくとも1軸方向に沿った直線加速度を検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ701は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であることが好ましい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて、加速度センサ701が提供されてもよい。
【0087】
加速度センサ701に用いられるような加速度検出手段は、加速度センサ701の持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701からの直接の出力は、それら3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【0088】
しかしながら、加速度センサ701から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ7に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度(重力加速度)が検知されると、加速度センサ701からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象(コントローラ7)の傾きを判定することができる。このように、加速度センサ701をマイコン751(またはゲーム装置本体5に含まれるCPU30等の他のプロセッサ)と組み合わせて用いることによって、コントローラ7の傾き、姿勢、または位置を判定することができる。同様に、加速度センサ701を備えるコントローラ7がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ701によって生成される加速度信号を処理することによって、コントローラ7の様々な動きおよび/または位置を算出することができる。他の実施例では、加速度センサ701は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ701が静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。加速度センサ701でそれぞれ検知された加速度を示すデータは、通信部75に出力される。
【0089】
他の実施形態の例では、コントローラ7の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるMEMSジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ701と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転(または角速度)を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
【0090】
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、2つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロスコープとの基本的な差異と同様にジャイロスコープの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
【0091】
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置本体5からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置本体5から送信されたサウンドデータ等を処理する。また、マイコン751は、通信部75を介してゲーム装置本体5から送信された振動データ(例えば、バイブレータ704をONまたはOFFする信号)等に応じて、バイブレータ704を作動させる。
【0092】
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの3軸方向の加速度信号(X、Y、およびZ軸方向加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、X、Y、およびZ軸方向加速度データ、処理結果データ)を通信ユニット6へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から通信ユニット6への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、通信ユニット6への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からのX、Y、およびZ軸方向加速度データ、および撮像情報演算部74からの処理結果データがコントローラ7から送信される。そして、ゲーム装置本体5の通信ユニット6でその電波信号を受信し、ゲーム装置本体5で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、X、Y、およびZ軸方向加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体5のCPU30は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Bluetooth(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【0093】
次に、ゲーム装置本体5が行う具体的な処理を説明する前に、本ゲーム装置本体5で行うゲームの概要について説明する。図8に示すように、コントローラ7は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、プレイヤが片手でコントローラ7を把持し、コントローラ7を上下に振り動かす動作を行う。このようなプレイヤがコントローラ7を振離動かす動作に応じて、モニタ2に表示されるオブジェクトが振り動かされる。
【0094】
例えば、図9に示すように、モニタ2には、うちわを模したオブジェクトOBJが表示される。そして、プレイヤがコントローラ7を上下に振り動かす動作に応じて、仮想ゲーム世界においてオブジェクトOBJが上下にあおぐような動作を表現する。このとき、プレイヤが、ある周期でコントローラ7を上下に振り動かす動作を行うと、オブジェクトOBJも同じ周期で上下にあおぐような動作を表現する。また、プレイヤが上下に大きくコントローラ7を上下に振り動かす動作を行うと、オブジェクトOBJも大きく上下にあおぐような動作を表現する。また、プレイヤがコントローラ7本体を静的に傾けるような操作をした場合、仮想ゲーム空間内のオブジェクトOBJも同じような傾斜角度で傾いて表現される。つまり、オブジェクトOBJは、プレイヤがコントローラ7自体を振り動かす動作に同期してあおぐような動作を表現するため、プレイヤがあたかも仮想ゲーム空間内のオブジェクトOBJをあおいでいるようなゲーム感覚が得られる。
【0095】
例えば、プレイヤが静的にコントローラ7を上下に傾けることによって、コントローラ7から操作情報(具体的には、X、Y、およびZ軸方向加速度データ)をゲーム装置本体5に与える。また、プレイヤがコントローラ7を上下に振り動かす動作では、コントローラ7からその遠心力等に応じた操作情報をゲーム装置本体5に与える。このようなコントローラ7に加わる加速度の変化は、加速度センサ701によって検出できるため、加速度センサ701から出力されるX、Y、およびZ軸方向加速度データに対して追加の処理を行うことによって、コントローラ7の傾きや動きを算出することができる。一般的に、動作に応じて生じる加速度を検出する場合、加速度センサ701から出力される加速度ベクトル(あるいは、加速度の正負)は、コントローラ7の加速方向とは真逆のベクトルとなるため、検出した加速度の方向を考慮してコントローラ7の傾きや動きを算出することが必要であることは言うまでもない。
【0096】
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図10を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図10は、ゲーム装置本体5のメインメモリ33に記憶される主なデータを示す図である。
【0097】
図10に示すように、メインメモリ33には、加速度データバッファAccBufferが設けられる。また、メインメモリ33には、オブジェクト角度データDb、姿勢角度データDc、周期角度データDd、周期角度有効フラグデータDe、ピーク数データDf、仮極大値データDg、仮極小値データDh、仮極大値位置データDi、仮極小値位置データDj、次のピーク種別フラグデータDk、直近のピーク種別フラグデータDl、極大/極小値位置データDm、有効ピークデータ開始数データDn、振幅データDo、比率データDp、および画像データDq等が記憶される。なお、メインメモリ33には、図10に示す情報に含まれるデータの他、ゲームに登場するオブジェクトOBJや他のオブジェクト等に関するデータ(位置データ等)や仮想ゲーム空間に関するデータ(背景のデータ等)等、ゲーム処理に必要なデータが記憶される。
【0098】
加速度データバッファAccBufferには、コントローラ7から送信データとして送信されてくる一連の操作情報に含まれる加速度データが記憶される。この加速度データには、加速度センサ701がX、Y、およびZ軸の3軸成分に分けてそれぞれ検出したX軸方向加速度データDa1、Y軸方向加速度データDa2、およびZ軸方向加速度データDa3が含まれる。なお、ゲーム装置本体5に備える通信ユニット6は、コントローラ7から所定周期(例えば、1/200秒毎)に送信される操作情報に含まれる加速度データを受信し、通信ユニット6に備える図示しないバッファに蓄えられる。その後、加速度データがゲーム処理周期である1フレーム毎(例えば、1/60秒毎)に読み出されてメインメモリ33の加速度データバッファAccBufferが更新される。本実施例では、加速度データDaは、コントローラ7から送信された過去回数分(例えば、256)の加速度データが適宜更新されて格納される。
【0099】
なお、後述する処理フローでは、加速度データバッファAccBufferがゲーム処理周期である1フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コントローラ7からの送信周期毎に加速度データバッファAccBufferを更新し、当該更新された加速度データをゲーム処理周期毎に利用する態様でもかまわない。この場合、加速度データバッファAccBufferに記憶する加速度データDa1〜Da3を更新する周期と、ゲーム処理周期とが異なることになる。
【0100】
オブジェクト角度データDbは、仮想ゲーム世界におけるオブジェクトOBJの角度(オブジェクト角度θobj)を示すデータである。姿勢角度データDcは、実空間におけるコントローラ7全体の静的な傾き(姿勢角度θs)を示すデータである。周期角度データDdは、実空間においてコントローラ7に作用する加速度の周期を用いて算出されるコントローラ7全体の動的な傾き(周期角度θc)を示すデータである。周期角度有効フラグデータDeは、周期角度データDdが示す周期角度θcが有効なデータか否かを区別する周期角度有効フラグCfrgを示すデータである。
【0101】
ピーク数データDfは、加速度データバッファAccBufferに格納された加速度データ履歴が示す加速度において、当該加速度の正または負のピーク(以下、単にピークと記載する)の数(ピーク数Nm)を示すデータである。仮極大値データDgは、上記加速度の極大値(加速度の山)を検出する際に仮設定される仮極大値Tを示すデータである。仮極小値データDhは、上記加速度の極小値(加速度の谷)を検出する際に仮設定される仮極小値Bを示すデータである。仮極大値位置データDiは、仮極大値Tを示す加速度データが格納されている加速度データバッファAccBufferにおける位置(仮極大値位置Tin)を示すデータである。仮極小値位置データDjは、仮極小値Bを示す加速度データが格納されている加速度データバッファAccBufferにおける位置(仮極小値位置Bin)を示すデータである。次のピーク種別フラグデータDkは、上記加速度の極大値または極小値を検出する際に、次に検出されるべき値が極大値であるか極小値であるかを区別する次のピーク種別フラグNfrgを示すデータである。直近のピーク種別フラグデータDlは、直近に検出された加速度のピークが極大値であるか極小値であるかを区別する直近のピーク種別フラグFfrgを示すデータである。極大/極小値位置データDmは、決定された極大値または極小値を示す加速度データが格納されている加速度データバッファAccBufferにおける位置(極大/極小値位置Index)を示すデータであり、検出された極大値または極小値毎に順次0以上の数値が付与されてそれらの格納位置が示される。有効ピークデータ開始数データDnは、極大/極小値位置Indexの何個目からが有効な極大値または極小値を示すデータであるか(有効ピークデータ開始数Ms)を示すデータである。振幅データDoは、上記加速度データ履歴が示す加速度の振幅hを示すデータである。比率データDpは、加速度のピーク間の時間を基準として、加速度のピークから現時点までの時間の比率aを示すデータである。
【0102】
画像データDqは、オブジェクト画像データ等を含んでいる。オブジェクト画像データは、仮想ゲーム空間にオブジェクトOBJを配置してゲーム画像を生成するためのデータである。
【0103】
次に、図11〜図21を参照して、ゲーム装置本体5において行われるゲーム処理の詳細を説明する。なお、図11は、ゲーム装置本体5において実行されるゲーム処理の流れを示すフローチャートである。図12は、図11におけるステップ17の加速度バッファ更新処理の詳細な動作を示すサブルーチンである。図13は、図11におけるステップ18の姿勢角度算出処理の詳細な動作を示すサブルーチンである。図14は、図11におけるステップ19の周期角度算出処理の詳細な動作を示すサブルーチンである。図15は、図14におけるステップ81のピークデータ更新処理の詳細な動作を示すサブルーチンである。図16は、コントローラ7が静的に傾いた状態の一例を示す図である。図17は、コントローラ7が振り動かされている状態の一例を示す図である。図18は、コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第1の例を示す図である。図19は、コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第2の例を示す図である。図20は、プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化の一例を示す図である。図21は、仮想ゲーム世界におけるオブジェクトOBJの側面図である。なお、図11〜図15に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ7を振ることに応じて表現されるプレイヤキャラクタPCのモーションについて説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図11〜図15では、CPU30が実行する各ステップを「S」と略称する。
【0104】
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU30は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ33等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ33に読み込まれ、CPU30によって当該ゲームプログラムの実行が開始される。図11〜図15に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【0105】
図11において、CPU30は、処理ループで用いる一時変数iを0に設定する(ステップ11)。次に、CPU30は、加速度データバッファAccBufferの格納位置[i]の加速度データDa〜Dcを(0,0,0)に設定する(ステップ12)。そして、CPU30は、現在の一時変数iが255であるか否かを判断する(ステップ13)。一時変数iが255でない場合、CPU30は、一時変数iに1を加算して(ステップ14)、上記ステップ12に戻って処理を繰り返す。一方、一時変数iが255である場合、CPU30は、次のステップ15に処理を進める。これらステップ11〜ステップ14の処理によって、加速度データバッファAccBufferの格納位置[0]〜[255]に格納されるそれぞれ256個の加速度データDa〜Dcが、全て(0,0,0)に設定される。
【0106】
ステップ15において、CPU30は、ゲーム処理の初期設定処理を行い(ステップ15)、処理を次のステップに進める。例えば、CPU30は、オブジェクト角度θobj=0、姿勢角度θs=0、周期角度θc=0、周期角度有効フラグCfrg=false(偽)にそれぞれ設定して、メインメモリ33の各データを初期化する。
【0107】
次に、CPU30は、ゲームを終了するか否かを判断する(ステップ16)。ゲームを終了する条件としては、例えば、ゲームの成功または失敗が決定してゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU30は、ゲームを終了しない場合に次のステップ17に処理を進め、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0108】
ステップ17において、CPU30は、加速度バッファ更新処理を行い、処理を次のステップに進める。以下、図12を参照して、上記ステップ17で行う加速度バッファ更新処理について説明する。
【0109】
図12において、CPU30は、処理ループで用いる一時変数iを0に設定する(ステップ41)。次に、CPU30は、加速度データバッファAccBufferの格納位置[i]の加速度データDa〜Dcを格納位置[i+1]に移動させる(ステップ42)。そして、CPU30は、現在の一時変数iが254であるか否かを判断する(ステップ43)。一時変数iが254でない場合、CPU30は、一時変数iに1を加算して(ステップ44)、上記ステップ42に戻って処理を繰り返す。一方、一時変数iが254である場合、CPU30は、次のステップ45に処理を進める。
【0110】
ステップ45において、CPU30は、加速度データバッファAccBufferの格納位置[0]に最新の加速度データDa〜Dc(コントローラ7から受信した最新の操作情報に含まれる加速度データDa〜Dc)を格納し、当該サブルーチンによる処理を終了する。これらステップ41〜ステップ45の処理によって、加速度データバッファAccBufferの格納位置[0]〜[254]に格納されている255個の加速度データDa〜Dcの格納位置が順次繰り上げられ、格納位置[0]に最新の加速度データDa〜Dcが格納される。
【0111】
図11に戻り、ステップ17の加速度バッファ更新処理の後、CPU30は、姿勢角度算出処理を行って(ステップ18)、処理を次のステップに進める。以下、図13を参照して、上記ステップ18で行う姿勢角度算出処理について説明する。
【0112】
図13において、CPU30は、コントローラ7のZ軸正方向を基準として、当該コントローラ7に対して重力加速度が作用している角度θgを算出する(ステップ51)。そして、CPU30は、角度θgを用いて、実空間における水平方向を基準としてコントローラ7の姿勢を示す姿勢角度θsを算出して、姿勢角度データDcをメインメモリ33に格納し(ステップ52)、当該サブルーチンによる処理を終了する。
【0113】
ここで、図16を用いて、コントローラ7の傾きと姿勢角度θsとの関連について説明する。例えば、図16に示すように、コントローラ7の前面が上に向くように水平方向からコントローラ7を傾ける角度が姿勢角度θsとなる。コントローラ7の上面を姿勢角度θsだけ傾けて前面が上を向くようにコントローラ7を静止させた場合、コントローラ7の加速度センサ701は、Y軸負方向およびZ軸負方向の間の方向に生じる静的な重力加速度を検出する。そして、CPU30は、この重力加速度を検出した加速度センサ701からの出力に応じて、コントローラ7のZ軸正方向を基準として、当該コントローラ7に対して重力加速度が作用している角度θgを算出する。例えば、角度θgは、
【数1】
で算出する。ここで、acosは、ラジアン単位の逆余弦の値を返す関数である。Xaは、加速度バッファAccBufferの格納位置[0]に格納されたX軸方向の加速度データDaが示す加速度である。Yaは、加速度バッファAccBufferの格納位置[0]に格納されたY軸方向の加速度データDbが示す加速度である。Zaは、加速度バッファAccBufferの格納位置[0]に格納されたZ軸方向の加速度データDcが示す加速度である。そして、CPU30は、角度θgを用いて、実空間における水平方向を基準としたコントローラ7の姿勢を示す姿勢角度θsを算出する。例えば、姿勢角度θsは、
θs=θg−π/2
で算出する。
【0114】
図11に戻り、ステップ18の姿勢角度算出処理の後、CPU30は、周期角度算出処理を行って(ステップ19)、処理を次のステップに進める。以下、図14を参照して、上記ステップ19で行う周期角度算出処理について説明する。
【0115】
図14において、CPU30は、ピークデータ更新処理を行って(ステップ81)、処理を次のステップに進める。以下、図15を参照して、上記ステップ81で行うピークデータ更新処理について説明する。
【0116】
図15において、ピークデータ更新処理の初期化処理を行い(ステップ101)、処理を次のステップに進める。例えば、CPU30は、ピーク数Nm=0、一時変数i=0、仮極大値T=AccBuffer[0]y、仮極小値B=AccBuffer[0]y、次のピーク種別フラグNfrg=false、仮極大値位置Tin=0、仮極小値位置Bin=0、直近のピーク種別フラグFfrg=falseにそれぞれ設定して、メインメモリ33の各データを初期化する。なお、AccBuffer[0]yは、加速度バッファAccBufferの格納位置[0]に格納されたY軸方向の加速度データDbが示す加速度を示しており、以下、加速度バッファAccBufferの格納位置[i]に格納されたY軸方向の加速度データDbが示す加速度をAccBuffer[i]yと記載する。
【0117】
次に、CPU30は、一時変数iに1を加算する(ステップ102)。次に、CPU30は、現在の一時変数iが255より大きい数であるか否かを判断する(ステップ103)。一時変数iが255以下である場合、CPU30は、次のステップ104に処理を進める。一方、一時変数iが255より大きい場合、CPU30は、当該サブルーチンによる処理を終了する。
【0118】
ステップ104において、CPU30は、当該ピークデータ更新処理において、加速度のピークが1つ以上既に検出されたか否かを判断する。具体的には、CPU30は、ピーク数データDfを参照し、ピーク数Nm=0であれば加速度のピークが検出されていないと判断する。そして、CPU30は、加速度のピークが検出されていない場合、次のステップ105に処理を進める。一方、CPU30は、既に加速度のピークが検出されている場合、次のステップ115に処理を進める。
【0119】
ここで、図17および図18を用いて、コントローラ7を上下に振り動かしたときに検出される加速度について説明する。図17に示すように、プレイヤがコントローラ7を上下に振り動かした場合、コントローラ7の加速度センサ701は、上述した静的な重力加速度に加えて振り動かすことによって生じる遠心力や振り方向または反振り方向への加速度を検出する。ここで、加速度センサ701からの出力を用いて遠心力成分や振り方向または反振り方向への加速度成分を抽出できれば、その遠心力や加速度が作用している時点におけるコントローラ7の動作角度の分析が可能である。ここで、コントローラ7のY軸方向に作用する加速度に注目する。図17から明らかなように、Y軸方向に作用する加速度は、コントローラ7を振り上げるときに作用する方向とコントローラ7を振り下げるときに作用する方向とが相反することがわかる。つまり、プレイヤがコントローラ7を振り動かした場合、その振り動かし周期に応じてY軸方向に作用する加速度が周期性を持って変化する。
【0120】
例えば、図18に示すように、プレイヤがコントローラ7を振り動かした場合、コントローラ7のY軸方向に作用する加速度が正方向のピーク(極大値)および負方向のピーク(極小値)を繰り返しながら変化する。このような加速度の周期性、ピークに対する現時点の位置、加速度変化の振幅等を解析すれば、プレイヤがコントローラ7を振り動かしている周期(速度)、振り動かし途中の角度(周期角度)、および振り動かす強さ等を算出することができる。上記ステップ104の処理では、加速度バッファAccBufferに格納された加速度履歴に対してこのようなピークが既に検出されたか否かを判定している。
【0121】
図15に戻り、ステップ105において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極大値Tより大きいか否かを判断する。そして、CPU30は、T<AccBuffer[i]yである場合、AccBuffer[i]yを仮極大値Tに設定して仮極大値データDgを更新し、一時変数iを仮極大値位置Tinに設定して仮極大値位置データDiを更新して(ステップ106)、次のステップ107に処理を進める。一方、CPU30は、T≧AccBuffer[i]yである場合、そのまま次のステップ107に処理を進める。
【0122】
ステップ107において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極小値Bより小さいか否かを判断する。そして、CPU30は、B>AccBuffer[i]yである場合、AccBuffer[i]yを仮極小値Bに設定して仮極小値データDhを更新し、一時変数iを仮極小値位置Binに設定して仮極小値位置データDjを更新して(ステップ108)、次のステップ109に処理を進める。一方、CPU30は、B≦AccBuffer[i]yである場合、そのまま次のステップ109に処理を進める。
【0123】
ステップ109において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極大値Tから定数K(例えば、0.5G)を減算した値より小さいか否かを判断する。そして、CPU30は、T−K>AccBuffer[i]yである場合、次のステップ111に処理を進める。一方、CPU30は、T−K≦AccBuffer[i]yである場合、次のステップ110に処理を進める。
【0124】
ステップ110において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極小値Bに定数K(例えば、0.5G)を加算した値より大きいか否かを判断する。そして、CPU30は、B+K<AccBuffer[i]yである場合、次のステップ113に処理を進める。一方、CPU30は、B+K≧AccBuffer[i]yである場合、上記ステップ102に戻って、処理を繰り返す。
【0125】
ステップ111において、CPU30は、直近のピーク種別フラグFfrg=true(真)に設定して直近のピーク種別フラグデータDlを更新する。そして、CPU30は、山確定処理を行い(ステップ112)、上記ステップ102に戻って、処理を繰り返す。例えば、CPU30は、山確定処理において、AccBuffer[i]yを仮極小値Bに設定して仮極小値データDhを更新し、仮極大値位置Tinを極大/極小値位置Index[Nm]に設定して極大/極小値位置データDmを更新し、ピーク数Nmに1を加算してピーク数データDfを更新し、次のピーク種別フラグNfrg=falseに設定して次のピーク種別フラグデータDkを更新する。この山確定処理によって、現在、仮極大値Tを示している仮極大値位置Tinの加速度が極大値であると確定している。以下、図18を参照して、加速度の極大値を確定する原理について説明する。
【0126】
上記ステップ105およびステップ106の処理では、格納位置[0]からY軸方向の加速度データが示す加速度が、既に評価済みの加速度に対して最大の加速度であるか否かを順次判定し、最大である場合に極大値候補を更新している。例えば、図18に示すように、格納位置[0]から加速度が漸増的に大きくなって極大値に到達するような変化であるとき、格納位置[0]から極大値を示す格納位置まで(図示m1)は、順次極大値候補が更新されていく。そして、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化する位置(図示m2)となると、各格納位置に格納された加速度が極大値候補より小さな値となるために極大値候補が更新されない。そして、上記ステップ109の処理によって、加速度が極大値候補から定数Kだけ減算した値まで小さくなると(図示p1)、当該極大値候補が極大値として確定される。これは、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化した時点で極大値を確定することにより、極大値付近における加速度の変動によって複数の極大値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極大値と誤判定したりすることを防止するためである。なお、定数Kは、例えば0.5Gに設定されるが、加速度の検出精度や検出可能範囲等に応じて適宜設定すればよい。
【0127】
図15に戻り、ステップ113において、CPU30は、直近のピーク種別フラグFfrg=falseに設定して直近のピーク種別フラグデータDlを更新する。そして、CPU30は、谷確定処理を行い(ステップ114)、上記ステップ102に戻って、処理を繰り返す。例えば、CPU30は、谷確定処理において、AccBuffer[i]yを仮極大値Tに設定して仮極大値データDgを更新し、仮極小値位置Binを極大/極小値位置Index[Nm]に設定して極大/極小値位置データDmを更新し、ピーク数Nmに1を加算してピーク数データDfを更新し、次のピーク種別フラグNfrg=trueに設定して次のピーク種別フラグデータDkを更新する。この谷確定処理によって、現在、仮極小値Bを示している仮極小値位置Binの加速度が極小値であると確定している。以下、図19を参照して、加速度の極小値を確定する原理について説明する。
【0128】
上記ステップ107およびステップ108の処理では、格納位置[0]からY軸方向の加速度データが示す加速度が、既に評価済みの加速度に対して最小の加速度であるか否かを順次判定し、最小である場合に極小値候補を更新している。例えば、図19に示すように、格納位置[0]から加速度が漸減的に小さくなって極小値に到達するような変化であるとき、格納位置[0]から極小値を示す格納位置まで(図示m3)は、順次極小値候補が更新されていく。そして、極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化する位置(図示m4)となると、各格納位置に格納された加速度が極小値候補より大きな値となるために極小値候補が更新されない。そして、上記ステップ110の処理によって、加速度が極小値候補を定数Kだけ加算した値まで大きくなると(図示p2)、当該極小値候補が極小値として確定される。これは、極大値と同様に極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化した時点で極小値を確定することによりと、極小値付近における加速度の変動によって複数の極小値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極小値と誤判定したりすることを防止するためである。
【0129】
図15に戻り、上記ステップ104において、既に加速度のピーク1つ以上が検出されている場合、CPU30は、次に検出されるピークは山か否かを判断する(ステップ115)。具体的には、CPU30は、次のピーク種別フラグデータDkを参照し、次のピーク種別フラグNfrg=trueに設定されている場合、次に検出されるピークが山であると判定する。そして、CPU30は、次に検出されるピークが山でない(つまり、谷)場合、次のステップ116に処理を進める。一方、CPU30は、次に検出されるピークが山である場合、次のステップ119に処理を進める。
【0130】
ステップ116およびステップ117で行われる処理は、上記ステップ107およびステップ108と同様に加速度の極小値を検出する処理であり、既に極大値が1つ以上確定した後に次に出現すると予想される極小値を検出する。ステップ116およびステップ117で行われる処理は、上記ステップ107およびステップ108と同様であるため、詳細な説明を省略する。
【0131】
上記ステップ116およびステップ117の処理の後、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極小値Bに定数L(例えば、2.0G)を加算した値より大きいか否かを判断する(ステップ118)。そして、CPU30は、B+L<AccBuffer[i]yである場合、上記ステップ114(谷確定処理)に処理を進める。一方、CPU30は、B+L≧AccBuffer[i]yである場合、上記ステップ102に戻って、処理を繰り返す。
【0132】
例えば、図18に示すように、極大値を確定した後に、極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化する位置(図示m5)となり、加速度が極小値候補を定数Lだけ加算した値まで大きくなると(図示p3)、当該極小値候補が極小値として確定される。これも、極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化した時点で極小値を確定することにより、極小値付近における加速度の変動によって複数の極小値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極小値と誤判定したりすることを防止するためである。なお、定数Lは、例えば2.0Gに設定されるが、加速度の検出精度や検出可能範囲等に応じて適宜設定すればよい。
【0133】
ステップ119およびステップ120で行われる処理は、上記ステップ105およびステップ106と同様に加速度の極大値を検出する処理であり、既に極小値が1つ以上確定した後に次に出現すると予想される極大値を検出する。ステップ119およびステップ120で行われる処理は、上記ステップ105およびステップ106と同様であるため、詳細な説明を省略する。
【0134】
上記ステップ119およびステップ120の処理の後、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極大値Tから定数L(例えば、2.0G)を減算した値より小さいか否かを判断する(ステップ121)。そして、CPU30は、T−L>AccBuffer[i]yである場合、上記ステップ112(山確定処理)に処理を進める。一方、CPU30は、T−L≦AccBuffer[i]yである場合、上記ステップ102に戻って、処理を繰り返す。
【0135】
例えば、図19に示すように、極小値を確定した後に、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化する位置(図示m6)となり、加速度が極大値候補から定数Lを減算した値まで小さくなると(図示p4)、当該極大値候補が極大値として確定される。これも、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化した時点で極大値を確定することにより、極大値付近における加速度の変動によって複数の極大値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極大値と誤判定したりすることを防止するためである。
【0136】
このように、ピークデータ更新処理によって、加速度データバッファAccBufferに格納された加速度履歴に対して、加速度のピークの数、加速度のピークを示した格納位置、加速度のピークにおける加速度の大きさ等が検出される。
【0137】
図14に戻り、ステップ81のピークデータ更新処理の後、CPU30は、有効ピークデータ開始数Ms=0に設定して有効ピークデータ開始数データDnを更新し(ステップ82)、処理を次のステップに進める。
【0138】
次に、CPU30は、上記ステップ81におけるピークデータ更新処理において、加速度のピークがあったか否かを判断する(ステップ83)。例えば、CPU30は、ピーク数データDfが示すピーク数Nmが1以上の数値に設定されているとき、加速度のピークがあったと判定する。そして、CPU30は、加速度のピークがあった場合、次のステップ84に処理を進める、一方、CPU30は、加速度のピークがない場合(Nm=0)、次のステップ98に処理を進める。
【0139】
ステップ84において、CPU30は、極大/極小値位置データDmを参照して極大/極小値位置Index[0]=0であるか否かを判断する。そして、CPU30は、極大/極小値位置Index[0]=0である場合、有効ピークデータ開始数Ms=1に設定して有効ピークデータ開始数データDnを更新し(ステップ85)、次のステップ86に処理を進める。一方、CPU30は、極大/極小値位置Index[0]=0でない場合、そのまま次のステップ86に処理を進める。
【0140】
ここで、図18および図19を用いて、上記ステップ84およびステップ85の処理の目的について説明する。上述したピークデータ更新処理においては、上記ステップ101の初期化処理で仮極大値Tおよび仮極小値BがいずれもAccBuffer[0]y(つまり、格納位置[0]におけるY軸方向の加速度の値)に設定される。このような仮極大値Tおよび仮極小値Bを設定した後、図18に示すような加速度変化が生じていると、格納位置[0]から極大値を示す格納位置まで(図示m1)は、仮極小値Bが更新されないため、加速度が仮極小値Bに定数Kを加算した値まで大きくなると(図示p5)、当該仮極小値Bが最初のピークとして確定される。このとき、最初のピークとして極小値が格納位置[0]に格納されているため、極大/極小値位置Index[0]=0に設定される。一方、図19に示すような加速度変化が生じていると、格納位置[0]から極小値を示す格納位置まで(図示m3)は、仮極大値Tが更新されないため、加速度が仮極大値Tから定数Kを減算した値まで小さくなると(図示p6)、当該仮極大値Tが最初のピークとして確定される。このときも、最初のピークとして極大値が格納位置[0]に格納されているため、極大/極小値位置Index[0]=0に設定される。
【0141】
上述した点p5およびp6は、いずれも加速度のピークではないが極大値または極小値として確定されてしまう例であり、真のピークとは区別されなければならない。したがって、上記ステップ84およびステップ85の処理では、極大/極小値位置Index[0]=0の場合に格納位置[0]の加速度がピークではないことを区別するために、有効ピークデータ開始数Msを1(つまり、1つめのピークは無効)に設定している。
【0142】
図14に戻り、ステップ86において、上記ステップ81におけるピークデータ更新処理において、有効な加速度のピークが2つ以上あったか否かを判断する。例えば、CPU30は、ピーク数データDfが示すピーク数Nmが有効ピークデータ開始数Msに1を加算した値より大きい値に設定されているとき、有効な加速度のピークが2つ以上あったと判定する。そして、CPU30は、有効な加速度のピークが2つあった場合、次のステップ87に処理を進める、一方、CPU30は、有効な加速度のピークが2つ未満である場合、次のステップ98に処理を進める。
【0143】
ステップ87において、CPU30は、プレイヤがコントローラ7を振り動かす操作を終了したか否かを判断する。例えば、CPU30は、現時点から直近の加速度ピークまでの時間が、加速度ピーク間の時間の所定倍(例えば、1.5倍)より長い場合、プレイヤがコントローラ7を振り動かす操作を終了したと判断する。具体的には、CPU30は、
Index[Ms]>(index[Ms−1]−Index[Ms])*1.5
であれば、プレイヤがコントローラ7を振り動かす操作を終了したと判断する。そして、CPU30は、プレイヤがコントローラ7を振り動かす操作を継続している場合、次のステップ88に処理を進める。一方、CPU30は、プレイヤがコントローラ7を振り動かす操作を終了した場合、次のステップ98に処理を進める。
【0144】
ここで、図20を用いて、プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化について説明する。図20では、加速度データバッファAccBufferに格納された加速度履歴において、プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化を実線で示し、プレイヤがコントローラ7を振り動かす操作を継続しているときの加速度変化を破線で示している。図20に示すように、プレイヤがコントローラ7を規則正しく振り動かしている場合、Y軸方向の加速度も当該操作に応じて一定の周期で変化する。一方、プレイヤがコントローラ7を振り動かす操作を終了するとき、Y軸方向の加速度が変化する周期が崩れ、その振幅も小さくなる。その結果、現時点から1つ目の加速度ピークまでの時間が長くなっていく。つまり、加速度ピークが生じる間隔(Index[Ms+1]−Index[Ms])を基準として、現時点から1つ目の加速度ピークが生じるまでの時間(Index[Ms])を比較判定すれば、プレイヤがコントローラ7を振り動かす操作を終了したことを検出することができる。
【0145】
図14に戻り、ステップ88において、CPU30は、加速度データバッファAccBufferに格納された加速度履歴における加速度の振幅hを算出し、振幅データDoを更新して、処理を次のステップに進める。例えば、CPU30は、振幅hを
h=|AccBuffer[index[Ms+1]]y−AccBuffer[index[Ms]]y|
で算出する。図18に示す加速度変化の例では、上記ステップ88において図18に示す振幅hが算出される。
【0146】
次に、CPU30は、加速度ピークの間隔を基準として、加速度ピークから現時点までの時間の比率aを算出し、比率データDpを更新して(ステップ89)、処理を次のステップに進める。例えば、CPU30は、比率aを
a=Index[Ms]/(index[Ms+1]−Index[Ms])
で算出する。図18に示す加速度変化の例では、格納位置[index[Ms+1]]から格納位置[Index[Ms]]までの時間を1とした場合の格納位置[0]から格納位置[Index[Ms]]までの時間の比率aが、上記ステップ89において算出される。図18から明らかなように、比率aは、加速度変化の周期の半分を基準とした直近の加速度ピークから現時点までの時間の比率であり、当該周期に対する現時点の時間的な位置が算出されることになる。
【0147】
次に、CPU30は、比率aが1.0より大きい値か否かを判断する(ステップ90)。そして、CPU30は、a>1.0である場合、比率aを1.0に設定して比率データDpを更新し(ステップ91)、次のステップ92に処理を進める。一方、CPU30は、a≦1.0である場合、そのまま次のステップ92に処理を進める。
【0148】
ステップ92において、CPU30は、正弦関数を用いて周期角度θcを算出し、周期角度データDdを更新して、処理を次のステップに進める。例えば、CPU30は、周期角度θcを
θc=q*h*sin(π*a)
で算出する。ここで、qは定数である。このように、周期角度θcは、加速度変化の周期性を周期関数(ここでは、正弦関数)に擬して、当該周期に対する現時点の時間的な位置(比率a)を用いて、コントローラ7を上下に振り動かすときの現時点における周期角度θcを推定している。つまり、直近の極大値もしくは極小値となる加速度データが取得されてからの経過時間を用いて、周期関数より現時点の操作状態を推定していることになる。
【0149】
なお、上述した周期角度θcを算出する本質的な原理は、過去に生じた加速度ピーク間の加速度推移を所定の関数で擬して、過去の加速度ピーク間の時間に対して直近の加速度ピークから現時点までの時間の割合を当該関数に当てはめて、現時点のコントローラ7の動きを推定するというものである。したがって、加速度変化の周期性を表す周期関数は、他の周期関数でもかまわない。例えば、余弦関数等、他の三角関数に加速度変化の周期性を擬してもかまわない。余弦関数を用いる場合、π*aにn*π(nは自然数)を加算または減算した値を変数として代入することによって、周期角度θcを算出することが可能である。
【0150】
また、上述した周期関数は、加速度変化の周期性を用いて次に生じる加速度ピークまでの加速度の推移を擬するために用いられているが、次の加速度ピークまでの加速度推移を推定できる関数であれば他の関数を用いてもかまわない。例えば、2点の加速度ピーク間の加速度推移が、当該2点間を直線やベジエ曲線等で近似されると推定して、上記時間割合から周期角度θcを求めてもかまわない。また、2点間を補間する各種補間法(スプライン補間等)を用いて2点の加速度ピーク間の加速度推移を推定して、上記時間割合から周期角度θcを求めてもかまわない。
【0151】
次に、CPU30は、直近の加速度ピークが山(つまり、極大値)であるか否かを判断する(ステップ93)。例えば、CPU30は、直近のピーク種別フラグデータDlを参照して、直近のピーク種別フラグFfrg=trueである場合、直近の加速度ピークが山であると判定する。そして、CPU30は、直近の加速度ピークが山でない場合(つまり、極小値)、周期角度θcの正負を反転させて(θc←−θc)周期角度データDdを更新し(ステップ94)、次のステップ95に処理を進める。一方、CPU30は、直近の加速度ピークが山である場合、そのまま次のステップ95に処理を進める。
【0152】
ステップ95において、CPU30は、有効ピークデータ開始数データDnを参照して、有効ピークデータ開始数Ms=1であるか否かを判断する。そして、CPU30は、Ms=1でない場合、周期角度θcの正負を反転させて(θc←−θc)周期角度データDdを更新し(ステップ96)、次のステップ97に処理を進める。一方、CPU30は、Ms=1である場合、そのまま次のステップ97に処理を進める。
【0153】
ステップ97において、CPU30は、周期角度有効フラグCfrgをtrueに設定して周期角度有効フラグデータDeを更新し、当該サブルーチンによる処理を終了する。一方、ピークデータ更新処理において、有効な加速度ピークが2つ未満である場合やプレイヤがコントローラ7を振り動かす操作を終了している場合、CPU30は、ステップ98の処理を行う。ステップ98において、CPU30は、周期角度有効フラグCfrgをfalseに設定して周期角度有効フラグデータDeを更新し、当該サブルーチンによる処理を終了する。
【0154】
図11に戻り、ステップ19の周期角度算出処理の後、CPU30は、周期角度有効フラグデータDeを参照して、周期角度有効フラグCfrgがtrueに設定されているか否かを判断する(ステップ20)。そして、CPU30は、周期角度有効フラグCfrg=falseの場合、次のステップ21に処理を進める。一方、CPU30は、周期角度有効フラグCfrg=trueの場合、次のステップ22に処理を進める。
【0155】
ステップ21において、CPU30は、姿勢角度データDcが示す姿勢角度θsおよびオブジェクト角度データDbに格納されているオブジェクト角度θobjを用いて新たなオブジェクト角度θobjを算出し、オブジェクト角度データDbを更新して、次のステップ23に処理を進める。例えば、CPU30は、新たなオブジェクト角度θobjを
θobj←θobj+(θs−θobj)*R
で算出する。ここで、Rは定数であり、例えばR=0.8である。
【0156】
ステップ22において、CPU30は、周期角度データDdが示す周期角度θcおよびオブジェクト角度データDbに格納されているオブジェクト角度θobjを用いて新たなオブジェクト角度θobjを算出し、オブジェクト角度データDbを更新して、次のステップ23に処理を進める。例えば、CPU30は、新たなオブジェクト角度θobjを
θobj←θobj+(θc−θobj)*R
で算出する。ここで、Rは定数であり、例えばR=0.8である。
【0157】
ステップ23において、CPU30は、オブジェクト角度データDbを参照してオブジェクト角度θobjを用いて、オブジェクトOBJがオブジェクト角度θobjだけ傾いた様子をモニタ2に表示し、上記ステップ16に戻って処理を繰り返す。例えば、図21に示すように、オブジェクト角度θobjは、仮想ゲーム世界の水平方向に対するオブジェクトOBJの傾きを示しており、当該オブジェクト角度θobjが変化することによってオブジェクトOBJの傾きが変化して表示される。また、オブジェクト角度θobjが周期性を有する変化をした場合、オブジェクトOBJが所定の回転軸を中心に仮想ゲーム世界においてあおぐように動作することになる。
【0158】
このように、上記実施形態に係るゲーム装置3は、プレイヤがコントローラ7を振り動かすような操作をしても、当該コントローラ7自体の動きを適切に反映したゲーム画像を表示することができる。例えば、プレイヤがコントローラ7を激しく振り動かした場合でも、その振る動作に応じて加速度センサが検出した加速度の周期性を用いて加速度ピーク間の推移を補間することによって、プレイヤが実際に振り動かした操作と一致する角度データを求めることができる。そのため、プレイヤが意図した動作がゲーム画像に表現され、プレイヤの振り動かし動作と同期した動作を表示してゲームの興趣を向上させることができる。
【0159】
なお、上述した周期角度θcを算出する本質的な原理は、過去に生じた加速度ピーク間の加速度推移を所定の関数で擬して、過去の加速度ピーク間の時間に対して直近の加速度ピークから現時点までの時間の割合を当該関数に当てはめて、現時点のコントローラ7の動きを推定するというものである。上述した処理動作においては、加速度の極大値から極小値までの推移または加速度の極小値から極大値までの推移を所定の関数で擬して、現時点のコントローラ7の動きを推定しているが、他のピーク値等を用いることもできる。
【0160】
例えば、加速度ピークについては、極大値および極小値の一方の極値のみを検出してもかまわない。このようなピーク検出を行ってピーク間の加速度推移を正弦関数で擬する場合、上述した周期角度θcを算出する数式において2πに比率aを乗算した値を変数として代入することによって、周期角度θcを算出することができる。また、このようなピーク検出を行ってピーク間の加速度推移を余弦関数で擬する場合、2πに比率aを乗算した値にn*π(nは自然数)を加算または減算した値を変数として代入することによって、周期角度θcを算出することができる。
【0161】
また、上記加速度ピークの時間間隔は、少なくとも1回算出すれば周期角度θcを算出することができるが、複数回繰り返して時間間隔を更新することによって、周期角度θcを算出する精度が高くなる。例えば、上記動作処理のように極大値または極小値を検出するごとに加速度ピークの時間間隔を算出してもよいし、所定条件ごと(例えば、極大値および/または極小値を所定回数検出した場合や、所定時間が経過した場合など)に時間間隔を算出してもよい。また、上述した動作処理では、所定処理周期ごとに加速度データDaを取得し、その取得周期を用いて時間間隔を算出しているが、加速度データDaの出力時刻や取得時刻を示すデータをメインメモリ33に記憶して当該データに基づいて時間間隔を算出してもかまわない。
【0162】
また、上述した説明では、算出した周期角度θcや姿勢角度θsを用いて、仮想ゲーム世界におけるオブジェクトOBJの傾斜を示すオブジェクト角度θobjを算出する例を説明したが、オブジェクトOBJの状態を示す他のゲームパラメータを算出してもかまわない。例えば、仮想ゲーム世界におけるオブジェクトOBJの位置(例えば、上下や左右に往復移動中の位置)やオブジェクトOBJの移動速度を、上記周期角度θcを用いて算出してもかまわない。算出した周期角度θcや姿勢角度θsを用いて、仮想ゲーム世界におけるオブジェクトOBJの状態を示す様々なゲームパラメータを算出することができる。
【0163】
また、周期角度θcや姿勢角度θsを用いて算出されたゲームパラメータに基づいて変化するオブジェクトOBJの状態に応じて、他のオブジェクトが影響を受けるようにしてもかまわない。例えば、図9に示すようにうちわを模したオブジェクトOBJがあおぐ動作を表現する場合、そのあおぐ動作に応じて発生する仮想ゲーム世界における風量によって他のオブジェクトが移動する(例えば、飛ばされる)ようにしてもかまわない。上述したコントローラ7を振り動かす速度等に応じて、オブジェクトOBJがあおぐ速度や角度も変化するため、結果的にコントローラ7を振り動かす操作が上記他のオブジェクトを移動させる速度等に影響を与えることになる。
【0164】
また、1軸方向のみの加速度を検出する加速度センサを用いても本発明を実現することができる。例えば、Y軸(図3、図4参照)成分のみ検出して出力する加速度センサを用いても、上述したゲーム処理を実現することができる。この場合、コントローラ7の静的な角度(姿勢角度θs)を算出するとき(ステップ18)は、検出したY軸方向の加速度が0である場合にコントローラ7が直上または鉛直方向に向けられていると仮定し、Y軸方向の加速度の大きさに応じて重力加速度が作用している方向を簡易的に判定して姿勢角度θsを算出する。そして、コントローラ7が振り動かされた後は、上述したフローチャートに基づいて、Y軸方向の加速度の大きさのみを取り扱って処理を行う。
【0165】
また、上述した説明では、コントローラ7に内蔵する加速度センサからの出力データを用いてゲーム処理する例を用いたが、他のセンサからの出力データを用いてもかまわない。例えば、コントローラ7にジャイロセンサを搭載する場合、コントローラ7を振り動かせば当該ジャイロセンサが検出するコントローラ7の回転角度においても上記周期性や極大値および極小値が算出できる。したがって、ジャイロセンサが検出したコントローラ7の回転角度を示すデータを取得し、出力信号に対して行う処理を適宜変更すれば、上記周期角度θcや姿勢角度θsを算出することが可能となる。
【0166】
また、上述したオブジェクト角度θobj、姿勢角度θs、周期角度θcは、現実の空間や仮想ゲーム空間における水平方向を基準方向としてそれぞれ設定されるが、他の方向を基準方向としてもかまわない。例えば、現実の空間や仮想ゲーム空間における直上方向や鉛直方向等を基準方向に設定してもかまわない。
【0167】
また、上述した説明では、コントローラ7を振り動かす動作を用いて操作するゲーム装置本体5をゲームシステム1に適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置にも適用することができる。例えば、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が表示しているオブジェクトの状態を制御する等、入力装置に生じる加速度に基づいて様々な処理を行うことができる。
【0168】
また、上述した説明では、コントローラ7とゲーム装置本体5とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置本体5の接続端子に接続する。
【0169】
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。
【0170】
また、本発明のゲームプログラムは、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、ゲームプログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、ゲームプログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【産業上の利用可能性】
【0171】
本発明に係るゲームプログラムおよびゲーム装置は、入力装置自体の動きを適切に反映したゲーム処理を行うことができ、ゲームコントローラ等に与えられる動作に応じて仮想オブジェクト等の状態を変化させるゲームプログラムやゲーム装置として有用である。
【図面の簡単な説明】
【0172】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】図1のゲーム装置本体5の機能ブロック図
【図3】図1のコントローラ7の上面後方から見た斜視図
【図4】図3のコントローラ7を下面前方から見た斜視図
【図5】図3のコントローラ7の上筐体を外した状態を示す斜視図
【図6】図4のコントローラ7の下筐体を外した状態を示す斜視図
【図7】図3のコントローラ7の構成を示すブロック図
【図8】図3のコントローラ7を用いてゲーム操作するときの状態を概説する図解図
【図9】モニタ2に表示されるオブジェクトOBJの一例を示す図
【図10】ゲーム装置本体5のメインメモリ33に記憶される主なデータを示す図
【図11】ゲーム装置本体5において実行されるゲーム処理の流れを示すフローチャート
【図12】図11におけるステップ17の加速度バッファ更新処理の詳細な動作を示すサブルーチン
【図13】図11におけるステップ18の姿勢角度算出処理の詳細な動作を示すサブルーチン
【図14】図11におけるステップ19の周期角度算出処理の詳細な動作を示すサブルーチン
【図15】図14におけるステップ81のピークデータ更新処理の詳細な動作を示すサブルーチン
【図16】コントローラ7が静的に傾いた状態の一例を示す図
【図17】コントローラ7が振り動かされている状態の一例を示す図
【図18】コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第1の例を示す図
【図19】コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第2の例を示す図
【図20】プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化の一例を示す図
【図21】仮想ゲーム世界におけるオブジェクトOBJの側面図
【符号の説明】
【0173】
1…ゲームシステム
2…モニタ
2a、706…スピーカ
3…ゲーム装置
30…CPU
31…メモリコントローラ
32…GPU
33…メインメモリ
34…DSP
35…ARAM
36…コントローラI/F
37…ビデオI/F
38…フラッシュメモリ
39…オーディオI/F
40…ディスクドライブ
41…ディスクI/F
4…光ディスク
5…ゲーム装置本体
6…通信ユニット
7…コントローラ
71…ハウジング
72…操作部
73…コネクタ
74…撮像情報演算部
741…赤外線フィルタ
742…レンズ
743…撮像素子
744…画像処理回路
75…通信部
751…マイコン
752…メモリ
753…無線モジュール
754…アンテナ
700…基板
701…加速度センサ
702…LED
704…バイブレータ
707…サウンドIC
708…アンプ
8…マーカ
【技術分野】
【0001】
本発明は、ゲームプログラムおよびゲーム装置に関し、より特定的には、入力装置自体の動きに応じてゲーム処理を行うゲームプログラムおよびゲーム装置に関する。
【背景技術】
【0002】
従来、ゴルフクラブや野球のバット等のような棒状物を振る動作を入力するゲーム(ゴルフゲームや野球ゲーム)がある。これらのゲームにおいては、上記棒状物を振る動作を入力するためのコントローラに、スイッチを利用したボタンやレバー等を用いていた。
【0003】
また、上記ボタンやレバー等を用いずに振る動作を入力する棒状のコントローラ(入力制御装置)も開示されている(例えば、特許文献1参照)。上記特許文献1で開示されたコントローラは、加速度センサを内蔵している。そして、プレイヤは、上記棒状のコントローラを手に持ち、実際に振る動作を行う。例えば、剣劇を体感できる3Dゲームのような場合は、上記棒状のコントローラを刀剣に見立て、プレイヤがコントローラで刀剣を振るような動作を行う。そのとき、コントローラに内蔵された加速度センサからプレイヤの動作に応じたデータが出力される。そして、加速度センサから出力されるデータに基づいて、ゲーム空間内における刀剣の移動データが決められ、プレイヤの動作に応じてプレイヤオブジェクトが刀剣を振る動作がゲーム画像として表示される。
【特許文献1】特開2000−308756号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、上記特許文献1に開示された入力制御装置(コントローラ)においては、プレイヤが入力制御装置を振り動かす動作に追随できないことがある。例えば、プレイヤが上記棒状のコントローラを激しく振った場合等は、その振る動作の速さに加速度センサの検出速度や出力データを演算する速度が追いつかない。その結果、プレイヤが実際に振り動かした操作とは異なる動きを示す移動データが求められることがあった。そのため、プレイヤが意図した動作がゲーム画像に表現されずに、プレイヤの振り動作とはかけ離れた動作が表示されたり、全く反映されていない動作が表示されたりすることがあり、ゲームの興趣を低下させていた。
【0005】
それ故に、本発明の目的は、入力装置自体の動きを適切に反映したゲーム処理を行うゲームプログラムおよびゲーム装置を提供することである。
【課題を解決するための手段】
【0006】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【0007】
第1の発明は、ゲームを実行するゲーム装置(5)のコンピュータ(30)で実行されるゲームプログラムである。ゲームプログラムは、出力データ取得手段(ステップ17を実行するCPU30、以下、単にステップ番号のみ記載する)、出力データ記憶手段(S17)、ピーク値検出手段(S81)、ピーク間隔算出手段(S81)、計測手段(S81)、ゲーム入力データ算出手段(S89、S92)、およびゲーム処理手段(S92、S22)として、コンピュータを機能させる。出力データ取得手段は、入力装置(7)自体の動きに応じて変化する出力データ(Da)を取得する。出力データ記憶手段は、出力データ取得手段が取得した出力データの履歴をメモリ(33)に記憶する。ピーク値検出手段は、出力データ記憶手段で記憶された出力データの履歴(AccBuffer)から、当該出力データが示す値の連続する極値を検出する。ピーク間隔算出手段は、ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔(index[Ms+1]−Index[Ms])を算出する。計測手段は、ピーク値検出手段が極値を検出してからの時間経過(Index[Ms])を計測する。ゲーム入力データ算出手段は、計測手段によって計測された時間経過およびピーク間隔算出手段によって算出された時間間隔を所定の関数に代入(θcを算出する関数に比率aを代入)することによりゲーム入力データ(θc)を算出する。ゲーム処理手段は、ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行する。
【0008】
なお、上記ピーク値検出手段は、極大値および極小値を両方検出対象としてもよいし、極大値のみを検出対象としてもよいし、極小値のみを検出対象としてもよい。また、上記ピーク値検出手段は、極値の検出を継続的に繰り返して行ってもかまわない。
【0009】
また、上記ピーク間隔算出手段は、極大値と極小値との時間間隔を算出してもよいし、極大値間の時間間隔を算出してもよいし、極小値間の時間間隔を算出してもよい。ここで、上記ピーク間隔算出手段は、時間間隔を少なくとも1回算出すればよいが、複数回繰り返して時間間隔を算出してもよい。例えば、ピーク値検出手段が極値を検出するごとに、時間間隔を算出してもよいし、所定条件ごと(例えば、ピーク値検出手段が極値を所定回数検出した場合や、所定時間が経過した場合など)に時間間隔を算出してもよい。また、上記ピーク間隔算出手段は、出力データ取得手段が所定時間間隔で出力データを取得する場合には、出力データを取得する間隔を用いて時間間隔を算出することができるし、そうでない場合は、出力データの出力時刻データを履歴に記憶して当該時刻データに基づいて時間間隔を算出することができる。
【0010】
また、上記計測手段は、ピーク値検出手段が極値の検出を繰り返す場合には、ピーク値検出手段による直近の極値検出からの時間経過を計測してもよい。また、上記計測手段は、ピーク値検出手段が所定条件を満たす極値を検出したときに、当該検出からの時間経過を計測してもよい。
【0011】
また、上記ゲーム入力データ算出手段は、ピーク間隔算出手段が繰り返して時間間隔を算出する場合には、ピーク間隔算出手段が算出した最新の時間間隔を用いてもよい。
【0012】
第2の発明は、上記第1の発明において、ピーク値検出手段は、極値を繰り返して検出する。ピーク間隔算出手段は、ピーク値検出手段によって極値が検出されるごとに、ピーク値検出手段によって検出された最新の極値と当該極値の1つ前に検出された極値との間の時間間隔を算出する。計測手段は、ピーク値検出手段が最新の極値を検出した時点からの経過時間を計測する。ゲーム入力データ算出手段は、ピーク間隔算出手段によって算出された最新の時間間隔を用いてゲーム入力データを算出する。
【0013】
例えば、上記出力データ記憶手段は、出力データ取得手段が出力データを取得するごとに、取得した出力データをメモリに記憶し、上記ピーク値検出手段は、出力データがメモリに記憶されるごとに、極値の検出をおこなう。
【0014】
第3の発明は、上記第1の発明において、ゲーム入力データ算出手段は、出力データの履歴が示す値を用いて、周期性をもって極大値および極小値を順次繰り返して当該値が推移していることを擬する周期関数を、所定の関数として設定する。
【0015】
第4の発明は、上記第1の発明において、ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がTだけ変化するごとに極値を繰り返してとり、かつ、所定値が代入された際に極値をとる関数である。ゲーム入力データ算出手段は、時間間隔に対する時間経過の割合をTに乗算した値に所定値を加算した値を、所定の関数に代入することにより、ゲーム入力データを算出する。
【0016】
第5の発明は、上記第1の発明において、ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がT/2だけ変化するごとに極大値と極小値とを繰り返してとる関数である。ピーク値検出手段は、極大値および極小値の両方を検出する。ピーク間隔算出手段は、連続する極大値と極小値との間の時間間隔を算出する。ゲーム入力データ算出手段は、時間間隔に対する時間経過の割合をT/2に乗算した値に所定値を加算した値を、所定の関数に代入することにより、ゲーム入力データを算出する。
【0017】
第6の発明は、上記第5の発明において、ゲーム入力データ算出手段が用いる所定の関数は、所定値が代入された際に極大値または極小値をとる関数である。ピーク値検出手段は、極大値と極小値とを繰り返して検出する。ピーク間隔算出手段は、ピーク値検出手段によって極大値または極小値のいずれか検出されるごとに、ピーク値検出手段によって検出された最新の極大値または極小値の一方と当該検出の1つ前に検出された極大値または極小値の他方との間の時間間隔を算出する。計測手段は、ピーク値検出手段が最新の極大値または極小値を検出した時点からの経過時間を計測する。ゲーム入力データ算出手段は、ピーク間隔算出手段によって算出された最新の時間間隔を用いてゲーム入力データを算出し、かつ、ピーク値検出手段により検出された最新の極値が極小値のときには、算出されたゲーム入力データの正負を反転する。
【0018】
第7の発明は、上記第4の発明において、ゲーム入力データ算出手段が用いる所定の関数は、正弦関数である。ピーク値検出手段は、極大値または極小値のいずれか一方を検出する。ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出する。ゲーム入力データ算出手段は、360度に割合を乗算した値を正弦関数に代入することにより、ゲーム入力データを算出する。
【0019】
第8の発明は、上記第5の発明において、ゲーム入力データ算出手段が用いる所定の関数は、正弦関数である。ゲーム入力データ算出手段は、180度に割合を乗算した値を正弦関数に代入することにより、ゲーム入力データを算出する。
【0020】
第9の発明は、上記第4の発明において、ゲーム入力データ算出手段が用いる所定の関数は、余弦関数である。ピーク値検出手段は、極大値または極小値のいずれか一方を検出する。ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出する。ゲーム入力データ算出手段は、360度に割合を乗算した値にn倍の円周率(nは自然数)を加算または減算した値を余弦関数に代入することにより、ゲーム入力データを算出する。
【0021】
第10の発明は、上記第5の発明において、ゲーム入力データ算出手段が用いる所定の関数は、余弦関数である。ゲーム入力データ算出手段は、円周率に割合を乗算した値にn倍の180度(nは自然数)を加算または減算した値を余弦関数に代入することにより、ゲーム入力データを算出する。
【0022】
第11の発明は、上記第1の発明において、入力装置には、少なくとも2方向に生じる加速度をそれぞれ検出して、当該検出結果を出力データとして出力する加速度検出部(701)が設けられる。出力データ取得手段は、加速度検出部から出力された出力データに基づいて、入力装置の2方向に生じる加速度を示すデータを取得する。
【0023】
第12の発明は、上記第11の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが入力装置を反復的に傾ける操作をしたときに、当該操作の操作力による加速度が生じる方向である。
【0024】
第13の発明は、上記第11の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが入力装置を反復的に傾ける操作をしたときに、当該操作による入力装置における所定箇所の移動の軌跡となる円弧の接線方向である。
【0025】
第14の発明は、上記第11の発明において、ゲーム入力データ算出手段は、ピーク値検出手段によってn個(nは2以上の自然数)の極値が検出されたときに、計測手段によって計測された時間経過およびピーク間隔算出手段によって算出された時間間隔を所定の関数に代入することによりゲーム入力データを算出する。ゲーム入力データ算出手段は、ピーク値検出手段によってn個の極値が検出されないときには、出力データが示す2方向に生じる加速度に基づいて、入力装置に生じる重力方向に対する入力装置の角度を示す角度データを算出し、当該角度データをゲーム入力データとする。
【0026】
第15の発明は、上記第14の発明において、ゲームは、2方向が実空間の鉛直面に存在するように入力装置を配置しつつ、入力装置を反復的に傾ける操作をさせるゲームである。
【0027】
ここで、本願発明は、典型的に入力装置の重力方向に対する傾きを反復的に変化させる操作をプレイヤにさせるようなゲームに用いられるものである。さらに言えば、第14および第15の発明における「2方向」が実空間の鉛直面上に存在するように入力装置を把持させ、第1方向および第2方向の両方が鉛直面上に存在する状態を維持したまま入力装置を傾ける操作をさせるものである。典型的には、そのような操作をすべきことが取扱説明書や画面上で指示または暗示され、プレイヤはそれに従って操作する。また、「2方向」は直交する方向であってもよい。例えば、入力装置における前方向(後述の図3におけるZ軸正方向)、後方向(後述の図3におけるZ軸負方向)、上方向(同図におけるY軸正方向)、下方向(同図におけるY軸負方向)、左方向(同図におけるX軸正方向)、右方向(同図におけるX軸負方向)のうちのいずれか2つとするのが典型的である。なお、前後方向・上下方向・左右方向とは、入力装置において互いに直交する3方向であり、プレイヤが入力装置を基準姿勢で把持したときの状態において前後方向・上下方向・左右方向のいずれかが特定されるものであって、通常は、入力装置のハウジングの形状に従って特定される方向である。また、上記入力装置を長細形状に形成する場合には、入力装置の長手方向を1方向とし、短手方向を他の1方向としてもよい。さらには、入力装置が長手方向に延在するとともに、長手方向軸線周りの周囲面に掌を接触させるようにして握ることによって把持されるように形成しても良く、この場合、当該長手方向を1方向とし、それと直交する方向を他の1方向としても良い。
【0028】
第16の発明は、上記第11の発明において、判断手段として、さらにコンピュータを機能させる。判断手段は、計測手段により計測された時間経過が、ピーク間隔算出手段が算出した時間間隔のn倍(n>1)以上に達したことを判断する。ゲーム入力データ算出手段は、判断手段が肯定の判断をしたときに、出力データが示す2方向に生じる加速度に基づいて、入力装置に生じる重力方向に対する入力装置の角度を示す角度データを算出し、当該角度データをゲーム入力データとする。
【0029】
第17の発明は、上記第1の発明において、ゲーム入力データ算出手段が用いる所定の関数は、ピーク間隔算出手段が算出した時間間隔を周期の半分とした正弦関数または余弦関数である。
【0030】
第18の発明は、上記第1の発明において、ピーク値検出手段は、極大値および極小値の両方を検出する。そして、差分算出手段(S88)として、さらにコンピュータを機能させる。差分算出手段は、ピーク値検出手段が検出した極大値と極小値との差分を算出する。ゲーム入力データ算出手段が用いる所定の関数は、差分算出手段が算出した差分値に基づいた値を振幅とする周期関数である。
【0031】
第19の発明は、上記第1の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。そして、終了判定手段(S87)として、さらにコンピュータを機能させる。終了判定手段は、計測手段により計測された時間経過が、ピーク間隔算出手段が算出した時間間隔の所定倍以上(1.5倍以上)に達したとき(S87でYes)、入力装置を反復的に傾ける操作が終了したと判定する。
【0032】
第20の発明は、上記第1の発明において、ゲームは、プレイヤに入力装置を反復的に傾ける操作をさせるゲームである。そして、停止判定手段(S83、S86)として、さらにコンピュータを機能させる。停止判定手段は、ピーク値検出手段によって1つ以下の極値が検出されたとき(S83でNo、S86でNo)、入力装置を反復的に傾ける操作が行われていないと判定する。
【0033】
第21の発明は、上記第19または第20の発明において、姿勢算出手段(S18)として、さらにコンピュータを機能させる。姿勢算出手段は、終了判定手段が入力装置を反復的に傾ける操作が終了したと判定したとき、または停止判定手段が入力装置を反復的に傾ける操作が行われていないと判定しているとき(Cfrg=false)、出力データ取得手段が取得した最新の出力データが示す値を用いて、当該入力装置自体の姿勢(θs)を算出する。ゲーム入力データ算出手段は、終了判定手段が入力装置を反復的に傾ける操作が終了したと判定したとき、または停止判定手段が入力装置を反復的に傾ける操作が行われていないと判定しているとき、姿勢算出手段が算出した姿勢を用いてゲーム入力データを算出する。
【0034】
第22の発明は、上記第1の発明において、ゲーム処理手段は、ゲーム入力データを用いて、仮想ゲーム世界におけるオブジェクトの傾き(θobj)を変化させる。そして、表示制御手段(S23)として、さらにコンピュータを機能させる。表示制御手段は、ゲーム処理手段が変化させたオブジェクトの傾きに応じて、仮想ゲーム世界でオブジェクトを傾斜させて当該オブジェクトを表示装置(2)に表示する。
【0035】
第23の発明は、上記第1の発明において、ゲーム処理手段は、ゲーム入力データを用いて、仮想ゲーム世界においてオブジェクトが移動したことにより発生する周りの環境への影響力を変化させ、当該影響力に応じて当該仮想ゲーム世界で当該オブジェクト以外のオブジェクトに対して所定の影響を与える。
【0036】
第24の発明は、ゲームを実行するゲーム装置である。ゲーム装置は、出力データ取得手段、出力データ記憶手段、ピーク値検出手段、ピーク間隔算出手段、計測手段、ゲーム入力データ算出手段、およびゲーム処理手段を備える。出力データ取得手段は、入力装置自体の動きに応じて変化する出力データを取得する。出力データ記憶手段は、出力データ取得手段が取得した出力データの履歴をメモリに記憶する。ピーク値検出手段は、出力データ記憶手段で記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出する。ピーク間隔算出手段は、ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔を算出する。計測手段は、ピーク値検出手段が極値を検出してからの時間経過を計測する。ゲーム入力データ算出手段は、計測手段によって計測された時間経過およびピーク間隔算出手段によって算出された時間間隔を所定の関数に代入することによりゲーム入力データを算出する。ゲーム処理手段は、ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行する。
【発明の効果】
【0037】
上記第1の発明によれば、プレイヤが入力装置を振り動かすような操作に応じて、当該入力装置自体の動きを適切に反映したゲーム処理を行うことができる。そのため、プレイヤが意図した動作に応じたゲーム処理が行われ、プレイヤの振り動かし動作と同期した処理によってゲームの興趣を向上させることができる。
【0038】
上記第2の発明によれば、直近の極値からの経過時間に基づいて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0039】
上記第3の発明によれば、プレイヤが入力装置を規則性を持って振り動かした場合、その振る動作に応じて出力される出力データが示す値の周期性を用いて極大値および極小値間の推移を擬することによって、プレイヤが実際に振り動かした操作と一致するゲーム入力データを得ることができる。
【0040】
上記第4の発明によれば、関数の周期、極値の時間間隔、および極値からの経過時間との関係に基づいて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0041】
上記第5の発明によれば、関数の周期、極大値と極小値との時間間隔、および直近の極値からの経過時間との関係に基づいて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0042】
上記第6の発明によれば、直近の極値の種別(極大値、極小値)に応じてゲーム入力データの正負を反転することによって、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0043】
上記第7および第8の発明によれば、正弦関数の周期を実際に振り動かす操作の周期に当てはめて、ゲーム入力データを算出することができる。
【0044】
上記第9および第10の発明によれば、余弦関数の周期を実際に振り動かす操作の周期に当てはめて、ゲーム入力データを算出することができる。
【0045】
上記第11の発明によれば、入力装置に生じる加速度に応じて、実際に振り動かした操作を擬したゲーム入力データを算出することができる。
【0046】
上記第12および第13の発明によれば、プレイヤに入力装置を反復的に傾ける操作をさせるようなゲームにおいて、実際に入力装置を振り動かした操作を擬したゲーム入力データを算出することができる。
【0047】
上記第14の発明によれば、プレイヤに入力装置を反復的に傾けていないとき、当該入力装置の静的な角度を擬したゲーム入力データを算出することができる。
【0048】
上記第15の発明によれば、プレイヤに入力装置を実空間の垂直方向に振り動かす操作をさせるようなゲームにおいて、実際に入力装置を振り動かした操作を擬したゲーム入力データを算出することができる。
【0049】
上記第16の発明によれば、プレイヤに入力装置を反復的に傾ける操作を終了したとき、当該入力装置の静的な角度を擬したゲーム入力データを算出することができる。
【0050】
上記第17の発明によれば、代表的な周期関数である正弦関数または余弦関数を用いて、出力データが示す値の周期性を適切に擬することができる。
【0051】
上記第18の発明によれば、プレイヤが入力装置自体に加える動きの強さにも応じて、プレイヤが実際に振り動かした操作を擬したゲーム入力データが得られる。そのため、プレイヤが意図した動作に応じたゲーム処理が行われ、プレイヤの振り動かす強さと同期した処理によってゲームの興趣を向上させることができる。
【0052】
上記第19の発明によれば、プレイヤが入力装置を振り動かすことを終了したことを、出力データを用いて判定することができる。
【0053】
上記第20の発明によれば、プレイヤが入力装置を振り動かしていないことを、出力データを用いて判定することができる。
【0054】
上記第21の発明によれば、プレイヤが入力装置を振り動かすことを終了した、またはプレイヤが入力装置を振り動かしていないとき、入力装置の静的な姿勢に応じてゲーム入力データが得られる。そのため、プレイヤが意図した動作に応じたゲーム処理が行われ、プレイヤが静的に入力装置の姿勢を変化させる操作と同期した処理によってゲームの興趣を向上させることができる。
【0055】
上記第22の発明によれば、入力装置自体の傾きを適切にオブジェクトの傾きに反映させたゲーム画像を表示することができる。
【0056】
上記第23の発明によれば、入力装置を振り動かす操作に応じてオブジェクトを移動させ、当該移動に応じて周辺の他のオブジェクトに所定の影響を与えるようなゲームを実現することができる。
【0057】
また、本発明のゲーム装置によれば、上述したゲームプログラムと同様の効果を得ることができる。
【発明を実施するための最良の形態】
【0058】
図1を参照して、本発明の一実施形態に係るゲーム装置について説明する。以下、説明を具体的にするために、当該ゲーム装置の一例の据置型のゲーム装置を含むゲームシステムについて説明する。なお、図1は据置型のゲーム装置3を含むゲームシステム1の外観図であり、図2はゲーム装置本体5のブロック図である。以下、当該ゲームシステム1について説明する。
【0059】
図1において、ゲームシステム1は、表示手段の一例の家庭用テレビジョン受像機(以下、モニタと記載する)2と、当該モニタ2に接続コードを介して接続する据置型のゲーム装置3とから構成される。モニタ2は、ゲーム装置本体5から出力された音声信号を音声出力するためのスピーカ2aを備える。また、ゲーム装置3は、本願発明の情報処理プログラムの一例のゲームプログラムを記録した光ディスク4と、当該光ディスク4のゲームプログラムを実行してゲーム画面をモニタ2に表示出力させるためのコンピュータを搭載したゲーム装置本体5と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体5に与えるためのコントローラ7とを備えている。
【0060】
また、ゲーム装置本体5は、通信ユニット6を内蔵する。通信ユニット6は、コントローラ7から無線送信されるデータを受信し、ゲーム装置本体5からコントローラ7へデータを送信して、コントローラ7とゲーム装置本体5とを無線通信によって接続する。さらに、ゲーム装置本体5には、当該ゲーム装置本体5に対して交換可能に用いられる情報記憶媒体の一例の光ディスク4が脱着される。ゲーム装置本体5の前部主面には、当該ゲーム装置本体5の電源ON/OFFスイッチ、ゲーム処理のリセットスイッチ、光ディスク4を脱着する投入口、およびゲーム装置本体5の投入口から光ディスク4を取り出すイジェクトスイッチ等が設けられている。
【0061】
また、ゲーム装置本体5には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ38が搭載される。ゲーム装置本体5は、光ディスク4に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ2に表示する。さらに、ゲーム装置本体5は、フラッシュメモリ38に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ2に表示することもできる。そして、ゲーム装置本体5のプレイヤは、モニタ2に表示されたゲーム画像を見ながら、コントローラ7を操作することによって、ゲーム進行を楽しむことができる。
【0062】
コントローラ7は、通信ユニット6を内蔵するゲーム装置本体5へ、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて操作情報等の送信データを無線送信する。コントローラ7は、主にモニタ2の表示画面に表示されるゲーム空間に登場するプレイヤキャラクタ等を操作したりするための操作手段である。コントローラ7は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン(十字キーやスティック等を含む)が設けられている。また、後述により明らかとなるが、コントローラ7は、当該コントローラ7から見た画像を撮像する撮像情報演算部74を備えている。また、撮像情報演算部74の撮像対象の一例として、モニタ2の表示画面近傍に2つのLEDモジュール(以下、マーカと記載する)8Lおよび8Rが設置される。これらマーカ8Lおよび8Rは、それぞれモニタ2の前方に向かって例えば赤外光を出力する。また、コントローラ7は、ゲーム装置本体5の通信ユニット6から無線送信された送信データを通信部75で受信して、当該送信データに応じた音や振動を発生させることもできる。
【0063】
図2において、ゲーム装置本体5は、各種プログラムを実行する例えばCPU(セントラルプロセッシングユニット)30を備える。CPU30は、図示しないブートROMに記憶された起動プログラムを実行し、メインメモリ33等のメモリの初期化等を行った後、光ディスク4に記憶されているゲームプログラムの実行し、そのゲームプログラムに応じたゲーム処理等を行うものである。CPU30には、メモリコントローラ31を介して、GPU(Graphics Processing Unit)32、メインメモリ33、DSP(Digital Signal Processor)34、およびARAM(Audio RAM)35などが接続される。また、メモリコントローラ31には、所定のバスを介して、通信ユニット6、ビデオI/F(インターフェース)37、フラッシュメモリ38、オーディオI/F39、およびディスクI/F41が接続され、それぞれのインターフェースにモニタ2、スピーカ2a、およびディスクドライブ40が接続されている。
【0064】
GPU32は、CPU30の命令に基づいて画像処理を行うものあり、例えば、3Dグラフィックスの表示に必要な計算処理を行う半導体チップで構成される。GPU32は、図示しない画像処理専用のメモリやメインメモリ33の一部の記憶領域を用いて画像処理を行う。GPU32は、これらを用いてモニタ2に表示すべきゲーム画像データやムービ映像を生成し、適宜メモリコントローラ31およびビデオI/F37を介してモニタ2に出力する。
【0065】
メインメモリ33は、CPU30で使用される記憶領域であって、CPU30の処理に必要なゲームプログラム等を適宜記憶する。例えば、メインメモリ33は、CPU30によって光ディスク4から読み出されたゲームプログラムや各種データ等を記憶する。このメインメモリ33に記憶されたゲームプログラムや各種データ等が、CPU30によって実行される。
【0066】
DSP34は、ゲームプログラム実行時にCPU30において生成されるサウンドデータ等を処理するものであり、そのサウンドデータ等を記憶するためのARAM35が接続される。ARAM35は、DSP34が所定の処理(例えば、先読みしておいたゲームプログラムやサウンドデータの記憶)を行う際に用いられる。DSP34は、ARAM35に記憶されたサウンドデータを読み出し、メモリコントローラ31およびオーディオI/F39を介してモニタ2に備えるスピーカ2aに出力させる。
【0067】
メモリコントローラ31は、データ転送を統括的に制御するものであり、上述した各種I/Fが接続される。上述したように通信ユニット6は、コントローラ7からの送信データを受信し、当該送信データをCPU30へ出力する。また、通信ユニット6は、CPU30から出力された送信データをコントローラ7の通信部75へ送信する。ビデオI/F37には、モニタ2が接続される。オーディオI/F39にはモニタ2に内蔵されるスピーカ2aが接続され、DSP34がARAM35から読み出したサウンドデータやディスクドライブ40から直接出力されるサウンドデータをスピーカ2aから出力可能に接続される。ディスクI/F41には、ディスクドライブ40が接続される。ディスクドライブ40は、所定の読み出し位置に配置された光ディスク4に記憶されたデータを読み出し、ゲーム装置本体5のバスやオーディオI/F39に出力する。
【0068】
図3および図4を参照して、コントローラ7について説明する。なお、図3は、コントローラ7の上面後方から見た斜視図である。図4は、コントローラ7を下面前方から見た斜視図である。
【0069】
図3および図4において、コントローラ7は、例えばプラスチック成型によって形成されたハウジング71を有しており、当該ハウジング71に複数の操作部72が設けられている。ハウジング71は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【0070】
ハウジング71上面の中央前面側に、十字キー72aが設けられる。この十字キー72aは、十字型の4方向プッシュスイッチであり、4つの方向(前後左右)に対応する操作部分が十字の突出片にそれぞれ90°間隔で配置される。プレイヤが十字キー72aのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー72aを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【0071】
なお、十字キー72aは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に4つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記4つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、4つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング71上面から突出した傾倒可能なスティック(いわゆる、ジョイスティック)を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を上記十字キー72aの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー72aの代わりに設けてもかまわない。また、タッチパッドを、上記十字キー72aの代わりに設けてもかまわない。
【0072】
ハウジング71上面の十字キー72aより後面側に、複数の操作ボタン72b〜72gが設けられる。操作ボタン72b〜72gは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン72b〜72gに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン72b〜72dには、1番ボタン、2番ボタン、およびAボタン等としての機能が割り当てられる。また、操作ボタン72e〜72gには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン72a〜72gは、ゲーム装置本体5が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図3に示した配置例では、操作ボタン72b〜72dは、ハウジング71上面の中央前後方向に沿って並設されている。また、操作ボタン72e〜72gは、ハウジング71上面の左右方向に沿って操作ボタン72bおよび72dの間に並設されている。そして、操作ボタン72fは、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0073】
また、ハウジング71上面の十字キー72aより前面側に、操作ボタン72hが設けられる。操作ボタン72hは、遠隔からゲーム装置本体5の電源をオン/オフする電源スイッチである。この操作ボタン72hも、その上面がハウジング71の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【0074】
また、ハウジング71上面の操作ボタン72cより後面側に、複数のLED702が設けられる。ここで、コントローラ7は、他のコントローラ7と区別するためにコントローラ種別(番号)が設けられている。例えば、LED702は、コントローラ7に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、コントローラ7から通信ユニット6へ送信データを送信する際、上記コントローラ種別に応じて複数のLED702のうち、種別に対応するLEDが点灯する。
【0075】
また、ハウジング71上面には、操作ボタン72bおよび操作ボタン72e〜72gの間に後述するスピーカ(図5のスピーカ706)からの音を外部に放出するための音抜き孔が形成されている。
【0076】
一方、ハウジング71下面には、凹部が形成されている。ハウジング71下面の凹部は、プレイヤがコントローラ7の前面をマーカ8Lおよび8Rに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン72iが設けられる。操作ボタン72iは、例えばBボタンとして機能する操作部である。
【0077】
また、ハウジング71前面には、撮像情報演算部74の一部を構成する撮像素子743が設けられる。ここで、撮像情報演算部74は、コントローラ7が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大200フレーム/秒程度のサンプリング周期であるため比較的高速なコントローラ7の動きでも追跡して解析することができる。この撮像情報演算部74の詳細な構成については、後述する。また、ハウジング70の後面には、コネクタ73が設けられている。コネクタ73は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【0078】
ここで、以下の説明を具体的にするために、コントローラ7に対して設定する座標系について定義する。図3および図4に示すように、互いに直交するXYZ軸をコントローラ7に対して定義する。具体的には、コントローラ7の前後方向となるハウジング71の長手方向をZ軸とし、コントローラ7の前面(撮像情報演算部74が設けられている面)方向をZ軸正方向とする。また、コントローラ7の上下方向をY軸とし、ハウジング71の上面(操作ボタン72aが設けられた面)方向をY軸正方向とする。さらに、コントローラ7の左右方向をX軸とし、ハウジング71の右側面(図3では表されている側面)方向をX軸正方向とする。
【0079】
次に、図5および図6を参照して、コントローラ7の内部構造について説明する。なお、図5は、コントローラ7の上筐体(ハウジング71の一部)を外した状態を後面側から見た斜視図である。図6は、コントローラ7の下筐体(ハウジング71の一部)を外した状態を前面側から見た斜視図である。ここで、図6に示す基板700は、図5に示す基板700の裏面から見た斜視図となっている。
【0080】
図5において、ハウジング71の内部には基板700が固設されており、当該基板700の上主面上に操作ボタン72a〜72h、加速度センサ701、LED702、およびアンテナ754等が設けられる。そして、これらは、基板700等に形成された配線(図示せず)によってマイコン751等(図6、図7参照)に接続される。また、無線モジュール753(図7参照)およびアンテナ754によって、コントローラ7がワイヤレスコントローラとして機能する。なお、ハウジング71内部には図示しない水晶振動子が設けられており、後述するマイコン751の基本クロックを生成する。また、基板700の上主面上に、スピーカ706およびアンプ708が設けられる。また、加速度センサ701は、操作ボタン72dの左側の基板700上(つまり、基板700の中央部ではなく周辺部)に設けられる。したがって、加速度センサ701は、コントローラ7の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ7の回転を良好な感度でゲーム装置本体5等が判定することができる。
【0081】
一方、図6において、基板700の下主面上の前端縁に撮像情報演算部74が設けられる。撮像情報演算部74は、コントローラ7の前方から順に赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744によって構成されており、それぞれ基板700の下主面に取り付けられる。また、基板700の下主面上の後端縁にコネクタ73が取り付けられる。さらに、基板700の下主面上にサウンドIC707およびマイコン751が設けられている。サウンドIC707は、基板700等に形成された配線によってマイコン751およびアンプ708と接続され、ゲーム装置本体5から送信されたサウンドデータに応じてアンプ708を介してスピーカ706に音声信号を出力する。
【0082】
そして、基板700の下主面上には、バイブレータ704が取り付けられる。バイブレータ704は、例えば振動モータやソレノイドである。バイブレータ704は、基板700等に形成された配線によってマイコン751と接続され、ゲーム装置本体5から送信された振動データに応じてその作動をオン/オフする。バイブレータ704が作動することによってコントローラ7に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ704は、ハウジング71のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング71が大きく振動することになり、振動を感じやすくなる。
【0083】
次に、図7を参照して、コントローラ7の内部構成について説明する。なお、図7は、コントローラ7の構成を示すブロック図である。
【0084】
図7において、コントローラ7は、上述した操作部72、撮像情報演算部74、加速度センサ701、バイブレータ704、スピーカ706、サウンドIC707、およびアンプ708の他に、その内部に通信部75を備えている。
【0085】
撮像情報演算部74は、赤外線フィルタ741、レンズ742、撮像素子743、および画像処理回路744を含んでいる。赤外線フィルタ741は、コントローラ7の前方から入射する光から赤外線のみを通過させる。レンズ742は、赤外線フィルタ741を透過した赤外線を集光して撮像素子743へ出射する。撮像素子743は、例えばCMOSセンサやあるいはCCDのような固体撮像素子であり、レンズ742が集光した赤外線を撮像する。したがって、撮像素子743は、赤外線フィルタ741を通過した赤外線だけを撮像して画像データを生成する。撮像素子743で生成された画像データは、画像処理回路744で処理される。具体的には、画像処理回路744は、撮像素子743から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部75へ出力する。なお、これらの撮像情報演算部74は、コントローラ7のハウジング71に固設されており、ハウジング71自体の方向を変えることによってその撮像方向を変更することができる。
【0086】
コントローラ7は、3軸(X、Y、Z軸)の加速度センサ701を備えていることが好ましい。この3軸の加速度センサ701は、3方向、すなわち、上下方向(図3に示すY軸)、左右方向(図3に示すX軸)、および前後方向(図3に示すZ軸)で直線加速度を検知する。また、他の実施形態においては、ゲーム処理に用いる制御信号の種類によっては、少なくとも1軸方向に沿った直線加速度を検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ701は、アナログ・デバイセズ株式会社(Analog Devices, Inc.)またはSTマイクロエレクトロニクス社(STMicroelectronics N.V.)から入手可能であるタイプのものでもよい。加速度センサ701は、シリコン微細加工されたMEMS(Micro Electro Mechanical Systems:微小電子機械システム)の技術に基づいた静電容量式(静電容量結合式)であることが好ましい。しかしながら、既存の加速度検出手段の技術(例えば、圧電方式や圧電抵抗方式)あるいは将来開発される他の適切な技術を用いて、加速度センサ701が提供されてもよい。
【0087】
加速度センサ701に用いられるような加速度検出手段は、加速度センサ701の持つ各軸に対応する直線に沿った加速度(直線加速度)のみを検知することができる。つまり、加速度センサ701からの直接の出力は、それら3軸のそれぞれに沿った直線加速度(静的または動的)を示す信号である。このため、加速度センサ701は、非直線状(例えば、円弧状)の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【0088】
しかしながら、加速度センサ701から出力される加速度の信号に対して追加の処理を行うことによって、コントローラ7に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。例えば、静的な加速度(重力加速度)が検知されると、加速度センサ701からの出力を用いて、傾斜角度と検知された加速度とを用いた演算によって重力ベクトルに対する対象(コントローラ7)の傾きを判定することができる。このように、加速度センサ701をマイコン751(またはゲーム装置本体5に含まれるCPU30等の他のプロセッサ)と組み合わせて用いることによって、コントローラ7の傾き、姿勢、または位置を判定することができる。同様に、加速度センサ701を備えるコントローラ7がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ701によって生成される加速度信号を処理することによって、コントローラ7の様々な動きおよび/または位置を算出することができる。他の実施例では、加速度センサ701は、信号をマイコン751に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ701が静的な加速度(例えば、重力加速度)を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。加速度センサ701でそれぞれ検知された加速度を示すデータは、通信部75に出力される。
【0089】
他の実施形態の例では、コントローラ7の動きを検出する動きセンサとして、回転素子または振動素子などを内蔵したジャイロセンサを用いてもよい。この実施形態で使用されるMEMSジャイロセンサの一例として、アナログ・デバイセズ株式会社から入手可能なものがある。加速度センサ701と異なり、ジャイロセンサは、それが内蔵する少なくとも一つのジャイロ素子の軸を中心とした回転(または角速度)を直接検知することができる。このように、ジャイロセンサと加速度センサとは基本的に異なるので、個々の用途のためにいずれの装置が選択されるかによって、これらの装置からの出力信号に対して行う処理を適宜変更する必要がある。
【0090】
具体的には、加速度センサの代わりにジャイロセンサを用いて傾きや姿勢を算出する場合には、大幅な変更を行う。すなわち、ジャイロセンサを用いる場合、検出開始の状態において傾きの値を初期化する。そして、当該ジャイロセンサから出力される角速度データを積分する。次に、初期化された傾きの値からの傾きの変化量を算出する。この場合、算出される傾きは、角度に対応する値が算出されることになる。一方、加速度センサによって傾きを算出する場合には、重力加速度のそれぞれの軸に関する成分の値を、所定の基準と比較することによって傾きを算出するので、算出される傾きはベクトルで表すことが可能であり、初期化を行わずとも、加速度検出手段を用いて検出される絶対的な方向を検出することが可能である。また、傾きとして算出される値の性質は、ジャイロセンサが用いられる場合には角度であるのに対して、加速度センサが用いられる場合にはベクトルであるという違いがある。したがって、加速度センサに代えてジャイロセンサが用いられる場合、当該傾きのデータに対して、2つのデバイスの違いを考慮した所定の変換を行う必要がある。加速度検出手段とジャイロスコープとの基本的な差異と同様にジャイロスコープの特性は当業者に公知であるので、本明細書ではさらなる詳細を省略する。ジャイロセンサは、回転を直接検知できることによる利点を有する一方、一般的には、加速度センサは、本実施形態で用いるようなコントローラに適用される場合、ジャイロセンサに比べて費用効率が良いという利点を有する。
【0091】
通信部75は、マイクロコンピュータ(Micro Computer:マイコン)751、メモリ752、無線モジュール753、およびアンテナ754を含んでいる。マイコン751は、処理の際にメモリ752を記憶領域として用いながら、送信データを無線送信する無線モジュール753を制御する。また、マイコン751は、アンテナ754を介して無線モジュール753が受信したゲーム装置本体5からのデータに応じて、サウンドIC707およびバイブレータ704の動作を制御する。サウンドIC707は、通信部75を介してゲーム装置本体5から送信されたサウンドデータ等を処理する。また、マイコン751は、通信部75を介してゲーム装置本体5から送信された振動データ(例えば、バイブレータ704をONまたはOFFする信号)等に応じて、バイブレータ704を作動させる。
【0092】
コントローラ7に設けられた操作部72からの操作信号(キーデータ)、加速度センサ701からの3軸方向の加速度信号(X、Y、およびZ軸方向加速度データ)、および撮像情報演算部74からの処理結果データは、マイコン751に出力される。マイコン751は、入力した各データ(キーデータ、X、Y、およびZ軸方向加速度データ、処理結果データ)を通信ユニット6へ送信する送信データとして一時的にメモリ752に格納する。ここで、通信部75から通信ユニット6への無線送信は、所定の周期毎に行われるが、ゲームの処理は1/60秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は16.7ms(1/60秒)であり、ブルートゥース(登録商標)で構成される通信部75の送信間隔は5msである。マイコン751は、通信ユニット6への送信タイミングが到来すると、メモリ752に格納されている送信データを一連の操作情報として出力し、無線モジュール753へ出力する。そして、無線モジュール753は、例えばBluetooth(ブルートゥース;登録商標)の技術を用いて、所定周波数の搬送波を用いて操作情報をその電波信号としてアンテナ754から放射する。つまり、コントローラ7に設けられた操作部72からのキーデータ、加速度センサ701からのX、Y、およびZ軸方向加速度データ、および撮像情報演算部74からの処理結果データがコントローラ7から送信される。そして、ゲーム装置本体5の通信ユニット6でその電波信号を受信し、ゲーム装置本体5で当該電波信号を復調や復号することによって、一連の操作情報(キーデータ、X、Y、およびZ軸方向加速度データ、および処理結果データ)を取得する。そして、ゲーム装置本体5のCPU30は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、Bluetooth(登録商標)の技術を用いて通信部75を構成する場合、通信部75は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【0093】
次に、ゲーム装置本体5が行う具体的な処理を説明する前に、本ゲーム装置本体5で行うゲームの概要について説明する。図8に示すように、コントローラ7は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム1でコントローラ7を用いてゲームをプレイするためには、プレイヤが片手でコントローラ7を把持し、コントローラ7を上下に振り動かす動作を行う。このようなプレイヤがコントローラ7を振離動かす動作に応じて、モニタ2に表示されるオブジェクトが振り動かされる。
【0094】
例えば、図9に示すように、モニタ2には、うちわを模したオブジェクトOBJが表示される。そして、プレイヤがコントローラ7を上下に振り動かす動作に応じて、仮想ゲーム世界においてオブジェクトOBJが上下にあおぐような動作を表現する。このとき、プレイヤが、ある周期でコントローラ7を上下に振り動かす動作を行うと、オブジェクトOBJも同じ周期で上下にあおぐような動作を表現する。また、プレイヤが上下に大きくコントローラ7を上下に振り動かす動作を行うと、オブジェクトOBJも大きく上下にあおぐような動作を表現する。また、プレイヤがコントローラ7本体を静的に傾けるような操作をした場合、仮想ゲーム空間内のオブジェクトOBJも同じような傾斜角度で傾いて表現される。つまり、オブジェクトOBJは、プレイヤがコントローラ7自体を振り動かす動作に同期してあおぐような動作を表現するため、プレイヤがあたかも仮想ゲーム空間内のオブジェクトOBJをあおいでいるようなゲーム感覚が得られる。
【0095】
例えば、プレイヤが静的にコントローラ7を上下に傾けることによって、コントローラ7から操作情報(具体的には、X、Y、およびZ軸方向加速度データ)をゲーム装置本体5に与える。また、プレイヤがコントローラ7を上下に振り動かす動作では、コントローラ7からその遠心力等に応じた操作情報をゲーム装置本体5に与える。このようなコントローラ7に加わる加速度の変化は、加速度センサ701によって検出できるため、加速度センサ701から出力されるX、Y、およびZ軸方向加速度データに対して追加の処理を行うことによって、コントローラ7の傾きや動きを算出することができる。一般的に、動作に応じて生じる加速度を検出する場合、加速度センサ701から出力される加速度ベクトル(あるいは、加速度の正負)は、コントローラ7の加速方向とは真逆のベクトルとなるため、検出した加速度の方向を考慮してコントローラ7の傾きや動きを算出することが必要であることは言うまでもない。
【0096】
次に、ゲームシステム1において行われるゲーム処理の詳細を説明する。まず、図10を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図10は、ゲーム装置本体5のメインメモリ33に記憶される主なデータを示す図である。
【0097】
図10に示すように、メインメモリ33には、加速度データバッファAccBufferが設けられる。また、メインメモリ33には、オブジェクト角度データDb、姿勢角度データDc、周期角度データDd、周期角度有効フラグデータDe、ピーク数データDf、仮極大値データDg、仮極小値データDh、仮極大値位置データDi、仮極小値位置データDj、次のピーク種別フラグデータDk、直近のピーク種別フラグデータDl、極大/極小値位置データDm、有効ピークデータ開始数データDn、振幅データDo、比率データDp、および画像データDq等が記憶される。なお、メインメモリ33には、図10に示す情報に含まれるデータの他、ゲームに登場するオブジェクトOBJや他のオブジェクト等に関するデータ(位置データ等)や仮想ゲーム空間に関するデータ(背景のデータ等)等、ゲーム処理に必要なデータが記憶される。
【0098】
加速度データバッファAccBufferには、コントローラ7から送信データとして送信されてくる一連の操作情報に含まれる加速度データが記憶される。この加速度データには、加速度センサ701がX、Y、およびZ軸の3軸成分に分けてそれぞれ検出したX軸方向加速度データDa1、Y軸方向加速度データDa2、およびZ軸方向加速度データDa3が含まれる。なお、ゲーム装置本体5に備える通信ユニット6は、コントローラ7から所定周期(例えば、1/200秒毎)に送信される操作情報に含まれる加速度データを受信し、通信ユニット6に備える図示しないバッファに蓄えられる。その後、加速度データがゲーム処理周期である1フレーム毎(例えば、1/60秒毎)に読み出されてメインメモリ33の加速度データバッファAccBufferが更新される。本実施例では、加速度データDaは、コントローラ7から送信された過去回数分(例えば、256)の加速度データが適宜更新されて格納される。
【0099】
なお、後述する処理フローでは、加速度データバッファAccBufferがゲーム処理周期である1フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コントローラ7からの送信周期毎に加速度データバッファAccBufferを更新し、当該更新された加速度データをゲーム処理周期毎に利用する態様でもかまわない。この場合、加速度データバッファAccBufferに記憶する加速度データDa1〜Da3を更新する周期と、ゲーム処理周期とが異なることになる。
【0100】
オブジェクト角度データDbは、仮想ゲーム世界におけるオブジェクトOBJの角度(オブジェクト角度θobj)を示すデータである。姿勢角度データDcは、実空間におけるコントローラ7全体の静的な傾き(姿勢角度θs)を示すデータである。周期角度データDdは、実空間においてコントローラ7に作用する加速度の周期を用いて算出されるコントローラ7全体の動的な傾き(周期角度θc)を示すデータである。周期角度有効フラグデータDeは、周期角度データDdが示す周期角度θcが有効なデータか否かを区別する周期角度有効フラグCfrgを示すデータである。
【0101】
ピーク数データDfは、加速度データバッファAccBufferに格納された加速度データ履歴が示す加速度において、当該加速度の正または負のピーク(以下、単にピークと記載する)の数(ピーク数Nm)を示すデータである。仮極大値データDgは、上記加速度の極大値(加速度の山)を検出する際に仮設定される仮極大値Tを示すデータである。仮極小値データDhは、上記加速度の極小値(加速度の谷)を検出する際に仮設定される仮極小値Bを示すデータである。仮極大値位置データDiは、仮極大値Tを示す加速度データが格納されている加速度データバッファAccBufferにおける位置(仮極大値位置Tin)を示すデータである。仮極小値位置データDjは、仮極小値Bを示す加速度データが格納されている加速度データバッファAccBufferにおける位置(仮極小値位置Bin)を示すデータである。次のピーク種別フラグデータDkは、上記加速度の極大値または極小値を検出する際に、次に検出されるべき値が極大値であるか極小値であるかを区別する次のピーク種別フラグNfrgを示すデータである。直近のピーク種別フラグデータDlは、直近に検出された加速度のピークが極大値であるか極小値であるかを区別する直近のピーク種別フラグFfrgを示すデータである。極大/極小値位置データDmは、決定された極大値または極小値を示す加速度データが格納されている加速度データバッファAccBufferにおける位置(極大/極小値位置Index)を示すデータであり、検出された極大値または極小値毎に順次0以上の数値が付与されてそれらの格納位置が示される。有効ピークデータ開始数データDnは、極大/極小値位置Indexの何個目からが有効な極大値または極小値を示すデータであるか(有効ピークデータ開始数Ms)を示すデータである。振幅データDoは、上記加速度データ履歴が示す加速度の振幅hを示すデータである。比率データDpは、加速度のピーク間の時間を基準として、加速度のピークから現時点までの時間の比率aを示すデータである。
【0102】
画像データDqは、オブジェクト画像データ等を含んでいる。オブジェクト画像データは、仮想ゲーム空間にオブジェクトOBJを配置してゲーム画像を生成するためのデータである。
【0103】
次に、図11〜図21を参照して、ゲーム装置本体5において行われるゲーム処理の詳細を説明する。なお、図11は、ゲーム装置本体5において実行されるゲーム処理の流れを示すフローチャートである。図12は、図11におけるステップ17の加速度バッファ更新処理の詳細な動作を示すサブルーチンである。図13は、図11におけるステップ18の姿勢角度算出処理の詳細な動作を示すサブルーチンである。図14は、図11におけるステップ19の周期角度算出処理の詳細な動作を示すサブルーチンである。図15は、図14におけるステップ81のピークデータ更新処理の詳細な動作を示すサブルーチンである。図16は、コントローラ7が静的に傾いた状態の一例を示す図である。図17は、コントローラ7が振り動かされている状態の一例を示す図である。図18は、コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第1の例を示す図である。図19は、コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第2の例を示す図である。図20は、プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化の一例を示す図である。図21は、仮想ゲーム世界におけるオブジェクトOBJの側面図である。なお、図11〜図15に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ7を振ることに応じて表現されるプレイヤキャラクタPCのモーションについて説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図11〜図15では、CPU30が実行する各ステップを「S」と略称する。
【0104】
ゲーム装置本体5の電源が投入されると、ゲーム装置本体5のCPU30は、図示しないブートROMに記憶されている起動プログラムを実行し、これによってメインメモリ33等の各ユニットが初期化される。そして、光ディスク4に記憶されたゲームプログラムがメインメモリ33に読み込まれ、CPU30によって当該ゲームプログラムの実行が開始される。図11〜図15に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【0105】
図11において、CPU30は、処理ループで用いる一時変数iを0に設定する(ステップ11)。次に、CPU30は、加速度データバッファAccBufferの格納位置[i]の加速度データDa〜Dcを(0,0,0)に設定する(ステップ12)。そして、CPU30は、現在の一時変数iが255であるか否かを判断する(ステップ13)。一時変数iが255でない場合、CPU30は、一時変数iに1を加算して(ステップ14)、上記ステップ12に戻って処理を繰り返す。一方、一時変数iが255である場合、CPU30は、次のステップ15に処理を進める。これらステップ11〜ステップ14の処理によって、加速度データバッファAccBufferの格納位置[0]〜[255]に格納されるそれぞれ256個の加速度データDa〜Dcが、全て(0,0,0)に設定される。
【0106】
ステップ15において、CPU30は、ゲーム処理の初期設定処理を行い(ステップ15)、処理を次のステップに進める。例えば、CPU30は、オブジェクト角度θobj=0、姿勢角度θs=0、周期角度θc=0、周期角度有効フラグCfrg=false(偽)にそれぞれ設定して、メインメモリ33の各データを初期化する。
【0107】
次に、CPU30は、ゲームを終了するか否かを判断する(ステップ16)。ゲームを終了する条件としては、例えば、ゲームの成功または失敗が決定してゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。CPU30は、ゲームを終了しない場合に次のステップ17に処理を進め、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【0108】
ステップ17において、CPU30は、加速度バッファ更新処理を行い、処理を次のステップに進める。以下、図12を参照して、上記ステップ17で行う加速度バッファ更新処理について説明する。
【0109】
図12において、CPU30は、処理ループで用いる一時変数iを0に設定する(ステップ41)。次に、CPU30は、加速度データバッファAccBufferの格納位置[i]の加速度データDa〜Dcを格納位置[i+1]に移動させる(ステップ42)。そして、CPU30は、現在の一時変数iが254であるか否かを判断する(ステップ43)。一時変数iが254でない場合、CPU30は、一時変数iに1を加算して(ステップ44)、上記ステップ42に戻って処理を繰り返す。一方、一時変数iが254である場合、CPU30は、次のステップ45に処理を進める。
【0110】
ステップ45において、CPU30は、加速度データバッファAccBufferの格納位置[0]に最新の加速度データDa〜Dc(コントローラ7から受信した最新の操作情報に含まれる加速度データDa〜Dc)を格納し、当該サブルーチンによる処理を終了する。これらステップ41〜ステップ45の処理によって、加速度データバッファAccBufferの格納位置[0]〜[254]に格納されている255個の加速度データDa〜Dcの格納位置が順次繰り上げられ、格納位置[0]に最新の加速度データDa〜Dcが格納される。
【0111】
図11に戻り、ステップ17の加速度バッファ更新処理の後、CPU30は、姿勢角度算出処理を行って(ステップ18)、処理を次のステップに進める。以下、図13を参照して、上記ステップ18で行う姿勢角度算出処理について説明する。
【0112】
図13において、CPU30は、コントローラ7のZ軸正方向を基準として、当該コントローラ7に対して重力加速度が作用している角度θgを算出する(ステップ51)。そして、CPU30は、角度θgを用いて、実空間における水平方向を基準としてコントローラ7の姿勢を示す姿勢角度θsを算出して、姿勢角度データDcをメインメモリ33に格納し(ステップ52)、当該サブルーチンによる処理を終了する。
【0113】
ここで、図16を用いて、コントローラ7の傾きと姿勢角度θsとの関連について説明する。例えば、図16に示すように、コントローラ7の前面が上に向くように水平方向からコントローラ7を傾ける角度が姿勢角度θsとなる。コントローラ7の上面を姿勢角度θsだけ傾けて前面が上を向くようにコントローラ7を静止させた場合、コントローラ7の加速度センサ701は、Y軸負方向およびZ軸負方向の間の方向に生じる静的な重力加速度を検出する。そして、CPU30は、この重力加速度を検出した加速度センサ701からの出力に応じて、コントローラ7のZ軸正方向を基準として、当該コントローラ7に対して重力加速度が作用している角度θgを算出する。例えば、角度θgは、
【数1】
で算出する。ここで、acosは、ラジアン単位の逆余弦の値を返す関数である。Xaは、加速度バッファAccBufferの格納位置[0]に格納されたX軸方向の加速度データDaが示す加速度である。Yaは、加速度バッファAccBufferの格納位置[0]に格納されたY軸方向の加速度データDbが示す加速度である。Zaは、加速度バッファAccBufferの格納位置[0]に格納されたZ軸方向の加速度データDcが示す加速度である。そして、CPU30は、角度θgを用いて、実空間における水平方向を基準としたコントローラ7の姿勢を示す姿勢角度θsを算出する。例えば、姿勢角度θsは、
θs=θg−π/2
で算出する。
【0114】
図11に戻り、ステップ18の姿勢角度算出処理の後、CPU30は、周期角度算出処理を行って(ステップ19)、処理を次のステップに進める。以下、図14を参照して、上記ステップ19で行う周期角度算出処理について説明する。
【0115】
図14において、CPU30は、ピークデータ更新処理を行って(ステップ81)、処理を次のステップに進める。以下、図15を参照して、上記ステップ81で行うピークデータ更新処理について説明する。
【0116】
図15において、ピークデータ更新処理の初期化処理を行い(ステップ101)、処理を次のステップに進める。例えば、CPU30は、ピーク数Nm=0、一時変数i=0、仮極大値T=AccBuffer[0]y、仮極小値B=AccBuffer[0]y、次のピーク種別フラグNfrg=false、仮極大値位置Tin=0、仮極小値位置Bin=0、直近のピーク種別フラグFfrg=falseにそれぞれ設定して、メインメモリ33の各データを初期化する。なお、AccBuffer[0]yは、加速度バッファAccBufferの格納位置[0]に格納されたY軸方向の加速度データDbが示す加速度を示しており、以下、加速度バッファAccBufferの格納位置[i]に格納されたY軸方向の加速度データDbが示す加速度をAccBuffer[i]yと記載する。
【0117】
次に、CPU30は、一時変数iに1を加算する(ステップ102)。次に、CPU30は、現在の一時変数iが255より大きい数であるか否かを判断する(ステップ103)。一時変数iが255以下である場合、CPU30は、次のステップ104に処理を進める。一方、一時変数iが255より大きい場合、CPU30は、当該サブルーチンによる処理を終了する。
【0118】
ステップ104において、CPU30は、当該ピークデータ更新処理において、加速度のピークが1つ以上既に検出されたか否かを判断する。具体的には、CPU30は、ピーク数データDfを参照し、ピーク数Nm=0であれば加速度のピークが検出されていないと判断する。そして、CPU30は、加速度のピークが検出されていない場合、次のステップ105に処理を進める。一方、CPU30は、既に加速度のピークが検出されている場合、次のステップ115に処理を進める。
【0119】
ここで、図17および図18を用いて、コントローラ7を上下に振り動かしたときに検出される加速度について説明する。図17に示すように、プレイヤがコントローラ7を上下に振り動かした場合、コントローラ7の加速度センサ701は、上述した静的な重力加速度に加えて振り動かすことによって生じる遠心力や振り方向または反振り方向への加速度を検出する。ここで、加速度センサ701からの出力を用いて遠心力成分や振り方向または反振り方向への加速度成分を抽出できれば、その遠心力や加速度が作用している時点におけるコントローラ7の動作角度の分析が可能である。ここで、コントローラ7のY軸方向に作用する加速度に注目する。図17から明らかなように、Y軸方向に作用する加速度は、コントローラ7を振り上げるときに作用する方向とコントローラ7を振り下げるときに作用する方向とが相反することがわかる。つまり、プレイヤがコントローラ7を振り動かした場合、その振り動かし周期に応じてY軸方向に作用する加速度が周期性を持って変化する。
【0120】
例えば、図18に示すように、プレイヤがコントローラ7を振り動かした場合、コントローラ7のY軸方向に作用する加速度が正方向のピーク(極大値)および負方向のピーク(極小値)を繰り返しながら変化する。このような加速度の周期性、ピークに対する現時点の位置、加速度変化の振幅等を解析すれば、プレイヤがコントローラ7を振り動かしている周期(速度)、振り動かし途中の角度(周期角度)、および振り動かす強さ等を算出することができる。上記ステップ104の処理では、加速度バッファAccBufferに格納された加速度履歴に対してこのようなピークが既に検出されたか否かを判定している。
【0121】
図15に戻り、ステップ105において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極大値Tより大きいか否かを判断する。そして、CPU30は、T<AccBuffer[i]yである場合、AccBuffer[i]yを仮極大値Tに設定して仮極大値データDgを更新し、一時変数iを仮極大値位置Tinに設定して仮極大値位置データDiを更新して(ステップ106)、次のステップ107に処理を進める。一方、CPU30は、T≧AccBuffer[i]yである場合、そのまま次のステップ107に処理を進める。
【0122】
ステップ107において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極小値Bより小さいか否かを判断する。そして、CPU30は、B>AccBuffer[i]yである場合、AccBuffer[i]yを仮極小値Bに設定して仮極小値データDhを更新し、一時変数iを仮極小値位置Binに設定して仮極小値位置データDjを更新して(ステップ108)、次のステップ109に処理を進める。一方、CPU30は、B≦AccBuffer[i]yである場合、そのまま次のステップ109に処理を進める。
【0123】
ステップ109において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極大値Tから定数K(例えば、0.5G)を減算した値より小さいか否かを判断する。そして、CPU30は、T−K>AccBuffer[i]yである場合、次のステップ111に処理を進める。一方、CPU30は、T−K≦AccBuffer[i]yである場合、次のステップ110に処理を進める。
【0124】
ステップ110において、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極小値Bに定数K(例えば、0.5G)を加算した値より大きいか否かを判断する。そして、CPU30は、B+K<AccBuffer[i]yである場合、次のステップ113に処理を進める。一方、CPU30は、B+K≧AccBuffer[i]yである場合、上記ステップ102に戻って、処理を繰り返す。
【0125】
ステップ111において、CPU30は、直近のピーク種別フラグFfrg=true(真)に設定して直近のピーク種別フラグデータDlを更新する。そして、CPU30は、山確定処理を行い(ステップ112)、上記ステップ102に戻って、処理を繰り返す。例えば、CPU30は、山確定処理において、AccBuffer[i]yを仮極小値Bに設定して仮極小値データDhを更新し、仮極大値位置Tinを極大/極小値位置Index[Nm]に設定して極大/極小値位置データDmを更新し、ピーク数Nmに1を加算してピーク数データDfを更新し、次のピーク種別フラグNfrg=falseに設定して次のピーク種別フラグデータDkを更新する。この山確定処理によって、現在、仮極大値Tを示している仮極大値位置Tinの加速度が極大値であると確定している。以下、図18を参照して、加速度の極大値を確定する原理について説明する。
【0126】
上記ステップ105およびステップ106の処理では、格納位置[0]からY軸方向の加速度データが示す加速度が、既に評価済みの加速度に対して最大の加速度であるか否かを順次判定し、最大である場合に極大値候補を更新している。例えば、図18に示すように、格納位置[0]から加速度が漸増的に大きくなって極大値に到達するような変化であるとき、格納位置[0]から極大値を示す格納位置まで(図示m1)は、順次極大値候補が更新されていく。そして、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化する位置(図示m2)となると、各格納位置に格納された加速度が極大値候補より小さな値となるために極大値候補が更新されない。そして、上記ステップ109の処理によって、加速度が極大値候補から定数Kだけ減算した値まで小さくなると(図示p1)、当該極大値候補が極大値として確定される。これは、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化した時点で極大値を確定することにより、極大値付近における加速度の変動によって複数の極大値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極大値と誤判定したりすることを防止するためである。なお、定数Kは、例えば0.5Gに設定されるが、加速度の検出精度や検出可能範囲等に応じて適宜設定すればよい。
【0127】
図15に戻り、ステップ113において、CPU30は、直近のピーク種別フラグFfrg=falseに設定して直近のピーク種別フラグデータDlを更新する。そして、CPU30は、谷確定処理を行い(ステップ114)、上記ステップ102に戻って、処理を繰り返す。例えば、CPU30は、谷確定処理において、AccBuffer[i]yを仮極大値Tに設定して仮極大値データDgを更新し、仮極小値位置Binを極大/極小値位置Index[Nm]に設定して極大/極小値位置データDmを更新し、ピーク数Nmに1を加算してピーク数データDfを更新し、次のピーク種別フラグNfrg=trueに設定して次のピーク種別フラグデータDkを更新する。この谷確定処理によって、現在、仮極小値Bを示している仮極小値位置Binの加速度が極小値であると確定している。以下、図19を参照して、加速度の極小値を確定する原理について説明する。
【0128】
上記ステップ107およびステップ108の処理では、格納位置[0]からY軸方向の加速度データが示す加速度が、既に評価済みの加速度に対して最小の加速度であるか否かを順次判定し、最小である場合に極小値候補を更新している。例えば、図19に示すように、格納位置[0]から加速度が漸減的に小さくなって極小値に到達するような変化であるとき、格納位置[0]から極小値を示す格納位置まで(図示m3)は、順次極小値候補が更新されていく。そして、極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化する位置(図示m4)となると、各格納位置に格納された加速度が極小値候補より大きな値となるために極小値候補が更新されない。そして、上記ステップ110の処理によって、加速度が極小値候補を定数Kだけ加算した値まで大きくなると(図示p2)、当該極小値候補が極小値として確定される。これは、極大値と同様に極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化した時点で極小値を確定することによりと、極小値付近における加速度の変動によって複数の極小値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極小値と誤判定したりすることを防止するためである。
【0129】
図15に戻り、上記ステップ104において、既に加速度のピーク1つ以上が検出されている場合、CPU30は、次に検出されるピークは山か否かを判断する(ステップ115)。具体的には、CPU30は、次のピーク種別フラグデータDkを参照し、次のピーク種別フラグNfrg=trueに設定されている場合、次に検出されるピークが山であると判定する。そして、CPU30は、次に検出されるピークが山でない(つまり、谷)場合、次のステップ116に処理を進める。一方、CPU30は、次に検出されるピークが山である場合、次のステップ119に処理を進める。
【0130】
ステップ116およびステップ117で行われる処理は、上記ステップ107およびステップ108と同様に加速度の極小値を検出する処理であり、既に極大値が1つ以上確定した後に次に出現すると予想される極小値を検出する。ステップ116およびステップ117で行われる処理は、上記ステップ107およびステップ108と同様であるため、詳細な説明を省略する。
【0131】
上記ステップ116およびステップ117の処理の後、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極小値Bに定数L(例えば、2.0G)を加算した値より大きいか否かを判断する(ステップ118)。そして、CPU30は、B+L<AccBuffer[i]yである場合、上記ステップ114(谷確定処理)に処理を進める。一方、CPU30は、B+L≧AccBuffer[i]yである場合、上記ステップ102に戻って、処理を繰り返す。
【0132】
例えば、図18に示すように、極大値を確定した後に、極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化する位置(図示m5)となり、加速度が極小値候補を定数Lだけ加算した値まで大きくなると(図示p3)、当該極小値候補が極小値として確定される。これも、極小値を示す格納位置を過ぎて加速度が漸増的に大きく変化した時点で極小値を確定することにより、極小値付近における加速度の変動によって複数の極小値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極小値と誤判定したりすることを防止するためである。なお、定数Lは、例えば2.0Gに設定されるが、加速度の検出精度や検出可能範囲等に応じて適宜設定すればよい。
【0133】
ステップ119およびステップ120で行われる処理は、上記ステップ105およびステップ106と同様に加速度の極大値を検出する処理であり、既に極小値が1つ以上確定した後に次に出現すると予想される極大値を検出する。ステップ119およびステップ120で行われる処理は、上記ステップ105およびステップ106と同様であるため、詳細な説明を省略する。
【0134】
上記ステップ119およびステップ120の処理の後、CPU30は、AccBuffer[i]yを参照して、AccBuffer[i]yが仮極大値Tから定数L(例えば、2.0G)を減算した値より小さいか否かを判断する(ステップ121)。そして、CPU30は、T−L>AccBuffer[i]yである場合、上記ステップ112(山確定処理)に処理を進める。一方、CPU30は、T−L≦AccBuffer[i]yである場合、上記ステップ102に戻って、処理を繰り返す。
【0135】
例えば、図19に示すように、極小値を確定した後に、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化する位置(図示m6)となり、加速度が極大値候補から定数Lを減算した値まで小さくなると(図示p4)、当該極大値候補が極大値として確定される。これも、極大値を示す格納位置を過ぎて加速度が漸減的に小さく変化した時点で極大値を確定することにより、極大値付近における加速度の変動によって複数の極大値を検出したり、加速度が漸増的または漸減的に変化している途中の時点を極大値と誤判定したりすることを防止するためである。
【0136】
このように、ピークデータ更新処理によって、加速度データバッファAccBufferに格納された加速度履歴に対して、加速度のピークの数、加速度のピークを示した格納位置、加速度のピークにおける加速度の大きさ等が検出される。
【0137】
図14に戻り、ステップ81のピークデータ更新処理の後、CPU30は、有効ピークデータ開始数Ms=0に設定して有効ピークデータ開始数データDnを更新し(ステップ82)、処理を次のステップに進める。
【0138】
次に、CPU30は、上記ステップ81におけるピークデータ更新処理において、加速度のピークがあったか否かを判断する(ステップ83)。例えば、CPU30は、ピーク数データDfが示すピーク数Nmが1以上の数値に設定されているとき、加速度のピークがあったと判定する。そして、CPU30は、加速度のピークがあった場合、次のステップ84に処理を進める、一方、CPU30は、加速度のピークがない場合(Nm=0)、次のステップ98に処理を進める。
【0139】
ステップ84において、CPU30は、極大/極小値位置データDmを参照して極大/極小値位置Index[0]=0であるか否かを判断する。そして、CPU30は、極大/極小値位置Index[0]=0である場合、有効ピークデータ開始数Ms=1に設定して有効ピークデータ開始数データDnを更新し(ステップ85)、次のステップ86に処理を進める。一方、CPU30は、極大/極小値位置Index[0]=0でない場合、そのまま次のステップ86に処理を進める。
【0140】
ここで、図18および図19を用いて、上記ステップ84およびステップ85の処理の目的について説明する。上述したピークデータ更新処理においては、上記ステップ101の初期化処理で仮極大値Tおよび仮極小値BがいずれもAccBuffer[0]y(つまり、格納位置[0]におけるY軸方向の加速度の値)に設定される。このような仮極大値Tおよび仮極小値Bを設定した後、図18に示すような加速度変化が生じていると、格納位置[0]から極大値を示す格納位置まで(図示m1)は、仮極小値Bが更新されないため、加速度が仮極小値Bに定数Kを加算した値まで大きくなると(図示p5)、当該仮極小値Bが最初のピークとして確定される。このとき、最初のピークとして極小値が格納位置[0]に格納されているため、極大/極小値位置Index[0]=0に設定される。一方、図19に示すような加速度変化が生じていると、格納位置[0]から極小値を示す格納位置まで(図示m3)は、仮極大値Tが更新されないため、加速度が仮極大値Tから定数Kを減算した値まで小さくなると(図示p6)、当該仮極大値Tが最初のピークとして確定される。このときも、最初のピークとして極大値が格納位置[0]に格納されているため、極大/極小値位置Index[0]=0に設定される。
【0141】
上述した点p5およびp6は、いずれも加速度のピークではないが極大値または極小値として確定されてしまう例であり、真のピークとは区別されなければならない。したがって、上記ステップ84およびステップ85の処理では、極大/極小値位置Index[0]=0の場合に格納位置[0]の加速度がピークではないことを区別するために、有効ピークデータ開始数Msを1(つまり、1つめのピークは無効)に設定している。
【0142】
図14に戻り、ステップ86において、上記ステップ81におけるピークデータ更新処理において、有効な加速度のピークが2つ以上あったか否かを判断する。例えば、CPU30は、ピーク数データDfが示すピーク数Nmが有効ピークデータ開始数Msに1を加算した値より大きい値に設定されているとき、有効な加速度のピークが2つ以上あったと判定する。そして、CPU30は、有効な加速度のピークが2つあった場合、次のステップ87に処理を進める、一方、CPU30は、有効な加速度のピークが2つ未満である場合、次のステップ98に処理を進める。
【0143】
ステップ87において、CPU30は、プレイヤがコントローラ7を振り動かす操作を終了したか否かを判断する。例えば、CPU30は、現時点から直近の加速度ピークまでの時間が、加速度ピーク間の時間の所定倍(例えば、1.5倍)より長い場合、プレイヤがコントローラ7を振り動かす操作を終了したと判断する。具体的には、CPU30は、
Index[Ms]>(index[Ms−1]−Index[Ms])*1.5
であれば、プレイヤがコントローラ7を振り動かす操作を終了したと判断する。そして、CPU30は、プレイヤがコントローラ7を振り動かす操作を継続している場合、次のステップ88に処理を進める。一方、CPU30は、プレイヤがコントローラ7を振り動かす操作を終了した場合、次のステップ98に処理を進める。
【0144】
ここで、図20を用いて、プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化について説明する。図20では、加速度データバッファAccBufferに格納された加速度履歴において、プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化を実線で示し、プレイヤがコントローラ7を振り動かす操作を継続しているときの加速度変化を破線で示している。図20に示すように、プレイヤがコントローラ7を規則正しく振り動かしている場合、Y軸方向の加速度も当該操作に応じて一定の周期で変化する。一方、プレイヤがコントローラ7を振り動かす操作を終了するとき、Y軸方向の加速度が変化する周期が崩れ、その振幅も小さくなる。その結果、現時点から1つ目の加速度ピークまでの時間が長くなっていく。つまり、加速度ピークが生じる間隔(Index[Ms+1]−Index[Ms])を基準として、現時点から1つ目の加速度ピークが生じるまでの時間(Index[Ms])を比較判定すれば、プレイヤがコントローラ7を振り動かす操作を終了したことを検出することができる。
【0145】
図14に戻り、ステップ88において、CPU30は、加速度データバッファAccBufferに格納された加速度履歴における加速度の振幅hを算出し、振幅データDoを更新して、処理を次のステップに進める。例えば、CPU30は、振幅hを
h=|AccBuffer[index[Ms+1]]y−AccBuffer[index[Ms]]y|
で算出する。図18に示す加速度変化の例では、上記ステップ88において図18に示す振幅hが算出される。
【0146】
次に、CPU30は、加速度ピークの間隔を基準として、加速度ピークから現時点までの時間の比率aを算出し、比率データDpを更新して(ステップ89)、処理を次のステップに進める。例えば、CPU30は、比率aを
a=Index[Ms]/(index[Ms+1]−Index[Ms])
で算出する。図18に示す加速度変化の例では、格納位置[index[Ms+1]]から格納位置[Index[Ms]]までの時間を1とした場合の格納位置[0]から格納位置[Index[Ms]]までの時間の比率aが、上記ステップ89において算出される。図18から明らかなように、比率aは、加速度変化の周期の半分を基準とした直近の加速度ピークから現時点までの時間の比率であり、当該周期に対する現時点の時間的な位置が算出されることになる。
【0147】
次に、CPU30は、比率aが1.0より大きい値か否かを判断する(ステップ90)。そして、CPU30は、a>1.0である場合、比率aを1.0に設定して比率データDpを更新し(ステップ91)、次のステップ92に処理を進める。一方、CPU30は、a≦1.0である場合、そのまま次のステップ92に処理を進める。
【0148】
ステップ92において、CPU30は、正弦関数を用いて周期角度θcを算出し、周期角度データDdを更新して、処理を次のステップに進める。例えば、CPU30は、周期角度θcを
θc=q*h*sin(π*a)
で算出する。ここで、qは定数である。このように、周期角度θcは、加速度変化の周期性を周期関数(ここでは、正弦関数)に擬して、当該周期に対する現時点の時間的な位置(比率a)を用いて、コントローラ7を上下に振り動かすときの現時点における周期角度θcを推定している。つまり、直近の極大値もしくは極小値となる加速度データが取得されてからの経過時間を用いて、周期関数より現時点の操作状態を推定していることになる。
【0149】
なお、上述した周期角度θcを算出する本質的な原理は、過去に生じた加速度ピーク間の加速度推移を所定の関数で擬して、過去の加速度ピーク間の時間に対して直近の加速度ピークから現時点までの時間の割合を当該関数に当てはめて、現時点のコントローラ7の動きを推定するというものである。したがって、加速度変化の周期性を表す周期関数は、他の周期関数でもかまわない。例えば、余弦関数等、他の三角関数に加速度変化の周期性を擬してもかまわない。余弦関数を用いる場合、π*aにn*π(nは自然数)を加算または減算した値を変数として代入することによって、周期角度θcを算出することが可能である。
【0150】
また、上述した周期関数は、加速度変化の周期性を用いて次に生じる加速度ピークまでの加速度の推移を擬するために用いられているが、次の加速度ピークまでの加速度推移を推定できる関数であれば他の関数を用いてもかまわない。例えば、2点の加速度ピーク間の加速度推移が、当該2点間を直線やベジエ曲線等で近似されると推定して、上記時間割合から周期角度θcを求めてもかまわない。また、2点間を補間する各種補間法(スプライン補間等)を用いて2点の加速度ピーク間の加速度推移を推定して、上記時間割合から周期角度θcを求めてもかまわない。
【0151】
次に、CPU30は、直近の加速度ピークが山(つまり、極大値)であるか否かを判断する(ステップ93)。例えば、CPU30は、直近のピーク種別フラグデータDlを参照して、直近のピーク種別フラグFfrg=trueである場合、直近の加速度ピークが山であると判定する。そして、CPU30は、直近の加速度ピークが山でない場合(つまり、極小値)、周期角度θcの正負を反転させて(θc←−θc)周期角度データDdを更新し(ステップ94)、次のステップ95に処理を進める。一方、CPU30は、直近の加速度ピークが山である場合、そのまま次のステップ95に処理を進める。
【0152】
ステップ95において、CPU30は、有効ピークデータ開始数データDnを参照して、有効ピークデータ開始数Ms=1であるか否かを判断する。そして、CPU30は、Ms=1でない場合、周期角度θcの正負を反転させて(θc←−θc)周期角度データDdを更新し(ステップ96)、次のステップ97に処理を進める。一方、CPU30は、Ms=1である場合、そのまま次のステップ97に処理を進める。
【0153】
ステップ97において、CPU30は、周期角度有効フラグCfrgをtrueに設定して周期角度有効フラグデータDeを更新し、当該サブルーチンによる処理を終了する。一方、ピークデータ更新処理において、有効な加速度ピークが2つ未満である場合やプレイヤがコントローラ7を振り動かす操作を終了している場合、CPU30は、ステップ98の処理を行う。ステップ98において、CPU30は、周期角度有効フラグCfrgをfalseに設定して周期角度有効フラグデータDeを更新し、当該サブルーチンによる処理を終了する。
【0154】
図11に戻り、ステップ19の周期角度算出処理の後、CPU30は、周期角度有効フラグデータDeを参照して、周期角度有効フラグCfrgがtrueに設定されているか否かを判断する(ステップ20)。そして、CPU30は、周期角度有効フラグCfrg=falseの場合、次のステップ21に処理を進める。一方、CPU30は、周期角度有効フラグCfrg=trueの場合、次のステップ22に処理を進める。
【0155】
ステップ21において、CPU30は、姿勢角度データDcが示す姿勢角度θsおよびオブジェクト角度データDbに格納されているオブジェクト角度θobjを用いて新たなオブジェクト角度θobjを算出し、オブジェクト角度データDbを更新して、次のステップ23に処理を進める。例えば、CPU30は、新たなオブジェクト角度θobjを
θobj←θobj+(θs−θobj)*R
で算出する。ここで、Rは定数であり、例えばR=0.8である。
【0156】
ステップ22において、CPU30は、周期角度データDdが示す周期角度θcおよびオブジェクト角度データDbに格納されているオブジェクト角度θobjを用いて新たなオブジェクト角度θobjを算出し、オブジェクト角度データDbを更新して、次のステップ23に処理を進める。例えば、CPU30は、新たなオブジェクト角度θobjを
θobj←θobj+(θc−θobj)*R
で算出する。ここで、Rは定数であり、例えばR=0.8である。
【0157】
ステップ23において、CPU30は、オブジェクト角度データDbを参照してオブジェクト角度θobjを用いて、オブジェクトOBJがオブジェクト角度θobjだけ傾いた様子をモニタ2に表示し、上記ステップ16に戻って処理を繰り返す。例えば、図21に示すように、オブジェクト角度θobjは、仮想ゲーム世界の水平方向に対するオブジェクトOBJの傾きを示しており、当該オブジェクト角度θobjが変化することによってオブジェクトOBJの傾きが変化して表示される。また、オブジェクト角度θobjが周期性を有する変化をした場合、オブジェクトOBJが所定の回転軸を中心に仮想ゲーム世界においてあおぐように動作することになる。
【0158】
このように、上記実施形態に係るゲーム装置3は、プレイヤがコントローラ7を振り動かすような操作をしても、当該コントローラ7自体の動きを適切に反映したゲーム画像を表示することができる。例えば、プレイヤがコントローラ7を激しく振り動かした場合でも、その振る動作に応じて加速度センサが検出した加速度の周期性を用いて加速度ピーク間の推移を補間することによって、プレイヤが実際に振り動かした操作と一致する角度データを求めることができる。そのため、プレイヤが意図した動作がゲーム画像に表現され、プレイヤの振り動かし動作と同期した動作を表示してゲームの興趣を向上させることができる。
【0159】
なお、上述した周期角度θcを算出する本質的な原理は、過去に生じた加速度ピーク間の加速度推移を所定の関数で擬して、過去の加速度ピーク間の時間に対して直近の加速度ピークから現時点までの時間の割合を当該関数に当てはめて、現時点のコントローラ7の動きを推定するというものである。上述した処理動作においては、加速度の極大値から極小値までの推移または加速度の極小値から極大値までの推移を所定の関数で擬して、現時点のコントローラ7の動きを推定しているが、他のピーク値等を用いることもできる。
【0160】
例えば、加速度ピークについては、極大値および極小値の一方の極値のみを検出してもかまわない。このようなピーク検出を行ってピーク間の加速度推移を正弦関数で擬する場合、上述した周期角度θcを算出する数式において2πに比率aを乗算した値を変数として代入することによって、周期角度θcを算出することができる。また、このようなピーク検出を行ってピーク間の加速度推移を余弦関数で擬する場合、2πに比率aを乗算した値にn*π(nは自然数)を加算または減算した値を変数として代入することによって、周期角度θcを算出することができる。
【0161】
また、上記加速度ピークの時間間隔は、少なくとも1回算出すれば周期角度θcを算出することができるが、複数回繰り返して時間間隔を更新することによって、周期角度θcを算出する精度が高くなる。例えば、上記動作処理のように極大値または極小値を検出するごとに加速度ピークの時間間隔を算出してもよいし、所定条件ごと(例えば、極大値および/または極小値を所定回数検出した場合や、所定時間が経過した場合など)に時間間隔を算出してもよい。また、上述した動作処理では、所定処理周期ごとに加速度データDaを取得し、その取得周期を用いて時間間隔を算出しているが、加速度データDaの出力時刻や取得時刻を示すデータをメインメモリ33に記憶して当該データに基づいて時間間隔を算出してもかまわない。
【0162】
また、上述した説明では、算出した周期角度θcや姿勢角度θsを用いて、仮想ゲーム世界におけるオブジェクトOBJの傾斜を示すオブジェクト角度θobjを算出する例を説明したが、オブジェクトOBJの状態を示す他のゲームパラメータを算出してもかまわない。例えば、仮想ゲーム世界におけるオブジェクトOBJの位置(例えば、上下や左右に往復移動中の位置)やオブジェクトOBJの移動速度を、上記周期角度θcを用いて算出してもかまわない。算出した周期角度θcや姿勢角度θsを用いて、仮想ゲーム世界におけるオブジェクトOBJの状態を示す様々なゲームパラメータを算出することができる。
【0163】
また、周期角度θcや姿勢角度θsを用いて算出されたゲームパラメータに基づいて変化するオブジェクトOBJの状態に応じて、他のオブジェクトが影響を受けるようにしてもかまわない。例えば、図9に示すようにうちわを模したオブジェクトOBJがあおぐ動作を表現する場合、そのあおぐ動作に応じて発生する仮想ゲーム世界における風量によって他のオブジェクトが移動する(例えば、飛ばされる)ようにしてもかまわない。上述したコントローラ7を振り動かす速度等に応じて、オブジェクトOBJがあおぐ速度や角度も変化するため、結果的にコントローラ7を振り動かす操作が上記他のオブジェクトを移動させる速度等に影響を与えることになる。
【0164】
また、1軸方向のみの加速度を検出する加速度センサを用いても本発明を実現することができる。例えば、Y軸(図3、図4参照)成分のみ検出して出力する加速度センサを用いても、上述したゲーム処理を実現することができる。この場合、コントローラ7の静的な角度(姿勢角度θs)を算出するとき(ステップ18)は、検出したY軸方向の加速度が0である場合にコントローラ7が直上または鉛直方向に向けられていると仮定し、Y軸方向の加速度の大きさに応じて重力加速度が作用している方向を簡易的に判定して姿勢角度θsを算出する。そして、コントローラ7が振り動かされた後は、上述したフローチャートに基づいて、Y軸方向の加速度の大きさのみを取り扱って処理を行う。
【0165】
また、上述した説明では、コントローラ7に内蔵する加速度センサからの出力データを用いてゲーム処理する例を用いたが、他のセンサからの出力データを用いてもかまわない。例えば、コントローラ7にジャイロセンサを搭載する場合、コントローラ7を振り動かせば当該ジャイロセンサが検出するコントローラ7の回転角度においても上記周期性や極大値および極小値が算出できる。したがって、ジャイロセンサが検出したコントローラ7の回転角度を示すデータを取得し、出力信号に対して行う処理を適宜変更すれば、上記周期角度θcや姿勢角度θsを算出することが可能となる。
【0166】
また、上述したオブジェクト角度θobj、姿勢角度θs、周期角度θcは、現実の空間や仮想ゲーム空間における水平方向を基準方向としてそれぞれ設定されるが、他の方向を基準方向としてもかまわない。例えば、現実の空間や仮想ゲーム空間における直上方向や鉛直方向等を基準方向に設定してもかまわない。
【0167】
また、上述した説明では、コントローラ7を振り動かす動作を用いて操作するゲーム装置本体5をゲームシステム1に適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置にも適用することができる。例えば、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が表示しているオブジェクトの状態を制御する等、入力装置に生じる加速度に基づいて様々な処理を行うことができる。
【0168】
また、上述した説明では、コントローラ7とゲーム装置本体5とが無線通信によって接続された態様を用いたが、コントローラ7とゲーム装置本体5とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ7に接続されたケーブルをゲーム装置本体5の接続端子に接続する。
【0169】
また、上述したコントローラ7の形状や、それらに設けられている操作部72の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。
【0170】
また、本発明のゲームプログラムは、光ディスク4等の外部記憶媒体を通じてゲーム装置本体5に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体5に供給されてもよい。また、ゲームプログラムは、ゲーム装置本体5内部の不揮発性記憶装置に予め記録されていてもよい。なお、ゲームプログラムを記憶する情報記憶媒体としては、CD−ROM、DVD、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【産業上の利用可能性】
【0171】
本発明に係るゲームプログラムおよびゲーム装置は、入力装置自体の動きを適切に反映したゲーム処理を行うことができ、ゲームコントローラ等に与えられる動作に応じて仮想オブジェクト等の状態を変化させるゲームプログラムやゲーム装置として有用である。
【図面の簡単な説明】
【0172】
【図1】本発明の一実施形態に係るゲームシステム1を説明するための外観図
【図2】図1のゲーム装置本体5の機能ブロック図
【図3】図1のコントローラ7の上面後方から見た斜視図
【図4】図3のコントローラ7を下面前方から見た斜視図
【図5】図3のコントローラ7の上筐体を外した状態を示す斜視図
【図6】図4のコントローラ7の下筐体を外した状態を示す斜視図
【図7】図3のコントローラ7の構成を示すブロック図
【図8】図3のコントローラ7を用いてゲーム操作するときの状態を概説する図解図
【図9】モニタ2に表示されるオブジェクトOBJの一例を示す図
【図10】ゲーム装置本体5のメインメモリ33に記憶される主なデータを示す図
【図11】ゲーム装置本体5において実行されるゲーム処理の流れを示すフローチャート
【図12】図11におけるステップ17の加速度バッファ更新処理の詳細な動作を示すサブルーチン
【図13】図11におけるステップ18の姿勢角度算出処理の詳細な動作を示すサブルーチン
【図14】図11におけるステップ19の周期角度算出処理の詳細な動作を示すサブルーチン
【図15】図14におけるステップ81のピークデータ更新処理の詳細な動作を示すサブルーチン
【図16】コントローラ7が静的に傾いた状態の一例を示す図
【図17】コントローラ7が振り動かされている状態の一例を示す図
【図18】コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第1の例を示す図
【図19】コントローラ7が振られることによって、当該コントローラ7に生じる加速度の変化の第2の例を示す図
【図20】プレイヤがコントローラ7を振り動かす操作を終了するときの加速度変化の一例を示す図
【図21】仮想ゲーム世界におけるオブジェクトOBJの側面図
【符号の説明】
【0173】
1…ゲームシステム
2…モニタ
2a、706…スピーカ
3…ゲーム装置
30…CPU
31…メモリコントローラ
32…GPU
33…メインメモリ
34…DSP
35…ARAM
36…コントローラI/F
37…ビデオI/F
38…フラッシュメモリ
39…オーディオI/F
40…ディスクドライブ
41…ディスクI/F
4…光ディスク
5…ゲーム装置本体
6…通信ユニット
7…コントローラ
71…ハウジング
72…操作部
73…コネクタ
74…撮像情報演算部
741…赤外線フィルタ
742…レンズ
743…撮像素子
744…画像処理回路
75…通信部
751…マイコン
752…メモリ
753…無線モジュール
754…アンテナ
700…基板
701…加速度センサ
702…LED
704…バイブレータ
707…サウンドIC
708…アンプ
8…マーカ
【特許請求の範囲】
【請求項1】
ゲームを実行するゲーム装置のコンピュータで実行されるゲームプログラムであって、
入力装置自体の動きに応じて変化する出力データを取得する出力データ取得手段と、
前記出力データ取得手段が取得した出力データの履歴をメモリに記憶する出力データ記憶手段と、
前記出力データ記憶手段で記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出するピーク値検出手段と、
前記ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔を算出するピーク間隔算出手段と、
前記ピーク値検出手段が前記極値を検出してからの時間経過を計測する計測手段と、
前記計測手段によって計測された前記時間経過および前記ピーク間隔算出手段によって算出された前記時間間隔を所定の関数に代入することによりゲーム入力データを算出するゲーム入力データ算出手段と、
前記ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行するゲーム処理手段として、前記コンピュータを機能させる、ゲームプログラム。
【請求項2】
前記ピーク値検出手段は、前記極値を繰り返して検出し、
前記ピーク間隔算出手段は、前記ピーク値検出手段によって前記極値が検出されるごとに、前記ピーク値検出手段によって検出された最新の極値と当該極値の1つ前に検出された極値との間の時間間隔を算出し、
前記計測手段は、前記ピーク値検出手段が前記最新の極値を検出した時点からの経過時間を計測し、
前記ゲーム入力データ算出手段は、前記ピーク間隔算出手段によって算出された最新の時間間隔を用いて前記ゲーム入力データを算出する、請求項1に記載のゲームプログラム。
【請求項3】
前記ゲーム入力データ算出手段は、前記出力データの履歴が示す値を用いて、周期性をもって前記極大値および前記極小値を順次繰り返して当該値が推移していることを擬する周期関数を、前記所定の関数として設定する、請求項1に記載のゲームプログラム。
【請求項4】
前記ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がTだけ変化するごとに極値を繰り返してとり、かつ、所定値が代入された際に極値をとる関数であり、
前記ゲーム入力データ算出手段は、前記時間間隔に対する前記時間経過の割合をTに乗算した値に前記所定値を加算した値を、前記所定の関数に代入することにより、前記ゲーム入力データを算出する、請求項1に記載のゲームプログラム。
【請求項5】
前記ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がT/2だけ変化するごとに極大値と極小値とを繰り返してとる関数であり、
前記ピーク値検出手段は、極大値および極小値の両方を検出し、
前記ピーク間隔算出手段は、連続する極大値と極小値との間の時間間隔を算出し、
前記ゲーム入力データ算出手段は、前記時間間隔に対する前記時間経過の割合をT/2に乗算した値に所定値を加算した値を、前記所定の関数に代入することにより、前記ゲーム入力データを算出する、請求項1に記載のゲームプログラム。
【請求項6】
前記ゲーム入力データ算出手段が用いる所定の関数は、所定値が代入された際に極大値または極小値をとる関数であり、
前記ピーク値検出手段は、極大値と極小値とを繰り返して検出し、
前記ピーク間隔算出手段は、前記ピーク値検出手段によって極大値または極小値のいずれか検出されるごとに、前記ピーク値検出手段によって検出された最新の極大値または極小値の一方と当該検出の1つ前に検出された極大値または極小値の他方との間の時間間隔を算出し、
前記計測手段は、前記ピーク値検出手段が前記最新の極大値または極小値を検出した時点からの経過時間を計測し、
前記ゲーム入力データ算出手段は、前記ピーク間隔算出手段によって算出された最新の時間間隔を用いて前記ゲーム入力データを算出し、かつ、前記ピーク値検出手段により検出された最新の極値が極小値のときには、算出された前記ゲーム入力データの正負を反転する、請求項5に記載のゲームプログラム。
【請求項7】
前記ゲーム入力データ算出手段が用いる所定の関数は、正弦関数であり、
前記ピーク値検出手段は、極大値または極小値のいずれか一方を検出し、
前記ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出し、
前記ゲーム入力データ算出手段は、360度に前記割合を乗算した値を前記正弦関数に代入することにより、前記ゲーム入力データを算出する、請求項4に記載のゲームプログラム。
【請求項8】
前記ゲーム入力データ算出手段が用いる所定の関数は、正弦関数であり、
前記ゲーム入力データ算出手段は、180度に前記割合を乗算した値を前記正弦関数に代入することにより、前記ゲーム入力データを算出する、請求項5に記載のゲームプログラム。
【請求項9】
前記ゲーム入力データ算出手段が用いる所定の関数は、余弦関数であり、
前記ピーク値検出手段は、極大値または極小値のいずれか一方を検出し、
前記ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出し、
前記ゲーム入力データ算出手段は、360度に前記割合を乗算した値にn倍の円周率(nは自然数)を加算または減算した値を前記余弦関数に代入することにより、前記ゲーム入力データを算出する、請求項4に記載のゲームプログラム。
【請求項10】
前記ゲーム入力データ算出手段が用いる所定の関数は、余弦関数であり、
前記ゲーム入力データ算出手段は、円周率に前記割合を乗算した値にn倍の180度(nは自然数)を加算または減算した値を前記余弦関数に代入することにより、前記ゲーム入力データを算出する、請求項5に記載のゲームプログラム。
【請求項11】
前記入力装置には、少なくとも2方向に生じる加速度をそれぞれ検出して、当該検出結果を前記出力データとして出力する加速度検出部が設けられ、
前記出力データ取得手段は、前記加速度検出部から出力された出力データに基づいて、前記入力装置の前記2方向に生じる加速度を示すデータを取得する、請求項1に記載のゲームプログラム。
【請求項12】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが前記入力装置を反復的に傾ける操作をしたときに、当該操作の操作力による加速度が生じる方向である、請求項11に記載のゲームプログラム。
【請求項13】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが前記入力装置を反復的に傾ける操作をしたときに、当該操作による前記入力装置における所定箇所の移動の軌跡となる円弧の接線方向である、請求項11に記載のゲームプログラム。
【請求項14】
前記ゲーム入力データ算出手段は、
前記ピーク値検出手段によってn個(nは2以上の自然数)の極値が検出されたときに、前記計測手段によって計測された前記時間経過および前記ピーク間隔算出手段によって算出された前記時間間隔を前記所定の関数に代入することによりゲーム入力データを算出し、
前記ピーク値検出手段によってn個の極値が検出されないときには、前記出力データが示す2方向に生じる加速度に基づいて、前記入力装置に生じる重力方向に対する前記入力装置の角度を示す角度データを算出し、当該角度データを前記ゲーム入力データとする、請求項11に記載のゲームプログラム。
【請求項15】
前記ゲームは、前記2方向が実空間の鉛直面に存在するように前記入力装置を配置しつつ、前記入力装置を反復的に傾ける操作をさせるゲームである、請求項14に記載のゲームプログラム。
【請求項16】
前記計測手段により計測された時間経過が、前記ピーク間隔算出手段が算出した前記時間間隔のn倍(n>1)以上に達したことを判断する判断手段として、さらに前記コンピュータを機能させ、
前記ゲーム入力データ算出手段は、前記判断手段が肯定の判断をしたときに、前記出力データが示す2方向に生じる加速度に基づいて、前記入力装置に生じる重力方向に対する前記入力装置の角度を示す角度データを算出し、当該角度データを前記ゲーム入力データとする、請求項11に記載のゲームプログラム。
【請求項17】
前記ゲーム入力データ算出手段が用いる所定の関数は、前記ピーク間隔算出手段が算出した時間間隔を周期の半分とした正弦関数または余弦関数である、請求項1に記載のゲームプログラム。
【請求項18】
前記ピーク値検出手段は、極大値および極小値の両方を検出し、
前記ピーク値検出手段が検出した前記極大値と前記極小値との差分を算出する差分算出手段として、さらに前記コンピュータを機能させ、
前記ゲーム入力データ算出手段が用いる所定の関数は、前記差分算出手段が算出した差分値に基づいた値を振幅とする周期関数である、請求項1に記載のゲームプログラム。
【請求項19】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記計測手段により計測された時間経過が、前記ピーク間隔算出手段が算出した前記時間間隔の所定倍以上に達したとき、前記入力装置を反復的に傾ける操作が終了したと判定する終了判定手段として、さらに前記コンピュータを機能させる、請求項1に記載のゲームプログラム。
【請求項20】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記ピーク値検出手段によって1つ以下の極値が検出されたとき、前記入力装置を反復的に傾ける操作が行われていないと判定する停止判定手段として、さらに前記コンピュータを機能させる、請求項1に記載のゲームプログラム。
【請求項21】
前記終了判定手段が前記入力装置を反復的に傾ける操作が終了したと判定したとき、または前記停止判定手段が前記入力装置を反復的に傾ける操作が行われていないと判定しているとき、前記出力データ取得手段が取得した最新の出力データが示す値を用いて、当該入力装置自体の姿勢を算出する姿勢算出手段として、さらに前記コンピュータを機能させ、
前記ゲーム入力データ算出手段は、前記終了判定手段が前記入力装置を反復的に傾ける操作が終了したと判定したとき、または前記停止判定手段が前記入力装置を反復的に傾ける操作が行われていないと判定しているとき、前記姿勢算出手段が算出した姿勢を用いて前記ゲーム入力データを算出する、請求項19または20に記載のゲームプログラム。
【請求項22】
前記ゲーム処理手段は、前記ゲーム入力データを用いて、仮想ゲーム世界におけるオブジェクトの傾きを変化させ、
前記ゲーム処理手段が変化させたオブジェクトの傾きに応じて、前記仮想ゲーム世界で前記オブジェクトを傾斜させて当該オブジェクトを表示装置に表示する表示制御手段として、さらに前記コンピュータを機能させる、請求項1に記載のゲームプログラム。
【請求項23】
前記ゲーム処理手段は、前記ゲーム入力データを用いて、仮想ゲーム世界においてオブジェクトが移動したことにより発生する周りの環境への影響力を変化させ、当該影響力に応じて当該仮想ゲーム世界で当該オブジェクト以外のオブジェクトに対して所定の影響を与える、請求項1に記載のゲームプログラム。
【請求項24】
ゲームを実行するゲーム装置であって、
入力装置自体の動きに応じて変化する出力データを取得する出力データ取得手段と、
前記出力データ取得手段が取得した出力データの履歴をメモリに記憶する出力データ記憶手段と、
前記出力データ記憶手段で記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出するピーク値検出手段と、
前記ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔を算出するピーク間隔算出手段と、
前記ピーク値検出手段が前記極値を検出してからの時間経過を計測する計測手段と、
前記計測手段によって計測された前記時間経過および前記ピーク間隔算出手段によって算出された前記時間間隔を所定の関数に代入することによりゲーム入力データを算出するゲーム入力データ算出手段と、
前記ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行するゲーム処理手段とを備える、ゲーム装置。
【請求項1】
ゲームを実行するゲーム装置のコンピュータで実行されるゲームプログラムであって、
入力装置自体の動きに応じて変化する出力データを取得する出力データ取得手段と、
前記出力データ取得手段が取得した出力データの履歴をメモリに記憶する出力データ記憶手段と、
前記出力データ記憶手段で記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出するピーク値検出手段と、
前記ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔を算出するピーク間隔算出手段と、
前記ピーク値検出手段が前記極値を検出してからの時間経過を計測する計測手段と、
前記計測手段によって計測された前記時間経過および前記ピーク間隔算出手段によって算出された前記時間間隔を所定の関数に代入することによりゲーム入力データを算出するゲーム入力データ算出手段と、
前記ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行するゲーム処理手段として、前記コンピュータを機能させる、ゲームプログラム。
【請求項2】
前記ピーク値検出手段は、前記極値を繰り返して検出し、
前記ピーク間隔算出手段は、前記ピーク値検出手段によって前記極値が検出されるごとに、前記ピーク値検出手段によって検出された最新の極値と当該極値の1つ前に検出された極値との間の時間間隔を算出し、
前記計測手段は、前記ピーク値検出手段が前記最新の極値を検出した時点からの経過時間を計測し、
前記ゲーム入力データ算出手段は、前記ピーク間隔算出手段によって算出された最新の時間間隔を用いて前記ゲーム入力データを算出する、請求項1に記載のゲームプログラム。
【請求項3】
前記ゲーム入力データ算出手段は、前記出力データの履歴が示す値を用いて、周期性をもって前記極大値および前記極小値を順次繰り返して当該値が推移していることを擬する周期関数を、前記所定の関数として設定する、請求項1に記載のゲームプログラム。
【請求項4】
前記ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がTだけ変化するごとに極値を繰り返してとり、かつ、所定値が代入された際に極値をとる関数であり、
前記ゲーム入力データ算出手段は、前記時間間隔に対する前記時間経過の割合をTに乗算した値に前記所定値を加算した値を、前記所定の関数に代入することにより、前記ゲーム入力データを算出する、請求項1に記載のゲームプログラム。
【請求項5】
前記ゲーム入力データ算出手段が用いる所定の関数は、周期をTとして、変数がT/2だけ変化するごとに極大値と極小値とを繰り返してとる関数であり、
前記ピーク値検出手段は、極大値および極小値の両方を検出し、
前記ピーク間隔算出手段は、連続する極大値と極小値との間の時間間隔を算出し、
前記ゲーム入力データ算出手段は、前記時間間隔に対する前記時間経過の割合をT/2に乗算した値に所定値を加算した値を、前記所定の関数に代入することにより、前記ゲーム入力データを算出する、請求項1に記載のゲームプログラム。
【請求項6】
前記ゲーム入力データ算出手段が用いる所定の関数は、所定値が代入された際に極大値または極小値をとる関数であり、
前記ピーク値検出手段は、極大値と極小値とを繰り返して検出し、
前記ピーク間隔算出手段は、前記ピーク値検出手段によって極大値または極小値のいずれか検出されるごとに、前記ピーク値検出手段によって検出された最新の極大値または極小値の一方と当該検出の1つ前に検出された極大値または極小値の他方との間の時間間隔を算出し、
前記計測手段は、前記ピーク値検出手段が前記最新の極大値または極小値を検出した時点からの経過時間を計測し、
前記ゲーム入力データ算出手段は、前記ピーク間隔算出手段によって算出された最新の時間間隔を用いて前記ゲーム入力データを算出し、かつ、前記ピーク値検出手段により検出された最新の極値が極小値のときには、算出された前記ゲーム入力データの正負を反転する、請求項5に記載のゲームプログラム。
【請求項7】
前記ゲーム入力データ算出手段が用いる所定の関数は、正弦関数であり、
前記ピーク値検出手段は、極大値または極小値のいずれか一方を検出し、
前記ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出し、
前記ゲーム入力データ算出手段は、360度に前記割合を乗算した値を前記正弦関数に代入することにより、前記ゲーム入力データを算出する、請求項4に記載のゲームプログラム。
【請求項8】
前記ゲーム入力データ算出手段が用いる所定の関数は、正弦関数であり、
前記ゲーム入力データ算出手段は、180度に前記割合を乗算した値を前記正弦関数に代入することにより、前記ゲーム入力データを算出する、請求項5に記載のゲームプログラム。
【請求項9】
前記ゲーム入力データ算出手段が用いる所定の関数は、余弦関数であり、
前記ピーク値検出手段は、極大値または極小値のいずれか一方を検出し、
前記ピーク間隔算出手段は、連続する極大値の時間間隔または連続する極小値の時間間隔のいずれか一方を算出し、
前記ゲーム入力データ算出手段は、360度に前記割合を乗算した値にn倍の円周率(nは自然数)を加算または減算した値を前記余弦関数に代入することにより、前記ゲーム入力データを算出する、請求項4に記載のゲームプログラム。
【請求項10】
前記ゲーム入力データ算出手段が用いる所定の関数は、余弦関数であり、
前記ゲーム入力データ算出手段は、円周率に前記割合を乗算した値にn倍の180度(nは自然数)を加算または減算した値を前記余弦関数に代入することにより、前記ゲーム入力データを算出する、請求項5に記載のゲームプログラム。
【請求項11】
前記入力装置には、少なくとも2方向に生じる加速度をそれぞれ検出して、当該検出結果を前記出力データとして出力する加速度検出部が設けられ、
前記出力データ取得手段は、前記加速度検出部から出力された出力データに基づいて、前記入力装置の前記2方向に生じる加速度を示すデータを取得する、請求項1に記載のゲームプログラム。
【請求項12】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが前記入力装置を反復的に傾ける操作をしたときに、当該操作の操作力による加速度が生じる方向である、請求項11に記載のゲームプログラム。
【請求項13】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記加速度検出部が加速度を検出する2方向のうちの一方方向は、プレイヤが前記入力装置を反復的に傾ける操作をしたときに、当該操作による前記入力装置における所定箇所の移動の軌跡となる円弧の接線方向である、請求項11に記載のゲームプログラム。
【請求項14】
前記ゲーム入力データ算出手段は、
前記ピーク値検出手段によってn個(nは2以上の自然数)の極値が検出されたときに、前記計測手段によって計測された前記時間経過および前記ピーク間隔算出手段によって算出された前記時間間隔を前記所定の関数に代入することによりゲーム入力データを算出し、
前記ピーク値検出手段によってn個の極値が検出されないときには、前記出力データが示す2方向に生じる加速度に基づいて、前記入力装置に生じる重力方向に対する前記入力装置の角度を示す角度データを算出し、当該角度データを前記ゲーム入力データとする、請求項11に記載のゲームプログラム。
【請求項15】
前記ゲームは、前記2方向が実空間の鉛直面に存在するように前記入力装置を配置しつつ、前記入力装置を反復的に傾ける操作をさせるゲームである、請求項14に記載のゲームプログラム。
【請求項16】
前記計測手段により計測された時間経過が、前記ピーク間隔算出手段が算出した前記時間間隔のn倍(n>1)以上に達したことを判断する判断手段として、さらに前記コンピュータを機能させ、
前記ゲーム入力データ算出手段は、前記判断手段が肯定の判断をしたときに、前記出力データが示す2方向に生じる加速度に基づいて、前記入力装置に生じる重力方向に対する前記入力装置の角度を示す角度データを算出し、当該角度データを前記ゲーム入力データとする、請求項11に記載のゲームプログラム。
【請求項17】
前記ゲーム入力データ算出手段が用いる所定の関数は、前記ピーク間隔算出手段が算出した時間間隔を周期の半分とした正弦関数または余弦関数である、請求項1に記載のゲームプログラム。
【請求項18】
前記ピーク値検出手段は、極大値および極小値の両方を検出し、
前記ピーク値検出手段が検出した前記極大値と前記極小値との差分を算出する差分算出手段として、さらに前記コンピュータを機能させ、
前記ゲーム入力データ算出手段が用いる所定の関数は、前記差分算出手段が算出した差分値に基づいた値を振幅とする周期関数である、請求項1に記載のゲームプログラム。
【請求項19】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記計測手段により計測された時間経過が、前記ピーク間隔算出手段が算出した前記時間間隔の所定倍以上に達したとき、前記入力装置を反復的に傾ける操作が終了したと判定する終了判定手段として、さらに前記コンピュータを機能させる、請求項1に記載のゲームプログラム。
【請求項20】
前記ゲームは、プレイヤに前記入力装置を反復的に傾ける操作をさせるゲームであり、
前記ピーク値検出手段によって1つ以下の極値が検出されたとき、前記入力装置を反復的に傾ける操作が行われていないと判定する停止判定手段として、さらに前記コンピュータを機能させる、請求項1に記載のゲームプログラム。
【請求項21】
前記終了判定手段が前記入力装置を反復的に傾ける操作が終了したと判定したとき、または前記停止判定手段が前記入力装置を反復的に傾ける操作が行われていないと判定しているとき、前記出力データ取得手段が取得した最新の出力データが示す値を用いて、当該入力装置自体の姿勢を算出する姿勢算出手段として、さらに前記コンピュータを機能させ、
前記ゲーム入力データ算出手段は、前記終了判定手段が前記入力装置を反復的に傾ける操作が終了したと判定したとき、または前記停止判定手段が前記入力装置を反復的に傾ける操作が行われていないと判定しているとき、前記姿勢算出手段が算出した姿勢を用いて前記ゲーム入力データを算出する、請求項19または20に記載のゲームプログラム。
【請求項22】
前記ゲーム処理手段は、前記ゲーム入力データを用いて、仮想ゲーム世界におけるオブジェクトの傾きを変化させ、
前記ゲーム処理手段が変化させたオブジェクトの傾きに応じて、前記仮想ゲーム世界で前記オブジェクトを傾斜させて当該オブジェクトを表示装置に表示する表示制御手段として、さらに前記コンピュータを機能させる、請求項1に記載のゲームプログラム。
【請求項23】
前記ゲーム処理手段は、前記ゲーム入力データを用いて、仮想ゲーム世界においてオブジェクトが移動したことにより発生する周りの環境への影響力を変化させ、当該影響力に応じて当該仮想ゲーム世界で当該オブジェクト以外のオブジェクトに対して所定の影響を与える、請求項1に記載のゲームプログラム。
【請求項24】
ゲームを実行するゲーム装置であって、
入力装置自体の動きに応じて変化する出力データを取得する出力データ取得手段と、
前記出力データ取得手段が取得した出力データの履歴をメモリに記憶する出力データ記憶手段と、
前記出力データ記憶手段で記憶された出力データの履歴から、当該出力データが示す値の連続する極値を検出するピーク値検出手段と、
前記ピーク値検出手段による検出に基づいて、連続する極値を示す出力データが取得された時間間隔を算出するピーク間隔算出手段と、
前記ピーク値検出手段が前記極値を検出してからの時間経過を計測する計測手段と、
前記計測手段によって計測された前記時間経過および前記ピーク間隔算出手段によって算出された前記時間間隔を所定の関数に代入することによりゲーム入力データを算出するゲーム入力データ算出手段と、
前記ゲーム入力データ算出手段によって算出されたゲーム入力データを用いて、ゲーム処理を実行するゲーム処理手段とを備える、ゲーム装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【公開番号】特開2008−136681(P2008−136681A)
【公開日】平成20年6月19日(2008.6.19)
【国際特許分類】
【出願番号】特願2006−326233(P2006−326233)
【出願日】平成18年12月1日(2006.12.1)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
【公開日】平成20年6月19日(2008.6.19)
【国際特許分類】
【出願日】平成18年12月1日(2006.12.1)
【出願人】(000233778)任天堂株式会社 (1,115)
【Fターム(参考)】
[ Back to top ]