(57)【要約】【課題】加速度に基づいたゲーム処理を行うゲームにおいて、適切なゲーム処理を選択して実行することができるゲーム装置およびゲームプログラムを提供する。【解決手段】入力装置に対する少なくとも２軸方向の加速度をそれぞれ検出する加速度センサから出力される加速度データを用いてゲーム処理を行うゲーム装置である。取得手段は、入力装置から加速度データを取得する。範囲設定手段は、少なくとも２軸のうち少なくとも１つの軸に関する第１の加速度を判定するために、当該第１の加速度に対する複数の判定範囲を設定する。範囲制御手段は、加速度データを用いて、少なくとも２軸のうち第１の加速度が関わる軸とは異なる軸を少なくとも含む軸に関する第２の加速度に基づいて、判定範囲を変化させる。判定手段は、加速度データが示す第１の加速度が、判定範囲の何れに含まれるか判定する。ゲーム処理手段は、判定手段の判定結果に応じたゲーム処理を実行する。【選択図】図１８
2010158463.tif 000002
【特許請求の範囲】
【請求項１】
入力装置に対する少なくとも２軸方向の加速度をそれぞれ検出する加速度センサから出力される加速度データを用いてゲーム処理を行うゲーム装置であって、
前記入力装置から前記加速度データを取得する取得手段と、
前記少なくとも２軸のうち少なくとも１つの軸に関する第１の加速度を判定するために、当該第１の加速度に対する複数の判定範囲を設定する範囲設定手段と、
前記加速度データを用いて、前記少なくとも２軸のうち前記第１の加速度が関わる軸とは異なる軸を少なくとも含む軸に関する第２の加速度に基づいて、前記判定範囲を変化させる範囲制御手段と、
前記加速度データが示す前記第１の加速度が、前記判定範囲の何れに含まれるか判定する判定手段と、
前記判定手段の判定結果に応じたゲーム処理を実行するゲーム処理手段とを備える、ゲーム装置。
【請求項２】
前記加速度センサは、前記入力装置に対する３軸方向の加速度をそれぞれ検出し、
前記第１の加速度は、前記３軸のうち２つの軸に関する加速度であり、
前記第２の加速度は、前記３軸のうち前記２つの軸とは異なる残りの１軸に関する加速度であり、
前記範囲設定手段は、前記第１の加速度を前記２つの軸に関する２次元ベクトルとした場合に当該２次元ベクトルの方向に対して前記判定範囲を設定する、請求項１に記載のゲーム装置。
【請求項３】
前記範囲制御手段は、前記加速度データが示す前記残りの１軸に関する加速度が所定の値よりも小さい場合、前記複数の判定範囲のうち少なくとも１つの判定範囲を大きく変化させる、請求項２に記載のゲーム装置。
【請求項４】
前記範囲設定手段は、前記入力装置がスイングされた方向に応じて設定された操作内容毎に前記判定範囲を設定し、
前記ゲーム処理手段は、前記操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタに行わせるテニスゲームを前記ゲーム処理として行い、
前記範囲設定手段は、前記入力装置が振り上げられる方向にスイングされた場合、前記操作内容が前記テニスゲームにおいて相対的に高くボールが打ち上げられるロブショットとなるように前記判定範囲を設定し、
前記範囲制御手段は、前記加速度データが示す前記残りの１軸に関する加速度が所定の値よりも小さい場合、前記ロブショットを示す前記操作内容が設定された判定範囲を大きく変化させる、請求項３に記載のゲーム装置。
【請求項５】
前記加速度データが示す少なくとも１軸に関する加速度が所定の値以上となった時点を検出する動作検出手段を、さらに備え、
前記判定手段は、前記動作検出手段が検出した時点を基準とした所定期間に取得された前記加速度データの履歴を用いて、前記第１の加速度に対する判定を行う、請求項１または２に記載のゲーム装置。
【請求項６】
前記ゲーム処理手段は、前記判定手段の判定結果に応じて、複数種類のゲーム処理のうち前記第１の加速度が含まれる前記判定範囲に設定された１種類のゲーム処理を選択して実行する、請求項１または２に記載のゲーム装置。
【請求項７】
前記範囲設定手段は、前記入力装置の動きに応じて設定された操作内容毎に前記判定範囲を設定し、
前記ゲーム処理手段は、前記第１の加速度が含まれる前記判定範囲に設定された操作内容に応じたゲーム処理を実行する、請求項６に記載のゲーム装置。
【請求項８】
前記ゲーム処理手段は、前記操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタに行わせるゲーム処理を行う、請求項７に記載のゲーム装置。
【請求項９】
前記判定手段は、前記第１の加速度が生じた方向を前記入力装置が動いた方向として、当該方向が含まれる前記判定範囲を判定し、
前記範囲設定手段は、前記入力装置が動いた方向に対して設定する操作内容毎に前記判定範囲を設定し、
前記範囲制御手段は、前記第２の加速度の大きさが所定の値よりも小さい場合、前記複数の判定範囲のうち少なくとも１つの判定範囲を大きく変化させる、請求項１または２に記載のゲーム装置。
【請求項１０】
入力装置に対する少なくとも２軸方向の加速度をそれぞれ検出する加速度センサから出力される加速度データを用いてゲーム処理を行うゲーム装置のコンピュータで実行されるゲームプログラムであって、
前記コンピュータを、
前記入力装置から前記加速度データを取得する取得手段と、
前記少なくとも２軸のうち少なくとも１つの軸に関する第１の加速度を判定するために、当該第１の加速度に対する複数の判定範囲を設定する範囲設定手段と、
前記加速度データを用いて、前記少なくとも２軸のうち前記第１の加速度が関わる軸とは異なる軸を少なくとも含む軸に関する第２の加速度に基づいて、前記判定範囲を変化させる範囲制御手段と、
前記加速度データが示す前記第１の加速度が、前記判定範囲の何れに含まれるか判定する判定手段と、
前記判定手段の判定結果に応じたゲーム処理を実行するゲーム処理手段として機能させる、ゲームプログラム。
【請求項１１】
前記加速度センサは、前記入力装置に対する３軸方向の加速度をそれぞれ検出し、
前記第１の加速度は、前記３軸のうち２つの軸に関する加速度であり、
前記第２の加速度は、前記３軸のうち前記２つの軸とは異なる残りの１軸に関する加速度であり、
前記範囲設定手段は、前記第１の加速度を前記２つの軸に関する２次元ベクトルとした場合に当該２次元ベクトルの方向に対して前記判定範囲を設定する、請求項１０に記載のゲームプログラム。
【請求項１２】
前記範囲制御手段は、前記加速度データが示す前記残りの１軸に関する加速度が所定の値よりも小さい場合、前記複数の判定範囲のうち少なくとも１つの判定範囲を大きく変化させる、請求項１１に記載のゲームプログラム。
【請求項１３】
前記範囲設定手段は、前記入力装置がスイングされた方向に応じて設定された操作内容毎に前記判定範囲を設定し、
前記ゲーム処理手段は、前記操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタに行わせるテニスゲームを前記ゲーム処理として行い、
前記範囲設定手段は、前記入力装置が振り上げられる方向にスイングされた場合、前記操作内容が前記テニスゲームにおいて相対的に高くボールが打ち上げられるロブショットとなるように前記判定範囲を設定し、
前記範囲制御手段は、前記加速度データが示す前記残りの１軸に関する加速度が所定の値よりも小さい場合、前記ロブショットを示す前記操作内容が設定された判定範囲を大きく変化させる、請求項１２に記載のゲームプログラム。
【請求項１４】
前記加速度データが示す少なくとも１軸に関する加速度が所定の値以上となった時点を検出する動作検出手段として、前記コンピュータをさらに機能させ、
前記判定手段は、前記動作検出手段が検出した時点を基準とした所定期間に取得された前記加速度データの履歴を用いて、前記第１の加速度に対する判定を行う、請求項１０または１１に記載のゲームプログラム。
【請求項１５】
前記ゲーム処理手段は、前記判定手段の判定結果に応じて、複数種類のゲーム処理のうち前記第１の加速度が含まれる前記判定範囲に設定された１種類のゲーム処理を選択して実行する、請求項１０または１１に記載のゲームプログラム。
【請求項１６】
前記範囲設定手段は、前記入力装置の動きに応じて設定された操作内容毎に前記判定範囲を設定し、
前記ゲーム処理手段は、前記第１の加速度が含まれる前記判定範囲に設定された操作内容に応じたゲーム処理を実行する、請求項１５に記載のゲームプログラム。
【請求項１７】
前記ゲーム処理手段は、前記操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタに行わせるゲーム処理を行う、請求項１６に記載のゲームプログラム。
【請求項１８】
前記判定手段は、前記第１の加速度が生じた方向を前記入力装置が動いた方向として、当該方向が含まれる前記判定範囲を判定し、
前記範囲設定手段は、前記入力装置が動いた方向に対して設定する操作内容毎に前記判定範囲を設定し、
前記範囲制御手段は、前記第２の加速度の大きさが所定の値よりも小さい場合、前記複数の判定範囲のうち少なくとも１つの判定範囲を大きく変化させる、請求項１０または１１に記載のゲームプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲーム装置およびゲームプログラムに関し、より特定的には、加速度に基づいてゲーム処理を行うゲーム装置およびゲームプログラムに関する。
【背景技術】
【０００２】
従来、入力装置に備えられた加速度センサから出力される加速度データを用いて、ゲームの処理を行うゲーム装置がある（例えば、特許文献１参照）。上記特許文献１で開示された動き判別装置は、加速度センサから出力される加速度データの推移に基づいて、入力装置の動き方向を判別している。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２４１６５５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記動き判別装置で入力装置の振り方向を判別する場合、何種類もの振りの種類を１度の判別処理で判別するものではない。例えば、入力装置を振り動かすことに応じて仮想ゲーム世界でテニスゲームを行う場合、現実のテニスではラケットを振る方向によって様々なショットが可能となるが、上記動き判別装置は、実際のテニスの振りに応じたショットを再現するためのものではない。また、入力装置を振り動かすことによって行う操作は、同じ振り方向であっても、その振り強さ等によって異なる操作内容としたい場合が多い。しかしながら、固定した振り方向の判定のみで振りに関する操作内容を判定してしまうと、上述した操作の違いを区別することができない。
【０００５】
それ故に、本発明の目的は、加速度に基づいたゲーム処理を行うゲームにおいて、適切なゲーム処理を選択して実行することができるゲーム装置およびゲームプログラムを提供することである。
【課題を解決するための手段】
【０００６】
上記の目的を達成するために、本発明は以下の構成を採用した。なお、括弧内の参照符号やステップ番号等は、本発明の理解を助けるために後述する実施形態との対応関係を示したものであって、本発明の範囲を何ら限定するものではない。
【０００７】
第１の発明は、入力装置（７）に対する少なくとも２軸方向の加速度をそれぞれ検出する加速度センサ（７０１）から出力される加速度データ（Ｄａ）を用いてゲーム処理を行うゲーム装置（５）である。ゲーム装置は、取得手段（ステップ４３、４４、６３、および６４を実行するＣＰＵ１０；以下、単にステップ番号のみ記載する）、範囲設定手段（Ｄｈ、図１９、図２０）、範囲制御手段（Ｓ８９〜Ｓ９１）、判定手段（Ｓ８８、Ｓ９１）、およびゲーム処理手段（Ｓ５１）を備える。取得手段は、入力装置から加速度データを取得する。範囲設定手段は、少なくとも２軸（Ｘ軸、Ｙ軸、Ｚ軸）のうち少なくとも１つの軸（Ｘ軸、Ｙ軸）に関する第１の加速度（加算ベクトルのＸ−Ｙ軸成分）を判定するために、当該第１の加速度に対する複数の判定範囲を設定する。範囲制御手段は、加速度データを用いて、少なくとも２軸のうち第１の加速度が関わる軸とは異なる軸（Ｚ軸）を少なくとも含む軸に関する第２の加速度（加算ベクトルのＺ軸成分）に基づいて、判定範囲を変化させる。判定手段は、加速度データが示す第１の加速度が、判定範囲の何れに含まれるか判定する。ゲーム処理手段は、判定手段の判定結果に応じたゲーム処理を実行する。
【０００８】
第２の発明は、上記第１の発明において、加速度センサは、入力装置に対する３軸方向の加速度をそれぞれ検出する。第１の加速度は、３軸のうち２つの軸に関する加速度である。第２の加速度は、３軸のうち２つの軸とは異なる残りの１軸に関する加速度である。範囲設定手段は、第１の加速度を２つの軸に関する２次元ベクトルとした場合に当該２次元ベクトルの方向（θ）に対して判定範囲を設定する。
【０００９】
第３の発明は、上記第２の発明において、範囲制御手段は、加速度データが示す残りの１軸に関する加速度が所定の値（Ｔｂ）よりも小さい場合、複数の判定範囲のうち少なくとも１つの判定範囲（ロブ）を大きく変化させる。
【００１０】
第４の発明は、上記第３の発明において、範囲設定手段は、入力装置がスイングされた方向に応じて設定された操作内容（ショット種別）毎に判定範囲を設定する。ゲーム処理手段は、操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタ（ＰＣ）に行わせるテニスゲームをゲーム処理として行う。範囲設定手段は、入力装置が振り上げられる方向にスイングされた場合、操作内容がテニスゲームにおいて相対的に高くボール（ＢＣ）が打ち上げられるロブショットとなるように判定範囲を設定する。範囲制御手段は、加速度データが示す残りの１軸に関する加速度が所定の値よりも小さい場合、ロブショットを示す操作内容が設定された判定範囲を大きく変化させる。
【００１１】
第５の発明は、上記第１または第２の発明において、動作検出手段（Ｓ４８）を、さらに備える。動作検出手段は、加速度データが示す少なくとも１軸に関する加速度が所定の値（Ｔａ）以上となった時点を検出する。判定手段は、動作検出手段が検出した時点を基準とした所定期間に取得された加速度データの履歴（ｈ０〜ｈ４）を用いて、第１の加速度に対する判定を行う。
【００１２】
第６の発明は、上記第１または第２の発明において、ゲーム処理手段は、判定手段の判定結果に応じて、複数種類のゲーム処理（スイング種別）のうち第１の加速度が含まれる判定範囲に設定された１種類のゲーム処理を選択して実行する。
【００１３】
第７の発明は、上記第６の発明において、範囲設定手段は、入力装置の動きに応じて設定された操作内容毎に判定範囲を設定する。ゲーム処理手段は、第１の加速度が含まれる判定範囲に設定された操作内容に応じたゲーム処理を実行する。
【００１４】
第８の発明は、上記第７の発明において、ゲーム処理手段は、操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタに行わせるゲーム処理を行う。
【００１５】
第９の発明は、上記第１または第２の発明において、判定手段は、第１の加速度が生じた方向を入力装置が動いた方向として、当該方向が含まれる判定範囲を判定する。範囲設定手段は、入力装置が動いた方向に対して設定する操作内容毎に判定範囲を設定する。範囲制御手段は、第２の加速度の大きさが所定の値よりも小さい場合、複数の判定範囲のうち少なくとも１つの判定範囲を大きく変化させる。
【００１６】
第１０の発明は、入力装置に対する少なくとも２軸方向の加速度をそれぞれ検出する加速度センサから出力される加速度データを用いてゲーム処理を行うゲーム装置のコンピュータ（１０）で実行されるゲームプログラムである。ゲームプログラムは、取得手段、範囲設定手段、範囲制御手段、判定手段、およびゲーム処理手段として、コンピュータを機能させる。取得手段は、入力装置から加速度データを取得する。範囲設定手段は、少なくとも２軸のうち少なくとも１つの軸に関する第１の加速度を判定するために、当該第１の加速度に対する複数の判定範囲を設定する。範囲制御手段は、加速度データを用いて、少なくとも２軸のうち第１の加速度が関わる軸とは異なる軸を少なくとも含む軸に関する第２の加速度に基づいて、判定範囲を変化させる。判定手段は、加速度データが示す第１の加速度が、判定範囲の何れに含まれるか判定する。ゲーム処理手段は、判定手段の判定結果に応じたゲーム処理を実行する。
【００１７】
第１１の発明は、上記第１０の発明において、加速度センサは、入力装置に対する３軸方向の加速度をそれぞれ検出する。第１の加速度は、３軸のうち２つの軸に関する加速度である。第２の加速度は、３軸のうち２つの軸とは異なる残りの１軸に関する加速度である。範囲設定手段は、第１の加速度を２つの軸に関する２次元ベクトルとした場合に当該２次元ベクトルの方向に対して判定範囲を設定する。
【００１８】
第１２の発明は、上記第１１の発明において、範囲制御手段は、加速度データが示す残りの１軸に関する加速度が所定の値よりも小さい場合、複数の判定範囲のうち少なくとも１つの判定範囲を大きく変化させる。
【００１９】
第１３の発明は、上記第１２の発明において、範囲設定手段は、入力装置がスイングされた方向に応じて設定された操作内容毎に判定範囲を設定する。ゲーム処理手段は、操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタに行わせるテニスゲームをゲーム処理として行う。範囲設定手段は、入力装置が振り上げられる方向にスイングされた場合、操作内容がテニスゲームにおいて相対的に高くボールが打ち上げられるロブショットとなるように判定範囲を設定する。範囲制御手段は、加速度データが示す残りの１軸に関する加速度が所定の値よりも小さい場合、ロブショットを示す操作内容が設定された判定範囲を大きく変化させる。
【００２０】
第１４の発明は、上記第１０または第１１の発明において、動作検出手段として、コンピュータをさらに機能させる。動作検出手段は、加速度データが示す少なくとも１軸に関する加速度が所定の値以上となった時点を検出する。判定手段は、動作検出手段が検出した時点を基準とした所定期間に取得された加速度データの履歴を用いて、第１の加速度に対する判定を行う。
【００２１】
第１５の発明は、上記第１０または第１１の発明において、ゲーム処理手段は、判定手段の判定結果に応じて、複数種類のゲーム処理のうち第１の加速度が含まれる判定範囲に設定された１種類のゲーム処理を選択して実行する。
【００２２】
第１６の発明は、上記第１５の発明において、範囲設定手段は、入力装置の動きに応じて設定された操作内容毎に判定範囲を設定する。ゲーム処理手段は、第１の加速度が含まれる判定範囲に設定された操作内容に応じたゲーム処理を実行する。
【００２３】
第１７の発明は、上記第１６の発明において、ゲーム処理手段は、操作内容に応じたスイングを仮想ゲーム世界に登場するプレイヤキャラクタに行わせるゲーム処理を行う。
【００２４】
第１８の発明は、上記第１０または第１１の発明において、判定手段は、第１の加速度が生じた方向を入力装置が動いた方向として、当該方向が含まれる判定範囲を判定する。範囲設定手段は、入力装置が動いた方向に対して設定する操作内容毎に判定範囲を設定する。範囲制御手段は、第２の加速度の大きさが所定の値よりも小さい場合、複数の判定範囲のうち少なくとも１つの判定範囲を大きく変化させる。
【発明の効果】
【００２５】
上記第１の発明によれば、第１の加速度が同じであっても、第２の加速度の値によって異なる判定が可能となるため、さらに詳細な判定が可能となってプレイヤが意図する適切な操作内容でゲーム処理することができる。
【００２６】
上記第２の発明によれば、加速度センサから得られる３軸（例えば、Ｘ軸、Ｙ軸、Ｚ軸）方向の加速度に関して、当該３軸のうちの２軸（例えば、Ｘ軸、Ｙ軸）の成分を用いた２次元ベクトルを判定するための判定範囲を、当該２軸とは異なる１軸（例えば、Ｚ軸）の成分の値に基づいて変化させている。これによって、例えば、上記２次元ベクトルによって入力装置が動いた方向を判定する場合、同じ方向であっても、その動き方や動く速さ等によって異なる操作として判定することが可能であるため、さらに詳細な判定が可能となってプレイヤが意図する適切な操作内容でゲーム処理することができる。
【００２７】
上記第３の発明によれば、上記２軸とは異なる１軸（例えば、Ｚ軸）方向に生じている加速度が小さい場合、ある判定範囲が大きくなる。つまり、入力装置が上記１軸方向の加速度が相対的に小さくなるような動き方をした場合、ある判定範囲に含まれると判定される可能性が高くなり、プレイヤが意図する適切な操作内容でゲーム処理することができる。
【００２８】
上記第４の発明によれば、テニスゲームにおいてプレイヤが入力装置を振り上げる操作を行った場合、入力装置のスイング方向を検出するための２軸（例えば、Ｘ軸、Ｙ軸）とは異なる１軸に関する加速度が相対的に小さい場合、いわゆるロブショットを示す操作がされたと判定される可能性が高くなる。
【００２９】
上記第５の発明によれば、入力装置にある程度の動きが生じた時点をトリガとして、所定期間中に生じた加速度の履歴を用いて判定が行われる。したがって、上記時点の入力装置の動きに基づいた操作を判定できると共に、上記所定期間中の加速度の傾向を用いて正確な判定を行うことができる。
【００３０】
上記第６の発明によれば、判定結果に基づいて異なるゲーム処理を行うことができる。
【００３１】
上記第７の発明によれば、判定結果が示す操作内容に応じたゲーム処理が可能となる。
【００３２】
上記第８の発明によれば、プレイヤキャラクタに判定結果が示す操作内容に応じたスイングを行わせることができる。
【００３３】
上記第９の発明によれば、入力装置が動いた方向が同じであっても、その動き方や動く速さ等によって異なる操作内容として判定することが可能であるため、さらに詳細な判定が可能となってプレイヤが意図する適切な操作内容でゲーム処理することができる。
【００３４】
本発明のゲームプログラムによれば、上述したゲーム装置と同様の効果を得ることができる。
【図面の簡単な説明】
【００３５】
【図１】本発明の一実施形態に係るゲームシステム１を説明するための外観図
【図２】図１のゲーム装置本体５の機能ブロック図
【図３】図１のコントローラ７の上面後方から見た斜視図
【図４】図３のコントローラ７を下面前方から見た斜視図
【図５】図３のコントローラ７の上筐体を外した状態を示す斜視図
【図６】図４のコントローラ７の下筐体を外した状態を示す斜視図
【図７】図３のコントローラ７の構成を示すブロック図
【図８】図１のコントローラ７を用いてゲーム操作するときの状態の一例を概説する図解図
【図９】図１のモニタ２に表示されるゲーム画像の一例を示す図
【図１０Ａ】プレイヤがコントローラ７を把持してテニスゲームにおけるフラットショットを行った際の、プレイヤの動きの一例を示す図
【図１０Ｂ】プレイヤがフラットショットを行った際のコントローラ７の動きの一例を示す図
【図１１Ａ】プレイヤがコントローラ７を把持してテニスゲームにおけるトップスピンショットを行った際の、プレイヤの動きの一例を示す図
【図１１Ｂ】プレイヤがトップスピンショットを行った際のコントローラ７の動きの一例を示す図
【図１２Ａ】プレイヤがコントローラ７を把持してテニスゲームにおけるスライススピンショットを行った際の、プレイヤの動きの一例を示す図
【図１２Ｂ】プレイヤがスライススピンショットを行った際のコントローラ７の動きの一例を示す図
【図１３Ａ】プレイヤがコントローラ７を把持してテニスゲームにおけるドロップショットまたはスマッシュショットを行った際の、プレイヤの動きの一例を示す図
【図１３Ｂ】プレイヤがドロップショットまたはスマッシュショットを行った際のコントローラ７の動きの一例を示す図
【図１４Ａ】プレイヤがコントローラ７を把持してテニスゲームにおけるロブショットを行った際の、プレイヤの動きの一例を示す図
【図１４Ｂ】プレイヤがロブショットを行った際のコントローラ７の動きの一例を示す図
【図１５】ゲーム装置本体５のメインメモリに記憶される主なデータおよびプログラムを示す図
【図１６】ゲーム装置本体５において実行されるゲーム処理の一例を示すフローチャート
【図１７】ゲーム装置本体５において実行されるゲーム処理の一例を示すフローチャート
【図１８】図１７におけるステップ６５のスイング判定処理の一例を示すサブルーチン
【図１９】スイング判定処理で用いられるスイング角度判定範囲の一例を示す図
【図２０】スイング判定処理で判定範囲が変化したスイング角度判定範囲の一例を示す図
【図２１】上面が上方を向いた状態から前面が上方を向く状態までコントローラ７が変化する状態の一例を示す図
【図２２】上面が上方を向いた状態から前面が上方を向く状態までコントローラ７が変化する状態の他の例を示す図
【図２３】スイング判定処理で用いられるサーブのスイング角度判定範囲の一例を示す図
【発明を実施するための形態】
【００３６】
図１を参照して、本発明の一実施形態に係るゲームプログラムを実行するゲーム装置について説明する。以下、説明を具体的にするために、当該装置の一例の据置型のゲーム装置本体５を含むゲームシステムについて説明する。なお、図１は据置型のゲーム装置３を含むゲームシステム１の外観図であり、図２はゲーム装置本体５のブロック図である。以下、当該ゲームシステム１について説明する。
【００３７】
図１において、ゲームシステム１は、表示手段の一例の家庭用テレビジョン受像機（以下、モニタと記載する）２と、当該モニタ２に接続コードを介して接続する据置型のゲーム装置３とから構成される。モニタ２は、ゲーム装置３から出力された音声信号を音声出力するためのスピーカ２ａを備える。また、ゲーム装置３は、本願発明のゲームプログラムの一例となるプログラムを記録した光ディスク４と、当該光ディスク４のゲームプログラムを実行してゲーム画面をモニタ２に表示出力させるためのコンピュータを搭載したゲーム装置本体５と、ゲーム画面に表示されたキャラクタ等を操作するゲームに必要な操作情報をゲーム装置本体５に与えるためのコントローラ７とを備えている。
【００３８】
また、ゲーム装置本体５は、無線コントローラモジュール１９（図２参照）を内蔵する。無線コントローラモジュール１９は、コントローラ７から無線送信されるデータを受信し、ゲーム装置本体５からコントローラ７へデータを送信して、コントローラ７とゲーム装置本体５とを無線通信によって接続する。さらに、ゲーム装置本体５には、当該ゲーム装置本体５に対して交換可能に用いられる情報記憶媒体の一例の光ディスク４が脱着される。
【００３９】
また、ゲーム装置本体５には、セーブデータ等のデータを固定的に記憶するバックアップメモリとして機能するフラッシュメモリ１７（図２参照）が搭載される。ゲーム装置本体５は、光ディスク４に記憶されたゲームプログラム等を実行することによって、その結果をゲーム画像としてモニタ２に表示する。また、ゲームプログラム等は、光ディスク４に限らず、フラッシュメモリ１７に予め記録されたものを実行するようにしてもよい。さらに、ゲーム装置本体５は、フラッシュメモリ１７に記憶されたセーブデータを用いて、過去に実行されたゲーム状態を再現して、ゲーム画像をモニタ２に表示することもできる。そして、ゲーム装置３のプレイヤは、モニタ２に表示されたゲーム画像を見ながら、コントローラ７を操作することによって、ゲーム進行を楽しむことができる。
【００４０】
コントローラ７は、無線コントローラモジュール１９を内蔵するゲーム装置本体５へ、例えばＢｌｕｅｔｏｏｔｈ（ブルートゥース；登録商標）の技術を用いて操作情報等の送信データを無線送信する。コントローラ７は、主にモニタ２の表示画面に表示されるプレイヤオブジェクト等を操作するための操作手段である。コントローラ７は、片手で把持可能な程度の大きさのハウジングと、当該ハウジングの表面に露出して設けられた複数個の操作ボタン（十字キーやスティック等を含む）とが設けられている。また、後述により明らかとなるが、コントローラ７は、当該コントローラ７から見た画像を撮像する撮像情報演算部７４を備えている。そして、撮像情報演算部７４の撮像対象の一例として、モニタ２の表示画面近傍に２つのＬＥＤモジュール（以下、マーカと記載する）８Ｌおよび８Ｒが設置される。これらマーカ８Ｌおよび８Ｒは、それぞれモニタ２の前方に向かって例えば赤外光を出力する。また、コントローラ７は、ゲーム装置本体５の無線コントローラモジュール１９から無線送信された送信データを通信部７５で受信して、当該送信データに応じた音や振動を発生させることもできる。
【００４１】
次に、図２を参照して、ゲーム装置本体５の内部構成について説明する。図２は、ゲーム装置本体５の構成を示すブロック図である。ゲーム装置本体５は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０、システムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）１１、外部メインメモリ１２、ＲＯＭ／ＲＴＣ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ／Ｒｅａｌ  Ｔｉｍｅ  Ｃｌｏｃｋ）１３、ディスクドライブ１４、およびＡＶ−ＩＣ（Ａｕｄｉｏ  Ｖｉｄｅｏ−Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）１５等を有する。
【００４２】
ＣＰＵ１０は、光ディスク４に記憶されたゲームプログラムを実行することによってゲーム処理を実行するものであり、ゲームプロセッサとして機能する。ＣＰＵ１０は、システムＬＳＩ１１に接続される。システムＬＳＩ１１には、ＣＰＵ１０の他、外部メインメモリ１２、ＲＯＭ／ＲＴＣ１３、ディスクドライブ１４、およびＡＶ−ＩＣ１５が接続される。システムＬＳＩ１１は、それに接続される各構成要素間のデータ転送の制御、表示すべき画像の生成、外部装置からのデータの取得等の処理を行う。なお、システムＬＳＩ１１の内部構成については、後述する。揮発性の外部メインメモリ１２は、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりするものであり、ＣＰＵ１０のワーク領域やバッファ領域として用いられる。ＲＯＭ／ＲＴＣ１３は、ゲーム装置本体５の起動用のプログラムが組み込まれるＲＯＭ（いわゆるブートＲＯＭ）と、時間をカウントするクロック回路（ＲＴＣ）とを有する。ディスクドライブ１４は、光ディスク４からプログラムデータやテクスチャデータ等を読み出し、後述する内部メインメモリ３５または外部メインメモリ１２に読み出したデータを書き込む。
【００４３】
また、システムＬＳＩ１１には、入出力プロセッサ３１、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）３２、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）３３、ＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）３４、および内部メインメモリ３５が設けられる。図示は省略するが、これらの構成要素３１〜３５は、内部バスによって互いに接続される。
【００４４】
ＧＰＵ３２は、描画手段の一部を形成し、ＣＰＵ１０からのグラフィクスコマンド（作画命令）に従って画像を生成する。ＶＲＡＭ３４は、ＧＰＵ３２がグラフィクスコマンドを実行するために必要なデータ（ポリゴンデータやテクスチャデータ等のデータ）を記憶する。画像が生成される際には、ＧＰＵ３２は、ＶＲＡＭ３４に記憶されたデータを用いて画像データを作成する。
【００４５】
ＤＳＰ３３は、オーディオプロセッサとして機能し、内部メインメモリ３５や外部メインメモリ１２に記憶されるサウンドデータや音波形（音色）データを用いて、音声データを生成する。
【００４６】
上述のように生成された画像データおよび音声データは、ＡＶ−ＩＣ１５によって読み出される。ＡＶ−ＩＣ１５は、ＡＶコネクタ１６を介して、読み出した画像データをモニタ２に出力するとともに、読み出した音声データをモニタ２に内蔵されるスピーカ２ａに出力する。これによって、画像がモニタ２に表示されるとともに音がスピーカ２ａから出力される。
【００４７】
入出力プロセッサ（Ｉ／Ｏプロセッサ）３１は、それに接続される構成要素との間でデータの送受信を実行したり、外部装置からのデータのダウンロードを実行したりする。入出力プロセッサ３１は、フラッシュメモリ１７、無線通信モジュール１８、無線コントローラモジュール１９、拡張コネクタ２０、および外部メモリカード用コネクタ２１に接続される。無線通信モジュール１８にはアンテナ２２が接続され、無線コントローラモジュール１９にはアンテナ２３が接続される。
【００４８】
入出力プロセッサ３１は、無線通信モジュール１８およびアンテナ２２を介してネットワークに接続し、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。入出力プロセッサ３１は、定期的にフラッシュメモリ１７にアクセスし、ネットワークへ送信する必要があるデータの有無を検出し、当該データが有る場合には、無線通信モジュール１８およびアンテナ２２を介して当該データをネットワークに送信する。また、入出力プロセッサ３１は、他のゲーム装置から送信されてくるデータやダウンロードサーバからダウンロードしたデータを、ネットワーク、アンテナ２２、および無線通信モジュール１８を介して受信し、受信したデータをフラッシュメモリ１７に記憶する。ＣＰＵ１０は、ゲームプログラムを実行することにより、フラッシュメモリ１７に記憶されたデータを読み出してゲームプログラムで利用する。フラッシュメモリ１７には、ゲーム装置本体５と他のゲーム装置や各種サーバとの間で送受信されるデータの他、ゲーム装置本体５を利用してプレイしたゲームのセーブデータ（ゲームの結果データまたは途中データ）が記憶されてもよい。
【００４９】
また、入出力プロセッサ３１は、アンテナ２３および無線コントローラモジュール１９を介して、コントローラ７から送信される操作データ等を受信し、内部メインメモリ３５または外部メインメモリ１２のバッファ領域に記憶（一時記憶）する。なお、内部メインメモリ３５には、外部メインメモリ１２と同様に、光ディスク４から読み出されたゲームプログラムや、フラッシュメモリ１７から読み出されたゲームプログラム等のプログラムを記憶したり、各種データを記憶したりしてもよく、ＣＰＵ１０のワーク領域やバッファ領域として用いられてもかまわない。
【００５０】
さらに、入出力プロセッサ３１には、拡張コネクタ２０および外部メモリカード用コネクタ２１が接続される。拡張コネクタ２０は、ＵＳＢやＳＣＳＩのようなインターフェースのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したり、有線の通信用コネクタを接続することによって無線通信モジュール１８に替えてネットワークとの通信を行ったりすることができる。外部メモリカード用コネクタ２１は、メモリカードのような外部記憶媒体を接続するためのコネクタである。例えば、入出力プロセッサ３１は、拡張コネクタ２０や外部メモリカード用コネクタ２１を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
【００５１】
また、ゲーム装置本体５（例えば、前部主面）には、当該ゲーム装置本体５の電源ボタン２４、ゲーム処理のリセットボタン２５、光ディスク４を脱着する投入口、およびゲーム装置本体５の投入口から光ディスク４を取り出すイジェクトボタン２６等が設けられている。電源ボタン２４およびリセットボタン２５は、システムＬＳＩ１１に接続される。電源ボタン２４がオンされると、ゲーム装置本体５の各構成要素に対して、図示しないＡＣアダプタを介して電力が供給される。リセットボタン２５が押されると、システムＬＳＩ１１は、ゲーム装置本体５の起動プログラムを再起動する。イジェクトボタン２６は、ディスクドライブ１４に接続される。イジェクトボタン２６が押されると、ディスクドライブ１４から光ディスク４が排出される。
【００５２】
図３および図４を参照して、コントローラ７について説明する。なお、図３は、コントローラ７の上面後方から見た斜視図である。図４は、コントローラ７を下面前方から見た斜視図である。
【００５３】
図３および図４において、コントローラ７は、例えばプラスチック成型によって形成されたハウジング７１を有しており、当該ハウジング７１に複数の操作部７２が設けられている。ハウジング７１は、その前後方向を長手方向とした略直方体形状を有しており、全体として大人や子供の片手で把持可能な大きさである。
【００５４】
ハウジング７１上面の中央前面側に、十字キー７２ａが設けられる。この十字キー７２ａは、十字型の４方向プッシュスイッチであり、４つの方向（前後左右）に対応する操作部分が十字の突出片にそれぞれ９０°間隔で配置される。プレイヤが十字キー７２ａのいずれかの操作部分を押下することによって前後左右いずれかの方向を選択される。例えばプレイヤが十字キー７２ａを操作することによって、仮想ゲーム世界に登場するプレイヤキャラクタ等の移動方向を指示したり、複数の選択肢から選択指示したりすることができる。
【００５５】
なお、十字キー７２ａは、上述したプレイヤの方向入力操作に応じて操作信号を出力する操作部であるが、他の態様の操作部でもかまわない。例えば、十字方向に４つのプッシュスイッチを配設し、プレイヤによって押下されたプッシュスイッチに応じて操作信号を出力する操作部を設けてもかまわない。さらに、上記４つのプッシュスイッチとは別に、上記十字方向が交わる位置にセンタスイッチを配設し、４つのプッシュスイッチとセンタスイッチとを複合した操作部を設けてもかまわない。また、ハウジング７１上面から突出した傾倒可能なスティック（いわゆる、ジョイスティック）を倒すことによって、傾倒方向に応じて操作信号を出力する操作部を十字キー７２ａの代わりに設けてもかまわない。さらに、水平移動可能な円盤状部材をスライドさせることによって、当該スライド方向に応じた操作信号を出力する操作部を、上記十字キー７２ａの代わりに設けてもかまわない。また、タッチパッドを、十字キー７２ａの代わりに設けてもかまわない。
【００５６】
ハウジング７１上面の十字キー７２ａより後面側に、複数の操作ボタン７２ｂ〜７２ｇが設けられる。操作ボタン７２ｂ〜７２ｇは、プレイヤがボタン頭部を押下することによって、それぞれの操作ボタン７２ｂ〜７２ｇに割り当てられた操作信号を出力する操作部である。例えば、操作ボタン７２ｂ〜７２ｄには、１番ボタン、２番ボタン、およびＡボタン等としての機能が割り当てられる。また、操作ボタン７２ｅ〜７２ｇには、マイナスボタン、ホームボタン、およびプラスボタン等としての機能が割り当てられる。これら操作ボタン７２ａ〜７２ｇは、ゲーム装置本体５が実行するゲームプログラムに応じてそれぞれの操作機能が割り当てられる。なお、図３に示した配置例では、操作ボタン７２ｂ〜７２ｄは、ハウジング７１上面の中央前後方向に沿って並設されている。また、操作ボタン７２ｅ〜７２ｇは、ハウジング７１上面の左右方向に沿って操作ボタン７２ｂおよび７２ｄの間に並設されている。そして、操作ボタン７２ｆは、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５７】
また、ハウジング７１上面の十字キー７２ａより前面側に、操作ボタン７２ｈが設けられる。操作ボタン７２ｈは、遠隔からゲーム装置本体５の電源をオン／オフする電源スイッチである。この操作ボタン７２ｈも、その上面がハウジング７１の上面に埋没しており、プレイヤが不意に誤って押下することのないタイプのボタンである。
【００５８】
また、ハウジング７１上面の操作ボタン７２ｃより後面側に、複数のＬＥＤ７０２が設けられる。ここで、コントローラ７は、他のコントローラ７と区別するためにコントローラ種別（番号）が設けられている。例えば、ＬＥＤ７０２は、コントローラ７に現在設定されている上記コントローラ種別をプレイヤに通知するために用いられる。具体的には、無線コントローラモジュール１９からコントローラ７へ、複数のＬＥＤ７０２のうち、上記コントローラ種別に対応するＬＥＤを点灯させるための信号が送信される。
【００５９】
また、ハウジング７１上面には、操作ボタン７２ｂおよび操作ボタン７２ｅ〜７２ｇの間に後述するスピーカ（図５に示すスピーカ７０６）からの音を外部に放出するための音抜き孔が形成されている。
【００６０】
一方、ハウジング７１下面には、凹部が形成されている。ハウジング７１下面の凹部は、プレイヤがコントローラ７の前面をマーカ８Ｌおよび８Ｒに向けて片手で把持したときに、当該プレイヤの人差し指や中指が位置するような位置に形成される。そして、上記凹部の傾斜面には、操作ボタン７２ｉが設けられる。操作ボタン７２ｉは、例えばＢボタンとして機能する操作部である。
【００６１】
また、ハウジング７１前面には、撮像情報演算部７４の一部を構成する撮像素子７４３が設けられる。ここで、撮像情報演算部７４は、コントローラ７が撮像した画像データを解析してその中で輝度が高い場所を判別してその場所の重心位置やサイズなどを検出するためのシステムであり、例えば、最大２００フレーム／秒程度のサンプリング周期であるため比較的高速なコントローラ７の動きでも追跡して解析することができる。この撮像情報演算部７４の詳細な構成については、後述する。また、ハウジング７１の後面には、コネクタ７３が設けられている。コネクタ７３は、例えばエッジコネクタであり、例えば接続ケーブルと嵌合して接続するために利用される。
【００６２】
ここで、以下の説明を具体的にするために、コントローラ７に対して設定する座標系について定義する。図３および図４に示すように、互いに直交するＸＹＺ軸をコントローラ７に対して定義する。具体的には、コントローラ７の前後方向となるハウジング７１の長手方向をＺ軸とし、コントローラ７の前面（撮像情報演算部７４が設けられている面）方向をＺ軸正方向とする。また、コントローラ７の上下方向をＹ軸とし、ハウジング７１の上面（操作ボタン７２ａが設けられた面）方向をＹ軸正方向とする。さらに、コントローラ７の左右方向をＸ軸とし、ハウジング７１の右側面（図３で表されている側面）方向をＸ軸正方向とする。
【００６３】
次に、図５および図６を参照して、コントローラ７の内部構造について説明する。なお、図５は、コントローラ７の上筐体（ハウジング７１の一部）を外した状態を後面側から見た斜視図である。図６は、コントローラ７の下筐体（ハウジング７１の一部）を外した状態を前面側から見た斜視図である。ここで、図６に示す基板７００は、図５に示す基板７００の裏面から見た斜視図となっている。
【００６４】
図５において、ハウジング７１の内部には基板７００が固設されており、当該基板７００の上主面上に操作ボタン７２ａ〜７２ｈ、加速度センサ７０１、ＬＥＤ７０２、およびアンテナ７５４等が設けられる。そして、これらは、基板７００等に形成された配線（図示せず）によってマイコン７５１等（図６、図７参照）に接続される。また、無線モジュール７５３（図７参照）およびアンテナ７５４によって、コントローラ７がワイヤレスコントローラとして機能する。なお、ハウジング７１内部には図示しない水晶振動子が設けられており、後述するマイコン７５１の基本クロックを生成する。また、基板７００の上主面上に、スピーカ７０６およびアンプ７０８が設けられる。また、加速度センサ７０１は、操作ボタン７２ｄの左側の基板７００上（つまり、基板７００の中央部ではなく周辺部）に設けられる。したがって、加速度センサ７０１は、コントローラ７の長手方向を軸とした回転に応じて、重力加速度の方向変化に加え、遠心力による成分が含まれる加速度を検出することができるので、所定の演算により、検出される加速度データからコントローラ７の動きを良好な感度でゲーム装置本体５等が判定することができる。
【００６５】
一方、図６において、基板７００の下主面上の前端縁に撮像情報演算部７４が設けられる。撮像情報演算部７４は、コントローラ７の前方から順に赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４によって構成されており、それぞれ基板７００の下主面に取り付けられる。また、基板７００の下主面上の後端縁にコネクタ７３が取り付けられる。さらに、基板７００の下主面上にサウンドＩＣ７０７およびマイコン７５１が設けられている。サウンドＩＣ７０７は、基板７００等に形成された配線によってマイコン７５１およびアンプ７０８と接続され、ゲーム装置本体５から送信されたサウンドデータに応じてアンプ７０８を介してスピーカ７０６に音声信号を出力する。
【００６６】
そして、基板７００の下主面上には、バイブレータ７０４が取り付けられる。バイブレータ７０４は、例えば振動モータやソレノイドである。バイブレータ７０４は、基板７００等に形成された配線によってマイコン７５１と接続され、ゲーム装置本体５から送信された振動データに応じてその作動をオン／オフする。バイブレータ７０４が作動することによってコントローラ７に振動が発生するので、それを把持しているプレイヤの手にその振動が伝達され、いわゆる振動対応ゲームが実現できる。ここで、バイブレータ７０４は、ハウジング７１のやや前方寄りに配置されるため、プレイヤが把持している状態において、ハウジング７１が大きく振動することになり、振動を感じやすくなる。
【００６７】
次に、図７を参照して、コントローラ７の内部構成について説明する。なお、図７は、コントローラ７の構成を示すブロック図である。
【００６８】
図７において、コントローラ７は、上述した操作部７２、撮像情報演算部７４、加速度センサ７０１、バイブレータ７０４、スピーカ７０６、サウンドＩＣ７０７、およびアンプ７０８の他に、その内部に通信部７５を備えている。
【００６９】
撮像情報演算部７４は、赤外線フィルタ７４１、レンズ７４２、撮像素子７４３、および画像処理回路７４４を含んでいる。赤外線フィルタ７４１は、コントローラ７の前方から入射する光から赤外線のみを通過させる。レンズ７４２は、赤外線フィルタ７４１を透過した赤外線を集光して撮像素子７４３へ出射する。撮像素子７４３は、例えばＣＭＯＳセンサやあるいはＣＣＤのような固体撮像素子であり、レンズ７４２が集光した赤外線を撮像する。したがって、撮像素子７４３は、赤外線フィルタ７４１を通過した赤外線だけを撮像して画像データを生成する。撮像素子７４３で生成された画像データは、画像処理回路７４４で処理される。具体的には、画像処理回路７４４は、撮像素子７４３から得られた画像データを処理して高輝度部分を検知し、それらの位置座標や面積を検出した結果を示す処理結果データを通信部７５へ出力する。なお、これらの撮像情報演算部７４は、コントローラ７のハウジング７１に固設されており、ハウジング７１自体の方向を変えることによってその撮像方向を変更することができる。
【００７０】
コントローラ７は、３軸（Ｘ、Ｙ、Ｚ軸）の加速度センサ７０１を備えていることが好ましい。この３軸の加速度センサ７０１は、３方向、すなわち、上下方向（図３に示すＹ軸）、左右方向（図３に示すＸ軸）、および前後方向（図３に示すＺ軸）で直線加速度を検知する。また、少なくとも２軸方向に沿った直線加速度をそれぞれ検知する加速度検出手段を使用してもよい。例えば、これらの加速度センサ７０１は、アナログ・デバイセズ株式会社（Ａｎａｌｏｇ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）またはＳＴマイクロエレクトロニクス社（ＳＴＭｉｃｒｏｅｌｅｃｔｒｏｎｉｃｓ  Ｎ．Ｖ．）から入手可能であるタイプのものでもよい。加速度センサ７０１は、シリコン微細加工されたＭＥＭＳ（Ｍｉｃｒｏ  Ｅｌｅｃｔｒｏ  Ｍｅｃｈａｎｉｃａｌ  Ｓｙｓｔｅｍｓ：微小電子機械システム）の技術に基づいた静電容量式（静電容量結合式）であることが好ましい。しかしながら、既存の加速度検出手段の技術（例えば、圧電方式や圧電抵抗方式）あるいは将来開発される他の適切な技術を用いて、加速度センサ７０１が提供されてもよい。
【００７１】
加速度センサ７０１に用いられるような加速度検出手段は、加速度センサ７０１の持つ各軸に対応する直線に沿った加速度（直線加速度）のみを検知することができる。つまり、加速度センサ７０１からの直接の出力は、それら３軸のそれぞれに沿った直線加速度（静的または動的）を示す信号である。このため、加速度センサ７０１は、非直線状（例えば、円弧状）の経路に沿った動き、回転、回転運動、角変位、傾斜、位置、または姿勢等の物理特性を直接検知することはできない。
【００７２】
しかしながら、加速度センサ７０１から出力される加速度の信号に基づいて、ゲーム装置のプロセッサ（例えばＣＰＵ１０）またはコントローラのプロセッサ（例えばマイコン７５１）等のコンピュータが処理を行うことによって、コントローラ７に関するさらなる情報を推測または算出（判定）することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
【００７３】
例えば、加速度センサ７０１を搭載するコントローラ７が静的な状態であることを前提としてコンピュータ側で処理する場合（すなわち、加速度センサ７０１によって検出される加速度が重力加速度のみであるとして処理する場合）、コントローラ７が現実に静的な状態であれば、検出された加速度に基づいてコントローラ７の姿勢が重力方向に対して傾いているか否か、またはどの程度傾いているかを知ることができる。具体的には、加速度センサ７０１の検出軸が鉛直下方向を向いている状態を基準としたとき、当該検出軸方向に１Ｇ（重力加速度）が作用しているか否かだけでコントローラ７が鉛直下方向に対して傾いているか否かを知ることができる。また、上記検出軸方向に作用している加速度の大きさによって、コントローラ７が鉛直下方向に対してどの程度傾いているかも知ることができる。また、多軸方向の加速度を検出可能な加速度センサ７０１の場合には、さらに各軸に対して検出された加速度の信号に対して処理を施すことによって、重力方向に対してコントローラ７がどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ７０１からの出力に基づいて、プロセッサがコントローラ７の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータを算出する処理を行うことなく、加速度センサ７０１からの出力に基づいて、おおよそのコントローラ７の傾き具合を推定するような処理としてもよい。このように、加速度センサ７０１をプロセッサと組み合わせて用いることによって、コントローラ７の傾き、姿勢、または位置を判定することができる。
【００７４】
一方、加速度センサ７０１が動的な状態であることを前提とする場合には、当該加速度センサ７０１が重力加速度成分に加えて加速度センサ７０１の動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、コントローラ７の動き方向等を知ることができる。具体的には、加速度センサ７０１を備えるコントローラ７がプレイヤの手で動的に加速されて動かされる場合に、加速度センサ７０１によって生成される加速度信号を処理することによって、コントローラ７の様々な動きおよび／または位置を算出することができる。なお、加速度センサ７０１が動的な状態であることを前提とする場合であっても、加速度センサ７０１の動きに応じた加速度を所定の処理により除去すれば、重力方向に対するコントローラ７の傾きを知ることが可能である。
【００７５】
他の実施例では、加速度センサ７０１は、信号をマイコン７５１に出力する前に内蔵の加速度検出手段から出力される加速度信号に対して所望の処理を行うための、組込み式の信号処理装置または他の種類の専用の処理装置を備えていてもよい。例えば、組込み式または専用の処理装置は、加速度センサ７０１が静的な加速度（例えば、重力加速度）を検出するためのものである場合、検知された加速度信号をそれに相当する傾斜角（あるいは、他の好ましいパラメータ）に変換するものであってもよい。加速度センサ７０１でそれぞれ検知された加速度を示すデータは、通信部７５に出力される。
【００７６】
通信部７５は、マイクロコンピュータ（Ｍｉｃｒｏ  Ｃｏｍｐｕｔｅｒ：マイコン）７５１、メモリ７５２、無線モジュール７５３、およびアンテナ７５４を含んでいる。マイコン７５１は、処理の際にメモリ７５２を記憶領域として用いながら、送信データを無線送信する無線モジュール７５３を制御する。また、マイコン７５１は、アンテナ７５４を介して無線モジュール７５３が受信したゲーム装置本体５からのデータに応じて、サウンドＩＣ７０７およびバイブレータ７０４の動作を制御する。サウンドＩＣ７０７は、通信部７５を介してゲーム装置本体５から送信されたサウンドデータ等を処理する。また、マイコン７５１は、通信部７５を介してゲーム装置本体５から送信された振動データ（例えば、バイブレータ７０４をＯＮまたはＯＦＦする信号）等に応じて、バイブレータ７０４を作動させる。
【００７７】
コントローラ７に設けられた操作部７２からの操作信号（キーデータ）、加速度センサ７０１からの３軸方向の加速度信号（Ｘ、Ｙ、およびＺ軸方向加速度データ）、および撮像情報演算部７４からの処理結果データは、マイコン７５１に出力される。マイコン７５１は、入力した各データ（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、処理結果データ）を無線コントローラモジュール１９へ送信する送信データとして一時的にメモリ７５２に格納する。ここで、通信部７５から無線コントローラモジュール１９への無線送信は、所定の周期毎に行われるが、ゲームの処理は１／６０秒を単位として行われることが一般的であるので、それよりも短い周期で送信を行うことが必要となる。具体的には、ゲームの処理単位は１６．７ｍｓ（１／６０秒）であり、ブルートゥース（登録商標）で構成される通信部７５の送信間隔は５ｍｓである。マイコン７５１は、無線コントローラモジュール１９への送信タイミングが到来すると、メモリ７５２に格納されている送信データを一連の操作情報として出力し、無線モジュール７５３へ出力する。そして、無線モジュール７５３は、例えばブルートゥース（登録商標）の技術を用いて、操作情報を示す電波信号を所定周波数の搬送波を用いてアンテナ７５４から放射する。つまり、コントローラ７に設けられた操作部７２からのキーデータ、加速度センサ７０１からのＸ、Ｙ、およびＺ軸方向加速度データ、および撮像情報演算部７４からの処理結果データがコントローラ７から送信される。そして、ゲーム装置本体５の無線コントローラモジュール１９でその電波信号を受信し、ゲーム装置本体５で当該電波信号を復調や復号することによって、一連の操作情報（キーデータ、Ｘ、Ｙ、およびＺ軸方向加速度データ、および処理結果データ）を取得する。そして、ゲーム装置本体５のＣＰＵ１０は、取得した操作情報とゲームプログラムとに基づいて、ゲーム処理を行う。なお、ブルートゥース（登録商標）の技術を用いて通信部７５を構成する場合、通信部７５は、他のデバイスから無線送信された送信データを受信する機能も備えることができる。
【００７８】
次に、ゲーム装置本体５が行う具体的な処理を説明する前に、図８〜図１４を用いてゲーム装置本体５で行うゲームの概要について説明する。図８は、コントローラ７を用いてゲーム操作するときの状態の一例を概説する図解図である。図９は、モニタ２に表示されるゲーム画像の一例を示す図である。図１０Ａは、プレイヤがコントローラ７を把持してテニスゲームにおけるフラットショットを行った際の、プレイヤの動きの一例を示す図である。図１０Ｂは、プレイヤがフラットショットを行った際のコントローラ７の動きの一例を示す図である。図１１Ａは、プレイヤがコントローラ７を把持してテニスゲームにおけるトップスピンショットを行った際の、プレイヤの動きの一例を示す図である。図１１Ｂは、プレイヤがトップスピンショットを行った際のコントローラ７の動きの一例を示す図である。図１２Ａは、プレイヤがコントローラ７を把持してテニスゲームにおけるスライススピンショットを行った際の、プレイヤの動きの一例を示す図である。図１２Ｂは、プレイヤがスライススピンショットを行った際のコントローラ７の動きの一例を示す図である。図１３Ａは、プレイヤがコントローラ７を把持してテニスゲームにおけるドロップショットまたはスマッシュショットを行った際の、プレイヤの動きの一例を示す図である。図１３Ｂは、プレイヤがドロップショットまたはスマッシュショットを行った際のコントローラ７の動きの一例を示す図である。図１４Ａは、プレイヤがコントローラ７を把持してテニスゲームにおけるロブショットを行った際の、プレイヤの動きの一例を示す図である。図１４Ｂは、プレイヤがロブショットを行った際のコントローラ７の動きの一例を示す図である。
【００７９】
図８に示すように、コントローラ７は、全体として大人や子供の片手で把持可能な大きさである。そして、ゲームシステム１でコントローラ７を用いてゲームをプレイするためには、コントローラ７の前面がプレイヤの前方方向に向くようにプレイヤが一方の手（例えば右手）でコントローラ７を把持する。例えば、プレイヤは、親指をコントローラ７の左側面に添え、手のひらをコントローラ７の上面に添え、人差し指、中指、薬指、小指をコントローラ７下面に添えて、コントローラ７の前面がプレイヤの前方方向に露出させて、あたかもテニスラケットを握っているようにコントローラ７を把持する。なお、後述する処理例においては、コントローラ７の上面が上方に向いた状態でプレイヤがコントローラ７を把持して操作する例を用いて説明する。
【００８０】
プレイヤは、モニタ２で表現されているゲーム画像に合わせて、コントローラ７を把持している腕を振って（スイング操作）、コントローラ７から操作情報（具体的には、Ｘ、Ｙ、およびＺ軸方向加速度データ）をゲーム装置本体５に与える。プレイヤは、様々な方向にコントローラ７を振ることによって、コントローラ７から様々なＸ、Ｙ、およびＺ軸方向加速度データをゲーム装置本体５に与えることができる。
【００８１】
図９に示すように、コントローラ７から受信したＸ、Ｙ、およびＺ軸方向加速度データに応じて、モニタ２にテニスゲーム等が表現される。具体的には、仮想ゲーム空間に設定されたテニスコートが３次元のゲーム画像としてモニタ２に表現される。そして、仮想ゲーム空間に、プレイヤが操作するプレイヤキャラクタＰＣ、当該プレイヤキャラクタＰＣの相手選手となる相手キャラクタＥＣ、およびテニスコート上で移動するテニスボールを示すボールキャラクタＢＣ等が配置されてモニタ２に表現される。以下、説明を具体的にするためにテニスゲームを表現するゲームプログラムが光ディスク４に記憶されており、ＣＰＵ１０がテニスゲーム処理の中でコントローラ７のスイング種別を判定するためのスイング判定処理について説明する。
【００８２】
プレイヤキャラクタＰＣは、テニスラケットを持っており、仮想ゲーム空間に設定されたテニスコート上に配置される。そして、プレイヤがコントローラ７を振る動作に応じて、プレイヤキャラクタＰＣがテニスラケットを振るアニメーションが表現される。そして、到来するボールキャラクタＢＣをプレイヤキャラクタＰＣがテニスラケットで打ち返した場合、当該テニスラケットで打撃されたボールキャラクタＢＣが相手キャラクタＥＣ側のコートに向かって飛んでいく。つまり、プレイヤがコントローラ７を把持して振る動作を行うことによって、同様にテニスラケットを振る動作をプレイヤキャラクタＰＣが表現することになり、プレイヤはあたかもテニスラケットを振ってテニスをしているような仮想的なスポーツゲームを体験できる。
【００８３】
例えば、プレイヤキャラクタＰＣが右利きのテニスプレイヤを表現している場合、プレイヤがコントローラ７を把持して右から左へスイングすることによって、プレイヤキャラクタＰＣがフォアハンドでテニスラケットをスイングする。一方、プレイヤがコントローラ７を把持して左から右へスイングすることによって、プレイヤキャラクタＰＣがバックハンドでテニスラケットをスイングする。つまり、プレイヤがコントローラ７を振る方向に応じて、プレイヤキャラクタＰＣが同じ方向にテニスラケットをスイングする動作を行う。
【００８４】
また、プレイヤがコントローラ７を振るタイミングおよび速度に応じて、プレイヤキャラクタＰＣがスイングしたテニスラケットで打撃されたボールキャラクタＢＣが飛ぶ方向や速度が変化する。また、プレイヤがコントローラ７を振る方向に応じて、ボールキャラクタＢＣを打撃するショット種別が変化する。後述により明らかとなるが、これらの動作は、コントローラ７から出力されるＸ、Ｙ、およびＺ軸方向加速度データによって区別することが可能であり、プレイヤがコントローラ７に加えた様々な動作を反映したテニスゲームを表現することができる。以下、プレイヤが右手でコントローラ７を把持してスイングする場合において、判定されるスイング種別の例について説明する。
【００８５】
例えば、図１０Ａに示すように、プレイヤがコントローラ７を右から左へ水平にスイングした場合、テニスゲームにおけるフラットショットが選択され、仮想ゲーム空間においてもフラットショットでプレイヤキャラクタＰＣがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタＰＣがフラットショットして打撃されたボールキャラクタＢＣは、真っ直ぐの軌道で打ち返される。ここで、プレイヤが右から左へ水平にコントローラ７をスイングした場合、コントローラ７は、プレイヤに振られることによってＸ軸負方向に移動する（図１０Ｂ参照）。この場合、スイングで加速中においては、コントローラ７にＺ軸正方向への遠心力と共にＸ軸負方向への加速度が生じる。したがって、コントローラ７から出力されるＸ、Ｙ、およびＺ軸方向加速度データが示すＸ−Ｙ軸成分の加速度において、Ｘ軸負方向への加速度が生じた場合、プレイヤがコントローラ７を右から左へ水平にスイングしたとしてフラットショットが選択されたと判定することができる。
【００８６】
また、図１１Ａに示すように、プレイヤがコントローラ７を右下から左上へスイングした場合、テニスゲームにおけるトップスピンショットが選択され、仮想ゲーム空間においてもトップスピンショットでプレイヤキャラクタＰＣがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタＰＣがトップスピンショットして打撃されたボールキャラクタＢＣは、高い軌道のトップスピンで打ち返される。ここで、プレイヤが右下から左上へコントローラ７をスイングした場合、コントローラ７は、プレイヤに振られることによってＸ軸負方向とＹ軸正方向との間の方向に移動する（図１１Ｂ参照）。この場合、スイングで加速中においては、コントローラ７にＺ軸正方向への遠心力と共にＸ軸負方向とＹ軸正方向との間の方向への加速度が生じる。したがって、コントローラ７から出力されるＸ、Ｙ、およびＺ軸方向加速度データが示すＸ−Ｙ軸成分の加速度において、Ｘ軸負方向とＹ軸正方向との間の方向への加速度が生じた場合、プレイヤがコントローラ７を右下から左上へスイングとしてトップスピンショットが選択されたと判定することができる。
【００８７】
また、図１２Ａに示すように、プレイヤがコントローラ７を右上から左下へスイングした場合、テニスゲームにおけるスライススピンショットが選択され、仮想ゲーム空間においてもスライススピンショットでプレイヤキャラクタＰＣがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタＰＣがスライススピンショットして打撃されたボールキャラクタＢＣは、低い軌道のスライススピンで打ち返される。ここで、プレイヤが右上から左下へコントローラ７をスイングした場合、コントローラ７は、プレイヤに振られることによってＸ軸負方向とＹ軸負方向との間の方向に移動する（図１２Ｂ参照）。この場合、スイングで加速中においては、コントローラ７にＺ軸正方向への遠心力と共にＸ軸負方向とＹ軸負方向との間の方向への加速度が生じる。したがって、コントローラ７から出力されるＸ、Ｙ、およびＺ軸方向加速度データが示すＸ−Ｙ軸成分の加速度において、Ｘ軸負方向とＹ軸負方向との間の方向への加速度が生じた場合、プレイヤがコントローラ７を右上から左下へスイングとしてスライススピンショットが選択されたと判定することができる。
【００８８】
また、図１３Ａに示すように、プレイヤがコントローラ７を上から下へ振り下ろすスイングをした場合、テニスゲームにおけるドロップショットまたはスマッシュショットが選択され、仮想ゲーム空間においてもドロップショットまたはスマッシュショットでプレイヤキャラクタＰＣがテニスラケットをスイングする動作を行う。なお、ドロップショットおよびスマッシュショットの何れが選択されるかについては、スイングした際のゲーム状況に応じて決定される。そして、仮想ゲーム空間においてプレイヤキャラクタＰＣがドロップショットして打撃されたボールキャラクタＢＣは、テニスコート上のネット近くに落下するように打ち返される。また、仮想ゲーム空間においてプレイヤキャラクタＰＣがスマッシュショットして打撃されたボールキャラクタＢＣは、打ち下ろす軌道でスマッシュされて打ち返される。ここで、プレイヤが上から下へコントローラ７を振り下ろすスイングをした場合、コントローラ７は、プレイヤに振られることによってＹ軸負方向に移動する（図１３Ｂ参照）。この場合、スイングで加速中においては、コントローラ７にＺ軸正方向への遠心力と共にＹ軸負方向への加速度が生じる。したがって、コントローラ７から出力されるＸ、Ｙ、およびＺ軸方向加速度データが示すＸ−Ｙ軸成分の加速度において、Ｙ軸負方向への加速度が生じた場合、プレイヤがコントローラ７を上から下へ振り下ろすスイングをしたとしてドロップショットまたはスマッシュショットが選択されたと判定することができる。
【００８９】
さらに、図１４Ａに示すように、プレイヤがコントローラ７を下から上へ振り上げるスイングをした場合、テニスゲームにおけるロブショットが選択され、仮想ゲーム空間においてもロブショットでプレイヤキャラクタＰＣがテニスラケットをスイングする動作を行う。そして、仮想ゲーム空間においてプレイヤキャラクタＰＣがロブショットして打撃されたボールキャラクタＢＣは、非常に高い軌道で相手コートの奥に落下するロブで打ち返される。ここで、プレイヤが下から上へコントローラ７を振り上げるスイングをした場合、コントローラ７は、プレイヤに振られることによってＹ軸正方向に移動する（図１４Ｂ参照）。この場合、スイングで加速中においては、コントローラ７にＺ軸正方向への遠心力と共にＹ軸正方向への加速度が生じる。したがって、コントローラ７から出力されるＸ、Ｙ、およびＺ軸方向加速度データが示すＸ−Ｙ軸成分の加速度において、Ｙ軸正方向への加速度が生じた場合、プレイヤがコントローラ７を下から上へ振り上げるスイングをしたとしてロブショットが選択されたと判定することができる。
【００９０】
ここで、トップスピンショットでスイングする場合（図１１Ａ参照）と、ロブショットでスイングする場合（図１４Ａ）とは、何れもプレイヤがコントローラ７を振り上げる方向のスイングとなる。しかしながら、現実のテニスゲームにおいてプレイヤがトップスピンショットでラケットを振り上げる場合とロブショットでラケットを振り上げる場合とは、振り上げる強さや振り上げ方が異なることが多い。後述により明らかとなるが、本実施形態では、プレイヤがコントローラ７を振り上げる強さや振り上げ方に応じて、トップスピンショットとロブショットとを区別する判定基準を変更して、スイング種別の判定をより正確に行っている。
【００９１】
次に、ゲームシステム１において行われるゲーム処理の詳細を説明する。まず、図１５を参照して、ゲーム処理において用いられる主なデータについて説明する。なお、図１５は、ゲーム装置本体５の外部メインメモリ１２および／または内部メインメモリ３５（以下、２つのメインメモリを総称して、単にメインメモリと記載する）に記憶される主なデータおよびプログラムを示す図である。
【００９２】
図１５に示すように、メインメモリのデータ記憶領域には、加速度リングバッファＤａ、加速度の大きさデータＤｂ、スイング判定フラグデータＤｃ、加速度ベクトルデータＤｄ、加算ベクトルデータＤｅ、平均値データＤｆ、スイング角度データＤｇ、スイング判定範囲データＤｈ、スイング種別データＤｉ、および画像データＤｉ等が記憶される。なお、メインメモリには、図１５に示す情報に含まれるデータの他、ゲームに登場するプレイヤキャラクタＰＣ以外の他のキャラクタ（例えば、相手キャラクタＥＣ）等に関するデータ（位置データ等）等、ゲーム処理に必要なデータが記憶される。また、メインメモリのプログラム記憶領域には、ゲームプログラムを構成する各種プログラム群Ｐａが記憶される。
【００９３】
加速度リングバッファＤａは、コントローラ７に生じた加速度を示すデータであり、コントローラ７から送信データとして送信されてくる一連の操作情報に含まれる加速度データの履歴が格納される。この加速度リングバッファＤａには、加速度センサ７０１がＸ軸成分に対して検出した加速度の履歴ｈ０〜ｈ４（すなわち、Ｘ軸方向に対する５回の加速度の履歴）を示すＸ軸方向加速度データＤａ１、Ｙ軸成分に対して検出した加速度の履歴ｈ０〜ｈ４（すなわち、Ｙ軸方向に対する５回の加速度の履歴）を示すＹ軸方向加速度データＤａ２、およびＺ軸成分に対して検出した加速度の履歴ｈ０〜ｈ４（すなわち、Ｚ軸方向に対する５回の加速度の履歴）を示すＺ軸方向加速度データＤａ３が含まれる。なお、ゲーム装置本体５に備える無線コントローラモジュール１９は、コントローラ７から所定周期（例えば、１／２００秒毎）に送信される操作情報に含まれる加速度データを受信し、無線コントローラモジュール１９に備える図示しないバッファに蓄えられる。その後、上記バッファに蓄えられた加速度データがゲーム処理周期である１フレーム毎（例えば、１／６０秒毎）に読み出されて、メインメモリの加速度リングバッファＤａが更新される。
【００９４】
このとき、操作情報を受信する周期と処理周期とが異なるために、上記バッファには複数の時点に受信した操作情報が記述されていることになる。後述する処理の説明においては、後述する各ステップにおいて、複数の時点に受信した操作情報のうち最新の操作情報のみを常に用いて処理して、次のステップに進める態様を用いる。
【００９５】
また、後述する処理フローでは、加速度データＤａがゲーム処理周期である１フレーム毎に更新される例を用いて説明するが、他の処理周期で更新されてもかまわない。例えば、コントローラ７からの送信周期毎に加速度リングバッファＤａを更新し、当該更新された加速度リングバッファＤａをゲーム処理周期毎に利用する態様でもかまわない。この場合、加速度リングバッファＤａに記憶する加速度データＤａ１〜Ｄａ３を更新する周期と、ゲーム処理周期とが異なることになる。
【００９６】
加速度の大きさデータＤｂは、コントローラ７に作用している加速度の大きさａｃｃｖを示すデータが格納される。スイング判定フラグデータＤｃは、プレイヤがコントローラ７をスイングしたと判定された場合にＯＮ（オン）に設定されるスイング判定フラグＳＷｆｒｇを示すデータが格納される。
【００９７】
加速度ベクトルデータＤｄは、Ｘ軸方向加速度データＤａ１、Ｙ軸方向加速度データＤａ２、およびＺ軸方向加速度データＤａ３が示す加速度を用いて、履歴ｈ０〜ｈ４毎に算出される加速度ベクトルの履歴を示すデータであり、コントローラ７に作用している加速度の方向および大きさを示すデータが格納される。加算ベクトルデータＤｅは、加速度ベクトルデータＤｄが示す加速度ベクトルそれぞれから重力成分を除去して符号を調整した後、それぞれの加速度ベクトルを加算（累積）した加算ベクトルを示すデータが格納される。平均値データＤｆは、加速度ベクトルデータＤｄが示す加速度ベクトルそれぞれの大きさの平均値を示すデータが格納される。
【００９８】
スイング角度データＤｇは、コントローラ７がスイングされた角度を示すデータであり、コントローラ７に設定されたＸ−Ｙ軸平面においてＸ軸正方向を基準としたスイング角度を示すデータが格納される。スイング判定範囲データＤｈは、上記スイング角度を用いてスイング種別を判定するためのデータであり、当該スイング種別毎のスイング角度判定範囲が設定されたデータが格納される。なお、スイング判定範囲データＤｈに格納されるスイング種別毎のスイング角度判定範囲の設定例については、後述する。スイング種別データＤｉは、上記スイング角度を用いて判定されたスイング種別を示すデータが格納される。
【００９９】
画像データＤｊは、プレイヤキャラクタ画像データＤｊ１、ボールキャラクタ画像データＤｊ２、および背景画像データＤｊ３等を含んでいる。プレイヤキャラクタ画像データＤｊ１は、仮想ゲーム空間にプレイヤキャラクタＰＣを配置してゲーム画像を生成するためのデータである。ボールキャラクタ画像データＤｊ２は、仮想ゲーム空間にボールキャラクタＢＣを配置してゲーム画像を生成するためのデータである。背景画像データＤｊ３は、仮想ゲーム空間に背景を配置してゲーム画像を生成するためのデータである。
【０１００】
次に、図１６〜図１８を参照して、ゲーム装置本体５において行われるゲーム処理の詳細を説明する。なお、図１６および図１７は、ゲーム装置本体５において実行されるゲーム処理の一例を示すフローチャートである。図１８は、図１７におけるステップ６５のスイング判定処理の一例を示すサブルーチンである。ここで、図１６〜図１８に示すフローチャートにおいては、ゲーム処理の一例としてテニスゲームを用いた動作を説明する。また、図１６〜図１８に示すフローチャートにおいては、ゲーム処理のうち、プレイヤがコントローラ７をスイングすることに応じて、プレイヤキャラクタＰＣがボールキャラクタＢＣをショットする処理について主に説明し、本願発明と直接関連しない他のゲーム処理については詳細な説明を省略する。また、図１６〜図１８では、ＣＰＵ１０が実行する各ステップを「Ｓ」と略称する。
【０１０１】
ゲーム装置本体５の電源が投入されると、ゲーム装置本体５のＣＰＵ１０は、ＲＯＭ／ＲＴＣ１３に記憶されている起動用のプログラムを実行し、これによってメインメモリ等の各ユニットが初期化される。そして、光ディスク４に記憶されたゲームプログラムがメインメモリに読み込まれ、ＣＰＵ１０によって当該ゲームプログラムの実行が開始される。図１６〜図１８に示すフローチャートは、以上の処理が完了した後に行われるゲーム処理を示すフローチャートである。
【０１０２】
図１６において、ＣＰＵ１０は、ゲーム処理の初期化を行い（ステップ４１）、次のステップに処理を進める。例えば、上記ステップ４０におけるゲーム処理初期化では、仮想ゲーム空間の設定やプレイヤキャラクタＰＣおよび相手キャラクタＥＣ等の初期設定を行う。また、上記ステップ４１におけるゲーム処理初期化では、以降のゲーム処理で用いる各パラメータを初期化する。例えば、ＣＰＵ１０は、上述したメインメモリに格納される各データＤａ〜Ｄｉが示すパラメータをそれぞれ初期値に設定する。さらに、上記ステップ４１におけるゲーム処理初期化では、コントローラ７を把持してプレイするプレイヤの利き手、すなわち右手および左手の何れの手でコントローラ７を把持するかを設定する。なお、利き手をどちらに設定するかは、予めプレイヤによって選択しておくようにして、選択されている方の手に設定するようにすればよい。
【０１０３】
次に、ＣＰＵ１０は、スイング判定フラグデータＤｃに格納されたスイング判定フラグＳＷｆｒｇがＯＮ（オン）に設定されているか否かを判断する（ステップ４２）。そして、ＣＰＵ１０は、スイング判定フラグＳＷｆｒｇがＯＦＦ（オフ）に設定されている場合、次のステップ４３に処理を進める。一方、ＣＰＵ１０は、スイング判定フラグＳＷｆｒｇがＯＮに設定されている場合、次のステップ６１（図１７参照）に処理を進める。
【０１０４】
ステップ４３において、ＣＰＵ１０は、コントローラ７から加速度を示すデータを取得する。そして、ＣＰＵ１０は、上記ステップ４３で取得した加速度を示すデータを用いて、加速度リングバッファＤａを更新し（ステップ４４）、次のステップに処理を進める。例えば、ＣＰＵ１０は、コントローラ７から受信した操作情報を取得し、当該操作情報に含まれる最新の加速度データが示す加速度を用いて加速度リングバッファＤａに格納する。具体的には、ＣＰＵ１０は、加速度リングバッファＤａに格納された加速度の履歴ｈ０〜ｈ４をそれぞれ時系列順に順送りして更新、すなわち加速度の履歴ｈ４を消去して、履歴ｈ３を履歴ｈ４に、履歴ｈ２を履歴ｈ３に、履歴ｈ１を履歴ｈ２に、履歴ｈ０を履歴ｈ１にそれぞれ順送りして更新する。そして、ＣＰＵ１０は、コントローラ７から受信した最新の操作情報に含まれるＸ軸方向の加速度データが示す加速度を用いて、Ｘ軸方向加速度データＤａ１の履歴ｈ０を更新する。また、ＣＰＵ１０は、最新の操作情報に含まれるＹ軸方向の加速度データが示す加速度を用いて、Ｙ軸方向加速度データＤａ２の履歴ｈ０を更新する。そして、ＣＰＵ１０は、最新の操作情報に含まれるＺ軸方向の加速度データが示す加速度を用いて、Ｚ軸方向加速度データＤａ３の履歴ｈ０を更新する。
【０１０５】
次に、ＣＰＵ１０は、当該フローチャートで用いる一次変数であるカウント値Ｃを０に設定し（ステップ４５）、次のステップに処理を進める。
【０１０６】
次に、ＣＰＵ１０は、プレイヤキャラクタＰＣがスイング可能な状態であるか否かを判断する（ステップ４６）。例えば、ＣＰＵ１０は、プレイヤキャラクタＰＣが仮想ゲーム空間において既にスイング動作中であったり、それ以外の動作や処理の途中であったりしてスイングできない状況等の場合、プレイヤキャラクタＰＣが新たにスイングを開始することは不可能であると判断する。そして、ＣＰＵ１０は、プレイヤキャラクタＰＣがスイング可能である場合、次のステップ４７に処理を進める。一方、ＣＰＵ１０は、プレイヤキャラクタＰＣがスイング不可能である場合、次のステップ５１に処理を進める。
【０１０７】
ステップ４７において、ＣＰＵ１０は、上記ステップ４３で取得した加速度の大きさａｃｃｖを算出し、次のステップに処理を進める。例えば、ＣＰＵ１０は、Ｘ軸方向加速度データＤａ１の履歴ｈ０に格納されたＸ軸方向加速度、Ｙ軸方向加速度データＤａ２の履歴ｈ０に格納されたＹ軸方向加速度、およびＺ軸方向加速度データＤａ３の履歴ｈ０に格納されたＺ軸加速度を用いて、それぞれの方向の加速度成分を有する加速度ベクトルを算出し、当該加速度ベクトルの大きさを加速度の大きさａｃｃｖとして算出する。そして、ＣＰＵ１０は、算出された加速度の大きさａｃｃｖを用いて加速度の大きさデータＤｂを更新する。
【０１０８】
次に、ＣＰＵ１０は、上記ステップ４７で算出された加速度の大きさａｃｃｖが閾値Ｔａ以上か否かを判断する（ステップ４８）。ここで、閾値Ｔａは、プレイヤがコントローラ７をスイングしたか否かを判定するために予め定められた値であり、例えば閾値Ｔａ＝３．５Ｇ（１Ｇ≒９．８ｍ／ｓ2）で設定される。なお、閾値Ｔａの値は、加速度センサ７０１の特性やゲームの設定等に応じて、適宜設定すればよい。そして、ＣＰＵ１０は、加速度の大きさａｃｃｖが閾値Ｔａ以上の場合、プレイヤがコントローラ７をスイングしたと判定して、次のステップ４９に処理を進める。一方、ＣＰＵ１０は、加速度の大きさａｃｃｖが閾値Ｔａ未満の場合、次のステップ５１に処理を進める。
【０１０９】
ステップ４９において、プレイヤがコントローラ７をスイングしたと判定した場合、ＣＰＵ１０は、カウント値Ｃを５に設定する。そして、ＣＰＵ１０は、スイング判定フラグデータＤｃに格納されたスイング判定フラグＳＷｆｒｇをＯＮに設定して（ステップ５０）、次のステップ５１に処理を進める。
【０１１０】
ステップ５１において、ＣＰＵ１０は、ゲーム表示処理を行い、次のステップに処理を進める。例えば、上記ステップ５１において、ＣＰＵ１０は、スイング種別データＤｉが示すスイング種別や平均値データＤｆが示す平均値によって設定したスイング強さに応じて、プレイヤキャラクタＰＣをスイングさせてボールキャラクタＢＣを打撃する処理を行う。また、ＣＰＵ１０は、プレイヤキャラクタＰＣによって打撃された後にボールキャラクタＢＣが相手コートへ飛んでいく様子等、ショット後にボールキャラクタＢＣを移動させる処理を行う。また、ＣＰＵ１０は、仮想ゲーム空間においてプレイヤキャラクタＰＣを移動させる等、他のゲーム処理を行う。そして、ＣＰＵ１０は、これらのゲーム処理に応じたゲーム画像をモニタ２に表示する表示処理を行って、次のステップに処理を進める。
【０１１１】
次に、ＣＰＵ１０は、ゲームを終了するか否かを判断する（ステップ５２）。ゲームを終了する条件としては、例えば、ゲームオーバーとなる条件が満たされたことや、プレイヤがゲームを終了する操作を行ったこと等がある。ＣＰＵ１０は、ゲームを終了しない場合に上記ステップ４２に戻って処理を繰り返し、ゲームを終了する場合に当該フローチャートによる処理を終了する。
【０１１２】
図１７を参照して、上記ステップ４２においてスイング判定フラグＳＷｆｒｇがＯＮに設定されている場合、ＣＰＵ１０は、現在設定されているカウント値Ｃから１を減算して新たなカウント値Ｃを設定し（ステップ６１）、カウント値Ｃが０となったか否かを判断する（ステップ６２）。そして、ＣＰＵ１０は、カウント値Ｃが０である場合、次のステップ６５に処理を進める。一方、ＣＰＵ１０は、カウント値Ｃが０でない、すなわちカウント値Ｃ＝１〜４である場合、次のステップ６３に処理を進める。
【０１１３】
ステップ６３において、ＣＰＵ１０は、コントローラ７から加速度を示すデータを取得する。そして、ＣＰＵ１０は、上記ステップ６３で取得した加速度を示すデータを用いて、加速度リングバッファＤａを更新し（ステップ６４）、次のステップ５１（図１６参照）に処理を進める。なお、上記ステップ６３およびステップ６４の処理については、上述したステップ４３およびステップ４４の処理を同様であるため、詳細な説明を省略する。なお、上記ステップ６３およびステップ６４の処理は、上記ステップ４８でコントローラ７がスイングされたと判定された後、カウント値Ｃが０となるまで続けられて、スイング判定処理（ステップ６５）に移行する。すなわち、上記ステップ６３およびステップ６４の処理は、コントローラ７がスイングされたと判定された後に４回繰り返されることになる。したがって、加速度リングバッファＤａに格納された加速度の履歴ｈ０〜ｈ４には、コントローラ７がスイングされたと判定された加速度データを含めて、以降４回分の加速度データが格納されて、スイング判定処理に移行することになる。
【０１１４】
一方、ステップ６５において、ＣＰＵ１０は、スイング判定処理を行い、次のステップ５１（図１６参照）に処理を進める。以下、図１８を参照して、上記ステップ６５で行うスイング判定処理の詳細な動作について説明する。
【０１１５】
図１８において、ＣＰＵ１０は、初期化処理を行い（ステップ８１）、次のステップに処理を進める。例えば、上記ステップ８１における初期化処理では、以降のスイング判定処理に用いる各パラメータを初期化する。例えば、ＣＰＵ１０は、上述したメインメモリに格納される各データＤｄ〜Ｄｉが示すパラメータをそれぞれ初期値に設定する。
【０１１６】
次に、ＣＰＵ１０は、加速度リングバッファＤａに格納された加速度の履歴ｈ０〜ｈ４を参照して、エラー処理を行い（ステップ８２）、次のステップに処理を進める。例えば、ＣＰＵ１０は、加速度の履歴ｈ０〜ｈ４を参照して、履歴ｈ０〜ｈ４の中にエラーデータが含まれているか否かを探索する。具体的には、履歴ｈ０〜ｈ４の中に、他の履歴と比較して正負が反対となるような反対方向の加速度を示すデータが含まれている場合、ＣＰＵ１０は、当該データをエラーデータと判定する。そして、ＣＰＵ１０は、エラーデータをコントローラ７が静止状態を想定した加速度データ（例えば、Ｘ軸方向加速度およびＺ軸方向加速度が共に０で、Ｙ軸方向加速度が−１Ｇ）に変更する。
【０１１７】
次に、ＣＰＵ１０は、加速度リングバッファＤａに格納された加速度の履歴ｈ０〜ｈ４それぞれの加速度ベクトルを算出し（ステップ８３）、次のステップに処理を進める。例えば、ＣＰＵ１０は、Ｘ軸方向加速度データＤａ１の履歴ｈ０〜ｈ４にそれぞれ格納されたＸ軸方向加速度、Ｙ軸方向加速度データＤａ２の履歴ｈ０〜ｈ４にそれぞれ格納されたＹ軸方向加速度、およびＺ軸方向加速度データＤａ３の履歴ｈ０〜ｈ４にそれぞれ格納されたＺ軸加速度を用いて、それぞれの方向の加速度成分を有する履歴ｈ０〜ｈ４毎の加速度ベクトルの履歴（すなわち、過去５フレーム分の加速度ベクトル）を算出する。そして、ＣＰＵ１０は、算出されたそれぞれの加速度ベクトルの履歴を用いて加速度ベクトルデータＤｄを更新する。
【０１１８】
次に、ＣＰＵ１０は、上記ステップ８３で算出された各加速度ベクトルから重力成分を除去し、各加速度ベクトルの符号を調整して（ステップ８４）、次のステップに処理を進める。ここで、加速度センサ７０１の特性として、加速度センサ７０１から出力されるデータが、加速度センサ７０１に加えられる加速度（つまり実際に加速する方向）とは真逆方向のデータが出力されるものとする。すなわち、加速度センサ７０１の加速による慣性力に応じたデータが加速度データとして加速度センサ７０１から出力される。この場合、コントローラ７静止時に加速度センサ７０１に加わる重力加速度は、重力方向と同じ方向の加速度データとして出力されることになる。コントローラ７の上面が上方に向いた状態でプレイヤがコントローラ７を把持して操作することが前提の場合、コントローラ７にはＹ軸負方向の重力加速度（１Ｇ）が生じている。この場合、ＣＰＵ１０は、上記ステップ８３で算出された各加速度ベクトルのＹ軸成分に、それぞれ１Ｇを加算することによって重力成分を除去することができる。そして、ＣＰＵ１０は、上記ステップ８３で算出された各加速度ベクトルの方向が、それぞれコントローラ７が動いている方向（すなわち、実際に加速している方向）となるように各加速度ベクトルの符号を調整する。上述したように加速度センサ７０１に加えられる加速度とは真逆方向を向いたデータを加速度センサ７０１が出力している場合、ＣＰＵ１０は、各加速度ベクトルの方向が真逆となるように符号を調整し、実際に加速している方向を加速度ベクトルとして扱うこととする。そして、ＣＰＵ１０は、重力成分を除去して符号を調整した各加速度ベクトルを用いて加速度ベクトルデータＤｄを更新する。
【０１１９】
次に、ＣＰＵ１０は、上記ステップ８４で重力成分を除去して符号を調整した各加速度ベクトルを全て加算（累積）して加算ベクトルを算出し、算出した加算ベクトルを用いて加算ベクトルデータＤｅを更新する（ステップ８５）。また、ＣＰＵ１０は、上記ステップ８４で重力成分を除去して符号を調整した各加速度ベクトルの大きさの平均値を算出し、算出した平均値を用いて平均値データＤｆを更新して（ステップ８６）、次のステップに処理を進める。
【０１２０】
次に、ＣＰＵ１０は、上記ステップ８５で算出した加算ベクトルのＸ−Ｙ軸成分を用いて、スイング角度θを算出し（ステップ８７）、次のステップに処理を進める。例えば、ＣＰＵ１０は、Ｘ軸正方向をスイング角度θ＝０°およびＹ軸正方向をスイング角度θ＝９０°として、加算ベクトルのＸ−Ｙ軸成分の方向が示すスイング角度θを算出し、算出されたスイング角度θを用いてスイング角度データＤｇを更新する。
【０１２１】
次に、ＣＰＵ１０は、スイング判定範囲データＤｈが示すスイング種別毎のスイング角度判定範囲を用いて、上記ステップ８７で算出されたスイング角度θのスイング種別を設定し（ステップ８８）、次のステップに処理を進める。
【０１２２】
例えば、図１９に示すように、スイング判定範囲データＤｈには、「フラットショット」のスイング角度判定範囲、「トップスピンショット」のスイング角度判定範囲、「ロブショット」のスイング角度判定範囲、「スライススピンショット」のスイング角度判定範囲、「スライススピンショット」のスイング角度判定範囲、および「ドロップショット」のスイング角度判定範囲がそれぞれ設定されている。具体的には、「フラットショット」のスイング角度判定範囲が、スイング角度θ＝−２２．５°〜２２．５°、１６５°〜１８０°、および−１６５°〜−１８０°に設定されている。「トップスピンショット」のスイング角度判定範囲が、スイング角度θ＝２２．５°〜７０°および１１０°〜１６５°に設定されている。「ロブショット」のスイング角度判定範囲が、スイング角度θ＝７０°〜１１０°に設定されている。「スライススピンショット」のスイング角度判定範囲が、スイング角度θ＝−２２．５°〜−６０°および−１２０°〜−１６５°に設定されている。そして、「ドロップショット」のスイング角度判定範囲が−６０°〜−１２０°に設定されている。
【０１２３】
そして、ＣＰＵ１０は、上記ステップ８７で算出されたスイング角度θが上記スイング角度判定範囲の何れの範囲に含まれるか判定し、判定されたスイング角度判定範囲を有するスイング種別を選択して、選択されたスイング種別を用いてスイング種別データＤｉを更新する。ここで、スイング角度θが９０°〜１８０°または−９０°〜−１８０°でプレイヤが右手でコントローラ７を把持している（すなわち、右利き）の場合、プレイヤはコントローラ７をフォアハンドでスイングした場合のスイング種別の判定をしていることになる。また、スイング角度θが−９０°〜９０°でプレイヤが右手でコントローラ７を把持しているの場合、プレイヤはコントローラ７をバックハンドでスイングした場合のスイング種別の判定をしていることになる。
【０１２４】
図１８に戻り、ＣＰＵ１０は、上記ステップ８８で設定されたスイング種別が「トップスピンショット」で、かつ、上記ステップ８７で算出されたスイング角度θが５４°〜１２６°であるか否かを判断する（ステップ８９）。そして、ＣＰＵ１０は、スイング種別が「トップスピンショット」で、かつ、スイング角度θが５４°〜１２６°である場合、次のステップ９０に処理を進める。一方、ＣＰＵ１０は、スイング種別が「トップスピンショット」でない、または、スイング角度θが５４°〜１２６°でない場合、次のステップ９２に処理を進める。
【０１２５】
ステップ９０において、ＣＰＵ１０は、加算ベクトルデータＤｅに格納された加算ベクトルのＺ軸成分の値が閾値Ｔｂ未満か否かを判断する。ここで、閾値Ｔｂは、プレイヤがコントローラ７を「ロブショット」をするようにスイングしたか、「トップスピンショット」をするようにスイングしたかを、Ｚ軸方向に生じる加速度で判断するための値であり、例えば閾値Ｔｂ＝９．３Ｇで設定される。そして、ＣＰＵ１０は、加算ベクトルのＺ軸成分の値が閾値Ｔｂ未満である場合、次のステップ９１に処理を進める。一方、ＣＰＵ１０は、加算ベクトルのＺ軸成分の値が閾値Ｔｂ以上である場合、次のステップ９２に処理を進める。
【０１２６】
なお、上記ステップ９０では、５つの加速度ベクトルを加算（累積）した加算ベクトルのＺ軸方向成分を用いているために、当該Ｚ軸方向成分も加速度ベクトルの５つのＺ軸方向成分が累積した値が用いられている。したがって、閾値Ｔｂも上記累積値を想定した相対的に大きな値に設定する必要がある。しかしながら、上記ステップ９０で行われる判定方法は、他の方法でもかまわない。例えば、第１の例として、上記５つの加速度ベクトルにおけるＺ軸方向成分の平均値を用いる。この場合、閾値Ｔｂは、例えば９．３Ｇ／５＝１．８６Ｇとなる。第２の例として、上記５つの加速度ベクトルから選ばれた１つの加速度ベクトル（例えば、履歴ｈ０や履歴ｈ４）のＺ軸方向成分の値を用いる。この場合も、閾値Ｔｂは、例えば９．３Ｇ／５＝１．８６Ｇとなる。
【０１２７】
ステップ９１において、ＣＰＵ１０は、スイング種別を「トップスピンショット」から「ロブショット」に変更して、スイング種別データＤｉを更新し、次のステップ９２に処理を進める。以下、上記ステップ８９〜ステップ９１の処理について、さらに詳細に説明する。
【０１２８】
上記ステップ８９〜ステップ９１の処理においては、加算ベクトルのＺ軸成分の値に応じて、上記スイング角度判定範囲の少なくとも一部が変化することになる。例えば、図１９に示したように、スイング判定範囲データＤｈで示されるスイング角度判定範囲は、「トップスピンショット」のスイング角度判定範囲が、スイング角度θ＝２２．５°〜７０°および１１０°〜１６５°に設定されている。また、「ロブショット」のスイング角度判定範囲が、スイング角度θ＝７０°〜１１０°に設定されている。一方、加算ベクトルのＺ軸成分の値が閾値Ｔｂ以上である場合、「ロブショット」と判定されるスイング角度判定範囲が拡大して変化する。具体的には、図２０に示すように、加算ベクトルのＺ軸成分の値が閾値Ｔｂ以上である場合、「トップスピンショット」のスイング角度判定範囲が、スイング角度θ＝２２．５°〜５４°および１２６°〜１６５°に縮小される。一方、加算ベクトルのＺ軸成分の値が閾値Ｔｂ以上である場合、「ロブショット」のスイング角度判定範囲が、スイング角度θ＝５４°〜１２６°に拡大される。
【０１２９】
ここで、プレイヤが「トップスピンショット」または「ロブショット」する際に、上面が上方を向いた状態から前面が上方を向く状態までコントローラ７が変化する状態について考える。図２１に示すように、プレイヤが「トップスピンショット」をするようにコントローラ７をスイングした場合、コントローラ７は、ある回転軸を中心としてＹ軸正方向へ動くように回転する。したがって、Ｚ軸正方向への動作が相対的に少なくなるため、コントローラ７にはＺ軸正方向の遠心力とＹ軸正方向への加速度が主に作用する。一方、図２２に示すように、プレイヤが「ロブショット」をするようにコントローラ７をスイングした場合、コントローラ７は、ある回転軸を中心としてＺ軸正方向へ動きながら大きく回転する。したがって、Ｚ軸正方向への動作が相対的に多くなるため、Ｚ軸正方向の加速度がコントローラ７に作用することになる。つまり、Ｚ軸正方向への動作による加速度は、Ｚ軸正方向に生じる遠心力を打ち消す方向に作用するため、結果的に「トップスピンショット」より「ロブショット」におけるＺ軸正方向に生じる加速度が小さくなる。また、プレイヤは、「ロブショット」をする場合より「トップスピンショット」する場合の方が強くスイングする傾向があり、この面でも「ロブショット」においてＺ軸正方向に生じる加速度が小さくなる。このようなプレイヤのスイング傾向に基づいて、上記ステップ８９〜ステップ９１の処理で上記スイング角度判定範囲の少なくとも一部を変化させている。
【０１３０】
また、上記スイング角度θやスイング種別を判定するためのスイング角度判定範囲は、何れも加速度ベクトルのＸ−Ｙ軸方向成分が用いられている。一方、スイング角度判定範囲を変化させるための値は、同じ加速度ベクトルのＺ軸方向成分が用いられている。したがって、上記ステップ８９〜ステップ９１の処理においては、加速度センサ７０１から得られる３軸（Ｘ軸、Ｙ軸、Ｚ軸）の加速度ベクトルに関して、当該３軸のうちの２軸（Ｘ軸、Ｙ軸）の成分を用いてスイング種別を判定するためのスイング角度判定範囲を、当該２軸とは異なる１軸（Ｚ軸）の成分の値に基づいて変化させていることになる。
【０１３１】
図１８に戻り、ステップ９２において、ＣＰＵ１０は、スイング判定フラグデータＤｃに格納されたスイング判定フラグＳＷｆｒｇをＯＦＦに設定して、当該サブルーチンによる処理を終了する。
【０１３２】
このように、上述したゲーム処理によれば、加速度センサ７０１から得られる３軸（Ｘ軸、Ｙ軸、Ｚ軸）の加速度ベクトルに関して、当該３軸のうちの２軸（Ｘ軸、Ｙ軸）の成分を用いてスイング種別を判定するためのスイング角度判定範囲を、当該２軸とは異なる１軸（Ｚ軸）の成分の値に基づいて変化させている。これによって、同じ振り方向であっても、その振り方や振り強さ等によって異なる振り操作として判定することが可能であるため、さらに詳細な判定が可能となってプレイヤが意図する適切な操作内容でゲーム処理することができる。
【０１３３】
なお、上述したスイング角度判定範囲の変更方法では、上記ステップ８８〜ステップ９１（図１８参照）において、一旦スイング種別を設定した後に条件と合致する加算ベクトルに対してスイング種別を再設定する手順を示したが、他の方法でスイング角度判定範囲の変更してもかまわない。例えば、上記ステップ８８でスイング種別を設定する前に上記ステップ９０を実行し、加算ベクトルのＺ軸成分の値が閾値Ｔｂ以上の場合に図１９に示したスイング角度判定範囲を用いてスイング種別を設定する。一方、上記ステップ８８でスイング種別を設定する前に上記ステップ９０を実行し、加算ベクトルのＺ軸成分の値が閾値Ｔｂ未満の場合に図２０に示したスイング角度判定範囲を用いてスイング種別を設定する。このように、加算ベクトルのＺ軸成分の値に応じて、２種類のスイング角度判定範囲を使い分ける方法でスイング角度判定範囲の変更してもかまわない。
【０１３４】
また、上述したスイング角度判定範囲は単なる一例であり、他のスイング角度判定範囲を設定可能であることは言うまでもない。一例として、図１９や図２０で示したスイング角度判定範囲では、加算ベクトルの方向に関してのみ判定可能な判定範囲を設定したが、さらに加算ベクトルの大きさに関しても判定可能な判定範囲を付加してもかまわない。例えば、加算ベクトルの大きさが所定値未満の場合のスイング角度判定範囲と、当該所定値以上の場合のスイング角度判定範囲とが異なるように設定してもかまわない。具体的には、加算ベクトルの大きさが所定値未満の場合は、当該加算ベクトルの方向（スイング角度θ）がどのような方向であっても同一のスイング種別（例えば、ボレー）に判定されるようなスイング角度判定範囲に設定することが考えられる。
【０１３５】
他の例として、ゲーム状況に応じて、他のショットが判定されるスイング角度判定範囲を設定してもかまわない。具体的には、図１９や図２０で示したスイング角度判定範囲では、プレイヤがコントローラ７を上から下へ振り下ろすスイングをした場合、テニスゲームにおける「ドロップショット」でスイングされたと判定される。しかしながら、テニスゲームの状況に応じて、プレイヤがコントローラ７を上から下へ振り下ろすスイングをした場合に、スイング種別が「ドロップショット」の代わりに「スマッシュショット」に判定されてもかまわない。例えば、相手キャラクタＥＣがネット付近等にロブショットしたことに応じて、プレイヤがコントローラ７を上から下へ振り下ろすスイングをした場合に、スイング種別が「スマッシュショット」に判定される。
【０１３６】
また、プレイヤキャラクタＰＣがサーブをする場合、上述したスイング角度判定範囲とは異なるスイング角度判定範囲が設定されてもかまわない。例えば、図２３に示すように、サーブをする場合、「トップスピンサーブ」のスイング角度判定範囲、「スライススピンサーブ」のスイング角度判定範囲、および「スマッシュサーブ」のスイング角度判定範囲がそれぞれ設定されている。具体的には、「トップスピンサーブ」のスイング角度判定範囲が、スイング角度θ＝−２２．５°〜７０°、１１０°〜１８０°、および−１６５°〜−１８０°に設定されている。「スライススピンサーブ」のスイング角度判定範囲が、スイング角度θ＝−２２．５°〜−６０°および−１２０°〜−１６５°に設定されている。そして、「スマッシュサーブ」のスイング角度判定範囲が７０°〜１１０°および−６０°〜−１２０°に設定されている。ここで、「スマッシュサーブ」とは、他のサーブと比較してサーブしたボールの速度が速く、ボールの威力が強烈になるゲーム進行上特殊なサーブである。図２３で示したサーブのスイング角度判定範囲では、プレイヤがコントローラ７を上から下へ振り下ろすスイングをした場合と、コントローラ７を下から上へ振り上げるスイングをした場合とにおいて、「スマッシュサーブ」がスイング種別に設定される。これは、基本的にプレイヤがコントローラ７を真上から真下へ振り下ろすスイングをした場合に「スマッシュサーブ」となるが、スイング種別が設定される前に振り下ろすスイングを止めた場合に逆方向の加速度が生じることがあり、当該加速度を検出して「スマッシュサーブ」を判定するための角度判定範囲が７０°〜１１０°に設定されている。
【０１３７】
また、上述したゲーム処理によれば、加速度センサ７０１から得られる３軸（Ｘ軸、Ｙ軸、Ｚ軸）の加速度ベクトルに関して、当該３軸のうちの２軸（Ｘ軸、Ｙ軸）の成分を用いて複数種類のゲーム処理（スイング種別）を選択するための判定範囲（スイング角度判定範囲）を、当該２軸とは異なる他の１軸（Ｚ軸）の成分の値に基づいて変化させたが、他の態様によって判定範囲を変化させてもかまわない。第１の例として、加速度センサ７０１から得られる３軸の加速度ベクトルに関して、当該３軸のうちの２軸または１軸の成分を用いて複数種類のゲーム処理を選択するための判定範囲を、当該３軸の成分の値に基づいて変化させてもかまわない。第２の例として、加速度センサ７０１から得られる３軸の加速度ベクトルに関して、当該３軸のうちの１軸の成分を用いて複数種類のゲーム処理を選択するための判定範囲を、当該１軸とは異なる他の１軸の成分の値に基づいて変化させてもかまわない。この場合、加速度センサ７０１は、少なくとも２軸方向に沿った直線加速度をそれぞれ検知する加速度検出手段で構成することができる。また、第１の例および第２の例において、上記３軸のうちの１軸の成分を用いた判定範囲は、当該成分における加速度の向きや大きさを判定するための範囲を設定することになる。第３の例として、加速度センサ７０１から得られる３軸の加速度ベクトルに関して、当該３軸のうちの１軸の成分を用いて複数種類のゲーム処理を選択するための判定範囲を、当該１軸とは異なる他の２軸の成分の値に基づいて変化させてもかまわない。
【０１３８】
また、上述したゲーム処理によれば、コントローラ７の上面が上方に向いた状態でプレイヤがコントローラ７を把持して操作することを前提としている。つまり、コントローラ７にはＹ軸負方向へ重力加速度が作用していることが前提となっている。しかしながら、ゲーム処理中にコントローラ７に作用している重力加速度の方向を検出する処理を追加することによって、実際にコントローラ７に作用している重力加速度を用いてゲーム処理してもかまわない。例えば、コントローラ７が静的な状態であることを適宜検出し、当該状態においてコントローラ７に生じている加速度の方向および大きさを、コントローラ７に作用している重力加速度として設定する。具体的には、加速度センサ７０１から出力される加速度データの変化が所定の範囲内（例えば、１Ｇを中心とする所定の範囲内）となる期間が所定の時間以上継続している場合等を検出することによって、コントローラ７が静的な状態であると判定することが可能である。そして、上記ステップ８４では、適宜設定された重力加速度を用いて各加速度ベクトルから重力成分を除去する。また、上記ステップ８７では、適宜設定された重力加速度を基準としてスイング角度θを算出する。例えば、上記ステップ８７では、適宜設定された重力加速度の方向がＹ軸負方向となるように、加算ベクトルのＸ−Ｙ軸成分の方向を補正した後、補正後の加算ベクトルのＸ−Ｙ軸成分の方向を用いてスイング角度θを算出する。
【０１３９】
また、上述したゲーム処理においては、スイング判定処理に用いる加速度の履歴を用いている。具体的には、プレイヤがコントローラ７をスイングしたと判定するために用いた加速度を含め、５回の処理で検出された加速度の履歴を用いてスイング判定処理を行っている。つまり、上述したゲーム処理では、コントローラ７に生じる加速度の大きさが所定の値に到達した時点から所定期間に取得された加速度データに基づいて、スイング判定処理が行われている。しかしながら、スイング判定処理に用いる加速度の履歴については、他の期間の加速度の履歴を用いてもかまわない。例えば、第１の例として、コントローラ７に生じる加速度の大きさが所定の値に到達した時点の前後となる所定期間に取得された加速度データに基づいて、スイング判定処理を行ってもかまわない。第２の例として、コントローラ７に生じる加速度の大きさが所定の値に到達した時点までの所定期間に取得された加速度データに基づいて、スイング判定処理を行ってもかまわない。第３の例として、コントローラ７に生じる加速度の大きさが所定の値に到達した時点から所定時間経過した後の所定期間に取得された加速度データに基づいて、スイング判定処理を行ってもかまわない。
【０１４０】
また、上述したゲーム処理では、本発明をテニスゲームのスイング判定処理に用いる一例を用いたが、本発明は、他のゲームで行われる加速度データの判定処理に用いてもかまわない。
【０１４１】
第１の例として、刀剣等を用いて対戦するゲームにおける刀剣を振る動作において、本発明の加速度データの判定処理を用いることができる。具体的には、プレイヤがコントローラ７を把持して刀剣を振って攻撃したり、刀剣で防御したりする動作を行い、攻撃／防御モーション時にコントローラ７が振られたり動かされたりした方向（Ｘ−Ｙ軸成分）に応じて、プレイヤが行った振り方向や防御姿勢を判定する処理を想定する。この場合、コントローラ７のＺ軸正方向に生じる加速度が相対的に大きい場合に刀剣を振って攻撃したと判定される可能性が高いＸ−Ｙ軸成分の判定範囲を設定する。また、コントローラ７のＺ軸正方向に生じる加速度が相対的に小さい場合に刀剣を用いて防御したと判定される可能性が高いＸ−Ｙ軸成分の判定範囲を設定する。具体的には、プレイヤがコントローラ７を下から上に振り上げた場合、コントローラ７に生じる遠心力が相対的に大きいときは刀剣を下から上に振り上げる攻撃をしたと判定し、コントローラ７に生じる遠心力が相対的に小さいときは刀剣を持ち上げて頭部を防御するような姿勢となったと判定することができる。
【０１４２】
第２の例として、野球ゲームにおける投球動作において、本発明の加速度データの判定処理を用いることができる。具体的には、プレイヤがコントローラ７を把持して野球における投手がボールを投げるモーションを行い、投球モーション時にコントローラ７が振られる方向（Ｘ−Ｙ軸成分）に応じて、プレイヤが投じた球種を判定する処理を想定する。この場合、コントローラ７のＺ軸正方向に生じる加速度が相対的に大きい場合に直球と判定される可能性が高いＸ−Ｙ軸成分の判定範囲を設定する。また、コントローラ７のＺ軸正方向に生じる加速度が相対的に小さい場合に変化球と判定される可能性が高いＸ−Ｙ軸成分の判定範囲を設定する。
【０１４３】
また、上述した説明では、判定されたスイング種別を用いて、３次元の仮想ゲーム空間におけるプレイヤキャラクタＰＣがボールをショットするテニスゲームを用いたが、本発明は、他の態様のゲームにも適用できることは言うまでもない。第１の例として、テニスコートが配置された２次元の仮想ゲーム世界を用いて、プレイヤキャラクタＰＣがボールをショットするゲームであっても、本発明を適用することができる。
【０１４４】
また、上述した説明では、据置型のゲーム装置に本願発明を適用した例を説明したが、加速度センサを備えた入力装置によって操作される一般的なパーソナルコンピュータ等の情報処理装置にも適用することができる。例えば、入力装置の加速度センサから出力される加速度データに応じて、情報処理装置が入力装置を把持しているユーザの振り方向を算出する等、入力装置に生じる加速度に基づいて様々なゲーム処理を行うことができる。
【０１４５】
また、上述した説明では、コントローラ７とゲーム装置本体５とが無線通信によって接続された態様を用いたが、コントローラ７とゲーム装置本体５とがケーブルを介して電気的に接続されてもかまわない。この場合、コントローラ７に接続されたケーブルをゲーム装置本体５の接続端子に接続する。
【０１４６】
また、上述したコントローラ７の形状や、それらに設けられている操作部７２の形状、数、および設置位置等は、単なる一例に過ぎず他の形状、数、および設置位置であっても、本発明を実現できることは言うまでもない。また、上述した処理で用いられる係数、判定値、数式、処理順序等は、単なる一例に過ぎず他の値や数式や処理順序であっても、本発明を実現できることは言うまでもない。
【０１４７】
また、本発明のゲームプログラムは、光ディスク４等の外部記憶媒体を通じてゲーム装置本体５に供給されるだけでなく、有線または無線の通信回線を通じてゲーム装置本体５に供給されてもよい。また、ゲームプログラムは、ゲーム装置本体５内部の不揮発性記憶装置に予め記録されていてもよい。なお、ゲームプログラムを記憶する情報記憶媒体としては、ＣＤ−ＲＯＭ、ＤＶＤ、あるいはそれらに類する光学式ディスク状記憶媒体の他に、不揮発性半導体メモリでもよい。
【０１４８】
以上、本発明を詳細に説明してきたが、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【産業上の利用可能性】
【０１４９】
本発明に係るゲーム装置およびゲームプログラムは、加速度に基づいたゲーム処理を行うゲームにおいて、適切なゲーム処理を選択して実行することができ、入力装置を振る操作を用いて処理するゲーム等を実行するゲーム装置やゲームプログラムとして有用である。
【符号の説明】
【０１５０】
１…ゲームシステム
２…モニタ
２ａ、７０６…スピーカ
３…ゲーム装置
４…光ディスク
５…ゲーム装置本体
１０…ＣＰＵ
１１…システムＬＳＩ
１２…外部メインメモリ
１３…ＲＯＭ／ＲＴＣ
１４…ディスクドライブ
１５…ＡＶ−ＩＣ
１６…ＡＶコネクタ
１７…フラッシュメモリ
１８…無線通信モジュール
１９…無線コントローラモジュール
２０…拡張コネクタ
２１…外部メモリカード用コネクタ
２２、２３…アンテナ
２４…電源ボタン
２５…リセットボタン
２６…イジェクトボタン
３１…入出力プロセッサ
３２…ＧＰＵ
３３…ＤＳＰ
３４…ＶＲＡＭ
３５…内部メインメモリ
７…コントローラ
７１…ハウジング
７２…操作部
７３…コネクタ
７４…撮像情報演算部
７４１…赤外線フィルタ
７４２…レンズ
７４３…撮像素子
７４４…画像処理回路
７５…通信部
７５１…マイコン
７５２…メモリ
７５３…無線モジュール
７５４…アンテナ
７００…基板
７０１…加速度センサ
７０２…ＬＥＤ
７０４…バイブレータ
７０７…サウンドＩＣ
７０８…アンプ
８…マーカ
【図１】
2010158463.tif 000003
【図２】
2010158463.tif 000004
【図３】
2010158463.tif 000005
【図４】
2010158463.tif 000006
【図５】
2010158463.tif 000007
【図６】
2010158463.tif 000008
【図７】
2010158463.tif 000009
【図８】
2010158463.tif 000010
【図９】
2010158463.tif 000011
【図１０Ａ】
2010158463.tif 000012
【図１０Ｂ】
2010158463.tif 000013
【図１１Ａ】
2010158463.tif 000014
【図１１Ｂ】
2010158463.tif 000015
【図１２Ａ】
2010158463.tif 000016
【図１２Ｂ】
2010158463.tif 000017
【図１３Ａ】
2010158463.tif 000018
【図１３Ｂ】
2010158463.tif 000019
【図１４Ａ】
2010158463.tif 000020
【図１４Ｂ】
2010158463.tif 000021
【図１５】
2010158463.tif 000022
【図１６】
2010158463.tif 000023
【図１７】
2010158463.tif 000024
【図１８】
2010158463.tif 000025
【図１９】
2010158463.tif 000026
【図２０】
2010158463.tif 000027
【図２１】
2010158463.tif 000028
【図２２】
2010158463.tif 000029
【図２３】
2010158463.tif 000030