図1を参照して、この発明の一実施例であるゲームシステム10は、ビデオゲーム装置(以下、単に「ゲーム装置」という。)12およびコントローラ22を含む。なお、図示は省略するが、この実施例のゲーム装置12は、最大4つのコントローラ22と通信可能に設計されている。また、ゲーム装置12と各コントローラ22とは、無線によって接続される。たとえば、無線通信は、Bluetooth(登録商標)規格に従って実行されるが、赤外線や無線LANなど他の規格に従って実行されてもよい。さらには、有線で接続されても良い。
なお、この実施例では、図1に示すように家庭で使用される据え置き型のゲーム装置12を用いて、この発明の情報処理装置10を構成した場合を説明するが、他の実施例では、パーソナルコンピュータ、携帯電話機、携帯情報端末など他のコンピュータが用いられてもよい。
ゲーム装置12は、略直方体のハウジング14を含み、ハウジング14の前面にはディスクスロット16が設けられる。ディスクスロット16から、ゲームプログラム等を記憶した情報記憶媒体の一例である光ディスク18が挿入されて、ハウジング14内のディスクドライブ54(図2参照)に装着される。ディスクスロット16の周囲には、LEDと導光板が配置され、さまざまな処理に応答させて点灯させることが可能である。
また、ゲーム装置12のハウジング14の前面であり、その上部には、電源ボタン20aおよびリセットボタン20bが設けられ、その下部には、イジェクトボタン20cが設けられる。さらに、リセットボタン20bとイジェクトボタン20cとの間であり、ディスクスロット16の近傍には、外部メモリカード用コネクタカバー28が設けられる。この外部メモリカード用コネクタカバー28の内側には、外部メモリカード用コネクタ62(図2参照)が設けられ、図示しない外部メモリカード(以下、単に「メモリカード」という。)が挿入される。メモリカードは、光ディスク18から読み出したゲームプログラム等をローディングして一時的に記憶したり、このゲームシステム10を利用してプレイしたゲームのゲームデータ(ゲームの結果データまたは途中データ)を保存(セーブ)しておいたりするために利用される。ただし、上記のゲームデータの保存は、メモリカードに対して行うことに代えて、たとえばゲーム装置12の内部に設けられるフラッシュメモリ44(図2参照)のような内部メモリに対して行うようにしてもよい。また、メモリカードは、内部メモリのバックアップメモリとして用いるようにしてもよい。
なお、メモリカードとしては、汎用のSDカードを用いることができるが、メモリスティックやマルチメディアカード(登録商標)のような他の汎用のメモリカードを用いることもできる。
ゲーム装置12のハウジング14の後面には、AVケーブルコネクタ58(図2参照)が設けられ、そのAVコネクタ58を用いて、AVケーブル32aを通してゲーム装置12にモニタ34およびスピーカ34aを接続する。このモニタ34およびスピーカ34aは典型的にはカラーテレビジョン受像機であり、AVケーブル32aは、ゲーム装置12からの映像信号をカラーテレビのビデオ入力端子に入力し、音声信号を音声入力端子に入力する。したがって、カラーテレビ(モニタ)34の画面上にたとえば3次元(3D)ビデオゲームのゲーム画像が表示され、左右のスピーカ34aからゲーム音楽や効果音などのステレオゲーム音声が出力される。また、モニタ34の周辺(この実施例では、モニタ34の上側)には、2つの赤外LED(マーカ)340m,340nを備えるマーカ部34bが設けられる。このマーカ部34bは、電源ケーブル32bを通してゲーム装置12に接続される。したがって、マーカ部34bには、ゲーム装置12から電源が供給される。これによって、マーカ340m,340nは発光し、それぞれモニタ34の前方に向けて赤外光を出力する。
なお、ゲーム装置12の電源は、一般的なACアダプタ(図示せず)によって与えられる。ACアダプタは家庭用の標準的な壁ソケットに差し込まれ、ゲーム装置12は、家庭用電源(商用電源)を、駆動に適した低いDC電圧信号に変換する。他の実施例では、電源としてバッテリが用いられてもよい。
このゲームシステム10において、ユーザまたはプレイヤがゲーム(またはゲームに限らず、他のアプリケーション)をプレイするために、ユーザはまずゲーム装置12の電源をオンし、次いで、ユーザはビデオゲーム(もしくはプレイしたいと思う他のアプリケーション)のプログラムを記録している適宜の光ディスク18を選択し、その光ディスク18をゲーム装置12のディスクドライブ54にローディングする。応じて、ゲーム装置12がその光ディスク18に記録されているプログラムに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザはゲーム装置12に入力を与えるためにコントローラ22を操作する。たとえば、入力手段26のどれかを操作することによってゲームもしくは他のアプリケーションをスタートさせる。また、入力手段26に対する操作以外にも、コントローラ22自体を動かすことによって、動画オブジェクト(プレイヤオブジェクト)を異なる方向に移動させ、または3Dのゲーム世界におけるユーザの視点(カメラ位置)を変化させることができる。
なお、ゲームまたは他のアプリケーションのプログラムおよびデータは、予めゲーム装置12のフラッシュメモリ44(図2)のような内部メモリに記憶されていてもよいし、ネットワーク上のダウンロードサーバからダウンロードして内部メモリに追加的に記憶されてもよい。
図2は図1実施例のビデオゲームシステム10の電気的な構成を示すブロック図である。図示は省略するが、ハウジング14内の各コンポーネントは、プリント基板に実装される。図2に示すように、ゲーム装置12には、CPU40が設けられる。このCPU40は、ゲームプロセッサとして機能する。このCPU40には、システムLSI42が接続される。このシステムLSI42には、外部メインメモリ46、ROM/RTC48、ディスクドライブ54およびAV IC56が接続される。
外部メインメモリ46は、ゲームプログラム等のプログラムを記憶したり、各種データを記憶したりし、CPU40のワーク領域やバッファ領域として用いられる。ROM/RTC48は、いわゆるブートROMであり、ゲーム装置12の起動用のプログラムが組み込まれるとともに、時間をカウントする時計回路が設けられる。ディスクドライブ54は、光ディスク18からプログラムデータやテクスチャデータ等を読み出し、CPU40の制御の下で、後述する内部メインメモリ42eまたは外部メインメモリ46に書き込む。
システムLSI42には、入出力プロセッサ42a、GPU(Graphics Processor Unit)42b,DSP(Digital Signal Processor)42c,VRAM42dおよび内部メインメモリ42eが設けられ、図示は省略するが、これらは内部バスによって互いに接続される。
入出力プロセッサ(I/Oプロセッサ)42aは、データの送受信を実行したり、データのダウンロードを実行したりする。
GPU42bは、描画手段の一部を形成し、CPU40からのグラフィクスコマンド(作画命令)を受け、そのコマンドに従ってゲーム画像データを生成する。ただし、CPU40は、グラフィクスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラムをGPU42bに与える。
図示は省略するが、上述したように、GPU42bにはVRAM42dが接続される。GPU42bが作画コマンドを実行するにあたって必要なデータ(画像データ:ポリゴンデータやテクスチャデータなどのデータ)は、GPU42bがVRAM42dにアクセスして取得する。なお、CPU40は、描画に必要な画像データを、GPU42bを介してVRAM42dに書き込む。GPU42bは、VRAM42dにアクセスして描画のためのゲーム画像データを作成する。
なお、この実施例では、GPU42bがゲーム画像データを生成する場合について説明するが、ゲームアプリケーション以外の任意のアプリケーションを実行する場合には、GPU42bは当該任意のアプリケーションについての画像データを生成する。
また、DSP42cは、オーディオプロセッサとして機能し、内部メインメモリ42eや外部メインメモリ46に記憶されるサウンドデータや音波形(音色)データを用いて、スピーカ34aから出力する音、音声或いは音楽に対応するオーディオデータを生成する。
上述のように生成されたゲーム画像データおよびオーディオデータは、AV IC56によって読み出され、AVコネクタ58を介してモニタ34およびスピーカ34aに出力される。したがって、ゲーム画面がモニタ34に表示され、ゲームに必要な音(音楽)がスピーカ34aから出力される。
また、入出力プロセッサ42aには、フラッシュメモリ44、無線通信モジュール50および無線コントローラモジュール52が接続されるとともに、拡張コネクタ60およびメモリカード用コネクタ62が接続される。また、無線通信モジュール50にはアンテナ50aが接続され、無線コントローラモジュール52にはアンテナ52aが接続される。
入出力プロセッサ42aは、無線通信モジュール50を介して、ネットワークに接続される他のゲーム装置や各種サーバと通信することができる。ただし、ネットワークを介さずに、直接的に他のゲーム装置と通信することもできる。入出力プロセッサ42aは、定期的にフラッシュメモリ44にアクセスし、ネットワークへ送信する必要があるデータ(送信データとする)の有無を検出し、当該送信データが有る場合には、無線通信モジュール50およびアンテナ50aを介してネットワークに送信する。また、入出力プロセッサ42aは、他のゲーム装置から送信されるデータ(受信データとする)を、ネットワーク、アンテナ50aおよび無線通信モジュール50を介して受信し、受信データをフラッシュメモリ44に記憶する。ただし、一定の場合には、受信データをそのまま破棄する。さらに、入出力プロセッサ42aは、ダウンロードサーバからダウンロードしたデータ(ダウンロードデータとする)をネットワーク、アンテナ50aおよび無線通信モジュール50を介して受信し、そのダウンロードデータをフラッシュメモリ44に記憶する。
また、入出力プロセッサ42aは、コントローラ22から送信される入力データをアンテナ52aおよび無線コントローラモジュール52を介して受信し、内部メインメモリ42eまたは外部メインメモリ46のバッファ領域に記憶(一時記憶)する。入力データは、CPU40のゲーム処理によって利用された後、バッファ領域から消去される。
なお、この実施例では、上述したように、無線コントローラモジュール52は、Bluetooth規格にしたがってコントローラ22との間で通信を行う。
さらに、入出力プロセッサ42aには、拡張コネクタ60および外部メモリカード用コネクタ62が接続される。拡張コネクタ60は、USBやSCSIのようなインターフェイスのためのコネクタであり、外部記憶媒体のようなメディアを接続したり、他のコントローラのような周辺機器を接続したりすることができる。また、拡張コネクタ60に有線LANアダプタを接続し、無線通信モジュール50に代えて当該有線LANを利用することもできる。外部メモリカード用コネクタ62には、メモリカードのような外部記憶媒体を接続することができる。したがって、たとえば、入出力プロセッサ42aは、拡張コネクタ60や外部メモリカード用コネクタ62を介して、外部記憶媒体にアクセスし、データを保存したり、データを読み出したりすることができる。
詳細な説明は省略するが、図1にも示したように、ゲーム装置12(ハウジング14)には、電源ボタン20a,リセットボタン20bおよびイジェクトボタン20cが設けられる。電源ボタン20aは、システムLSI42に接続される。この電源ボタン20aがオンされると、ゲーム装置12の各コンポーネントに図示しないACアダプタを経て電源が供給され、システムLSI42は、通常の通電状態となるモード(通常モードと呼ぶこととする)を設定する。一方、電源ボタン20aがオフされると、ゲーム装置12の一部のコンポーネントのみに電源が供給され、システムLSI42は、消費電力を必要最低限に抑えるモード(以下、「スタンバイモード」という。)を設定する。この実施例では、スタンバイモードが設定された場合には、システムLSI42は、入出力プロセッサ42a、フラッシュメモリ44、外部メインメモリ46、ROM/RTC48および無線通信モジュール50、無線コントローラモジュール52以外のコンポーネントに対して、電源供給を停止する指示を行う。したがって、このスタンバイモードは、CPU40によってアプリケーションの実行が行われないモードである。
なお、システムLSI42には、スタンバイモードにおいても電源が供給されるが、GPU42b、DSP42cおよびVRAM42dへのクロックの供給を停止することにより、これらを駆動させないようにして、消費電力を低減するようにしてある。
また、図示は省略するが、ゲーム装置12のハウジング14内部には、CPU40やシステムLSI42などのICの熱を外部に排出するためのファンが設けられる。スタンバイモードでは、このファンも停止される。
ただし、スタンバイモードを利用したくない場合には、スタンバイモードを利用しない設定にしておくことにより、電源ボタン20aがオフされたときに、すべての回路コンポーネントへの電源供給が完全に停止される。
また、通常モードとスタンバイモードの切り替えは、コントローラ22の電源スイッチ26hのオン/オフの切り替えによっても遠隔操作によって行うことが可能である。当該遠隔操作を行わない場合には、スタンバイモードにおいて無線コントローラモジュール52aへの電源供給を行わない設定にしてもよい。
リセットボタン20bもまた、システムLSI42に接続される。リセットボタン20bが押されると、システムLSI42は、ゲーム装置12の起動プログラムを再起動する。イジェクトボタン20cは、ディスクドライブ54に接続される。イジェクトボタン20cが押されると、ディスクドライブ54から光ディスク18が排出される。
図3(A)ないし図3(E)は、コントローラ22の外観の一例を示す。図3(A)はコントローラ22の先端面を示し、図3(B)はコントローラ22の上面を示し、図3(C)はコントローラ22の右側面を示し、図3(D)はコントローラ22の下面を示し、そして、図3(E)はコントローラ22の後端面を示す。
図3(A)ないし図3(E)を参照して、コントローラ22は、たとえばプラスチック成型によって形成されたハウジング22aを有している。ハウジング22aは、略直方体形状であり、ユーザが片手で把持可能な大きさである。ハウジング22a(コントローラ22)には、入力手段(複数のボタンないしスイッチ)26が設けられる。具体的には、図3(B)に示すように、ハウジング22aの上面には、十字キー26a,1ボタン26b,2ボタン26c,Aボタン26d,−ボタン26e,HOMEボタン26f,+ボタン26gおよび電源スイッチ26hが設けられる。また、図3(C)および図3(D)に示すように、ハウジング22aの下面に傾斜面が形成されており、この傾斜面に、Bトリガースイッチ26iが設けられる。
十字キー26aは、4方向プッシュスイッチであり、矢印で示す4つの方向、前(または上)、後ろ(または下)、右および左の操作部を含む。この操作部のいずれか1つを操作することによって、プレイヤによって操作可能なキャラクタまたはオブジェクト(プレイヤキャラクタまたはプレイヤオブジェクト)の移動方向を指示したり、カーソルの移動方向を指示したりすることができる。
1ボタン26bおよび2ボタン26cは、それぞれ、押しボタンスイッチである。たとえば3次元ゲーム画像を表示する際の視点位置や視点方向、すなわち仮想カメラの位置や画角を調整する等のゲームの操作に使用される。または、1ボタン26bおよび2ボタン26cは、Aボタン26dおよびBトリガースイッチ26iと同じ操作或いは補助的な操作をする場合に用いるようにしてもよい。
Aボタンスイッチ26dは、押しボタンスイッチであり、プレイヤキャラクタまたはプレイヤオブジェクトに、方向指示以外の動作、すなわち、打つ(パンチ)、投げる、つかむ(取得)、乗る、ジャンプするなどの任意のアクションをさせるために使用される。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かすなどを指示することができる。また、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。
−ボタン26e、HOMEボタン26f、+ボタン26gおよび電源スイッチ26hもまた、押しボタンスイッチである。−ボタン26eは、ゲームモードを選択するために使用される。HOMEボタン26fは、ゲームメニュー(メニュー画面)を表示するために使用される。+ボタン26gは、ゲームを開始(再開)したり、一時停止したりするなどのために使用される。電源スイッチ26hは、ゲーム装置12の電源を遠隔操作によってオン/オフするために使用される。
なお、この実施例では、コントローラ22自体をオン/オフするための電源スイッチは設けておらず、コントローラ22の入力手段26のいずれかを操作することによってコントローラ22はオンとなり、一定時間(たとえば、30秒)以上操作しなければ自動的にオフとなるようにしてある。
Bトリガースイッチ26iもまた、押しボタンスイッチであり、主として、弾を撃つなどのトリガを模した入力を行ったり、コントローラ22で選択した位置を指定したりするために使用される。また、Bトリガースイッチ26iを押し続けると、プレイヤオブジェクトの動作やパラメータを一定の状態に維持することもできる。また、一定の場合には、Bトリガースイッチ26iは、通常のBボタンと同様に機能し、Aボタン26dによって決定したアクションを取り消すなどのために使用される。
また、図3(E)に示すように、ハウジング22aの後端面に外部拡張コネクタ22bが設けられ、また、図3(B)に示すように、ハウジング22aの上面であり、後端面側にはインジケータ22cが設けられる。外部拡張コネクタ22bは、図示しない別の拡張コントローラを接続するためなどに使用される。インジケータ22cは、たとえば、4つのLEDで構成され、4つのうちのいずれか1つを点灯することにより、点灯LEDに対応するコントローラ22の識別情報(コントローラ番号)を示したり、点灯させるLEDの個数によってコントローラ22の電源残量を示したりすることができる。
さらに、コントローラ22は、撮像情報演算部80(図4参照)を有しており、図3(A)に示すように、ハウジング22aの先端面には撮像情報演算部80の光入射口22dが設けられる。また、コントローラ22は、スピーカ86(図4参照)を有しており、このスピーカ86は、図3(B)に示すように、ハウジング22aの上面であり、1ボタン26bとHOMEボタン26fとの間に設けられる音抜き孔22eに対応して、ハウジング22a内部に設けられる。
なお、図3(A)ないし図3(E)に示したコントローラ22の形状や、各入力手段26の形状、数および設置位置等は単なる一例に過ぎず、それらが適宜改変された場合であっても、本発明を実現できることは言うまでもない。
図4はコントローラ22の電気的な構成を示すブロック図である。この図4を参照して、コントローラ22はプロセッサ70を含み、このプロセッサ70には、内部バス(図示せず)によって、外部拡張コネクタ22b、入力手段26、メモリ72、加速度センサ74、無線モジュール76、撮像情報演算部80、LED82(インジケータ22c)、バイブレータ84、スピーカ86および電源回路88が接続される。また、無線モジュール76には、アンテナ78が接続される。
プロセッサ70は、コントローラ22の全体制御を司り、入力手段26、加速度センサ74および撮像情報演算部80によって入力された情報(入力情報)を、入力データとして無線モジュール76およびアンテナ78を介してゲーム装置12に送信(入力)する。このとき、プロセッサ70は、メモリ72を作業領域ないしバッファ領域として用いる。
上述した入力手段26(26a−26i)からの操作信号(操作データ)は、プロセッサ70に入力され、プロセッサ70は操作データを一旦メモリ72に記憶する。
また、加速度センサ74は、コントローラ22の縦方向(y軸方向)、横方向(x軸方向)および前後方向(z軸方向)の3軸で各々の加速度を検出する。この加速度センサ74は、典型的には、静電容量式の加速度センサであるが、他の方式のものを用いるようにしてもよい。
たとえば、加速度センサ74は、第1所定時間毎に、x軸,y軸,z軸の各々についての加速度(ax,ay,az)を検出し、検出した加速度のデータ(加速度データ)をプロセッサ70に入力する。たとえば、加速度センサ74は、各軸方向の加速度を、−2.0g〜2.0g(gは重力加速度である。以下、同じ。)の範囲で検出する。プロセッサ70は、加速度センサ74から与えられる加速度データを、第2所定時間毎に検出し、一旦メモリ72に記憶する。プロセッサ70は、操作データ、加速度データおよび後述するマーカ座標データの少なくとも1つを含む入力データを作成し、作成した入力データを、第3所定時間(たとえば、5msec)毎にゲーム装置12に送信する。
なお、図3(A)−図3(E)では省略したが、この実施例では、加速度センサ74は、ハウジング22a内部の基板上の十字キー26aが配置される付近に設けられる。
ここで、加速度センサ74から出力される加速度データに基づいて、ゲーム装置12のプロセッサ(たとえば、CPU40)またはコントローラ22のプロセッサ(たとえば、プロセッサ70)などのコンピュータが処理を行うことによって、コントローラ22に関するさらなる情報を推測または算出(判定)することができることは、当業者であれば本明細書の説明から容易に理解できるであろう。
たとえば、1軸の加速度センサを搭載するコントローラが静的な状態であることを前提としてコンピュータ側で処理する場合、すなわち、加速度センサによって検出される加速度が重力加速度のみであるとして処理する場合、コントローラ22が現実に静的な状態であれば、検出された加速度データに基づいてコントローラ22の姿勢が重力方向に対して傾いているか否かまたはどの程度傾いているかを知ることができる。具体的には、加速度センサの検出軸が鉛直下方向である状態を基準としたとき、1G(重力加速度)がかかっているか否かだけで傾いているか否かを知ることができるし、その大きさによってどの程度傾いているかを知ることができる。
また、多軸の加速度センサの場合には、さらに各軸の加速度データに対して処理を施すことによって、重力方向に対してどの程度傾いているかをより詳細に知ることができる。この場合において、加速度センサの出力に基づいて、プロセッサ70がコントローラ22の傾き角度のデータを算出する処理を行ってもよいが、当該傾き角度のデータの算出処理を行うことなく、加速度センサからの出力に基づいて、おおよその傾きを推定できるような処理としてもよい。このように、加速度センサをプロセッサと組み合わせることによって、コントローラ22の傾き、姿勢または位置を判定することができる。
一方、加速度センサが動的な状態を前提とする場合には、重力加速度成分に加えて加速度センサの動きに応じた加速度を検出するので、重力加速度成分を所定の処理により除去すれば、動きの方向などを知ることができる。具体的には、加速度センサを備えるコントローラ22がユーザの手で動的に加速されて動かされている場合に、加速度センサによって生成される加速度データを処理することによって、コントローラ22の様々な動きおよび/または位置を算出することができる。
なお、加速度センサが動的な状態であることを前提とする場合であっても、加速度センサの動きに応じた加速度を所定の処理により除去すれば、重力方向に対する傾きを知ることができる。他の実施例では、加速度センサは、加速度データをプロセッサ70に出力する前に、内蔵の加速度検出手段から出力される加速度信号(加速度データ)に対して所望の処理を行うための、組込み式の信号処理装置また他の種類の専用の処理装置を備えてもよい。たとえば、組込み式または専用の処理装置は、加速度センサが静的な加速度(たとえば、重力加速度)を検出するためのものである場合、検知された加速度データをそれに相当する傾斜角(あるいは、他の好ましいパラメータ)に変換するものであってもよい。
無線モジュール76は、たとえばBluetoothの技術を用いて、所定周波数の搬送波を入力データで変調し、その微弱電波信号をアンテナ78から放射する。つまり、入力データは、無線モジュール76によって微弱電波信号に変調されてアンテナ78(コントローラ22)から送信される。この微弱電波信号が上述したゲーム装置12に設けられた無線コントローラモジュール52によって受信される。受信された微弱電波は、復調および復号の処理を施され、したがって、ゲーム装置12(CPU40)は、コントローラ22からの入力データを取得することができる。そして、CPU40は、取得した入力データとプログラム(ゲームプログラムまたはアプリケーションプログラム)とに従ってゲーム処理を行う。
さらに、上述したように、コントローラ22には、撮像情報演算部80が設けられる。この撮像情報演算部80は、赤外線フィルタ80a、レンズ80b、撮像素子80cおよび画像処理回路80dによって構成される。赤外線フィルタ80aは、コントローラ22の前方から入射する光から赤外線のみを通過させる。上述したように、モニタ34の表示画面近傍(周辺)に配置されるマーカ340mおよび340nは、モニタ34の前方に向かって赤外光を出力する赤外LEDである。したがって、赤外線フィルタ80aを設けることによってマーカ340mおよび340nの画像をより正確に撮像することができる。レンズ80bは、赤外線フィルタ80aを透過した赤外線を集光して撮像素子80cへ出射する。撮像素子80cは、たとえばCMOSセンサあるいはCCDのような固体撮像素子であり、レンズ80bによって集光された赤外線を撮像する。したがって、撮像素子80cは、赤外線フィルタ80aを通過した赤外線だけを撮像して画像データを生成する。以下では、撮像素子80cによって撮像された画像を撮像画像と呼ぶ。撮像素子80cによって生成された画像データは、画像処理回路80dで処理される。画像処理回路80dは、撮像画像内における撮像対象(マーカ340mおよび340n)の位置を算出し、第4所定時間毎に、当該位置を示す各座標値を撮像データとしてプロセッサ70に出力する。なお、画像処理回路80dにおける処理については後述する。
図5は、コントローラ22を用いてゲームプレイするときの状態を概説する図解図である。図5に示すように、ビデオゲームシステム10でコントローラ22を用いてゲームをプレイする際、プレイヤは、一方の手でコントローラ22を把持する。厳密に言うと、プレイヤは、コントローラ22の先端面(撮像情報演算部80が撮像する光の入射口22d側)がマーカ340mおよび340nの方を向く状態でコントローラ22を把持する。ただし、図1からも分かるように、マーカ340mおよび340nは、モニタ34の画面の横方向と平行に配置されている。この状態で、プレイヤは、コントローラ22が指示する画面上の位置を変更したり、コントローラ22と各マーカ340mおよび340nとの距離を変更したりすることによってゲーム操作を行う。
図6は、マーカ340mおよび340nと、コントローラ22との視野角を説明するための図である。図6に示すように、マーカ340mおよび340nは、それぞれ、視野角θ1の範囲で赤外光を放射する。また、撮像情報演算部80の撮像素子80cは、コントローラ22の視線方向を中心とした視野角θ2の範囲で入射する光を受光することができる。たとえば、マーカ340mおよび340nの視野角θ1は、共に34°(半値角)であり、一方、撮像素子80cの視野角θ2は41°である。プレイヤは、撮像素子80cが2つのマーカ340mおよび340nからの赤外光を受光することが可能な位置および向きとなるように、コントローラ22を把持する。具体的には、撮像素子80cの視野角θ2の中に少なくとも一方のマーカ340mおよび340nが存在し、かつ、マーカ340mまたは340nの少なくとも一方の視野角θ1の中にコントローラ22が存在する状態となるように、プレイヤはコントローラ22を把持する。この状態にあるとき、コントローラ22は、マーカ340mおよび340nの少なくとも一方を検知することができる。プレイヤは、この状態を満たす範囲でコントローラ22の位置および向きを変化させることによってゲーム操作を行うことができる。
なお、コントローラ22の位置および向きがこの範囲外となった場合、コントローラ22の位置および向きに基づいたゲーム操作を行うことができなくなる。以下では、上記範囲を「操作可能範囲」と呼ぶ。
操作可能範囲内でコントローラ22が把持される場合、撮像情報演算部80によって各マーカ340mおよび340nの画像が撮像される。すなわち、撮像素子80cによって得られる撮像画像には、撮像対象である各マーカ340mおよび340nの画像(対象画像)が含まれる。図7は、対象画像を含む撮像画像の一例を示す図である。対象画像を含む撮像画像の画像データを用いて、画像処理回路80dは、各マーカ340mおよび340nの撮像画像における位置を表す座標(マーカ座標)を算出する。
撮像画像の画像データにおいて対象画像は高輝度部分として現れるため、画像処理回路80dは、まず、この高輝度部分を対象画像の候補として検出する。次に、画像処理回路80dは、検出された高輝度部分の大きさに基づいて、その高輝度部分が対象画像であるか否かを判定する。撮像画像には、対象画像である2つのマーカ340mおよび340nの画像340m’および340n’のみならず、窓からの太陽光や部屋の蛍光灯の光によって対象画像以外の画像が含まれていることがある。高輝度部分が対象画像であるか否かの判定処理は、対象画像であるマーカ340mおよび340nの画像340m’および340n’と、それ以外の画像とを区別し、対象画像を正確に検出するために実行される。具体的には、当該判定処理においては、検出された高輝度部分が、予め定められた所定範囲内の大きさであるか否かが判定される。そして、高輝度部分が所定範囲内の大きさである場合には、当該高輝度部分は対象画像を表すと判定される。逆に、高輝度部分が所定範囲内の大きさでない場合には、当該高輝度部分は対象画像以外の画像を表すと判定される。
さらに、上記の判定処理の結果、対象画像を表すと判定された高輝度部分について、画像処理回路80dは当該高輝度部分の位置を算出する。具体的には、当該高輝度部分の重心位置を算出する。ここでは、当該重心位置の座標をマーカ座標と呼ぶ。また、重心位置は撮像素子80cの解像度よりも詳細なスケールで算出することが可能である。ここでは、撮像素子80cによって撮像された撮像画像の解像度が126×96であるとし、重心位置は1024×768のスケールで算出されるものとする。つまり、マーカ座標は、(0,0)から(1024,768)までの整数値で表現される。
なお、撮像画像における位置は、撮像画像の左上を原点とし、下向きをY軸正方向とし、右向きをX軸正方向とする座標系(XY座標系)で表現されるものとする。
また、対象画像が正しく検出される場合には、判定処理によって2つの高輝度部分が対象画像として判定されるので、2箇所のマーカ座標が算出される。画像処理回路80dは、算出された2箇所のマーカ座標を示すデータを出力する。出力されたマーカ座標のデータ(マーカ座標データ)は、上述したように、プロセッサ70によって入力データに含まれ、ゲーム装置12に送信される。
ゲーム装置12(CPU40)は、受信した入力データからマーカ座標データを検出すると、このマーカ座標データに基づいて、モニタ34の画面上におけるコントローラ22の指示位置(指示座標)と、コントローラ22からマーカ340mおよび340nまでの各距離とを算出することができる。具体的には、2つのマーカ座標の中点の位置から、コントローラ22の向いている位置すなわち指示位置が算出される。また、撮像画像における対象画像間の距離が、コントローラ22と、マーカ340mおよび340nとの距離に応じて変化するので、2つのマーカ座標間の距離を算出することによって、ゲーム装置12はコントローラ22とマーカ340mおよび340nとの間の距離を把握できる。このように、コントローラ22は表示画面上の任意の位置を指示するポインティングデバイスとしての機能を有している。
このゲームシステム10は、複数の番組情報が表形式で表示される番組情報表示装置10である。つまり、番組表アプリケーションが実行され、モニタ34には複数の番組情報を含む番組表が表示される。この番組表は、家族などの複数のユーザによって共用され得る。各ユーザは、コントローラ22を用いて、見たい番組情報のような興味のある番組情報にユーザ情報を登録することができる。このとき、同一番組情報に対して複数のユーザ情報を登録することが可能になっている。したがって、複数のユーザ情報が同一番組情報に登録された場合に、当該複数のユーザ情報をどのように表示するのかを工夫する必要がある。この番組情報表示装置10では、複数のユーザ情報のそれぞれに対して優先順位を設定し、各番組情報を、当該番組情報に登録されたユーザ情報の優先順位に基づいて描画するようにした。これにより、番組情報に登録されたユーザ情報を、優先順位に基づいて当該番組情報に示すことができる。したがって、番組情報に登録されたユーザ情報を分かり易く表示することができ、ユーザは、番組情報に対する各ユーザ情報の登録状況を容易に把握することができる。
図8はゲーム装置12のメモリマップの一例を示す。メモリマップはプログラム記憶領域400およびデータ記憶領域500を含む。番組情報表示プログラムとデータは、光ディスク18から一度に全部または必要に応じて部分的にかつ順次的に読み出され、外部メインメモリ46または内部メインメモリ42eに記憶される。また、データ記憶領域500には、処理によって生成または取得されたデータも記憶される。
なお、図8にはメモリマップの一部のみが示されており、処理に必要な他のプログラムおよびデータも記憶されている。たとえば、音声、効果音、音楽などの音を出力するためのサウンドデータ、画面を生成するための画像データ、音出力プログラム、画像生成表示プログラムなどが、光ディスク18から読み出されてデータ記憶領域500またはプログラム記憶領域400に記憶される。なお、本実施例においては、プログラムとデータは光ディスク18から読み出されるが、別の実施例においては、たとえばゲーム装置12に内蔵されるフラッシュメモリ44等の不揮発的な記憶媒体に予め記憶したまたはネットワーク経由でダウンロードしたプログラムおよびデータを読み出して、外部メインメモリ46または内部メインメモリ42eに記憶するようにしてもよい。
プログラム記憶領域400の記憶領域402には、番組表表示プログラムが記憶される。このプログラムは、番組表を含む画面を生成してモニタ34に表示するためのものである。この実施例では、番組表の画面を生成する際には、仮想3次元空間に配置された番組表を仮想カメラで描画する。図9は、仮想3次元空間における番組表(参照符号「700」で包括的に示す。)と仮想カメラとを示している。番組表700は複数枚の板(直方体)を含む。この実施例では、番組表データの複数の番組情報を日付ごとに分類し、日付ごとの番組表を表示するので、1日分の番組表が1枚の板として構成されている。また、所定日数分(この実施例では8日分)の番組表700を表示するので、所定枚数(この実施例では8枚)の板が所定の間隔で平行に配列されている。
仮想カメラから見て一番手前の板が、コンテンツとしての番組情報を表示するための番組表であり、奥側の他の板は、番組情報を表示するためのものではなく、見出しとしての日付タブ(参照符号「702」で包括的に示す。)を表示するための番組表である。任意に選択された日付の番組情報によって一番手前の板が構成され、当該日付の番組情報が画面上に表示されることになる。たとえば、現在日時などの所定のデータに対応する日付が選択されたり、予め決められた日付(たとえば番組表データのうち最も古い日付)が選択されたり、ユーザによって選択または設定された日付が選択されたりしてよい。一方、番組表700の他の板の一方端(この実施例では左端)の所定位置には、日付タブ702がそれぞれ設けられ、日付タブ702により、選択されていない日付が示される。
複数の番組情報を表形式で表示するために、一番手前の板は、選択された日付の各番組情報を所定の配列で組み合わせることによって構成されている。具体的には、この実施例では、一方の軸を時間軸とし他方の軸を放送局軸として複数の番組情報をマトリックス状に配置した番組表を形成する。各番組情報は、直方体によって構成されており、複数の直方体を組み合わせることによって一番手前の板が形成される。なお、直方体は、ポリゴンで形成されたオブジェクトである。
番組表では、たとえば縦軸が放送局軸に、横軸が時間軸に設定される(図10参照)。縦方向には複数の放送局が並べられ、横方向には各放送局の複数の番組情報が放送開始時刻の順に並べられる。各番組情報を示す欄の幅、すなわち、直方体の横方向長さは、当該番組の放送時間に応じた長さに設定される。なお、各直方体の縦の長さは所定値に設定される。また、直方体の高さ(奥行き方向の厚み)は、後述されるように番組情報の描画方法に応じて異なる所定の値に設定される。板の全体的なサイズとしては、縦の長さは、縦軸に表示する放送局の数に応じた長さとなり、横の長さは、24時間に相当する所定の長さとなる。他の板の縦横の長さは、最前の板の全体的なサイズと同様に設定され、厚みは所定値に設定される。
また、図9に示すように、番組表700を複数の視点で表示するために複数のカメラ位置が予め決められている。ユーザの操作に応じたカメラ位置の切替によって、番組表の表示が2次元形態と3次元形態との間で切替えられる。なお、カメラ位置は、仮想カメラがどこを見ているのかを示すパラメータを意味し、この実施例では、視点の位置の座標および注視点の位置の座標(または視線方向)を含む。
番組表700の正面に配置されている第1位置は、番組表700を2次元表示形態で表示するためのカメラ位置である。2次元表示形態は、オブジェクトないし画像を2次元で表現するものである。この第1位置は、番組表700のうち最前の板を正面から捕らえて、画面上で2次元平面として、つまり、たとえば図10に示すように2次元の表として表示できるように、適宜に設定される。ただし、第1位置の視点と注視点を結ぶ方向すなわち視線方向は、板の正面に直交する方向に設定される。また、この第1位置は、主として番組情報を示す文字をユーザに明確に見せるために設けられているので、第1位置の視点と最前の板との間の距離は比較的近くなるように適宜に設定される。ただし、番組情報を示す文字が明確に見える状態で1日分のすべての番組情報を一度に表示することは困難なので、デフォルトでは、所定の時刻または現在時刻等に対応する時間帯が含まれる表示範囲になるように視点および注視点が所定位置に設定される。また、第1位置は、ユーザの操作に応じて可変であり、具体的には、ユーザのスクロール操作に応じて視点および注視点が板の正面に対して平行移動されて表示範囲が変更される。スクロール操作により、当初表示範囲外にあった時間帯や放送局の番組情報を画面上に表示することができる。
また、番組表700の斜め方向に配置されている第2位置および第3位置は、番組表700を3次元表示形態で表示するためのカメラ位置である。3次元表示形態は、オブジェクトを3次元で表現するものである。第2位置は、番組表700の全体を捕らえて立体的に表示できるように適宜に設定されている。この実施例では、第2位置として、番組表700を斜め左方向の比較的遠距離から捕らえるように視点および注視点(または視線方向)が予め決められる。日付タブ702が板の左端に設けられるので、斜め左方向が選ばれる。このように、番組表700を斜め方向から捕らえるようにすることで、番組表700の板が3次元で表現される3次元画像を生成することができる。この第2位置は固定されている。第2位置で描画した場合、たとえば図16に示すように番組表700の全体が立体的に表示される。
また、第3位置は、日付タブ702をクローズアップして日付タブ702に注目するように適宜に設定されている。第3位置は、日付タブ702の選択による番組表の日付の切替のために設けられている。この実施例では、第3位置として、番組表700を斜め左方向の比較的近距離から捕らえるように視点および注視点(または視線方向)が予め決められている。この第3位置も固定されている。第3位置で描画した場合、たとえば図17に示すように番組表700の全体が立体的に表示されつつ日付タブ702がクローズアップされる。
この実施例では、3つの表示方法によって番組表を表示する。ここでは、3つの表示方法を、第1拡大表示方法、第2拡大表示方法、および縮小表示方法と呼ぶものとする。
第1拡大表示方法は、番組表700を正面から描画して番組表を2次元で表示するとともに、アカウント登録された番組情報も2次元で平面的に表示するためのものである。第1拡大表示方法では、仮想カメラは第1位置に設定され、かつ、番組情報は、後述する登録番組描画プログラムに従って第1の描画方法で描画される。第1の描画方法では、アカウント登録された番組情報は、優先順位が最も高いアカウントの表示態様で描画される。この第1拡大表示方法では、たとえば図11に示すような画面が表示される。
第2拡大表示方法は、番組表700を正面から描画して番組表を2次元で表示するとともに、アカウント登録された番組情報を3次元で立体的に表示するためのものである。第2拡大表示方法では、仮想カメラは第1位置に設定され、かつ、番組情報は、後述する登録番組描画プログラムに従って第2の描画方法で描画される。第2の描画方法では、アカウント登録された番組情報は、優先順位の高い方から順にアカウントに設定された表示態様が積層されるように描画される。この第2拡大表示方法では、たとえば図13に示すような画面が表示される。
縮小表示方法は、番組表700を斜め方向から描画して全体を3次元で表示するとともに、アカウント登録された番組情報を3次元で立体的に表示するためのものである。縮小表示方法では、仮想カメラは第2位置(または第3位置)に設定され、かつ、アカウント登録された番組情報は、後述する登録番組描画プログラムに従って第2の描画方法により描画される。この縮小表示方法では、図16または図17に示すような画面が表示される。
表示方法は、後述の表示フラグ1,2および3によって管理されており、ユーザの所定の操作に応じて切替えられる。たとえば、デフォルトでは、第1拡大表示方法が選択されている。第1拡大表示方法が選択されている場合に、たとえばBトリガースイッチ26iを押し続ける操作が行われると、第2拡大表示方法に切替られる。一方、第2拡大表示方法が選択されている場合に、Bトリガースイッチ26iが離されると、第1拡大表示方法に切替えられる。
また、第1拡大表示方法では、たとえば+ボタン26gおよび−ボタン26eにより、番組情報を段階的に拡大・縮小して表示することが可能になっている。この縮小の最終段階が、図16に示すような第2位置の仮想カメラによる縮小表示方法となっている。したがって、第1拡大表示方法が選択されている場合に、−ボタン26eが押されて縮小の最終段階になったときには、縮小表示方法に切替られる。また、第1拡大表示方法が選択されている場合に、ボタン806(図10)が選択されたときにも、縮小表示方法に切替えられる。一方、縮小表示方法が選択されている場合に、+ボタン26gが押されて縮小の最終段階が解除されたときには、第1拡大表示方法に切替えられる。
第1拡大表示方法では、各番組情報の番組名等を明確に表示するために、仮想カメラは比較的近い第1位置に設定されており、表示範囲内に入る放送局および時間が限られるので、所定のスクロール操作によって表示範囲の番組情報をスクロールすることができるようになっている。この実施例では、第1拡大表示方法と第2拡大表示方法の切替のための所定の操作を、スクロール操作と同一にしている。第1拡大表示方法では、各番組情報が平面的に描画されるので、各番組情報の番組名等が明示されるが、第2拡大表示方法では、各番組情報が立体的に描画されるので、他の番組情報の番組名等を隠す恐れがある。しかし、スクロール操作が行われているときに、第2拡大表示方法で番組表を表示すれば、表示範囲が移動しているので、立体的に描画された番組情報に隠れていた他の番組情報の番組名等も表示されることになる。このように、第2拡大表示方法への切替のための操作をスクロール操作と同じにすることによって、番組情報に対する複数のアカウントの登録状況を明確に表示するとともに、他の番組情報の番組名等も明確に表示することができる。
記憶領域404には優先順位設定プログラムが記憶される。このプログラムは、複数のユーザ情報のそれぞれの優先順位(優先度)を設定するためのものである。この番組表アプリケーションの各ユーザは最初にアカウント(ユーザ情報)の登録を行う。登録された各アカウントに対して優先順位が設定される。たとえば登録順に各アカウントに優先順位が与えられ、つまり、登録が早いアカウントほど高い順位が与えられる。登録によって設定された各アカウントの優先順位が優先順位テーブルの初期値として記憶される。
また、優先順位は変更可能である。この実施例では、ユーザの操作に応じて各アカウントの優先順位が変更される。具体的には、たとえば図10に示すように、画面上には、各アカウントに対応するアイコンの一例としてスタンプ(参照符号「800」で包括的に示す。)が表示される。図10は、6人のアカウントが登録された場合を示しており、6個のスタンプ800a,800b,800c,800d,800eおよび800fが表示されている。スタンプ800のいずれかがコントローラ22の指示位置を示すポインタ802によって指示されたとき、当該スタンプ800に対応するアカウントの優先順位が最高位になるように、各アカウントの優先順位が変更される。
記憶領域406には、番組登録プログラムが記憶される。このプログラムは、任意の番組情報に対して任意のユーザ情報を登録するためのものである。各ユーザは、見たい番組など興味のある番組情報に対してアカウントを登録することができる。たとえば、スタンプ800を押す操作によって、番組情報へのアカウントの登録が行われる。具体的には、スタンプ800をポインタ802で選択し、その後、所望の番組情報を選択することによって、当該選択したスタンプ800に対応するアカウントを当該番組情報に登録することができる。あるいは、所望の番組情報をポインタ802で選択して当該番組情報の詳細情報を示す詳細画面を番組表上に開き、当該詳細画面の所定領域にスタンプ800を押す操作を行うことによって、当該スタンプ800に対応するアカウントを当該番組情報に登録することができる。番組情報に対してアカウントの登録が行われると、番組登録データが生成される。
記憶領域408には登録番組描画プログラムが記憶される。このプログラムは、各番組情報を当該番組情報に登録されたユーザ情報の優先度に基づいて描画するためのものである。具体的には、複数のアカウントにそれぞれ異なる表示態様を設定する。そして、登録されたアカウントの優先順位に基づいて定められる表示態様で各番組情報を描画する。なお、各アカウントに設定される表示態様は、アカウントの登録されていない番組情報の通常の表示態様とも当然に異なる。
この実施例では、番組情報の描画に関して、2つの描画方法が採用されている。第1の描画方法と第2の描画方法は、ユーザによって選択可能にされており、つまり、ユーザの操作に応じて番組情報の描画方法が切替えられる。具体的には、第1拡大表示方法が選択された場合、第1の描画方法が採用され、第2拡大表示方法または縮小表示方法が選択された場合、第2の描画方法が採用される。
第1の描画方法では、アカウントの登録された番組情報を優先順位に基づいて平面的に描画する。具体的には、アカウント登録された番組情報は、他の番組情報と同一の高さに揃えられて、登録されたアカウントのうち優先順位の最も高いアカウントに設定された表示態様で描画される(図11参照)。この実施例では、表示態様として色が採用される。つまり、各番組情報は、優先順位の最も高いアカウントに設定された色で描画される。
第2の描画方法では、アカウントの登録された番組情報を優先順位に基づいて立体的に描画する。具体的には、登録されたアカウントの優先順位が高い方から順に、アカウントに設定された表示態様が積層されるように、番組情報を描画する(図13参照)。この実施例では、表示態様として色が採用されるので、各番組情報は、優先順位の高い方から順に、アカウントに設定された色が積層されるように描画される。
なお、各アカウントに設定される色の違いは、色の濃淡や階調等の違いであってよい。また、他の実施例では、表示態様として、アカウントごとに異なる模様(テクスチャ)を設定するようにしてもよい。または、第1の描画方法に限った表示態様として、アカウントごとに異なるフォントを設定するようにしてもよく、その場合、番組情報に表示する番組名等の文字のフォントがアカウントごとに異なる。または、他の表示態様として、アカウントごとに異なるマーク等を設定するようにしてもよい。
データ記憶領域500の記憶領域502には番組表データが記憶される。番組表データは、ネットワーク上の配信サーバ等から取得したEPG(Electronic Program Guide)データまたは当該EPGデータに基づいて生成されたデータである。なお、EPGデータは、所定日数分の番組情報を含んでおり、所定のタイミングで(たとえばアプリケーションの起動時)または定期的に(たとえば24時間ごとに)配信サーバ等から取得されてフラッシュメモリ44に記憶されている。番組表データは、たとえば放送局ごとの番組情報を記憶しており、つまり、放送局ID(放送局の識別情報)に対応付けて複数の番組情報が記憶されている。さらに、各番組情報ごとに当該番組に関する情報が記憶されており、つまり、番組ID(番組の識別情報)に対応付けて、日付、開始時刻、終了時刻、放送時間、番組名、ジャンル、詳細情報などが記憶されている。詳細情報は、当該番組の概要や出演者等の情報を含む。なお、番組表の主な目的は放送予定の番組情報を確認することであるから、既に過去となった日のデータは削除されまたは使用されないようにしてよい。
記憶領域504は入力データバッファであり、コントローラ22から所定時間ごとに受信された入力データが記憶される。入力データは、入力手段26の操作データ、加速度センサ74によって検出された加速度データ、および撮像情報演算部80によって検出されたマーカ座標データ(指示位置データ)等を含む。
記憶領域506には番組登録データが記憶される。番組登録データは上述の番組登録プログラムによって生成される。番組IDに対応付けて、当該番組情報に登録したユーザ情報としてのアカウントが記憶される。この実施例では、スタンプ800を用いて番組情報に対するユーザ情報の登録が行われるので、登録に使用されたスタンプ800を特定し、後述のアカウントデータに基づいて、当該スタンプ800に対応付けられたアカウントを特定する。
記憶領域508にはアカウントデータが記憶される。この番組表アプリケーションのユーザとして登録されたアカウントに関する情報が記憶される。番組表アプリケーションでは、所定数(たとえば6)のアカウントが登録可能である。アカウントに対応付けて、当該アカウントに対応するスタンプ800のスタンプID、および当該アカウントに設定される表示態様を示す情報等が記憶される。各アカウントの使用するスタンプ800は、アカウントの登録の際に設定される。各スタンプ800にはスタンプIDが割り振られているので、当該スタンプIDを記憶する。表示態様は、番組情報の表示態様として使用されるので、基本的には、アカウントごとに異なる表示態様が設定されるが、他のアカウントと同じ表示態様の設定も許容されてよい。また、表示態様がたとえば色または模様である場合、アカウントに設定される表示態様は、スタンプ800の表示態様と同一であってよい。
記憶領域510には優先順位テーブルが記憶される。優先順位テーブルは、各ユーザ情報の優先順位を示すデータであり、上述の優先順位設定プログラムによって生成される。具体的には、登録されたアカウントごとの優先順位が記憶される。優先順位はアカウントごとに異なるものであり、2以上のアカウントが同じ優先順位に設定されることはない。
記憶領域512には、表示方法を設定するための表示フラグ1、2および3が記憶される。表示フラグ1は第1拡大表示方法に対応し、表示フラグ2は第2拡大表示方法に対応し、表示フラグ3は縮小表示方法に対応する。上述のように、各表示方法は、番組情報の描画方法と仮想カメラによって分類される。3つの表示フラグのうちのいずれか1つの表示フラグのみがオンにされ、これによって、表示方法が指定される。
記憶領域514には番組表制御データが記憶される。番組表制御データは、番組表の表示を制御するためのデータである。たとえば、番組表700の最前の板を構成する日付の各番組情報について、直方体の数、サイズ、位置、表示態様(色または模様等)および表示する文字等に関する情報が記憶される。各直方体のデータは当該番組IDに対応付けられている。また、他の日付について、板の位置およびサイズ等に関する情報や、日付タブ702のサイズ、位置および表示する文字等に関する情報も記憶される。
この番組表アプリケーションは、たとえばゲーム装置12のメニュー画面から当該アプリケーションを示すボタンないしアイコン等を選択することによって起動される。起動されると、たとえばROM/RTC48から取得された現在の日時に対応する日付および時間帯の番組表が表示される。
図10は番組表の画面の一例を示す。この画面中央に配置された番組表は、第1位置の仮想カメラ(図9参照)によって描画されている。したがって、番組表700の一番手前の板を構成する複数の番組情報が2次元の表形式で表示されている。番組表の縦軸は放送局軸、横軸は時間軸となっており、番組表の左側に放送局とチャンネルを示す放送局欄が表示され、上側に時間欄が表示されている。各番組情報欄には、番組名等を示す文字が表示されている。各番組情報は、上述のように直方体で形成されており、当該直方体の正面(仮想カメラ側の主面すなわち上面)に文字が貼り付けられる。なお、放送局欄は、画面の左端部の所定位置に配置されており、この放送局欄に続けて、第1位置の仮想カメラで描画した番組表が表示されている。つまり、この番組表の画面は、仮想カメラで描画した番組表700と他の画像とを合成することによって生成されている。
また、画面上には、ポインティングデバイスとしてのコントローラ22の指示位置を示すポインタ802が表示される。このポインタ802の表示位置は、コントローラ22の指示位置に応じて移動される。
さらに、画面上端部には、各種のボタン804、806、808、810および812が設けられている。たとえばポインタ802を各ボタン804−812の表示位置に合わせてAボタン26dを押すことによって、各ボタンを選択することができる。なお、他のボタンや項目、スタンプ800、番組情報等も同様の操作で選択することができる。
ボタン804は、ゲーム装置12のメニュー画面に戻るためのボタンである。このボタン804が選択されると、この番組表アプリケーションが終了されて、ゲーム装置12のメニュー画面が表示される。
ボタン806は、表示する番組表の日付を変更するためのボタンである。このボタン806上には、現在表示されている番組表の日付が表示される。図10では、「あした」と表示されており、日付が明日に変更されていることが分かる。このボタン806が選択されると、縮小表示方法に切替えられて、図16に示すような番組表700の全体を示す画面が表示され、日付タブ702の選択によって日付を変更することが可能になる。
ボタン808は、番組表の表示状態ないしモードを選択するためのボタンである。図10ではボタン808に「スタンプ」と表示されており、スタンプ800を用いた番組情報に対するアカウントの登録の状況を表示するモードであることが示される。
ボタン810は、番組情報の検索を行うためのボタンである。ボタン810が選択されると、検索画面が表示され、キーワードやジャンルなどの検索条件を指定して番組情報を検索することができる。
また、ボタン812は、各種の設定を行うためのボタンである。ボタン812が選択されると、設定画面が表示されて各種の設定を行うことができる。この番組表アプリケーションのユーザのアカウントの登録は、このボタン812による設定で行うことができる。各ユーザは、使用するスタンプ800と表示態様とを、たとえばリストから選択することができ、これによりアカウントデータが生成されて記憶領域508に記憶される。また、アカウントの登録が行われた順に順位が高くなるように各アカウントの初期の優先順位が設定され、この設定により優先順位テーブルが生成されて記憶領域510に記憶される。
また、画面下端部には、各アカウントのスタンプ800が表示される。図10は6つのアカウントが登録された例を示しており、したがって、6個のスタンプ800a−800fが表示されている。各スタンプ800は、対応するアカウントに設定された表示態様(この実施例では色)で描画されている。また、各スタンプ800は、画面左側から初期優先順位の順に並べられている。さらに、画面右下隅部には現在時刻を示す時計814が表示されている。
この番組表において、ユーザは、興味のある番組情報にスタンプ800を押すことによって、当該番組情報にアカウントを登録することができる。具体的には、スタンプ800を押す操作を行う際には、ユーザは、まず、自分のスタンプ800をポインタ802で指示して所定のボタン(たとえばAボタン26d)を押すことによって、当該スタンプ800を選択する。スタンプ800が選択されると、たとえば、選択状態を示す画像のスタンプがポインタ802に代えてコントローラ22の指示位置に表示される。そして、ユーザは、選択状態を示すスタンプを移動させて所望の番組情報を指示し、所定のボタン(たとえばAボタン26d)を押すことによって、当該番組情報に当該スタンプ800を押すことができ、つまり、当該番組情報に当該スタンプ800に対応するアカウントを登録することができる。このような番組登録操作が行われると、選択されたスタンプ800に対応するアカウントが特定され、当該アカウントが当該番組情報の番組IDに対応付けて番組登録データ記憶領域506に記憶される。
なお、番組情報に対するアカウントの登録は、当該番組情報の詳細情報を表示する詳細画面でも行うことができる。詳細画面は、当該番組情報がポインタ802で選択されることによって表示される。詳細画面の所定領域にスタンプ800を押すことによって、当該番組情報にアカウントを登録することができる。
番組情報に対するアカウントの登録が行われると、当該番組情報を示す直方体の表示態様が当該アカウントに設定された表示態様に変更され、画面上では、当該番組情報が、当該登録を行ったアカウントに設定された表示態様で表示される。
番組情報にアカウントが登録されたときの番組表の画面の一例を図11に示す。この図11では、右端のスタンプ800fを用いて、参照符号「900」で示す番組情報(「映画スペシャル」)に登録が行われた場合が示されており、したがって、当該番組情報900が右端のスタンプ800fに対応するアカウントに設定された表示態様で描画されている。
また、その後、たとえば、右から2番目のスタンプ800eから左端のスタンプ800aまで順番に同番組情報900に対して登録操作が行われた場合には、各スタンプ800が押されるたびに、当該スタンプ800に対応するアカウントに設定された表示態様で当該番組情報900が描画されることになる。したがって、最後に左端のスタンプ800aが押されると、画面上には、当該左端のスタンプ800aに対応するアカウントに設定された表示態様を有する番組情報900が表示される。
この実施例における番組情報の描画は、アカウントの優先順位に基づいて行われている。図11の番組表は、第1拡大表示方法で表示されており、番組情報は、第1の描画方法で描画されている。つまり、番組情報に登録されているアカウントのうち、優先順位の最も高いアカウントに設定された表示態様で当該番組情報が描画されている。スタンプ800による番組登録によって当該番組情報の表示態様が当該スタンプ800に対応するアカウントの表示態様に変更されるのは、スタンプ800による番組登録の際に優先順位の変更が行われているからである。
具体的には、この実施例では、スタンプ800がポインタ802で指示されたと判別されるとき、当該指示されたスタンプ800に対応するアカウントの優先順位が最も高くなるように優先順位が変更される。また、他のアカウントの優先順位は必要に応じて繰り下げられる。上述のように、スタンプ800を選択する際には、スタンプ800をポインタ802で指示してAボタン26dを押す必要がある。したがって、スタンプ800を押す操作を行うと、スタンプ800が指示されたと判断されることとなり、この優先順位の変更が行われる。このように、選択されたスタンプ800に対応するアカウントの優先順位が最高位になるように優先順位の変更が行われるので、番組情報にアカウントが登録されたときには、当該番組情報が当該アカウントに設定された表示態様で描画されることとなる。
上述のように、図11の番組表は、第1拡大表示方法で表示されており、番組情報は、第1の描画方法で描画されている。この第1の描画方法では、アカウントの登録された番組情報は優先順位の最も高いアカウントに設定された表示態様で描画される。番組表の表示方法は、ユーザ操作に応じて切替えることができる。たとえばBトリガースイッチ26iが押されているときには、第2拡大表示方法に切替えられ、番組情報は第2の描画方法で描画される。第2の描画方法では、番組情報に登録されているアカウントの優先順位が高い方から順にアカウントに設定された表示態様が積層されるように、当該番組情報が描画される。
具体的には、アカウントの登録された各番組情報を、登録アカウント数個の直方体によって構成する。登録アカウント数が2以上である場合には、2以上の直方体が積み上げられて、直方体の積層体が形成される。そして、各直方体の表示態様が、上側(仮想カメラ側)から、登録アカウントの優先順位の順番の表示態様に設定される。つまり、各アカウントに設定された表示態様を有する直方体(オブジェクト)が、登録された複数のアカウントの優先順位の高い方から順に上側から層状に配列される。
図12には、第2拡大表示方法が選択された場合の番組表700と仮想カメラの一例が示される。なお、図12では、番組表700の最前の板のみを示している。番組情報900には6つのアカウントが登録されており、したがって、当該番組情報900は6個の直方体の積層体として形成されている。なお、各直方体の高さは、アカウントの登録されていない番組情報の直方体の高さ(第1の描画方法の場合の直方体の高さ)よりも高い所定値に設定されている。また、番組情報900への登録は、スタンプ800f,800e,800d,800c,800b,800aの順に行われており、したがって、優先順位は、スタンプ800a,800b,800c,800d,800e,800fのアカウントの順となっている。そして、6個の直方体のそれぞれに、上側(仮想カメラ側)から優先順位の順に表示態様が設定され、つまり、上側から順にスタンプ800a,800b,800c,800d,800e,800fに対応する表示態様が設定されている。
この図12の積層体を含む番組表700が第1位置の仮想カメラで描画されて、図13に示すような画面が表示される。図13に示すように、登録されているアカウントの優先順位の高い方から順に、アカウントに設定された表示態様が積層されるようにして、番組情報900が描画される。最も目立つ一番上の直方体の表示態様が優先順位の最も高いアカウントの表示態様となる。また、一番上の直方体の上面に番組名(「映画スペシャル」)が表示される。また、直方体の高さが他の番組情報の直方体の高さよりも高くされるので、一番下の直方体の表示態様も見ることができる。このように、登録されたアカウントの表示態様が優先順位に従って積層されるように番組情報を立体的に表示することができ、番組情報にどのアカウントが登録しているのかを容易に把握することができる。
また、この実施例では、上述のように、スタンプ800がポインタ802で指示されたとき、アカウントの優先順位が変更され、指示されたスタンプ800に対応するアカウントの優先順位が最も高くされる。したがって、第1拡大表示方法で表示された番組表の画面で、いずれかのスタンプ800がポインタ802で指示されたときには、当該スタンプ800に対応するアカウントの登録されている番組情報は、当該アカウントに設定された表示態様で描画される。
図14はスタンプ800が指示されたときの画面の一例を示す。図14では、右から3番目のスタンプ800dがポインタ802で指示されており、当該スタンプ800dに対応するアカウントの登録されている番組情報900が、当該アカウントに設定された表示態様で描画されている。このように、ポインタ802でスタンプ800を指示することによって、当該スタンプ800に対応するアカウントの優先順位が最高位に変更され、当該アカウントが登録されている番組情報の表示態様が当該アカウントの表示態様に変更される。したがって、スタンプ800を指示するという簡単な操作で、各アカウントがどの番組情報に登録をしているのかを容易に確認することができる。つまり、自分の登録状況も他のユーザの登録状況も容易に知ることができる。
その後、たとえばBトリガースイッチ26iを押すことによって第2の描画方法を選択すると、図15に示すように第2の描画方法で描画された番組表の画面が表示される。この画面では、指示したスタンプ800に対応するアカウントの表示態様が最も上に積層されるように立体的に描画された番組情報が表示される。したがって、指示したスタンプ800に対応するアカウントの登録状況を容易に確認することができるとともに、当該指示したアカウントの登録された番組情報に対する他のアカウントの登録状況も知ることができる。
縮小表示方法が選択されたときにも、番組情報は第2の描画方法で描画される。たとえば、+ボタン26gおよび−ボタン26eを番組表の拡大および縮小を指示するためのボタンとして機能させることができるので、第1拡大表示方法が選択されている場合に、−ボタン26eが押されて縮小の最終段階に至ったときには、仮想カメラが第2位置に切替えられるとともに、第2の描画方法に切替えられる。したがって、複数のアカウントの登録された番組情報は、登録アカウント数個の直方体の積層体として形成される。第2位置の仮想カメラで番組表700を描画すると、たとえば、図16に示すように、全体の捉えられた番組表700において、アカウントの登録された番組情報900が、登録されたアカウントの優先順位の順番に表示態様が積層されるようにして、手前側に突出して表示される。
また、この縮小表示方法では、さらに、仮想カメラを第2位置から第3位置に切替えることができる。この番組表700の左端には日付タブ702が表示されており、ポインタ802によって日付タブ702を含む所定の表示領域内が指示されたときには、仮想カメラが第2位置から第3位置に切替えられ、たとえば、図17に示すように、日付タブ702がクローズアップされた番組表700が表示される。この番組表700においても、アカウントの登録された番組情報が、登録されたアカウントの優先順位の順番に表示態様が積層されるようにして、手前側に突出して表示される。したがって、番組表700を全体的に3次元で表示する画面においても、番組情報に対する各アカウントの登録状況を容易に知ることができる。
なお、縮小表示方法による図16および図17の番組表の画面では、各番組情報には、番組名等の文字を表示していないが、第1拡大表示方法および第2拡大表示方法の場合と同様に、番組名等の文字を表示するようにしてもよい。
図18にはゲーム装置12の動作の一例が示される。まず、ステップS1で、CPU40は初期設定を実行する。たとえば各種の変数やフラグに初期値を設定する。また、番組表アプリケーションの過去の実行において生成された番組登録データ、アカウントデータおよび優先順位テーブルがフラッシュメモリ44に記憶されている場合、番組登録データ、アカウントデータおよび優先順位テーブルをデータ記憶領域500の記憶領域506、508および510にそれぞれ読み出す。
なお、図18のフロー図では省略されるが、番組表アプリケーションの最初の起動時には、アカウントの登録を行う。各アカウントの使用するスタンプ800および表示態様等の設定を行い、アカウントデータを記憶領域506に生成する。また、生成したアカウントデータは、フラッシュメモリ44の所定領域にも記憶すなわち保存する。さらに、優先順位設定プログラムに従って、たとえばアカウントの登録の順番に基づいて各アカウントの初期優先順位を設定し、優先順位テーブルを記憶領域510に生成する。また、生成した優先順位テーブルを、フラッシュメモリ44の所定領域にも記憶すなわち保存する。
次に、ステップS3で、CPU40は番組表を表示する。具体的には、CPU40は、GPU42b等を用いて、番組表表示プログラムに従って番組表データに基づいて図9に示したような仮想3次元空間の番組表700を表示するための番組表制御データを記憶領域514に生成し、仮想カメラによって描画した当該番組表を含む画面を生成してモニタ34に表示する。なお、番組表アプリケーションの起動時には、ROM/RTC48から取得した現在の日付の番組情報によって番組表700の一番手前の板を構成する。また、各表示フラグの初期値については、表示フラグ1がオン、他の表示フラグがオフに設定されるので、第1拡大表示方法が選択される。また、番組表の表示範囲は現在の時刻に基づいて設定される。この表示処理によって、たとえば図10のような2次元の番組表を含む画面が表示される。画面下端部には、登録されたアカウントのスタンプ800が初期優先順位の順番で表示される。
表示された番組表の画面に対してユーザによって入力が与えられて、興味のある番組情報に対してアカウントが登録されたり、表示方法が切替えられて各番組情報に対するアカウントの登録状況が表示されたりする。以下のステップS5からステップS21までの処理を、CPU40は一定時間(たとえば1フレーム=1/60秒)ごとに繰り返し実行する。
ステップS5では、CPU40は、コントローラ22からの入力データを取得する。コントローラ22から一定周期で送信される入力データは、無線コントローラモジュール52によって受信されて、外部メインメモリ46または内部メインメモリ42eに設けられた入力データバッファ504に記憶されており、当該記憶領域504からCPU40は入力データを読み出す。
そして、ステップS7で、CPU40はいずれかのスタンプ800がポイントされたか否か、つまり、優先順位を変更する操作が行われたか否かを判断する。具体的には、ポインタ802の表示位置データとスタンプ800の表示位置データに基づいて、ポインタ802の表示位置がいずれかのスタンプ800の表示位置(表示領域または当たり判定領域)内であるか否かを判別する。ポインタ802の表示位置がスタンプ800の表示位置内である場合、当該指示されたスタンプ800のスタンプIDを特定する。なお、コントローラ22による指示位置すなわちポインタ802の表示位置は、入力データに含まれるマーカ座標データから算出される。また、スタンプ800の表示位置データは優先順位に応じて予め決められており、データ記憶領域500に記憶されている。
ステップS7で“YES”の場合には、CPU40は、ステップS9で、ポイントされたスタンプ800に対応するアカウントの優先順位を最高位に設定する。具体的には、ポイントされたスタンプ800のスタンプIDに対応付けられたアカウントをアカウントデータに基づいて特定し、優先順位テーブルにおいて当該アカウントの優先順位を最高位(すなわち1)に変更する。また、ステップS11で、CPU40は、他のアカウントの優先順位を繰り下げる。具体的には、優先順位テーブルにおいて、ポイントされたアカウントよりも上位の優先順位を有していた各アカウントの優先順位を1だけ繰り下げる。ステップS11を終了すると、処理はステップS19に進む。
一方、ステップS7で“NO”の場合には、CPU40は、ステップS13でいずれかの番組欄にスタンプ800が押されたか否か、つまり、番組情報に対してアカウントの登録があったか否かを判断する。たとえば、いずれかのスタンプ800が選択された状態で、いずれかの番組情報が選択されたか否かを判別する。具体的には、スタンプ800の表示位置データと入力データに基づいて、スタンプ800をポインタ802で指示した状態でAボタン26dが押されたと判断されるとき、当該スタンプ800が選択された状態に設定される。その後、各番組情報の表示位置データと入力データに基づいて、いずれかの番組情報の欄を指示した状態でAボタン26dが押されたと判断されるとき、当該番組情報が選択されたと判断される。あるいは、番組情報の詳細画面に対してスタンプ800が押されたか否かを判断するようにしてもよい。なお、詳細画面は、ポインタ802で番組情報を選択することによって表示され、スタンプ800を押すための領域を有している。
ステップS13で“YES”の場合には、CPU40は、ステップS15で、当該スタンプ800に対応するアカウントを当該番組IDに関連付けて登録する。具体的には、入力データとスタンプ800の表示位置データに基づいて、選択されたスタンプ800のスタンプIDを特定し、アカウントデータに基づいて当該スタンプIDに対応するアカウントを特定する。また、入力データと番組情報の表示位置データに基づいて、選択された番組情報の番組IDを特定する。そして、番組登録データ記憶領域506に、当該番組IDに対応付けて当該アカウントを記憶する。当該番組IDに関するデータが既に番組登録データ記憶領域506に記憶されている場合には、今回のアカウントを追加する。なお、生成された番組登録データは、フラッシュメモリ44の所定領域にも記憶すなわち保存する。ステップS15を終了すると、処理はステップS19に進む。
一方、ステップS13で“NO”の場合、CPU40はステップS17で表示方法変更処理を実行する。表示方法変更処理は、ユーザの操作に応じて番組情報を示す直方体の構成と仮想カメラを切替えるための処理であり、この表示方法変更処理の動作の一例が図19に示される。
図19のステップS31で、CPU40は、第1拡大表示方法が選択されたか否かを判断する。具体的には、入力データに基づいて第1拡大表示方法を指示する操作が行われたか否かを判断する。たとえば、Bトリガースイッチ26iが離されたか否かが判断される。または、縮小の最終段階(縮小表示方法)で+ボタン26gが押されたか否かが判断される。
ステップS31で“YES”の場合には、CPU40は、ステップS33で、記憶領域512に記憶される表示フラグ1をオンにするとともに、他の表示フラグをオフにする。
一方、ステップS31で“NO”の場合、CPU40は、ステップS35で第2拡大表示方法が選択されたか否かを判断する。具体的には、入力データに基づいて第2拡大表示方法を指示する操作が行われたか否かが判断される。たとえば、Bトリガースイッチ26iが押されているか否かが判断される。
ステップS35で“YES”の場合、CPU40は、ステップS37で記憶領域512に記憶される表示フラグ2をオンにするとともに、他の表示フラグをオフにする。
一方、ステップS35で“NO”の場合、CPU40は、ステップS39で縮小表示方法が選択されたか否かを判断する。具体的には、入力データに基づいて縮小表示方法を指示する操作が行われたか否かが判断される。たとえば、−ボタン26eが押されて縮小表示の段階が最終段階になったか否かが判断される。または、ボタン806が選択されたか否かが判断される。
ステップS39で“YES”の場合には、CPU40は、ステップS41で記憶領域512に記憶される表示フラグ3をオンにするとともに、他の表示フラグをオフにする。
一方、ステップS39で“NO”の場合には、つまり、表示方法を変更する操作が行われていないと判断される場合には、そのまま表示方法変更処理を終了し、処理は図18のステップS19へ戻る。
図18のステップS19では、CPU40は、優先順位に基づく番組表表示処理を実行する。この処理の動作の一例が図20に示される。図20のステップS61では、CPU40は、記憶領域512の表示フラグ1がオンであるか否かを判断する。
ステップS61で“YES”の場合、つまり、第1拡大表示方法が選択されている場合には、CPU40は、ステップS63で、第1拡大表示方法の仮想カメラを設定する。この仮想カメラは第1位置に設定される。ただし、視点および注視点は、たとえば第1拡大表示方法が選択されたときの座標にそれぞれ固定される。
そして、第1の描画方法で各番組情報を描画する。具体的には、ステップS65で、CPU40は、各番組情報として、初期高さに揃えた直方体を形成する。具体的には、記憶領域514に記憶された番組表制御データにおいて、各番組情報の直方体の高さを初期値に設定する。なお、第1の描画方法では、各番組情報は1個の直方体で構成される。また、直方体の横の長さは、当該番組情報の放送時間に基づいて設定され、縦の長さは所定値に設定されている。
続くステップS67で、CPU40は、アカウント登録された各番組情報について、直方体の色を、登録アカウントのうち優先順位が最高位のアカウントの色に設定する。具体的には、記憶領域506の番組登録データに記憶されている各番組IDについて、登録アカウントのうち最高順位のアカウントを優先順位テーブルに基づいて特定する。さらに、記憶領域508のアカウントデータに基づいて当該アカウントに対応付けられた色を特定する。そして、記憶領域514の番組表制御データにおいて、当該番組IDの直方体の色を当該アカウントに対応付けられた色に設定する。このステップS67を終了すると、処理はステップS81に進む。
一方、ステップS61で“NO”の場合、CPU40は、ステップS69で記憶領域512の表示フラグ2がオンであるか否かを判断する。ステップS61で“YES”の場合、つまり、第2拡大表示方法が選択されている場合には、CPU40は、ステップS71で、第2拡大表示方法の仮想カメラを設定する。この仮想カメラは第1位置に設定される。ただし、この実施例では、番組表のスクロールのための操作と第2拡大表示方法を選択する操作とが同じ操作(たとえばBトリガースイッチ26iを押す)に設定されているので、視点および注視点は、スクロール操作に応じて移動される。具体的には、第2拡大表示方法を選択する操作が行われたときの指示位置の座標から現在の指示位置の座標までを結ぶベクトルに基づいて、視点および注視点の座標をそれぞれ番組表700の正面に対して平行移動させる。
一方、ステップS69で“NO”の場合、つまり、表示フラグ3がオンにされている場合には、CPU40は、ステップS79で、縮小表示方法の仮想カメラを設定する。この仮想カメラは、第2位置または第3位置に設定される。具体的には、縮小表示方法に切替えられたときには、第2位置が選択される。その後、仮想カメラが第2位置である場合において、指示位置の座標が日付タブ702を含む所定の表示領域内であると判断されるときには、第3位置に切替えられる。仮想カメラが第3位置である場合において、指示位置の座標が日付タブ702を含む所定の表示領域外であると判断されるときには、第2位置に切替えられる。
そして、第2の描画方法で各番組情報を描画する。具体的には、ステップS73で、CPU40は、番組登録データに基づいて、アカウント登録された各番組情報について、登録アカウント数Nを検出する。
続くステップS75では、CPU40は、アカウント登録された各番組情報として、所定の高さを有するN個の直方体の積層体を形成する。具体的には、記憶領域514に記憶された番組表制御データにおいて、アカウント登録された各番組情報の直方体の数を、検出された数Nに設定するとともに、各直方体の高さを所定値に設定する。高さの所定値はこの実施例では初期値よりも大きい値に予め決められている。なお、登録アカウント数が1である場合には、直方体の数は1個であるが、便宜上、積層体と呼ぶものとする。
そして、ステップS77で、CPU40は、アカウント登録された各番組情報について、各直方体の色を、上側から優先順位の順番でアカウントの色に設定する。具体的には、記憶領域514に記憶された番組表制御データにおいて、アカウント登録された各番組情報の番組IDに対応付けられたN個の直方体の色を、上側から優先順位の順番で、登録アカウントの色に設定する。なお、登録アカウント数が1である場合、1個の直方体の色が当該アカウントの色に設定される。
続いて、ステップS81で、CPU40はGPU42b等を用いて番組表制御データ等に基づいて番組表を描画する。これによって、表示フラグ1がオンの場合には、第1位置の仮想カメラによって2次元の番組表が描画される。そして、当該番組表において、アカウント登録されている各番組情報は、優先順位の最も高いアカウントの色で描画される。また、表示フラグ2がオンの場合には、第1位置の仮想カメラによって2次元の番組表が描画される。そして、当該番組表において、アカウント登録されている各番組情報は、登録アカウントの優先順位の高い方から順に色が積層されるように描画される。また、表示フラグ3がオンの場合には、第2位置または第3位置の仮想カメラによって3次元の番組表が描画される。そして、当該番組表において、アカウント登録されている各番組情報は、登録アカウントの優先順位の高い方から順に色が積層されるように描画される。
そして、ステップS83で、CPU40は、GPU42b等を用いて、描画した番組表、スタンプ800、ポインタ802、時計814、および各種ボタン804、806、808、810および812等を合成した画面の画像データをVRAM42dに生成し、当該画面をモニタ34に表示する。ステップS83を終了すると、この優先順位に基づく番組表表示処理を終了し、処理は図18のステップS21に戻る。
図18のステップS21では、CPU40は、番組表アプリケーションを終了するか否かを判断する。たとえば、入力データとボタン804の表示位置データに基づいて、ボタン804が選択されたか否かを判断する。ステップS21で“NO”の場合、処理はステップS5に戻る。一方、ステップS21で“YES”の場合には、この番組表アプリケーションを終了する。
この実施例によれば、複数のアカウントのそれぞれに対して優先順位を設定して、各番組情報を、当該番組情報に登録されたアカウントの優先順位に基づいて描画するようにした。これにより、番組情報に登録されたアカウントを、優先順位に基づいて当該番組情報に描画することができる。また、番組表において、各番組情報が当該番組情報に登録されたアカウントの優先順位に基づいて描画されるので、番組情報に登録されたアカウントを分かり易く表示することができる。したがって、番組情報に対するアカウントの登録状況を容易に把握することができる。また、複数のアカウントが同一番組情報に対して登録されても、登録されたアカウントを番組表において当該番組情報に表示することができるので、番組表の表示範囲が狭められるような問題もないし、また、番組表における位置を直感的に把握することが難しいという欠点もない。
なお、上述の実施例では、第1の描画方法では、優先順位の最も高いアカウントに設定された表示態様で番組情報を描画するようにしていた。しかし、他の実施例では、番組情報に複数のアカウントが登録されている場合、当該番組情報の表示領域を登録アカウント数で分割し、各分割領域を優先順位に基づいた順序で各アカウントの表示態様で描画するようにしてもよい。たとえば、番組情報の表示領域を横方向に分割して、左から右に優先順位が低くなるようにして各分割領域を各アカウントの色で描画してよいし、または、番組情報の表示領域を縦方向に分割して、上から下に優先順位が低くなるようにして各分割領域を各アカウントの色で描画してよい。
また、上述の各実施例では、番組情報を示すオブジェクトを直方体で構成したが、当該オブジェクトは適宜な形状の立体であってよい。したがって、第2描画方法の場合に形成される積層体も、当該立体を積み重ねて形成されてよい。また、第1の描画方法の場合には、当該オブジェクトは平面で形成されてもよい。
また、上述の各実施例では、縮小表示方法の場合、図16および図17に示したように、画面にスタンプ800を表示していなかったが、他の実施例では、第1および第2拡大表示方法の場合と同様に、スタンプ800を表示し、スタンプ800の指示によって優先順位を変更できるようにしてもよく、その場合、1日分の番組表の全体的な表示において、各アカウントの登録状況を把握することができる。
また、上述の各実施例では、縮小表示方法の場合、第2の描画方法のみが行われるようにしていたが、他の実施例では、第1の描画方法も行われるようにしてもよい。たとえば、−ボタン26e等の所定の操作によって第1拡大表示方法から縮小表示方法に切替える際には、仮想カメラを第2位置に変更し、かつ、番組情報を第1の描画方法で描画する。その後、Bトリガースイッチ26i等の所定の操作によって、番組情報を第2の描画方法で描画するようにしてもよい。
また、上述の各実施例では、ゲーム装置12に登録されたユーザのみを対象として、各番組情報をアカウントの優先順位に基づいて描画するようにしていた。しかし、他の実施例では、別のゲーム装置12のユーザによる番組登録の結果も表示されるようにしてよい。具体的には、別のゲーム装置12を第2ゲーム装置12と呼ぶものとすると、ゲーム装置12は、ネットワークを介して第2ゲーム装置12と通信し、第2ゲーム装置12で登録された番組IDを含む番組登録データを受信する。また、ゲーム装置12は、第2ゲーム装置12に対してアカウントを設定するとともに、当該アカウントに対応するアイコンおよび表示態様を設定して、当該アカウントに関するデータをアカウントデータ記憶領域508に追加する。画面上には、たとえば右端のスタンプ800の右側に、第2ゲーム装置12のアイコンを表示する。ただし、このアイコンは、スタンプ800とは異なり、番組情報に対して登録を行えないようにする。さらに、ゲーム装置12は、第2ゲーム装置12に対して設定されたアカウントにも優先順位を設定し、当該アカウントの優先順位データを優先順位テーブル記憶領域510に追加する。たとえば、初期の優先順位として最低位を付与する。さらに、ゲーム装置12は、第2ゲーム装置12の番組登録データを番組登録データ記憶領域506に追加する。このようにすれば、ゲーム装置12では、当該ゲーム装置12のアカウントによる番組登録結果と別のゲーム装置12における番組登録結果とを同じように扱って、番組情報を描画することができる。