トップ :: A 生活必需品 :: A63 スポ−ツ;ゲ−ム;娯楽




【発明の名称】 無線通信ゲームシステム
【発明者】 【氏名】田中 聖也
【住所又は居所】京都府京都市南区上鳥羽鉾立町11番地1 任天堂株式会社内

【氏名】桑原 雅人
【住所又は居所】京都府京都市南区上鳥羽鉾立町11番地1 任天堂株式会社内

【氏名】大江 徹
【住所又は居所】京都府京都市南区上鳥羽鉾立町11番地1 任天堂株式会社内

【氏名】吉岡 照幸
【住所又は居所】京都府京都市南区上鳥羽鉾立町11番地1 任天堂株式会社内

【要約】 【課題】

【解決手段】
【特許請求の範囲】
【請求項1】
第1タイムスロットと複数のサブタイムスロットを含む第2タイムスロットとによって構成される通信周期で互いに無線通信可能であり、親機または子機となる複数の携帯ゲーム装置を用いる、無線通信ゲームシステムであって、
前記親機は、前記第1タイムスロットで親機パケットをブロードキャストしかつ前記第2タイムスロットで子機パケットを受信するものであり、さらに (a) 前記複数のサブタイムスロットのうち新たな子機が使用すべき第1サブタイムスロットを決定する第1サブタイムスロット決定手段、(b) 新たな子機が前記第1サブタイムスロットに送信したエントリ要求を検出するエントリ要求検出手段、および (c) 前記第1サブタイムスロットを指定する指定データおよび前記エントリ要求に応答して設定される使用許可データを含む親機パケットを設定する親機パケット設定手段を備え、
前記子機は、前記複数のサブタイムスロットのうち少なくとも1つのサブタイムスロットで子機パケットを送信し、前記第1タイムスロットで前記親機パケットを受信するものであり、(d) 前記親機パケットに含まれる前記指定データが示す前記第1サブタイムスロットに前記エントリ要求を送信するエントリ要求送信手段、および (e) 前記親機パケットの前記使用許可データに基づいてエントリの成否を判断する成否判断手段を備える、無線通信ゲームシステム。
【請求項2】
前記使用許可データは前記各サブタイムスロット毎の使用許可データを含み、前記親機パケット設定手段は前記第1サブタイムスロットについての使用許可データを使用許可に設定し、
前記成否判断手段は前記第1サブタイムスロットについての使用許可データに基づいてエントリの成否を判断する、請求項1記載の無線通信ゲームシステム。
【請求項3】
前記第1タイムスロットは、ゲームデータを送信するためのペイロードフィールドに加えて、前記指定データおよび前記使用許可データを送信するためのそれぞれ専用の第1フィールドおよび第2フィールドを含み、
前記親機パケット設定手段は、前記指定データおよび前記使用許可データをそれぞれ前記第1フィールドおよび前記第2フィールドに設定する、請求項1または2記載の無線通信ゲームシステム。
【請求項4】
前記親機パケット設定手段は、ゲーム実行中において前記第1フィールドに前記指定データを設定する、請求項3記載の無線通信ゲームシステム。
【請求項5】
前記親機は、前記第1フィールドに所定データを設定することによって新たな子機のエントリを禁止する禁止手段をさらに備える、請求項3または4記載の無線通信ゲームシステム。
【請求項6】
前記子機は自機の識別データを記憶する識別データ記憶手段をさらに備え、
前記エントリ要求送信手段は前記第1サブタイムスロットに前記識別データを送信する識別データ送信手段を含み、
前記エントリ要求検出手段は前記第1サブタイムスロットで送信された前記識別データを検出する検出手段を含む、請求項1ないし5のいずれかに記載の無線通信ゲームシステム。
【請求項7】
前記親機パケット設定手段は前記第2フィールドに前記識別データ設定する手段を含み、
前記成否判断手段は前記第2フィールドに前記識別データが存在するかどうか判断する判断手段を含む、請求項6記載の無線通信ゲームシステム。
【請求項8】
前記第2フィールドは、各サブタイムスロット毎のサブフィールドを含み、
前記親機パケット設定手段は前記第2フィールドのうち前記第1サブタイムスロットについてのサブフィールドに前記識別データを設定する手段を含み、
前記成否判断手段は前記第2フィールドのうち前記第1サブタイムスロットについてのサブフィールドに前記識別データが存在するかどうか判断する手段を含む、請求項7記載の無線通信ゲームシステム。
【請求項9】
前記子機は、新たに親機にエントリするときに、前記親機パケットの前記第2フィールドを参照して、前記第2フィールドに設定されている識別データとは異なる識別データを設定する識別データ設定手段を含む、請求項8記載の無線通信ゲームシステム。
【請求項10】
前記子機は、前記第2フィールドに前記自機の識別データが存在しなくなったことによって前記親機による接続切断を検出する接続切断検出手段をさらに備える、請求項7記載の無線通信ゲームシステム。
【請求項11】
前記親機は、1つの子機に対して割り当てるサブタイムスロットの最大数を、実行するゲームに応じて決定する個数決定手段をさらに備える、請求項1ないし10のいずれかに記載の無線通信ゲームシステム。
【請求項12】
前記親機は、エントリを許可する子機の最大数を、実行するゲームに応じて決定するエントリ数決定手段をさらに備える、請求項1ないし11のいずれかに記載の無線通信ゲームシステム。
【請求項13】
前記使用許可データは、各サブタイムスロット毎の使用許可データを含み、かつ、各使用許可データは子機の識別データであり、
前記親機は、前記使用許可データの子機の識別データに基づいて、接続中の子機のリストを表示する子機リスト表示手段をさらに備える、請求項1記載の無線通信ゲームシステム。
【請求項14】
前記親機は、接続中の子機のうち接続の切断をユーザが希望する子機を前記子機リストから選択するための操作手段、前記操作手段によって選択された子機との接続を切断する切断手段、および前記切断手段が接続を切断した子機のデータを前記使用許可データから削除する削除手段を備える、請求項13記載の無線通信ゲームシステム。
【請求項15】
第1タイムスロットと複数のサブタイムスロットを含む第2タイムスロットとによって構成される通信周期で互いに無線通信可能であり、親機または子機となる複数の携帯ゲーム装置を用いる無線通信ゲームシステムにおけるエントリ処理方法であって、
(a) 親機は子機に使用させるべき第1サブタイムスロットを指定する指定データを含む親機パケットをブロードキャストし、
(b) 子機は前記指定データで指定された前記第1サブタイムスロットでエントリ要求を送信し、
(c) 親機は前記第1サブタイムスロットで子機から送信されたエントリ要求を検出し、
(d) 親機は前記エントリ要求を許可する使用許可データを親機パケットに設定し、そして
(e) 子機は親機パケットの前記使用許可データに基づいてエントリ要求の成否を判断する。
【請求項16】
第1タイムスロットと複数のサブタイムスロットを含む第2タイムスロットとによって構成される通信周期で互いに無線通信可能であり、親機または子機となる複数の携帯ゲーム装置を用いる無線通信ゲームシステムにおいて、前記携帯ゲーム装置のプロセサに次のステップを実行させるプログラム:
(a) 親機のプロセサによって、子機に使用させるべき第1サブタイムスロットを指定する指定データを含む親機パケットをブロードキャストさせるブロードキャストステップ、
(b) 子機のプロセサによって、前記指定データで指定された前記第1サブタイムスロットでエントリ要求を送信させる送信ステップ、
(c) 親機のプロセサによって、前記第1サブタイムスロットで子機から送信されたエントリ要求を検出させる検出ステップ、
(d) 親機のプロセサによって、前記エントリ要求を許可する使用許可データを親機パケットに設定させる設定ステップ、および
(e) 子機のプロセサによって、親機パケットの前記使用許可データに基づいてエントリ要求の成否を判断させる成否判断ステップ。
【請求項17】
自機が親機になるか子機になるかを決定する親子決定ステップをさらに備え、前記親子決定ステップによって親機になることが決定された場合は、前記ステップ(a),(c) および (d )を携帯ゲーム装置のプロセサに実行させ、
前記親子決定ステップによって子機になることが決定された場合は、前記ステップ(b) および (e) を携帯ゲーム装置のプロセサに実行させる、請求項16記載のプログラム。
【請求項18】
第1タイムスロットで親機から親機パケットをブロードキャストし、第2タイムスロットで子機から前記親機へ子機パケットを送信する、無線通信ゲームシステムにおいて、
前記親機は接続中の子機の識別データを前記親機パケットに設定し、
前記子機は、新たに親機にエントリするとき、前記親機パケットに既に設定されている識別データとは異なる識別データを自機の識別データとして決定し、該識別データを前記子機パケットで送信することを特徴とする、無線通信ゲームシステム。
【請求項19】
複数の携帯ゲーム装置を用い、一方が親機となり他方が子機となり、親機は第1タイムスロットで親機パケットをブロードキャストしかつ第2タイムスロットで子機パケットを受信し、子機は前記第2タイムスロットに含まれる少なくとも1つのサブタイムスロットで子機パケットを送信しかつ前記第1タイムスロットで前記親機パケットを受信することによって無線通信ゲームをプレイする、携帯ゲーム装置であって、
前記親機のために、前記第1タイムスロットで親機パケットをブロードキャストしかつ前記第2タイムスロットで子機パケットを受信するものであり、さらに(a) 前記サブタイムスロットのうち新たな子機が使用すべき第1サブタイムスロットを決定する第1サブタイムスロット決定手段、(b) 新たな子機が前記第1サブタイムスロットに送信したエントリ要求を検出するエントリ要求検出手段、および (c) 前記第1サブタイムスロットを指定する指定データおよび前記エントリ要求に応答して設定される使用許可データを含む親機パケットを設定する親機パケット設定手段を備え、
前記子機のために、前記サブタイムスロットのうち少なくとも1つのサブタイムスロットで子機パケットを送信し、前記第1タイムスロットで前記親機パケットを受信するものであり、(d) 前記親機パケットに含まれる前記指定データが示す前記第1サブタイムスロットに前記エントリ要求を送信するエントリ要求送信手段、および (e) 前記親機パケットの前記使用許可データに基づいてエントリの成否を判断する成否判断手段を備える、携帯ゲーム装置。
【発明の詳細な説明】【0001】
【産業上の利用分野】
この発明は、無線通信を利用するゲームシステムに関し、特にたとえば、新たにエントリする携帯ゲーム装置のエントリ処理に特徴のある無線通信ゲームシステム、およびエントリ処理方法、それに用いる携帯ゲーム装置ならびにゲームプログラムに関する。
【0002】
【従来の技術】
従来の無線通信ゲームシステムの一例が、たとえば、平成12年(2000)5月16日付で出願公開された特許文献1(国際分類:A63F13/00、H04L12/28)に開示されている。この先行技術では、新たなゲーム装置が通信ゲームにエントリ(参加)する場合に、他のゲーム装置からの通信データを受信して空きタイムスロットを確認し、空きタイムスロットにエントリ要求を送信する(第35段落参照)。
【0003】
【特許文献1】
特開2000−135380号公報
【0004】
【発明が解決しようとする課題】
上述の先行技術では、各ゲーム装置がそれぞれ独自に空きタイムスロットを検出するので、処理の無駄が大きく、また、通信状態が悪い場合には、空きタイムスロットの検出が正確にできない場合がある。また、特定のゲーム装置がエントリ処理に関して主導的な処理をするものではないので、エントリ処理に確実性がない。
【0005】
それゆえに、この発明の主たる目的は、新規な、無線通信ゲームシステム、エントリ処理方法、携帯ゲーム装置およびゲームプログラムを提供することである。
【0006】
この発明の他の目的は、迅速かつ確実にエントリ処理を行える、無線通信ゲームシステム、エントリ処理方法、携帯ゲーム装置およびゲームプログラムを提供することである。
【0007】
【課題を解決するための手段】
この発明は、複数の携帯ゲーム装置を用いる無線通信ゲームシステムである。携帯ゲーム装置は親機または子機となる(あるゲーム装置が予め固定的に親機または子機となるものでもよいし、親機と子機の両方になることができて選択的にいずれか一方になるものでもよい)。また、携帯ゲーム装置は、所定の通信周期で互いに無線通信可能である。この通信周期は第1タイムスロットと複数のサブタイムスロットを含む第2タイムスロットとによって構成される。親機は、第1タイムスロットで親機パケットをブロードキャストしかつ第2タイムスロットで子機パケットを受信する。親機は、さらに第1サブタイムスロット決定手段と、エントリ要求検出手段と、親機パケット設定手段とを備える。第1サブタイムスロット決定手段は、 複数のサブタイムスロットのうち新たな子機が使用すべき第1サブタイムスロットを決定する。エントリ要求検出手段は、 新たな子機が第1サブタイムスロットに送信したエントリ要求を検出する。親機パケット設定手段は、第1サブタイムスロットを指定する指定データを親機パケットに設定し、かつ、エントリ要求に応答して使用許可データを親機パケットに設定する。子機は、複数のサブタイムスロットのうち少なくとも1つのサブタイムスロットで子機パケットを送信し、第1タイムスロットで親機パケットを受信するものである。子機は、さらに、エントリ要求送信手段と成否判断手段を備える。エントリ要求送信手段は、 親機パケットに含まれる指定データが示す第1サブタイムスロットにエントリ要求を送信する。成否判断手段は、親機パケットの第1サブタイムスロットで使用許可データがブロードキャストされたかどうかに基づいてエントリの成否を判断する。
【0008】
請求項2の発明は、請求項1に従属するもので、使用許可データは各サブタイムスロット毎の使用許可データを含み、親機パケット設定手段は第1サブタイムスロットについての使用許可データを使用許可に設定し、成否判断手段はその第1サブタイムスロットについての使用許可データに基づいてエントリの成否を判断する。
【0009】
請求項3の発明は、請求項1または2に従属し、第1タイムスロットは、ゲームデータを送信するためのペイロードフィールドに加えて、指定データおよび使用許可データを送信するためのそれぞれ専用の第1フィールドおよび第2フィールドを含む。親機パケット設定手段は、指定データを第1フィールドに設定し、使用許可データを第2フィールドに設定する。
【0010】
請求項4の発明は、請求項3に従属し、親機パケット設定手段は、ゲーム実行中において第1フィールドに指定データを設定する。
【0011】
請求項5の発明は、請求項3または4に従属し、親機は、第1フィールドに所定データ(エントリを禁止することを意味するデータ)を設定することによって新たな子機のエントリを禁止する禁止手段をさらに備える。
【0012】
請求項6の発明は請求項1ないし5のいずれかに従属し、子機は自機の識別データを記憶する識別データ記憶手段をさらに備える。識別データは予め固定的に決定されていてもよいし、プログラム処理によって生成されてもよい。エントリ要求送信手段は第1サブタイムスロットに識別データを送信する識別データ送信手段を含み、エントリ要求検出手段は第1サブタイムスロットで送信された識別データを検出する検出手段を含む。
【0013】
請求項7の発明は、請求項6に従属し、親機パケット設定手段は第2フィールドに識別データ設定する手段を含み、成否判断手段は第2フィールドに識別データが存在するかどうか判断する判断手段を含む、無線通信ゲームシステムである。
【0014】
請求項8の発明は、請求項7に従属し、第2フィールドは、各サブタイムスロット毎のサブフィールドを含み、記親機パケット設定手段は第2フィールドのうち第1サブタイムスロットについてのサブフィールドに識別データを設定する手段を含み、成否判断手段は第2フィールドのうち第1サブタイムスロットについてのサブフィールドに識別データが存在するかどうか判断する手段を含む。
【0015】
請求項9の発明は、請求項8に従属し、子機は、新たに親機にエントリするときに、親機パケットの第2フィールドを参照して、第2フィールドに設定されている識別データとは異なる識別データを設定する識別データ設定手段を含む、無線通信ゲームシステムである。
【0016】
請求項10の発明は、請求項7に従属し、子機は、第2フィールドに自記の識別データが存在しなくなったことによって親機による接続切断を検出する接続切断検出手段をさらに備える。
【0017】
請求項11の発明は、請求項1ないし10のいずれかに従属し、親機は、1つの子機に対して割り当てるサブタイムスロットの最大数を、実行するゲームに応じて決定する個数決定手段をさらに備える。
【0018】
請求項12の発明は、請求項1ないし11のいずれかに従属し、親機は、エントリを許可する子機の最大数を、実行するゲームに応じて決定するエントリ数決定手段をさらに備える。
【0019】
請求項13の発明は、請求項1に従属し、使用許可データは、各サブタイムスロット毎の使用許可データを含む。また、各使用許可データは子機の識別データである。親機は、使用許可データに基づいて、接続中の子機のリストを表示する子機リスト表示手段をさらに備える。
【0020】
請求項14の発明は、請求項13に従属し、親機は、接続中の子機のうち接続の切断をユーザが希望する子機を子機リストから選択するための操作手段、操作手段によって選択された子機との接続を切断する切断手段、および切断手段が接続を切断した子機のデータを使用許可データから削除する削除手段を備える、無線通信ゲームシステムである。
【0021】
請求項15の発明は、無線通信ゲームシステムにおけるエントリ処理方法であって、次のステップを含む(無線通信ゲームシステムは、第1タイムスロットと複数のサブタイムスロットを含む第2タイムスロットとによって構成される通信周期で互いに無線通信可能であり、親機または子機となる複数の携帯ゲーム装置を用いるものである):(a) 親機は子機に使用させるべき第1サブタイムスロットを指定する指定データを含む親機パケットをブロードキャストし、(b) 子機は指定データで指定された第1サブタイムスロットでエントリ要求を送信し、(c) 親機は第1サブタイムスロットで子機から送信されたエントリ要求を検出し、(d) 親機はエントリ要求を許可する使用許可データを親機パケットに設定し、そして(e) 子機は親機パケットの使用許可データに基づいてエントリ要求の成否を判断する。
【0022】
請求項16の発明は、複数の携帯ゲーム装置を用いる無線通信ゲームシステムにおいて、携帯ゲーム装置のプロセサに次のステップを実行させるプログラムである。(携帯ゲーム装置は、第1タイムスロットと複数のサブタイムスロットを含む第2タイムスロットとによって構成される通信周期で互いに無線通信可能であり、親機または子機となる):(a) 親機のプロセサによって、子機に使用させるべき第1サブタイムスロットを指定する指定データを含む親機パケットをブロードキャストさせるブロードキャストステップ、(b) 子機のプロセサによって、指定データで指定された第1サブタイムスロットでエントリ要求を送信させる送信ステップ、(c) 親機のプロセサによって、第1サブタイムスロットで子機から送信されたエントリ要求を検出させる検出ステップ、(d) 親機のプロセサによって、エントリ要求を許可する使用許可データを親機パケットに設定させる設定ステップ、および(e) 子機のプロセサによって、親機パケットの使用許可データに基づいてエントリ要求の成否を判断させる成否判断ステップ。
【0023】
請求項17の発明は、請求項16に従属し、自機が親機になるか子機になるかを決定する親子決定ステップをさらに備え、親子決定ステップによって親機になることが決定された場合は、ステップ(a),(c) および (d )を携帯ゲーム装置のプロセサに実行させ、親子決定ステップによって子機になることが決定された場合は、ステップ(b) および (e) を携帯ゲーム装置のプロセサに実行させる。
請求項18の発明は、第1タイムスロットで親機から親機パケットをブロードキャストし、第2タイムスロットで子機から前記親機へ子機パケットを送信する、無線通信ゲームシステムにおいて、親機は接続中の子機の識別データを親機パケットに設定し、子機は、新たに親機にエントリするとき、親機パケットに既に設定されている識別データとは異なる識別データを自機の識別データとして決定し、該識別データを子機パケットで送信することを特徴とする。
【0024】
請求項19の発明は、複数の携帯ゲーム装置を用い、一方が親機となり他方が子機となり、親機は第1タイムスロットで親機パケットをブロードキャストしかつ第2タイムスロットで子機パケットを受信し、子機は第2タイムスロットに含まれる少なくとも1つのサブタイムスロットで子機パケットを送信しかつ第1タイムスロットで親機パケットを受信することによって無線通信ゲームをプレイする、携帯ゲーム装置であって、親機のために、第1タイムスロットで親機パケットをブロードキャストしかつ第2タイムスロットで子機パケットを受信するものであり、さらに (a) サブタイムスロットのうち新たな子機が使用すべき第1サブタイムスロットを決定する第1サブタイムスロット決定手段、(b) 新たな子機が第1サブタイムスロットに送信したエントリ要求を検出するエントリ要求検出手段、および (c) 第1サブタイムスロットを指定する指定データおよびエントリ要求に応答して設定される使用許可データを含む親機パケットを設定する親機パケット設定手段を備え、子機のために、サブタイムスロットのうち少なくとも1つのサブタイムスロットで子機パケットを送信し、第1タイムスロットで親機パケットを受信するものであり、(d) 親機パケットに含まれる指定データが示す第1サブタイムスロットにエントリ要求を送信するエントリ要求送信手段、および (e) 親機パケットの使用許可データに基づいてエントリの成否を判断する成否判断手段を備える。
【0025】
【作用】
無線通信ゲームシステムは、実施例では、少なくとも2台の携帯ゲーム装置(10:実施例で相当する参照符号。以下同じ。)を用いて構成される。実施例の携帯ゲーム装置(10)は、携帯ゲーム機(12)と、その携帯ゲーム機に装着された無線通信ユニット(14)とを含む。携帯ゲーム装置は、この無線通信ユニット(14)を用いて、親機の場合には、第1タイムスロット(親機スロット)で親機パケットをブロードキャストし、第2タイムスロットを構成するサブタイムスロット(子機スロット0−3)の1つで子機パケットを受信する。子機の場合には、第1タイムスロットで親機パケットを受信し、第2タイムスロットで子機パケットを親機に向けて送信する。
【0026】
第1タイムスロット決定手段は、実施例でいえば、携帯ゲーム機のプロセサ(20)とそれによって実行される図27のステップS1009を含み、このステップS1009において、プロセサは、親機パケットのEスロットフィールド(ESlot)に、使用していない、すなわち空いている、第1サブタイムスロットを指定する指定データ(具体的には、サブタイムスロット番号)を設定する。
【0027】
子機では、親機パケットに含まれるその指定データが示す第1サブタイムスロットに、エントリ要求を送信する。このエントリ要求は、実施例でいえば、自機の子機番号(CID)であり、子機となった携帯ゲーム装置のプロセサ(20)が図31のステップS3023で自機のCIDを第1サブタイムスロットで送信する。
【0028】
親機のエントリ要求検出手段は、実施例でいえば、プロセサ(20)とそのプロセサによって実行される図27のステップS1021を含み、このステップS1021において、プロセサは、指定データ(ESlot)が示す第1サブタイムスロットに子機から送信された子機CIDが受信できたかどうか判断する。このエントリ要求検出手段が子機からのエントリ要求を検出し、エントリ要求を許可する。
【0029】
そして、親機パケット設定手段によって設定される親機パケットは、指定データおよび使用許可データを含む。実施例でいえば図27のステップS1029に相当する親機パケット設定手段は、たとえばUスロットフィールド(USlot)のエントリスロット位置にエントリ要求をした子機のCIDを格納する。
【0030】
したがって、子機の成否判断手段は、実施例でいえば図31のステップS3029において親機パケットのそのフィールド(USlot)のエントリスロット位置に自己のCIDが存在するかどうか判断することによって、先に送出したエントリ要求が許可されたかどうか判断することができる。
【0031】
請求項2では、第1サブタイムスロットに使用許可データを設定するようにするので、エントリ要求に対する使用許可を与えるための特別なタイムスロットを必要としない。
【0032】
請求項3の第1フィールドおよび第2フィールドは実施例でいえばそれぞれ図11のフィールドESlotおよびUSlotであり、フィールドEslotに指定データが設定され、USlotに使用許可データが設定される。したがって、この請求項3によれば、親機パケットに指定データおよび使用許可データが含まれ、そのような親機パケットが、所定の通信周期でブロードキャストされるため、子機はいつの時点においてもエントリすることができる。
【0033】
請求項4では、ゲーム中に指定データが設定されるので、ゲーム中でも子機はエントリを要求し、その可否を判断できる。
【0034】
請求項5の禁止手段は、実施例でいえば、親機のプロセサとそれによって実行されるステップS31(図22)またはステップS69(図23)に相当し、第1フィールドに特定データ、たとえば「ffh」を設定する。したがって、請求項5によれば、エントリ禁止のために別途タイムスロットを確保する必要がない。
【0035】
請求項6の識別データ記憶手段は実施例でいえば図18に示す子機変数領域88の領域CIDであり、実施例のたとえばステップS3023(図31)で、エントリ要求のためにその領域に記憶されている識別データすなわちCIDを用いる。したがって、多数の子機が存在する状況においても個々の子機は識別データによって確実に同定されるので、混乱なくエントリ処理をすることができる。
【0036】
請求項7においても、実施例のたとえば1029(図27)で、使用許可データとして識別データを用いるので、請求項5と同様の効果が期待できる。
【0037】
請求項8では、図11で示すUスロットが具体的には図12に示すように各サブタイムスロット毎にサブフィールドを含み、親機パケット設定手段ではそのサブフィールドに識別データを設定する。したがって、子機の成否判断手段では、そのサブフィールドに自己の番号CIDが存在するかどうかによって、エントリの成否を判断する。この請求項8によっても、請求項7と同様の効果が期待できる。
【0038】
請求項9の識別データ設定手段は、実施例でいえば、子機のプロセサとそれによって実行されるステップS3011およびS3013(図30)を含み、それによって、既に他の子機で用いられている識別データの重複使用が確実に回避できる。また、子機の製造時に子機の識別データを設定する必要がないので、製造コストを下げることができる。
【0039】
請求項10は実施例でいえば、ステップS97,S101(図24)に相当する。そして、識別データをエントリ時のみに利用するのではなく、通信ゲーム実行中においても用いることにより、親機による切断の判断に利用することができる。
【0040】
請求項11は実施例でいえば、ステップS1001(図27)に相当するものであり、請求項12も実施例でいえばステップS1001)に相当する。つまり、実施例では、図27のステップS1001において、初期設定として、実行するゲームプログラムに応じて1つの子機の対して割り当てるサブタイムスロットの最大数(N)を設定するとともに、実行するゲームプログラムに応じてエントリを許可する子機の最大数(M)を設定する。
【0041】
そして、1つの子機に対して割り当てるサブタイムスロットの最大数や同時参加可能な子機の最大数をゲームに応じて決定することができるので、一定のサブタイムスロット数の中で、1つの子機に対して割り当てる個数を少なくして参加可能な子機の数を多くするか、または、1つの子機に対して割り当てる個数を多くしてデータレートを大きくするかのいずれかをゲームの内容に応じて決定することができる。たとえば、多くのプレイヤが参加する方が面白いゲームの場合には前者とし、通信量が多いゲームの場合は後者とする。
【0042】
請求項13は、実施例でいえばステップS1039(図28)に相当し、請求項14は、実施例でいえば、ステップS1013(図27)に相当する。それによって、親機が、通信ゲームをしたくない子機を選択して、通信を随意に切断することができる。
【0043】
請求項15や請求項16の発明によれば、請求項1の無線通信ゲームシステムと同様の効果が期待できる。ただし、請求項17では、同じ携帯ゲーム機を親機として、または子機として用いることができる。
【0044】
請求項18の発明においても、親機パケット(の第2フィールド)に既に設定されている識別データとは異なる識別データをエントリ要求に使うようにしたので、請求項9の発明と同様の効果が期待できる。
【0045】
請求項19の発明によれば、複数の同じ携帯ゲーム装置を用いて、一方が親機となりかつ他方が子機となる無線通信ゲームをプレイすることができる。
【0046】
【発明の効果】
この発明によれば、親機がエントリに関して主導的な働きをして、エントリ処理を確実に実行することができる。また、子機からは空きが確認されている第1サブタイムスロットに対してエントリ要求を出すので、エントリ要求のための専用のスロットが必要ない。
【0047】
この発明の上述の目的,その他の目的,特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【0048】
【実施例】
この発明が適用される無線通信ゲームシステムは、一例として、図1に示すような携帯ゲーム装置10を利用する。携帯ゲーム装置10は、この実施例では、たとえばゲームボーイアドバンス(GAMEBOY ADVANCE:商品名)のような携帯ゲーム機12と、その携帯ゲーム機12の通信コネクタ46に接続された無線通信ユニット14およびカートリッジコネクタ40に接続されたカートリッジ16を含む。つまり、この実施例においては、携帯ゲーム装置10は、携帯ゲーム機12,無線通信ユニット14およびカートリッジ16によって構成される。
【0049】
図1に示す携帯ゲーム機12は、プロセサ20を含み、このプロセサ20は、CPUコア22とそれに関連するブートROM24,LCDコントローラ26,WRAM(ワーキングRAM:以下同様)28,VRAM30および周辺回路32とを含む。ただし、周辺回路32は、音声(サウンド)回路、DMA(Direct Memory Access)回路、タイマ回路、入出力インタフェース(IO)などを含む。携帯ゲーム機12の前面に設けられたLCD18には、プロセサ20から表示信号、この実施例ではRGB信号が与えられ、したがって、LCD18ではゲーム画像がカラー表示される。そして、プロセサ20からは、サウンド回路34にオーディオ信号が与えられ、そのオーディオ信号によって、スピーカ36からゲーム音楽や効果音などの音声が出力される。また、携帯ゲーム機12の前面にLCD18を挟んで設けられる十字キーやスタートキー,セレクトキーおよびAボタンならびにBボタンがまとめて操作スイッチ38として示され、この操作スイッチ38からの操作信号がプロセサ20に入力される。したがって、プロセサ20は操作スイッチ38を通して与えられたユーザの指示に従った処理を実行する。
【0050】
携帯ゲーム機16はカートリッジコネクタ40を有し、このカートリッジコネクタ40には、カートリッジ16が接続または挿入される。カートリッジ16にはROM42およびバックアップRAM44が内蔵され、ROM42には携帯ゲーム機12で実行すべきゲームのためのゲームプログラムが、そのゲーム名とともに、予め設定されている。バックアップRAM44は、そのゲームの途中データやゲームの結果データを記憶する。
【0051】
携帯ゲーム機16にはさらに通信コネクタ46が設けられ、この通信コネクタ46には無線通信ユニット14のコネクタ48が接続される。なお、実施例で用いる携帯ゲーム機12は、一例としてゲームボーイアドバンス(商品名)であり、その場合、上述のカートリッジコネクタ40は、LCD18を前面(正面)としたときの上面奥側に設けられる32ピンコネクタであり、通信コネクタ46は上面手前側に設けられる6ピンコネクタである。
【0052】
無線通信ユニット14は、ベースバンドIC50を含み、このベースバンドIC50はROM52を含む。ROM52にはたとえばOCD(One−Cartridge Download)プログラムやその他のプログラムが内蔵され、ベースバンドIC50は、それらのプログラムに従って動作する。なお、ワンカートリッジダウンロードプログラムとは、OCモード(ワンカートリッジモード:親機にだけゲームカートリッジが装着されていて、子機はその親機カートリッジからの子機用プログラムのダウンロードを受けて動作するモード)において、子機へプログラムをダウンロードするためのプログラムである。
【0053】
無線通信ユニット14にはさらにEEPROM54が設けられ、このEEPROM54には、たとえば、ユーザ名が固有に設定される。ベースバンド(Base Band)IC50は、そのユーザ名を含んだデータを、RF(Radio Frequency)−IC56に送出し、RF−IC56は、そのデータを変調して、アンテナ58から電波を送信する。ただし、その電波強度は、非常に微弱で、電波法の規制の対象とならない程度の小さい値に設定されている。また、この無線通信ユニット14には電源回路60が設けられている。この電源回路60は典型的には電池であり、無線通信ユニット14の各コンポーネントに直流電源を供給する。
【0054】
無線通信ユニット14では、また、他の携帯ゲーム装置から送信された電波をアンテナ58で受信してRF−IC56によって復調し、復調信号がベースバンドIC50に入力される。したがって、ベースバンドIC50は、復調信号をデコードして、データを復元し、そのデータをコネクタ48および46を介して携帯ゲーム機12すなわちWRAM28に転送する。
【0055】
この発明に従った実施例の無線通信ゲームシステムでは、複数台の図1に示すような携帯ゲーム装置10を利用する。図2の点線64は自機携帯ゲーム装置62の通信可能範囲を示している。そして、携帯ゲーム装置62は、通信可能範囲64に存在する携帯ゲーム装置に対してエントリできる可能性がある。この通信可能範囲64が上述の微弱電波によって親機と子機との間のデータ通信が可能な範囲であり、この通信可能範囲64の中に存在する複数の携帯ゲーム装置は、どれでもが、任意に、親機となりまたは子機となることができる。図示の例では、その範囲64の内に、4台の親機と3台の子機と、1台の自機62とが存在する。
【0056】
そして、自機62がゲームに参加する場合、親機か子機になる必要がある。自機が子機になる場合には、参加可能な親機を探す必要がある。親機を探すときに、自機がカートリッジを持っているかどうかによって、異なる親機を探す必要がある。
【0057】
まず、自機62が図1に示すカートリッジ16を装着した携帯ゲーム装置である場合であって、かつ自機62の周囲のすべての親機を表示することを示す全表示フラグ(後述)を「1」に設定しているときには、図1に示す携帯ゲーム機12のLCD18上に、図3で示すような親機リスト18Aが表示される。この図3の親機リスト18Aには、通信可能範囲64(図2)内に存在するすべての親機、すなわち、ユーザ名がそれぞれ「太郎」,「一郎」および「二郎」の3台の親機が表示される。したがって、自機のユーザは、自機を子機として動作または機能させたいとき、その自機を接続したい親機を、操作キー38(図1)に含まれる十字キーでカーソルを動かして指定した後同じく操作キー38に含まれるAボタンを押すことによって、選択することができる。
【0058】
ただし、自機を親機として使いたい場合には、ユーザは、操作キー38に含まれるBボタンを押せばよい。
【0059】
図2では範囲64内に4台の親機が存在するにも拘わらず、図3の親機リスト18Aでは3台の親機だけが表示されるのは、次の理由による。ユーザ名が「三郎」の親機はエントリスロットESlotが「ffh」に設定されている。このエントリスロットESlotは、新しい子機を希望するかどうかを示すフラグであり、このエントリスロットESlotが「ffh」に設定されているときは、その親機は子機の新規参加を拒否しているので、そのような親機は表示されないのである。ユーザ名「三郎」の親機は、エントリ可能な最大子機数に達しているため、新しい子機を希望していない。
【0060】
また、図3の親機リスト18Aでは、ユーザ名「二郎」の親機に丸印(○)が付加されている。この丸印(○)は、OCモードでのゲームがプレイ可能なことを示す。
【0061】
さらに、全表示フラグがオフの場合には、LCD18には図4に示す親機リスト18Aが表示される。この場合には、自機のゲームカートリッジ、たとえばマリオカート−1(Mario Kart−1)と通信できる親機、この例ではユーザ名が「太郎」である親機だけが表示される。なぜなら、ユーザ名「太郎」の親機にはマリオカート−2(Mario Kart−2)のカートリッジが装着されていて、Mario Kart−1とMario Kart−2とは相互に通信可能であるからである。なお、通信可能範囲64内に、マリオカート−1のカートリッジが装着されている親機があれば、その親機も当然表示される。
【0062】
上の例では自機(子機)にMario Kart−1のカートリッジが装着されているが、自機にカートリッジを装着せず、OCモードでゲームをプレイしたい場合には、LCD18には、たとえば図5に示す親機リスト18Aが表示される。この図5の親機リスト18Aでは、OCモードに対応できる親機、この例ではユーザ名「二郎」の親機だけが表示される(「F−ZERO」はOCモード対応のゲームである)。ただし、この場合には自機にはカートリッジが装着されていないので、自機は親機になれない。したがって、「自分が親機になりたいときはBボタンを押してください」という図3や図4に示すメッセージは表示されない。
【0063】
次に図6−図8を参照して、ユーザ名「四郎」の親機が図2に示す通信可能範囲64に入り、その後、ユーザ名「一郎」の親機がその範囲64の外へ出た場合の自機62の表示の変化について説明する。ユーザ名「四郎」の親機が範囲外にある場合には、図6に示すように、自機62のLCD18上には図3と同じ親機リスト18Aが表示される。
【0064】
その後、ユーザ名「四郎」の親機が範囲内に進入してきたときには、図7で示す親機リスト18Aが表示される。ただし、自機62の全表示フラグがオンされているものとする。つまり、ユーザ名「四郎」の親機が、ユーザ名がそれぞれ「太郎」,「一郎」および「二郎」である親機に加えて表示される。
【0065】
そして、さらにユーザ名「一郎」の親機が範囲64外へ脱したときには、図8の親機リスト18Aが表示される。この親機リストにはユーザ名「一郎」の親機は表示されない。
【0066】
さらに、自機が親機であってかつ新たな子機の参加を待っているときには、LCD18には、図9に示す子機リスト18Bが表示される。この子機リスト18Bをみると、現在、ユーザ名がそれぞれ「五郎」,「六郎」および「七郎」の子機が自機に接続していることがわかる。ここで、本実施例は親機と子機とが微弱電波によって無線通信をしながらゲームを進行させる無線通信ゲームシステムであるので、本来的には「接続」の用語を用いるべきではない。しかしながら、親機となる携帯ゲーム装置と子機となる携帯ゲーム装置との間での通信可能な連係状態を表す用語として、有線通信の場合の用語を借りて、便宜上「接続」と表現することとする。
【0067】
次に、接続状態にある親機と子機とが無線通信する場合のデータパケットフォーマットについて、図10−図14を参照して説明する。図10で示すように、1つのデータサイクルが2ミリ秒で、そのデータサイクルは、1つの親機スロットと複数(この実施例では4つ)の子機スロットとを含む。親機スロットでは図11に具体的に示す親機パケットがブロードキャスト(Broadcast:放送)され、4つの子機スロットでは、それぞれ、図13に具体的に示す子機パケットの親機への送信が行われる。
【0068】
親機パケットは、図11に示すように、同期データを格納しておくためのフィールドsyncをその先頭に有し、その同期データフィールドsyncに後続してその親機の番号(識別コード)PID格納するためのフィールドPIDを有する。そのフィールドPIDに続いて、ユーザ名フィールドUserNameおよびゲーム名フィールドGameNameが形成される。ユーザ名フィールドUserNameには、EEPROM54(図1)から読み出されたユーザ名、上の例でいえば「太郎」,「一郎」などが登録され、ゲーム名フィールドGameNameにはゲーム名、上の例でいえばMarioKart−1,Mario Kart−2,F−Zero,Golf,…が登録される。ただし、カートリッジ16(図1)を装着すれば、このゲーム名フィールドGameNameにはROM42(図1)から読み出されたゲーム名(図16の68)が自動的に登録され得る。
【0069】
親機パケットはさらに、フラグOCを含み、このフラグOCは、先に述べたワンカートリッジ(OC)モードに対応できるかどうかを示すフラグである。具体的には、このフラグOCがリセットされているとき、すなわちOC=0のときには、そのときの親機のゲームカートリッジはOCモードに非対応であること、あるいは、OCモードに対応できるが現在は通常モードでプレイしていることを示す。フラグOCがセットされているとき、すなわち、OC=1のとき、OCモードに対応できかつ現在そのOCモードでプレイしていることを示す。したがって、カートリッジを持たないユーザは、このフラグOCが「1」である親機を探す必要がある。
【0070】
フラグOCに続いて、親機パケットは、フィールドESlot,USlotおよびPayloadを順次含む。EスロットフィールドESlotは、エントリ(参加)可能な子機スロットの番号が格納される。つまり、新規参加子機が使用できるスロット番号が格納される。UスロットフィールドUSlotには、子機スロットの使用状況が格納される。具体的には、図12に示す。すなわち、UスロットフィールドUSlotは、4つの領域を含み、この4つの領域の各々が子機スロット0,子機スロット1,子機スロット2および子機スロット3に対応する。そして、それぞれの領域には、該当する子機スロットが割り当てられた子機の番号(識別コード)CIDが格納される。該当する領域に対応する子機番号CIDが登録されているときには、その子機スロットが使用されていることがわかる。
【0071】
ペイロードフィールドPayloadは、ゲーム処理において必要となるゲームデータを送信するためのフィールドであり、親機から子機へ送信されるゲームデータを格納するためのフィールドである。
【0072】
子機から、その子機に割り当てられた子機スロットに送出される子機パケットが図13に示される。すなわち、子機パケットは、子機番号CIDを格納または登録する先頭のフィールドCIDとそれに後続するペイロードフィールドPayloadとを含む。ペイロードフィールドPayloadは子機から親機へ送信されるゲームデータを格納するためのフィールドである。
【0073】
図14が具体例を示す。この図14の例では、親機番号フィールドPIDに「58」が格納されていて、したがって、親機番号PIDが「58」であることがわかる。そして、この親機のユーザ名は「太郎」であり、ゲーム名はMario Kartであり、フラグOCが「0」で、EスロットフィールドESlotには「2」が登録されていて、UスロットフィールドUslotを参照することにより子機スロット0には「16」の子機番号(CID)を持った子機が、子機スロット1には「130」を持った子機がそれぞれ接続されているが、子機スロット2および3はともに「0h」であるので空きスロットであることがわかる。
【0074】
このような状態の親機に対して新たな子機が接続(Entry)を試みる場合には、親機のUスロットフィールドUSlotを参照すると子機番号CIDとして「16」および「130」が使用されているので、それ以外の子機番号CIDをたとえば乱数を発生させることによって決定する。一例として「86」が当該子機のCIDとして決定されたとする。したがって、その子機は、ESlotで指定される子機スロット(子機スロット2)にCID=86を送信する。
【0075】
そして、親機では、子機スロット2で「86」を受信することにより、子機番号CIDとして「86」を持つ子機がエントリしたい、ということを知る。そして、そのエントリを許可するかどうかを決定するわけであるが、許可する場合には、親機は、Uslotの子機スロット2に対応する領域に「86」を設定した図14の最下段に示す親機パケットをブロードキャストし、新たに「86」の子機番号CIDを持つ子機の参加を許可したことを知らしめる。同時に、新規参加した子機は、Uslotの子機スロット2に対応する領域に自己の子機番号としてCID=86があることを確認し、エントリが成功したことを判断できる。
【0076】
図15はOCモードに対応していないカートリッジのメモリマップを示し、図16はOCモードに対応できるカートリッジのメモリマップを示す。
【0077】
図15の実施例では、カートリッジ16に含まれるROM42(図1)は、ゲームプログラム領域62およびゲーム名領域64を含む。ゲームプログラム領域62には、共通プログラム66,親機プログラム68および子機プログラム70が予め格納される。共通プログラム66は、自機が親機であると子機であるとに拘わらず使用するプログラムである。すなわち、自機が親機の場合は共通プログラムと後述の親機プログラムが実行され、自機が子機の場合は共通プログラムと後述の子機プログラムが実行される。親機プログラム68は、自機が親機として機能するときにのみ作動するプログラムであり、変数MおよびNを含むとともに、「0」に設定された(つまりオフされた)フラグOCを含む。ただし、変数Mは、その親機に同時に接続可能な子機の最大数を示し、変数Nは1台の子機が使用できる最大スロット数を示す。これらの変数MおよびNは、ともに、ゲームに応じて変化することに留意されたい。子機プログラム70は、自機が子機として機能するときにのみ作動するプログラムであり、上述の変数Nを含む。ゲーム名領域64には、上記ゲームプログラムの名称、たとえばMario Kart−1,Golf,…などが予め格納される。
【0078】
図16の実施例でも、カートリッジ16のROM44は、ゲームプログラム領域62およびゲーム名領域64を含む。ゲームプログラム領域62には、図15と同じ共通プログラム66,親機プログラム68および子機プログラム70が設定されるとともに、OCモードに対応するためにOCモード用ゲームプログラム72が設定される。OCモード用ゲームプログラム72は親機プログラム74と転送用子機プログラム76とを含む。親機プログラム74は、フラグOCが「1」に設定されていることを除いて、先の親機プログラム68と同じである。転送用子機プログラム76は、OCモードでゲームプレイする子機へ転送するためのプログラムであり、変数Nを含む。OCモードでエントリする子機は、親機から転送(ダウンロード)されるこの転送用子機プログラム76を受けることによって、ゲームに参加できる。
【0079】
図17には図1に示す無線通信ユニット14のEEPROM54のメモリマップが示され、この図17に示すように、EEPROM54は、ユーザ名領域78を含み、このユーザ名領域78にユーザ名、上の例でいえば「太郎」,「一郎」…などが登録される。
【0080】
図18に示すメモリマップを参照すると、ゲーム機12のWRAM28(図1)は、親機リスト領域80,親機リストクリアタイマ82,子機リスト領域84,変数領域86および88,ゲーム変数領域90,送信バッファ領域92および受信バッファ領域94を含む。
【0081】
親機リスト領域80は、先に図3等で説明した親機リスト18Aを表示するためのデータ、たとえば親機番号(PID),ユーザ名(UserName),ゲーム名(GameName),フラグOC,EスロットフィールドESlotを一時的に記憶保持しておくための領域である。
【0082】
親機リストクリアタイマ82は、この親機リスト領域80のデータをクリアするまでの時間を計測するためのタイマであり、後述のように、このタイマ82がタイムアップすれば、親機リスト領域80は自動的にクリアされる。
【0083】
子機リスト領域84は、先に図9等で説明した子機リスト18Bを表示するためのデータ、たとえば子機番号(CID),ユーザ名(UserName)およびゲーム名(GameName)を一時的に記憶保持しておくための領域である。
【0084】
WRAM28はさらに、自機が親機として動作する(振舞う)ときに使用する変数をストアしておくための親機変数領域86および自機が子機として動作する(振舞う)ときに使用する変数をストアしておくための子機変数領域88を含む。
【0085】
親機変数領域86には、たとえば図11に示す各フィールドPID,USlotおよびESlotのためのデータや接続対象の子機の子機番号(CID)さらには、変数nおよびmが設定される。ここで、変数nは、1台の子機に現に実際に割り当てられているスロット数を示し、その最大数が先に説明した変数Nで与えられる。また、変数mは、1台の親機に現に実際に同時に接続されている子機数を示し、その最大数が上述の変数Mで与えられる。
【0086】
子機変数領域88には、たとえば図12に示すフィールドCIDのためのデータが設定されるとともに、接続結果を示す変数、復帰結果を示す変数、接続先の親機の親機番号(PID)、獲得したスロット番号(1つまたは複数)、同期タイマ、変数n、さらには、全表示フラグが設定される。
【0087】
ゲーム変数領域90はゲーム実行中のゲーム変数、たとえばクリアしたステージ数や獲得したアイテム等を示す変数をストアするための領域である。そして、送信バッファ92および受信バッファ94は、それぞれ、送信データおよび受信データを一時的にストアしておくための領域である。
【0088】
それぞれがこのような構成を有する2台以上の携帯ゲーム装置10がゲームシステムを構築するが、以下に、そのゲームシステムにおける各携帯ゲーム装置10の動作をフロー図を参照して説明する。
【0089】
詳細な説明に先立って、OCモードに対応できないカートリッジが自機に装着されている場合で、かつ、自機が親機になるときには、後述のステップS29(図21)−ステップS69(図23)の一連のステップを実行する。また、OCモードに対応できないカートリッジが自機に装着されている場合で、かつ、自機が子機となるときには、後述のステップS83−ステップS109(図24)の一連のステップを実行することになる。
【0090】
また、自機にOCモード対応可能なカートリッジが装着されてはいるが通常モード(OCモードではない)でゲームをプレイする場合には、自機を親機とするときには、ステップS29(図21)−ステップS69(図23)の一連のステップを実行し、自機を子機とするときには、上と同様に、ステップS83−ステップS109(図24)の一連のステップを実行することになる。
【0091】
さらに、自機にOCモード対応可能なカートリッジが装着されていて、OCモードでゲームをプレイする場合には、自機は親機としてしか機能できず、この場合には、ステップS75およびS77(図19)を経て、上述の親機の場合と同様に、図21に示すステップS29から図23に示すステップS69の一連のステップを実行する。
【0092】
そして、自機にカートリッジが装着されていない場合には、自機はOCモードでの子機にしかなれず、したがって、この場合には、ステップS111(図19)−ステップS147(図26)の一連のステップを実行することになる。
【0093】
図19は携帯ゲーム機12の動作を示す。携帯ゲーム機12の電源(図示せず)を投入すると図19の動作が開始され、最初は、ブート(Boot)ROM24内に設定された動作を実行する。つまり、最初のステップS1で、プロセサ20は、たとえばコネクタ40(図1)からの信号に基づいて、カートリッジ16が装着されているかどうかを検出する。そして、ステップS3でカートリッジがあると判断した場合には、カートリッジ16のROM42のプログラムに移行し、続くステップS5で、そのカートリッジがOCモードに対応可能なカートリッジかどうか判断する。このステップS5では、図15のカートリッジ(OCモードに対応不可能なカートリッジ)が装着されているか、図16のカートリッジ(OCモードに対応可能なカートリッジ)が装着されているかを判断する。
【0094】
ステップS5で“NO”が判断されたとき、すなわち自機にカートリッジは装着されているがそのカートリッジがOCモード対応カートリッジではないとき、図20のステップS7に進み、図18に示す親機リスト領域80をクリアするとともに、同じく図18に示す親機リストクリアタイマ82をリセットし、さらには図18の子機変数領域88に設定されている全表示フラグをオン(「1」を設定)する。なお、親機リストクリアタイマ82はリセット後自動的にタイマのカウントを開始する。
【0095】
その後、ステップS9において、図11で示すような親機パケットの受信を試みる。ステップS11で、親機パケットを成功裏に受信したかどうか判断する。そして、ステップS11で“YES”を判断したとき、続くステップS13において、その親機パケットをブロードキャストした親機は、親機リストに存在しない親機かどうか判断する。具体的には、このステップS13では、受信した親機パケットのデータ(図18に示すWRAM28の受信バッファ94に一時的にストアされているデータ)のうちの親機PIDやユーザ名が、親機リスト80(図18)に登録されている親機かどうか判断する。このステップS13で“YES”が判断されると、つまり、新規な親機の場合には、続くステップS15において、プロセサ20は、親機リスト80に、親機パケットに含まれた親機ID(PID),ユーザ名(UserName),ゲーム名(GameName),OCフラグ(OC)およびエントリスロット(ESlot)を新たに登録する。
【0096】
先のステップS11で“NO”を判断したとき、またはステップS15での登録を終えたとき、次のステップS17で、先のステップS7でリセットした親機リストクリアタイマ82(図18)の値が2秒以上になったかどうか判断する。“YES”なら、ステップS19で親機リスト80をクリアするとともに、親機リストクリアタイマ82をリセットする。ここで、親機リストクリアタイマ82をリセットするのは次の理由による。すなわち、図8を参照して前述したようにある親機(図8の「一郎」)が通信可能範囲から外れた場合に、その親機を親機リスト80から削除しなければならない。そのため、定期的に(この実施例では2秒ごとに)、親機リスト80をクリアして通信可能範囲の親機のリストへの登録を最初からおこなうことによって、通信可能範囲から外れた親機が親機リストに残らないようにしているのである。ステップS17で“NO”を判断したとき、またはステップS19を経た後、次のステップS21において、プロセサ20は、上述の全表示フラグがオン(「1」)かどうか判断する。なお、実施例では、この全表示フラグは、デフォルトとして、「1」またはオンに設定されている。全表示フラグがオンのとき、ステップS23で、親機リストに登録されている親機のうち、エントリスロットESlotが「ffh」でない親機、つまり、新たな子機のエントリを許容するすべて親機の情報(具体的には、ユーザ名UserNameおよびゲーム名GameName)を図3に示すように表示する。全表示フラグがオフ(「0」)のときには、ステップS25において、親機リストに登録されている親機のうち、エントリスロットESlotが「ffh」でなくしかも通信可能な(すなわち、親機のカートリッジのゲームと子機のカートリッジのゲームが所定の関係にあり通信可能な)親機の情報(ユーザ名UserNameおよびゲーム名GameName)を図4に示すように表示する。
【0097】
その後、図21のステップS27に進み、プロセサ20は、操作キー38からの信号を参照して、Bボタン(図示せず)が押されたかどうか判断する。Bボタンが押されたということは、その携帯ゲーム装置のユーザが、自機を親機として振舞わせることを決めたことを意味し、その場合には、変数MおよびNの範囲内で子機を募集するために、ステップS29の親機接続処理を実行する。ただし、1台の子機に与えられる最大スロット数を示す変数Nおよび最大参加可能子機数を示す変数Mは、それぞれ、ゲームによって変更可能である。たとえば、最大参加子機数Mを大きくするためには最大スロット数Nを小さくし、データレートを重視するなら最大スロット数Nを大きくし最大参加子機数Mを小さくすればよい。
【0098】
ここで、図27および図28を参照して、子機募集のためのステップS29における親機の接続処理について、詳細に説明する。図27の最初のステップS1001では、プロセサ20は、図18に示す子機リスト領域84をクリアするとともに、初期画面を表示させる。このステップS1001は初期設定ステップであり、上の処理に加えて、さらに、1つの子機の対して割り当てるサブタイムスロットの最大数(N)を設定するとともに、エントリを許可する子機の最大数(M)を設定する。ただし、これら最大数NおよびMは、それぞれ、実行すべきゲームプログラムに応じて決定できる。このように、1つの子機に対して割り当てるサブタイムスロットの最大数Nや同時参加可能な子機の最大数Mをゲームに応じて決定するようにすれば、一定のサブタイムスロット数の中で、1つの子機に対して割り当てる個数を少なくして参加可能な子機の数を多くするか、または、1つの子機に対して割り当てる個数を多くしてデータレートを大きくするかのいずれかをゲームの内容に応じて決定することができる。たとえば、多くのプレイヤが参加する方が面白いゲームの場合にはスロット数Nを小さくし参加子機数Mを大きくし、通信量が多いゲームの場合はスロット数Nを大きくし参加子機数Mを小さくすればよい。
【0099】
続くステップS1003では、プロセサ20は、親機変数領域86(図18)の親機PIDを設定するための領域PIDに擬似ランダム値を書き込む。そして、次のステップS1005において、領域86内の、親機(自機)に実際に接続している子機の数を示す変数mをゼロ(0)とし、続くステップS1007で、接続対象子機の番号を示す接続対象CIDの領域に「Null」を設定するとともに、領域86内の、現在接続処理中の子機に実際に付与しているスロット数を示す変数nにゼロ(0)を書き込む。なお、接続対象CIDとは、現在接続処理中の子機のCIDのことであり、エントリ処理において1つの子機に複数のスロットを付与する場合に、ある子機に対するスロットの付与を複数回連続しておこなうために、ある子機に対するスロットの付与が開始されたら、接続対象CID以外のCIDの子機からのエントリ要求を無視するためのものである。次のステップS1009において、領域86内の、エントリスロット領域ESlotに、空いているスロット番号のうちの1つを割り当てる。
【0100】
その後、ステップS1011において、プロセサ20は、操作キー38(図1)からの信号を検証して、Aボタン(図示せず)が押されたかどうか判断する。ステップS1011で“YES”なら、そのとき自機(親機)のユーザがその子機のエントリを拒否したことを意味するので(図9参照)、続くステップS1013において、プロセサ20は、図18の子機リスト領域84から、その選択された子機のデータ、USlotおよびCIDを削除する。その後、ステップS1015で、図9に示すように新たな子機リスト18Bを表示させる。
【0101】
そして、ステップS1011で“NO”が判断されたときには、すなわち親機のユーザがAボタンを押さなかったとき、またはステップS1015を実行した後には、ステップS1017において、プロセサ20は、操作キー38からの信号に基づいて、スタートキー(図示せず)が操作されたかどうか判断する。“YES”なら、そのままリターンする。しかしながら、“NO”なら、続くステップS1021において、図29に詳細に示す親機の送受信処理を実行する。
【0102】
図27のステップS1019で示す親機の送受信処理が、図29に詳細に示される。図29のステップS2001では、プロセサ20は、送信バッファ92(図18)に未送信データがあるかどうか判断する。“YES”なら、次のステップS2003において、図14の親機スロットに必要なデータ、たとえばPID,ユーザ名,ゲーム名,OCフラグ,Eスロット,Uスロットおよび、上記未送信データであるペイロードを送信する。そして、次のステップS2005で子機パケットを受信した後、リターンする。
【0103】
先のステップS2001で“NO”が判断されたときには、次のステップS2007で、プロセサ20は、過去64ミリ秒の間データ送信をしなかったかどうか判断する。なお、この「64ミリ秒」という時間は、タイマずれを解消できる数値の一例であり、当然この数値に限られるものではない。
【0104】
ステップS2007で“YES”を判断したときには、ステップS2009で、親機スロットを用いて、ペイロードを除く各データ、たとえばPID,ユーザ名,ゲーム名,OCフラグ,EスロットおよびUスロットを送信する。このステップS2009は子機からのエントリを可能にするために必要なステップであり、ペイロード(送信すべきデータ)がなくても、エントリ処理に必要なデータ(PID,ユーザー名,ゲーム名,OCフラグ,Eスロット,Uスロット)を定期的に送信しているため、子機は常にエントリ処理できるのである。このステップS2009では、ペイロードデータは送信しない。そして、ステップS2009の終了後、またはステップS2007で“NO”が判断されたとき、先のステップS2005を経てリターンする。
【0105】
図27に戻って、ステップS1019に続くステップS1021で、プロセサ20は、図11に示す親機パケットのフィールドESlotで指定したスロットで、子機番号CIDを受信できたかどうか判断する(すなわち、子機がエントリスロットを使用してエントリ要求をしてきたかどうかを判断する)。このステップS1021で“NO”の場合、先のステップS1011に戻り、“YES”の場合、次のステップS1023で、図18の子機変数領域86の接続対象子機CIDがNullかどうか判断する(すなわち、現在エントリ処理中の他の子機があるか否かを判断する)。“YES”なら、つまり、接続対象子機番号(CID)が登録されていなければ、ステップS1025で、ステップS1019で受信した子機CIDを接続対象子機番号(CID)として、図18の領域86内の接続対象子機CIDに登録する。
【0106】
先のステップS1023で“NO”のとき、またはステップS1025を終えたとき、ステップS1027において、プロセサ20は、受信したCIDが接続対象CIDと同じかどうか判断する(すなわち、受信したCIDが現在エントリ処理中の子機のCIDか否かを判断する)。“NO”なら先のステップS1011に戻るが、“YES”なら次のステップS1029で、図18の領域86内のUスロット領域USlotのエントリスロットを示す部分に、そのCIDを格納する。そして、ステップS1031で、実接続スロット数nをインクリメント(+1)し、ステップS1033で、n=Nかどうか、すなわち、実接続スロット数nが1台の子機に与える最大スロット数N(ゲーム毎に異なる)に達したかどうかを判断する。“YES”なら、その子機に対してそれ以上のスロットの付与は許容できないので、図28で示す次のステップS1035に進む。しかしながら、“NO”なら、その子機に対してさらにスロットを付与することが可能なので、ステップS1009に戻る。
【0107】
実付与スロット数nが最大付与可能スロット数Nに達したときには、その子機に対するエントリ処理を終了して、図28のステップS1035に進むが、このステップS1035では、親機となった携帯ゲーム機のプロセサ20は、エントリ処理が終了した子機のユーザ名、およびゲーム名等を受信する。この子機のユーザ名およびゲーム名がステップS1037において、子機リストに追加され、ステップS1039において、子機リスト18Bが、図9に示すように表示される。
【0108】
その後、親機のプロセサ20は、ステップS1041において、実接続子機数mをインクリメント(+1)し、ステップS1043において、その実接続子機数mが最大接続可能子機数M(ゲーム毎に異なる)と等しくなったかどうかを判断する。このステップS1043で“YES”が判断されると、つまり、それ以上子機を接続できないと判断したときには、そのままリターンする。
【0109】
逆に、1台以上の子機が未だ接続可能な場合、すなわちステップS1043で“NO”が判断された場合には、図27のステップS1007に戻る。
【0110】
このようにして、図21のステップS29での接続処理が実行され、さらに、図22のステップS31において、子機の募集を一旦打ち切り、他の子機の参加を禁止するために、エントリスロットESlotに「ffh」を書き込む。そして、ゲーム中に必要に応じて、子機を追加募集できるように、図18の領域86内の接続対象CIDをNull,実接続スロット数n=0としておく。
【0111】
その後、ステップS33においてゲームスタートかどうか、つまり、操作キー38に含まれるスタートボタン(図示せず)が押されたかどうか判断する。スタートボタンが押されると、次のステップS35において、プロセサ20は、図18に示す親機変数領域86のUスロット領域USlotを参照して、現に接続中の子機の数「m」を検出する。Uスロットの各領域のうち「0h」でない領域の数が現に接続中の子機の数mである。そして、ステップS37で、接続中の子機数mが最大接続可能数Mより小さいかどうか判断する。このステップS37で“YES”が判断されるということは、新規子機のエントリを許容できることを意味していて、したがって、この場合には、次のステップS39において、親機変数領域86のEスロット領域ESlotに、空いているスロット番号(Uスロットのうち「0h」である領域に対応するスロット番号)の1つを設定する。これによって、領域ESlotの「ffh」の状態設定が解除される。
【0112】
そして、ステップS41において、先に図29を参照して説明した親機の送受信処理を実行することによって、図11に示す親機パケットをブロードキャスト(送信)するとともに、各子機からの図13に示す子機データ(パケット)を受信する。
【0113】
その後、ステップS43において、プロセサ20は、一定時間t1以上、或る子機のデータを受信できなかったかどうか判断する。このステップS43で“YES”が判断されるということは、該当の子機が既に通信可能範囲64(図2)を離脱した可能性があることを意味し、その場合には、ステップS45において、プロセサ20は、該当の子機の子機番号CIDを親機変数領域86(図18)のUスロット領域USlotから削除する。この処理によって、離脱した子機が使用していた子機スロットが空きスロットになるので、離脱した子機の代わりに新たな子機のエントリが可能になる。
【0114】
ステップS43で“NO”が判断されたとき、またはステップS45を終えたとき、次のステップS47において、プロセサ20は、親機変数領域86のEスロット領域ESlotに「ffh」が設定されているかどうか判断する。“YES”なら、次のステップS49で、プロセサ20は、カートリッジ16のゲームプログラム62(図15)に従って、ゲーム処理を実行する。
【0115】
図22のステップS47で“NO”が判断されたときには、子機の途中参加を許容するために、プロセスは図23のステップS51に進む。このステップS51では、親機のプロセサ20は、EスロットフィールドESlotで指定したスロットで子機CIDを受信できたかどうか判断する。“YES”なら、次のステップS53において、図18の領域86内の接続対象CIDの領域に「Null」が書き込まれているかかどうか判断する。“YES”なら、つまり、接続対象子機のCIDが登録されていなければ、ステップS55で、Eスロットで指定したスロットで受信した子機CIDを接続対象CIDの領域に登録する。
【0116】
先のステップS53で“NO”のとき、またはステップS55を終えたとき、ステップS57において、プロセサ20は、受信した子機番号CIDが接続対象CIDと同じかどうか判断する。“YES”なら次のステップS59で、図18の領域86のUスロット領域USlotのエントリスロットを示す部分に、その子機番号CIDを格納する。そして、ステップS61で、実接続スロット数nをインクリメント(+1)し、ステップS63で、n=Nかどうか、すなわち、実接続スロット数nが1台の子機に与える最大スロット数Nに達したかどうかを判断する。“YES”なら、その子機にそれ以上のスロット付与は許容できないのでその子機に対するスロット付与を終了し、ステップS65で、領域86内の、接続対象CIDの領域に「Null」を設定するとともに、変数nにゼロ(0)を書き込む。
【0117】
その後、親機のプロセサ20は、ステップS67において、実接続子機数mが最大接続可能子機数Mと等しくなったかどうかを判断する。このステップS67で“YES”が判断されると、つまり、それ以上子機を接続できないと判断したときには、ステップS69において、Eスロット領域ESlotに「ffh」を書き込む。
【0118】
なお、ステップS69の後、または、ステップS51,S57,S63もしくはS67においてそれぞれ“NO”が判断されたときには、いずれの場合にも子機の途中参加処理をやめてゲーム処理に戻る(図22のステップS49に戻る)。
【0119】
以上が、自機にOCモード対応でないカートリッジが装着されている場合で、かつ自機が親機になる場合の携帯ゲーム装置の処理である。
【0120】
次に、自機にOCモード対応のカートリッジが装着されている場合の携帯ゲーム装置の処理を説明する。
【0121】
図19のステップS5において“YES”が判断されたとき、すなわち、自機に図16に示すOCモード対応のカートリッジを装着している場合には、次のステップS71で、プロセサ20は、モード選択画面(図示せず)を表示する。そして、ステップS73において、通常モードが選択されたかどうか判断する。“YES”なら、先のステップS5で“NO”を判断したときと同様に、図20のステップS7に進む。すなわち、OCモード対応でないカートリッジを装着している場合の処理と、OCモード対応のカートリッジを装着しているが通常モードを選択した場合の処理は同じである。
【0122】
自機にOCモード対応のカートリッジが装着されていてかつOCモードのゲームをプレイする場合には、自機は親機にしかなれない。詳しく述べると、ステップS73で“NO”なら、すなわち、OCモードが選択された場合には、次のステップS75において、先のステップS29(図21)と同様に、図27,図28を参照して詳しく説明した親機の接続処理を実行する。ただし、このときには、1台の子機の使用可能スロット数Nは「1」とし(N=1)、最大接続可能台数Mとしては、ゲームで許容されている数を設定する。その後、ステップS77で、プロセサ20は、図16に示す転送用子機プログラム76を子機に転送(ダウンロード)する。その後、図22のステップS31に進み、前述と同様にそれぞれ以降の各ステップを実行する。
【0123】
以上が、自機にOCモード対応のカートリッジが装着されている場合の携帯ゲーム装置の処理である。
【0124】
次に、自機にOCモード対応でないカートリッジが装着されている場合で、かつ自機が子機になる場合の携帯ゲーム装置の処理を説明する。
【0125】
図21のステップS27で“NO”が判断されたときには、つまり自機が親機になるという選択をしなかったときには、続くステップS79において、携帯ゲーム機12のプロセサ20は、操作キー38からの操作信号を検証して、Aボタン(図示せず)が操作されたかどうか、つまり、接続を希望する親機を選択したかどうかを判断する。このステップS79で“YES”を判断ときには、プロセサ20は、続いて、ステップS81において、当該選択した親機との間で通信可能かどうかを判断する。すなわち、親機のカートリッジと自機のカートリッジが所定の関係にあって通信可能かどうかを判断する。通信可能なときには、その後、図24のステップS83に進み、子機の接続処理を実行する。この子機の接続処理は、詳しくは、図30および図31に示される。
【0126】
図30の最初のステップS3001では、子機となった携帯ゲーム機のプロセサ20が、親機パケット(図11)の受信を試みる。そして、次のステップS3003において、メニュー画面(図3等)で選択した親機の、フレーム同期データsyncを受信できたかどうか判断する。具体的には、メニュー画面で選択した親機のPIDを含む親機パケットの同期データsyncを受信できたかどうか判断する。
【0127】
ステップS3003で“NO”が判断されたとき、つまり、選択した親機の親機パケットが受信できなかった場合には、ステップS3005において、タイムアウト(時間切れ)かどうか判断し、このステップS3005で“NO”なら先のステップS3001に戻るが、“YES”なら、ステップS3007で接続結果変数(図18の領域88内の)に「失敗」を書き込んでリターンする。
【0128】
ステップS3003で“YES”が判断されたとき、つまり、対象としている親機の同期信号を受信できたときには、ステップS3009で、子機のプロセサ20は、同期タイマ(領域88)をリセットし、次のステップS3011に進む。このステップS3011では、プロセサ20は、擬似ランダム値を子機のID番号CIDとする。そして、ステップS3013において、このときのCIDを持った子機が既に存在するかどうか判断する。すなわち、受信した親機パケットのUスロットを参照して、同一のCIDが既に存在するかどうか、判断する。ステップS3013で“YES”の場合には一旦付与した番号を変更する必要があり、したがって、この場合には、ステップS3011を再度実行し、新たな番号CIDを付与して、ステップS3013での検証を再度実行する。
【0129】
ステップS3013で“NO”が得られるまでこれらステップS3011およびS3013が繰り返され、“NO”が得られたとき、次のステップS3015に進む。ステップS3015では、実付与スロット数nをゼロ(0)とし、さらに、次のステップS3017で、親機パケットを受信するとともに、ステップS3019において、同期タイマを再度リセットする。そして、ステップS3021において、プロセサ20は、受信した親機パケットのEスロットESlot(図11参照)が「ffh」であるかどうか判断する。このステップS3021で“YES”が判断されると、子機のエントリは禁止されているので、先のステップS3007を経て、「失敗」としてリターンする。
【0130】
ステップS3021で“NO”が判断されたときには、子機のエントリは禁止されてはいないので、図31のステップS3023に進む。ステップS3023では、子機のCPUコアは、そのときの親機パケットのEスロットフィールドESlotで示されるスロットにステップS3011で得た番号CIDを送信する。そして、次のステップS3025において親機パケットを受信するとともに、ステップS3027において同期タイマを再度リセットする。
【0131】
そして、続くステップS3029において、子機のプロセサ20は、受信した親機パケットのUスロットフィールドのエントリスロット位置に自身の番号(CID)があるかどうか確認する。そして、このステップS3029で“NO”を判断すると、次のステップS3031で、プロセサ20は、タイムアウトかどうか判断する。タイムアウトではない場合には、先のステップS3017(図30)に戻るが、タイムアウトを生じた場合には、図30のステップS3007において「失敗」を接続結果変数に書き込んだ後にリターンする。
【0132】
ステップS3029で“YES”が判断されたとき、つまり、受信した親機パケットのUスロットのエントリスロット位置に自身の番号(CID)があったときには、続くステップS3033において実付与スロット数nをインクリメント(+1)した後、ステップS3035において、実付与スロット数nが1台の子機に付与できる最大スロット数N(ただし、このNは、ゲームによって変化し、たとえば1−4の値である。)と等しくなったかどうか判断する。このステップS3035で“NO”が判断されるときには、つまり、スロットが未だ付与できるときには、先のステップS3025に戻って親機パケットを受信する。
【0133】
しかしながら、ステップS3035で“YES”が判断されると、可能な数のスロットがすべて割り付けられたものとして、次のステップS3037において、接続結果変数に「成功」を登録し、次のステップS3039に進む。このステップS3039では、接続した親機の親機番号PIDおよび獲得したスロット番号を自身の内部RAM28(図18)の領域88に格納する。ただし、スロット数は複数の場合もあり、この実施例では「0」−「3」のいずれかの数値である。そして、その後図24のステップS85にリターンする。
【0134】
そのステップS85では、領域88の接続結果変数を参照して、接続結果が「成功」かどうか判断する。そして、“NO”の場合には、次のステップS87において、メッセージたとえば「接続できませんでした」を子機のLCD18(図1)に表示して図20のステップS7に戻る。
【0135】
親機への接続成功の場合には、次のステップS89において、子機のプロセサ20は、親機に対して、自身に付与された子機スロットを利用して、自身のユーザ名およびゲーム名を送信する。そして、ステップS91において、ゲームスタートかどうか、すなわち、操作キー38に含まれるスタートボタンが押されたかどうか判断する。このステップS91でスタートボタンのオンが検出されると、次のステップS93において、子機の送受信処理を実行する。
【0136】
図24のステップS93で示す子機の送受信処理が、図32に詳細に示される。図32のステップS4001で親機パケットを受信し、次のステップS4003で同期タイマ(図18)をリセットする。そして、ステップS4005では、子機のプロセサ20は、送信バッファ92(図18)に未送信データがあるかどうか判断する。“YES”なら、次のステップS4007において、既に割り付けられている子機スロットを用いて、必要なデータ、たとえばCIDおよびペイロードを送信する。そして、未送信データがない場合、またはステップS4007の後、プロセスは、図24のステップS95にリターンする。
【0137】
再び図24に戻って、ステップS95では、子機のプロセサ20は、時間t2以上の間にわたって親機からのデータを受信できなかったかどうか判断する。この時間t2は、先の図22のステップS43での時間t1より短い。すなわち、t1>t2である。なぜなら、t1は親機が通信異常の子機を切断する時間であり、t2は子機が復帰処理を開始する時間であるので、親機は子機の復帰処理を待ってから切断する必要があるためである。“NO”の場合には、さらに次のステップS97で、受信した親機パケットのUスロットフィールドに自身の番号CIDが含まれているかどうか判断する。ステップS97で“YES”の場合には、ステップS99において、図22のゲーム処理を実行する。ただし、ステップS97で“NO”が判断されたときは、すなわち、親機パケットのUスロットフィールドに自機の番号がない場合には、ステップS101において、メッセージたとえば「親機から切断されました」をLCDに表示し、図20のステップS7に戻る。
【0138】
先のステップS95で“YES”が判断されたときには、つまり、一定時間t2以上にわたって親機からのデータを受信できなかったときには、ステップS103においてメッセージたとえば「親機と通信できなくなりました。復帰を試みます」を表示した後、ステップS105で、復帰処理を実行する。
【0139】
この復帰処理の詳細が図33に示されていて、この図33の最初のステップS5001では、子機のプロセサ20は、復帰すべき親機パケットの受信を試みる。そして、ステップS5003では、その親機からのブロードキャストデータを受信できたかどうか判断する。ただし、自分が復帰すべき親機かどうかは、図18の領域88に登録されている「接続先のPID」をみればわかる。
【0140】
ステップS5003で“NO”が判断されたとき、つまり、復帰すべき親機パケットのデータを受信できなかったとき、次のステップS5005で、タイムアウトになったかどうか判断する。そして、“NO”なら、先のステップS5003に戻るが、タイムアウトになってしまったら、次のステップS5007で、図18に示す領域88に含まれる復帰結果変数に「失敗」を書き込み、リターンする。
【0141】
先のステップS5003で“YES”が判断されたとき、すなわち、対象としている親機からの親機パケットを受信できたときには、次のステップS5009で同期タイマをリセットし、さらに、ステップS5011で親機パケットを受信する。そして、ステップS5013において、その親機パケットのUスロットフィールドに自身の番号CIDがあるかどうか判断する。受信した親機パケットに自機の番号があるということは、時間t2以上にわたる通信不能状態の原因は、親機による意図的な切断ではないということであり、したがって、次のステップS5015において、領域88(図18)の復帰結果変数に「成功」を登録してリターンする。このように復帰処理をすることによって、例えば、親機と子機が誤って通信可能範囲を外れた場合や、通信状態が悪くて通信ができなかった場合、または、子機を操作しているプレイヤに用事ができて、その子機プレイヤが少しの間通信可能範囲を外れる必要がある場合等に、それらの要因が解消されて通信が可能になった後に、以前の通信状態に復帰することが可能になる。
【0142】
ただし、ステップS5003で“YES”になってもステップS5013で“NO”が判断されたときには、通信不能が親機の意思による切断が原因であったものとして、先のステップS5007を経て、リターンする。
【0143】
図33のサブルーチンから図24のステップS107にリターンすると、このステップS107では、領域88の復帰結果変数を参照して、復帰が「成功」したかどうか判断する。“YES”なら、ステップS99に進んでゲーム処理を実行する。しかしながら、“NO”なら、ステップS109でメッセージたとえば「復帰できませんでした」を表示した後、図20のステップS7に戻る。
【0144】
以上が、自機にOCモード対応でないカートリッジが装着されている場合で、かつ自機が子機になる場合の携帯ゲーム装置の処理である。
【0145】
次に、自機にカートリッジが装着されていない場合の携帯ゲーム装置の処理を説明する。ただし、この場合には、自機は、OCモード対応のゲームの子機として動作できるだけである。
【0146】
図19に戻って、ステップS3で“NO”が判断されたとき、すなわちその子機にカートリッジがないことを検出した場合は、ブートROM(図1の24)のプログラムであるステップS111において、無線通信ユニット14(図1)のROM52に設定されているOCDプログラム(親機から子機用プログラムをダウンロードするためのプログラム)を携帯ゲーム機12のプロセサ20に含まれるWRAM28に展開し、その後ステップS113において、子機のプロセサ20は、そのWRAM28上に展開されたOCDプログラムを起動する。
【0147】
その後、図25のステップS115において、子機のプロセサ20は、図18に示すような親機リスト領域80をクリアするとともに、親機リストクリアタイマ82をリセットする。ついで、ステップS117において、親機パケットの受信を試みる。そして、ステップS119において、親機パケットの受信が成功したかどうか判断し、“NO”ならステップS125に進み、“YES”なら、ステップS121に進む。ステップS121では、受信した親機パケットに含まれる親機番号PIDと図18に示す親機リスト領域80に登録されている番号PIDとを比較して、その親機パケットを送信した親機が親機リスト内に存在しないかどうか判断する。このステップS121で“YES”が判断されると、ステップS123において、親機リストに新たな親機を登録するように、親機パケットから読み出された、親機番号PID,ユーザ名,ゲーム名,OCフラグおよびEスロットを親機リスト領域80に追加する。その後ステップS125に進む。
【0148】
ステップS125では、ステップS115でリセットした親機リストクリアタイマ82の値が「2秒」以上になったかどうか判断する。“YES”なら、ステップS127で親機リストすなわち親機リスト領域80をクリアするとともに、親機リストクリアタイマ82をリセットする。その後、ステップS125で“NO”を判断した場合と同様に、ステップS127に進む。
【0149】
ステップS127では、親機リストの内、「Eスロットが「ffh」でなくかつOCフラグが「1」である親機、つまり、OCモードでのゲームがプレイできかつ子機の参加(エントリ)を拒否していない親機の情報(ユーザ名,ゲーム名)を表示する。それによって、当該子機のユーザに対して図5に示すような親機リスト18Aを作成し、自機が接続したい親機を選択させる。そして、ステップS131で、Aボタン(図示せず)が操作されたかどうか判断する。つまり、どれか1つの親機が選択されたかどうか判断する。ステップS127で“NO”なら、つまり親機を選択しなかったら、次のステップS133で、操作キー38に含まれる十字キー(図示せず)が操作されたかどうか判断する。十字キーの操作は、エントリを希望する親機の選択のためにカーソルを移動させるためであり、したがって、このステップS133で“YES”なら、次のステップS135でカーソルを移動させ、ステップS113に戻る。
【0150】
ステップS131で“YES”が判断されると、ステップS139に進んで子機の接続処理(図30,図31)を実行する。
【0151】
ステップS137で、既に詳細に説明した方法に従って、子機の接続処理を実行し、次のステップS139で、図18の領域88の接続結果変数を参照して、接続が成功したかどうか判断する。“NO”なら、ステップS141でメッセージたとえば「接続できませんでした」を表示して、ステップS111に戻る。
【0152】
ステップS139で“YES”が判断されると、プロセサ20は、当該子機と成功裏に接続された親機に対して、自機のユーザ名,ゲーム名を送信する。その後、図26のステップS145に進み、OCモードでゲームをプレイするために、転送用子機プログラムを親機から受信して自機のRAM28(図1)内に展開するとともに、そのプログラムを起動させる。そして、その後は、ステップS147において、先に説明した図24ステップS91−S109と同様の各ステップを実行する。
【0153】
以上が、自機にカートリッジが装着されていない場合の携帯ゲーム装置の処理である。
【0154】
なお、図21のステップS81で“NO”が判断されたとき、すなわち、親機の選択を試みたが通信できなかったときには、ステップS149において、メッセージたとえば「その親機は選択できません」を表示して図20のステップS9に戻る。
また、図21のステップS79で“NO”が判断されたとき、つまり、BボタンもAボタンも操作されなかったときには、次のステップS151において、十字キー(図示せず)が操作されたかどうか、判断する。“NO”なら、次のステップS153で、さらにスタートキー(図示せず)が操作されたかどうか判断する。セレクトキーが操作されていないときは、図20のステップS9に戻る。ステップS153で“YES”が判断されたときには、ステップS153で、全表示フラグのオン/オフを切替えた後、同様にステップS9に戻る(すなわち、セレクトキーは全表示フラグのオン/オフの制御に使用される)。ただし、ステップS151で“YES”が判断されたときには、その十字キーの指示に従ってカーソルを移動させた後、ステップS9に戻る。
【0155】
なお、上述の実施例では、プログラムの進行に合わせて自機を親機とするか子機とするかを選択するようにした。しかしながら、直ちにこのような選択をするようにしてもよい。この場合には、図34に示すように、スタート直後の最初のステップS201で親機または子機の選択画面(図示せず)を表示し、その表示に従ってユーザが親機または子機を選択する。したがって、プロセサ20は、次のステップS203で、ユーザが親機を選択したかどうか判断する。ステップS203で“YES”の場合には、それ以後、先の図21のステップS29以降のステップを実行する。“NO”の場合、すなわち子機を選択したときには、図21に示すステップS7−S25,S79,S151−S157,およびS81−S109を実行する。
【図面の簡単な説明】
【図1】図1はこの発明の一実施例の無線送信ゲームシステムに用いられる携帯ゲーム装置の一例を示すブロック図である。
【図2】図2は図1実施例の携帯ゲーム装置を用いたゲームシステムの概略を説明するための図解図である。
【図3】図3は図2実施例において自機の周りのすべての親機の情報を表示する全表示フラグがオンされている場合の表示画面例を示す図解図である。
【図4】図4は図2実施例において、全表示フラグがオンされていない場合において、自機の周りに存在しかつ自機との間で通信ゲームが可能な親機だけを表示する表示画面例を示す図解図である。
【図5】図5は図2実施例において自機の周りに存在しかつOC(ワンカートリッジ)モードでゲームがプレイできる親機のみを表示する表示画面例を示す図解図である。
【図6】図6は図2実施例における或る状況での親機リストの表示画面例を示す図解図である。
【図7】図7は図2実施例において図6の状況でユーザ名「四郎」の携帯ゲーム装置が通信範囲に入ったときの親機リストの表示画面例を示す図解図である。
【図8】図8は図2実施例において図7の状況でユーザ名「一郎」の携帯ゲーム装置が通信範囲外に出たときの親機リストの表示画面例を示す図解図である。
【図9】図9は図2実施例において自機が親機でありかつ子機の接続(エントリ)を待っている状態の子機リストの表示画面例を示す図解図である。
【図10】図10は図2実施例におけるデータサイクルの一例を示す図解図である。
【図11】図11は図10実施例における親機スロットに送出される親機パケットの一例を示す図解図である。
【図12】図12は図11におけるUスロットを詳細に示す図解図である。
【図13】図13は図10実施例における子機スロットに送出される子機パケットの一例を示す図解図である。
【図14】図14は図1実施例の或る状況における通信データの具体例を示す図解図である。
【図15】図15はOCモードには対応しないカートリッジのメモリマップの一例を示す図解図である。
【図16】図16はOCモードに対応するカートリッジのメモリマップの一例を示す図解図である。
【図17】図17は図1実施例の無線通信ユニットに含まれるEEPROMのメモリマップの一例を示す図解図である。
【図18】図18は図1実施例において携帯ゲーム装置を構成する携帯ゲーム機の内部RAMのメモリマップの一例を示す図解図である。
【図19】図19は図1実施例の携帯ゲーム機の動作を示すメインフローの一部を示すフロー図である。
【図20】図20は図19の続きを示すフロー図である。
【図21】図21は図20の続きを示すフロー図である。
【図22】図22は図21の続きを示すフロー図である。
【図23】図23は図22の続きを示すフロー図である。
【図24】図24は図21の続きを示すフロー図である。
【図25】図25は図19の続きを示すフロー図である。
【図26】図26は図25の続きを示すフロー図である。
【図27】図27は親機の接続処理の動作の一部を示すフロー図である。
【図28】図28は図27の続きを示すフロー図である。
【図29】図29は親機の送受信処理の動作を示すフロー図である。
【図30】図30は子機の接続処理の動作の一部を示すフロー図である。
【図31】図31は図30の続きを示すフロー図である。
【図32】図32は子機の送受信処理の動作を示すフロー図である。
【図33】図33は子機の復帰処理の動作を示すフロー図である。
【図34】図34は自機を親機とするか子機とするかの選択を最初に行う実施例の要部を示すフロー図である。
【符号の説明】
10 …携帯ゲーム装置
12 …携帯ゲーム機
14 …無線通信ユニット
16 …カートリッジ
18 …LCD
20 …プロセサ
22 …CPUコア
24 …ブートROM
28 …WRAM
38 …操作キー
42 …ROM
54 …EEPROM
【出願人】 【識別番号】000233778
【氏名又は名称】任天堂株式会社
【住所又は居所】京都府京都市南区上鳥羽鉾立町11番地1
【出願日】 平成14年10月16日(2002.10.16)
【代理人】 【識別番号】100090181
【弁理士】
【氏名又は名称】山田 義人

【公開番号】 特開2004−135778(P2004−135778A)
【公開日】 平成16年5月13日(2004.5.13)
【出願番号】 特願2002−301955(P2002−301955)