図1を参照して、この発明の一実施例であるゲームコントローラ10は、ゲーム用の操作装置または入力装置であり、プレイヤがその上に乗る台12、および台12にかかる荷重を検出するための少なくとも4つの荷重センサ14を備える。なお、各荷重センサ14は台12に内包されており(図2参照)、図1においてはその配置が点線で示されている。
台12は、略直方体に形成されており、上面視で略正方形状である。たとえば正方形の1辺が30cm〜50cm程度に設定される。プレイヤが乗る台12の上面は平坦にされる。台12の4隅の側面は、部分的に円柱状に張り出すように形成されている。
この台12において、4つの荷重センサ14は、所定の間隔を置いて配置される。この実施例では、4つの荷重センサ14は、台12の周縁部に、具体的には4隅にそれぞれ配置される。荷重センサ14の間隔は、台12に対するプレイヤの荷重のかけ方によるゲーム操作の意図をより精度良く検出できるように適宜な値に設定される。
図2にはゲームコントローラ10の対角線断面図が示されており、荷重センサ14の配置された隅の部分が拡大表示されている。
この図2から分かるように、台12は、プレイヤが乗るための支持板16と脚18を含む。脚18は、荷重センサ14が配置される箇所に設けられる。この実施例では4つの荷重センサ14が4隅に配置されるので、4つの脚18が4隅に設けられる。脚18は、たとえばプラスチック成型によって略有底円筒状に形成されており、荷重センサ14は、脚18内の底面に設けられた球面部品18a上に配置される。支持板16は、この荷重センサ14を介して脚18に支持される。
支持板16は、上面と側面上部とを形成する上層板16a、下面と側面下部とを形成する下層板16b、および上層板16aと下層板16bとの間に設けられる中層板16cを含む。上層板16aと下層板16bとは、たとえばプラスチック成型により形成されており、接着等により一体化される。中層板16cは、たとえば1枚の金属板のプレス成型により形成されている。この中層板16cが、4つの荷重センサ14の上に固定される。上層板16aは、その下面に格子状のリブ(図示しない)を有しており、当該リブを介して中層板16cに支持されている。
したがって、台12にプレイヤが乗ったときには、その荷重は、支持板16、荷重センサ14および脚18を伝達する。図2に矢印で示したように、入力される荷重によって生じた床からの反作用は、脚18から、球面部品18a、荷重センサ14、中層板16cを介して、上層板16aに伝達する。
荷重センサ14は、たとえば歪ゲージ(歪センサ)式ロードセルであり、入力された荷重を電気信号に変換する荷重変換器である。荷重センサ14では、荷重入力に応じて、起歪体14aが変形して歪が生じる。この歪が、起歪体14aに貼り付けられた歪センサ14bによって、電気抵抗の変化に変換され、さらに電圧変化に変換される。したがって、荷重センサ14は、電源端子から電圧が与えられると、入力荷重を示す電圧信号を出力端子から出力する。
なお、荷重センサ14は、音叉振動式、弦振動式、静電容量式、圧電式、磁歪式、またはジャイロ式のような他の方式の荷重センサであってもよい。
図3のブロック図には、ゲームコントローラ10の電気的な構成の一例が示される。なお、この図3では、信号および通信の流れは実線矢印で示される。破線矢印は、電源の供給を示している。
ゲームコントローラ10は、その動作を制御するためのマイクロコンピュータ(マイコン)20を含む。マイコン20は図示しないROMおよびRAM等を含み、ROMに記憶されたプログラムに従ってゲームコントローラ10の動作を制御する。
マイコン20には、ADコンバータ22、コネクタ24およびDC−DCコンバータ26が接続される。4つの荷重センサ14は、図3ではロードセル14として示される。4つの荷重センサ14のそれぞれは、それぞれの増幅器28を介してADコンバータ22に接続される。
コネクタ24は、ゲームコントローラ10がゲーム機52(図4参照)と通信するために設けられている。コネクタ24は、図1では省略されているが、ケーブル32(図4参照)の先端に設けられている。ゲームコントローラ10は、このコネクタ24を用いて、ゲーム機52に直接に接続されてよいし、または、ゲーム機52と通信可能な機器に接続されてもよい。たとえば、ゲームコントローラ10は、ゲーム機52のための異なる種類のコントローラ54(図4参照)を介してゲーム機52に接続されてよい。
また、ゲームコントローラ10には電源供給のために電池30が収容されている。ただし、この実施例では、マイコン20への電源の供給は、コネクタ24を用いて接続された外部の機器、たとえばゲーム機52や異種コントローラ54から行われる。一方、荷重センサ14、増幅器28およびADコンバータ22には、電池30からの電源がDC−DCコンバータ26を介して供給される。DC−DCコンバータ26は、電池30からの直流電流の電圧値を異なる電圧値に変換して、荷重センサ14、増幅器28およびADコンバータ22に与える。
これら荷重センサ14、ADコンバータ22および増幅器28への電源供給は、マイコン20によるDC−DCコンバータ26の制御によって、必要に応じて行われるようにしてよい。つまり、マイコン20は、荷重センサ14を動作させて荷重を検出する必要があると判断されるときに、DC−DCコンバータ26を制御して、各荷重センサ14、各増幅器28およびADコンバータ22に電源を供給するようにしてよい。
電源が供給されると、各荷重センサ14は、入力された荷重を示す信号を出力する。当該信号は各増幅器28で増幅され、ADコンバータ22でアナログ信号からディジタルデータに変換されて、マイコン20に入力される。各荷重センサ14の検出値には各荷重センサ14の識別情報が付与されて、いずれの荷重センサ14の検出値であるかが識別可能にされる。このようにして、マイコン20は、同一時刻における4つの荷重センサ14のそれぞれの荷重検出値を示すデータを取得することができる。
一方、マイコン20は、荷重センサ14を動作させる必要がないと判断されるとき、つまり、荷重検出タイミングでないとき、DC−DCコンバータ26を制御して、荷重センサ14、増幅器28およびADコンバータ22への電源の供給を停止する。このように、ゲームコントローラ10では、必要なときにだけ、荷重センサ14を動作させて荷重の検出を行うことができるので、荷重検出のための電力消費を抑制することができる。
荷重検出の必要なときとは、典型的には、ゲーム機52(図4)が荷重データを取得したいときである。たとえば、ゲーム機52が荷重情報を必要とするとき、ゲーム機52はゲームコントローラ10に対して荷重取得命令を送信する。マイコン20は、ゲーム機52から荷重取得命令を受信したときに、DC−DCコンバータ26を制御して、荷重センサ14等に電源を供給し、荷重を検出する。一方、マイコン20は、ゲーム機52から荷重取得命令を受信していないときには、DC−DCコンバータ26を制御して、電源供給を停止する。あるいは、マイコン20は、一定時間ごとに荷重検出タイミングであると判断して、DC−DCコンバータ26を制御するようにしてもよい。このような周期的な荷重取得を行う場合、周期情報は、たとえば、初めにゲーム機52からマイコン20に与えられ、または、予めマイコン20に記憶されてよい。
荷重センサ14からの検出値を示すデータは、ゲームコントローラ10の操作データ(入力データ)として、マイコン20からコネクタ24を介してゲーム機52(図4)に送信される。たとえば、ゲーム機52からの命令を受けて荷重検出を行った場合、マイコン20は、ADコンバータ22から荷重センサ14の検出値データを受信したときに、当該検出値データをゲーム機52に送信する。あるいは、マイコン20は、一定時間ごとに検出値データをゲーム機52に送信するようにしてもよい。
このようなゲームコントローラ10を使用したゲームシステムないしゲーム装置50の一例が図4に示される。図4を参照して、ゲームシステム50は、ビデオゲーム機(以下、単に「ゲーム機」という。)52およびコントローラ54を含む。なお、図示は省略するが、この実施例のゲーム機52は、最大4つのコントローラ54と通信可能に設計されている。また、ゲーム機52と各コントローラ54とは、無線によって接続される。たとえば、無線通信は、Bluetooth(登録商標)規格に従って実行されるが、赤外線や無線LANなど他の規格に従って実行されてもよい。別の実施例では、コントローラ54はゲーム機52に有線で接続されてもよい。
コントローラ54は、ゲームコントローラ10とは異なる種類のゲームコントローラである。この実施例では、コントローラ54は、ゲーム機52のメインのゲームコントローラであり、ゲームコントローラ10は、コントローラ54のゲーム機52との無線通信機能を利用すべく、コントローラ54の拡張ユニットとして準備される。ゲームコントローラ10は、台12から延びるケーブル32の先端のコネクタ24によって、コントローラ54に接続される。区別のために、コントローラ54を「リモコン(リモートコントロール)」とも呼ぶものとする。
ゲーム機52は、略直方体のハウジング56を含み、ハウジング56の前面にはディスクスロット58が設けられる。ディスクスロット58から、ゲームプログラム等を記憶した情報記憶媒体の一例である光ディスク60が挿入されて、ハウジング56内のディスクドライブ62(図5参照)に装着される。図示は省略するが、ディスクスロット58の周囲には、LEDと導光板とが配置され、様々な処理に応答させて、ディスクスロット58を点灯または点滅させることが可能である。
また、ゲーム機52のハウジング56の前面であり、その上部には、電源ボタン64aおよびリセットボタン64bが設けられ、その下部には、イジェクトボタン64cが設けられる。さらに、リセットボタン64bとイジェクトボタン64cとの間であり、ディスクスロット58の近傍には、外部メモリカード用コネクタカバー66が設けられる。この外部メモリカード用コネクタカバー66の内側には、外部メモリカード用コネクタ68(図5参照)が設けられ、図示しない外部メモリカード(以下、単に「メモリカード」という。)が挿入される。メモリカードは、光ディスク60から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム50を利用してプレイしたゲームのゲームデータ(ゲームの結果データまたは途中データ)を保存(セーブ)しておいたりするために利用される。ただし、上記のゲームデータの保存は、メモリカードに対して行うことに代えて、たとえばゲーム機52の内部に設けられるフラッシュメモリ70(図5参照)のような内部メモリに対して行うようにしてもよい。また、メモリカードは、内部メモリのバックアップメモリとして用いるようにしてもよい。さらに、ゲーム機52では、ゲーム以外の他のアプリケーションを実行することも可能であり、かかる場合には、メモリカードには当該他のアプリケーションのデータを保存することができる。
なお、メモリカードとしては、汎用のSDカードを用いることができるが、メモリスティックやマルチメディアカード(登録商標)のような他の汎用のメモリカードを用いることもできる。
図4では省略するが、ゲーム機52のハウジング56の後面には、AVケーブルコネクタ72(図5参照)が設けられ、そのAVコネクタ72を用いて、AVケーブル74を通してゲーム機52にモニタ76およびスピーカ76aを接続する。このモニタ76およびスピーカ76aは典型的にはカラーテレビジョン受像機であり、AVケーブル74によって、ゲーム機52からの映像信号がカラーテレビのビデオ入力端子に入力され、ゲーム機52からの音声信号が音声入力端子に入力される。したがって、カラーテレビ(モニタ)76の画面上にたとえば3次元(3D)ビデオゲームのゲーム画像が表示され、左右のスピーカ76aからゲーム音楽や効果音などのステレオゲーム音声が出力される。また、モニタ76の周辺(この実施例では、モニタ76の上側)には、2つの赤外LED(マーカ)78m,78nを備えるマーカ部78が設けられる。このマーカ部78は、電源ケーブル78aを通してゲーム機52に接続される。したがって、マーカ部78には、ゲーム機52から電源が供給される。これによって、マーカ78m,78nは発光し、それぞれモニタ76の前方に向けて赤外光を出力する。
なお、ゲーム機52の電源は、一般的なACアダプタ(図示せず)によって与えられる。ACアダプタは家庭用の標準的な壁ソケットに差し込まれ、ゲーム機52は、家庭用電源(商用電源)を、駆動に適した低いDC電圧信号に変換する。他の実施例では、電源としてバッテリが用いられてもよい。
このゲームシステム50において、ユーザまたはプレイヤがゲーム(またはゲームに限らず、他のアプリケーション)をプレイするために、ユーザはまずゲーム機52の電源をオンし、次いで、ユーザはビデオゲーム(もしくはプレイしたいと思う他のアプリケーション)のプログラムを記録している適宜の光ディスク60を選択し、その光ディスク60をゲーム機52のディスクドライブ62にローディングする。応じて、ゲーム機52がその光ディスク60に記録されているプログラムに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム機52に入力を与えるためにリモコン54またはゲームコントローラ10を操作する。たとえば、リモコン54に設けられる各種操作ボタンなどの入力手段80のどれかを操作することによって、あるいはゲームコントローラ10を用いることによって、ゲームもしくは他のアプリケーションをスタートさせることが可能である。また、入力手段80に対する操作以外にも、リモコン54自体を動かすことによって、あるいはゲームコントローラ10を用いることによって、たとえば、動画オブジェクト(プレイヤオブジェクト)を異なる方向に移動させることが可能であり、または3Dのゲーム世界におけるユーザの視点(カメラ位置)を変化させることが可能である。
ただし、ビデオゲームや他のアプリケーションのプログラムは、ゲーム機52の内部メモリ(フラッシュメモリ70)に記憶(インストール)しておき、当該内部メモリから実行するようにしてもよい。かかる場合には,光ディスク60のような記憶媒体に記憶されたプログラムを内部メモリにインストールしてもよいし、ダウンロードされたプログラムを内部メモリにインストールしてもよい。
図5は図4実施例のビデオゲームシステム50の電気的な構成を示すブロック図である。図示は省略するが、ハウジング56内の各コンポーネントは、プリント基板に実装される。図5に示すように、ゲーム機52には、CPU82が設けられ、ゲームプロセッサとして機能する。また、CPU82には、システムLSI84が接続される。このシステムLSI84には、外部メインメモリ86、ROM/RTC88、ディスクドライブ62およびAV IC90が接続される。
外部メインメモリ86は、ゲームプログラム等のプログラムを記憶したり、各種データを記憶したりして、CPU82のワーク領域やバッファ領域として用いられる。ROM/RTC88は、いわゆるブートROMであり、ゲーム機52の起動用のプログラムが組み込まれるとともに、時間をカウントする時計回路が設けられる。ディスクドライブ62は、光ディスク60からプログラムやテクスチャデータ等を読み出し、CPU82の制御の下で、後述する内部メインメモリ84eまたは外部メインメモリ86に書き込む。
システムLSI84には、入出力プロセッサ84a、GPU(Graphics Processor Unit)84b,DSP(Digital Signal Processor)84c,VRAM84dおよび内部メインメモリ84eが設けられ、図示は省略するが、これらは内部バスによって互いに接続される。
入出力プロセッサ(I/Oプロセッサ)84aは、データの送受信を実行したり、データのダウンロードを実行したりする。
GPU84bは、描画手段の一部を形成し、CPU82からのグラフィクスコマンド(作画命令)を受け、そのコマンドに従ってゲーム画像データを生成する。ただし、CPU82は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをGPU84bに与える。
図示は省略するが、上述したように、GPU84bにはVRAM84dが接続される。GPU84bが作画コマンドを実行するにあたって必要なデータ(画像データ:ポリゴンデータやテクスチャデータなどのデータ)は、GPU84bがVRAM84dにアクセスして取得する。ただし、CPU82は、描画に必要な画像データを、GPU84bを介してVRAM84dに書き込む。GPU84bは、VRAM84dにアクセスして描画のためのゲーム画像データを作成する。
なお、この実施例では、GPU84bがゲーム画像データを生成する場合について説明するが、ゲームアプリケーション以外の任意のアプリケーションを実行する場合には、GPU84bは当該任意のアプリケーションについての画像データを生成する。
また、DSP84cは、オーディオプロセッサとして機能し、内部メインメモリ84eや外部メインメモリ86に記憶されるサウンドデータや音波形(音色)データを用いて、スピーカ76aから出力する音、音声或いは音楽に対応するオーディオデータを生成する。
上述のように生成されたゲーム画像データおよびオーディオデータは、AV IC90によって読み出され、AVコネクタ72を介してモニタ76およびスピーカ76aに出力される。したがって、ゲーム画面がモニタ76に表示され、ゲームに必要な音(音楽)がスピーカ76aから出力される。
また、入出力プロセッサ84aには、フラッシュメモリ70、無線通信モジュール92および無線コントローラモジュール94が接続されるとともに、拡張コネクタ96およびメモリカード用コネクタ68が接続される。また、無線通信モジュール92にはアンテナ92aが接続され、無線コントローラモジュール94にはアンテナ94aが接続される。
入出力プロセッサ84aは、無線通信モジュール92を介して、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。ただし、ネットワークを介さずに、直接的に他のゲーム装置と通信することもできる。入出力プロセッサ84aは、定期的にフラッシュメモリ70にアクセスし、ネットワークへ送信する必要があるデータ(「送信データ」とする)の有無を検出し、当該送信データが有る場合には、無線通信モジュール92およびアンテナ92aを介してネットワークに送信することが可能である。また、入出力プロセッサ84aは、他のゲーム装置から送信されるデータ(「受信データ」とする)を、ネットワーク、アンテナ92aおよび無線通信モジュール92を介して受信し、当該受信データをフラッシュメモリ70に記憶することが可能である。ただし、受信データが一定の条件を満たさない場合には、当該受信データはそのまま破棄される。さらに、入出力プロセッサ84aは、ダウンロードサーバからダウンロードしたデータ(ダウンロードデータとする)をネットワーク、アンテナ92aおよび無線通信モジュール92を介して受信し、そのダウンロードデータをフラッシュメモリ70に記憶することが可能である。
また、入出力プロセッサ84aは、リモコン54から送信される入力データ(操作データ)をアンテナ94aおよび無線コントローラモジュール94を介して受信し、内部メインメモリ84eまたは外部メインメモリ86のバッファ領域に記憶(一時記憶)する。入力データは、CPU82の処理(たとえば、ゲーム処理)によって利用された後、バッファ領域から消去される。
なお、この実施例では、上述したように、無線コントローラモジュール94は、Bluetooth規格に従ってリモコン54との間で通信を行う。
さらに、入出力プロセッサ84aには、拡張コネクタ96およびメモリカード用コネクタ68が接続される。拡張コネクタ96は、USBやSCSIのようなインターフェイスのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、リモコン54とは異なる他のコントローラのような周辺機器を接続したりすることができる。また、拡張コネクタ96に有線LANアダプタを接続し、無線通信モジュール92に代えて当該有線LANを利用することもできる。メモリカード用コネクタ68には、メモリカードのような外部記憶媒体を接続することができる。したがって、たとえば、入出力プロセッサ84aは、拡張コネクタ96やメモリカード用コネクタ68を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
詳細な説明は省略するが、図4にも示したように、ゲーム機52(ハウジング56)には、電源ボタン64a,リセットボタン64bおよびイジェクトボタン64cが設けられる。電源ボタン64aは、システムLSI84に接続される。この電源ボタン64aがオンされると、システムLSI84には、ゲーム機52の各コンポーネントに図示しないACアダプタを経て電源が供給され、通常の通電状態となるモード(「通常モード」と呼ぶこととする)が設定される。一方、電源ボタン64aがオフされると、システムLSI84には、ゲーム機52の一部のコンポーネントのみに電源が供給され、消費電力を必要最低限に抑えるモード(以下、「スタンバイモード」という)が設定される。スタンバイモードが設定された場合には、システムLSI84は、入出力プロセッサ84a、フラッシュメモリ70、外部メインメモリ86、ROM/RTC88および無線通信モジュール92、無線コントローラモジュール94以外のコンポーネントに対して、電源供給を停止する指示を行う。したがって、スタンバイモードにおいて、CPU82がアプリケーションを実行することはない。
なお、システムLSI84には、スタンバイモードにおいても電源が供給されるが、GPU84b、DSP84cおよびVRAM84dへのクロックの供給を停止することにより、これらを駆動しないようにして、消費電力を低減するようにしてある。
また、図示は省略するが、ゲーム機52のハウジング56内部には、CPU82やシステムLSI84などのICの熱を外部に排出するためのファンが設けられる。スタンバイモードでは、このファンも停止される。
ただし、スタンバイモードを利用したくない場合には、スタンバイモードを利用しない設定にしておくことにより、電源ボタン64aがオフされたときに、すべての回路コンポーネントへの電源供給が完全に停止される。
また、通常モードとスタンバイモードとの切り替えは、リモコン54の電源スイッチ80h(図6参照)のオン/オフの切り替えによって、遠隔操作によって行うことが可能である。当該遠隔操作を行わない場合には、スタンバイモードにおいて無線コントローラモジュール94aへの電源供給を行わない設定にしてもよい。
リセットボタン64bもまた、システムLSI84に接続される。リセットボタン64bが押されると、システムLSI84は、ゲーム機52の起動プログラムを再起動する。イジェクトボタン64cは、ディスクドライブ62に接続される。イジェクトボタン64cが押されると、ディスクドライブ62から光ディスク60が排出される。
図6(A)ないし図6(E)は、リモコン54の外観の一例を示す。図6(A)はリモコン54の先端面を示し、図6(B)はリモコン54の上面を示し、図6(C)はリモコン54の右側面を示し、図6(D)はリモコン54の下面を示し、そして、図6(E)はリモコン54の後端面を示す。
図6(A)ないし図6(E)を参照して、リモコン54は、たとえばプラスチック成型によって形成されたハウジング98を有している。ハウジング98は、略直方体形状であり、ユーザが片手で把持可能な大きさである。ハウジング98(リモコン54)には、入力手段(複数のボタンないしスイッチ)80が設けられる。具体的には、図6(B)に示すように、ハウジング98の上面には、十字キー80a,1ボタン80b,2ボタン80c,Aボタン80d,−ボタン80e,HOMEボタン80f,+ボタン80gおよび電源スイッチ80hが設けられる。また、図6(C)および図6(D)に示すように、ハウジング98の下面に傾斜面が形成されており、この傾斜面に、Bトリガースイッチ80iが設けられる。
十字キー80aは、4方向プッシュスイッチであり、矢印で示す4つの方向、前(または上)、後ろ(または下)、右および左の操作部を含む。この操作部のいずれか1つを操作することによって、たとえば、プレイヤによって操作可能なキャラクタまたはオブジェクト(プレイヤキャラクタまたはプレイヤオブジェクト)の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
1ボタン80bおよび2ボタン80cは、それぞれ、押しボタンスイッチである。たとえば3次元ゲーム画像を表示する際の視点位置や視点方向、すなわち仮想カメラの位置や画角を調整する等のゲームの操作に使用される。または、1ボタン80bおよび2ボタン80cは、Aボタン80dおよびBトリガースイッチ80iと同じ操作或いは補助的な操作をする場合に用いるようにしてもよい。
Aボタンスイッチ80dは、押しボタンスイッチであり、たとえば、プレイヤキャラクタまたはプレイヤオブジェクトに、方向指示以外の動作、すなわち、打つ(パンチ)、投げる、つかむ(取得)、乗る、ジャンプするなどの任意のアクションをさせるために使用される。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かすなどを指示することができる。また、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。また、Aボタンスイッチ80dは、ゲーム画面上でポインタ(指示画像)が指示するアイコンないしボタン画像の決定を指示するために使用され得る。たとえば、アイコンやボタン画像が決定されると、これらに対応して予め設定されている指示ないし命令(ゲームのコマンド)を入力することができる。
−ボタン80e、HOMEボタン80f、+ボタン80gおよび電源スイッチ80hもまた、押しボタンスイッチである。たとえば、−ボタン80eは、ゲームモードを選択するために使用される。HOMEボタン80fは、ゲームメニュー(メニュー画面)を表示するために使用される。+ボタン80gは、ゲームを開始(再開)したり、一時停止したりするなどのために使用される。電源スイッチ80hは、ゲーム機52の電源を遠隔操作によってオン/オフするために使用される。
なお、この実施例では、リモコン54自体をオン/オフするための電源スイッチは設けておらず、リモコン54の入力手段80のいずれかを操作することによってリモコン54はオンとなり、一定時間(たとえば、30秒)以上操作しなければ自動的にオフとなるようにしてある。
Bトリガースイッチ80iもまた、押しボタンスイッチであり、主として、弾を撃つなどのトリガを模した入力を行ったり、リモコン54で選択した位置を指定したりするために使用され得る。また、Bトリガースイッチ80iを押し続けると、プレイヤオブジェクトの動作やパラメータを一定の状態に維持することもできる。また、一定の場合には、Bトリガースイッチ80iは、通常のBボタンと同様に機能し、Aボタン80dによって決定したアクションやコマンドなどを取り消すなどのために使用される。
また、図6(E)に示すように、ハウジング98の後端面に外部拡張コネクタ100が設けられ、また、図6(B)に示すように、ハウジング98の上面であり、後端面側にはインジケータ102が設けられる。外部拡張コネクタ100は、リモコン54とは異なる拡張コントローラを接続するためなどに使用される。インジケータ102は、たとえば、4つのLEDで構成される。インジケータ102では、たとえば4つのうちのいずれか1つを点灯させることにより、点灯したLEDに応じて、リモコン54の識別情報(コントローラ番号)を示すことができる。また、インジケータ102では、点灯させるLEDの個数によってリモコン54の電池残量を示すこともできる。
さらに、リモコン54は、撮像情報演算部104(図7参照)を有しており、図6(A)に示すように、ハウジング98の先端面には撮像情報演算部104の光入射口106が設けられる。また、リモコン54は、スピーカ108(図7参照)を有しており、このスピーカ108は、図6(B)に示すように、ハウジング98の上面であり、1ボタン80bとHOMEボタン80fとの間に設けられる音抜き孔110に対応して、ハウジング98内部に設けられる。
なお、図6(A)ないし図6(E)に示したリモコン54の形状や、各入力手段80の形状、数および設置位置等は単なる一例に過ぎず、それらは適宜改変可能である。
図7はリモコン54の電気的な構成を示すブロック図である。この図7を参照して、リモコン54はプロセッサ112を含み、このプロセッサ112には、内部バス(図示せず)によって、外部拡張コネクタ100、入力手段80、メモリ114、加速度センサ116、無線モジュール118、撮像情報演算部104、LED120(インジケータ102)、バイブレータ122、スピーカ108および電源回路124が接続される。また、無線モジュール118には、アンテナ118aが接続される。
このリモコン54の各コンポーネントには、電源回路124によって電源が供給される。電源回路124は、典型的にはハウジング98内に取替可能に収容される電池である。外部拡張コネクタ100を介して接続される拡張ユニット(ゲームコントローラ10など)にも、この電源回路124から電源を供給することができる。
なお、簡単のため、図7では省略するが、上述したように、インジケータ102は4つのLED120によって構成される。
プロセッサ112は、リモコン54の全体制御を司り、入力手段80、加速度センサ116および撮像情報演算部104によって入力された情報(入力情報)、ならびに外部拡張コネクタ100を介して取得した情報(ゲームコントローラ10からのデータなど)を、入力データ(操作データ)として無線モジュール118およびアンテナ118aを介してゲーム機52に送信(入力)する。このとき、プロセッサ112は、メモリ114を作業領域ないしバッファ領域として用いる。また、上述した入力手段80(80a−80i)からの操作信号(操作データ)は、プロセッサ112に入力され、プロセッサ112は操作データを一旦メモリ114に記憶する。
加速度センサ116は、リモコン54の縦方向(y軸方向)、横方向(x軸方向)および前後方向(z軸方向)の3軸で各々の加速度を検出する。この加速度センサ116は、典型的には、静電容量式の加速度センサであるが、他の方式のものを用いるようにしてもよい。
たとえば、加速度センサ116は、第1所定時間毎に、x軸,y軸,z軸の各々についての加速度(ax,ay,az)を検出し、検出した加速度のデータ(加速度データ)をプロセッサ112に入力する。たとえば、加速度センサ116は、各軸方向の加速度を、−2.0g〜2.0g(gは重力加速度である。以下、同じ。)の範囲で検出する。プロセッサ112は、加速度センサ116から与えられる加速度データを、第2所定時間毎に検出し、一旦メモリ114に記憶する。
プロセッサ112は、操作データ、加速度データおよび後述するマーカ座標データの少なくとも1つを含む入力データ(操作データ)を作成し、作成した入力データを、第3所定時間(たとえば、5msec)毎にゲーム機52に送信する。プロセッサ112は、入力データに、外部拡張コネクタ100を介して受信したゲームコントローラ10からのデータを含めることができる。
なお、図6(A)−図6(E)では省略したが、この実施例では、加速度センサ116は、ハウジング98内部の基板上の十字キー80aが配置される付近に設けられる。
ここで、加速度センサ116から出力される加速度データに基づいて、ゲーム機52のプロセッサ(たとえば、CPU82)またはリモコン54のプロセッサ(たとえば、プロセッサ112)などのコンピュータが処理を行うことによって、リモコン54に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
たとえば、リモコン54に1軸の加速度センサ116を搭載し、当該リモコン54が静的な状態であることを前提としてコンピュータ側で処理する場合、すなわち、加速度センサ116によって検出される加速度が重力加速度のみであるとして処理する場合、リモコン54が現実に静的な状態であれば、検出された加速度データに基づいてリモコン54の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサ116の検出軸が鉛直下方向である状態を基準としたとき、1g(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかを知ることもできる。
また、リモコン54に多軸の加速度センサ116を搭載する場合には、さらに各軸の加速度データに対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサ116の出力に基づいて、プロセッサ112がリモコン54の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータの算出処理を行うことなく、加速度センサ116からの出力に基づいて、おおよその傾きを推定できるような処理としてもよい。このように、加速度センサ116をプロセッサ112と組み合わせることによって、リモコン54の傾き、姿勢または位置を判定することができる。
一方、加速度センサ116が動的な状態を前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動きの方向などを知ることができる。具体的には、加速度センサ116を搭載するリモコン54がユーザの手で動的に加速されて動かされている場合に、加速度センサ116によって生成される加速度データを処理することによって、リモコン54の様々な動きおよび/または位置を算出することができる。
なお、加速度センサ116が動的な状態であることを前提とする場合であっても、加速度センサ116の動きに応じた加速度を所定の処理により除去すれば、重力方向に対する傾きを知ることができる。他の実施例では、加速度センサ116は、加速度データをプロセッサ112に出力する前に、内蔵の加速度検出手段から出力される加速度信号(加速度データ)に対して所望の処理を行うための、組込み式の信号処理装置また他の種類の専用の処理装置を備えてもよい。たとえば、組込み式または専用の処理装置は、加速度センサ116が静的な加速度(たとえば、重力加速度)を検出するためのものである場合、検知された加速度データをそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
無線モジュール118は、たとえばBluetoothの技術を用いて、所定周波数の搬送波を入力データで変調し、その微弱電波信号をアンテナ118aから放射する。つまり、入力データは、無線モジュール118によって微弱電波信号に変調されてアンテナ118a(リモコン54)から送信される。この微弱電波信号が上述したゲーム機52に設けられた無線コントローラモジュール94によって受信される。受信された微弱電波は、復調および復号の処理を施され、したがって、ゲーム機52(CPU82)は、リモコン54からの入力データを取得することができる。そして、CPU82は、取得した入力データとアプリケーションプログラム(ゲームプログラム)とに従ってアプリケーションの処理(ゲーム処理)を行うことができる。
さらに、上述したように、リモコン54には、撮像情報演算部104が設けられる。この撮像情報演算部104は、赤外線フィルタ104a、レンズ104b、撮像素子104cおよび画像処理回路104dによって構成される。赤外線フィルタ104aは、リモコン54の前方から入射する光から赤外線のみを通過させる。上述したように、モニタ76の表示画面近傍(周辺)に配置されるマーカ78mおよび78nは、モニタ76の前方に向かって赤外光を出力する赤外LEDである。したがって、赤外線フィルタ104aを設けることによってマーカ78mおよび78nの画像をより正確に撮像することができる。レンズ104bは、赤外線フィルタ104aを透過した赤外線を集光して撮像素子104cへ出射する。撮像素子104cは、たとえばCMOSセンサあるいはCCDのような固体撮像素子であり、レンズ104bによって集光された赤外線を撮像する。したがって、撮像素子104cは、赤外線フィルタ104aを通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子104cによって撮像された画像を撮像画像と呼ぶ。撮像素子104cによって生成された画像データは、画像処理回路104dで処理される。画像処理回路104dは、撮像画像内における撮像対象(マーカ78mおよび78n)の位置を算出し、第4所定時間毎に、当該位置を示す各座標値を撮像データ(後述するマーカ座標データ)としてプロセッサ112に出力する。なお、画像処理回路104dにおける処理については後述する。
図8は、ビデオゲームシステム50でリモコン54を用いてゲームプレイするときの状態を概説する図解図である。図8に示すように、プレイヤは、一方の手でリモコン54を把持する。厳密に言うと、リモコン54のポインティング機能を使用する場合、プレイヤは、リモコン54の先端面(撮像情報演算部104が撮像する光の入射口106側)がマーカ78mおよび78nの方を向く状態でリモコン54を把持する。ただし、図4からも分かるように、マーカ78mおよび78nは、モニタ76の画面の横方向と平行に配置されている。この状態で、プレイヤは、リモコン54が指示する画面上の位置を変更したり、リモコン54と各マーカ78mおよび78nとの距離を変更したりすることによってゲーム操作を行うことができる。
図9は、マーカ78mおよび78nと、リモコン54との視野角を説明するための図である。図9に示すように、マーカ78mおよび78nは、それぞれ、視野角θ1の範囲で赤外光を放射する。また、撮像情報演算部104の撮像素子104cは、リモコン54の視線方向を中心とした視野角θ2の範囲で入射する光を受光することができる。たとえば、マーカ78mおよび78nの視野角θ1は、共に34°(半値角)であり、一方、撮像素子104cの視野角θ2は41°である。プレイヤは、撮像素子104cが2つのマーカ78mおよび78nからの赤外光を受光することが可能な位置および向きとなるように、リモコン54を把持する。具体的には、撮像素子104cの視野角θ2の中にマーカ78mおよび78nの少なくとも一方が存在し、かつ、マーカ78mまたは78nの少なくとも一方の視野角θ1の中にリモコン54が存在する状態となるように、プレイヤはリモコン54を把持する。この状態にあるとき、リモコン54は、マーカ78mおよび78nの少なくとも一方を検知することができる。プレイヤは、この状態を満たす範囲でリモコン54の位置および向きを変化させることによってゲーム操作を行うことができる。なお、マーカ78mおよび78nのいずれか一方のみが検出される場合には、たとえば、直前の2つのマーカ78mおよび78nを検出したデータを利用して、検出されない他方のマーカの代わりに仮のマーカ座標を設定することによって、リモコン54の指示位置を算出することができる。
なお、リモコン54の位置および向きがこの範囲外となった場合、リモコン54の位置および向きに基づいたゲーム操作を行うことができなくなる。以下では、上記範囲を「操作可能範囲」と呼ぶ。
操作可能範囲内でリモコン54が把持される場合、撮像情報演算部104によって各マーカ78mおよび78nの画像が撮像される。すなわち、撮像素子104cによって得られる撮像画像には、撮像対象である各マーカ78mおよび78nの画像(対象画像)が含まれる。図10は、対象画像を含む撮像画像の一例を示す図である。対象画像を含む撮像画像の画像データを用いて、画像処理回路104dは、各マーカ78mおよび78nの撮像画像における位置を表す座標(マーカ座標)を算出する。
撮像画像の画像データにおいて対象画像は高輝度部分として現れるため、画像処理回路104dは、まず、この高輝度部分を対象画像の候補として検出する。次に、画像処理回路104dは、検出された高輝度部分の大きさに基づいて、その高輝度部分が対象画像であるか否かを判定する。撮像画像には、対象画像である2つのマーカ78mおよび78nに対応する画像78m’および78n’のみならず、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。高輝度部分が対象画像であるか否かの判定処理は、対象画像である画像78m’および78n’と、それ以外の画像とを区別し、対象画像を正確に検出するために実行される。具体的には、当該判定処理においては、検出された高輝度部分が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度部分が所定範囲内の大きさである場合には、当該高輝度部分は対象画像を表すと判定される。逆に、高輝度部分が所定範囲内の大きさでない場合には、当該高輝度部分は対象画像以外の画像を表すと判定される。
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度部分について、画像処理回路104dは当該高輝度部分の位置を算出する。具体的には、当該高輝度部分の重心位置を算出する。ここでは、当該重心位置の座標をマーカ座標と呼ぶ。また、重心位置は撮像素子104cの解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子104cによって撮像された撮像画像の解像度が126×96であるとし、重心位置は1024×768のスケールで算出されるものとする。つまり、マーカ座標は、(0,0)から(1024,768)までの整数値で表現される。
なお、撮像画像における位置は、撮像画像の左上を原点とし、下向きをY軸正方向とし、右向きをX軸正方向とする座標系(XY座標系)で表現されるものとする。
また、対象画像が正しく検出される場合には、判定処理によって2つの高輝度部分が対象画像として判定されるので、2箇所のマーカ座標が算出される。画像処理回路104dは、算出された2箇所のマーカ座標を示すデータを出力する。出力されたマーカ座標のデータ(マーカ座標データ)は、上述したように、プロセッサ112によって入力データに含まれ、ゲーム機52に送信される。
ゲーム機52(CPU82)は、受信した入力データからマーカ座標データを検出すると、このマーカ座標データに基づいて、モニタ76の画面上におけるリモコン54の指示位置(指示座標)と、リモコン54からマーカ78mおよび78nまでの各距離とを算出することができる。具体的には、2つのマーカ座標の中点の位置から、リモコン54の向いている位置すなわち指示位置が算出される。なお、リモコン54の指示位置の座標をマーカ座標から算出する際には、座標系が図10の撮像画像の座標系から画面上の位置を表すための座標系に適宜に変換される。
なお、この実施例では、リモコン54で撮像データに所定の演算処理を行ってマーカ座標を検出して、そのマーカ座標データをゲーム機52に送信するようにしている。しかし、他の実施例では、撮像データを入力データとしてリモコン54からゲーム機52に送信し、ゲーム機52のCPU82が撮像データに所定の演算処理を行って、マーカ座標および指示位置の座標を検出するようにしてもよい。
また、撮像画像における対象画像間の距離は、リモコン54と、マーカ78mおよび78nとの距離に応じて変化する。マーカ78mおよび78n間の距離、撮像画像の幅、撮像素子104cの視野角θ2が予め決まっているので、2つのマーカ座標間の距離を算出することによって、ゲーム機52はリモコン54とマーカ78mおよび78nとの間の現在の距離を算出することができる。
このようなゲームシステム50において、ゲームコントローラ10は、プレイヤのかける荷重によるゲーム操作のために使用される。ゲームコントローラ10のコネクタ24をリモコン54の外部拡張コネクタ100に接続することによって、ゲームコントローラ10とリモコン54とが接続される。これによって、ゲームコントローラ10は、リモコン54を介してゲーム機52との間でデータを送受信することができる。
上述のように、ゲーム機52で荷重を必要とするときだけ、ゲームコントローラ10で荷重を検出することができる。具体的には、ゲーム機52において、ゲームコントローラ10で検出される荷重が必要とされるときには、ゲーム機52のCPU82はゲームコントローラ10に対する荷重取得命令をリモコン54に無線により送信する。リモコン54のプロセッサ112は、ゲーム機52から荷重取得命令を受信すると、外部拡張コネクタ100を介して、ゲームコントローラ10に当該荷重取得命令を送信する。ゲームコントローラ10のマイコン20は、コネクタ24およびケーブル32を介して荷重取得命令を受信すると、DC−DCコンバータ26を制御して、荷重センサ14、増幅器28およびADコンバータ22に電源を供給する。これによって、各荷重センサ14にかかる荷重を示す信号が出力され、各増幅器28で増幅されてADコンバータ22に与えられる。ADコンバータ22は当該信号をディジタルデータに変換して、マイコン20に入力する。したがって、マイコン20は、4つの荷重センサ14によって検出された荷重検出値データを取得することができる。
そして、マイコン20は、取得した荷重検出値データをケーブル32およびコネクタ24を介してリモコン54に送信する。荷重検出値データは、そのまま送信されてよいし、検出値に所定の演算処理または荷重取得命令に応じた演算処理などを施した後に送信されてもよい。リモコン54のプロセッサ112は、ゲームコントローラ10から外部拡張コネクタ100を介して荷重検出値データを受信すると、メモリ114にこれを記憶する。そして、プロセッサ112は、当該荷重検出値データを含む入力データ(操作データ)を生成し、当該入力データを無線モジュール118を介してゲーム機52に送信する。ゲーム機52のCPU82は、受信した入力データからゲームコントローラ10の荷重値を取得して、ゲーム処理に使用することができる。したがって、プレイヤは、ゲームコントローラ10にかける荷重によって様々なゲーム操作を行うことができる。
図11は、ゲームコントローラ10を用いてゲームプレイをするときの状態を概説する図解図である。なお、図11では、ゲームコントローラ10の台12とモニタ76以外は省略している。荷重を用いてゲームをプレイする際には、典型的には、図11に示すように、プレイヤはゲームコントローラ10の台12上に両足を乗せる。プレイヤによってゲームコントローラ10に印加される荷重が4つの荷重センサ14によって検出され、荷重検出値がプレイヤによる操作データとしてゲーム機52に送信される。台12上の乗る位置によって、各荷重センサ14で検出される荷重値は異なるものとなる。また、プレイヤが台12の上で、たとえば体を動かしたり右足と左足にかける荷重を変化させたりすること等に応じて、各荷重センサ14で検出される荷重値は変化する。ゲーム機52では、このプレイヤによってかけられた荷重に基づいてゲーム処理が行われる。したがって、プレイヤは、たとえば、台12上で乗る位置を変えたり体を動かしたりするなど、適宜な荷重をかけるゲーム操作を行うことによって、ゲームをプレイすることができる。
たとえば4つの荷重センサ14で検出される4つの荷重値の単なる合計値に基づいて実行されるようなゲームの場合には、プレイヤはゲームコントローラ10の4つの荷重センサ14に対して任意の位置をとることができ、つまり、プレイヤは台12の上の任意の位置に任意の向きで乗ってゲームをプレイすることができる。しかし、ゲームの種類によっては、各荷重センサ14で検出される荷重値がプレイヤから見ていずれの方向の荷重値であるかを識別して処理を行う必要があり、つまり、ゲームコントローラ10の4つの荷重センサ14とプレイヤとの位置関係が把握されている必要がある。たとえば、4つの荷重センサ14とプレイヤとの位置関係を予め規定しておき、当該所定の位置関係が得られるようにプレイヤが台12上に乗ることが前提とされてよい。典型的には、台12の中央に乗ったプレイヤの前後左右にそれぞれ荷重センサ14が2つずつ存在するような位置関係、つまり、プレイヤがゲームコントローラ10の台12の中央に乗ったとき、プレイヤの中心から右前、左前、右後および左後の方向にそれぞれ荷重センサ14が存在するような位置関係が規定される。モニタ76の画面がプレイヤの正面にあることを前提とする典型的なゲームの場合、図11に示すように、台12の所定の1辺がモニタ76側に存在しかつ画面に平行になるようにしてゲームコントローラ10を配置させる。これによって、上記のような所定の位置関係が容易に得られ、各荷重センサ14の荷重値は、プレイヤから見て所定の方向の荷重値となる。
なお、プレイヤに対して、上記所定の位置関係が得られるようなゲームコントローラ10の配置に関する情報を提供するために、台12には目印を設けるようにしてよい。たとえば、台12の所定の1辺に隣接する2つの荷重センサ14がプレイヤの前方に、つまり、モニタ76側に配置されるように、当該所定の1辺に沿った台12の上面または側面などの所定の部分に、目印を設けるようにしてよい。あるいは、当該所定の1辺に沿った台12の側面または下面の所定の部分からコネクタ24のケーブル32が出されるように構成して、このケーブル32の出る位置を上記目印としてもよい。
ゲームコントローラ10およびゲーム機52は、荷重検出値データに含まれる各荷重センサ14の識別情報と、予め設定(記憶)された各荷重センサ14の配置情報とに基づいて、各荷重検出値がプレイヤから見ていずれの方向に対応するかを把握することができる。したがって、たとえば前後左右の操作方向のようなプレイヤによるゲーム操作の意図を把握することができる。
なお、各荷重センサ14のプレイヤに対する配置は予め規定せずに、初期設定などでプレイヤの入力によって設定されるようにしてもよい。たとえば、プレイヤから見て所定の方向(左前、右前、左後または右後など)の部分に乗るようにプレイヤに指示する画面を表示するとともに荷重を取得することによって、各荷重センサ14のプレイヤに対する位置関係を特定することができ、この設定による配置情報を生成して記憶することができる。
また、他の実施例では、プレイヤの前後左右に荷重センサ14が1つずつ存在するような位置関係が前提とされてもよい。この場合、ゲームコントローラ10は、たとえば、台12の所定の1隅がモニタ76側に存在しかつ所定の対角線が画面に対して平行になるようにして配置される。なお、上述のような目印は台12の所定の1隅の上面または側面などに設けられてよい。
このゲームシステム10では、ゲーム処理に必要な荷重値の個数が判別され、当該判別された個数の荷重値が4つの荷重検出値から算出される。ゲーム処理は当該必要な個数の荷重算出値に基づいて実行される。4つの荷重検出値から必要な個数の荷重値を算出してゲーム処理を行うことができるので、荷重センサ14を備えるゲームコントローラ10を用いた新規なゲームを提案し、様々なゲームを実行することができる。
この実施例では、必要な荷重値の個数が一定であるようなゲームが実行される。図12から図14に、この実施例の3つのゲームの画面がそれぞれ示されている。
図12には必要な個数が1つであるゲームの画面が示される。このゲームでは、4つの荷重検出値から1つの荷重値が算出され、当該荷重値に基づいてゲーム処理が実行される。このゲームは全荷重ゲーム(全荷重モード)と呼ばれ、4つの荷重検出値の合計値(全荷重値)に基づくゲームである。一例として、スクワットゲームであり、プレイヤが台12の上でスクワット(膝の屈伸運動)をするゲームである。たとえば、画面には「スクワットをして下さい!」のような題目が表示され、制限時間内にできる限り多くの回数スクワットをすることが要求される。プレイヤがスクワットを成功したかどうかが、全荷重値に基づいて判断される。たとえば、画面には、全荷重値の時間変化を示す波形がグラフによって示される。波形が所定の変化をした場合、成功と判定されて、成功の文字と成功回数が表示される。波形が所定の変化をしなかった場合、失敗と判定され、失敗の文字が表示される。そして、制限時間内に成功した回数に応じた得点がプレイヤに与えられる。
図13には必要な個数が2つであるゲームの画面が示される。このゲームでは、4つの荷重検出値から2つの荷重値が算出され、当該2つの荷重値に基づいてゲーム処理が実行される。このゲームは左右バランスゲーム(左右バランスモード)と呼ばれ、プレイヤの左右2方向のバランスによってプレイされる。具体的には、図13の下部に示すように、ゲームコントローラ10の4つの荷重センサ14がプレイヤの左側の2つと右側の2つの2組に分けられる。なお、ゲームコントローラ10上の点線表示される2つの形は、プレイヤと4つの荷重センサ14の位置関係を分り易くするために、プレイヤの足を模式的に示したものである。また、プレイヤの左上(左前)の荷重センサ14が参照符号「14a」、左下(左後)の荷重センサ14が「14b」、右上(右前)の荷重センサ14が「14c」、右下(右後)の荷重センサ14が「14d」で示される。これら左右2組それぞれの荷重値が算出される。つまり、プレイヤの左側2つの荷重センサ14aおよび14bの荷重検出値の合計値(左荷重値)と、右側2つの荷重センサ14cおよび14dの荷重検出値の合計値(右荷重値)とが算出される。このゲームでは、左荷重値および右荷重値がそれぞれ所定範囲内に所定時間保たれるように、左右のバランスをとることが要求される。画面には、たとえば「枠内で3秒間停止して下さい!」のような題目とともに、左荷重値を示す棒グラフ、右荷重値を示す棒グラフ、ならびに左荷重値および右荷重値のそれぞれの目標値の範囲を示す2つの枠が表示される。各荷重値を示すバー上端が各枠内に収まり、かつ、その状態が3秒間続けば、ゲームクリアとなり得点が与えられる。
図14には必要な個数が4つであるゲームの画面が示される。このゲームでは、4つの荷重検出値から4つの荷重値が算出され、当該4つの荷重値に基づいてゲーム処理が実行される。このゲームは4方向バランスゲーム(4方向バランスモード)と呼ばれ、プレイヤの上下左右4方向のバランスによってプレイされる。なお、ここで、プレイヤの上下方向はプレイヤの前後方向を意味する。具体的には、図14の下部に示すように、プレイヤの上下左右4方向のそれぞれの荷重値が算出される。つまり、プレイヤの上側2つの荷重センサ14aおよび14cの荷重検出値の合計値(上荷重値)と、下側2つの荷重センサの14bおよび14dの荷重検出値の合計値(下荷重値)と、左側2つの荷重センサ14aおよび14bの荷重検出値の合計値(左荷重値)と、右側2つの荷重センサ14cおよび14dの荷重検出値の合計値(右荷重値)とが算出される。このゲームは、上荷重値、下荷重値、左荷重値および右荷重値がそれぞれ所定範囲内に所定時間保たれるように、上下左右のバランスをとることが要求される。画面には、上述の左右バランスゲームと同様に、題目とともに、それぞれの荷重算出値を示す4つの棒グラフと、それぞれの目標値の範囲を示す4つの枠が表示される。各荷重値を示すバー上端が各枠内に収まり、かつ、その状態が3秒間続けば、ゲームクリアとなり得点が与えられる。
図15にはゲーム機52のメモリマップの一例が示される。メモリマップはプログラム記憶領域200およびデータ記憶領域202を含む。プログラムとデータの一部とは、光ディスク60から一度に全部または必要に応じて部分的に、かつ順次的に読み出され、外部メインメモリ86に記憶される。なお、図15にはメモリマップの一部のみが示されており、処理に必要な他のプログラムおよびデータも記憶される。たとえば、音声、効果音、音楽などの音を出力するためのサウンドデータ、画面を生成するための画像データ、音出力プログラム、画像生成表示プログラムなどが、光ディスク60から読み出されてデータ記憶領域202またはプログラム記憶領域200に記憶される。なお、本実施例においては、プログラムとデータの一部は光ディスク60から読み出されるが、別の実施例においては、たとえばゲーム機52に内蔵されるフラッシュメモリ70等の不揮発的な記憶媒体に予め記憶したプログラムやデータを読み出して、外部メインメモリ86に記憶するようにしてもよい。その際さらに、ゲーム機52の無線通信モジュール92または拡張コネクタ96に接続される通信モジュール等を用いて、ネットワーク経由でダウンロードしたプログラムを当該記憶媒体に記憶しておくようにしてもよい。
記憶領域204にはゲーム選択プログラムが記憶される。このプログラムは、実行されるゲーム(モード)を選択するためのものである。たとえばプレイヤの入力によって、複数のゲーム(上述の全荷重ゲーム、左右バランスゲーム、4方向バランスゲーム)から1つのゲームが選択される。このプレイヤ入力による選択の場合、複数のゲームのそれぞれに対応付けられたアイコンなどを選択肢として有するゲーム選択画面が表示され、リモコン54の撮像情報演算部104を用いた位置指示、十字キー80aを用いた指示、またはゲームコントローラ10を用いた指示等によって、アイコン等が選択されてよい。あるいは、ゲームは、プログラムにおいて予め決められた実行順序に従って、またはランダムに選択されてもよい。
記憶領域206には命令送信プログラムが記憶される。このプログラムは、荷重取得命令をゲームコントローラ10宛に送信するためのものである。荷重取得命令は、荷重値を必要とするとき(荷重取得タイミング)に送信される。荷重取得タイミングは、たとえば一定時間ごとに訪れるように設定されてもよいし、所定のゲーム状況やイベント等が生じたときであってもよい。この荷重取得命令を受けて、ゲームコントローラ10では荷重センサ14によって荷重が検出され、当該荷重検出値がゲーム機52宛に送信される。
記憶領域208には荷重検出値取得プログラムが記憶される。このプログラムは、ゲームコントローラ10から送信される荷重検出値を受信して取得するためのものである。
記憶領域210には補正プログラムが記憶される。このプログラムは、取得した荷重検出値を補正するためのものである。たとえば、プレイヤが台12の中央に、つまり、重心が台12の中心に位置するようにして乗っていると思っている場合でも、プレイヤの姿勢、立つ位置、身体的特徴(左右の足の長さの違い等)、癖のような個人的特性によって、4つの荷重センサ14で検出される荷重値にはばらつきが生じることがある。したがって、この実施例では、プレイヤの荷重によるゲーム操作を精度良く認識するために、荷重検出値を適宜に補正する。この補正は、4つの荷重センサ14の荷重検出値の差分に基づいて行われる。具体的には、次に説明する補正値算出プログラムによって算出される補正値に基づいて検出値が補正される。
記憶領域212には補正値算出プログラムが記憶される。このプログラムは荷重検出値を補正するための補正値を算出するためのものである。この補正値算出は、ゲームを開始する前に、初期設定などによって実行される。たとえば、プレイヤに対してゲームコントローラ10の台12の中央に乗るように指示する画像がモニタ76に表示され、4つの荷重センサ14による4つの荷重検出値が取得される。4つの荷重検出値から、異なる組合せによる2種類の差分が算出され、当該2種類の差分に基づいて補正値が算出される。具体的には、4つの荷重センサ14を第1の2組に、つまり、左と右に分けて、上述の左荷重値と右荷重値を算出し、これら左荷重値と右荷重値の差をとることによって、第1の差分が算出される。この第1の差分に基づいて、左右2組に分けられた荷重検出値のそれぞれを補正するための第1の補正値が算出される。また、4つの荷重センサ14を第2の2組に、つまり、上と下に分けて、上述の上荷重値および下荷重値を算出し、これら上荷重値と下荷重値の差をとることによって、第2の差分が算出される。この第2の差分に基づいて、上下2組に分けられた荷重検出値のそれぞれを補正するための第2の補正値が算出される。そして、第1の差分および第2の差分に基づいて、各荷重検出値の最終補正値が算出される。各荷重検出値の補正は各最終補正値に基づいて行われることとなる。
たとえば、左荷重値が60、右荷重値が40であったとき、第1の差分は20であり、当該差分を4等分することによって第1の補正値が算出される。すなわち、左上荷重センサ14aと左下荷重センサ14bのための第1の補正値は、−5(=−20/4)となり、右上荷重センサ14cと右下荷重センサ14dのための第1の補正値は、5(=20/4)となる。また、上荷重値が30、下荷重値が70であったとき、第2の差分は40であり、当該差分を4等分することによって第2の補正値が算出される。すなわち、左上荷重センサ14aと右上荷重センサ14cのための第2の補正値は、10(=40/4)となり、左下荷重センサ14bと右下荷重センサ14dのための第2の補正値は、−10(=−40/4)となる。4つの荷重センサ14のために最終的に設定される補正値は、それぞれの第1の補正値と第2の補正値に基づいて算出される。具体的には、第1の補正値と第2の補正値とを合算することによって、最終補正値は算出される。つまり、左上荷重センサ14aのための最終補正値は、+5(=−5+10)となり、左下荷重センサ14bのための最終補正値は、−15(=−5−10)となり、右上荷重センサ14cのための最終補正値は、+15(=5+10)となり、右下荷重センサ14dのための最終補正
値は、−5(=5−10)となる。
記憶領域214には必要個数判別プログラムが記憶される。このプログラムはゲーム処理に必要な荷重値の個数を判別するためのものである。この実施例では、上述のような全荷重ゲーム、左右バランスゲーム、4方向バランスゲームなどが実行されるので、必要な荷重値の個数はゲームまたはゲームモード等ごとに予め決められており、後述する個数テーブルのようなゲームまたはゲームモード等ごとの必要個数を設定した情報が予め記憶されている。したがって、ゲーム名のような識別情報やゲームの種類もしくはモード等によって、必要個数を判別することができる。なお、他の実施例では、1つのゲームにおいて、必要個数がゲームの場面や状況などに応じて変化してもよく、このような場合、ゲームの場面等によって必要個数が判別されることとなる。
記憶領域216には荷重値算出プログラムが記憶される。このプログラムは、4つの荷重センサ14からの荷重検出値に基づいて、ゲーム処理に必要な個数の荷重値を算出するためのものである。なお、荷重値は、上述の補正プログラムによる補正が行われた場合、補正された荷重検出値に基づいて算出される。具体的には、全荷重ゲームの場合、4つの荷重検出値の合計値(全荷重値)が算出され、左右バランスゲームの場合、左荷重値および右荷重値が算出され、4方向バランスゲームの場合、左荷重値、右荷重値、上荷重値および下荷重値が算出される。4つの荷重検出値から必要な個数の荷重値を算出することができるので、ゲームに応じて様々な個数の荷重値を用いたゲーム処理を行うことが可能になる。なお、ゲームによっては、荷重検出値(補正された荷重検出値)をそのまま使用する場合もあり、このような場合、荷重検出値(補正された荷重検出値)そのままの値が荷重算出値として算出される。
記憶領域218にはゲーム処理プログラムが記憶される。このプログラムは荷重算出値に基づいてゲーム処理を実行するためのものである。この実施例では、上述の全荷重ゲーム、左右バランスゲーム、4方向バランスゲーム等のためのゲーム処理が実行される。
記憶領域220は入力データバッファであり、ゲームコントローラ10およびリモコン54からの入力データ(操作データ)が記憶される。記憶領域222は選択ゲーム記憶領域であり、上述のゲーム選択プログラムによって選択されたゲームの識別情報が記憶される。
記憶領域224には上述の荷重検出値取得プログラムによって入力データバッファ220から取得された4つの荷重センサ14の荷重検出値が記憶される。記憶領域226には補正値、つまり、上述の補正値算出プログラムによって算出された4つの荷重センサ14のための最終補正値が記憶される。記憶領域228には上述の補正プログラムによって補正された荷重検出値が記憶される。
記憶領域230には、ゲーム処理に必要な荷重値の個数を示す個数テーブルが記憶される。この実施例ではゲーム名や種類等に対応付けて必要個数が記憶される。記憶領域232には上述の荷重値算出プログラムによって取得される荷重算出値が記憶される。
記憶領域234にはスクワットフラグが記憶される。スクワットフラグは、上述の全荷重ゲームにおいて、スクワット中であるか静止中であるかを示す。たとえば、4つの荷重検出値の合計値(全荷重値)の変化が所定値以上であるとき、スクワットフラグはオンにされる。記憶領域236には、プレイヤがスクワットに成功した回数を示すスクワット成功カウンタが記憶される。記憶領域238には、時間カウンタが記憶される。上述の全荷重ゲームにおいては、スクワット判定のために、1回のスクワットにかかった時間を測定するために使用される。また、上述の左右バランスゲームおよび4方向バランスゲームにおいては、各荷重算出値が所定の目標範囲内になっている時間を測定するために使用される。
図16にはゲームコントローラ10の動作の一例が示される。ゲームコントローラ10のマイコン20は、図16の動作を一定時間ごとに実行する。まず、ステップS1で、マイコン20は、ゲーム機52からの荷重取得命令を受信したか否かを判断する。この実施例では、ゲームコントローラ10はリモコン54に接続されているので、マイコン20は、コネクタ24を介してリモコン54からゲーム機52の命令を受信したか否かを判断する。
ステップS1で“YES”の場合、マイコン20は、ステップS3で、DC−DCコンバータ26を制御して、4つの荷重センサ14に電源を供給する。同時に、各増幅器28およびADコンバータ22にも電源が供給される。したがって、各荷重センサ14は検出される荷重に応じた信号を各増幅器28を介してADコンバータ22に与え、ADコンバータ22は各荷重センサ14の荷重検出値を示すデータを生成してマイコン20に与える。
ステップS5で、マイコン20は、4つの荷重センサ14からそれぞれ荷重検出値を取得する。具体的には、マイコン20は、ADコンバータ22から4つの荷重検出値を示すデータを取得して、図示しない内部のメモリに記憶する。
そして、ステップS7で、マイコン20は、取得した4つの荷重検出値データをゲーム機52宛に送信する。この実施例では、当該荷重検出値データは、コネクタ24を介してリモコン54に送信され、リモコン54からゲーム機52に送信される。
一方、ステップS1で“NO”の場合、つまり、ゲーム機52からの荷重取得命令を受信していない場合には、マイコン20は、DC−DCコンバータ26を制御して、4つの荷重センサ14への電源供給を停止する。同時に、各増幅器28およびADコンバータ22への電源供給も停止される。ステップS7またはS9を終了すると、この処理は終了される。このように、ゲームコントローラ10では、荷重検出を必要とするときにだけ電池30による電源が荷重センサ14等に供給されるので、電力消費を抑制することができる。
図17にはリモコン54の動作の一例が示される。なお、図17では、プロセッサ112の動作のうち、ゲームコントローラ10の荷重検出に関連する処理のみを示しており、入力手段80、加速度センサ116および撮像情報演算部104による操作データの取得に関する処理などは省略されている。
プロセッサ112は、ステップS21で、無線モジュール118を介してゲーム機52から荷重取得命令を受信したか否かを判断する。ステップS21で“YES”の場合、プロセッサ112は、ステップS23で、荷重取得命令をゲームコントローラ10にコネクタ100を介して送信する。これによって、ゲームコントローラ10では、上述のように荷重値が検出されて、荷重検出値データがリモコン54に送信される。
ステップS23を終了すると、またはステップS21で“NO”の場合、プロセッサ112は、ステップS25で、ゲームコントローラ10から荷重検出値データをコネクタ100を介して受信したか否かを判断する。ステップS25で“YES”の場合、プロセッサ112は、ステップS27で、受信した4つの荷重検出値データをメモリ114に記憶する。そして、ステップS29で、プロセッサ112は、4つの荷重検出値データを含む入力データ(操作データ)を生成し、当該入力データをゲーム機52に無線モジュール118を介して送信する。これによって、ゲームコントローラ10からの4つの荷重検出値がゲーム機52に与えられる。なお、この送信は、ゲームコントローラ10から荷重検出値データを受信したときに行われてもよいが、入力手段80の操作データ、加速度センサ116で検出された加速度データ、撮像情報演算部104からのマーカ座標データ等を含むリモコン54の入力データの所定の送信タイミングで行われてもよい。ステップS29を終了すると、またはステップS25で“NO”の場合、この処理を終了する。
図18にはゲーム機52の動作の一例が示される。なお、フロー図では荷重に関連する処理のみを示す。CPU82は画面表示(更新)のための処理や音出力のための処理などを並列的に一定時間ごとに実行するが、これらの処理はフロー図において省略されている。
まず、ステップS41で、CPU82は補正値算出処理を実行する。この補正値算出処理は上述の補正値算出プログラムに従って実行され、その詳細な動作の一例は図19に示される。
図19のステップS71で、CPU82は、4つの荷重センサ14からの荷重検出値を取得する。たとえば、CPU82は、GPU84bを用いて、プレイヤにゲームコントローラ10の台12の中央に乗るように指示する画面を生成して当該画面をモニタ76に表示させる。その後、CPU82は、無線コントローラモジュール94を介して、ゲームコントローラ10宛に荷重取得命令を送信する。これに応じて、上述の図16および図17の処理によって、荷重値が検出されて、荷重検出値データを含む入力データ(操作データ)がゲーム機52宛に送信される。このようにして、CPU82は、入力データバッファ220から4つの荷重検出値データを取得することができる。
続いて、CPU82は、ステップS73で、左側2つの荷重検出値の合計値、すなわち、左荷重値を算出し、ステップS75で、右側2つの荷重検出値の合計値、すなわち、右荷重値を算出する。そして、CPU82は、ステップS77で、左荷重値と右荷重値の差分(第1の差分)を算出し、ステップS79で、算出された第1の差分に基づいて、4つの荷重センサ14からの荷重検出値の補正値を算出する。この補正値は、4つの荷重センサ14を左右の2組に分けることによって得られる第1の補正値であり、第1の差分を4等分して各荷重センサ14に割り振ることによって算出される。したがって、各荷重センサ14のための第1の補正値の絶対値は同一であり、左側と右側とで符号が逆になる。
さらに、CPU82は、ステップS81で、上側2つの荷重検出値の合計値、すなわち、上荷重値を算出し、ステップS83で、下側2つの荷重検出値の合計値、すなわち、下荷重値を算出する。そして、CPU82は、ステップS85で、上荷重値と下荷重値の差分(第2の差分)を算出し、ステップS87で、算出された第2の差分に基づいて、4つの荷重センサ14からの荷重検出値の補正値を算出する。この補正値は、4つの荷重センサ14を上下の2組に分けることによって算出される第2の補正値であり、第2の差分を4等分して各荷重センサ14に割り振ることによって算出される。したがって、各荷重センサ14のための第2の補正値の絶対値は同一であり、上側と下側とで符号が逆になる。
続いて、CPU82は、ステップS89で、算出された2つの補正値に基づいて、4つの荷重センサ14の最終補正値を算出する。具体的には、それぞれの荷重センサ14について、第1の補正値と第2の補正値とを合算することによって、最終的に設定される補正値が算出される。そして、ステップS91で、CPU82は、4つの荷重センサ14のそれぞれの最終補正値を補正値記憶領域226に書き込む。ステップS91を終了すると、この補正値算出処理を終了し、処理は図18のステップS43に戻る。
図18のステップS43では、CPU82は、ゲーム選択処理を実行する。この実施例では、上述のように、必要な荷重値の個数の異なる全荷重ゲーム、左右バランスゲーム、および4方向バランスゲームが実行され得るので、実行すべきゲームが、プレイヤの入力、またはプログラムに予め設定された規則等に基づいて選択される。選択されたゲームを示す識別情報が記憶領域222に記憶される。
続いて、CPU82は、選択されたゲームのための処理を開始する。ステップS45で、CPU82は、荷重取得タイミングであるか否かを判断する。荷重取得タイミングは、ゲーム処理において荷重値を必要とするときである。所定時間ごとに荷重が必要とされる場合、当該所定時間が経過する度に荷重取得タイミングであると判断されるように構成される。あるいは、荷重取得タイミングは、ゲームにおいて所定のイベントが生じたときや所定の状況になったとき等であってよい。荷重取得タイミングであると判断されるまで、ステップS45の処理は一定時間ごとに実行される。
ステップS45で“YES”の場合、CPU82は、ステップS47でゲームコントローラ10宛に荷重取得の命令を送信する。具体的には、CPU82は、無線コントローラモジュール94等を介して荷重取得命令をリモコン54に送信する。これに応じて、上述のようなリモコン54およびゲームコントローラ10の処理によって、4つの荷重検出値データを含む操作データがゲームコントローラ10(リモコン54)から送信される。4つの荷重検出値データは、無線コントローラモジュール94等を介して受信されて、入力データバッファ220に記憶される。CPU82は、ステップS49で、ゲームコントローラ10からの4つの荷重検出値データを取得する。具体的には、CPU82は、4つの荷重検出値データを入力データバッファ220から読み出して、荷重検出値記憶領域224に記憶する。
続いて、ステップS51で、CPU82は、補正値記憶領域226に記憶されている補正値に基づいて、4つの荷重検出値を補正する。具体的には、CPU82は、4つの荷重検出値のそれぞれに、4つの荷重センサ14のための最終補正値のそれぞれを合算し、当該算出された値を、補正された荷重検出値のための記憶領域228に記憶する。
そして、CPU82は、続くステップS53からステップS57で、ゲーム処理に必要な荷重値の個数を判別する。この実施例では、選択ゲームごとに必要な個数が一定であるので、記憶領域230に記憶された個数テーブルを参照して、記憶領域222に記憶された選択ゲームに対応する必要な個数を特定することができる。
ステップS53で、CPU82は、必要な個数が1個であるか否かを判断する。“YES”の場合、CPU82はステップS59でゲーム処理1を実行する。この実施例では、必要な個数が1であるのは全荷重ゲームであり、全荷重ゲームのためのゲーム処理1の動作は後述される図20に示される。
一方、ステップS53で“NO”の場合、ステップS55で、CPU82は必要な個数が2個であるか否かを判断する。“YES”の場合、CPU82はステップS61でゲーム処理2を実行する。この実施例では、必要な個数が2であるのは左右バランスゲームであり、左右バランスゲームのためのゲーム処理2の動作は後述される図21に示される。
また、ステップS55で“NO”の場合、ステップS57で、CPU82は必要な個数が4個であるか否かを判断する。“YES”の場合、CPU82はステップS63でゲーム処理3を実行する。この実施例では必要な個数が4個であるのは4方向バランスゲームであり、4方向バランスゲームのためのゲーム処理3の動作は後述される図22に示される。
また、ステップS57で“NO”の場合、CPU82はステップS65でその他のゲーム処理を実行する。
なお、各ゲーム処理においては、ゲーム終了判定が実行され、ゲーム終了ではない場合、処理はステップS45に戻る。したがって、ゲーム終了と判断されるまで、ステップS45からの処理が繰返されて、ゲームが進行される。一方、ゲーム終了であると判断される場合、ステップS59、S61、S63またはS65のゲーム処理が終了される。
図20には必要個数が1個である全荷重ゲームのためのゲーム処理1の動作の一例が示される。このゲーム処理1を開始すると、CPU82は、まず、ステップS101で4つの荷重検出値の合計値(全荷重値)を算出する。この算出は、記憶領域228の補正された荷重検出値を用いて実行される。
次に、ステップS103で、CPU82は合計値(全荷重値)をメモリに記憶する。具体的には、合計値を荷重算出値記憶領域232に書き込む。この記憶領域232には合計値の履歴が記憶される。
この合計値に基づいてスクワットが行われたか否かが判定される。プレイヤがスクワットしている最中は、合計値の変化が大きくなり、つまり、前回の荷重取得タイミングからの変化が所定値以上になる。したがって、合計値の変化が所定値以上であるとき、スクワットが行われていると判断することが可能であり、このときの合計値を記録する。また、スクワットが終わったときには、前回の荷重取得タイミングからの変化が所定値よりも小さくなる。したがって、合計値の変化が所定値以下に変わったときに、1回のスクワットが終了したものとみなして、記録した合計値の時間変化の波形に基づいて、スクワットが実際に行われたのか否かを判定する。このスクワット判定は、波形の上下の長さの判別と、波形の左右の長さの判別とによって行われる。つまり、スクワットの条件は、スクワット中の合計値の最大値と最小値との差が所定値以上であること、および、スクワット中の経過時間が所定値以上であることである。
具体的には、ステップS105で、CPU82は今回の合計値と前回の合計値との差が所定値以上であるか否か、つまり、スクワット中であるか静止中であるかを判断する。ステップS105で“YES”の場合、つまり、スクワットが行われているとみなせる場合、CPU82はステップS107で記憶領域234のスクワットフラグをオンにする。
続くステップS109で、CPU82は記憶領域238の時間カウンタをインクリメントする。これによって、スクワットフラグがオンであるときに経過する時間を計測することができる。
そして、ステップS111で、CPU82はゲーム終了であるか否かを判断する。ゲーム終了条件は、スクワットが所定回数実行されたこと、またはゲーム開始から所定の制限時間を経過したこと等であってよい。ステップS111で“NO”の場合、処理は図18のステップS45に戻る。したがって、合計値に基づくゲーム処理1が続けられることとなる。
一方、ステップS105で“NO”の場合、CPU82は、ステップS113で記憶領域234のスクワットフラグはオンであるか否かを判断する。ここでは、スクワットを行っている状態から静止状態に変化したか否か、つまり、1回のスクワットが終了したか否かが判断される。ステップS113で“YES”の場合、CPU82は、ステップS115で記憶領域234のスクワットフラグをオフにする。ステップS117では、CPU82は記憶領域238の時間カウンタをリセットする。ただし、この時間カウンタにはスクワットフラグがオンからオフになるまでにかかった時間、つまり、今回のスクワットの時間が記録されているので、スクワットの判定に使用するために、リセット前に時間カウンタの示す値をデータ記憶領域202の別の所定領域に記憶しておく。
続いて、ステップS119で、CPU82はスクワットフラグがオンであるときに記憶領域232に記憶された合計値の履歴のうちの最大値と最小値を検出し、最大値と最小値の差を算出する。そして、ステップS121で、CPU82は、算出した最大値と最小値の差が所定値以上であるか否かを判断する。これは、合計値の波形の上下の長さが所定値以上であるか否かを判定している。ステップS121で“YES”の場合、CPU82は、ステップS123で、時間カウントは所定値以上であるか否かを判断する。上述のように、ステップS117の時間カウンタのリセット前に所定領域に記憶しておいたスクワットフラグがオンであるときに経過した時間に基づいて判定がなされる。これは、合計値の波形の左右の長さが所定値以上であるか否かを判定している。ステップS123で“YES”の場合、つまり、スクワットが行われたことが認識できた場合、CPU82は、ステップS125で、記憶領域236のスクワット成功カウンタをインクリメントし、つまり、スクワット成功回数をカウントする。ステップS125を終了すると、処理はステップS111に進む。また、ステップS121で“NO”の場合、またはステップS123で“NO”の場合、スクワットが行われたことが認識できなかったので、処理はそのままステップS111に進む。また、ステップS113で“NO”の場合、つまり、プレイヤがスクワットをせずに静止しているとみなせる場合にも、処理はステップS111に進む。
そして、ステップS111で“YES”の場合、つまり、ゲーム終了条件が満足された場合、CPU82は、ステップS127で記憶領域234のスクワットフラグをオフにし、ステップS129で記憶領域238の時間カウンタをリセットする。続いて、ステップS131で、CPU82は、スクワット成功数に基づく得点処理を実行する。スクワット成功数は、記憶領域236のスクワット成功カウンタに記録されており、この値に基づいてプレイヤの得点が算出される。CPU82は、ステップS133で記憶領域236のスクワット成功カウンタをリセットして、このゲーム処理1を終了する。
図21には必要個数が2個である左右バランスゲームのためのゲーム処理2の動作の一例が示される。このゲーム処理2を開始すると、CPU82は、ステップS151で左側2つの荷重検出値の合計値、すなわち、左荷重値を算出し、ステップS153で右側2つの荷重検出値の合計値、すなわち、右荷重値を算出する。荷重値の算出には、記憶領域228の補正された荷重検出値が使用される。算出された左荷重値および右荷重値は、記憶領域232に記憶される。
なお、左荷重値および右荷重値の算出方法は上述のものに限られない。4つの荷重検出値の合計値を利用して算出することもできる。たとえば、4つの荷重検出値の合計値(全荷重値)と、右側2つの荷重検出値の合計値(右荷重値)とを算出し、両荷重値の差分(または割合)から左側2つの荷重検出値の合計値(左荷重値)を算出するようにしてもよい。
続いて、ステップS155では、CPU82は左荷重値および右荷重値がそれぞれ目標とされる所定の範囲内であるか否かを判断する。ステップS155で“YES”の場合、CPU82は、ステップS157で記憶領域238の時間カウンタをインクリメントする。これによって、左右バランスが目標の状態を維持している時間が計測される。
そして、ステップS159で、CPU82は記憶領域238の時間カウンタの値に基づいて、一定時間(たとえば3秒)が経過したか否かを判断する。つまり、左荷重値および
右荷重値がそれぞれ所定範囲内である左右バランス状態が、3秒間維持されたか否かを判定している。ステップS159で“YES”の場合、つまり、目標の左右バランス状態の所定時間の維持が達成されたとき、CPU82は、ステップS161でゲームクリア処理を実行し、ステップS163で記憶領域238の時間カウンタをリセットする。また、ステップS159で“NO”の場合には、処理はそのままステップS167に進む。
また、ステップS155で“NO”の場合、つまり、目標の左右バランス状態になっていない場合、CPU82はステップS165で記憶領域238の時間カウンタをリセットする。ステップS165を終了すると処理はステップS167へ進む。
そして、ステップS167で、CPU82はゲーム終了であるか否かを判断する。ゲーム終了条件は、ゲーム開始から所定時間が経過したこと、目標の左右バランス状態の維持が達成できなかったこと、所定数の左右バランスゲームがクリアされたこと等であってよい。ステップS167で“NO”の場合、処理は図18のステップS45に戻る。したがって、2つの荷重算出値に基づくゲーム処理2が続けられることとなる。一方、ステップS167で“YES”の場合には、CPU82はステップS169で得点処理を実行し、左右バランスゲームの結果に応じてプレイヤの得点を算出する。ステップS169を終了すると、ゲーム処理2を終了する。
図22には必要個数が4個である4方向バランスゲームのためのゲーム処理3の動作の一例が示される。ゲーム処理3を開始すると、CPU82は、ステップS181で上荷重値、下荷重値、右荷重値および左荷重値をそれぞれ算出する。なお、上荷重値は、左上の荷重値と右上の荷重値との合計値であり、下荷重値は、左下の荷重値と右下の荷重値との合計値であり、右荷重値は、右上の荷重値と右下の荷重値との合計値であり、左荷重値は、左上の荷重値と左下の荷重値との合計値である。算出には、記憶領域228の補正された荷重検出値が使用される。算出された4個の荷重値は、記憶領域232に記憶される。
続いて、ステップS183で、CPU82は4つの荷重算出値がそれぞれ目標とされる所定範囲内であるか否かを判断する。ステップS183で“YES”の場合、CPU82は、ステップS185で記憶領域238の時間カウンタをインクリメントする。これによって、4方向バランスが目標の状態を維持している時間が計測される。
そして、ステップS187で、CPU82は記憶領域238の時間カウンタの値に基づいて、一定時間(たとえば3秒)が経過したか否かを判断する。つまり、上下左右4方向の荷重値がそれぞれ所定範囲内である4方向バランス状態が3秒間維持されたか否かを判定している。ステップS187で“YES”の場合、つまり、目標の4方向バランス状態の所定時間の維持が達成されたとき、CPU82は、ステップS189でゲームクリア処理を実行し、ステップS191で記憶領域238の時間カウンタをリセットする。また、ステップS187で“NO”の場合には、処理はそのままステップS195に進む。
また、ステップS183で“NO”の場合、つまり、目標の4方向バランス状態になっていない場合、CPU82はステップS193で記憶領域238の時間カウンタをリセットする。ステップS193を終了すると処理はステップS195へ進む。
そして、ステップS195で、CPU82はゲーム終了であるか否かを判断する。ゲーム終了条件は、ゲーム開始から所定時間が経過したこと、目標の4方向バランス状態の維持が達成できなかったこと、所定数の4方向バランスゲームがクリアされたこと等であってよい。ステップS195で“NO”の場合、処理は図18のステップS45に戻る。したがって、4つの荷重算出値に基づくゲーム処理3が続けられることとなる。一方、ステップS195で“YES”の場合には、CPU82はステップS197で得点処理を実行し、4方向バランスゲームの結果に応じてプレイヤの得点を算出する。ステップS197を終了すると、ゲーム処理3を終了する。
この実施例によれば、ゲーム処理に必要な荷重値の個数を判別し、4つの荷重センサ14からの荷重検出値から必要な個数の荷重値を算出するようにしたので、ゲームに応じて様々な個数の荷重値を用いてゲーム処理を行うことができる。したがって、プレイヤによる荷重を用いて新規な遊びを提案することができる。
図23には、必要個数が4個である他のゲームの画面の一例が示される。このゲームはフラフープゲームであり、画面にはプレイヤの操作に応じてフラフープをするプレイヤキャラクタが表示される。ゲームコントローラ10上においてプレイヤがフラフープをするかのように腰を回転すれば、画面上のプレイヤキャラクタも腰を回転してフラフープを回転させる。
ゲームコントローラ10上でプレイヤが腰を回転すれば、検出される荷重値がその回転に応じて変化する。したがって、このゲーム処理では、プレイヤの腰の回転が荷重値によって判定される。この腰の回転の判定のために、4つの荷重検出値のそのままが4つの荷重算出値として算出される。そして、4つの荷重算出値のそれぞれの値が比較され、その値が最も大きいと判別された荷重値に基づいてゲーム処理が行われる。具体的には、最も大きい荷重検出値に対応する方向にプレイヤキャラクタの腰が移動される。つまり、左上の荷重センサ14aの荷重検出値が最大の場合、プレイヤキャラクタの腰は左前方向に移動され、左下の荷重センサ14bの荷重検出値が最大の場合、プレイヤキャラクタの腰は左後方向に移動され、右上の荷重センサ14cの荷重検出値が最大の場合、プレイヤキャラクタの腰は右前方向に移動され、右下の荷重センサ14dの荷重検出値が最大の場合、プレイヤキャラクタの腰は右後方向に移動される。このような腰の位置の履歴が記録される。そして、腰の移動が一定方向への回転を示すか否かが判定される。腰が一定方向へ回転していると判定されれば、フラフープを回転することができる。
図24には、フラフープゲームを実行する場合のメモリマップの一部が示される。データ記憶領域202の記憶領域240には、現在の腰の位置が記憶される。プレイヤキャラクタの取り得る腰の位置は所定の4つの位置(左前方向の位置、右前方向の位置、右後方向の位置、左後方向の位置)に予め決められており、上述のように最大の荷重値によって決められる。この記憶領域240に記憶された位置にその腰が移動されるようにプレイヤキャラクタが制御される。
記憶領域242には、プレイヤおよびプレイヤキャラクタの腰の位置の履歴を記録するためのフラグNが記憶される。このフラグNに記録される腰の位置の変化が一定方向への回転を示すか否かが判断される。Nの初期値は1であり、Nは荷重取得タイミングごとにインクリメントされる。この実施例では、Nは4までに限られ、つまり、4回の荷重取得タイミングの間に、腰が一定方向へ回転されたか否かが判定される。たとえば、4つの荷重センサ14の並び順に対応して1−4の数値が各荷重センサ14に割り振られ、フラグNにこの数値が記録される。この実施例では、左上、右上、右下、左下の時計回り方向に、移動番号と呼ばれる数値1−4がそれぞれ割り当てられる。フラグ1−4に順に記録された移動番号が昇順(または降順)に変化していれば、腰が一定方向に回転した、つまり、フラフープの回転に成功したことが判定される。記憶領域244には回転数カウンタが記憶される。これによって、フラフープの回転に成功した回数がカウントされる。
このフラフープゲームのゲーム処理は、必要個数が4個であるから、上述の図18のステップS63のゲーム処理3として実行され得る。図25および図26にフラフープゲームのためのゲーム処理3の動作の一例が示される。このゲーム処理3を開始すると、CPU82は、ステップS211で最大値検出のために4つの荷重値のそれぞれの値を比較する。なお、上述のように、この実施例では4つの荷重検出値そのままが4つの荷重算出値として算出されるので、図25では省略されるが、4つの荷重検出値が荷重算出値記憶領域232に記憶される。補正プログラムによる補正が行われる場合には、記憶領域228の補正された荷重検出値が荷重算出値記憶領域232に記憶されるのは言うまでもない。ステップS211の比較は、この記憶領域232の荷重算出値によって行われる。
続くステップS213からステップS217でいずれの荷重値が最大値を示すかが判別され、その値が最も大きいと判別された荷重値に基づいて腰の位置が決められる。
具体的には、ステップS213で、CPU82は左上の荷重値が最大であるか否かを判断し、“YES”の場合、CPU82はステップS219でプレイヤキャラクタの腰を左前方向に移動する。腰の位置記憶領域240には左前方向の位置が記憶される。続くステップS221で、CPU82は、記憶領域242のフラグNに左前方向を示す移動番号1を設定(記憶)する。
一方、ステップS213で“NO”の場合、CPU82はステップS215で右上の荷重値が最大であるか否かを判断し、“YES”の場合、CPU82はステップS223でプレイヤキャラクタの腰を右前方向に移動する。腰の位置記憶領域240には右前方向の位置が記憶される。続くステップS225で、CPU82は記憶領域242のフラグNに右前方向を示す移動番号2を設定(記憶)する。
また、ステップS215で“NO”の場合、CPU82はステップS217で右下の荷重値が最大であるか否かを判断し、“YES”の場合、CPU82はステップS227でプレイヤキャラクタの腰を右後方向に移動する。腰の位置記憶領域240には右後方向の位置が記憶される。続くステップS229で、CPU82は記憶領域242のフラグNに右後方向を示す移動番号3を設定(記憶)する。
また、ステップS217で“NO”の場合、つまり、左下の荷重値が最大である場合には、CPU82はステップS231でプレイヤキャラクタの腰を左後方向に移動する。腰の位置記憶領域240には左後方向の位置が記憶される。続くステップS233で、CPU82は記憶領域242のフラグNに左後方向を示す移動番号4を設定(記憶)する。
ステップS221、S225、S229またはS233を終了すると、処理は図26のステップS235へ進む。ステップS235では、CPU82は、変数Nが4であるか否かを判断する。つまり、腰の回転判定を行うための4回分の腰の位置の履歴が記録されたか否かを判断する。
ステップS235で“NO”の場合には、CPU82はステップS237で変数Nをインクリメントし、処理はステップS249に進む。ステップS249では、CPU82はゲーム終了であるか否かを判断する。ゲーム終了条件は、ゲーム開始から所定時間が経過したこと、フラフープの回転に失敗したこと等であってよい。ステップS249で“NO”の場合、処理は図18のステップS45に戻る。したがって、このフラフープゲームが続けられる。
一方、ステップS235で“YES”の場合、CPU82は、ステップS239で、記憶領域242のフラグ1−4に設定された4つの移動番号が昇順(または降順)であるか否かを判断する。つまり、腰が一定方向に回転されたか否かが判定される。ステップS239で“YES”の場合には、CPU82は、ステップS241でフラフープ回転処理を実行する。これによって、フラフープがプレイヤキャラクタの胴の回りを回転するように制御される。なお、回転は一定方向に行われる必要があるので、移動番号の変化の向き(昇順または降順)が前回の回転から変化したときは、ステップS239で“NO”と判断される。ステップS243では、CPU82は、記憶領域244の回転数カウンタをインクリメントする。
また、ステップS239で“NO”の場合には、CPU82は、ステップS245でフラフープ回転失敗処理を実行する。これによって、フラフープが回転を停止するように制御される。
ステップS243またはステップS245を終了すると、CPU82はステップS247で次の回転のために変数Nに初期値1を設定する。そして、処理はステップS249に進む。
ステップS249で“YES”の場合には、CPU82はステップS251で記憶領域244に記憶された回転数に基づいて得点処理を実行する。回転に成功した回数に応じた得点が算出される。ステップS253で、CPU82は記憶領域244の回転数カウンタと記憶領域242のフラグNをリセットし、このゲーム処理3を終了する。
図27には、必要個数が4個である他のゲームの画面の一例が示される。このゲームはクイズゲームであり、画面には設問とともに解答の4つの選択肢が表示される。4つの選択肢は、4つの荷重センサ14のそれぞれに対応付けられており、4つの荷重センサ14の配置に合わせて配置される。図27の例では、頭語と結語の4つの組合せの中から間違っているものを探す問題であり、解答1として「拝啓−敬具」、解答2として「謹啓−草々」、解答3として「拝復−敬具」、解答4として「前略−草々」が挙げられている。解答1−4は、左上、右上、左下および右下の荷重センサ14にそれぞれ対応付けられる。
このクイズゲームでも、上述のフラフープゲームと同様に、4つの荷重検出値のそのままが4つの荷重算出値として算出される。そして、4つの荷重算出値のそれぞれの値が比較され、その値が最も大きいと判別された荷重値に基づいてゲーム処理が行われる。具体的には、最も大きい荷重検出値に対応する解答が選択されて、当該選択された解答が正解か否かが判定される。したがって、プレイヤは、ゲームコントローラ10上で、正解と判断した解答に対応する方向に体重をかけたり、当該解答に対応する部分に足を乗せたりする等の操作をして、当該解答に対応する荷重センサ14の荷重値を最も大きくさせることによって、問題に答えることができる。このように、ゲームコントローラ10を用いて荷重によるゲーム操作を行うことによって、従来の十字キーないしスティックや操作ボタンなどを備えた汎用のゲームコントローラと同様に、複数の選択肢からの選択を行ってゲームをプレイすることができる。
図28にはクイズゲームを実行する場合のメモリマップの一部が示される。データ記憶領域202の記憶領域250には、問題に対する正解を示す正解データが記憶される。記憶領域252には、プレイヤによって選択された解答が記憶される。
このクイズゲームのゲーム処理は、必要個数が4個であるから、上述の図18のステップS63のゲーム処理3として実行され得る。図29にクイズゲームのためのゲーム処理3の動作の一例が示される。このゲーム処理3を開始すると、CPU82は、ステップS271で最大値検出のために4つの荷重値のそれぞれの値を比較する。なお、上述のフラフープゲームのステップS211(図25)と同様に、比較される荷重値は、荷重算出値記憶領域232に記憶された4つの荷重検出値(補正された荷重検出値)である。
続くステップS273からステップS277でいずれの荷重値が最大値を示すかが判別され、その値が最も大きいと判別された荷重値に基づいてプレイヤによる解答が選択される。
具体的には、ステップS273で、CPU82は左上の荷重値が最大であるか否かを判断し、“YES”の場合、CPU82はステップS279で左上の荷重センサ14aに対応する解答1を選択する。解答記憶領域252には解答1を示す識別情報が記憶される。
一方、ステップS273で“NO”の場合、CPU82はステップS275で右上の荷重値が最大であるか否かを判断し、“YES”の場合、CPU82はステップS281で右上の荷重センサ14cに対応する解答2を選択する。解答記憶領域252には解答2を示す識別情報が記憶される。
また、ステップS275で“NO”の場合、CPU82はステップS277で左下の荷重値が最大であるか否かを判断し、“YES”の場合、CPU82はステップS283で左下の荷重センサ14bに対応する解答3を選択する。解答記憶領域252には解答3を示す識別情報が記憶される。
また、ステップS277で“NO”の場合、つまり、右下の荷重値が最大である場合には、CPU82はステップS285で右下の荷重センサ14dに対応する解答4を選択する。解答記憶領域252には解答4を示す識別情報が記憶される。
ステップS279、S281、S283またはS285を終了すると、ステップS287で、CPU82は記憶領域252に記憶された解答と記憶領域250に記憶された正解データとに基づいて、選択された解答と正解とを比較する。そして、ステップS289で、CPU82は選択された解答が正解であるか否かを判断する。ステップS289で“YES”の場合、CPU82はステップS291で正解処理を実行する。たとえば、問題に応じた点数を加算することによって、プレイヤの得点を算出する。一方、ステップS289で“NO”の場合、CPU82はステップS293で不正解処理を実行する。たとえば、問題に応じた点数を減算することによって、プレイヤの得点を算出する。
ステップS291またはS293を終了すると、CPU82はステップS295でゲーム終了であるか否かを判断する。ゲーム終了条件はたとえば所定数の問題の出題が終了したこと、所定回数正解または不正解したこと、制限時間が経過したこと等であってよい。ステップS295で“NO”の場合、処理は図18のステップS45に戻る。したがって、4個の荷重値に基づくゲーム処理3が続けられることとなる。一方、ステップS295で“YES”の場合にはこのゲーム処理3を終了する。
図30には、必要個数が4個である他のゲームの画面の一例が示される。このゲームはスキーゲームであり、画面にはプレイヤの操作に応じてスキーをするプレイヤキャラクタが表示される。このスキーゲームでは、上述の4方向バランスゲームと同様に、上荷重値、下荷重値、右荷重値および左荷重値の4つの荷重値が4つの荷重検出値から算出される。上荷重値および下荷重値は、プレイヤキャラクタの加速度および減速度を算出するために使用され、加速度および減速度に基づいてプレイヤキャラクタの移動速度が制御される。また、右荷重値および左荷重値は、プレイヤキャラクタの右方向および左方向への旋回移動を制御するために使用される。したがって、プレイヤは、ゲームコントローラ10上で前または後(上または下)方向に荷重を加えることでプレイヤキャラクタの移動速度を増加または減少させ、左または右方向に荷重を加えることでプレイヤキャラクタを左または右方向へ旋回させることができる。
図31にはスキーゲームを実行する場合のメモリマップの一部が示される。データ記憶領域202の記憶領域260にはプレイヤキャラクタの加速度および減速度が記憶される。記憶領域262にはプレイヤキャラクタの移動速度が記憶される。プレイヤキャラクタの移動速度は記憶領域260の加速度または減速度と前回の移動速度に基づいて算出される。記憶領域264にはプレイヤキャラクタの位置(座標)が記憶される。
このスキーゲームのゲーム処理は、必要個数が4個であるから、上述の図18のステップS63のゲーム処理3として実行され得る。図32にスキーゲームのためのゲーム処理3の動作の一例が示される。このゲーム処理3を開始すると、CPU82は、ステップS311で、上荷重値、下荷重値、右荷重値および左荷重値をそれぞれ算出する。補正が行われる場合、記憶領域228の補正された荷重検出値が使用される。算出された4個の荷重値は、荷重算出値記憶領域232に記憶される。
続くステップS313で、CPU82は、記憶領域232の荷重算出値に基づいて、上荷重値が下荷重値よりも大きいか否かを判断する。ステップS313で“YES”の場合、CPU82は、ステップS315で上荷重値に基づいてプレイヤキャラクタの加速度を算出する。算出された加速度は記憶領域260に記憶される。そして、ステップS317で、CPU82は、記憶領域206の算出された加速度に基づいて、プレイヤキャラクタの移動速度を制御する。今回の移動速度は、記憶領域262に記憶されていた前回の移動速度と加速度に基づいて算出され、記憶領域262に記憶される。
一方、ステップS313で“NO”の場合、CPU82は、ステップS319で下荷重値に基づいてプレイヤキャラクタの減速度を算出する。算出された減速度は記憶領域260に記憶される。そして、ステップS321で、CPU82は、記憶領域260の算出された減速度に基づいて、プレイヤキャラクタの移動速度を制御する。今回の移動速度は、記憶領域262に記憶されていた前回の移動速度と減速度に基づいて算出され、記憶領域262に記憶される。
ステップS317またはS321を終了すると、ステップS323で、記憶領域232の荷重算出値に基づいて、CPU82は右荷重値が左荷重値よりも大きいか否かを判断する。ステップS323で“YES”の場合、CPU82は、ステップS325で、右荷重値に基づいてプレイヤキャラクタを右方向へ旋回移動させる。この旋回移動は記憶領域262の移動速度に基づいて制御される。旋回半径は右荷重値に基づいて算出されてよい。プレイヤキャラクタの今回の位置が、キャラクタ位置記憶領域264に記憶される前回の位置、移動速度および右方向旋回半径等に基づいて算出される。
一方、ステップS323で“NO”の場合、CPU82は、ステップS327で、左荷重値に基づいてプレイヤキャラクタを左方向へ旋回移動させる。この旋回移動は記憶領域262の移動速度に基づいて制御される。旋回半径は左荷重値に基づいて算出されてよい。プレイヤキャラクタの今回の位置が、キャラクタ位置記憶領域264に記憶される前回の位置、移動速度および左方向旋回半径等に基づいて算出される。
ステップS325またはS327を終了すると、CPU82は、ステップS329でプレイヤキャラクタがゴールに到達したか否かを判断する。具体的には、ステップS325またはS327によって移動されたプレイヤキャラクタの位置が、予め記憶された所定のゴール地点を示す領域内の位置になったか否かが判断される。ステップS329で“NO”の場合、処理は図18のステップS45に戻る。したがって、4個の荷重値に基づくゲーム処理3が続けられる。一方、ステップS329で“YES”の場合、CPU82は、ステップS331でゲーム終了処理を実行する。たとえば滑走時間に応じた順位付けを行ったり、得点を算出したりする。ステップS331を終了すると、このゲーム処理3を終了する。
図33には必要個数が4個である他のゲームの一例が示される。このゲームは、たとえばロールプレイングゲームのような操作に応じたプレイヤキャラクタの移動を伴うゲームであり、画面にはプレイヤの操作に応じて移動するプレイヤキャラクタが表示される。このゲームを便宜上移動ゲームと呼ぶものとする。この移動ゲームでは、上述の4方向バランスゲームやスキーゲームと同様に、上荷重値、下荷重値、右荷重値および左荷重値の4つの荷重値が4つの荷重検出値から算出される。4つの荷重算出値のうちの最大値に対応する方向へ、当該最大値に基づく移動量で、プレイヤキャラクタが移動される。したがって、プレイヤはゲームコントローラ10上で上下左右4方向のうち所望の方向へ荷重を加えることによって、当該方向へプレイヤキャラクタを移動させることができる。このように、ゲームコントローラ10を用いて荷重による方向指示を行うことができ、従来の十字キーやジョイスティックなどを備えた汎用のゲームコントローラと同様に、プレイヤキャラクタ等を移動させることができる。
図34にはこの移動ゲームを実行する場合のメモリマップの一部が示される。データ記憶領域202の記憶領域270にはプレイヤキャラクタの移動量が記憶される。この実施例では、プレイヤキャラクタの移動量は、4つの荷重算出値のうちの最大値に基づいて算出される。記憶領域272にはプレイヤキャラクタの位置(座標)が記憶される。
この移動ゲームのゲーム処理は、必要個数が4個であるから、上述の図18のステップS63のゲーム処理3として実行され得る。図35にこの移動ゲームのためのゲーム処理3の動作の一例が示される。このゲーム処理3を開始すると、CPU82は、ステップS351で、上荷重値、下荷重値、右荷重値および左荷重値をそれぞれ算出する。補正が行われる場合、記憶領域228の補正された荷重検出値が使用される。算出された4個の荷重値は、荷重算出値記憶領域232に記憶される。
続くステップS353からステップS357でいずれの荷重算出値が最大であるかが判別され、その値が最も大きいと判別された荷重値に基づいてプレイヤキャラクタの移動方向および移動量が制御される。
具体的には、CPU82は、ステップS353で上荷重値が最大であるか否かを判断し、“YES”の場合、ステップS359で上荷重値に基づいてプレイヤキャラクタの移動量を算出する。たとえば、荷重値が大きいほど移動量は大きくされる。なお、荷重算出値に基づいて算出される移動量は記憶領域270に記憶される。そして、ステップS361で、CPU82は算出された移動量に応じてプレイヤキャラクタを上方向に移動する。プレイヤキャラクタの今回の位置が、キャラクタ位置記憶領域272に記憶された前回の位置と記憶領域270に記憶された上方向への移動量に基づいて算出される。
一方、ステップS353で“NO”の場合、CPU82はステップS355で下荷重値が最大であるか否かを判断し、“YES”の場合、ステップS363で下荷重値に基づいてプレイヤキャラクタの移動量を算出する。そして、ステップS365で、CPU82は記憶領域270の算出された移動量に応じてプレイヤキャラクタを下方向に移動する。プレイヤキャラクタの今回の位置が、キャラクタ位置記憶領域272に記憶された前回の位置と記憶領域270に記憶された下方向への移動量に基づいて算出される。
また、ステップS355で“NO”の場合、CPU82はステップS357で右荷重値が最大であるか否かを判断し、“YES”の場合、ステップS367で右荷重値に基づいてプレイヤキャラクタの移動量を算出する。そして、ステップS369で、CPU82は記憶領域270の算出された移動量に応じてプレイヤキャラクタを右方向に移動する。プレイヤキャラクタの今回の位置が、キャラクタ位置記憶領域272に記憶された前回の位置と記憶領域270に記憶された右方向への移動量に基づいて算出される。
また、ステップS357で“NO”の場合、つまり、左荷重値が最大である場合には、CPU82はステップS371で左荷重値に基づいてプレイヤキャラクタの移動量を算出する。そして、ステップS373で、CPU82は記憶領域270の算出された移動量に応じてプレイヤキャラクタを左方向に移動する。プレイヤキャラクタの今回の位置が、キャラクタ位置記憶領域272に記憶された前回の位置と記憶領域270に記憶された左方向への移動量に基づいて算出される。
ステップS361、S365、S369またはS373を終了すると、CPU82は、ステップS375でゲーム終了であるか否かを判断する。ゲーム終了条件は、たとえば、キャラクタ位置が所定の領域内になったこと、所定の制限時間が経過したこと等であってよい。ステップS375で“NO”の場合、処理は図18のステップS45に戻る。したがって、4個の荷重値に基づくゲーム処理3が続けられる。一方、ステップS375で“YES”の場合、CPU82はステップS377でゲーム終了処理を実行し、このゲーム処理3を終了する。
なお、上述の移動ゲームでは、移動対象はプレイヤキャラクタ(プレイヤオブジェクト)であったが、この移動ゲームの移動処理は、カーソルもしくはポインタ等の移動や、仮想カメラの視点もしくは注視点の移動などにも適用することができる。
また、上述の各実施例では、ゲームごとに必要な個数が一定であったが、他の実施例では、1つのゲームにおいて、状況や場面等に応じて必要な個数が変更されてもよい。この実施例では、ゲームの場面や状況等に応じて必要な個数が判別されて当該必要な個数の荷重値に基づいてゲーム処理が実行される。ゲームの場面や状況等に応じて様々な個数の荷重値を算出して、様々なゲーム操作を行うことができる。
図36には、ゲーム中の場面や状況等ごとに必要個数が異なるアクションゲームの画面の一例が示されている。このアクションゲームでは、図36(A)に示すように、プレイヤキャラクタがフィールド上を移動する場面では、必要な個数が4個であると判別され、4個の荷重値に基づいて移動処理が実行される。たとえば、上述の図33の移動ゲームと同様に、上荷重値、下荷重値、左荷重値および右荷重値に基づいて、上下左右4方向にプレイヤキャラクタは移動される。具体的には、4つの荷重算出値のうち最大の荷重値に対応する方向へ、当該最大値に基づく移動量で、プレイヤキャラクタは移動される。このように、移動の場面では、ゲームコントローラ10を用いた荷重によるゲーム操作によって、従来の十字キーやジョイスティック等を有する汎用のゲームコントローラと同様に、プレイヤキャラクタの移動方向等を操作することができる。
また、図36(B)に示すように、プレイヤキャラクタが敵キャラクタと戦う戦闘場面では、必要な個数が2個であると判別され、2個の荷重値に基づいて戦闘処理が実行される。具体的には、右荷重値および左荷重値が算出され、大きい方の荷重算出値に基づいて、所定の攻撃または防御が実行される。この実施例では、図36(B)に示すように、プレイヤキャラクタは右手に剣を左手に盾を持って敵と対峙するので、右荷重値が大きいとき剣による攻撃が行われ、左荷重値が大きいとき盾による防御が行われる。ゲームコントローラ10を用いた荷重によるゲーム操作によって、従来の操作ボタン等を有する汎用のゲームコントローラと同様に、プレイヤキャラクタの攻撃や防御のようなアクションやモーション等を操作することができる。
図37にはこのアクションゲームを実行する場合のメモリマップの一部が示される。データ記憶領域202の記憶領域280にはプレイヤキャラクタの移動量が記憶される。記憶領域282にはプレイヤキャラクタの位置(座標)が記憶される。さらに、記憶領域284には敵キャラクタの位置(座標)が記憶される。記憶領域286には現在の場面を示す場面フラグが記憶される。このアクションゲームでは、プレイヤキャラクタがフィールド上を移動するフィールド場面、プレイヤキャラクタが敵と戦闘する戦闘場面、およびその他の場面が設けられる。フィールドを移動中にプレイヤキャラクタが敵と遭遇したとき、たとえばプレイヤキャラクタの位置と敵の位置とが一定距離範囲内になったとき、場面フラグはフィールド場面から戦闘場面に切替えられる。また、戦闘が終了したとき、場面フラグは戦闘場面からフィールド場面に切替えられる。なお、後述のフロー図では、簡単のため戦闘場面とフィールド場面の設定のみが示されるが、その他の場面も設定し得る。記憶領域288にはプレイヤキャラクタおよび敵の体力または寿命を示すHP(ヒットポイント)が記憶される。
図38にはこのアクションゲームを実行する場合のゲーム機52の動作の一例が示される。処理を開始すると、まず、ステップS391で、CPU82はゲーム開始処理を実行する。この処理では、このアクションゲームを開始するために初期設定が行われ、たとえば各種変数やフラグ等に初期値が設定される。記憶領域286の場面フラグには、フィールドを示す値が設定される。
次に、ステップS393で、CPU82は補正値算出処理を実行する。この処理は図18のステップS41、すなわち図19の補正値算出処理と同様であり、ここでの説明は省略する。これによって、荷重検出値を補正するための補正値が補正値記憶領域226に記憶される。
また、続くステップS395、S397、S399およびS401の処理は、図18のステップS45、S47、S49およびS51の処理とそれぞれ同様であり、これらの説明は省略する。
続いて、ステップS403およびS405では、ゲームの場面や状況等に応じた必要個数の判別が行われる。この判別は、記憶領域286の場面フラグに基づいて行われる。
具体的には、ステップS403で、CPU82は場面フラグに基づいて場面がフィールドであるか否かを判断し、“YES”の場合、つまり、必要個数が4個と判別される場合、CPU82はステップS407で4個値に基づく移動処理を実行する。なお、4個値とは4個の荷重算出値を意味する。この移動処理の動作の詳細は後述する図39に示される。
一方、ステップS403で“NO”の場合、CPU82は、ステップS405で場面フラグに基づいて場面が戦闘場面であるか否かを判断し、“YES”の場合、つまり、必要個数が2個と判別される場合、CPU82はステップS409で2個値に基づく戦闘処理を実行する。なお、2個値とは2個の荷重算出値を意味する。この戦闘処理の動作の詳細は後述する図40に示される。
また、ステップS405で“NO”の場合、つまり、フィールドおよび戦闘以外のその他の場面の場合には、CPU82はステップS411でその他の処理を実行する。
ステップS407、S409またはS411を終了すると、CPU82はステップS413でゲーム終了であるか否かを判断する。ゲーム終了条件は、たとえば戦闘処理で戦闘結果がプレイヤキャラクタの負けであったこと、所定の敵を倒したこと等であってよい。ステップS413で“NO”の場合、処理はステップS395に戻り、したがって、場面や状況等に応じて必要個数が変化するこのアクションゲームが続けられる。一方、ステップS413で“YES”の場合、このゲーム処理が終了される。
図39には、図38のステップS407の4個値に基づく移動処理の動作の一例が示される。この移動処理は、上述のように、上荷重値、下荷重値、右荷重値および左荷重値のうちの最大値に基づいて実行される。図39のステップS431−S453の処理は、上述の図35のステップS351−S373の処理と同様であり、ここでの詳細な説明は省略する。なお、ステップS439、S443、S447またはS451で算出される移動量は記憶領域280に記憶され、ステップS441、S445、S449またはS453で算出されるプレイヤキャラクタ位置は記憶領域282に記憶される。
ステップS441、S445、S449またはS453を終了すると、CPU82はステップS455でプレイヤキャラクタが敵に遭遇したか否かを判断する。具体的には、記憶領域282のプレイヤキャラクタ位置と記憶領域284の敵位置とが所定の距離範囲内であるか否かが判断される。なお、敵の移動はプログラムによって制御されており、算出される敵の位置は記憶領域284に記憶される。
ステップS455で“YES”の場合、CPU82はステップS457で場面フラグ記憶領域286に戦闘を示す値を記憶することによって場面フラグを戦闘に設定する。一方、ステップS455で“NO”の場合には、そのままこの4個値に基づく移動処理を終了し、処理は図38のステップS413に進む。
図40には、図38のステップS409の2個値に基づく戦闘処理の動作の一例が示される。この戦闘処理を開始すると、CPU82は、ステップS471で、記憶領域228の補正された荷重検出値に基づいて右荷重値および左荷重値をそれぞれ算出し、荷重算出値記憶領域232に記憶する。
次に、ステップS473で、CPU82は右荷重値が左荷重値よりも大きいか否かを判断する。ステップS473で“YES”の場合、CPU82は、ステップS475で、プレイヤキャラクタが右手に持った剣で攻撃するための動作処理を実行する。たとえば、予め記憶しておいたプレイヤキャラクタが右手の剣を振るモーションデータに基づいてこの動作処理が行われる。一方、ステップS473で“NO”の場合、CPU82は、ステップS477で、プレイヤキャラクタが左手に持った盾で防御するための動作処理を実行する。この動作処理も、たとえば予め記憶しておいたプレイヤキャラクタが左手の盾を前に出すモーションデータに基づいて行われる。
ステップS475またはS477を終了すると、CPU82は、ステップS479でその他の処理を実行する。この処理は、敵の攻撃処理や防御処理等であり、プログラムに従って実行される。
ステップS481では、CPU82は、攻撃または防御処理に基づいて自己(プレイヤキャラクタ)および敵のHP減算処理を実行する。たとえば、攻撃が当たったと判断されるとき、相手が防御していなければ、所定値だけ相手のHPが減算され、相手が防御していれば相手のHPが減算されない。算出されたプレイヤキャラクタおよび敵のHPは記憶領域288に記憶される。
続いて、ステップS483で、CPU82は、戦闘終了であるか否かを判断する。たとえば、いずれかのHPがゼロになったとき戦闘終了であると判別される。また、プレイヤキャラクタのHPがゼロになったとき、戦闘結果は負けであると判別され、敵のHPがゼロになったとき、戦闘結果は勝ちであると判別される。ステップS483で“YES”の場合、CPU82は、ステップS485で場面フラグ記憶領域286にフィールドを示す値を記憶することによって場面フラグをフィールドに設定する。一方、ステップS483で“NO”の場合にはそのままこの2個値に基づく戦闘処理を終了(戦闘場面は継続)し、処理は図38のステップS413に戻る。
なお、上述のアクションゲームの実施例では、ゲームの場面に応じて必要個数を判別し、必要個数の荷重値に基づいてプレイヤキャラクタの移動処理および戦闘処理をそれぞれ実行するようにしていた。しかし、他の実施例では、ゲーム場面に応じて重心位置と必要個数の荷重値とを使い分けてゲーム処理を実行するようにしてもよい。次に示すロールプレイングゲームの実施例では、重心位置に基づいてプレイヤキャラクタの移動が制御され、必要個数の荷重値に基づいてプレイヤキャラクタの戦闘が制御される。
図41は重心位置に基づく移動制御を説明するための図解図を示す。この実施例では、プレイヤキャラクタの移動速度が重心位置に基づいて制御される。具体的には、左上荷重センサ14aの荷重検出値をa、左下荷重センサ14bの荷重検出値をb、右上荷重センサ14cの荷重検出値をc、右下荷重センサ14dの荷重検出値をdとしたとき、画面上の座標系における重心のX座標(XG)およびY座標(YG)は、それぞれ次の数1および数2によって算出される。
[数1]
XG=((c+d)−(a+b))*m
[数2]
YG=((a+c)−(b+d))*n
ここで、m、nは定数である。XYは画面上の座標系であり、原点(0,0)は画面中心に設定され、−1≦X≦1、−1≦Y≦1である。
このように、XGは右荷重値と左荷重値との差分に基づいて算出され、YGは上荷重値と下荷重値との差分に基づいて算出される。
この重心の座標に基づいてプレイヤキャラクタの移動方向および移動速度が制御される。上述の画面座標系の原点を、プレイヤキャラクタの位置およびゲームコントローラ10の台12の中心とみなして、原点から重心位置までの距離と原点から重心位置への方向とを移動制御に用いる。具体的には、画面の中心(0,0)と重心(XG,YG)とを結ぶベクトルVが算出され、当該ベクトルVの大きさに基づいてプレイヤキャラクタの移動速度が算出される。プレイヤキャラクタはベクトルVの向きに算出された移動速度で移動される。仮想ゲーム空間が2次元の場合、プレイヤキャラクタは、画面座標系を用いて算出されたベクトルVの向きに算出された移動速度で移動されてよい。一方、仮想ゲーム空間が3次元の場合、たとえば上記画面座標系をゲーム空間の3次元座標系のうちの平面座標系とみなして、プレイヤキャラクタは、当該平面上をベクトルVの向きに算出された移動速度で移動されてよい。なお、表示上は、図41に示すように、プレイヤキャラクタの位置は画面の中心に固定され、背景がスクロールされてよい。
図42には戦闘場面におけるゲーム画面の一例が示される。この実施例では、戦闘場面における必要個数は4個であり、上荷重値、下荷重値、右荷重値および左荷重値が算出される。4個の荷重算出値のそれぞれに戦闘のための各種コマンドが割り当てられる。4つの荷重検出値のうちの最大の荷重算出値に対応するコマンドが選択され、当該コマンドに対応する戦闘処理が実行される。たとえば、上荷重値には攻撃のための「たたかう」のコマンド、下荷重値には防御のための「ぼうぎょ」のコマンド、右荷重値には魔法発動のための「まほう」のコマンド、左荷重値には戦闘から脱出するための「にげる」のコマンドがそれぞれ割り当てられる。図42に示すゲーム画面は、戦闘場面を示す画面とコマンド選択画面とを兼ねており、画面上の上下左右の位置には各コマンドを示すアイコンが表示され、上下左右4方向のそれぞれにどのコマンドが対応付けられているかがプレイヤに明示される。なお、他の実施例では、戦闘の画面とは別に、各コマンドに対応する上下左右の領域に画面を分けたコマンド選択画面を表示するようにしてもよい。ゲームコントローラ10を用いた荷重による方向指示によって、従来の十字キーやジョイスティック等を有する汎用のゲームコントローラと同様に、コマンドの選択のような操作を行うことができる。
図43にはこのロールプレイングゲームを実行する場合のメモリマップの一部が示される。データ記憶領域202の記憶領域300には重心位置が記憶される。重心のX座標およびY座標は上述の数1および数2に従って算出される。記憶領域302には移動ベクトルが記憶される。移動ベクトルは原点(0,0)から重心(XG,YG)までを結ぶベクトルである。記憶領域304には移動速度が記憶される。移動速度は移動ベクトルの大きさによって算出される。また、上述のアクションゲームの場合と同様に、記憶領域282にはプレイヤキャラクタの位置が記憶され、記憶領域284には敵の位置が記憶され、記憶領域286には場面フラグが記憶され、記憶領域288にはHPが記憶される。
図44にはこのロールプレイングゲームを実行する場合のゲーム機52の動作の一例が示される。ステップS391−S405、S411およびS413の処理はそれぞれ図38の同一参照符号の処理と同様であり、ここでの詳細な説明を省略する。
ステップS403で“YES”の場合、つまり、フィールド場面の場合、CPU82は、ステップS501で重心に基づく移動処理を実行する。この移動処理の動作の詳細は後述する図45に示される。また、ステップS405で“YES”の場合、つまり、戦闘場面の場合、CPU82は、ステップS503で4個値に基づく戦闘処理を実行する。この戦闘処理の動作の詳細は後述する図46に示される。ステップS501またはS503を終了すると、処理はステップS413に進む。
図45には重心に基づく移動処理の動作の一例が示される。CPU82は、ステップS511で上荷重値、下荷重値、右荷重値および左荷重値をそれぞれ算出する。なお、この実施例では補正が行われるので、各荷重値は記憶領域228の補正された荷重検出値に基づいて算出される。
次に、CPU82は、ステップS513で右荷重値と左荷重値の差分(左右差分と呼ぶ。)を算出し、ステップS515で上荷重値と下荷重値の差分(上下差分と呼ぶ。)を算出する。そして、ステップS517で、CPU82は、左右差分と上下差分に基づいて、中心位置(原点)に対する重心位置のXおよびY座標を算出する。この算出は上述の数1および数2に従って行われる。算出された重心の座標は記憶領域300に記憶される。
続いて、ステップS519で、CPU82は原点と重心とを結ぶベクトルを算出して記憶領域302に記憶する。ステップS521では、CPU82は、ベクトルの大きさ(長さ)に基づいてプレイヤキャラクタの移動速度を算出して記憶領域304に記憶する。そして、ステップS523で、CPU82はプレイヤキャラクタをベクトルの向きに算出された移動速度で移動させるための移動処理を実行する。プレイヤキャラクタの位置は、ベクトルの向き、移動速度および前回の位置に基づいて算出され、記憶領域282に記憶される。
続くステップS525で、CPU82はプレイヤキャラクタが敵に遭遇したか否かを判断する。敵の移動はプログラムによって制御されており、算出される敵の位置は記憶領域284に記憶されている。したがって、記憶領域282のプレイヤキャラクタの位置と記憶領域284の敵位置とが所定の距離範囲内であるか否かが判断される。ステップS525で“YES”の場合、CPU82はステップS527で場面フラグ記憶領域286に戦闘を示す値を記憶することによって、場面フラグを戦闘に設定する。ステップS527を終了し、または、ステップS525で“NO”の場合、この重心に基づく移動処理を終了し、図44のステップS413に戻る。
図46には4個値に基づく戦闘処理の動作の一例が示される。CPU82は、ステップS541で、GPU84b等を用いてコマンド選択画面を表示させる。この実施例では、コマンド選択画面として、図42に示すように、画面上の上下左右の所定位置に各コマンドを示すアイコンが表示される。
次に、ステップS543で、CPU82は上荷重値、下荷重値、右荷重値および左荷重値を記憶領域228の補正された荷重検出値に基づいて算出し、荷重算出値記憶領域232に記憶する。
続くステップS545−S549で、4つの荷重算出値のうちのいずれが最大値を示すかを判別する。ステップS545では、CPU82は上荷重値が最大であるか否かを判断し、“YES”の場合、つまり、上方向に対応付けられた「たたかう」コマンドが選択されたと判定される場合、CPU82はステップS551で武器による攻撃処理を実行する。これによって、プレイヤキャラクタは敵を攻撃する。
一方、ステップS545で“NO”の場合、CPU82は、ステップS547で下荷重値が最大であるか否かを判断し、“YES”の場合、つまり、下方向に対応付けられた「ぼうぎょ」コマンドが選択されたと判定される場合、CPU82はステップS553で防御処理を実行する。これによって、プレイヤキャラクタは防御姿勢をとり敵の攻撃を防ぐ。
また、ステップS547で“NO”の場合、CPU82はステップS549で右荷重値が最大であるか否かを判断し、“YES”の場合、つまり、右方向に対応付けられた「まほう」コマンドが選択されたと判定される場合、CPU82はステップS555で魔法発動処理を実行する。これによって、プレイヤキャラクタは魔法により敵にダメージを与える。
また、ステップS549で“NO”の場合、つまり、左荷重値が最大であり、左方向に対応付けられた「にげる」コマンドが選択されたと判定される場合、CPU82はステップS557で戦闘場面から抜ける処理を実行する。たとえば、プレイヤキャラクタが戦闘から逃げ出すことが試みられる。逃亡に成功した場合戦闘が終了され、失敗した場合戦闘が継続される。逃亡の成否はHPの差や乱数等により判定されてよい。
ステップS551、S553、S555またはS557を終了すると、CPU82は、ステップS559でその他の処理を実行する。具体的には、この処理は敵キャラクタの攻撃処理、防御処理、魔法処理などである。
ステップS561では、CPU82は、攻撃、防御または魔法処理に基づいて、プレイヤキャラクタおよび敵のHP減算処理を実行する。HPは相手の攻撃および魔法に応じて所定値だけ減少される。また、相手が防御している場合、相手のHPは相手が防御していない場合よりも少ない所定値だけ減少される。算出されたプレイヤキャラクタおよび敵のHPは記憶領域288に記憶される。
そして、ステップS563で、CPU82は戦闘終了であるか否かを判断する。戦闘終了条件は、プレイヤキャラクタまたは敵のHPがゼロになったこと、プレイヤキャラクタが逃亡に成功したこと等である。なお、戦闘結果がプレイヤキャラクタの負けである場合、図44のステップS413でゲーム終了と判断されることとなる。このステップS563で“YES”の場合、CPU82はステップS565で場面フラグ記憶領域286にフィールドを示す値を記憶することによって場面フラグをフィールドに設定する。ステップS565を終了し、またはステップS563で“NO”の場合、この4個値に基づく戦闘処理を終了し、処理は図44のステップS413に戻る。
なお、上述のロールプレイングゲームでは、移動対象はプレイヤキャラクタであったが、この移動処理は、カーソルもしくはポインタ等の移動や、仮想カメラの視点もしくは注視点の移動などにも適用することができる。
また、上述の各実施例では、ゲーム機52はゲームコントローラ10からの4つの荷重検出値を取得し、必要な個数の荷重算出値を算出するようにしていた。しかし、他の実施例では、ゲーム機52が必要な個数をゲームコントローラ10に知らせて、これに応じて、ゲームコントローラ10が必要な個数の荷重算出値を算出してゲーム機52に送信するようにしてもよい。
具体的には、ゲーム機52では、荷重取得タイミングになったとき、必要な個数が判別され、当該必要な個数の荷重値を取得するための荷重取得命令がゲームコントローラ10宛に送信される。命令を受信したゲームコントローラ10では、命令の種類が判別され、当該命令に応じた個数の荷重値が必要に応じて算出されてゲーム機52宛に送信される。ゲーム機52では、受信した必要な個数の荷重値に基づいてゲーム処理が実行される。
図47には、この実施例のゲーム機52の動作の一例が示される。この図47は、上述の図18に示す動作の変形例であり、必要な個数がゲームごとに一定に決められている場合の動作である。なお、図47では、図18での処理と同様の処理には同一の参照符号を付しており、それらの詳細な説明は省略する。また、荷重算出がゲームコントローラ10で行われるので、図18のステップS41の補正値算出処理はこの実施例のゲーム機52では行われない。
ステップS45で荷重取得タイミングと判断される場合、続くステップS53−S57で必要な個数が判別される。具体的には、ステップS53では、CPU82は必要な個数が1個であるか否かを判断する。ステップS53で“YES”の場合、つまり、全荷重ゲームの場合には、CPU82は、ステップS581で全荷重命令をゲームコントローラ10宛に送信する。全荷重命令は4つの荷重検出値の合計値(全荷重値)を取得するためのものである。なお、このゲームコントローラ10宛の送信はリモコン54に対して行われ、命令はリモコン54からゲームコントローラ10に送信されることとなる。この全荷重命令に応じて、ゲームコントローラ10では4つの荷重値が検出され、当該4つの荷重検出値の合計値が算出される。合計値は入力データとしてリモコン54経由で送信され、ゲーム機52の無線コントローラモジュール94によって受信される。したがって、ステップS583で、CPU82はゲームコントローラ10からの合計値を入力データバッファ220から取得する。そして、CPU82はステップS59で当該合計値に基づいてゲーム処理1を実行する。合計値をゲームコントローラ10から受信しているので、このゲーム処理1では、荷重算出処理(図20のステップS101)は行われない。
一方、ステップS53で“NO”の場合、CPU82は、ステップS55で必要な個数が2個であるか否かを判断し、“YES”の場合、つまり、左右バランスゲームの場合には、CPU82はステップS585で左右荷重命令をゲームコントローラ10宛に送信する。左右荷重命令は、左荷重値および右荷重値を取得するためのものである。この左右荷重命令に応じて、ゲームコントローラ10では、4つの荷重値が検出され、左荷重値および右荷重値が算出されてゲーム機52宛に送信される。したがって、ステップS587で、CPU82は、ゲームコントローラ10からの左荷重値および右荷重値を入力データバッファ220から取得する。そして、ステップS61でCPU82は左荷重値および右荷重値に基づいてゲーム処理2を実行する。このゲーム処理2でも荷重算出処理(図21のステップS151およびS153)は行われない。
また、ステップS55で“NO”の場合、CPU82はステップS57で必要な個数が4個であるか否かを判断し、“YES”の場合、つまり、4方向バランスゲーム、フラフープゲーム等の場合には、CPU82はステップS589で4方向荷重命令をゲームコントローラ10宛に送信する。4方向荷重命令は4つの荷重検出値を取得するためのものである。この4方向荷重命令に応じて、ゲームコントローラ10では、4つの荷重値が検出され、当該4つの荷重検出値がゲーム機52宛に送信される。したがって、ステップS591で、CPU82はゲームコントローラ10からの4つの荷重検出値を入力データバッファ220から取得する。そして、ステップS63でCPU82は4つの荷重検出値に基づいてゲーム処理3を実行する。なお、この実施例では、必要な個数が4個の場合、4つの荷重検出値がゲームコントローラ10から取得されるように構成したので、このゲーム処理3では、上荷重値、下荷重値、右荷重値および左荷重値が必要な場合には、荷重算出処理(図22のステップS181等)が実行される。ただし、図25または図29に示すゲーム処理3のように、4つの荷重検出値のそのままが必要とされる場合には、受信した4つの荷重検出値が、4つの荷重算出値としてそのまま使用される。また、ゲーム機52で4つの荷重検出値が必要ではないゲームの場合、ゲームコントローラ10から上荷重値、下荷重値、右荷重値および左荷重値が取得されるように構成してよく、この場合、ゲーム処理3では荷重算出処理が実行されない。
また、図48には、この実施例のゲーム機52の動作の他の例が示される。この図48は、上述の図38に示す動作の変形例であり、必要な個数がゲームの場面や状況等に応じて変化する場合の動作である。なお、図48では、図38での処理と同様の処理には同一の参照符号を付しており、それらの詳細な説明は省略する。
ステップS395で荷重取得タイミングであると判断される場合、続くステップS403およびS405で、場面を判別することによって必要な荷重値の個数を判別する。具体的には、CPU82はステップS403で記憶領域286の場面フラグにフィールドが設定されているか否かを判断し、“YES”の場合、つまり、必要個数が4個の場合には、CPU82はステップS601で、ゲームコントローラ10宛に4方向荷重取得命令を送信する。この4方向荷重取得命令に応じて、ゲームコントローラ10から4つの荷重検出値がゲーム機52宛に送信され、無線コントローラモジュール94によって受信される。したがって、ステップS603で、CPU82はゲームコントローラ10からの4つの荷重検出値を入力データバッファ220から取得する。そして、ステップS407でCPU82は4個値に基づく移動処理を実行する。なお、この実施例では、必要な個数が4個の場合、4つの荷重検出値がゲームコントローラ10から取得されるようにしたので、この4個値に基づく移動処理で上荷重値、下荷重値、右荷重値および左荷重値が必要な場合には、荷重算出処理(図39のステップS431)が実行される。ただし、4つの荷重検出値のそのままが必要とされる場合には、受信した4つの荷重検出値が、4つの荷重算出値としてそのまま使用される。また、ゲーム機52で4つの荷重検出値が必要ではないゲームの場合、ゲームコントローラ10から上荷重値、下荷重値、右荷重値および左荷重値が取得されるように構成してよく、この場合には、4個値に基づく移動処理では荷重算出処理が実行されない。
一方、ステップS403で“NO”の場合、CPU82はステップS405で記憶領域286の場面フラグに戦闘が設定されているか否かを判断し、“YES”の場合、つまり、必要個数が2個である場合には、CPU82はステップS605でゲームコントローラ10宛に左右荷重取得命令を送信する。この左右荷重取得命令に応じて、ゲームコントローラ10から左荷重値および右荷重値が送信される。したがって、ステップS607で、CPU82はゲームコントローラ10からの左荷重値および右荷重値を入力データバッファ220から取得する。そして、ステップS409でCPU82は2個値に基づく戦闘処理を実行する。左荷重値および右荷重値を受信しているので、この2個値に基づく戦闘処理では荷重算出処理(図40のステップS471)は実行されない。
図49には、ゲームコントローラ10が命令に応じて予め定められた必要な個数の荷重値を算出する場合のゲームコントローラ10の動作の一例が示される。なお、図49では、図16での処理と同様の処理には同一の参照符号を付しており、それらの詳細な説明は省略する。
ステップS5で4つの荷重センサ14からそれぞれ荷重検出値を取得した後、CPU82はステップS621でゲーム機52からの命令が全荷重命令であるか否かを判断する。ステップS621で“YES”の場合、つまり、必要な個数が1個である場合には、マイコン20は、ステップS627で4つの荷重検出値の合計値を算出する。そして、ステップS629で、マイコン20は、算出した合計値をゲーム機52宛に送信する。なお、ゲーム機52宛の送信はコネクタ24を介してリモコン54に対して行われ、荷重算出値は入力データとしてリモコン54からゲーム機52に送信されることとなる。
一方、ステップS621で“NO”の場合、マイコン20は、ステップS623で命令が左右荷重命令であるか否かを判断する。ステップS623で“YES”の場合、つまり、必要な個数が2個である場合には、マイコン20は、ステップS631で左荷重値、つまり、左側2つの荷重検出値の合計値を算出する。また、ステップS633で、マイコン20は、右荷重値、つまり、右側2つの荷重検出値の合計値を算出する。そして、ステップS635で、マイコン20は左荷重値および右荷重値の2つのデータをリモコン54経由でゲーム機52宛に送信する。
また、ステップS623で“NO”の場合、マイコン20は、ステップS625で命令が4方向荷重命令であるか否かを判断する。ステップS625で“YES”の場合、マイコン20は、ステップS637で4つの荷重検出値をゲーム機52宛にリモコン54経由で送信する。なお、他の実施例では、マイコン20が上荷重値、下荷重値、左荷重値および右荷重値のような4つの荷重算出値を4つの荷重検出値から算出して、これら4つの荷重算出値のデータをゲーム機52宛に送信するようにしてもよい。
なお、図49では省略されるが、ゲームコントローラ10側で命令に応じた個数の荷重算出値を算出する場合、マイコン20は、上述の補正値算出プログラムに従った補正値算出処理(図19)および補正プログラムに従った荷重検出値の補正処理(図18のステップS51等)を実行するようにしてもよく、この場合、補正された荷重検出値に基づいて荷重値の算出が行なわれる。
また、リモコン54のプロセッサ112が、ゲームコントローラ10から4つの荷重検出値を取得して、命令に応じた個数の荷重算出値を算出するようにしてもよい。さらに、補正値算出処理および荷重検出値の補正処理もリモコン54のプロセッサ112が実行するようにしてもよい。
なお、上述の各実施例では、必要な個数が2個である場合、4つの荷重センサ14を左右の2組に等分して、左側の隣接する2つの荷重検出値の合計値と右側の隣接する2つの荷重検出値の合計値とを算出するようにしていた。しかしながら、荷重算出値を算出する際の複数の荷重検出値の組合せのパターンは適宜変更されてよい。たとえば、上側の隣接する2つの荷重検出値の合計値(上荷重値)と下側の隣接する2つの荷重検出値の合計値(下荷重値)の計2つの荷重算出値を算出するようにしてもよい。また、複数の荷重検出値は不等分に組み合わせられてもよい。たとえば、1つの荷重検出値と残り3つの荷重検出値の合計値との計2つの荷重算出値を算出するようにしてもよいし、2つの荷重検出値の合計値と残り2つの荷重検出値のそれぞれとの計3つの荷重算出値を算出するようにしてもよい。
また、上述の各実施例において、ゲームコントローラ10にはプレイヤによる操作手段または入力手段として荷重センサ14のみが設けられていた。しかし、他の実施例では、図50に示すように、ゲームコントローラ10には、1つまたは複数の操作ボタン40がさらに設けられてよい。操作ボタン40はプレイヤの足で操作されるフット操作ボタンであり、足で押下げ可能なように所定の大きさを有する。フット操作ボタン40は、プレイヤの乗る台12の上面とは異なる面に設けられる。図50では、台12の1つの側面に2つのフット操作ボタン40が設けられている。なお、フット操作ボタン40は、場合によっては台12の上面に設けられてもよい。また、図50ではケーブル32は省略されている。
フット操作ボタン40がプレイヤの足によって押下げられると、当該フット操作ボタン40に対応する操作信号がマイコン20に入力されて、当該操作データがゲーム機52に送信される。したがって、フット操作データに基づいてゲーム処理が実行され得る。
各フット操作ボタン40に割り当てられる機能は適宜に設定される。たとえば、2つのフット操作ボタン40は、ゲーム開始を指示するためのスタートボタン、およびゲーム選択を行うためのセレクトボタンであってよい。あるいは、2つのフット操作ボタン40は、所定の動作や決定などを指示するためのAボタン、および所定の動作や取消等を指示するためのBボタンであってよい。このゲームコントローラ10によれば、プレイヤは、荷重のかけ方によってゲーム操作を行うことができるとともに、フット操作ボタン40を押し下げることによって、当該フット操作ボタン40に割り当てられた機能を用いゲームを操作することができる。
図51にはフット操作ボタン40に関するマイコン20の動作の一例が示される。マイコン20は、ステップS651で、フット操作ボタン40が押下げられたか否かを判断する。ステップS651で“YES”の場合、つまり、フット操作ボタン40から操作信号が入力されたときには、マイコン20は、ステップS653で、押下げられたフット操作ボタン40に対応する操作データをゲーム機52宛に送信する。この送信は、上述の荷重センサ14の場合と同様に、リモコン54に対して行われる。リモコン54がフット操作ボタン40の操作データを含む入力データをゲーム機52に送信する。したがって、ゲーム機52のCPU82は、フット操作ボタン40の操作データに基づいてゲーム処理を実行することができる。
なお、上述の各実施例では、ゲームコントローラ10は、ゲーム機52と無線通信可能な異種のゲームコントローラであるリモコン54を介して、ゲーム機52と通信するようにしていた。しかし、他の実施例では、ゲームコントローラ10はゲーム機52と直接通信するようにしてよい。
図52に示す実施例では、ゲームコントローラ10は有線でゲーム機52と接続される。具体的には、ゲームコントローラ10のケーブル32の先端のコネクタ24は、ゲーム機52のハウジング56の背面の拡張コネクタ96に接続される。したがて、ゲーム機52のCPU82は、拡張コネクタ96等を介して荷重取得命令をゲームコントローラ10に送信することができる。また、ゲームコントローラ10のマイコン20は、各荷重センサ14の荷重検出値(または荷重算出値)を含む入力データを、コネクタ24等を介してゲーム機52に送信することができる。
また、図53に示す実施例では、ゲームコントローラ10は無線でゲーム機52と接続される。このゲームコントローラ10は、図54に示すように、マイコン20に接続される無線モジュール42を含む。この場合、マイコン20および無線モジュール42には、電池30から電源が供給される。無線モジュール42には、アンテナ42aが接続される。無線モジュール42は、ゲーム機52の無線コントローラモジュール94と同じ無線規格(Bluetooth、無線LANなど)で通信可能にされる。したがって、ゲーム機52のCPU82は、無線コントローラモジュール94等を介して荷重取得命令をゲームコントローラ10に送信することができる。ゲームコントローラ10のマイコン20は、無線モジュール42およびアンテナ42aを介して、ゲーム機52からの命令を受信し、また、各荷重センサ14の荷重検出値(または荷重算出値)を含む入力データをゲーム機52に送信することができる。
また、上述の各実施例では、ゲームコントローラ10の台12(支持板16)は平面視で正方形状または矩形状に形成されていた。しかし、台12(支持板16)の形状は適宜変更可能である。たとえば、図55に示すように、台12(支持板16)は平面視で円形に形成されてもよい。また、図56に示すように、台12は、足形に、つまり、左右の足のそれぞれを乗せる2つの部分を有するように形成されてもよい。
また、上述の各実施例では、4つの荷重センサ14は、台12(支持板16)の周縁部に配置されていた。しかし、他の実施例では、図57に示すように、4つの荷重センサ14は、周縁部よりも内側に配置されてもよい。ただし、4つの荷重センサ14は、荷重検出精度を確保するのに必要な所定の間隔を置いて配置される。
また、上述の各実施例では、支持板16に含まれる1つの中層板16cを4つの荷重センサ14で支持するようにしていた。しかし、他の実施例では、図58に示すように、中層板16cは4つに分離されてもよい。つまり、4つの中層板16cが1つの上層板16aを支持し、各荷重センサ14が各中層板16cを支持するようにしてもよい。この場合、各中層板16cにかかる荷重が、より直接的に各荷重センサ14によって検出されるので、検出精度を高めることができる。
また、上述の各実施例では、1つのゲームコントローラ10がゲーム機52に接続された。しかし、他の実施例では、複数のゲームコントローラ10が直接に、あるいは、複数のリモコン54ないし中継機器またはネットワーク等を介して、ゲーム機52に接続されるように、ゲームシステム50が構成されてよく、このような場合、複数人でプレイするゲームを実行することができる。
また、上述の各実施例では、ゲームコントローラ10に4つの荷重センサ14が設けられたが、他の実施例では、ゲームコントローラ10には4以上の荷重センサ14が設けられてよく、このような場合、さらに様々な個数の荷重算出値を算出してゲーム処理を行うことが可能になる。