以下、図1を用いて、本発明を適用した一実施形態に係る通信システムを説明する。図1は、本発明の一実施形態にかかる通信システムを示す図である。通信システム1は、複数のゲーム装置100(本発明の情報処理装置の一例に対応)と、このゲーム装置100にアクセスポイント200及びネットワーク300を介して通信可能に接続されたサーバ400とを備える。
各ゲーム装置100は、ユーザに携帯されて移動可能な携帯型の装置である。各ゲーム装置100は、無線通信機能を備え、アクセスポイント200との通信可能範囲に位置して、アクセスポイント200に通信可能に接続されているときに、このアクセスポイント200を介してネットワーク300に接続された他の通信機器(例えばサーバ400)と通信を行う。
また、複数のゲーム装置100は、互いに通信相手として登録(以下、「フレンド登録」と記載する)している場合に限って、アクセスポイント200及びネットワーク300を介して所定の通信(例えばネットワークゲームのための通信)を行う。なお、複数のゲーム装置100は、サーバ400を介して互いに通信を行っても、サーバ400を介さずに通信を行ってもよい。
また、各ゲーム装置100は、自機から所定の距離以内(例えば、10m〜30m以内)に位置する他のゲーム装置100との間で所定の通信プロトコルを用いて近距離無線通信を行う。この近距離無線通信では、アクセスポイント200及びネットワーク300を介さずに直接に複数のゲーム装置100の間で通信を行う。そして、本実施形態では、複数のゲーム装置100は、相手方のゲーム装置100のフレンド登録を行うために、近距離無線通信によって互いの装置IDを示す情報を交換し合う。この装置IDとは、各ゲーム装置100に固有の識別情報であり、MAC(Media Access Control address)アドレスや、このMACアドレスを用いて作成された情報である。各ゲーム装置100は受信した装置IDをフレンド登録する。(以下、フレンド登録した他のゲーム装置100を「フレンドであるゲーム装置100」と記載する場合があり、フレンドであるゲーム装置100のユーザを「フレンドであるユーザ」と記載する場合がある。)
なお、図1においては、2台のゲーム装置100が図示されているが、ゲーム装置100の台数は2台に限定されず2台を超える台数であってもよい。
サーバ400は、各ゲーム装置100にフレンド登録されているゲーム装置100を記憶し、管理する。すなわち、各ゲーム装置100は、自機にフレンド登録されているゲーム装置100の装置ID(以下、「フレンドID」と記載する)を、アクセスポイント200と通信可能に接続されている期間に所定周期毎にサーバ400に送信する。そして、サーバ400は、受信したフレンドIDをユーザ登録されているゲーム装置100の装置ID(以下、「ユーザID」と記載する)に対応付けて記憶する。なお、本実施形態では、サーバ400が管理するのはサーバ400にユーザ登録されているゲーム装置100についてである。
次に、本実施形態にかかる、通信システム1の特徴を説明する。第1の特徴は、他のゲーム装置100との間の近距離無線通信が通信状態に関する所定の条件(通信状態条件)を満たすときにのみ、受信した装置IDをフレンド登録することができることである。このため、通信状態条件を通信状態の良好さを表す条件等に設定することで、自機のある程度近くに居る他の情報処理装置のみをフレンド登録の対象とすることが可能となる。
この通信状態条件は、例えば、受信した装置IDを示す情報の信号強度が所定レベル(所定の閾値)より大きいことや、信号強度に基づいて算出した、他のゲーム装置100との間の通信状態の良さを表す通信レベルが所定レベルよりも大きいこと、等がある。あるいは、自装置から所定数の確認信号を送信して、それを受信した他装置が受信した確認信号と同じ数の確認信号を送信し、その送信された確認信号の数を見ることによって、通信状態の良好さ(または、通信相手との距離)をある程度判断することができるので、そのような確認信号の数を通信状態条件としてもよい。
また、第2の特徴は、ゲーム装置100が、所定周期毎(例えば、1/60sec等の短い期間毎)に自動的に通信可能なアクセスポイント200を検索し、通信可能なアクセスポイント200が検索されたときに、このアクセスポイント200と自動的に接続することである。そして、ゲーム装置100は、当該アクセスポイント200及びネットワーク300を介してサーバ400に自動的に接続し、自機のフレンドであるゲーム装置100の通信接続状態(例えば、オンライン及びオフラインの何れの状態か)に関する情報(接続状態情報)をサーバ400から受信するための処理を実行する。
本実施形態の通信システム1では、ゲーム装置100が、アクセスポイント200と無線通信を行うことで、当該アクセスポイント200を介して他のゲーム装置100と通信を行う。また、ゲーム装置100は携帯型装置である。従って、ゲーム装置100は、ユーザに携帯されて移動することで、アクセスポイント200の通信可能範囲内から頻繁に出入りし、オンライン状態とオフライン状態との間で通信接続状態が頻繁に変化し易い。また、アクセスポイント200は、例えばユーザの家庭に備えられたような固定のものだけでなく、自宅の外のさまざまな場所に存在するため、ユーザが家の外でゲーム装置100を使用している場合は、通信接続状態の変化はより頻繁になる。本通信システム1によれば、ゲーム装置100は、自機がオンライン状態になったときに、自機のフレンドであるゲーム装置100の通信接続状態を所定周期毎にサーバ400から取得するため、上述したような通信接続状態が変化し易い状況においても、自機のフレンドであるゲーム装置100の通信接続状態の変化をすぐに取得することができる。そして、ゲーム装置100はこの通信接続状態の変化をユーザに通知(報知)することができる。
また、各ゲーム装置100は、フレンドリストアプリケーションの実行によって、自機のフレンドであるゲーム装置100の通信接続状態(オンラインかオフラインか)を表示することができる。また、各ゲーム装置100は、自機のフレンドであるユーザに関連するユーザ情報として、フレンド情報を当該ゲーム装置又はサーバ400から受信し、受信したフレンド情報を当該ゲーム装置100の通信接続状態とともに表示する。なお、フレンド情報は、例えば、ユーザ名、キャラクタ情報、ユーザからのメッセージ、お気に入りアプリ識別ID、現在実行中アプリ識別ID等がある。通信接続状態及びフレンド情報の表示の態様の詳細は、図6を用いて後述する。
なお、ゲーム装置100のユーザは、自機のフレンドであるゲーム装置100がログイン状態であるときに、当該ゲーム装置100をネットワークゲームの相手として選択したり、チャットを行う相手として選択したりすることができる。
また、上述したネットワーク300は、LAN(Local Area Network)であってもよいし、広域ネットワークであってもよい。
(ゲーム装置の構成)
以下、ゲーム装置100について説明する。ゲーム装置100は携帯型のゲーム装置である。図2および図3A〜Dに示されるように、ゲーム装置100は、下側ハウジング11および上側ハウジング21を有する。下側ハウジング11と上側ハウジング21とは、開閉可能(折り畳み可能)に接続されている。
(下側ハウジングの説明)
図1および図3A〜Dに示すように、下側ハウジング11には、下側LCD(Liquid Crystal Display:液晶表示装置)12、タッチパネル13、各操作ボタン14A〜14L、アナログスティック15、LED16A〜16C、挿入口17、および、マイクロフォン用孔18が設けられる。
タッチパネル13は、下側LCD12の画面上に装着されている。下側ハウジング11の上側面には、タッチペン28を収納するための挿入口17(図1および図2Dに示す点線)が設けられている。
下側ハウジング11の内側面(主面)には、十字ボタン14A(方向入力ボタン14A)、ボタン14B、ボタン14C、ボタン14D、ボタン14E、電源ボタン14F、セレクトボタン14J、HOMEボタン14K、およびスタートボタン14Lが、設けられる。
アナログスティック15は、方向を指示するデバイスである。
下側ハウジング11の内側面には、マイクロフォン用孔18が設けられる。マイクロフォン用孔18の下部には後述する音声入力装置としてのマイク42(図4参照)が設けられる。
図3BおよびDに示されるように、下側ハウジング11の上側面には、Lボタン14GおよびRボタン14Hが設けられている。また、図2Aに示されるように、下側ハウジング11の左側面には、ゲーム装置100が備えるスピーカ43(図4参照)の音量を調整するための音量ボタン14Iが設けられる。
図3Aに示されるように、下側ハウジング11の左側面には開閉可能なカバー部11Cが設けられる。このカバー部11Cの内側には、ゲーム装置100とデータ保存用外部メモリ45とを電気的に接続するためのコネクタが設けられる。
図3Dに示されるように、下側ハウジング11の上側面には、外部メモリ44を挿入するための挿入口11Dが設けられる。
図3および図3Cに示されるように、下側ハウジング11の下側面にはゲーム装置100の電源のON/OFF状況をユーザに通知する第1LED16A、下側ハウジング11の右側面にはゲーム装置100の無線通信の確立状況をユーザに通知する第2LED16Bが設けられる。ゲーム装置100は他の機器との間で無線通信を行うことが可能であり、下側ハウジング11の右側面には、この無線通信の機能を有効/無効にする無線スイッチ19が設けられる(図3C参照)。
また、下側ハウジング11における上側ハウジング21との結合部分の内側には、ユーザに所定の情報を報知するためのLED16Cが配置されている。このLED16Cは、例えば朱色に点灯することで、自機にフレンド登録されているゲーム装置100の通信接続状態が変化したこと(例えば、オフライン状態であったがオンライン状態に変化した等)を報知する。なお、上記結合部分は上側ハウジング21から分離ないし独立しているため、LED16はゲーム装置100を折りたたんだ状態においてもユーザから視認される。そのため、ゲーム装置100が折りたたまれていない(開いた)状態だけでなく、折りたたまれている(閉じた)状態であっても、自機にフレンド登録されているゲーム装置100の通信接続状態が変化したことを通知することが可能である。
(上側ハウジングの説明)
図2および図3に示すように、上側ハウジング21には、上側LCD(Liquid Crystal Display:液晶表示装置)22、外側撮像部23(外側撮像部(左)23aおよび外側撮像部(右)23b)、内側撮像部24、3D調整スイッチ25、および、3Dインジケータ26が設けられる。
上側LCD22は、立体視可能な画像を表示することが可能な表示装置である。具体的には、パララックスバリア方式の裸眼立体視可能な表示装置である。上側LCD22は、視差バリアを用いてユーザの左目に左目用画像をユーザの右目に右目用画像を視認させることにより、ユーザにとって立体感のある画像(立体視画像)を表示することができる。また、上側LCD22は、上記視差バリアを無効にすることが可能であり、視差バリアを無効にした場合は、画像を平面的に表示することができる。このように、上側LCD22は、立体視画像を表示する立体表示モードと、画像を平面的に表示する(平面視画像を表示する)平面表示モードとを切り替えることが可能な表示装置である。この表示モードの切り替えは、例えば、後述する3D調整スイッチ25によって行われる。
外側撮像部23は、上側ハウジング21の外側面21Dに設けられた2つの撮像部(23aおよび23b)の総称である。外側撮像部(左)23aと外側撮像部(右)23bとは、ゲーム装置100が実行するプログラムによって、ステレオカメラとして使用することが可能である。
内側撮像部24は、上側ハウジング21の内側面21Bに設けられ、当該内側面の内向きの法線方向を撮像方向とする撮像部である。
3D調整スイッチ25は、スライドスイッチであり、上述のように上側LCD22の表示モードを切り替えるために用いられるスイッチである。また、3D調整スイッチ25は、上側LCD22に表示された立体視可能な画像(立体画像)の立体感を調整するために用いられる。3D調整スイッチ25のスライダ25aは、所定方向(上下方向)の任意の位置にスライド可能であり、当該スライダ25aの位置に応じて上側LCD22の表示モードが設定される。また、スライダ25aの位置に応じて、立体画像の見え方が調整される。
3Dインジケータ26は、上側LCD22が立体表示モードか否かを示すLEDである。
また、上側ハウジング21の内側面には、スピーカ孔21Eが設けられる。後述するスピーカ43からの音声がこのスピーカ孔21Eから出力される。
(ゲーム装置100の内部構成)
次に、図4を参照して、ゲーム装置100の内部の電気的構成について説明する。図4に示すように、ゲーム装置100は、上述した各部に加えて、情報処理部31、メインメモリ32、外部メモリインターフェイス(外部メモリI/F)33、データ保存用外部メモリI/F34、データ保存用内部メモリ35、無線通信モジュール36、リアルタイムクロック(RTC)37、加速度センサ38、電源回路40、およびインターフェイス回路(I/F回路)41等の電子部品を備えている。
情報処理部31は、所定のプログラムを実行するためのCPU(Central Processing Unit)311、画像処理を行うGPU(Graphics Processing Unit)312、VRAM(Video RAM)313を含む。CPU311は、ゲーム装置100内のメモリ(例えば外部メモリI/F33に接続された外部メモリ44やデータ保存用内部メモリ35)に記憶されているプログラムを実行することによって、当該プログラムに応じた処理を実行する。なお、CPU311によって実行されるプログラムは、他の機器との通信によって他の機器から取得されてもよい。GPU312は、CPU311からの命令に応じて画像を生成し、VRAM313に描画する。VRAM313に描画された画像は、上側LCD22及び/又は下側LCD12に出力され、上側LCD22及び/又は下側LCD12に当該画像が表示される。
外部メモリI/F33は、外部メモリ44を着脱自在に接続するためのインターフェイスである。また、データ保存用外部メモリI/F34は、データ保存用外部メモリ45を着脱自在に接続するためのインターフェイスである。
メインメモリ32は、情報処理部31(のCPU311)のワーク領域やバッファ領域として用いられる揮発性の記憶装置である。
外部メモリ44は、情報処理部31によって実行されるプログラム等を記憶するための不揮発性の記憶装置である。外部メモリ44は、例えば読み取り専用の半導体メモリで構成される。
データ保存用外部メモリ45は、不揮発性の読み書き可能なメモリ(例えばNAND型フラッシュメモリ)で構成され、任意のデータを保存するために用いられる。
データ保存用内部メモリ35は、読み書き可能な不揮発性メモリ(例えばNAND型フラッシュメモリ)で構成され、所定のデータを格納するために用いられる。例えば、データ保存用内部メモリ35には、無線通信モジュール36を介した無線通信によってダウンロードされたデータやプログラムが格納される。
無線通信モジュール36は、例えばIEEE802.11b/gの規格に準拠した方式により、無線LANに接続する機能を有する。また、無線通信モジュール36は、所定の通信方式(例えば独自プロトコルによる通信や、IEEE802.11b/gの規格に準拠した方式、赤外線通信及びBluetooth等)により同種の他のゲーム装置100との間で近距離無線通信を行う機能を有する。なお、無線通信モジュール36は、他のゲーム装置100との間で後述するすれちがい通信を行う。
加速度センサ38は、3軸(xyz軸)方向に沿った直線方向の加速度(直線加速度)の大きさを検出する。情報処理部31は、加速度センサ38が検出した加速度を示すデータ(加速度データ)を受信して、ゲーム装置100の姿勢や動きを検出することができる。
RTC37は、時間をカウントして情報処理部31に出力する。情報処理部31は、RTC37によって計時された時間に基づき現在時刻(日付)を計算する。電源回路40は、ゲーム装置100が有する電源(充電式電池)からの電力を制御し、ゲーム装置100の各部品に電力を供給する。
I/F回路41には、タッチパネル13、マイク42およびスピーカ43が接続される。I/F回路41は、マイク42およびスピーカ43(アンプ)の制御を行う音声制御回路と、タッチパネルの制御を行うタッチパネル制御回路とを含む。音声制御回路は、音声信号に対するA/D変換およびD/A変換を行ったり、音声信号を所定の形式の音声データに変換したりする。タッチパネル制御回路は、タッチパネル13からの信号に基づいて所定の形式のタッチ位置データを生成して情報処理部31に出力する。情報処理部31は、タッチ位置データを取得することにより、タッチパネル13に対して入力が行われた位置を知ることができる。
操作ボタン14は、上記各操作ボタン14A〜14Lからなり、操作ボタン14から情報処理部31へは、各操作ボタン14A〜14Iに対する入力状況(押下されたか否か)を示す操作データが出力される。
下側LCD12および上側LCD22は情報処理部31に接続される。具体的には、情報処理部31は、上側LCD22のLCDコントローラ(図示せず)と接続され、当該LCDコントローラに対して視差バリアのON/OFFを制御する。上側LCD22の視差バリアがONになっている場合、情報処理部31のVRAM313に格納された右目用画像と左目用画像とが、上側LCD22に出力される。より具体的には、LCDコントローラは、右目用画像について縦方向に1ライン分の画素データを読み出す処理と、左目用画像について縦方向に1ライン分の画素データを読み出す処理とを交互に繰り返すことによって、VRAM313から右目用画像と左目用画像とを読み出す。これにより、右目用画像および左目用画像が、画素を縦に1ライン毎に並んだ短冊状画像に分割され、分割された右目用画像の短冊状画像と左目用画像の短冊状画像とが交互に配置された画像が、上側LCD22の画面に表示される。そして、上側LCD22の視差バリアを介して当該画像がユーザに視認されることによって、ユーザの右目に右目用画像が、ユーザの左目に左目用画像が視認される。以上により、上側LCD22の画面には立体視可能な画像が表示される。
外側撮像部23および内側撮像部24は、情報処理部31の指示に従って画像を撮像し、撮像した画像データを情報処理部31に出力する。
3D調整スイッチ25は、スライダ25aの位置に応じた電気信号を情報処理部31に送信する。
情報処理部31は、3Dインジケータ26の点灯を制御する。例えば、情報処理部31は、上側LCD22が立体表示モードである場合、3Dインジケータ26を点灯させる。
以下に図5を用いて上記サーバ400の構成を説明する。図5は、サーバ400の内部の電気的構成の一例を示すブロック図である。
サーバ400は、操作部401、通信部402、ROM403、HDD404、RAM405及びCPU406を有し、これらの間はバス407で互いに通信可能に接続されている。
操作部401は本サーバ400の管理者からの操作を受け付ける機能を有する。通信部402はネットワーク300を介して他の装置と通信する機能を有する。ROM403はこのサーバ400本体を起動するとともに基本的な機能を実現するためのシステムプログラムが記憶されている。HDD404は、本サーバ400にゲーム装置100との間の通信を行わせる通信プログラムを含むプログラム、及びこのプログラムの実行に必要なデータが記憶されている。RAM405は、CPU406の作業領域として機能し、HDD404から読み出された管理テーブルD10を記憶する。この管理テーブルD10には、ゲーム装置100の装置IDと、このゲーム装置100のフレンドであるゲーム装置100の装置ID(フレンドID)が対応づけて登録されている。また、この管理テーブルD10には、登録されている装置IDに対応付けて、対応するゲーム装置100の接続状態情報(オンラインかオフラインかを示す情報、本発明の管理情報の一例)が登録されている。
CPU406は、ゲーム装置100から当該ゲーム装置100がオンラインであることを示すオンライン通知を受信したときに、管理テーブルD10を参照して、このゲーム装置100のフレンドであるゲーム装置100のフレンドIDと、このフレンドであるゲーム装置100の接続状態情報とを取得し、オンライン通知の送信元のゲーム装置100に対して送信する。また、CPU406は、オンライン通知を受信したときに、管理テーブルD10に登録されている当該ゲーム装置100の接続状態情報がオフラインであることを示すときには、当該登録されている接続状態情報をオンラインに変更する。
以下、図6を用いて、フレンドリストアプリケーションの実行によって、ゲーム装置100に表示される情報を説明する。図6は、フレンド情報、フレンドであるゲーム装置100の通信接続状態、及び当該ゲーム装置100のフレンド情報等を表示した画面の一例を示す図である。
下側LCD12には、フレンド情報が表示されたカードの画像G1(以下、「フレンドカードG1」と記載する)、操作子G2及び操作子G3が表示されている。
フレンドカードG1には、フレンド情報として、フレンドであるユーザを表すキャラクタG4と、当該ユーザの名前G5(以下「ユーザ名G5」と記載する)とが表示されている。また、フレンドカードG1には、フレンドとなるゲーム装置100のユーザがオンラインであるかオフラインであるかを示す通信接続状態を表すテキストG6が表示されている。これによって、ゲーム装置100のユーザに対して、フレンドカードG1に対応するゲーム装置100がオンラインであるか否かを視覚的に分り易く表示することが可能になる。従って、ユーザは、自機のフレンドとなるゲーム装置100がオンラインなので当該ゲーム装置100のユーザを相手としてネットワークゲームを行うように、又はチャットを行うように容易に決定することができる。
なお、複数のゲーム装置100がフレンド登録されているときには、複数のフレンドカードG1を表示することが可能であり、図6では、5台のゲーム装置100がフレンドとして登録されているが、下側LCD12のスペースの都合上、5台中3台分のゲーム装置100のフレンドカードG1を表示することができる(もちろん、3台分以上のフレンドカードG1を表示できるようにしてもよい。)。そして、ユーザがタッチパネル13をスライド操作することによって、表示するフレンドカードG1を切り替えることができる(スライド操作だけでなく、例えばLボタン14GやRボタン14H等を用いることによる操作であってもよい。以下の操作においても同様である)。また、中央に表示されたフレンドカードG1をタッチする操作をタッチパネル13で受け付けたときに、当該フレンドカードG1が選択されたとして、上側LCD22にフレンドカードG1が拡大して表示される。この拡大して表示されたフレンドカードG1によって、ユーザは選択されたフレンドカードG1に表示されたフレンド情報をより視認し易くなる。なお、フレンドカードG1が選択されると、当該フレンドカードG1の上方に、フレンドであるユーザが作成したメッセージG10が表示される。
操作子G2は、選択されたフレンドカードG1と、当該フレンドカードG1に対応するフレンド登録の削除の指示をユーザから受け付けるために表示される。ここで、操作子G2をタッチする操作をタッチパネル13で受け付けたときに、当該フレンドカードG1が削除され、当該フレンドカードG1に対応するフレンド登録も削除される。なお、本実施形態では、複数のゲーム装置100が互いにフレンド登録していないと相互に通信を行うことができず、何れか一方のゲーム装置100のフレンド登録を削除すると、他方のゲーム装置100のフレンド登録も削除されることになる。ただし、他方のユーザに対してフレンド登録を削除したことを知らせないようにするため、他方のゲーム装置上ではフレンドカードG1の表示は残ったままになる。
また、操作子G3は、フレンドとなるゲーム装置100を新たに追加してフレンド登録するための指示(フレンド登録指示)をユーザから受け付けるためのものであり、ユーザが操作子G3のタッチする操作をタッチパネル13で受け付けたときに、新たに追加してフレンド登録を行うための処理(フレンド登録処理)がゲーム装置100で実行される。フレンド登録処理についての詳細は後述する。
上側LCD22には、上述したような拡大されたフレンドカードG1が表示される。拡大されたフレンドカードG1には、拡大前のフレンドカードG1に表示されていたフレンド情報に加えて、他のフレンド情報も表示される。例えば、フレンドカードG1に対応するユーザのお気に入りのアプリケーションの名称(アプリケーション名)G7、及びこのアプリケーションに対応するアイコンG8が表示される。また、フレンドカードG1に対応するユーザが現在実行しているアプリケーションの名称(アプリケーション名)G9、及びこのアプリケーションに対応するアイコンG10が表示される。これによって、フレンドカードG1に対応するユーザが現在実行しているアプリケーション名をユーザに知得させることができる。このため、ユーザは自己と同じアプリケーションを実行しているユーザ(ゲーム装置100)を容易に知得することができる。なお、フレンドリストアプリケーションは、他のアプリケーションの実行中にも実行可能である。このため、ユーザは、他のアプリケーションの実行中に当該アプリケーションにおいてネットワークゲームを行いたくなったときに、フレンドリストアプリケーションの実行をゲーム装置100に指示し、かつアプリケーション名G7を表示させることができる。これによって、ユーザが、フレンドであるユーザが現在実行しているアプリケーション名を見ることで、自機と同じアプリケーションを実行しているゲーム装置100を検索し、ネットワークゲームの相手方となり得るゲーム装置100を容易に探すことができる。
また、拡大されたフレンドカードG1には、ネットワークを介してフレンド登録を行うときに使用するフレンドコードG11が表示される。
以下、図7及び図8を用いて、フレンド登録処理において表示される画面を説明する。フレンド登録処理においては、複数のゲーム装置100は近距離無線通信を行うことで装置IDを交換することができる。例えば、複数のゲーム装置100は、装置IDを含んだビーコンを送受信し合う。そして、ゲーム装置100は、このビーコンの信号強度が通信状態条件(例えば、所定の閾値以上であるとの条件)を満たしたときにのみ、自機のユーザ情報をフレンド情報として交換し合い、フレンド登録可能なゲーム装置100(フレンド候補)として表示する。
図7は、フレンド候補を下側LCD12に表示した画面の一例を示す図である。この画面には、フレンド候補のフレンドカードG1と、フレンドとなるゲーム装置100の選択を促すテキストG12が表示される。このフレンドカードG1にはフレンド情報が表示されるが、このフレンドカードG1に表示されるフレンド情報はキャラクタG4とユーザ名G5である。本実施形態では、ゲーム装置100が、所定時間内に所定の複数台分(例えば3つ分)のゲーム装置100を限度としてフレンド情報を取得することができる。また、複数のゲーム装置100についてのフレンド情報を取得したときには、複数のフレンドカードG1が表示される。そして、図7では、例として、2台分のゲーム装置100のフレンド情報を取得して、2つのフレンドカードG1を表示する場合を示している。ユーザは、表示されたフレンドカードG1の中から1つのフレンドカードG1を選択する(例えば1つのフレンドカードG1に対してタッチ操作を行う等)ことで、フレンド登録をするゲーム装置100を選択することができる。
この様に、複数台のゲーム装置100のフレンド情報を受信した場合でも、ユーザは、キャラクタG4及びユーザ名G5等のフレンド情報を確認しながら、フレンド登録するゲーム装置100を選択することができる。このため、ゲーム装置100は、自装置の近距離無線通信可能範囲に、フレンド登録を希望するゲーム装置100以外の別のゲーム装置100が有る場合でも、誤って別のゲーム装置100をフレンド登録することなく正確に希望のゲーム装置100をフレンド登録することができる。
なお、ビーコンの信号強度が強かった順番で昇順に又は降順に、フレンドカードG1を並べて表示してもよい。これによって、ユーザは、フレンド登録を希望するゲーム装置100を更に正確に特定することができるため、正確に希望のゲーム装置100をフレンド登録することができる。
以下に、図8を用いて、近距離無線通信によってフレンド登録が行われた際にゲーム装置100に表示される画面を説明する。図8は、フレンド登録指示を受け付けたときに上側LCD22及び下側LCD12に表示される画面の一例を示す図である。上側LCD22には、フレンド登録されたゲーム装置100のフレンドカードG1が表示される。このフレンドカードG1に表示されるフレンド情報の内容は、図6の上側LCD22に表示されるフレンドカードG1の内容とほぼ同じである。もっとも、アプリケーション名G9、及びアイコンG10については、図8で示すフレンドカードG1には表示されない。
下側LCD12には、フレンド登録が成功したことを示すテキストG13が表示される。
次に、図9、図10A〜Cを用いて、ゲーム装置100が、メインメモリ32に記憶する各種プログラムや各種データについて説明する。
図9は、メインメモリ32が記憶するプログラム及び各種データの一例を示す図である。各種データはプログラムをゲーム装置100が実行することに応じて記憶される。メインメモリ32は、プログラムを記憶するためのプログラム記憶領域321、データを記憶するデータ記憶領域322、及びフレーム記憶領域323を有する。
プログラム記憶領域321には、ゲーム装置100のCPU311に通信処理を実行させるための通信プログラムP1、ゲーム装置100にフレンド管理処理を実行させるためのフレンドリストアプリケーションP2、及びその他のアプリケーションP3が少なくとも記憶されている。通信処理とは、無線通信モジュール36を用いて、アクセスポイント200に自動的に接続してアクセスポイント200を介してサーバ400との間で情報を送受信する処理、及び他の情報処理装置100とすれちがい通信を行う処理を含む。また、フレンド管理処理とは、ユーザに自機のフレンドであるゲーム装置100のフレンド情報を表示するための処理、及び他のゲーム装置100をフレンド登録しかつ他のゲーム装置100に自機をフレンド登録させるための処理であるフレンド登録処理を含む。
データ記憶領域322は、ユーザ情報D1、フレンドリストテーブルD2、フレンド候補リストテーブルD3、通信レベルテーブルD4、キャラクタ画像D5、アプリケーション名D6、アイコン画像D7、及びお気に入りアプリ情報D8等が記憶されている。
ユーザ情報D1は、フレンドアプリケーションの実行時にユーザから入力されたユーザに関連する情報である。ユーザ情報D1は、例えば、ユーザ名、ユーザのフレンドコード、お気に入りアプリケーションのアプリID、実行中のアプリケーションのアプリID、ユーザに対応する(例えばユーザに作成された)キャラクタ情報、ユーザに作成されたメッセージ等を含む。なお、アプリIDとは、アプリケーションに固有の識別情報である。なお、このユーザ情報D1は、サーバ400にユーザ登録を要求する際に、アクセスポイント200及びネットワーク300を介してサーバ400に送信され、管理テーブルD10(図5を参照)に登録される。また、ユーザ情報D1は、フレンド登録処理において他のゲーム装置100に対して送信される。他のゲーム装置100に受信されたときに、ユーザ情報D1は、自機のフレンド情報として他のゲーム装置100のフレンドリストテーブルD2に記憶される。
フレンドテーブルD2は、フレンドであるゲーム装置100の装置IDと、フレンド情報とを互いに対応付けて登録するためのテーブルである。図10Aは、フレンドテーブルD2の一例を示す図である。なお、このフレンドテーブルD2に登録されるフレンド情報の種類は、上述したユーザ情報D1と同じである(他のゲーム装置100から受信したユーザ情報D1のユーザIDがフレンドIDとして管理され、ユーザ名がフレンド名として管理される)。また、フレンドテーブルD2には、フレンドであるゲーム装置100の通信接続状態(オンラインかオフラインか)を示す接続状態情報が装置IDに対応付けて登録される。この接続状態情報は、サーバ400から受信する、フレンドであるゲーム装置100の接続状態情報に基づいて更新される。なお、サーバ400は、ゲーム装置100がサーバ400にログインしたとき、及びゲーム装置100のフレンドであるゲーム装置100の通信接続状態が変化したと判断したときに、当該ゲーム装置100のフレンドであるゲーム装置100の接続状態情報を当該ゲーム装置100に送信する。
フレンド候補リストテーブルD3は、フレンド登録処理において、フレンド登録可能なゲーム装置100の装置ID(フレンドID)と、フレンド情報(フレンド名、フレンドコード、キャラクタ情報)とを互いに対応付けて一時的に登録するためのテーブルである。図10Bは、フレンド候補リストテーブルD3の一例を示す図である。なお、このフレンド候補リストテーブルD3に装置IDが登録されているゲーム装置100は、近距離無線通信によって装置IDを含むビーコンを自機と交換し合い、かつこのビーコンの信号強度が通信状態条件に合致しているものである。
通信レベルテーブルD4は、無線通信モジュール36で受信する信号強度を複数段階(例えば、4段階)に分け、このそれぞれの段階に対応する通信レベルを定義したテーブルである。図10Cは、通信レベルテーブルD4の一例を示す図である。ゲーム装置100は、フレンド登録処理において、装置IDを含むビーコンを受信したときに、通信レベルテーブルD4を参照して、このビーコンの信号強度に対応する通信レベルを取得する。そして、ゲーム装置100は、この通信レベルを用いて、ビーコンの信号強度が通信状態条件を満たすかを判断する。
キャラクタ画像D5は、フレンドリストテーブルD2に登録されているキャラクタ情報又はユーザ情報D1に含まれるキャラクタ情報に対応するキャラクタを生成するための画像データである。
アプリケーション名D6は、アプリIDに対応付けて記憶されており、このアプリIDに対応するアプリケーションの名称を示すデータである。アイコン画像D7は、アプリIDに対応付けて記憶されており、このアプリIDに対応するアイコンを表す画像データである。
お気に入りアプリ情報D8は、フレンドリストテーブルD2に登録されているフレンドIDに対応するアプリIDを示す。お気に入りアプリ情報D8は、フレンドリストテーブルD2に登録されているアプリIDに対応するアプリケーション名D6及びアイコン画像D7がないときに参照される。すなわち、お気に入りアプリ情報D8は、対応するアプリケーション名D6及びアイコン画像D7がメインメモリ32に記憶されているアプリIDのうち、フレンドリストテーブルD2において最新に更新されたアプリIDを示す。
フレーム記憶領域323は、他のゲーム装置100から受信した通信フレーム又は他のゲーム装置100に送信する通信フレームを記憶するための領域である。
なお、上記D1〜D7は、例えばデータ保存用内部メモリ35やデータ保存用外部メモリ45から読み出されてメインメモリ32に記憶される。
以下に、図11を用いて、サーバ400で記憶する管理テーブルD10を説明する。図11は、管理テーブルD10の一例を示す図である。管理テーブルD10は、通信システム1を構成する各ゲーム装置100にフレンド登録されているゲーム装置100を管理するためのテーブルである。管理テーブルD10には、各ゲーム装置100の装置ID、この装置IDに対応するユーザ情報D1(ユーザ名、フレンドコード、お気に入りアプリID、実行中アプリID、キャラクタ情報、メッセージ)、接続状態情報、ログイン判定用フラグ、及びフレンドIDが登録されている。なお、管理テーブルD10に装置IDが登録されているゲーム装置100は、通信システム1を構成する全てのゲーム装置100ではなく、このゲーム装置100のうちユーザ登録を要求したゲーム装置100のみである。
装置IDとユーザ情報D1とは、ユーザ登録を要求する際にゲーム装置100から送信され、サーバ400で受信して登録されている。そして、接続状態情報は、ゲーム装置100がオンライン及びオフラインのうち何れの通信接続状態であるかを示す。この接続状態情報は、ゲーム装置100から受信したオンライン通知に基づいて更新される。なお、ゲーム装置100は、アクセスポイント200に接続されている期間に所定周期毎に、自機がオンラインであることを通知するためのオンライン通知を送信する。具体的には、接続状態情報は、ゲーム装置100からオンライン通知を受信したときにオンラインを示すように更新され、オンライン通知の受信がないときにはオフラインを示すように更新される。なお、オンライン通知の受信がないときに直ぐに更新するのではなく、オンライン通知を受信してから、所定期間受信がないときにのみ更新してもよい。また、サーバ400がゲーム装置100に対してオンライン通知を送信するように要求し、これに対してゲーム装置100から応答が無いような場合に、当該ゲーム装置100をオフラインと判断してもよい。また、オンライン通知はゲーム装置100固有の識別情報でもよいし、その他の情報であってもよい。
ログイン判定用フラグはオンライン通知を受信したときにログイン中かログオフ中かを判定するためのフラグであり、ログイン判定用フラグがオフのときに、ログイン中であるとサーバ400によって判定される。また、ログイン判定用フラグがオンのときに、ログオフ中であるとサーバ400によって判定される。
フレンドIDは、装置IDに対応するゲーム装置100において、フレンド登録されているゲーム装置100の装置IDである。ゲーム装置100は、サーバ400からの要求に応じて、自機のフレンドリストテーブルD2に登録されているフレンドIDをサーバ400に送信する。サーバ400は、受信したフレンドIDで管理テーブルD10を更新する。
以下に、図12を用いて、CPU311が実行する通信処理の一例について説明する。なお、図12のフローチャートは単なる一例に過ぎない。従って、同様の結果が得られるのであれば、各ステップの処理順序を入れ替えてもよい。後述の図13〜図18、図21、図22及び図24のフローチャートについても同様である。
図12は、通信処理の一例を示すフローチャートである。本通信処理は、ゲーム装置100の電源がオンされたときに、無線通信モジュール36を用いて実行開始される。まず、CPU311は、今回の処理が通信処理の開始から初回の処理であるかを判定する(S1)。今回の処理が通信処理の開始から初回の処理であると判定したときには(S1でYES)、CPU311は、接続可能なアクセスポイント200を自動的に検索する(S2)。具体的には、アクセスポイント200から送信されるビーコンの受信の試みを近距離無線を利用して自動的に行う。ただし、既に接続可能なアクセスポイントが見つかっている場合は(もしくは、アクセスポイントに接続中は)、アクセスポイントの検索を行わないようにしてもよい。そして、CPU311は、接続可能なアクセスポイント200が存在したかどうかを判断する(S3)。例えば、アクセスポイント200からのビーコンを受信したか否かを判断する。ここで、接続可能なアクセスポイント200が存在したと判断したときには(S3でYES)、CPU311は作動中であればタイマを停止させる(S4)。なお、CPU311はタイマを作動中でなければ本ステップにおいて何ら処理を行わない。そして、CPU311は、サーバ400との間で情報を送受信するための処理(サーバとの通信処理)を実行する(S5)。なお、サーバとの通信処理についての詳細は図13を用いて後述する。この後、CPU311は電源オフの指示がユーザから入力されたかを判断し(S6)、入力されたと判断したときには(S6でYES)、自機の電源オフをサーバ400に通知するための電源オフ情報をサーバ400に送信する(S7)。この後、CPU311は通信処理を終了させる。また、電源オフの指示がユーザから入力されていないと判断したときには(S6でNO)、CPU311は処理をステップS1に戻す。なお、ステップS1〜S6、後述のステップS8〜S11までの処理は、電源オフの指示がユーザから入力されたと判定されるまで、所定周期毎(例えば1/60sec毎等の短い周期で)に繰り返し実行される。
次に、ステップS3でNOと判断されたときの処理について説明する。接続可能なアクセスポイント200が存在しないと判断したときには(S3でNO)、CPU311はタイマを作動していなければタイマを作動し(計時処理を開始し)、タイマを作動しているときにはタイマをリセットしてタイマのカウント値を初期値に戻す(S8)。そして、CPU311はすれちがい通信処理を実行する(S9)。これによって、アクセスポイント200に接続不可能なときには、すれちがい通信処理が実行されることになる。
すれちがい通信処理の内容は次のようなものである。すなわち、ゲーム装置100が近距離無線通信によってビーコンをブロードキャストで送信する。ゲーム装置100は、ビーコンを受信した他のゲーム装置100から接続要求を受けたときに、当該他のゲーム装置100に接続応答を送信する。この後、ゲーム装置100は、他のゲーム装置100と通信を確立して、所定の情報の送受信を行う。この所定の情報とは、例えば、上述したユーザ情報D1であり、これによって、ゲーム装置100に自機がすれちがったゲーム装置100のユーザ情報D1を取得させることができる。なお、ゲーム装置100が、他のゲーム装置100からビーコンを受信したときには、他のゲーム装置100に対して接続要求を送信して、この後、接続要求を受信した他のゲーム装置100から接続応答を受信することになる。
CPU311は、ステップS9のすれちがい通信処理を実行した後に、上述のステップS6を実行する。
次に、ステップS1でNOと判断されたときの処理について説明する。今回の処理が通信処理の開始から初回の処理ではないと判定したときには(S1でNO)、CPU311はタイマを作動中か否かを判断する(S10)。なお、このタイマは、接続可能なアクセスポイント200が存在しないときに、ステップS8の実行によって作動される。そして、タイマを作動中でないと判断したときには(S10でNO)、CPU311は後述のステップS2に処理を進めて、アクセスポイント200を自動的に検索する処理を実行する。一方、タイマを作動中であると判断したときには(S10でYES)、CPU311はタイマが時間t1の経過を示すか否かを判断する(S11)。
そして、タイマが時間t1の経過を示したときには(S11でYES)、CPU311は後述のステップS2に処理を進めて、アクセスポイント200を自動的に検索する処理を実行する。また、タイマが時間t1の経過を示していないときには(S11でNO)、CPU311は、アクセスポイント200を自動的に検索する処理(S2)を実行せずに、上記ステップS9に処理を進めてすれちがい通信処理を実行する。これによって、ゲーム装置100は、接続可能なアクセスポイント200が検索できなかったときには、このときから時間t1が経過するまでは、アクセスポイント200を検索する処理を行わず、すれちがい通信処理を行う。
次に、図13を用いて、上記ステップS5におけるサーバとの通信処理を説明する。図13は、サーバとの通信処理の一例を示すフローチャートである。なお、図13においては、フレンドであるゲーム装置100を「フレンド」と単に記載する。まず、CPU311は、今回の処理が通信処理の開始から初回の処理であるかを判定する(S21)。ここで、今回の処理が通信処理の開始から初回の処理であると判定したときに(S21でYES)、CPU311はフレンドリストテーブルD2に登録されている全ての装置IDに対応する接続状態情報を、オフラインを示すように更新する(S22)。この後、CPU311は、ステップS23に処理を進める。一方、今回の処理が通信処理の開始から初回の処理ではないと判定したときには(S21でNO)、CPU311はステップS22を実行することなく処理をステップS23に進める。
ステップS23において、CPU311は、自機の装置IDを含めたオンライン通知をサーバに送信する。そして、CPU311は、サーバ400からフレンドIDの送信要求を受信したときに(図14を用いて後述するサーバ側通信処理におけるステップS49又はS56においてサーバ400から送信される)、フレンドリストテーブルD2に登録されている全てのフレンドIDを含めた情報をサーバ400に送信する(S24)。この後、CPU311は、フレンドリスト更新用情報を受信したかどうかを判断する(S25)。このフレンドリスト更新用情報は、図14を用いて後述するサーバ側通信処理におけるステップS53でサーバ400から送信される情報である。このフレンドリスト更新用情報は、ゲーム装置100がサーバ400に対してログインしたときにのみ受信する。なお、フレンドリスト更新用情報は、自機のフレンドである全てのゲーム装置100の装置ID、当該装置IDに対応するユーザ情報D1(すなわち、フレンド情報)、当該装置IDに対応する接続状態情報を含む情報である。フレンドリスト更新用情報を受信したと判断したときには(S25でYES)、CPU311は後述のステップS27に処理を進める。なお、フレンドリスト更新用情報を受信したときに、図17を用いて後述するステップS103及びS104を実行してもよい。具体的には、自装置に記憶しているフレンドリストテーブルD2を参照して、登録されていないフレンド情報等があるかどうかを判断する。そして、登録されていないフレンド情報があると判断したときには、CPU311はフレンドリストテーブルD2に登録されていないフレンド情報等をサーバ400から取得するための処理を行う。なお、フレンドリストテーブルD2に登録されていないフレンド情報とは、例えば、次のようなものである。フレンドであるユーザが、ユーザ情報D1を入力するときに、例えば、お気に入りアプリケーション名だけを入力しない等、一部の情報を入力せず、後になって追加して入力する可能性がある。このような一部の情報が、登録されていないフレンド情報である。
一方、フレンドリスト更新用情報を受信していないと判断したときには(S25でNO)、CPU311は通信接続状態の変更通知を受信したかどうかを判断する(S26)。この通信接続状態の変更通知は、図14を用いて後述するサーバ側通信処理におけるステップS54又はS71においてサーバ400から送信される情報である。この通信接続状態の変更通知は、自機のフレンドとなるゲーム装置100の通信接続状態が変更されたときに、サーバ400から送信される情報であり、自機のフレンドとなるゲーム装置100の装置IDと、この装置IDに対応する接続状態情報を含む。そして、通信接続状態の変更通知を受信したと判断したときには(S26でYES)、CPU311は後述のステップS27に処理を進める。
次にステップS27の処理について説明する。本ステップにおいては、CPU311はステップS25又はS26で受信したと判断された情報を用いて、フレンドリストテーブルD2に登録されている内容を更新する(S27)。例えば、フレンドリスト更新用情報を受信したときには、CPU311はこの最新の内容でフレンドリストテーブルD2のフレンドID、フレンド情報及び接続状態情報等を更新する。これによって、ゲーム装置100は、自機がオフラインの期間に行われた自機のフレンドであるゲーム装置100のフレンド情報の変更を自機のフレンドリストテーブルD2に反映させることができる。
なお、フレンドリストテーブルD2のお気に入りアプリIDを更新するときに、更新後のアプリIDに対応するアプリケーション名D6及びアイコン画像D7がメインメモリ32に記憶されているかどうかを判断し、記憶されているときに限って、このアプリIDでお気に入りアプリ情報D8を更新する。ここで、お気に入りアプリ情報D8はフレンドIDに対応する数だけフレンドIDに対応付けて記憶されているので、お気に入りアプリIDが更新されたフレンドIDのお気に入りアプリ情報D8が更新される。これによって、お気に入りアプリ情報D8は、対応するアプリケーション名D6及びアイコン画像D7が記憶されているアプリIDのうち、最新のアプリIDを示すものとなる。このため、フレンドリストテーブルD2に登録されているお気に入りアプリIDに対応するアイコン画像D6及びアイコン画像D7が存在しないときには、お気に入りアプリ情報D8を用いてアプリケーション名D6及びアイコン画像D7を取得して表示することができる。
そして、CPU311は、ステップS27において、通信接続状態がオフラインからオンラインに更新されたゲーム装置100(フレンドであるゲーム装置100)があるかどうかを判断する(S28)。ここで、通信接続状態がオフラインからオンラインに更新されたフレンドであるゲーム装置100があると判断したときには(S28でYES)、CPU311はランプ点灯処理を行う(S29)。このランプ点灯処理とは、LED16C(図2を参照)を例えば朱色に点灯させる処理である。この処理によって、オフラインからオンラインに変化したゲーム装置100(フレンドであるゲーム装置100)があることをユーザに対して報知することができる。なお、本実施形態では、通信接続状態がオンラインからオフラインに更新されたときにはランプ点灯処理をおこなわないが、おこなってもよい。この後、CPU311はステップS30に処理を進める。一方、通信接続状態がオフラインからオンラインに更新されたフレンドであるゲーム装置100がないと判断したときには(S28でNO)、CPU311はステップS29を実行せずに処理をステップS30に進める。
次にステップS26でNOと判断されたときの処理を説明する。通信接続状態の変更通知を受信していないと判断したときには(S26でNO)、CPU311は上述したステップS27〜S29の処理を実行せずにステップS30に処理を進める。
続いて、ステップS30の処理を説明する。CPU311はログインの成功通知を受信したかどうかを判断する(S30)。なお、このログインの成功通知は、ゲーム装置100のサーバ400へのログインの成功の通知であり、図14を用いて後述するサーバ側通信処理におけるステップS55において、サーバ400からゲーム装置100に対して送信される。そして、ログインの成功通知を受信したと判断したときには(S30でYES)、CPU311はログインの成功をユーザに報知するための処理を行う(S31)。例えば、CPU311はログインの成功を上側LCD22(図2を参照)又は下側LCD12(図2を参照)に表示する。この後、CPU311は処理をステップS32に進める。一方、ログインの成功通知を受信していないと判断したときには(S30でNO)、CPU311は上記ステップS31を実行することなく処理をステップS32に進める。
ステップS32においては、CPU311はフレンド情報変更通知を受信したかどうかを判断する(S32)。ここで、フレンド情報変更通知を受信したと判断したときには(S32でYES)、CPU311はフレンド情報変更通知に含められるフレンドID、フレンド情報等でフレンドリストテーブルD2を更新する(S33)。このフレンド情報変更通知は、図15におけるステップS61においてサーバ400から送信される。フレンド情報変更通知は、ゲーム装置100からユーザ情報の変更を受信したサーバ400が、ゲーム装置100のフレンドであるゲーム装置100に対して当該ユーザ情報(すなわちフレンド情報)の変更を通知するものである。なお、お気に入り情報D8についても、ステップS27で記載したような方法で適宜更新される。この後、CPU311は本サーバとの通信処理を終了させて図12のステップS6に処理を進める。一方、フレンド情報変更通知を受信していないと判断したときには(S32でNO)、CPU311は、上記ステップS33を実行せずに、本サーバとの通信処理を終了させて図12のステップS6に処理を進める。
以下、図14及び図15を用いて、サーバ400(図5のCPU406)が実行するサーバ側通信処理を説明する。図14及び図15は、サーバ側通信処理の一例を示すフローチャートである。サーバ側通信処理は、CPU406がRAM405に記憶されている通信プログラム(図略)を実行することで行われる。このサーバ側通信処理は、所定周期毎に繰り返し実行される。
まず、CPU406は、管理テーブルD10(図11を参照)に登録されているゲーム装置100(ユーザ登録されているゲーム装置100)から1台のゲーム装置100を選択する(S41)。なお、ゲーム装置100の選択は、装置IDを選択することで行われる。次に、CPU406は、選択したゲーム装置100に対応する電源オフ情報を受信したかどうか(選択した装置IDを含む電源オフ情報を受信したかどうか)を判断する(S42)。この電源オフ情報は、図12のステップS7において、ゲーム装置100から送信される情報であり、これに代えてオフラインに変更する旨の情報やこのゲーム装置100の装置IDであってもよい。ここで、選択したゲーム装置100に対応する電源オフ情報を受信していないと判断したときには(S42でNO)、CPU406は、選択したゲーム装置100からオンライン通知を受信したかどうか(選択した装置IDを含むオンライン通知を受信したかどうか)を判断する(S43)。なお、オンライン通知は、図13におけるステップS23において、ゲーム装置100から送信され、このゲーム装置100の装置IDを含む。
そして、選択したゲーム装置100からオンライン通知を受信したと判断したときには(S43でYES)、CPU406は選択したゲーム装置100の通信接続状態がオンラインであると判断する(S44)。そして、CPU406は、管理テーブルD10における選択した装置IDに対応するログイン判定用フラグがオンかどうかを判断する(S45)。なお、ログイン判定用フラグがオンであるときは、現在ログオフ中であり、ログイン判定用フラグがオフのときには、現在ログイン中である。ここで、ログイン判定用フラグがオンである(現在ログオフ中である)と判断したときには(S45でYES)、CPU406は、選択したゲーム装置100について所定のログイン条件を満たすかどうかを判断する(S46)。所定のログイン条件とは、例えば、選択したゲーム装置100のユーザが不正なユーザとして登録されていないこと等である。
そして、選択したゲーム装置100について所定のログイン条件を満たさないと判断したときに(S46でNO)、CPU406は、後述のステップS59に処理を進める。また、選択したゲーム装置100について所定のログイン条件を満たすと判断したときに(S46でYES)、CPU406は、管理テーブルD10における選択した装置IDに対応するログイン判定用フラグをオフにすることで、選択したゲーム装置100をログインさせる(S47)。この後、CPU406は、管理テーブルD10における選択した装置IDに対応する接続状態情報を、オンラインを示すように変更する(S48)。なお、本実施例ではログイン判定用フラグを用いたが、これを用いない態様でもよい。例えば、ログイン条件を満たしていると判断した場合に、管理テーブルの接続状態情報を更新してもよい。そして、CPU406は、選択したゲーム装置100に対してフレンドIDの送信要求を行い、この要求に応えたゲーム装置100からフレンドIDを受信する(S49)。なお、このフレンドIDは、図13におけるステップS24において、ゲーム装置100から送信されるものである。
そして、CPU406は、ステップS49において受信したフレンドIDが管理テーブルD10に登録されているフレンドIDと異なるかどうかを判断し(S50)、異なると判断したときには(S50でYES)、このフレンドIDで選択した装置IDに対応するフレンドIDを更新する(S51)。この後、CPU406は後述のステップS52を実行する。一方、受信したフレンドIDが管理テーブルD10に登録されているフレンドIDと同じであると判断したときには(S50でNO)、CPU406はステップS51を実行せずに後述のステップS52を実行する。
ステップS52において、CPU406は、選択した装置IDと、この装置ID(フレンドID)に対応するユーザ情報D1(フレンド名、フレンドコード、お気に入りアプリID,実行中アプリID、キャラクタ情報、メッセージ及び接続状態情報)をフレンド情報として含めたフレンドリスト更新用情報を生成する。この後、CPU406は、フレンドリスト更新用情報をゲーム装置100に送信する(S53)。また、CPU406は、選択したゲーム装置100のフレンドであるゲーム装置100に対して、フレンド通信接続状態の変更通知を送信する(S54)。このフレンド通信接続状態の変更通知は、選択したゲーム装置100の接続状態情報がオフラインからオンラインに変化したことを通知するためのものである。なお、このフレンド通知状態の変更通知は、図13におけるステップS26において、ゲーム装置100によって受信される。そして、CPU406は、ログインの成功通知を選択したゲーム装置100に対して送信する(S55)。この後、CPU406は、後述のステップS59を実行する。
次に、ログイン判定用フラグがオフであると判断したとき(S45でNO)の処理を説明する。このときには、CPU406は、選択したゲーム装置100に対してフレンドIDの送信要求を行い、この要求に応えたゲーム装置100からフレンドIDを受信する(S56)。なお、このフレンドIDは、図13におけるステップS24において、ゲーム装置100から送信されるものである。
そして、CPU406は、ステップS49において受信したフレンドIDが管理テーブルD10に登録されているフレンドIDと異なるかどうかを判断し(S57)、異なると判断したときには(S57でYES)、このフレンドIDで管理テーブルD10における選択した装置IDに対応するフレンドIDを更新する(S58)。この後、CPU406は後述のステップS59を実行する。一方、受信したフレンドIDが管理テーブルD10に登録されているフレンドIDと同じであると判断したときには(S57でNO)、CPU406はステップS58を実行せずに後述のステップS59を実行する。
次に、ステップS59の処理を説明する。CPU406は、選択したゲーム装置100からユーザ情報変更通知を受信したかどうかを判断する(S59)。なお、ユーザ情報変更通知は、ゲーム装置100に登録されているユーザ情報D1が変更されたときに、当該ゲーム装置100からサーバ400に送信される情報である。このユーザ情報変更通知は、図17を用いて後述するフレンド管理処理のステップS98においてゲーム装置100から送信される。ここで、選択したゲーム装置100からユーザ情報変更通知を受信していないと判断したときには(S59でNO)、CPU406は、後述のステップS62を実行する。一方、選択したゲーム装置100からユーザ情報変更通知を受信したと判断したときには(S59でYES)、CPU406は、受信したユーザ情報変更通知に基づいて、管理テーブルD10における選択した装置IDに対応するユーザ情報D1を更新する(S60)。そして、CPU406は、管理テーブルD10を参照して、ユーザ情報変更通知の送信元のゲーム装置100のフレンドIDを取得し、このフレンドIDのゲーム装置100に対して更新後のユーザ情報D1を含めたフレンド情報変更通知を送信する(S61)。なお、フレンド情報変更通知は、図13におけるステップS32においてゲーム装置100によって受信される。
そして、CPU311は、選択したゲーム装置100から情報送信要求を受信したかどうかを判断する(S62)。この情報送信要求は、ゲーム装置100が、フレンド情報を表示する際に、自機に記憶していないフレンド情報や、アプリケーション名D6、アイコン画像D7の送信をサーバ400に要求するための情報である。この情報送信要求は、図17を用いて後述するフレンド管理処理のステップS104において送信される。ここで、選択したゲーム装置100から情報送信要求を受信したと判断したときには(S62でYES)、CPU311は送信を要求されている情報をゲーム装置100に対して送信する(S63)。なお、サーバ400には、通信システム1で使用される全てのアプリIDに対応するアプリケーション名D6及びアイコン画像D7が記憶されている。この後、CPU311は後述のステップS64を実行する。一方、選択したゲーム装置100から情報送信要求を受信していないと判断したときには(S62でNO)、CPU311上記ステップS63を実行することなく後述のステップS64を実行する。
そして、CPU311は、ユーザ登録されている全てのゲーム装置100について(管理テーブルD10に登録されている全ての装置IDについて)、上記ステップS42の判断を行ったかどうかを判断する(S64)。そして、ユーザ登録されている全てのゲーム装置100について上記ステップS42の判断を行っていないと判断したときには(S64でNO)、CPU406は、ステップS41に処理を戻す。なお、ステップS41では、未だステップS42の判断が行われておらず、ユーザ登録されているゲーム装置100が新たに選択される。一方、ユーザ登録されている全てのゲーム装置100について上記ステップS42の判断を行っていると判断したときには(S64でYES)、CPU406は、ユーザ登録要求をゲーム装置100から受信したかどうかを判断する(S65)。なお、ユーザ登録要求は、管理テーブルD10に装置ID及びユーザ情報D1等の登録を要求する情報であり、図17を用いて後述するフレンド管理処理におけるステップS93においてゲーム装置100から送信される。
そして、ユーザ登録要求をゲーム装置100から受信したと判断したときには(S65でYES)、CPU406は、ユーザ登録要求の送信元のゲーム装置100をユーザ登録するためのユーザ登録処理を行う(S66)。ユーザ登録処理とは、ユーザ登録要求に含まれる、装置ID及びユーザ情報D1等を管理テーブルD10に登録する処理である。この後、CPU406は本サーバ側通信処理を終了させる。一方、ユーザ登録要求をゲーム装置100から受信していないと判断したときには(S65でNO)、CPU406は、上記ステップS66を実行することなく、本サーバ側通信処理を終了させる。
続いて、ステップS42でYES、及びステップS43でNOと判断されたときに処理を説明する。選択したゲーム装置100に対応する電源オフ情報を受信したと判断したとき(S42でYES)、または選択したゲーム装置100からオンライン通知を受信していないと判断したときには(S43でNO)、CPU406は選択したゲーム装置100をオフラインであると判断する(S67)。なお、本実施形態では、オンライン通知を受信していないと判断したときに、直にオフラインであると判断しているが、この構成に代えて、一定期間オンライン通知を受信していないと判断したときに、オフラインであると判断してもよい。また、オンライン通知を受信していないと判断したときに、サーバ400がオンライン通知の送信をゲーム装置100に対して要求し、この要求に応じたゲーム装置100からオンライン通知を受信がなかったときにのみ、オフラインであると判断してもよい。さらに、ゲーム装置100から自己をオフラインに変更する旨の情報を受信した場合に、オフラインであると判断してもよい。
そして、CPU406は、選択した装置IDに対応するログイン判定用フラグがオンかどうかを、管理テーブルD10を参照して判断する(S68)。そして、選択した装置IDに対応するログイン判定用フラグがオフである(現在ログイン中である)と判断したときには(S68でYES)、CPU406は管理テーブルD20における選択した装置IDに対応するログイン判定用フラグをオンに更新する(S69)。この後、CPU406は、管理テーブルD20における選択した装置IDに対応する接続状態情報を、オフラインを示すように更新する(S70)。そして、CPU311は、選択したゲーム装置100のフレンドであるゲーム装置100に対して、フレンド通信接続状態の変更通知を送信する(S71)。このフレンド通信接続状態の変更通知は、選択したゲーム装置100の接続状態情報がオンラインからオフラインに変化したことを通知するためのものである。なお、このフレンド通信接続状態の変更通知は、図13におけるステップS26において、ゲーム装置100によって受信される。この後、CPU406は上述のステップS59に処理を進める。一方、選択した装置IDに対応するログイン判定用フラグがオンであると判断したときには(S68でNO)、CPU406は上記ステップS69〜S71を実行することなく処理を上記ステップS64に進める。
次に、図16を用いて、ゲーム装置100(CPU311)が実行するメイン処理を説明する。なお、図16においては、「アプリケーション」を「アプリ」と記載する。このメイン処理は、ゲーム装置100の電源がオンされたときに実行開始される。また、メイン処理は、図12で示す通信処理とマルチタスクで実行される。図16は、メイン処理の一例を示すフローチャートである。
まず、CPU311は、第1メニュー画面を下側LCD12に表示するための処理を実行する。第1メニュー画面には、ゲーム装置100で実行可能なアプリケーションが表示される。この第1メニュー画面は、ゲーム装置100で実行するアプリケーションの選択をユーザにガイドするための画面である(S81)。
次に、CPU311は、フレンドリストアプリケーションP2の実行が選択されたか否かを判断する(S82)。フレンドリストアプリケーションP2の実行が選択されたと判断したときには(S82でYES)、CPU311はフレンド管理処理を実行する(S83)。フレンド管理処理についての詳細は図17を用いて後述する。この後、CPU311は、電源オフの指示がユーザから入力されたか否かを判断し(S84)、入力されたと判断したときには(S84でYES)、CPU311は、電源回路40に電源オフの処理の実行を指示した後、本メイン処理を終了させる。また、電源オフの指示がユーザから入力されたていないと判断したときには(S84でNO)、CPU311はステップS81に処理を戻す。
続いて、ステップS82でNOと判断されたときの処理を説明する。フレンドリストアプリケーションP2の実行が選択されていないと判断したときには(S82でNO)、CPU311は、ゲーム装置100で実行可能なアプリケーションのうち、フレンドアプリケーションP2とは別のアプリケーション(他のアプリケーションP3)が選択されたか否かを判断する(S85)。ここで、他のアプリケーションP3が選択されたと判断したときには(S85でYES)、CPU311は他のアプリケーションを実行する処理(他のアプリケーション実行処理)を行う(S86)。この他のアプリケーションの実行処理についての詳細は図24を用いて後述する。この後、CPU311は、ステップS84に処理を進める。また、他のアプリケーションP3が選択されていないと判断したときには(S85でNO)、CPU311はステップS86を実行することなく、ステップS84に処理を進める。
次に、図17、図18、図19〜図21を用いて、上記ステップS83におけるフレンド管理処理を説明する。図17及び図18は、フレンド管理処理の一例を示すフローチャートである。まず、CPU311は、今回のフレンドリストアプリケーションP1の起動が初回であるかを判断する(S91)。ここで、今回がフレンドリストアプリケーションP1を起動した初回であると判断したときには(S91でYES)、CPU311は初回起動設定処理を行う(S92)。なお、この初回起動設定処理では、ユーザからユーザ情報D1を作成するための情報の入力を受け付け、ユーザ情報D1が生成される。例えば、ユーザ名の入力を受け付けたり、ユーザの入力に基づいてキャラクタ情報の作成等が行われる。他にも、自己がオンラインかどうかを通知するか否かやプレイ中のタイトルをフレンドに通知するか否か等を設定できてもよい。
図19は、初回起動設定処理において表示される画面の一例を示す図である。この画面は、ユーザ情報D1の作成のための全ての情報がユーザから入力された後に上側LCD22に表示され、作成されたユーザ情報D1をユーザに示すために表示される。この画面には、キャラクタ画像G4(ユーザ情報D1に含まれるキャラクタ情報に基づいて生成された画像)、ユーザ名G5、お気に入りアプリケーション名G6、お気に入りアプリケーションのアイコンG7、メッセージG10及びフレンドコードG11が表示される。
図17に戻って、この後、CPU311は、ステップS92において生成したユーザ情報D1と自機の装置IDを含めたユーザ登録要求を生成して、サーバ400に対して送信する(S93)。なお、ゲーム装置100がオフラインであるときにはオンラインになったときにサーバ400に対してユーザ登録要求を送信すればよい。この後、CPU311は後述するステップS94を実行する。一方、今回がフレンドリストアプリケーションP1を起動した初回でないと判断したときには(S91でNO)、CPU311は上記ステップS92及びS93を実行せずに後述のステップS94を実行する。
ステップS94において、CPU311は、第2メニュー画面を表示するための処理を行う。図20は、第2メニュー画面の一例を示す図である。第2メニュー画面は、下側LCD12に表示され、ユーザ情報D1の変更の操作をユーザから受け付けるための操作子G21と、フレンドであるゲーム装置100のフレンド情報の表示の指示をユーザから受け付けるための操作子G22が表示される。
図17に戻って、CPU311はユーザ情報D1の変更の操作をユーザから受け付けたかどうかを判断する(S95)。ここで、ユーザ情報D1の変更の操作をユーザから受け付けたと判断したときには(S95でYES)、CPU311はユーザ情報D1の変更をガイドする画面を表示する(S96)。そして、CPU311は、ユーザ情報D1の変更の操作をユーザから受け付けてメインメモリ32に記憶するユーザ情報D1を更新し(S97)、更新後のユーザ情報D1を含めたユーザ情報変更通知を生成してサーバ400に対して送信する(S98)。この後、CPU311は処理を後述のステップS112に進める。
一方、ユーザ情報D1の変更の操作をユーザから受け付けていないと判断したときには(S95でNO)、CPU311は、フレンド情報の表示の指示をユーザから受け付けたかどうかを判断する(S99)。ここで、フレンド情報の表示の指示をユーザから受け付けていないと判断したときには(S99でNO)、CPU311は処理を後述のステップS112に進める。
一方、フレンド情報の表示の指示をユーザから受け付けたと判断したときには(S99でYES)、CPU311はフレンドリストテーブルD2から全てのフレンドIDに対応するフレンド情報と接続状態情報を取得する(S100)。そして、CPU311はサーバ400と通信可能であるかどうかを判断する(S101)。ここで、サーバ400と通信可能でないと判断したときには(S101でNO)、CPU311はオフライン用第3メニュー画面を表示する(S102)。このオフライン用第3メニュー画面には、ステップS100において取得したフレンド情報及び接続状態情報等が表示される。このオフライン用第3メニュー画面は、例えば図6を用いて上述したような下側LCD12に表示される画面であるが、全てのフレンドカードG1において、接続状態情報を表すテキストG6がオフラインと表示される。また、自機がオフラインであることを示すメッセージが上側LCD22又は下側LCD12に表示される。この後、CPU311は後述するステップS106に処理を進める。
また、サーバ400と通信可能であると判断したときには(S101でYES)、CPU311は、フレンドリストテーブルD2を参照して、登録されていないフレンド情報があるかどうかを判断するとともに、対応するアプリケーション名D6及びアイコン画像D7のない(メインメモリ32に記憶されていない)お気に入りアプリID、及び現在実行中アプリIDがあるかどうかを判断する(S103)。ステップS103でYESと判断したときには、CPU311はフレンドリストテーブルD2に登録されていないフレンド情報や、メインメモリ32に記憶されていないアプリケーション名D6及びアイコン画像D7をサーバ400から取得するための処理を行う(S104)。なお、フレンドリストテーブルD2に登録されていないフレンド情報とは、例えば、次のようなものである。フレンドであるユーザが、ユーザ情報D1を入力するときに、例えば、お気に入りアプリケーション名だけを入力しない等、一部の情報を入力せず、後になって追加して入力する可能性がある。この追加して入力された情報が、サーバ400の管理テーブルD10に記憶されており、かつゲーム装置100のフレンドリストテーブルD2に登録されていないときに、上記登録されていないフレンド情報となる。この処理において、ゲーム装置100はこれらの情報の送信要求(情報送信要求)をサーバ400に対して行う。この情報送信要求は、図15におけるステップS62において、サーバ400によって受信の有無が判断される。そして、図15のステップS63においてサーバ400から送信された情報を、CPU311は受信してメインメモリ32に記憶させたり(例えば、アプリケーション名D6やアイコン画像D7を記憶させたり)、受信した情報でフレンドリストテーブルD2を更新する。この後、CPU311は後述のステップS105を実行する。一方、ステップS103でNOと判断したときには、CPU311は上記ステップS104を実行することなく後述のステップS105を実行する。
ステップS105において、CPU311はオンライン用第3メニュー画面を表示する。オンライン用第3メニュー画面には、ステップS100において取得したフレンド情報及び接続状態情報が表示される。このオンライン用第3メニュー画面は、例えば図6を用いて上述したような下側LCD12に表示される画面である。なお、上記ステップS94において、サーバ400から受信した情報がある場合には、この受信した情報を用いて第3メニュー画面の表示が行われる。
そして、CPU311は、オンライン用第3メニュー画面又はオフライン用第3メニュー画面(例えば、図6の下側LCD12に表示される画面等)に表示される複数のフレンドカードG1の中から1つがユーザによって選択されたかどうかを判断する(S106)。このフレンドカードG1の選択は、例えば、画面中央にフレンドカードG1を表示した状態で、当該フレンドカードG1に対するタッチ操作をユーザからタッチパネル13で受け付ける等の方法で行われる。同図ではフレンド名が「さとう」のフレンドカードG1が選択されている。ここで、複数のフレンドカードG1の中から1つがユーザによって選択されていないと判断したときには(S106でNO)、CPU311は、後述のステップS110を実行する。一方、複数のフレンドカードG1の中から1つがユーザによって選択されたと判断したときには(S106でYES)、CPU311は選択されたフレンドカードG1を拡大して上側LCD22に表示するための処理を行う(S107)。例えば、図6における上側LCD22に表示されている画面が、このとき拡大されて表示されたフレンドカードG1を示している。なお、フレンドカードG1は拡大表示されるときには拡大前に表示されていなかった種類のフレンド情報(フレンドコードG11等)も表示する。
そして、CPU311は、選択されたフレンドカードG1の削除の指示をユーザから受け付けたかどうかを判断する(S108)。この削除の指示は、例えば操作子G2のタッチ操作等で行われる。ここで、選択されたフレンドカードG1の削除の指示をユーザから受け付けたと判断したときには(S108でYES)、CPU311は、選択されたフレンドカードG1を削除して表示する処理を行うとともに、当該フレンドカードG1に対応するフレンド登録(フレンドリストテーブルD2に登録されている情報)を削除する(S109)。そして、CPU311は後述のステップS110を実行する。一方、選択されたフレンドカードG1の削除の指示をユーザから受け付けていないと判断したときには(S108でNO)、CPU311は、上記ステップS109を実行することなく、後述のステップS110を実行する。なお、本フローチャートには表れていないが、フレンドカードG1の削除は何回でも行うことができる。また、フレンドカードG1の選択を変更することや、フレンドカードG1の選択を解除することもできる。
ステップS110において、CPU311は、フレンド登録指示をユーザから受け付けたかどうかを判断する。なお、フレンド登録指示は、例えば操作子G3のタッチ操作等である。ここで、フレンド登録指示をユーザから受け付けたと判断したときには(S110でYES)、CPU311は、新たに追加してフレンド登録を行うためのフレンド登録処理を実行する(S111)。フレンド登録処理についての詳細は、図21及び図22を用いて後述する。そして、CPU311は後述のステップS112を実行する。一方、フレンド登録指示をユーザから受け付けていないと判断したときには(S110でNO)、CPU311は、ステップS111を実行せずに後述のステップS112を実行する。
そして、CPU311は、フレンドリストアプリケーションP2の実行を終了させる指示をユーザから受け付けたかどうかを判断する。そして、フレンドリストアプリケーションP2の実行を終了させる指示をユーザから受け付けたと判断したときには(S112でYES)、CPU311はフレンド管理処理を終了させてメイン処理に処理を戻す。一方、フレンドリストアプリケーションP2の実行を終了させる指示をユーザから受け付けていないと判断したときには(S112でNO)、CPU311は処理をステップS91に戻す。
以下に、図7、図8、及び図21〜図23を用いて上記ステップS111におけるフレンド登録処理を説明する。図21及び図22は、フレンド登録処理の一例を示すフローチャートである。まず、CPU311は、第4メニュー画面を表示するための処理を行う(S121)。第4メニュー画面は、ネットワーク300を用いてゲーム装置100にフレンド登録を行わせる指示、近距離無線通信を用いてゲーム装置100にフレンド登録を行わせる指示、及びフレンド登録を行わない指示のうち何れかの指示の入力をユーザに対してガイドするための画面である。図23は、第4メニュー画面の一例を示す図である。第4メニュー画面には、操作子G31〜G33が表示されている。例えば、操作子G31のタッチ操作が、近距離無線通信を用いてゲーム装置100にフレンド登録を行わせる指示操作(以下、近距離フレンド登録指示操作)と記載する)である。また、例えば、操作子G32のタッチ操作が、ネットワーク300を用いてゲーム装置100にフレンド登録を行わせる指示操作(以下、「ネットワーク経由フレンド登録指示操作」と記載する)である。また、例えば、操作子G33のタッチ操作が、フレンド登録を行わない指示操作である。
図21に戻って、CPU311は、近距離フレンド登録指示操作をユーザから受け付けたかどうかを判断する(S122)。ここで、近距離フレンド登録指示操作をユーザから受け付けたと判断したときには(S122でYES)、CPU311は、フレンド登録の対象となる他のゲーム装置100においても近距離フレンド登録指示操作が要求されることを報知するためのメッセージを例えば上側LCD22に表示する(S123)。そして、CPU311は、自機の装置IDを含むビーコンをブロードキャストで送信する(S124)。なお、無線通信モジュール36がすれちがい通信又はサーバとの通信処理を実行しているときには、CPU311はこの通信の終了を待ってから無線通信モジュール36を使用してステップS124の処理を実行する。あるいは、CPU311はこれらの通信の終了を待たずにすれちがい通信又はサーバとの通信を直ちに中断してステップS124の処理を実行する。なお、ステップS124〜後述のステップS142の処理を実行している間は、CPU311は図12で示す通信処理を行わない。この後、CPU311は、他のゲーム装置100から閾値aを超えるビーコンを受信したかどうかを判断する(S125)。ここで、閾値aとは、処理に使用不可能な程に信号の強度が弱いビーコンを破棄するための値であり、無線通信モジュール36が、閾値aを超える信号強度のビーコンのみを取得し、CPU311に入力する。また、閾値aは、後述の通り、近距離無線通信を用いたアプリケーションを実行する時に必要な信号強度の閾値としても用いられる。
そして、他のゲーム装置100から閾値aを超えるビーコンを受信していないと判断したとき(S125でNO)、CPU311は後述のステップS133に処理を進める。一方、他のゲーム装置100から閾値aを超えるビーコンを受信したと判断したとき(S125でYES)、CPU311は受信したビーコンが自機の装置IDを含むかを判断する(S126)。なお、自機の装置IDを含むときには、受信したビーコンは、ステップS124において自機で送信したビーコンを受信した他のゲーム装置100が、この自機で送信したビーコンに応答して送信したビーコンである。従って、ステップS126において肯定と判断されたときには、他のゲーム装置100が自機と双方向で近距離無線通信可能な状態にある可能性が高い。
そして、受信したビーコンが自機の装置IDを含まないと判断したときには(S126でNO)、CPU311は、受信したビーコンを破棄するとともに、ビーコンの送信元のゲーム装置100の装置ID、自機の装置ID及びユーザ情報D1の一部(例えば、ユーザ名及びキャラクタ情報)を含めたビーコンをブロードキャストで送信する(S127)。なお、受信したビーコンを破棄した理由は、当該ビーコンは、ステップS124において自機で送信したビーコンに応答して他のゲーム装置100から送信されたものではないからである。この後、CPU311は、後述のステップS133に処理を進める。
一方、受信したビーコンが自機の装置IDを含むと判断したときには(S126でYES)、当該ビーコンはステップS124において自機で送信したビーコンに応答して他のゲーム装置100から送信されたものである。このときには、CPU311は、受信したビーコンの信号強度(dBm)で通信レベルテーブルD4(図10Cを参照)を参照して、受信したビーコンの信号強度(dBm)に対応する通信レベルを決定する(S129)。
そして、CPU311は、ステップS129において決定した通信レベルが一定レベル以上であるか(例えば、通信レベルL2以上であるか)を判断する(S130)。なお、この一定レベルをユーザがマニュアルで設定変更できる構成であってもよい。また、本実施形態では、信号強度に基づいて通信レベルを決定し、この通信レベルを用いて信号強度が通信状態条件を満たすかを判断しているが、この構成に代えて通信レベルを用いずに信号強度(dBm)を直接用いて信号強度が通信状態条件を満たすか(例えば、信号強度が閾値b(閾値b>閾値a)を超えるか等の条件)を判断してもよい。そして、通信レベルが一定レベル以上でないと判断したときには(S130でNO)、CPU311は後述のステップS133に処理を進める。また、通信レベルが一定レベル以上であると判断したときには(S130でYES)、CPU311は受信したビーコンに含まれる他のゲーム装置の装置ID及びユーザ情報D1(ユーザ名及びキャラクタ情報)をフレンドID及びフレンド情報(ユーザ名はフレンド名として登録される)としてフレンド候補リストテーブルD3(図10Bを参照)に登録する(S131)。そして、CPU311は、登録したフレンド情報を表示するための処理を行う(S132)。このステップS132で表示される画面は、例えば図7で示すようなものである。図7の画面は、上述したように下側LCD12に表示される。この画面において、フレンドカードG1が表示され、フレンドカードG1内には、他のユーザのフレンド情報(キャラクタ情報に基づくキャラクタG4及びユーザ名G5)が表示される。
そして、CPU311は、フレンド候補リストテーブルD3に登録されている装置IDの数が一定数(例えば3台)に達するという条件、及びステップ122でYESと判断してから一定時間が経過したという条件のうち何れか一つでも成立したかどうかを判断する(S133)。なお、ステップS122でYESと判断されたときに、CPU311は、タイマを作動させており、これによって一定時間の経過を判断する。ステップS133でNOと判断したときには、CPU311は、ステップS124に処理を戻し、ステップS133YESと判断するまで、上記ステップS124〜S132の処理を繰り返し実行する。なお、ステップS132において表示される画面には、フレンド候補リストテーブルD3に装置IDが登録される都度、登録された装置IDのフレンド情報を表示するフレンドカードG1が追加的に表示される。
一方、ステップS133でYESと判断したときには、CPU311は、フレンド候補リストテーブルD3へのフレンドIDの登録数が1以上であるかを判断する(S134)。そして、フレンド候補リストテーブルD3へのフレンドIDの登録数が1以上でないと判断したときには(S134でNO)、フレンド候補となる他のゲーム装置を検索できなかったことになるので、CPU311は、フレンド候補となる(フレンド候補リストテーブルD3にフレンドIDを登録するための)他のゲーム装置100の検索の再実行の指示(再検索指示)をユーザに促すための画面を表示する処理を実行し、この後、再検索指示を受け付けたかどうかを判断する(S135)。そして、再検索指示を受け付けていないと判断したときには(S135でNO)、CPU311はフレンド登録処理を終了させて処理をフレンド管理処理に戻し、再検索指示を受け付けたと判断したときには(S135でYES)、CPU311は、処理をステップS123に戻して、再度フレンド候補となる他のゲーム装置100を検索する(S123〜S134の処理を実行する)。
次に、ステップS134でYESと判断されたときの処理を説明する。フレンド候補リストテーブルD3への装置IDの登録数が1以上であると判断したときには(S134でYES)、CPU311は、通信レベル順にフレンド情報(フレンドカードG1)を並び替えて表示する(S136)。なお、ステップS136を実行することなく、ビーコンを受信した順番でフレンドカードG1を表示してもよい。そして、CPU311は、フレンド候補リストテーブルD3に登録されているフレンドIDから1つのフレンドIDを選択する操作(表示されているフレンドカードG1から何れかを選択する操作)をユーザから受け付けたかどうかを判断する(S137)。なお、例えば、図7の画面に表示されているフレンドカードG1のタップ操作が、フレンドIDを選択する操作である。
ここで、1つのフレンドIDを選択する操作をユーザから受け付けていないと判断したときに(S137でNO)、CPU311はフレンド登録処理を終了させてフレンド管理処理に処理を戻す。一方、1つのフレンドIDを選択する操作をユーザから受け付けたと判断したときには(S137でYES)、CPU311は、選択したフレンドIDのゲーム装置100に対して当該ゲーム装置100を選択したことを通知(選択通知)する(S138)。なお、この選択通知は、他のゲーム装置100においては、自機のフレンドIDが選択されたことの通知である。そして、選択したフレンドIDのゲーム装置100から選択通知を受信したかどうかを判断する(S139)。ここで、選択したフレンドIDのゲーム装置100から選択通知を受信していないと判断したときには(S139でNO)、フレンドリストテーブルD2への登録を行わずに、CPU311は、処理をステップS123に戻して、再度フレンド候補となる他のゲーム装置100を検索する(S123〜S138の処理を実行する)。
一方、選択したフレンドIDのゲーム装置100から選択通知を受信したと判断したときには(S139でYES)、CPU311は、選択したフレンドIDのゲーム装置100との間で、ステップS131において取得することができたフレンド情報の他のフレンド情報(ユーザ情報D1に含まれるフレンドコード、お気に入りアプリID、実行中アプリID及びメッセージ等)を送受信し合う(S140)。そして、CPU311は、ステップS140において受信したフレンド情報と、フレンド候補リストテーブルD3に登録されているフレンドID及びフレンド情報(ユーザ名及びキャラクタ情報等)とを対応付けてフレンドリストテーブルD2に登録する(S141)。そして、CPU311はフレンド候補リストテーブルD3に登録されている事項を削除する。この後、CPU311はフレンド登録を完了したことを示す画面を表示する(S142)。なお、ステップS142においては、例えば図8で示すような画面が表示される。この後、CPU311はフレンド登録処理を終了させてフレンド管理処理に処理を戻す。なお、ステップS142の実行後に、ステップS137に戻って、残りのフレンド候補からさらに登録するフレンド候補を続けてユーザに選択させてもよい。
以下に、ステップS122でNOと判断されたときの処理を説明する。CPU311は、ネットワーク経由フレンド登録指示操作を受け付けたかどうかを判断する(S143)。そして、ネットワーク経由フレンド登録指示操作を受け付けたと判断したときには(S143でYES)、CPU311は自機がオンラインであるかどうかを判断する(S144)。自機がオンラインであると判断したときには(S144でYES)、フレンドコードをユーザが入力することによってフレンド登録(フレンドリストテーブルD2への登録)を行う。ここで、自機がオンラインでないと判断したときには(S144でNO)、CPU311は、オフライン状態のためネットワーク経由フレンド登録できないことを表示して(S145)、処理をステップS121に戻す。また、自機がオンラインであると判断したときには(S144でYES)、CPU311は、フレンドコードの入力のための画面を表示して、他のゲーム装置100のフレンドコードの入力を受け付ける。入力されたフレンドコードは、サーバ400に対して送信され、ゲーム装置100はサーバ400からフレンドコードに対応するフレンドID及びフレンド情報を取得したとき、フレンドリストテーブルD2に登録する(S146)。この後、CPU311はフレンド登録処理を終了させてフレンド管理処理に処理を戻す。また、ネットワーク経由フレンド登録指示操作を受け付けていないと判断したときとは(S143でNO)、CPU311がフレンド登録を行わない指示操作を受け付けたときである。このときには、CPU311はフレンド登録処理を終了させてフレンド管理処理に処理を戻す。
以下、図24を用いて、上記ステップS86におけるその他のアプリケーション実行処理を説明する。図24は、その他のアプリケーション実行処理の一例を示すフローチャートである。まず、CPU311は、オンラインゲーム(ネットワーク300を介したオンラインゲーム)又は近距離無線通信を用いたゲームが選択されているかどうかを判断する(S151)。そして、オンラインゲーム又は近距離無線通信を用いたゲームが選択されていないと判断したときには(S151でNO)、CPU311は所定のゲーム処理(例えば、仮想三次元空間において、ユーザの操作に基づいてプレイヤキャラクタの位置を変更したり、仮想三次元空間を描画するための処理等)を実行する(S152)。なお、ステップS152においては、オフラインでゲームがユーザに実行される場合であるため、ゲーム装置100は自機で記憶するゲーム情報(ゲーム処理の実行に必要な情報)のみに基づいて所定のゲーム処理を実行する。この後、CPU311は後述のステップS157を実行する。
一方、オンラインゲーム又は近距離無線通信を用いたゲームが選択されていると判断したときには(S151でYES)、CPU311はゲームの相手方のゲーム装置100からゲーム情報を受信したかどうかを判断する(S153)。そして、ゲームの相手方のゲーム装置100からゲーム情報を受信していないと判断したときには(S153でNO)、CPU311は、上記ステップS152の処理を実行する(自機で記憶するゲーム情報のみに基づいて所定のゲーム処理を実行する)。この後、CPU311は後述のステップS157を実行する。一方、ゲームの相手方のゲーム装置100からゲーム情報を受信したと判断したときには(S153でYES)、CPU311は、近距離無線通信を用いたゲームが選択されているかを判断する(S154)。ここで、近距離無線通信を用いたゲームが選択されていないとき、すなわちオンラインゲームが選択されているときには(S154でNO)、CPU311は受信したゲーム情報を用いて所定のゲーム処理を実行する。一方、近距離無線通信を用いたゲームが選択されていると判断したときには(S154でYES)、CPU311はゲーム情報の信号強度(dBm)を測定し、この測定した信号強度(dBm)が閾値a以下かどうかを判断する(S155)。なお、本実施例ではゲーム情報の信号強度(dBm)を測定したが、他の情報処理装置との通信の強度を表すものであれば、他のものを用いてもよい(例えば、ビーコンの信号強度など)。
信号強度(dBm)が閾値a以下であると判断したときには(S155でYES)、CPU311はこのゲーム情報を破棄して、上記ステップS152の処理を実行する(自機で記憶するゲーム情報のみに基づいて所定のゲーム処理を実行する)。この後、CPU311は後述のステップS157を実行する。一方、信号強度(dBm)が閾値aを超えていると判断したときには(S155でNO)、CPU311は受信したゲーム情報を用いて所定のゲーム処理を実行する(S156)。
そして、CPU311はフレンドリストアプリケーションP1の実行指示を受け付けたかを判断する(S157)。なお、本実施形態では、その他のアプリケーション実行処理中においても、フレンドアプリケーションP1を起動させることができる。ここで、フレンドリストアプリケーションP1の実行指示を受け付けたと判断したときには(S157でYES)、CPU311は図17〜図23を用いて説明した上記フレンド管理処理を実行する(S158)。そして、CPU311は、フレンド管理処理において複数のフレンドカードG1の中から1つがユーザによって選択されたかどうかを判断する(S159)。
そして、複数のフレンドカードG1の中から1つがユーザによって選択されたと判断したときには(S159でYES)、CPU311は、フレンドカードG1に対応するゲーム装置100をオンラインゲームの相手としてメインメモリ32に登録し、かつオンラインゲーム又は近距離無線通信を用いたゲームを選択的に設定する(S160)。オンラインゲームと近距離無線通信を用いたゲームから何れを設定するかは、ユーザの選択操作に基づいて決定される。なお、ネットワーク300やサーバ400を介してゲーム装置100同士が通信を行うときには、IPアドレス等の識別情報が必要になる場合がある。この場合には、ステップS160において、ゲーム装置100と他のゲーム装置100が互いにIPアドレス等を通知する。そして、CPU311は、その他のアプリケーション実行処理の終了の指示をユーザから受け付けたかどうかを判断する(S161)。ここで、その他のアプリケーション実行処理の終了の指示をユーザから受け付けたと判断したときには(S161でYES)、CPU311はその他のアプリケーション実行処理を終了させる。一方、その他のアプリケーション実行処理の終了の指示をユーザから受け付けていない判断したときには(S161でNO)、CPU311は、処理をステップS151に戻す。
次に、フレンドリストアプリケーションP1の実行指示を受け付けていないと判断したときには(S157でNO)、または複数のフレンドカードG1の中から1つがユーザによって選択されていないと判断したときには(S159でNO)の処理について説明する。このときには、CPU311は、上記ステップS158〜S160の処理を実行することなく、上記ステップS161の処理を実行する。そして、ステップS161において、その他のアプリケーション実行処理の終了の指示をユーザから受け付けていない判断したときには(S161でNO)、CPU311は、処理をステップS151に戻す。また、その他のアプリケーション実行処理の終了の指示をユーザから受け付けたと判断したときには(S161でYES)、CPU311はその他のアプリケーション実行処理を終了させる。
上述したように、本実施形態にかかる通信システム1は、他のゲーム装置100との間の近距離無線通信が通信状態に関する通信状態条件(例えば、受信したビーコンの信号強度に基づいて決定した、通信レベルが所定レベルよりも大きいこと等の条件)を満たすときにのみ、受信した装置IDをフレンド登録するという特徴(第1の特徴)を備える。これによって、通信状態条件を他の情報処理装置がある程度自機の近くに居ることを表す条件等に設定することで、自機のある程度近くに居る他の情報処理装置のみをフレンド登録の対象とすることができる。これによって、ユーザがフレンド登録を希望しない他のゲーム装置100を誤ってゲーム装置100でフレンド登録してしまうことを効果的に防止し、より正確にユーザ所望の他のゲーム装置100を自己のゲーム装置100にフレンド登録させることができる。
また、本実施形態にかかる通信システム1は、自動的に通信可能なアクセスポイント200を検索して接続し、当該アクセスポイント200を介して、自機のフレンドである他のゲーム装置100の通信状態情報(例えば、オンラインか、オフラインかを示す情報)をサーバ400から受信するという特徴(第2の特徴)を備える。なお、ゲーム装置100は、携帯型の装置であり、かつ無線通信によってアクセスポイント200に接続されるため、オフラインであるかオンラインであるかの通信接続状態が変化し易い。本実施形態では、第2の特徴によって、ゲーム装置100は、アクセスポイント200に接続する度にサーバ400から自機のフレンドであるゲーム装置100の通信接続状態を取得するため、当該通信接続状態の変化を迅速に取得することができる。
なお、本実施形態の変形例を以下に記載する。
(1)本実施形態では、その他のアプリケーションP3は、ゲーム処理を実行するためのゲームアプリケーションであるが、これに限定されず他の種類のアプリケーションであってもよい。例えば、ゲーム装置100のユーザと他のゲーム装置100のユーザ間で通話やチャットを行わせるためのアプリケーション等であってもよい。この場合には、フレンド登録したゲーム装置100同士に限って通話やチャットのための通信を行う。
(2)本実施形態では、フレンド登録処理において、ユーザからフレンド候補の選択が行われたときに限って、フレンド登録を行っているが(ステップS137〜S141)、この構成に限定されない。例えば、ステップS130において通信レベルが一定レベル以上であると判断されたゲーム装置100を全て自動的にフレンド登録してもよい。
(3)本実施例は、本発明をゲーム装置100に適用したものであるが、本発明はゲーム装置に限定されない。例えば、携帯電話機、簡易型携帯電話機(PHS)、PDA等の携帯情報端末にも本発明の適用は可能である。
(4)なお、本実施形態では、1つのサーバ300で上述したサーバ側通信処理を実行しているが、複数のサーバで上記サーバ側通信処理を分担してもよい。