図1を参照して、この発明の実施例であるゲーム装置10は、第1の液晶表示器(LCD)12および第2のLCD14を含む。このLCD12およびLCD14は、所定の配置位置となるようにハウジング16に収納される。この実施例では、ハウジング16は、上側ハウジング16aと下側ハウジング16bとによって構成され、LCD12は上側ハウジング16aに収納され、LCD14は下側ハウジング16bに収納される。したがって、LCD12とLCD14とは縦(上下)に並ぶように近接して配置される。
なお、この実施例では、表示器としてLCDを用いるようにしてあるが、LCDに代えて、EL(Electronic Luminescence)ディスプレイやプラズマディスプレイを用いるようにしてもよい。
図1からも分かるように、上側ハウジング16aは、LCD12の平面形状よりも少し大きな平面形状を有し、一方主面からLCD12の表示面を露出するように開口部が形成される。一方、下側ハウジング16bは、その平面形状が上側ハウジング16aよりも横長に選ばれ、横方向の略中央部にLCD14の表示面を露出するように開口部が形成される。また、下側ハウジング16bには、音抜き孔18が形成されるとともに、操作スイッチ20(20a,20b,20c,20d,20e,20Lおよび20R)が設けられる。
また、上側ハウジング16aと下側ハウジング16bとは、上側ハウジング16aの下辺(下端)と下側ハウジング16bの上辺(上端)の一部とが回動可能に連結されている。したがって、たとえば、ゲームをプレイしない場合には、LCD12の表示面とLCD14の表示面とが対面するように、上側ハウジング16aを回動させて折りたたんでおけば、LCD12の表示面およびLCD14の表示面に傷がつくなどの破損を防止することができる。ただし、上側ハウジング16aと下側ハウジング16bとは、回動可能に連結せずに、それらを一体的(固定的)に設けたハウジング16を形成するようにしてもよい。
操作スイッチ20は、方向指示スイッチ(十字スイッチ)20a,スタートスイッチ20b、セレクトスイッチ20c、動作スイッチ(Aボタン)20d、動作スイッチ(Bボタン)20e、動作スイッチ(Lボタン)20Lおよび動作スイッチ(Rボタン)20Rを含む。スイッチ20a,20bおよび20cは、下側ハウジング16bの一方主面において、LCD14の左側に配置される。また、スイッチ20dおよび20eは、下側ハウジング16bの一方主面において、LCD14の右側に配置される。さらに、スイッチ20Lおよびスイッチ20Rは、それぞれ、下側ハウジング16bの上端(天面)の一部であり上側ハウジング16aとの連結部以外の部分において、当該連結部を挟むようにして左右に配置される。
方向指示スイッチ20aは、ディジタルジョイスティックとして機能する。4つの押圧部の1つを操作することによって、プレイヤによって操作可能なプレイヤキャラクタ(またはプレイヤオブジェクト)やカーソルの移動方向の指示等が可能である。スタートスイッチ20bは、プッシュボタンで構成され、ゲームの開始(再開)、や一時停止等のために用いられる。セレクトスイッチ20cは、プッシュボタンで構成され、ゲームモードの選択等のために用いられる。
動作スイッチ20dすなわちAボタンは、プッシュボタンで構成され、方向指示以外の動作、すなわち、プレイヤキャラクタに打つ(パンチ)、投げる、つかむ(取得)、乗る、ジャンプする、切る等の任意の動作(アクション)をさせることができる。たとえば、アクションゲームにおいては、ジャンプ、パンチ、武器を動かす等を指示することができる。また、ロールプレイングゲーム(RPG)やシミュレーションRPGにおいては、アイテムの取得、武器やコマンドの選択および決定等を指示することができる。動作スイッチ20eすなわちBボタンは、プッシュボタンで構成され、セレクトスイッチ20cで選択したゲームモードの変更やAボタン20dで決定したアクションの取り消し等のために用いられる。
動作スイッチ20L(Lボタン)および動作スイッチ20R(Rボタン)は、プッシュボタンで構成され、Lボタン20LおよびRボタン20Rは、Aボタン20dおよびBボタン20eと同様の操作に用いることができ、また、Aボタン20dおよびBボタン20eの補助的な操作に用いることができる。
また、LCD14の上面には、タッチパネル22が装着される。タッチパネル22としては、たとえば、抵抗膜方式、光学式(赤外線方式)および静電容量結合式のいずれかの種類のものを用いることができる。また、タッチパネル22は、その上面をスティック24ないしはペン(スタイラスペン)或いは指(以下、これらを「スティック24等」という場合がある。)で、押圧したり、撫でたり、触れたり、叩いたりすることにより操作すると、スティック24等によって操作された(つまり、タッチ入力された)位置の座標を検出して、検出した座標(検出座標)に対応する座標データを出力する。
なお、この実施例では、LCD14(LCD12も同じ、または略同じ。)の表示面の解像度は256dot×192dotであり、タッチパネル22の検出精度(操作面)も表示画面に対応して256dot×192dotとしてある。ただし、図1では、タッチパネル22を分かり易く示すために、タッチパネル22をLCD14と異なる大きさで示してあるが、LCD14の表示画面の大きさとタッチパネル22の操作面の大きさとは同じ大きさである。なお、タッチパネル22の検出精度は、表示画面の解像度よりも低くてもよく、高くてもよい。
LCD12およびLCD14には異なるゲーム画面が表示され得る。たとえば、レースゲームでは一方のLCDに運転席からの視点による画面を表示し、他方のLCDにレース(コース)全体の画面を表示することができる。また、RPGでは、一方のLCDにマップやプレイヤキャラクタ等のキャラクタを表示し、他方のLCDにプレイヤキャラクタが所有するアイテムを表示することができる。さらに、一方のLCD(この実施例では、LCD12)にゲームのプレイ画面を表示し、他方のLCD(この実施例では、LCD14)に当該ゲームを操作するための文字情報やアイコン等の画像を含むゲーム画面(操作画面)を表示することができる。さらには、2つのLCD12およびLCD14を合わせて1つの画面として用いることにより、プレイヤキャラクタが倒さなければならない巨大な怪物(敵キャラクタ)を表示することもできる。
したがって、プレイヤはスティック24等でタッチパネル22を操作することにより、LCD14の画面に表示されるプレイヤキャラクタ、敵キャラクタ、アイテムキャラクタ、文字情報、アイコン等のキャラクタ画像を指示したり、コマンドを選択したりすることができる。
なお、ゲームの種類によっては、その他の入力指示、たとえばLCD14に表示されたアイコンの選択または操作、座標入力指示等に用いることもできる。
このように、ゲーム装置10は、2画面分の表示部となるLCD12およびLCD14を有し、いずれか一方(この実施例では、LCD14)の上面にタッチパネル22が設けられるので、2画面(12,14)と2系統の操作部(20,22)とを有する構成になっている。
また、この実施例では、スティック24は、たとえば上側ハウジング16aの側面(右側面)近傍に設けられる収納部(穴ないし凹部)26に収納することができ、必要に応じて取り出される。ただし、スティック24を設けない場合には、収納部26を設ける必要もない。
さらに、ゲーム装置10はメモリカード(またはゲームカートリッジ)28を含む。このメモリカード28は着脱自在であり、下側ハウジング16bの裏面ないしは底面(下端)に設けられる挿入口30から挿入される。図1では省略するが、挿入口30の奥部には、メモリカード28の挿入方向先端部に設けられるコネクタ(図示せず)と接合するためのコネクタ46(図2参照)が設けられており、したがって、メモリカード28が挿入口30に挿入されると、コネクタ同士が接合され、ゲーム装置10のCPUコア42(図2参照)がメモリカード28にアクセス可能となる。
なお、図1では表現できないが、下側ハウジング16bの音抜き孔18と対応する位置であり、この下側ハウジング16bの内部には、スピーカ32(図2参照)が設けられる。
また、図1では省略するが、たとえば、下側ハウジング16bの裏面側には、電池収容ボックスが設けられ、また、下側ハウジング16bの底面側には、電源スイッチ、音量スイッチ、外部拡張コネクタおよびイヤフォンジャックなども設けられる。
図2はゲーム装置10の電気的な構成を示すブロック図である。図2を参照して、ゲーム装置10は電子回路基板40を含み、この電子回路基板40にはCPUコア42等の回路コンポーネントが実装される。CPUコア42は、バス44を介してコネクタ46に接続されるとともに、RAM48、第1のグラフィック処理ユニット(GPU)50、第2のGPU52、入出カインターフェイス回路(以下、「I/F回路」という。)54、LCDコントローラ60およびワイヤレス通信部64に接続される。
コネコタ46には、上述したように、メモリカード28が着脱自在に接続される。メモリカード28は、ROM28aおよびRAM28bを含み、図示は省略するが、ROM28aおよびRAM28bは、互いにバスで接続され、さらに、コネクタ46と接合されるコネクタ(図示せず)に接続される。したがって、上述したように、CPUコア42は、ROM28aおよびRAM28bにアクセスすることができるのである。
ROM28aは、ゲーム装置10で実行すべきゲーム(仮想ゲーム)のためのゲームプログラム、画像(キャラクタ画像、背景画像、アイテム画像、アイコン(ボタン)画像、メッセージ画像など)データおよびゲームに必要な音(音楽)のデータ(音データ)等を予め記憶する。RAM(バックアップRAM)28bは、そのゲームの途中データやゲームの結果データを記憶(セーブ)する。
RAM48は、バッファメモリないしはワーキングメモリとして使用される。つまり、CPUコア42は、メモリカード28のROM28aに記憶されたゲームプログラム、画像データおよび音データ等をRAM48にロードし、ロードしたゲームプログラムを実行する。また、CPUコア42は、ゲームの進行に応じて発生または取得されるデータ(ゲームデータやフラグデータ等)をRAM48に記憶しつつゲーム処理を実行する。
なお、ゲームプログラム、画像データおよび音データ等は、ROM28aから一度に全部または必要に応じて部分的にかつ順次的に読み出され、RAM48に記憶される。
ただし、メモリカード28のROM28aには、ゲーム以外の他のアプリケーションについてのプログラムおよび当該アプリケーションの実行に必要な画像データ等が記憶される。また、必要に応じて、音(音楽)データが記憶されてもよい。かかる場合には、ゲーム装置10では、当該アプリケーションが実行される。
GPU50およびGPU52は、それぞれ、描画手段の一部を形成し、たとえばシングルチップASICで構成され、CPUコア42からのグラフィックスコマンド(graphics command :作画命令)を受け、そのグラフィックスコマンドに従ってゲーム画像データを生成する。ただし、CPUコア42は、グラフィックスコマンドに加えて、ゲーム画像データの生成に必要な画像生成プログラム(ゲームプログラムに含まれる。)をGPU50およびGPU52のそれぞれに与える。
また、GPU50には、第1のビデオRAM(以下、「VRAM」という。)56が接続され、GPU52には、第2のVRAM58が接続される。GPU50およびGPU52が作画コマンドを実行するにあたって必要なデータ(画像データ:キャラクタデータやテクスチャ等のデータ)は、GPU50およびGPU52が、それぞれ、第1のVRAM56および第2のVRAM58にアクセスして取得する。ただし、CPUコア42は、描画に必要な画像データをRAM48から読み出し、GPU50およびGPU52を介して第1のVRAM56および第2のVRAM58に書き込む。GPU50はVRAM56にアクセスして表示のためのゲーム画像データを作成し、その画像データをVRAM56の描画バッファに記憶する。GPU52はVRAM58にアクセスして描画のためのゲーム画像データを作成し、その画像データをVRAM58の描画バッファに記憶する。描画バッファとしてはフレームバッファまたはラインバッファ等が採用されてよい。
VRAM56およびVRAM58は、LCDコントローラ60に接続される。LCDコントローラ60はレジスタ62を含み、レジスタ62はたとえば1ビットで構成され、CPUコア42の指示によって「0」または「1」の値(データ値)を記憶する。LCDコントローラ60は、レジスタ62のデータ値が「0」である場合には、GPU50によって作成されたゲーム画像データをLCD12に出力し、GPU52によって作成されたゲーム画像データをLCD14に出力する。一方、レジスタ62のデータ値が「1」である場合には、LCDコントローラ60は、GPU50によって作成されたゲーム画像データをLCD14に出力し、GPU52によって作成されたゲーム画像データをLCD12に出力する。
なお、LCDコントローラ60は、VRAM56およびVRAM58から直接画像データを読み出すことができるし、あるいはGPU50およびGPU52を介してVRAM56およびVRAM58から画像データを読み出すこともできる。
また、VRAM56およびVRAM58はRAM48に設けられてもよいし、あるいはその描画バッファおよびZバッファがRAM48に設けられてもよい。
I/F回路54には、操作スイッチ20,タッチパネル22およびスピーカ32が接続される。ここで、操作スイッチ20は、上述したスイッチ20a,20b,20c,20d,20e,20Lおよび20Rであり、操作スイッチ20が操作されると、対応する操作信号(操作データ)がI/F回路54を介してCPUコア42に入力される。また、タッチパネル22から出力される操作データ(座標データ)がI/F回路54を介してCPUコア42に入力される。さらに、CPUコア42は、ゲーム音楽(BGM)、効果音またはゲームキャラクタの音声(擬制音)などのゲームに必要な音データをRAM48から読み出し、I/F回路54を介してスピーカ32からその音を出力する。
ワイヤレス通信部64は他のゲーム装置10や通信機器との間で無線によってデータを送受信するための通信手段である。ワイヤレス通信部64は、相手方への通信データを無線信号に変調してアンテナから送信し、また、相手方からの無線信号を同じアンテナで受信して通信データに復調する。このワイヤレス通信部64を介して、ゲーム装置10は、他のゲーム装置10との間でデータを通信して通信ゲームを実行する。ワイヤレス通信部64は、たとえばIEEE802.11(Wi−Fi)に対応しており、無線LANによって他のゲーム装置10や通信機器とデータを通信することが可能である。ゲーム装置10は、たとえば近くに存在する他のゲーム装置10との間で無線LANによって通信ゲームを実行してよい。また、ゲーム装置10は、TCP/IPプロトコルを用いてインターネットを介して他のコンピュータ、サーバおよびゲーム装置10等とデータを通信することができる。したがって、ゲーム装置10は、たとえば家庭内LANや公衆無線LANの無線LANアクセスポイントからインターネットサービスプロバイダ(ISP)にアクセスし、ISPを介してインターネットないしWAN(Wide Area Network)のようなネットワークに接続し、離れた場所でインターネットに接続している他のゲーム装置10との間で通信ゲームを実行することができる。
なお、この実施例では、ワイヤレス通信部64が無線LAN規格に従って動作する場合を説明するが、他の実施例では、たとえばBluetoothのような他の無線通信規格に従うものであってもよい。
また、このワイヤレス通信部64は、たとえば時分割多元接続方式をベースとした無線通信を実行することも可能である。近くの他のゲーム装置10との間での通信ゲームはこの無線通信方式で実行されてよい。たとえば、各ゲーム装置10には1通信サイクル中にタイムスロットが割り当てられ、割り当てられたスロットで自己のデータを送信する。なお、このような無線通信の技術は、本件出願人による特開2004−135778号公報および特開2004−136009号公報などに詳細に開示されるので参照されたい。
複数台の上述のようなゲーム装置10を用いて、この実施例の通信ゲームシステムが構成される。この通信ゲームシステムにおいては、図3に示すような近距離の場合でも図4に示すような遠距離の場合でも、複数のゲーム装置10間で通信ゲームが行われる。
まず、図3に示すように、複数のゲーム装置10が互いに近くに存在する場合に、複数のゲーム装置10間で近距離無線通信によって通信ゲームが実行される。たとえば、複数のゲーム装置10のうちの1つが親機となり、その他は子機となって、親機と子機との間でデータが通信される。各プレイヤは自機が親機になるか子機になるかをたとえば選択画面で選択する。ゲーム装置10は、親機として機能する場合、通信可能範囲内に存在する子機を探して接続し、子機として機能する場合には通信可能範囲内に存在する参加可能な親機を探して接続する。
この近距離の場合の通信ゲームが実行されると、ゲーム装置10の識別情報が複数のゲーム装置10間で自動的または各プレイヤの選択操作に応じて交換される。つまり、各ゲーム装置10は、近距離の場合の通信ゲームによって、当該通信ゲームに参加した相手のゲーム装置10の識別情報を取得できる。たとえば、このような近距離範囲内の通信ゲームは、友達同士の間で行われることが想定されるので、各プレイヤは、友達同士で集まって通信ゲームを行うことによって、友達の所有するゲーム装置10の識別情報を取得できる。取得された他のゲーム装置10の識別情報は、お友達リストデータとして記憶される。
この近距離の通信ゲームによって取得できる識別情報は、遠距離の場合の通信のための識別情報である。したがって、近距離の通信ゲームを行って相手の識別情報を取得したプレイヤは、その後相手と離れても、たとえばインターネット等を介した通信によって通信ゲームを行うことができる。
図4に示すように、遠距離の場合の通信ゲームは、複数のゲーム装置10間でインターネット等のネットワークを介して実行される。たとえば、各ゲーム装置10は、無線LANアクセスポイントのような各アクセスポイント70を介してインターネットにアクセスする。また、この実施例では、通信ゲームシステムはインターネット上のサーバ72を含み、このサーバ72は各ゲーム装置10のマッチングサーバとして機能する。サーバ72はコンピュータであり、CPU、メモリ、ネットワーク通信のための通信装置等を含み、メモリに記憶されたプログラムに従って動作する。
たとえば、ゲーム装置10はアクセスポイント70を介してサーバ72に接続し、自己の識別情報を含みオンライン中(接続中または通信中)であることを示す通知データをサーバ72に送信する。サーバ72は、この通知データを受信することによって、当該識別情報に対応するゲーム装置10が接続中であることを把握する。サーバ72は、受信した識別情報を接続中リストデータとして記憶する。ゲーム装置10による通知データの送信はたとえば一定時間ごとに実行され、サーバ72は通知データを受信しなくなったことに基づいて当該ゲーム装置10が通信中ではなくなったことを把握でき、接続中リストデータを更新する。
そして、ゲーム装置10は、友達リストの識別情報を含む問合せデータをサーバ72に送信し、識別情報に対応する他のゲーム装置10がサーバ72に接続中であるか否かを問い合わせる。サーバ72は、問合せの識別情報が接続中リストにある否かを検出し、接続中であると判断される場合には、当該ゲーム装置10の接続アドレスを問い合わせてきたゲーム装置10に返信する。したがって、ゲーム装置10は、相手のゲーム装置10が接続中であることを示す問合せ結果データを受信した場合には、受信したデータから取得した当該相手の接続アドレスに基づいて当該相手のゲーム装置10に接続して、通信ゲームを行うことができる。
図5には、ゲーム装置10のRAM48のメモリマップの一例が示される。RAM48は、自己識別データ記憶領域74、サーバアドレス記憶領域76、ゲームデータ記憶領域78、お友達リスト記憶領域80および通信相手情報記憶領域82等を含む。なお、図5にはメモリマップの一部のみが示されており、RAM48にはゲームの進行に必要な各種データが記憶される。
自己識別データ記憶領域74には、自己のID、接続アドレス、プレイヤ名等の情報が記憶される。IDは、通信ゲームにおけるゲーム装置10の識別情報である。このIDは、たとえば、メモリカード28のROM28a、ゲーム装置10のRAM48に含まれる不揮発性メモリ等に予め記憶されていてもよい。しかし、この実施例では、メモリカード28の所有者またはゲーム装置10の所有者が変更した場合に変更可能にするために、IDは、たとえば、この通信ゲームのためのメモリカード28がゲーム装置10に装着されて初期設定としてプレイヤ名の設定が行われるときに生成される。あるいは、IDは、ゲーム装置10の所有者名の設定が行われるとき等に生成されてRAM48の不揮発性メモリ等に記憶されてもよい。このIDの設定方法は任意であるが、IDは唯一無二の値ないし番号に設定される必要がある。一例として、IDは、ゲーム装置10のEthernet(登録商標)デバイスとしても機能するワイヤレス通信部64のMACアドレスに、当該IDが生成される際の時刻情報を付加することによって生成されてよい。時刻情報はたとえばCPUコア42に接続される図示しない時計ICから取得されてよい。
また、接続アドレスは、ゲーム装置10がインターネットに接続する際に使用するIPアドレスである。送信データにはこの接続アドレスが送信元IPアドレスとして含められる。接続アドレスは、この実施例ではプライベートIPアドレスである。たとえば、接続アドレスは、無線LANアクセスポイント70のDHCP(Dynamic Host Configuration Protocol)サーバ機能によって割り当てられワイヤレス通信部64のDHCPクライアント機能によって取得されて、RAM48に記憶される。あるいは、接続アドレスは、ゲーム装置10において当該プレイヤによって手動設定されてもよい。プレイヤの契約しているISPあるいは公衆無線LANのアクセスポイント70の接続されるISP等がプライベートIPアドレスをDHCP等で割り振る場合には、送信データの送信元IPアドレスは当該ISPのゲートウェイでグローバルIPアドレスに変換される。一方、プレイヤの契約しているISPあるいは公衆無線LANのアクセスポイント70の接続されるISP等がグローバルIPアドレスをDHCPまたはPPPoE等で割り振りまたは固定のグローバルIPアドレスを配布するような場合には、無線LANアクセスポイント70が、NAPT(Network Address Port Translation)またはIPマスカレード機能を用いて、送信データの送信元IPアドレスを、プライベートアドレスからグローバルアドレスに変換し、またポート番号も変換する。
また、プレイヤ名は、たとえば初期設定でプレイヤの操作によって入力される。通信ゲームでは、このプレイヤ名データの含まれた送信データを受信することによって、ゲーム装置10では相手のプレイヤ名を表示することが可能になる。
サーバアドレス記憶領域76には、サーバ72またはサーバ72を管理するコンピュータのグローバルIPアドレスおよびポート番号等が記憶される。サーバアドレスは、メモリカード28のROM28aに予め記憶されていてもよいし、プレイヤの操作によって入力されてもよい。サーバ72にデータを送信する場合には、このサーバアドレスが宛先IPアドレスとして送信データに含められる。
ゲームデータ記憶領域78には、通信ゲームを実行するためのゲームプログラム、ゲーム画面を生成するための画像データ、音声を出力するための音声データ等が記憶される。
お友達リスト記憶領域80には、プレイヤと通信ゲームを行った相手の識別情報を含むお友達リストデータが記憶される。お友達リストデータは、相手のゲーム装置10のIDおよび相手のプレイヤ名の情報等を含む。お友達リストデータは、近距離無線通信で通信ゲームを行った場合に、プレイヤの選択操作に応じてまたは自動的に生成される。さらに、お友達リストデータには、インターネット通信でお友達の紹介を受けた相手(すなわち、友達の友達)の識別情報も、プレイヤの選択操作に応じてまたは自動的に追加され得る。生成または更新されたお友達リストデータは、メモリカード28の不揮発性メモリであるRAM28bに保存される。通信ゲームの開始時等にメモリカード28のRAM28bにお友達リストデータが保存されている場合には、当該データが読み出されてお友達リスト記憶領域80に記憶される。
通信相手情報記憶領域82には、インターネット通信ないしネットワーク通信で通信ゲームをするまたは通信中の状態にある通信相手の情報が記憶される。通信相手情報は、相手のゲーム装置10のID、接続アドレスおよびプレイヤ名等を含む。接続アドレスは、通信相手のゲーム装置10のグローバルIPアドレスである。既にお友達リストに登録されている通信相手の接続アドレスは、問合せに応じてサーバ72から取得されて記憶される。また、インターネット通信で通信相手からその友達を紹介された場合には、その友達の情報は、通信相手のゲーム装置10から取得されて記憶される。インターネット通信ゲームで通信相手にデータを送信する際には、この接続アドレスが宛先IPアドレスに設定される。送信データの宛先IPアドレスは、ISPまたは無線LANアクセスポイント70等において、対応するゲーム装置10のプライベートIPアドレス等に変換されるので、送信データは通信相手ゲーム装置10に届けられることとなる。
図6には、サーバ72のメモリのメモリマップの一例が示される。サーバ72のメモリは接続中リスト記憶領域84等を含む。なお、図6にはサーバ72のメモリマップの一部のみが示されており、当該メモリには必要な各種データが生成または取得されて記憶される。
接続中リストデータとしては、インターネットに接続中であるゲーム装置10の情報が記憶される。具体的には、接続中のゲーム装置10のID、接続アドレスおよびプレイヤ名等が記憶される。各ゲーム装置10は、インターネットに接続したとき、サーバ72に接続中であることを示す通知データを定期的に送信する。通知データには、当該ゲーム装置のID、プレイヤ名および接続アドレスが含まれる。サーバ72は通知データを受信したときに接続中リストデータを生成しまたは更新する。なお、サーバ72は1つの通信ゲームの管理のために設けられてよい。しかし、サーバ72が複数種類のゲームを管理する場合には、上述の接続中の各ゲーム装置10の情報は、図6に示すように、ゲーム名(ゲーム識別情報)に関連付けて記憶される。
この通信ゲームシステムでは、上述のように、近距離無線通信で通信ゲームを共に実行した相手のゲーム装置10の識別情報がお友達リストとして記憶される。その後、ゲーム装置10は、インターネットに接続してサーバ72に問い合わせた結果、お友達リストに登録された相手のゲーム装置10がインターネットに接続している場合には、サーバ72から当該ゲーム装置10の接続アドレスを取得して当該ゲーム装置10との間でインターネットを介して通信ゲームを実行することができる。さらに、この実施例では、あるゲーム装置10の友達リストに登録されている友達同士が友達ではない場合には、両者を紹介するようにしている。つまり、ゲーム装置10は、通信ゲームを行った友達の友達であるゲーム装置10がインターネットに接続中である場合には、友達からその友達のゲーム装置10の情報を取得することができる。そして、紹介された友達同士で通信ゲームを実行することができ、お友達リストデータに相手の識別情報を登録することができる。したがって、この通信ゲームシステムでは、プレイヤたちの友達の輪を広げつつネットワークゲームを実行することができる。
たとえば、図7にこのインターネット通信ゲームの概要が示される。図7では、ゲーム装置B(プレイヤ名:「ひろし」)とゲーム装置C(プレイヤ名:「みか」)とが互いのお友達リストデータに登録されており、友達同士である。また、ゲーム装置A(プレイヤ名:「じろう」)とゲーム装置Bもお互いのお友達リストに登録された友達同士である。しかし、ゲーム装置Aとゲーム装置Cとは友達同士ではない。図7では、ゲーム装置Bとゲーム装置Cとがインターネットを介して通信中である場合が示されている。この場合において、ゲーム装置Aがインターネットに接続して、サーバ72からゲーム装置Bが接続中であるとの問合せ結果を受信したとき、ゲーム装置Aはゲーム装置Bに接続要求を送信して、ゲーム装置Bと通信接続して通信ゲームを実行することが可能である。一方、ゲーム装置Bは、ゲーム装置Cとも通信中の状態にあるので、たとえばゲーム装置Aと通信ゲームを実行した後に、ゲーム装置Aとゲーム装置Cを引き合わせる。つまり、ゲーム装置Bは、ゲーム装置Cの接続アドレス等を含む情報をゲーム装置Aに送信するとともに、ゲーム装置Aの接続アドレス等を含む情報をゲーム装置Cに送信する。したがって、ゲーム装置Aとゲーム装置Cとは、ゲーム装置Bから紹介を受けると、相手に通信接続して通信ゲームを実行することができる。
この通信ゲームシステムにおいて通信ゲームを実行する際の動作をフロー図を参照しながら説明する。図8にはゲーム装置10のゲーム動作の一例が示される。ゲーム処理が開示されると、図8の最初のステップS1で、CPUコア42は、操作スイッチ20からの操作入力データまたはタッチパネル22からの入力データ等に基づいてプレイヤ名設定を実行する。プレイヤ名の設定はこの通信ゲームを最初にプレイする場合やプレイヤ名を変更する場合等に行われる。CPUコア42は生成したプレイヤ名データを自己識別データ記憶領域74に記憶する。なお、既にプレイヤ名が設定されてメモリカード28のRAM28bに記憶されている場合には、CPUコア42は、先にRAM28bからプレイヤ名データを読み出してRAM48に記憶しておく。
次に、ステップS3で、CPUコア42はID生成処理を実行する。たとえば、CPUコア42は、ワイヤレス通信部64のMACアドレスおよび時計ICの時刻情報等に基づいて、ゲーム装置10のIDを生成して、IDデータを自己識別データ記憶領域74に記憶する。IDの生成は、プレイヤ名が最初に設定される場合やプレイヤ名が変更される場合等に実行される。既にIDが生成済みでありメモリカード28のRAM28bに記憶されている場合には、CPUコア42は、先にRAM28bからIDデータを読み出してRAM48に記憶しておく。
続いて、CPUコア42は、ステップS5で、たとえば操作スイッチ20からの操作入力データまたはタッチパネル22からのタッチ入力データ等に基づいて、通信ゲームを開始するか否かを判断する。ステップS5で“NO”であれば、つまり、たとえばゲーム開始を指示する入力データが所定時間経過しても検出されなかった場合等には、ゲーム処理を終了する。
ステップS5で“YES”であれば、つまり、ゲーム開始を指示する入力データが検出された場合には、CPUコア42は、ステップS7で、ワイヤレス通信部64から取得されるデータに基づいて、無線通信可能範囲に無線LANアクセスポイント70が存在するか否かを判断する。たとえば、ワイヤレス通信部64は、無線LANアクセスポイント70の発する電波を検出した場合には、その存在を示すデータをCPUコア42に与える。
ステップS7で“YES”であれば、CPUコア42は、ステップS9でRAM48にお友達リストデータが記憶されているか否かを判断する。ステップS9で“YES”であれば、CPUコア42は、ステップS11で、GPU50または52およびLCDコントローラ等を用いて、遠近両方の友達を選択可能な通信範囲選択画面をLCD12または14に表示する。この通信範囲選択画面では、図9(A)に示すように、「近くにいる友達」と「遠くにいる友達」の両方が選択可能に表示され、操作スイッチ20またはタッチパネル22の操作によってカーソルで選択することによって、いずれか一方を選択することができる。「近くにいる友達」は、近距離無線通信による通信ゲームに対応し、「遠くにいる友達」はインターネットを介したネットワーク通信ゲームに対応する。この選択画面によって、近くの人と通信するかまたは遠くの人と通信するかをプレイヤに選択させることができる。
続いて、ステップS13で、CPUコア42は、操作スイッチ20またはタッチパネル22からの入力データ等に基づいて、選択肢「遠くにいる友達」が選択されたか否かを判断する。ステップS13で“YES”であれば、CPUコア42は、ステップS15で、インターネット通信処理を実行する。この処理によって、インターネットを介した通信ゲームが実行される。このインターネット通信処理の動作は、後述する図11から図14に示される。
一方、ステップS7で“NO”であれば、つまり、無線LANアクセスポイント70が検出されなかった場合には、処理はステップS17へ進む。また、ステップS9で“NO”であれば、つまり、お友達リストデータが未だ生成されていない場合には、処理はステップS17へ進む。
ステップS17では、CPUコア42は、近くの友達のみを選択可能な通信範囲選択画面を表示する。この通信範囲選択画面では、図9(B)に示すように、「近くにいる友達」のみが選択可能に表示され、「遠くにいる友達」は選択不可能な状態(たとえば薄い色や反転した状態等)で表示され、または表示されなくてもよい。無線LANアクセスポイント70が検出されない場合には、ゲーム装置10がインターネットに接続することができず、インターネット通信を実行することができないので、通信ゲームの選択肢からネットワークゲームが外される。また、お友達リストが未だ記憶されていない場合にも、インターネットを介した通信ゲームを実行する相手が存在しないので、同様に、選択画面の選択肢からネットワークゲームが外される。
また、ステップS13で“NO”である場合、またはステップS17を終了すると、CPUコア42は、ステップS19で、操作スイッチ20またはタッチパネル22からの入力データ等に基づいて、選択肢「近くにいる友達」が選択されたか否かを判断する。ステップS19で“NO”であれば、処理はステップS7へ戻る。
一方、ステップS19で“YES”であれば、CPUコア42は、ステップS21で無線通信処理を実行する。この処理によって、近距離無線通信による通信ゲームが実行される。この無線通信処理の動作は、後述する図10に示される。ステップS15またはステップS21を終了すると、このゲーム処理を終了する。
図10には、図8のステップS21における無線通信処理の動作の一例が示される。CPUコア42は、まず、ステップS31で、無線通信可能範囲に存在する他のゲーム装置10を検索する。たとえば、CPUコア42は、ワイヤレス通信部64を用いて、所定のデータをブロードキャスト送信するとともに、他のゲーム装置10から送信される所定のデータの受信を試みる。
次に、ステップS33で、CPUコア42は、検索の結果、他のゲーム装置10が見つかったか否かを、ワイヤレス通信部64から取得したデータに基づいて判断する。ステップS33で“YES”であれば、CPUコア42は、ステップS35で、発見されたゲーム装置10に接続するか否かを、たとえば操作スイッチ20またはタッチパネル22からの入力データに基づいて判断する。なお、プレイヤに指示によらずに自動的に接続するか否かを判断してもよい。
一方、ステップS33で“NO”であれば、つまり、他のゲーム装置10からのデータが検出されない場合には、処理はステップS37に進む。また、ステップS35で“NO”であれば、つまり、たとえば見つかったゲーム装置10に対する接続を指示する入力データが検出されていない場合には、処理はステップS37に進む。ステップS37では、
CPUコア42は、検索を継続するか否かをたとえば操作スイッチ20またはタッチパネル22からの入力データに基づいて判断する。なお、プレイヤの指示によらずに、たとえば所定時間の経過を検出することによって自動的に、検索を継続するか否かを判断してもよい。ステップS37で“NO”であれば、つまり、たとえば検索の中止を指示する入力データが検出された場合には、この無線通信処理を終了する。一方、ステップS37で“YES”であれば、処理はステップS31に戻る。
また、ステップS35で“YES”であれば、つまり、たとえば接続を指示する入力データが検出された場合には、CPUコア42は、ステップS39で、ワイヤレス通信部64を介して、当該他のゲーム装置10との接続処理を実行して、接続を確立する。
続いて、ステップS41で、CPUコア42は、ワイヤレス通信部64を介して、通信ゲーム処理を実行する。これによって、接続された他のゲーム装置10との間でデータを送受信しつつ、ゲームやアプリケーションが実行される。
そして、ステップS43で、CPUコア42はIDを交換するか否かを判断する。たとえば操作スイッチ20またはタッチパネル22からの入力データ等に基づいて、交換が指示されたか否かが判断される。なお、プレイヤの指示によらずに自動的に交換するか否かを判断してもよい。
ステップS43で“YES”であれば、CPUコア42は、ステップS45で、自己識別データ記憶領域74に記憶されている自己のIDとプレイヤ名とを含むデータを、ワイヤレス通信部64を介して他のゲーム装置10に送信する。なお、複数の他のゲーム装置10との間で通信ゲームを実行した場合には、これら複数のゲーム装置10に自己の識別情報を送信する。
また、ステップS47で、CPUコア42は、他のゲーム装置10から送信されたIDとプレイヤ名とを含むデータを、ワイヤレス通信部64を介して受信して、RAM48に記憶する。なお、複数の他のゲーム装置10との間で通信ゲームを実行した場合には、これら複数のゲーム装置10の識別情報を受信する。
そして、ステップS49で、CPUコア42は、受信したデータからIDとプレイヤ名とを抽出して、当該IDとプレイヤ名とを対応付けてお友達リスト記憶領域80に追加的に記憶する。なお、既にお友達リストデータに登録されている場合には、当該識別情報は追加されない。
一方、ステップS43で“NO”であれば、ID交換をしないで処理はステップS51に進む。ステップS51では、通信ゲームを終了するか否かを、たとえば操作スイッチ20またはタッチパネル22からの入力データに基づいて判断する。ステップS51で“NO”であれば、処理はステップS41に戻る。一方、ステップS51で“YES”であれば、この無線通信処理を終了する。なお、図示は省略されるが、ステップS49で、お友達リストに新たなID等が追加された場合には、終了処理等の際に、CPUコア42は、当該お友達リストデータを、他のセーブすべきゲームデータとともにメモリカード28のRAM28bに保存する。
図11には、図8のステップS15におけるインターネット通信処理の動作の一例が示される。図11の最初のステップS61で、CPUコア42は、図8のステップS7と同様にして、無線通信可能範囲内に無線LANアクセスポイント70が存在するか否かを判断する。ステップS61で“NO”であれば、インターネットにアクセスできないので、ステップS63で、CPUコア42はエラー表示処理を実行して、LCD12またはLCD14にたとえば「アクセスポイントがありません」のようなエラーメッセージを表示して、このインターネット通信処理を終了する。
一方、ステップS61で“YES”であれば、CPUコア42は、ステップS65で、ワイヤレス通信部64を介して、無線LANアクセスポイント70への接続処理を実行し、無線LANアクセスポイント70と接続を確立する。たとえば、この処理によって、ゲーム装置10は、接続アドレス(プライベートIPアドレス)を無線LANアクセスポイント70から取得して、自己識別データ記憶領域74に記憶する。
続いて、ステップS67で、CPUコア42は、自己識別データ記憶領域74に記憶されている自己のID、接続アドレスおよびプレイヤ名等の情報を含む接続情報データを、ワイヤレス通信部64を介してサーバ72に送信する。この送信データの宛先IPアドレスにはサーバアドレス記憶領域76に記憶されているサーバアドレスが設定され、送信元IPアドレスには自己識別データ記憶領域74の接続アドレスが設定される。接続アドレスは、たとえば、無線LANアクセスポイント70またはISP等でグローバルIPアドレスに変換されるので、サーバ72はゲーム装置10のグローバルIPアドレスを接続アドレスとしてメモリに記憶でき、当該ゲーム装置10宛にデータを送信できる。
そして、ステップS69で、CPUコア42は、アクセスポイント確認処理を開始する。この処理によって、ゲーム装置10の通信可能範囲に無線LANアクセスポイント70が存在しているか否かを常時確認する。CPUコア42はアクセスポイント確認処理を他の処理と並列的に実行する。アクセスポイント確認処理の動作の一例が図15に示される。
図15のステップS151で、CPUコア42は、図8のステップS7と同様にして、無線通信可能範囲内に無線LANアクセスポイント70が存在するか否かを判断する。ステップS151で“YES”であれば、CPUコア42はステップS153で一定時間が経過したか否かを判断する。ステップS153で“NO”であれば一定時間の経過を待ち、“YES”であればステップS151へ戻る。
一方、ステップS151で“NO”であれば、CPUコア42はステップS155でタイムアウトであるか否かを判断する。たとえば、無線LANアクセスポイント70を検出できなくなってから所定時間が経過したか否かを判断する。ステップS155で“NO”であればステップS151へ戻る。一方、ステップS155で“YES”であれば、CPUコア42は、ステップS157で必要なゲームデータをメモリカード28のRAM28bに保存する。また、ステップS159で、CPUコア42は、図11のステップS63と同様にして、エラーを表示して、このアクセスポイント確認処理およびインターネット通信処理を終了する。
図11に戻って、ステップS71では、CPUコア42は通知処理を開始する。この処理によって、ゲーム装置10が接続中であることをサーバ72に常時通知する。CPUコア42は通知処理を他の処理と並列的に実行する。通知処理の動作の一例が図16に示される。
図16のステップS171で、CPUコア42は、通信中ないし接続中であることを示す通知データを、ワイヤレス通信部64を介して、サーバ72に送信する。通知データには、当該ゲーム装置10の識別情報が含まれるので、サーバ72は通知データを受信することによって、当該ゲーム装置10が接続中であるか否かを把握することができる。続いて、ステップS173で、CPUコア42は、一定時間が経過したか否かを判断する。ステップS173で“NO”であれば、一定時間の経過を待ち、“YES”であれば、ステップS171へ戻る。なお、CPUコア42はインターネット通信処理を終了するときはこの通知処理も終了する。
図11に戻って、ステップS73では、CPUコア42は、お友達リストデータに基づいて、リストに登録されている相手のプレイヤ名を、GPU50または52およびLCDコントローラ60等を用いてLCD12または14に表示する。
続いて、ステップS75で、CPUコア42は、操作スイッチ20またはタッチパネル22からの入力データとプレイヤ名の表示位置データ等に基づいて、表示されたお友達リストから通信ゲームの相手が選択されたか否かを判断する。なお、プレイヤの意思によらずにたとえばランダムでまたは順に相手を選択するようにしてもよい。あるいは、お友達リストの中から複数の相手を選択して一括して問合せをするようにしてもよいし、またはリスト中の全ての相手を選択して一括して問い合わせるようにしてもよい。
ステップS75で“YES”であれば、CPUコア42は、ステップS77で選択相手のIDを含む問合せデータを、ワイヤレス通信部64を介してサーバ72に送信する。このように、お友達リストの中から任意の相手を選択して、当該選択相手について問合せを行うことができる。
ステップS75で“NO”である場合、またはステップS77を終了すると、CPUコア42は、ステップS79で、問合せの結果をワイヤレス通信部64を介してサーバ72から受信したか否かを判断する。ステップS79で“YES”であれば、CPUコア42は、ステップS81で受信データをRAM48に記憶する。サーバ72に問い合わせたゲーム装置10が接続中である場合には、受信データには当該ゲーム装置10の接続アドレスが含まれ、接続中でない場合には受信データには接続アドレスが含まれていない。続くステップS83で、CPUコア42は、選択相手の接続アドレスを取得したか否かを判断し、“NO”であれば処理は図12のステップS85へ進む。一方、ステップS83で“YES”であれば、つまり、選択相手が接続中である場合には、処理は図12のステップS89へ進む。
図12のステップS85では、CPUコア42は、操作スイッチ20またはタッチパネル22からの入力データ等に基づいて、通信ゲームのキャンセルであるか否かを判断する。ステップS85で“YES”であれば、つまり、たとえばキャンセルを指示する入力データが検出された場合等には、CPUコア42は、ステップS87で通信ゲームをキャンセルする処理を実行して、このインターネット通信処理を終了する。一方、ステップS85で“NO”であれば、処理はステップS91へ進む。
また、図12のステップS89では、CPUコア42は、相手のプレイヤ名を通信相手選択画面に表示する。この画面の一例が図17に示され、画面中には、通信可能な友達としてインターネットに接続中であるゲーム装置10に対応するプレイヤ名が表示される。プレイヤは操作スイッチ20またはタッチパネル22を操作して、プレイヤ名をカーソルで指示および決定することによって、この画面で通信ゲームを実行する相手を選択することができる。
続いて、ステップS91で、CPUコア42は、操作スイッチ20またはタッチパネル22からの入力データとプレイヤ名の表示位置データ等に基づいて、図17の画面で通信相手が選択されたか否かを判断する。ステップS91で“NO”であれば、つまり、たとえば通信相手選択画面で通信相手が選択されていない場合には、処理はステップS97へ進む。
一方、ステップS91で“YES”であれば、CPUコア42は、ステップS93で、選択された通信相手(便宜上、ゲーム装置xと呼ぶものとする。)への接続処理を実行する。なお、CPUコア42は、選択された通信相手の識別情報、つまり、ID、プレイヤ名および接続アドレス等を通信相手情報記憶領域82に記憶する。たとえば、CPUコア42は、通信相手情報記憶領域82に記憶された当該ゲーム装置xの接続アドレスを宛先IPアドレスとした接続要求を、ワイヤレス通信部64を介して送信し、ゲーム装置xから接続応答を受信することによって、当該ゲーム装置xと接続する。
そして、ステップS95でCPUコア42はワイヤレス通信部64を介してゲーム装置xとの間での通信ゲーム処理を実行する。これによって、接続された通信相手との間でデータを送受信しつつ、ゲームやアプリケーション(チャットなども含む。)が実行される。
続くステップS97で、CPUコア42は通信相手情報記憶領域82に記憶されている通信相手から他のゲーム装置(便宜上、ゲーム装置yと呼ぶものとする。)の情報を受信したか否かを判断する。この実施例では、通信相手に通信中の状態にあるゲーム装置yが存在する場合には、通信相手が仲介者となって紹介を行うようにしているので、当該ゲーム装置yの情報が通信相手から送信されてくる。図7の例で言えば、ゲーム装置Cにゲーム装置Bからゲーム装置Aの情報が送信されてくる場合に相当する。
ステップS97で“NO”であれば、つまり、通信相手に通信中の他のゲーム装置yがいない場合には、処理は図13のステップS111へ進む。一方、ステップS97で“YES”であれば、CPUコア42は、ステップS99で、受信したゲーム装置yの情報をRAM48に記憶する。受信データには、ゲーム装置yのID、プレイヤ名、および接続アドレス等の識別情報が含まれるので、CPUコア42は、当該ゲーム装置yの識別情報を通信相手情報記憶領域82に記憶(追加)する。続くステップS101で、CPUコア42は、ステップS93と同様にして、ゲーム装置yへの接続処理を実行して、当該ゲーム装置yと接続する。そして、ステップS103で、CPUコア42は、ステップS95と同様にして、ゲーム装置yとの間で通信ゲーム処理を実行する。このように、ネットワーク通信ゲームにおいては、通信可能な相手の範囲を広げることができ、したがって、近距離無線通信によって識別情報を交換していない相手とも、インターネットを介して通信ゲームを行うことができる。ステップS103を終了すると、処理は図13のステップS105へ進む。
図13のステップS105では、CPUコア42は、ゲーム装置yの情報がお友達リストデータに登録されているか否かを判断する。ステップS105で“NO”であれば、CPUコア42は、ステップS107でお友達リストに当該ゲーム装置yの情報を登録するか否かを判断する。たとえば、操作スイッチ20またはタッチパネル22から登録を指示する入力データが検出されたか否かを判断する。この場合には、プレイヤは希望する相手の識別情報のみをお友達リストに登録することができる。なお、プレイヤの意思に委ねずに、未登録の場合には自動的にお友達リストに登録するものと判断するようにしてもよい。
ステップS107で“YES”であれば、CPUコア42は、ステップS109で、ゲーム装置yの情報、すなわち、IDおよびプレイヤ名をお友達リスト記憶領域80に追加する。このようにして、友達から紹介を受けたゲーム装置yの情報を新たな友達の情報として友達リストに加えることができる。ステップS109を終了すると処理はステップS111へ進む。なお、紹介を受けたゲーム装置yからもさらに紹介を受けるようにする場合には、ステップS109の後、図12のステップS97へ戻るようにしてもよい。また、ステップS105で“YES”である場合、またはステップS107で“NO”である場合には、処理はそのままステップS111へ進む。
ステップS111では、CPUコア42は、ワイヤレス通信部64を介して、他のゲーム装置(便宜上ゲーム装置zと呼ぶものとする。)から接続要求を受信したか否かを判断する。接続要求は、ステップS93、ステップS101等のゲーム装置10への接続処理において送信されるデータである。図7の例で言えば、たとえば、ゲーム装置Cにゲーム装置Aが接続要求を送信する場合に相当する。
ステップS111で“YES”であれば、CPUコア42は、ステップS113で、ゲーム装置zへの接続処理を実行して、ゲーム装置zに接続する。なお、接続要求として受信したデータには、ゲーム装置zのID、プレイヤ名、および接続アドレス等の情報が含まれるので、CPUコア42はID、プレイヤ名および接続アドレスを通信相手情報記憶領域82に記憶(追加)する。したがって、当該接続アドレスを宛先IPアドレスとしてデータを送信することで、CPUコア42はたとえばゲーム装置zに接続応答を送信できる。そして、ステップS115で、CPUコア42は、図12のステップS95と同様にして、ゲーム装置zとの間での通信ゲーム処理を実行する。
続いて、ステップS117で、CPUコア42は、他に通信中の相手(便宜上ゲーム装置wと呼ぶものとする。)が存在するか否かを、通信相手情報記憶領域82のデータに基づいて判断する。つまり、ゲーム装置zに対して紹介すべき通信中のゲーム装置wが存在するか否かを判断している。ステップS117で“YES”であれば、CPUコア42は、ステップS119で、ゲーム装置wの情報(ID、プレイヤ名および接続アドレス等)を通信相手情報記憶領域82から読み出して、ワイヤレス通信部64を介してゲーム装置zに送信する。また、ステップS121で、CPUコア42は、ゲーム装置zの情報(ID、プレイヤ名および接続アドレス等)を通信相手情報記憶領域82から読み出して、ワイヤレス通信部64を介してゲーム装置wに送信する。このようにして、ゲーム装置zとゲーム装置wとを仲介することができる。
ステップS111で“NO”である場合、ステップS117で“NO”である場合、またはステップS121を終了すると、処理は図14のステップS123へ進む。
図14のステップS123では、CPUコア42は、通信ゲームを終了するか否かを判断する。たとえば、操作スイッチ20またはタッチパネル22から終了を指示する入力データが検出されたか否かを判断する。ステップS123で“YES”であれば、CPUコア42は、ステップS125で、通信相手情報記憶領域82に記憶されている相手に、ワイヤレス通信部64を介して、自己のID等を含む終了通知を送信する。そして、ステップS127でCPUコア42は相手との通信終了処理を実行して、このインターネット通信処理を終了する。
一方、ステップS123で“NO”であれば、CPUコア42は、ステップS129で終了通知を受信したか否かを判断する。ステップS129で“YES”であれば、CPUコア42は、ステップS131で、受信した相手との通信終了処理を実行する。たとえば、終了通知から相手のID等を抽出して、当該ID等に対応する通信相手のデータを通信相手情報記憶領域82から削除する。ステップS131を終了し、またはステップS129で“NO”であれば、ネットワークを介した通信ゲームを継続すべく、処理は図11のステップS75へ戻る。
この実施例では、サーバ72は、接続中リストの管理、および問合せに対する応答などの機能を果している。具体的には、ゲーム装置10がインターネットに接続したときに、接続中リストに当該ゲーム装置10の識別情報を登録する。また、友達リストのゲーム装置10が接続中であるか否かの問合せがあったとき、当該問合せられたゲーム装置10が接続中であるか否かを検出して、その結果を応答する。また、接続中のゲーム装置10から定期的に送信される通知に基づいて、接続中リストを更新する。
図18には、サーバ72の通信処理の動作の一例が示される。この通信処理は一定時間ごとに繰り返し実行される。図18の最初のステップS201で、サーバ72の図示しないCPUは、ゲーム装置10から接続情報を受信したか否かを判断する。この接続情報は、インターネットに接続したゲーム装置10から図11のステップS67で送信される。
ステップS201で“YES”であれば、サーバ72のCPUは、当該ゲーム装置を接続中リストに登録する。具体的には、メモリの接続中リスト記憶領域84に、ID、接続アドレス、およびプレイヤ名を記憶(追加)する。なお、このサーバ72が複数種類のゲームを管理する場合には、ゲーム名を含む接続情報を受信するので、ゲームごとに接続中リストデータを作成して管理する。
ステップS203を終了し、または、ステップS201で“NO”であれば、サーバ72のCPUは、ステップS205で、ゲーム装置10から問合せを受信したか否かを判断する。この問合せは図11のステップS77で送信される。ステップS205で“YES”であれば、サーバ72のCPUは、ステップS207で、問合せデータに含まれるID等と、接続中リスト記憶領域84の接続中リストに登録されているID等とを照合する。
そして、ステップS209で、サーバ72のCPUは、問合せIDがリストに登録されているか否かを判断する。ステップS209で“YES”であれば、つまり、問合せられたゲーム装置10が通信中である場合には、サーバ72のCPUは、ステップS211で、問合せIDに対応する接続アドレスを接続中リスト記憶領域84から読み出して、当該接続アドレス等含む問合せ結果データを、この問合せを送信してきたゲーム装置10に送信する。
一方、ステップS209で“NO”であれば、サーバ72のCPUは、ステップS213で問合せIDに対する通信不可を示す問合せ結果データを、この問合せを送信してきたゲーム装置10に送信する。ステップS211またはステップS213を終了し、または、ステップS205で“NO”であればこの通知処理を終了する。
図19には、サーバ72のオンライン確認処理の動作の一例が示される。このオンライン確認処理は一定時間ごとに繰り返し実行される。図19の最初のステップS221で、サーバ72のCPUは、ゲーム装置10から通信中を示す通知データを受信したか否かを判断する。ゲーム装置10からの通知は、図16のステップS171で送信される。
ステップS221で“YES”であれば、サーバ72のCPUは、ステップS223で、当該ゲーム装置10についての通知の受信時刻を、たとえば図示しない時計ICの出力データから取得して、メモリに記憶する。
ステップS223を終了し、またはステップS221で“NO”であれば、サーバ72のCPUは、ステップS225で通知を受信してから所定時間を経過したゲーム装置が存在するか否かを、時計ICから取得した現時刻とメモリに記憶されている最後の受信時刻とに基づいて、判断する。ステップS225で“YES”であれば、サーバ72のCPUは、ステップS227で、接続中リスト記憶領域84から当該ゲーム装置10の情報を削除して、接続中リストデータを更新する。ステップS227を終了し、または、ステップS225で“NO”であれば、このオンライン確認処理を終了する。
この実施例によれば、近距離無線通信によってデータを送受信した相手との間で識別情報を交換し、相手の識別情報を登録できるようにした。その後、互いに離れた場所に存在する場合には、インターネットなどのネットワークにアクセスして、たとえばサーバ72を介して当該識別情報に基づいて相手が接続中であるか否かを検出し、相手が接続中である場合には当該相手の接続アドレスを取得して、当該相手とデータを送受信することができる。このように、各ゲーム装置は、識別情報を登録した相手との間でネットワーク通信可能か否かを判定し、可能であるときには当該登録した相手との間でネットワーク通信を行うことができる。したがって、識別情報を交換して登録した相手とのみネットワーク通信することができるので、ネットワークゲームに安全かつ気軽に参加することが可能になり、一般的なゲームユーザなどにとって参加し易いネットワークゲームを実現できる。また、近距離無線通信によって通信ゲームを行った相手と離れた場所に存在することとなってもネットワークを介して通信ゲームを行うことができる。また、近距離無線通信によって友達の識別情報を取得して登録するだけで、簡単に当該友達とネットワーク通信を行うことが可能になる。
また、ネットワーク通信においては、通信相手に別の通信中の相手が存在する場合には、紹介によって当該別の相手の識別情報を取得することができるので、これまでに知らなかった相手とも通信を行うことができる。したがって、ネットワーク通信によって通信可能な相手の範囲を広げることができる。また、紹介された相手の識別情報をお友達リストに登録することができるので、ネットワーク通信ゲームによって友達の輪を広げることができる。
したがって、この通信ゲームシステムによれば、近くの友達とローカル通信するだけで友達の識別情報を取得してセーブしておくことができるので、その後は距離に関係なく離れた場所であってもその友達と通信ゲームを遊べるようになる。また、ネットワーク通信を行えば、友達の紹介で次々と友達の輪が広まって行くので、最初は友達が少なくてもプレイヤにネットワークゲームを楽しんでもらうことが可能である。しかも、身近な人から徐々に輪が広がるようにしているので、安全である。また、上述の実施例のように無線LAN機能を搭載する場合には、公衆無線LANでも家庭でもインターネットに繋がるので、気軽にネットワーク通信を楽しんでもらうことができる。このように、この通信ゲームシステムによれば、ネットワークゲームに安全かつ気軽に参加することが可能になるので、これまでネットゲームを避けていた一般的なゲームユーザなど、幅広い層の人達に楽しんでもらえる、参加し易いネットワークゲームを実現し提供することができる。
なお、上述の実施例では、近距離無線通信を行った相手から取得した当該相手の識別情報をお友達リストに登録するようにした。しかし、相手の識別情報の取得方法は、近距離無線通信に限られない。他の実施例では、たとえば、お友達リストには、ユーザの手動で入力された識別情報を登録するようにしてもよい。このようにすれば、遠くに住んでいたり予定が合わなかったりして滅多に会えない友達や知人との間でも電話やメール等で識別情報を交換して手入力で簡単に当該相手の識別情報を登録することができるので、直接に会うことのできない友達や知人であっても簡単にネットワークを介して通信ゲームをプレイすることができる。
具体的には、この実施例では、相手の識別情報が手入力で登録されるので、各プレイヤは、相手に識別情報を伝えるために、自己の識別情報を知る必要がある。このため、この実施例では、自己ID表示モードが準備される。たとえばゲーム開始時のメニュー画面(図示しない)において、プレイヤによる所定の操作スイッチ20またはタッチパネル22の操作によって自己ID表示モードを示す項目またはアイコン等が選択されると、画面上に自己の識別情報が表示される。
たとえば図20に自己ID表示モードにおける動作の一例が示される。図20のステップS241で、CPUコア42はIDを表示するか否かを判断する。つまり、CPUコア42は、操作スイッチ20からの操作データまたはタッチパネル22からのタッチ入力データ等に基づいて、自己ID表示モードが選択されたか否かを判断する。
このステップS241で“YES”であれば、つまり、操作データまたはタッチ入力データが自己ID表示モードの実行を指示するデータであった場合には、CPUコア42は、ステップS243で、自己のIDデータをRAM48の自己識別データ記憶領域74からワークエリアに読み出す。
次に、ステップS245で、CPUコア42は、自己のIDを暗号化してユーザキーを生成する。このユーザキーは表示用のIDである。このように、この実施例では、セキュリティのため、IDをそのまま表示しないで、IDを暗号化した記号列ないし文字列(ユーザキー)を生成して表示するようにしている。
そして、ステップS247で、CPUコア42は、生成したユーザキーとプレイヤ名とを含む画面(図示しない)をGPU50等を用いて生成してLCD12または14に表示する。プレイヤ名は自己識別データ記憶領域74に記憶されている。なお、各種画面の画像データはROM28aに予め記憶されている。
ステップS247を終了すると、この自己ID表示モードの処理を終了する。なお、ステップS241で“NO”であれば、つまり、ID表示モードが選択されていない場合には、ID表示ための処理を実行せず、メイン処理に戻る。
このように、自己のID(正確には暗号化したID)を表示することができるので、プレイヤは自己のIDをプレイヤ名とともに友人等に伝えることができる。
なお、この実施例では、自己のIDは自己ID生成モードで生成され、自己のプレイヤ名はプレイヤ名設定モードで入力される。自己ID生成モードの動作の一例が図21に示され、これは上述の実施例における図8のステップS3での処理に相当する。また、プレイヤ名設定モードの動作の一例が図22に示され、これは図8のステップS1での処理に相当する。上述の実施例では自己ID生成モード、プレイヤ名設定モードおよび通信ゲームモードを1つのフロー図(図8)にまとめて記載していたが、この実施例では、分かり易くするために各モードでフロー図を分けて記載している。メイン処理では各モードの処理が実行され、各モードの実質的な処理は当該モードの起動条件が満足されたと判定されたときに実行される。
自己ID生成モードは、たとえば、ゲーム処理の開始が初めて指示されたとき、ゲーム装置10の所有者名の設定がされるとき、あるいは、この通信ゲームのプレイヤ名の設定がされるとき等に実行される。
図21のステップS251で、CPUコア42は、IDを生成するか否かを判断する。具体的には、CPUコア42は、操作データまたはタッチ入力データ等に基づいて、ID生成指示と見なせる操作があったか否かを判断する。たとえば、通信ゲームの開始が初めて指示されたか否か、ゲーム装置10の所有者名が入力設定されたか否か、もしくは通信ゲームのプレイヤ名が入力設定されたか否か等が判断される。
ステップS251で“YES”であれば、CPUコア42は、ステップS253で、IDを生成する。IDは、たとえば、MACアドレス、現時刻および任意のパスワード等を組み合わせることによって生成される。
そして、ステップS255で、CPUコア42は、生成したIDをRAM48の不揮発性メモリ(たとえばフラッシュメモリ)に記憶する。なお、メモリカード28が装着されてゲーム処理が実行されている場合には、生成IDはRAM48の自己識別データ記憶領域74だけでなくメモリカード28のRAM28bにも記憶される。既にIDが記憶されている場合には上書きされる。
ステップS255を終了すると、この自己ID生成モードを終了する。なお、ステップS251で“NO”であれば、つまり、ID生成が指示されていないと見なせる場合には、ID生成のための処理を実行しない。また、一旦IDを生成した後にゲーム処理が再起動された場合には、自己IDデータは、たとえば初期設定で、RAM48の不揮発性メモリまたはメモリカード28のRAM28bからRAM48の自己識別データ記憶領域74に読み出されることとなる。
また、プレイヤ名設定モードは、たとえば、ゲーム開始時のメニュー画面において、プレイヤによる所定の操作スイッチ20またはタッチパネル22の操作によってプレイヤ名設定モードを示す項目またはアイコン等が選択されるときに実行される。
たとえば図22にプレイヤ名設定モードの動作の一例が示される。図22のステップS261で、CPUコア42は、プレイヤ名を入力するか否かを判断する。つまり、CPUコア42は、操作スイッチ20からの操作データまたはタッチパネル22からのタッチ入力データ等に基づいて、プレイヤ名設定モードが選択されたか否かを判断する。
ステップS261で“YES”であれば、CPUコア42は、ステップS263で、GPU50等を用いてプレイヤ名入力画面(図示しない)をLCD12または14に表示する。また、たとえば、タッチパネル22の設けられるLCD14にキーボードの画像を表示する。プレイヤはこのソフトウェアキーボードへのタッチ入力もしくは操作スイッチ20での入力によって、プレイヤ名を入力することができる。
続いて、ステップS265で、CPUコア42は、入力完了であるか否かを判断する。たとえば、操作データまたはタッチ入力データ等に基づいて入力完了を示すアイコンが選択されたか否かを判断する。ステップS265で“NO”であれば、CPUコア42は、ステップS267で入力キャンセルであるか否かを判断する。たとえば、操作データまたはタッチ入力データ等に基づいてキャンセルを示すアイコンが選択されたか否かを判断する。ステップS267で“NO”であれば、処理はステップS263に戻ってプレイヤによる入力の受付を継続する。また、ステップS267で“YES”であれば、プレイヤ名の入力がキャンセルされたので、このプレイヤ名設定モードの処理を終了する。
一方、ステップS265で“YES”であれば、CPUコア42は、ステップS269で、入力されたプレイヤ名を取得して、RAM48の自己識別データ記憶領域74に記憶する。なお、プレイヤ名はメモリカード28のRAM28bにも記憶されてよい。既にプレイヤ名が記憶されている場合には上書きされる。
ステップS269を終了すると、このプレイヤ名設定モードの処理を終了する。なお、ステップS261で“NO”であれば、プレイヤ名設定のための処理を実行せず、メイン処理に戻る。また、一旦プレイヤ名を設定した後にゲーム処理が再起動された場合には、プレイヤ名データは、たとえば初期設定で、メモリカード28のRAM28bからRAM48の自己識別データ記憶領域74に読み出されることとなる。
プレイヤは、相手から識別情報を教えてもらうと、その識別情報を自分の所有するゲーム装置10に手入力で登録する。したがって、この実施例では、相手ID入力モードが準備されている。たとえばゲーム開始時のメニュー画面において、プレイヤによる所定の操作スイッチ20またはタッチパネル22の操作によって相手ID入力モードを示す項目またはアイコン等が選択されると、相手ID入力モードが実行される。この入力モードが選択されると、ID入力画面(図示しない)が表示される。ID入力画面では、プレイヤは、たとえばLCD14に表示されたソフトウェアキーボードをタッチパネル22で操作して、あるいは操作スイッチ20を操作して、相手の識別情報を入力することができる。入力された相手の識別情報はお友達リスト記憶領域80に追加される。なお、プレイヤによって入力される識別情報はユーザキーであるので、ユーザキーを復号化することによってIDを取得し、このIDをお友達リストに記憶する。
図23に相手ID入力モードの動作の一例が示される。図23の最初のステップS281で、CPUコア42は、他のゲーム装置10のIDを入力するか否かを判定する。つまり、CPUコア42は、操作スイッチ20からの操作データまたはタッチパネル22からのタッチ入力データ等に基づいて、相手ID入力モードが選択されたか否かを判断する。
ステップS281で“YES”であれば、CPUコア42は、ステップS283で、GPU50等を用いてID入力画面をLCD12または14に表示する。また、上述のプレイヤ名の入力の場合と同様に、たとえば、タッチパネル22の設けられるLCD14にキーボードの画像を表示し、ソフトウェアキーボードへのタッチ入力もしくは操作スイッチ20での入力によって、相手IDを入力することができるようにする。
続いて、ステップS285で、CPUコア42は、入力完了であるか否かを判断する。たとえば、操作データまたはタッチ入力データ等に基づいて入力完了を示すアイコンが選択されたか否かを判断する。ステップS285で“NO”であれば、CPUコア42は、ステップS287で入力キャンセルであるか否かを判断する。たとえば、操作データまたはタッチ入力データ等に基づいてキャンセルを示すアイコンが選択されたか否かを判断する。ステップS287で“NO”であれば、処理はステップS283に戻ってプレイヤによる入力の受付を継続する。また、ステップS287で“YES”であれば、相手IDの入力がキャンセルされたので、この相手ID入力モードの処理を終了する。
一方、ステップS285で“YES”であれば、CPUコア42は、ステップS289で、入力されたユーザキーとプレイヤ名を取得してRAM48のワークエリアに記憶する。続いて、ステップS291で、CPUコア42は、取得したユーザキーを復号化して、相手のIDを取得する。そして、ステップS293で、CPUコア42は、取得したIDとプレイヤ名とを対応付けて、お友達リスト記憶領域80に追加する。なお、メモリカード28のRAM28bにお友達リストが記憶されている場合には、当該RAM28bのお友達リストにも、取得した相手のIDおよびプレイヤ名を追加的に記憶する。
ステップS293を終了すると、この相手ID入力モードを終了する。なお、ステップS281で“NO”であれば、相手ID入力のための処理を実行せず、メイン処理に戻る。また、一旦お友達リストデータが生成された後にゲーム処理が再起動された場合には、お友達リストデータは、たとえば初期設定で、メモリカード28のRAM28bからRAM48のお友達リスト記憶領域80に読み出されることとなる。
このようにして、友達から知らせてもらった識別情報を、手入力で自分のゲーム装置10に登録することができる。なお、この実施例では、セキュリティのため、識別情報としてID自体ではなく、IDを暗号化して得たユーザキーを表示し、また入力させるようにしたが、他の実施例では、IDをそのまま表示し入力させるようにしてもよい。
図24には通信ゲームモードの動作の一例が示される。たとえばゲーム開始時のメニュー画面において、プレイヤによる所定の操作スイッチ20またはタッチパネル22の操作によって通信ゲームモードを示す項目またはアイコン等が選択されると、通信ゲームモードが実行される。この図24の通信ゲームモードの処理は、上述の図8のステップS5からステップS21の処理と同様であり、同一の参照符号を付して、重複する説明を省略する。
なお、この実施例では、手入力とともに近距離無線通信処理でも相手の識別情報をお友達リストに登録することができるようにしている。しかし、他の実施例では、手入力のみで相手の識別情報を登録するようにしてもよい。その場合、ゲーム装置10は近距離無線通信のための機能を備えなくてよい。
通信ゲームモードにおいてネットワーク通信が選択された場合には、ゲーム装置10は、自己のIDや接続アドレス等の接続情報のほかに、お友達リスト記憶領域80のお友達リストデータをサーバ72に送信する。この実施例では、お友達リストデータの送信は、当該お友達リストに登録されている他のゲーム装置10とネットワーク通信可能であるか否かの問合せを兼ねている。お友達リストデータを送信するのは、サーバ72でゲーム装置10同士が互いに相手の識別情報を登録しているか否かをチェックするためである。
この実施例では、ネットワーク通信の相手の識別情報を、近距離無線通信だけでなく手入力でも登録可能にしたので、たとえば、識別情報が漏れた場合や不正に取得された場合等には、片方のゲーム装置10だけが相手の識別情報を登録しているという事態になり得る。このような片方登録の場合にネットワーク通信が実行されてしまうのを防止するために、サーバ72で各ゲーム装置10のお友達リストを管理し、双方のゲーム装置10がそれぞれ相手の識別情報を登録しているか否かをチェックする。なお、直接の伝達や近距離無線通信等で正当に相手の識別情報を交換したにもかかわらず相手または自分が識別情報を登録しなかった場合にも、当該相手と自分との間ではネットワーク通信が実行されない。このように、プレイヤは相手とのネットワーク通信を拒否したい場合には、当該相手の識別情報を取得しても登録しなければよい。
たとえば図25および図26にこの実施例のインターネット通信処理における動作の一例の一部が示される。図25のステップS61からステップS71の処理は上述の実施例と同様であり、同一の参照符号を付して重複する説明を省略する。
ステップS71で通知処理を開始した後、CPUコア42は、続くステップS301で、お友達リスト記憶領域80に登録されている相手のIDおよびプレイヤ名を含む問合せをワイヤレス通信部64を介してサーバ72に送信する。なお、送信される問合せデータには、少なくとも自己のIDがさらに含まれる。この実施例では、お友達リストに登録されている全ての相手のIDおよびプレイヤ名を送信する、つまり、お友達リストデータを送信することによって、お友達リスト中の全ての他のゲーム装置10についてネットワーク通信可能であるか否かの問合せを送信する。なお、他の実施例では、お友達リストに記憶されている相手のIDのみを送信するようにしてもよい。
続いて、ステップS79で、CPUコア42は、ステップS301で送信した問合せに対する結果をサーバ72から受信したか否かを判断する。ステップS79で“YES”であれば、CPUコア42は、ステップS81で、受信データをRAM48のワークエリアに記憶する。
続くステップS303で、CPUコア42は、相手の接続アドレスを取得したか否かを判断する。たとえば、サーバ72は、問合せIDに対応する他のゲーム装置10とネットワーク通信可能であると判定される場合には、当該IDに対応付けて当該相手の接続アドレスを送信し、問合せIDに対応する他のゲーム装置10とネットワーク通信不可であると判定される場合には、当該IDに対応付けて通信不可を示すデータを送信する。このため、ここでは、CPUコア42は、受信データにおいて、少なくとも1つの接続アドレスが問合せIDに対応付けられて記憶されているか否かを判断する。このようにして、受信した問合せ結果に基づいて、お友達リストに登録されている他のゲーム装置との間でネットワーク通信可能であるか否かを判定する。
なお、ステップS303で“NO”の場合、またはステップS79で“NO”の場合には、処理は図26のステップS85へ進む。
一方、ステップS303で“YES”であれば、CPUコア42は、図26のステップS305で、接続アドレスを取得できた相手(便宜上、ゲーム装置xと呼ぶものとする。)への接続処理を実行する。複数の接続アドレスを取得できた場合には、複数のゲーム装置xのそれぞれに対して通信接続する。なお、CPUコア42は、接続アドレスを取得できた相手の識別情報、つまり、ID、プレイヤ名および接続アドレス等を通信相手情報記憶領域82に記憶する。そして、ステップS307で、CPUコア42はワイヤレス通信部64を介してゲーム装置xとの間での通信ゲーム処理を実行する。複数のゲーム装置10と通信接続できた場合には、複数のゲーム装置xのそれぞれとの間で通信ゲーム処理を実行する。
ステップS307を終了すると、処理はステップS97へ進む。また、ステップS85で“NO”であれば、つまり、ユーザの操作によってキャンセルが選択されていなかったり問合せが未だタイムアウトになっていなかったりする場合等には、処理はステップS97へ進む。ステップS97以降の処理は上述の実施例と同様であり、また、ステップS103の続きおよびステップS97で“NO”である場合の続きも上述の実施例(図13および図14)と同様であり、重複する説明は省略する。
ゲーム装置10からお友達リストデータが送信されると、サーバ72は、各ゲーム装置10ごとにそのデータを記憶する。たとえば図27に示すように、サーバ72は、接続中リスト記憶領域84において、ゲーム装置10のID等に対応付けて、当該ゲーム装置10のお友達リストを記憶する。お友達リストは、相手のIDおよびプレイヤ名を含む。つまり、この実施例では、サーバ72は、接続中リストでネットワークに接続中のゲーム装置10のID、プレイヤ名および接続アドレスを管理するばかりでなく、当該ゲーム装置10のお友達リストも記憶している。したがって、サーバ72でゲーム装置10同士が互いに相手の識別情報を登録しているか否かをチェックして、識別情報を相互に登録していないゲーム装置10同士の間ではネットワーク通信が実行されないようにすることができる。
サーバ72は、お友達リストすなわち問合せを送信してきたゲーム装置10が、当該お友達リストに登録されている他のゲーム装置10との間でネットワーク通信が可能であるか否かを判断する。具体的には、サーバ72は、受信したお友達リスト中の相手IDのそれぞれが、接続中のゲーム装置10のIDとして接続中リストデータに記憶されているか否かを検出する。さらに、サーバ72は、接続中であることが検出された他のゲーム装置10のお友達リストのなかに、問合せを送信してきたゲーム装置10のIDが登録されているか否かを検出する。サーバ72は、お友達リストに登録されている相手が接続中であり、かつ、当該相手のお友達リストに当該ゲーム装置10の識別情報が登録されていると判定される場合には、当該相手とネットワーク通信が可能であると判定して、当該相手の接続アドレスを当該ゲーム装置10に返信する。一方、お友達リストに登録されている相手が接続中ではない場合、および問合せを送信してきたゲーム装置10が相手のお友達リストに登録されていない場合には、当該相手とネットワーク通信が不可であると判定して、当該相手とは通信不可である旨を返信する。
たとえば図28に、この実施例のサーバ72の通信処理における動作の一例が示される。図28のステップS201からステップS205の処理は、上述の図18と同様であり、同一の参照符号を付して重複する説明を省略する。
図28のステップS205で“YES”であれば、つまり、ゲーム装置10から問合せを受信した場合には、サーバ72のCPUは、当該ゲーム装置10のお友達リストを接続中リストに登録する。つまり、CPUは、問合せデータ(お友達リストデータを含む)を受信して、当該受信データから当該ゲーム装置10のお友達リストデータを抽出する。そして、当該ゲーム装置10のIDに対応付けて、お友達リストデータに含まれる全ての相手のIDおよびプレイヤ名を接続中リスト記憶領域84に記憶する。
なお、サーバ72のCPUは、受信したお友達リスト中の相手のIDが正規の番号ないし文字列であるか否かをチェックし、正規と判定されたIDだけを接続中リストのお友達リストとして記憶するようにしてよい。また、接続中リストデータにおけるお友達リストには、相手のプレイヤ名を記憶せずに相手のIDのみを記憶するようにしてもよい。
続いて、ステップS323で、サーバ72のCPUは、問合せデータに含まれる相手のIDと、接続中リスト記憶領域84に記憶されている接続中のゲーム装置10のIDとを照合して、お友達リストに含まれる相手が接続中であるか否かを検出する。なお、問合せデータに複数の相手IDが含まれる場合、1つのIDを選択して、当該1つのIDについて検出を行う。
そして、ステップS325で、サーバ72のCPUは、問合せられたIDが接続中リストに登録されているか否かを判断する。ステップS325で“YES”であれば、つまり、問合せられたゲーム装置10がネットワークに接続中である場合には、サーバ72のCPUは、ステップS327で、当該登録されているIDのお友達リストを参照する。つまり、当該接続中と判定されたIDに対応付けられたお友達リストに登録されているIDと、問合せを送信してきたゲーム装置10のIDとを照合して、相手のお友達リストに当該問合せを送信してきたゲーム装置10のIDが登録されているか否かを検出する。
続くステップS329で、サーバ72のCPUは、問合せをしたゲーム装置10のIDが、接続中と判定された他のゲーム装置10のお友達リストに登録されているか否かを判断する。ステップS329で“YES”であれば、サーバ72のCPUは、当該問合せられた接続中のIDに対応する接続アドレスを、接続中リスト記憶領域84から読み出して、当該問合せられたIDに対して当該接続アドレスを問合せ結果として記憶する。つまり、問い合わせられたIDに対応付けてその接続アドレスを記憶した問合せ結果データを生成する。
一方、ステップS329で“NO”であれば、つまり、問合せられたIDが接続中リストに記憶されているが、当該問合せIDのお友達リストに問合せを送信してきたゲーム装置10のIDが登録されていない場合には、一方のゲーム装置10のみで相手の識別情報が登録されているに過ぎないので、識別情報が交換されていないもの、または他方がネットワーク通信を拒否しているものと見なして、処理はステップS333に進む。
また、ステップS325で“NO”であれば、つまり、問い合わせられたIDがネットワークに接続していない場合には、処理はステップS333に進む。
ステップS333では、サーバ72のCPUは、当該問い合わせられたIDに対して通信不可を問合せ結果として記憶する。つまり、問い合わせられたIDに対応付けて通信不可を示すデータを記憶した問合せ結果データを生成する。
ステップS331またはステップS333を終了すると、サーバ72のCPUは、ステップS335で、全ての問合せIDについてネットワーク通信の可否の確認済みであるか否かを判断する。ステップS335で“NO”であれば、つまり、ステップS321で取得したお友達リストに含まれるIDのうちステップS323からステップS333の処理を実行していないIDが残っている場合には、処理はステップS323へ戻って、残りの問合せIDについての確認を行う。このようにして、各問合せIDに対する通信の可否が記憶された問合せ結果データが生成される。
そして、ステップS335で“YES”であれば、サーバ72のCPUは、ステップS337で、生成した問合せ結果データを、問合せを送信してきたゲーム装置10に送信する。ステップS337を終了するとこの通信処理を終了する。
この実施例によれば、手入力で相手の識別情報を登録することができるので、直接に会うことのできない遠く離れた友達であっても、ネットワークを介して通信ゲームを行うことができる。また、お互いに相手の識別情報をお友達リストに登録していることをネットワーク通信の条件としたので、全く知らない相手からいきなり通信接続されてしまったり、識別情報を不正に入手した見知らぬ相手と通信してしまったりすることを防止できる。
また、上述の各実施例では、ゲーム装置10の近距離無線通信において、通信ゲーム処理を実行した後に識別情報の交換を行うようにしていた。具体的には、図10に示すように、CPUコア42は、ステップS41で通信ゲーム処理を実行した後、ステップS43からステップS49で識別情報の交換を実行していた。しかし、他の実施例では、近距離無線通信では、特にゲームやアプリケーションなどの通信ゲーム処理を行わなくても、識別情報の交換のみを行えるようにしてもよい。このようにすれば、通信ゲームやアプリケーションを実行しなくても、相手の識別情報を簡単に取得して、お友達リストに簡単に登録することが可能になる。
この他の実施例の無線通信処理における動作の一例が図29に示される。図29では、図10の各ステップと同様な処理には、同一の参照符号を付して、重複する説明を省略する。
図29のステップS39で他のゲーム装置10との接続処理を実行した後、CPUコア42は、ステップS43で、当該他のゲーム装置10との間でIDを交換するか否かを判断する。CPUコア42は、ステップS43で“YES”であれば、ステップS45からステップS49でIDの交換およびお友達リストへの登録を実行し、“NO”であれば、そのままステップS351へ進む。
ステップS351では、CPUコア42は、通信ゲームを継続するか否かを判断する。たとえば、CPUコア42は、操作スイッチ20またはタッチパネル22からの入力データ等に基づいて、通信ゲームの継続が指示されたか否かを判断する。
ステップS351で“YES”であれば、CPUコア42は、ステップS353で、図10のステップS41と同様にして通信ゲーム処理を実行する。続いて、CPUコア42はステップS51で通信ゲームを終了するか否かを判断し、“NO”であれば処理はステップS43へ戻る。一方、ステップS51で“YES”の場合、または、ステップS351で“NO”の場合には、この無線通処理を終了する。
また、上述の各実施例では、ネットワーク上にサーバ72を設けて、サーバ72で接続中リストへの識別情報の登録および削除などの接続中リストの管理、問合せに応じた接続リストの照合(問合せIDに対する接続可否の検出)および検出結果の送信などの処理を実行していた。しかし、他の実施例では、ネットワーク上にサーバ72を設けずに、たとえば、複数のゲーム装置10のうちのいずれかもしくは幾つかが、あるいは、複数のゲーム装置10のそれぞれが、サーバ72としての機能を実行するようにしてもよい。