(57)【特許請求の範囲】
【請求項１】
複数のゲーム装置を接続して同一のゲームを複数のユーザが同時にプレイできるように構成される通信ゲームシステムであって、
前記複数のゲーム装置は、それぞれ、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理手段と、
前記ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成手段と、
前記データ生成手段によって生成された生成データを全てのゲーム装置との間でやりとりする通信手段と、
未送信の生成データを一時的に保持する送信バッファ手段と、
受信した生成データを一時的に保持する受信バッファ手段と、
前記ゲーム処理手段がある回のゲーム処理を開始するのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する処理ズレ検知手段とを備え、
前記ゲーム処理手段および前記データ生成手段は、前記処理ズレ検知手段によって自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、当回のゲーム処理および生成処理をパスすることを特徴とする、通信ゲームシステム。
【請求項２】
前記処理ズレ検知手段は、前記受信バッファ手段に受信データが保持されていないことを検知することにより自ゲーム装置の処理が通信に対して進んでいることを検知することを特徴とする、請求項１に記載の通信ゲームシステム。
【請求項３】
複数のゲーム装置を接続して同一のゲームを複数のユーザが同時にプレイできるように構成される通信ゲームシステムであって、
前記複数のゲーム装置は、それぞれ、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理手段と、
前記ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成手段と、
前記データ生成手段によって生成された生成データを全てのゲーム装置との間でやりとりする通信手段と、
未送信の生成データを一時的に保持する送信バッファ手段と、
受信した生成データを一時的に保持する受信バッファ手段と、
所定のタイミングで生成データとしてエンドコードを生成するエンドコード生成手段とを備え、
前記データ生成手段は、前記エンドコード生成手段がエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、新たな生成データの生成処理をパスすることを特徴とする、通信ゲームシステム。
【請求項４】
前記所定のタイミングが、ゲーム画面の切り替わりのタイミングを含むことを特徴とする、請求項３に記載の通信ゲームシステム。
【請求項５】
他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置であって、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理手段と、
前記ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成手段と、
前記データ生成手段によって生成された生成データを全てのゲーム装置との間でやりとりする通信手段と、
未送信の生成データを一時的に保持する送信バッファ手段と、
受信した生成データを一時的に保持する受信バッファ手段と、
前記ゲーム処理手段がある回のゲーム処理を開始するのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する処理ズレ検知手段とを備え、
前記ゲーム処理手段および前記データ生成手段は、前記処理ズレ検知手段によって自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、当回のゲーム処理および生成処理をパスすることを特徴とする、ゲーム装置。
【請求項６】
前記処理ズレ検知手段は、前記受信バッファ手段に受信データが保持されていないことを検知することにより自ゲーム装置の処理が通信に対して進んでいることを検知することを特徴とする、請求項５に記載のゲーム装置。
【請求項７】
他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置であって、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理手段と、
前記ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成手段と、
前記データ生成手段によって生成された生成データを全てのゲーム装置との間でやりとりする通信手段と、
未送信の生成データを一時的に保持する送信バッファ手段と、
受信した生成データを一時的に保持する受信バッファ手段と、
所定のタイミングで生成データとしてエンドコードを生成するエンドコード生成手段とを備え、
前記データ生成手段は、前記エンドコード生成手段がエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、新たな生成データの生成処理をパスすることを特徴とする、ゲーム装置。
【請求項８】
前記所定のタイミングが、ゲーム画面の切り替わりのタイミングを含むことを特徴とする、請求項７に記載のゲーム装置。
【請求項９】
コンピュータ読み取り可能な記録媒体であって、他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置に、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理ステップと、
前記ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成ステップと、
前記データ生成ステップにおいて生成された生成データを全てのゲーム装置との間でやりとりする通信ステップと、
未送信の生成データを一時的に保持する送信バッファステップと、
受信した生成データを一時的に保持する受信バッファステップと、
前記ゲーム処理ステップにおいてある回のゲーム処理が開始されるのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する処理ズレ検知ステップとを実行させ、
前記ゲーム処理ステップおよび前記データ生成ステップでは、前記処理ズレ検知ステップにおいて自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、当回のゲーム処理および生成処理をパスすることを特徴とするプログラムを記録した記録媒体。
【請求項１０】
前記処理ズレ検知ステップでは、前記受信バッファステップにおいて受信データが保持されていないことを検知することにより自ゲーム装置の処理が通信に対して進んでいることを検知することを特徴とする、請求項９に記載の記録媒体。
【請求項１１】
コンピュータ読み取り可能な記録媒体であって、他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置に、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理ステップと、
前記ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成ステップと、
前記データ生成ステップにおいて生成された生成データを全てのゲーム装置との間でやりとりする通信ステップと、
未送信の生成データを一時的に保持する送信バッファステップと、
受信した生成データを一時的に保持する受信バッファステップと、
所定のタイミングで生成データとしてエンドコードを生成するエンドコード生成ステップとを実行させ、
前記データ生成ステップでは、前記エンドコード生成ステップにおいてエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、新たな生成データの生成処理をパスすることを特徴とするプログラムを記録した記録媒体。
【請求項１２】
前記所定のタイミングが、ゲーム画面の切り替わりのタイミングを含むことを特徴とする、請求項１１に記載の記録媒体。
【請求項１３】
他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置によって実行されるゲーム処理方法であって、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理ステップと、
前記ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成ステップと、
前記データ生成ステップにおいて生成された生成データを全てのゲーム装置との間でやりとりする通信ステップと、
未送信の生成データを一時的に保持する送信バッファステップと、
受信した生成データを一時的に保持する受信バッファステップと、
前記ゲーム処理ステップにおいてある回のゲーム処理が開始されるのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する処理ズレ検知ステップとを実行させ、
前記ゲーム処理ステップおよび前記データ生成ステップでは、前記処理ズレ検知ステップにおいて自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、当回のゲーム処理および生成処理をパスすることを特徴とする、ゲーム処理方法。
【請求項１４】
他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置によって実行されるゲーム処理方法であって、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理ステップと、
前記ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成ステップと、
前記データ生成ステップにおいて生成された生成データを全てのゲーム装置との間でやりとりする通信ステップと、
未送信の生成データを一時的に保持する送信バッファステップと、
受信した生成データを一時的に保持する受信バッファステップと、
所定のタイミングで生成データとしてエンドコードを生成するエンドコード生成ステップとを実行させ、
前記データ生成ステップでは、前記エンドコード生成ステップにおいてエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、新たな生成データの生成処理をパスすることを特徴とする、ゲーム処理方法。
【請求項１５】
他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置に、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理ステップと、
前記ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成ステップと、
前記データ生成ステップにおいて生成された生成データを全てのゲーム装置との間でやりとりする通信ステップと、
未送信の生成データを一時的に保持する送信バッファステップと、
受信した生成データを一時的に保持する受信バッファステップと、
前記ゲーム処理ステップにおいてある回のゲーム処理が開始されるのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する処理ズレ検知ステップとを実行させ、
前記ゲーム処理ステップおよび前記データ生成ステップでは、前記処理ズレ検知ステップにおいて自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、当回のゲーム処理および生成処理をパスすることを特徴とする、プログラム。
【請求項１６】
他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置に、
ゲームを進行させるために一定周期でゲーム処理を繰り返すゲーム処理ステップと、
前記ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、前記ゲーム処理の周期に応じて繰り返すデータ生成ステップと、
前記データ生成ステップにおいて生成された生成データを全てのゲーム装置との間でやりとりする通信ステップと、
未送信の生成データを一時的に保持する送信バッファステップと、
受信した生成データを一時的に保持する受信バッファステップと、
所定のタイミングで生成データとしてエンドコードを生成するエンドコード生成ステップとを実行させ、
前記データ生成ステップでは、前記エンドコード生成ステップにおいてエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、新たな生成データの生成処理をパスすることを特徴とする、プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、通信ゲームシステムに関し、より特定的には、複数のゲーム装置を接続して同一のゲームを複数のユーザが同時にプレイできるように構成される通信ゲームシステムならびにこの通信ゲームシステムに用いられるゲーム装置、記録媒体、ゲーム処理方法及びプログラムに関する。
【０００２】
【従来の技術】
従来、複数のゲーム機を相互に通信可能に接続し、複数のプレイヤがそれぞれのゲーム機を操作して同時に同じ内容のゲーム（例えば対戦ゲームなど）をプレイすることができるようにした通信ゲームシステムがある。
【０００３】
このような通信ゲームシステムでは、プレイヤによって操作キーから入力される操作データや、プレイヤが特定のキー操作を行うことによって発生した種々のゲームデータが、通信によって一定の周期で他の全てのゲーム機に送信され、各ゲーム機では、通信により受信した自機を含めた全てのゲーム機におけるゲームデータに基づいてゲーム処理を行う。例えば、あるゲーム機のプレイヤがゲーム中のキャラクタＡをジャンプさせるキー操作を行った場合、「キャラクタＡがジャンプする」というゲームデータが全てのゲーム機に送信され、全てのゲーム機がその情報に基づいてゲーム処理を行う。このようにして個々のゲーム機におけるプレイヤのキー操作が他のゲーム機のゲーム内容に反映される。
【０００４】
ゲーム処理では、次回の通信において他機に送信すべきデータが用意される。そして、次回の通信において、再び、ゲーム機間でゲームデータがやりとりされ、その後、各ゲーム機において、このやりとりしたゲームデータに基づいてゲーム処理を行う。通信ゲームが行われている間、以上の動作が繰り返されることになる。
【０００５】
ところで、このような通信ゲームシステムでは、一定の周期でゲーム機間で通信を行い、各ゲーム機において、通信により受信した他のゲーム機および自ゲーム機のゲームデータに基づいてゲーム処理を行う。すなわち、各ゲーム機でゲーム処理に用いられるゲームデータは、全ゲーム機で共通であるため、各ゲーム機におけるゲーム処理の結果は同一となる。こうして各ゲーム機で同一の内容のゲームを楽しむことができる。
【０００６】
【発明が解決しようとする課題】
しかしながら、上記の通信ゲームシステムにおいて、各ゲーム機におけるゲーム内容にズレが生じてしまう不具合が発生する場合がある。以下、そのいくつかの原因について説明する。
【０００７】
一つの原因としては、ゲーム処理の遅れである。前述したように、各ゲーム機では、ある通信において受信したゲームデータに基づいてゲーム処理を行い、その際に次回の通信において他機に送信すべきゲームデータを用意する。しかしながら、ゲーム処理の負荷が一時的に大きくなってしまった場合などでは、次回の通信までにゲーム処理を完了することができず、送信すべきゲームデータを用意できないことになる。その結果、この処理遅延が発生したゲーム機のゲームデータは、他のゲーム機におけるゲーム処理には反映されず、このゲーム機と他のゲーム機との間でゲーム内容にズレが生じてしまう。
【０００８】
別の原因としては、通信の周期と各ゲーム機におけるゲーム処理周期との違いである。ただし、通信周期とゲーム処理周期の違いは、通信とゲーム処理とが完全に同期しているようなゲームシステムにおいては見られず、例えば、各ゲーム機が非同期で個別のタイミングでゲーム処理を行うことを許可しているようなゲームシステムや、通信タイミング自体が一定していないようなシステムにおいて見られる。このような場合、ある通信から次の通信までの期間に、各ゲーム機においてそれぞれゲーム処理が１回行われるということは保証されない。その結果、例えば、あるゲーム機において、ある通信から次の通信までの期間にゲーム処理が全く行われなかった場合には、次の通信で送信すべきゲームデータを用意できないことになり、このゲーム機と他のゲーム機との間でゲーム内容にズレが生じてしまう。また、例えば、あるゲーム機において、ある通信から次の通信までの期間にゲーム処理が２回行われてしまった場合、このゲーム機では、２回目のゲーム処理時に用いるゲームデータは、自ゲーム機のものしかなく、その結果、他ゲーム機のゲームデータが反映されず、このゲーム機と他のゲーム機との間でゲーム内容にズレが生じてしまう。
【０００９】
それ故に、本発明の目的は、特に、通信とゲーム処理とが正確に同期していない通信ゲームシステムにおいて、複数のゲーム機間で確実に同一内容のゲームをプレイすることができる通信ゲームシステムを提供することである。
【００１０】
【課題を解決するための手段および発明の効果】
第１の発明は、複数のゲーム装置を接続して同一のゲームを複数のユーザが同時にプレイできるように構成される通信ゲームシステムであって、複数のゲーム装置は、それぞれゲーム処理手段と、データ生成手段と、通信手段と、送信バッファ手段と、受信バッファ手段と、処理ずれ検知手段とを備える。ゲーム処理手段は、ゲームを進行させるために一定周期でゲーム処理を繰り返す。データ生成手段は、ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、ゲーム処理の周期に応じて繰り返す。通信手段はデータ生成手段によって生成された生成データを全てのゲーム装置との間でやりとりする。送信バッファ手段は未送信の生成データを一時的に保持する。受信バッファ手段は受信した生成データを一時的に保持する。処理ズレ検知手段はゲーム処理手段がある回のゲーム処理を開始するのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する。そして処理ズレ検知手段によって自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、ゲーム処理手段およびデータ生成手段は当回のゲーム処理および生成処理をパスする。
【００１１】
上記のように、第１の発明によれば、各ゲーム装置は、ゲーム処理が通信に対して進んでいることを自ら判断して、適宜、ゲーム処理をパスすることにより、未送信の生成データがどんどん貯まっていく問題が回避され、未送信の生成データを保持しておくために多段のバッファを用意することなく、全ての生成データを確実に送信することができる。よって、より簡素で低コストな通信ゲームシステムを実現することができる。
【００１２】
第２の発明は、第１の発明において、処理ズレ検知手段は、受信バッファ手段に受信データが保持されていないことを検知することにより自ゲーム装置の処理が通信に対して進んでいることを検知することを特徴とする。
【００１３】
上記のように、第２の発明によれば、各ゲーム装置は、受信バッファ手段に受信データが保持されていないことを確認することにより、自ゲーム装置の処理が通信に対して進んでいることを簡単に検知することができる。
【００１４】
第３の発明は、複数のゲーム装置を接続して同一のゲームを複数のユーザが同時にプレイできるように構成される通信ゲームシステムであって、ゲーム処理手段と、データ生成手段と、通信手段と、送信バッファ手段と、受信バッファ手段と、エンドコード生成手段を備える。ゲーム処理手段は、ゲームを進行させるために一定周期でゲーム処理を繰り返す。データ生成手段は、ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、ゲーム処理の周期に応じて繰り返す。通信手段は、データ生成手段によって生成された生成データを他のゲーム装置との間でやりとりする。送信バッファ手段は、未送信の生成データを一時的に保持する。受信バッファ手段は、受信した生成データを一時的に保持する。エンドコード生成手段は、所定のタイミングで生成データとしてエンドコードを生成する。エンドコード生成手段がエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、データ生成手段は、新たな生成データの生成処理をパスする。
【００１５】
上記のように、第３の発明によれば、ゲーム装置間でのエンドコードのやりとりを通じて、処理の遅れているゲーム装置が遅れを回復することができ、その結果、受信した生成データがどんどん貯まっていく問題が回避され、受信した生成データを保持しておくために多段のバッファを用意することなく、全ての受信した生成データを確実にゲーム処理に利用することができる。よって、より簡素で低コストな通信ゲームシステムを実現することができる。
【００１６】
第４の発明は、第３の発明において、所定のタイミングが、ゲーム画面の切り替わりのタイミングを含むことを特徴とする。
【００１７】
上記のように、第４の発明によれば、エンドコードのやりとりを通じて、処理の遅れているゲーム装置が遅れを回復している間、他のゲーム装置が新たな生成データを生成しないのであるが、このタイミングを画面の切り替わりのタイミングとすることにより、ユーザに違和感を感じさせることなく、処理の遅れているゲーム装置が遅れを回復することができる。
【００１８】
第５の発明は、他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置であって、ゲーム処理手段と、データ生成手段と、通信手段と、送信バッファ手段と、受信バッファ手段と処理ズレ検知手段とを備える。ゲーム処理手段は、ゲームを進行させるために一定周期でゲーム処理を繰り返す。データ生成手段は、ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、ゲーム処理の周期に応じて繰り返す。通信手段は、データ生成手段によって生成された生成データを他のゲーム装置との間でやりとりする。送信バッファ手段は、未送信の生成データを一時的に保持する。受信バッファ手段は、受信した生成データを一時的に保持する。処理ズレ検知手段は、ゲーム処理手段がある回のゲーム処理を開始するのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する。処理ズレ検知手段によって自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、ゲーム処理手段およびデータ生成手段は、当回のゲーム処理および生成処理をパスすることを特徴とする。
【００１９】
上記のように、第５の発明によれば、ゲーム装置は、ゲーム処理が通信に対して進んでいることを自ら判断して、適宜、ゲーム処理をパスすることにより、未送信の生成データがどんどん貯まっていく問題が回避され、未送信の生成データを保持しておくために多段のバッファを用意することなく、全ての生成データを確実に送信することができる。よって、より簡素で低コストなゲーム装置を実現することができる。
【００２０】
第６の発明は、第５の発明において、処理ズレ検知手段は、受信バッファ手段に受信データが保持されていないことを検知することにより自ゲーム装置の処理が通信に対して進んでいることを検知することを特徴とする。
【００２１】
上記のように、第６の発明によれば、ゲーム装置は、受信バッファ手段に受信データが保持されていないことを確認することにより、自ゲーム装置の処理が通信に対して進んでいることを簡単に検知することができる。
【００２２】
第７の発明は、他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置であって、ゲーム処理手段と、データ生成手段と、通信手段と、送信バッファ手段と、受信バッファ手段と、エンドコード生成手段とを備える。ゲーム処理手段は、ゲームを進行させるために一定周期でゲーム処理を繰り返す。データ生成手段は、ゲーム処理手段によるゲーム処理に利用するための生成データの生成処理を、ゲーム処理の周期に応じて繰り返す。通信手段は、データ生成手段によって生成された生成データを他のゲーム装置との間でやりとりする。送信バッファ手段は、未送信の生成データを一時的に保持する。受信バッファ手段は、受信した生成データを一時的に保持する。エンドコード生成手段は、所定のタイミングで生成データとしてエンドコードを生成する。エンドコード生成手段がエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、データ生成手段は、新たな生成データの生成処理をパスする。
【００２３】
上記のように、第７の発明によれば、ゲーム装置は他のゲーム装置との間でのエンドコードのやりとりを通じて、処理の遅れを回復することができ、その結果、受信した生成データがどんどん貯まっていく問題が回避され、受信した生成データを保持しておくために多段のバッファを用意することなく、全ての受信した生成データを確実にゲーム処理に利用することができる。よって、より簡素で低コストなゲーム装置を実現することができる。
【００２４】
第８の発明は、第７の発明において、所定のタイミングが、ゲーム画面の切り替わりのタイミングを含むことを特徴とする。
【００２５】
上記のように、第８の発明によれば、ゲーム装置は、エンドコードのやりとりを通じて、処理の遅れている他のゲーム装置が遅れを回復している間、新たな生成データを生成しないのであるが、このタイミングを画面の切り替わりのタイミングとすることで、ユーザに違和感を感じさせることなく、処理の遅れているゲーム装置が遅れを回復するのを待つことができる。
【００２６】
第９の発明は、コンピュータ読み取り可能な記録媒体であって、他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置に、ゲーム処理ステップと、データ生成ステップと、通信ステップと、送信バッファステップと、受信バッファステップと、処理ズレ検知ステップとを実行させるプログラムを記憶している。ゲーム処理ステップでは、ゲームを進行させるために一定周期でゲーム処理を繰り返す。データ生成ステップでは、ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、ゲーム処理の周期に応じて繰り返す。通信ステップでは、データ生成ステップにおいて生成された生成データを他のゲーム装置との間でやりとりする。送信バッファステップでは、未送信の生成データを一時的に保持する。受信バッファステップでは、受信した生成データを一時的に保持する。処理ズレ検知ステップでは、ゲーム処理ステップにおいてある回のゲーム処理が開始されるのに先立って自ゲーム装置の処理が通信に対して進んでいることを検知する。処理ズレ検知ステップにおいて自ゲーム装置の処理が通信に対して進んでいることが検知された場合に、ゲーム処理ステップおよびデータ生成ステップでは、当回のゲーム処理および生成処理をパスする。
【００２７】
上記のように、第９の発明によれば、ゲーム装置は、この記録媒体に記録されたプログラムに従って、ゲーム処理が通信に対して進んでいることを自ら判断して、適宜、ゲーム処理をパスすることにより、未送信の生成データがどんどん貯まっていく問題が回避され、未送信の生成データを保持しておくために多段のバッファを用意することなく、全ての生成データを確実に送信することができる。
【００２８】
第１０の発明は、第９の発明において、処理ズレ検知ステップでは、受信バッファステップにおいて受信データが保持されていないことを検知することにより自ゲーム装置の処理が通信に対して進んでいることを検知することを特徴とする。
【００２９】
上記のように、第１０の発明によれば、ゲーム装置は、この記録媒体に記録されたプログラムに従って、受信バッファステップにおいて受信データが保持されていないことを確認することにより、自ゲーム装置の処理が通信に対して進んでいることを簡単に検知することができる。
【００３０】
第１１の発明は、コンピュータ読み取り可能な記録媒体であって、他のゲーム装置と接続して同一のゲームを複数のユーザが同時にプレイすることのできるゲーム装置に、ゲーム処理ステップと、データ生成ステップと、通信ステップと、送信バッファステップと、受信バッファステップと、エンドコード生成ステップとを実行させるプログラムを記憶している。ゲーム処理ステップでは、ゲームを進行させるために一定周期でゲーム処理を繰り返す。データ生成ステップでは、ゲーム処理ステップにおけるゲーム処理に利用するための生成データの生成処理を、ゲーム処理の周期に応じて繰り返す。通信ステップでは、ゲーム処理ステップによるゲーム処理に利用するための生成データを他のゲーム装置との間でやりとりする。送信バッファステップでは、未送信の生成データを一時的に保持する。受信バッファステップでは、受信した生成データを一時的に保持する。エンドコード生成ステップでは、所定のタイミングで生成データとしてエンドコードを生成する。エンドコード生成ステップにおいてエンドコードを生成してから、互いに接続されている全てのゲーム装置からエンドコードを受信するまでの間、データ生成ステップでは、新たな生成データの生成処理をパスする。
【００３１】
上記のように、第１１の発明によれば、ゲーム装置は、この記録媒体に記録されたプログラムに従って、他のゲーム装置との間でのエンドコードのやりとりを通じて、処理の遅れを回復することができ、その結果、受信した生成データがどんどん貯まっていく問題が回避され、受信した生成データを保持しておくために多段のバッファを用意することなく、全ての受信した生成データを確実にゲーム処理に利用することができる。
【００３２】
第１２の発明は、第１１の発明において、所定のタイミングが、ゲーム画面の切り替わりのタイミングを含むことを特徴とする。
【００３３】
上記のように、第１２の発明によれば、ゲーム装置は、この記録媒体に記録されたプログラムに従って、エンドコードのやりとりを通じて、処理の遅れている他のゲーム装置が遅れを回復している間、新たな生成データを生成しないのであるが、このタイミングを画面の切り替わりのタイミングとすることで、ユーザに違和感を感じさせることなく、処理の遅れているゲーム装置が遅れを回復するのを待つことができる。
【００３４】
【発明の実施の形態】
以下に、図面を参照して、本発明の実施の形態について説明する。
（全体構成）
図１を参照して、本発明の一実施形態に係る通信ゲームシステムの全体構成について説明する。通信ゲームシステムは、４台のゲーム機１００ａ〜１００ｄと通信ケーブル２００とで構成される。ゲーム機１００ａ〜１００ｄは、通信ケーブル２００を介して相互に接続される。各ゲーム機１００ａ〜１００ｄは、プレイヤの操作を受けるための操作部１０ａ〜１０ｄを有する。なお、４台のゲーム機１００ａ〜１００ｄは、いずれも同一の構成であるので、以下の説明において、これらゲーム機やその構成要素を特に区別する必要がない場合には、ゲーム機１００、操作部１０のように符号を付して説明する。また説明を容易にするために、ゲーム機１００ａ〜１００ｄを、それぞれ１号機、２号機、３号機、４号機と称することもある。また本実施形態では、１号機が主動的に通信を開始するため、必要に応じて、１号機を親または親機、２〜４号機をそれぞれ子１、子２、子３、もしくはまとめて子機と称することもある。
【００３５】
（各ゲーム機の構成）
図２を参照して、ゲーム機１００の構成について説明する。ゲーム機１００は、操作部１０と、送信データバッファ２０と、通信データバッファ３０と、通信端子４０と、受信データバッファ５０と、ＣＰＵ６０と、外部ＲＯＭカートリッジ７０と、表示部８０とを備える。通信データバッファ３０は、ＯＵＴエリア３１およびＩＮエリア３２を含む。なお、外部ＲＯＭカートリッジ７０は、ゲーム機１００に対して着脱自在に装着されるゲームプログラム記録媒体であるが、ここでは説明を簡単にするため、ゲーム機１００を構成する一要素であると仮定して説明している。
【００３６】
（各ゲーム機の動作の概略）
ゲーム機１００の各部の動作の概略を説明する。外部ＲＯＭカートリッジ７０は、ゲームを実行するためのプログラムやゲームで用いるデータを記憶するＲＯＭ及びＳＲＡＭから成り、ゲーム機１００は、このゲームプログラムにしたがってゲーム処理やデータ転送処理等を実行する。具体的には、ＣＰＵ６０が、このゲームプログラムにしたがって演算、データ転送等の処理を行うことによってゲームが進行する。
【００３７】
ユーザは、操作部１０の操作キー等を操作することにより、ゲームをプレイする。ＣＰＵ６０は、この操作部１０を通じて入力されたユーザの操作内容等に基づいて、ゲーム処理に利用するためのデータを生成する。ここで、生成データとは、ゲーム処理に利用するためのデータであれば何でもよく、例えば操作キーの状態を示すデータであったり、得点情報に関するデータであったり、キャラクタの動作に係るデータであったり、その他任意のデータであっても構わない。この生成データは、通信に備えて送信データバッファ２０に一時的に格納される。
【００３８】
送信データバッファ２０に一時格納された生成データは、通信処理時に通信データバッファ３０のＯＵＴエリア３１に転送される。通信データバッファ３０は、通信手段として他のゲーム装置に対してゲーム処理に利用するための生成データを送受信するためのバッファであり、通信端子４０を介して通信ケーブル２００に接続される。
【００３９】
通信データバッファ３０のＯＵＴエリア３１に転送された生成データは、所定の通信タイミングにおいて、通信ケーブル２００に接続されている全ゲーム機１００ａ〜１００ｄに送信される。この通信タイミングでは、通信ケーブル２００に接続されている全ゲーム機１００ａ〜１００ｄのそれぞれの生成データが上記のように送信され、その結果、これら全ゲーム機１００ａ〜１００ｄの生成データが、通信によって各ゲーム機の通信データバッファ３０のＩＮエリア３２に一様に格納される。
【００４０】
通信データバッファ３０のＩＮエリア３２に格納された全ゲーム機１００ａ〜１００ｄの生成データは、通信後の割り込み処理により受信データバッファ５０に転送される。受信データバッファ５０は、ＦＩＦＯバッファ（先入れ先出し型バッファ）であり、複数のデータを、格納した順番に関連付けて記憶しておくことができ、これら複数のデータを格納された順番に順次読み出すことができる。
【００４１】
ＣＰＵ６０は、この受信データバッファ５０に転送された全ゲーム機１００ａ〜１００ｄの生成データや、外部ＲＯＭカートリッジ７０に格納されているプログラム及びデータ等とに基づいてゲーム処理を行い、処理結果に基づいて表示部８０にゲーム画面を表示する。
【００４２】
図３に、各ゲーム機１００ａ〜１００ｄの生成データが通信を通じて受信データバッファ５０ａ〜５０ｄに至るまでの流れを模式的に示す。図中の各バッファ部に記載されている１〜４の数字は、それぞれのバッファに格納される生成データが何号機の生成データであるかを示している。
【００４３】
（通信処理）
各ゲーム機１００ａ〜１００ｄのより具体的な動作を説明する前に、まず、ゲーム機間の通信方法について簡単に説明する。本実施形態では、一例として、親機１００ａの主動で通信が行われるものとする。具体的には、親機１００ａの垂直帰線期間（以下、Ｖブランキング期間と称す）の開始タイミングに合わせて親機１００ａによって通信が開始される。通信が開始されると、まず、親機１００ａの通信データバッファ３０ａのＯＵＴエリア３１ａに格納されている親機１００ａの生成データが通信端子４０ａを通じて通信ケーブル２００に出力され、この生成データは、通信ケーブル２００に接続されている全ゲーム機１００ａ〜１００ｄのそれぞれの通信データバッファ３０ａ〜３０ｄのＩＮエリア３２ａ〜３２ｄに格納される。
【００４４】
親機１００ａからのデータ送信が完了すると、続いて子機１００ｂからのデータ送信が開始される。親機１００ａの場合と同様に、子機１００ｂのＯＵＴエリア３１ｂに格納されている子機１００ｂの生成データが、全ゲーム機１００ａ〜１００ｄのそれぞれのＩＮエリア３２ａ〜３２ｄに、先に格納された親機１００ａの生成データに追加されて格納される。以下同様に、子機１００ｃ、子機１００ｄからのデータ送信が順次行われる。こうして全ゲーム機１００ａ〜１００ｄの生成データの送信が完了すると、各ゲーム機１００ａ〜１００ｄのＩＮエリア３２ａ〜３２ｄには全ゲーム機１００ａ〜１００ｄの生成データが揃う。
【００４５】
以上のようにして１回のデータ通信が終了すると、各ゲーム機１００ａ〜１００ｄにおいて後述する通信終了後の割り込み処理（以下、ＳＩＯ割り込み処理と称す）が発生する。ＳＩＯ割り込み処理では、主に、通信データバッファ３０に対する生成データの書き込み及び読み出しが行われる。ＳＩＯ割り込み処理において、通信データバッファ３０のＩＮエリア３２に格納されている全ゲーム機１００ａ〜１００ｄの生成データは、ＦＩＦＯバッファである受信データバッファ５０に転送される。受信データバッファ５０に転送された生成データは、受信データバッファ５０へ格納された順に、ゲーム処理に利用される。
【００４６】
ところで、図４に示すように、本実施形態に係る通信ゲームシステムでは、各ゲーム機がそれぞれ独自のタイミングでゲーム処理を行っている、つまり、４台のゲーム機が非同期で動作している。一方、通信処理は、親のＶブランク開始タイミングに開始される。通信が開始されると、上述のように、全ゲーム機で、通信データバッファ３０内のデータのやりとりが行われる。このとき、子機については、ＣＰＵ６０の処理とは関係なく、ハード的に通信データのやりとりが行われる。したがって、子機は、通信が行われるタイミングを知ることはできない。このような通信システムにおいて、もし仮に子機が好き勝手なタイミングで通信データバッファ３０に対する生成データの書き込みまたは読み出しを行うと、その書き込みまたは読み出しタイミングと通信タイミングとが一致してしまう可能性があり、その結果、生成データが破壊または消失してしまう恐れがある。この問題を防ぐために、本実施形態では、ダミー通信およびＳＩＯ割り込み処理を利用する。以下、その通信方法について簡単に具体的に説明する。
【００４７】
図５に示すように、親機は、Ｖブランクの開始のタイミングで、まずダミー通信を開始する。このダミー通信は、全ゲーム機において、通信後のＳＩＯ割込処理を発生させるためだけに行う通信であって、ここでは意味のあるデータのやり取りは行わない。ダミー通信が終了すると、各ゲーム機においてＳＩＯ割込が発生する。ＳＩＯ割込が発生すると、各ゲーム機はＳＩＯ割込処理を行う。このＳＩＯ割込処理では、前述のように、通信データバッファ３０に対する生成データの書き込みおよび読み出しを行うのであるが、ダミー通信の後のＳＩＯ割込処理では、ゲーム処理において生成されて送信データバッファ２０に格納されている生成データを、通信データバッファ３０のＯＵＴエリア３１に転送する。ここで、ＳＩＯ割込処理は、通信の直後に発生する割込処理であるので、このＯＵＴエリア３１への転送タイミングと通信タイミングとが一致してしまう恐れはなく、前述のような生成データの破壊または消失といった問題を生じることなく、生成データを通信データバッファ３０に安全に書き込むことができる。
【００４８】
親機は、全ゲーム機において、前述の通信データバッファ３０への生成データの書き込みが完了するまで待機した後、この書き込まれた生成データをやりとりすべく、２回目の通信を開始する。ここでの待機時間は、全ゲーム機において確実に生成データが書き込まれるまでの時間を考慮して予め所定の時間に設定される。例えば、ダミー通信後、子機においてＳＩＯ割込処理に優先する割込処理が行われていたり、ＳＩＯ割込の発生に遅延が生じる可能性があり、このような可能性を考慮して待機時間は設定される。２回目の通信では、ダミー通信後のＳＩＯ割込処理において通信データバッファ３０に書き込まれたデータが全ゲーム機間でやりとりされる。その結果、各ゲーム機１００ａ〜１００ｄのそれぞれの通信データバッファ３０のＩＮエリア３２には、全ゲーム機の生成データが格納されている状態となる。この２回目の通信が完了すると、各ゲーム機１００ａ〜１００ｄにおいて再びＳＩＯ割込が発生する。このＳＩＯ割込処理において、各ゲーム機１００ａ〜１００ｄは、それぞれＩＮエリア３２に格納されている全ゲーム機の生成データを受信データバッファ５０に転送する。ここでも、ＩＮエリア３２からデータを読み出すタイミングと通信タイミングとが一致してしまう恐れはなく、前述のような生成データの破壊または消失といった問題を生じることなく、生成データを通信データバッファ３０から安全に読み出すことができる。
【００４９】
なお、ダミー通信とその後の通信の間に待機時間を設定することを利用して、他の生成データの通信も考慮可能である。すなわち、この待機時間と同程度の短時間に生成あるいは取得可能なデータ、例えば操作キーのデータなどは、最初のダミー通信のタイミングにおいて取得して送信データバッファ２０に格納しておくことができる。このようにすれば、次回の通信におけるダミー通信において確実にこのデータは通信データバッファ３０に格納され、当回の２回目の通信で全てのゲーム機の通信データバッファ３０のＩＮエリア３２において受信される。この手法では送信データバッファ２０は１段のみ用意すればよい。
【００５０】
本実施形態に係る通信ゲームシステムでは、上記のようにして、ＳＩＯ割込処理において通信データバッファ３０に対するデータの書き込みおよび読み出しを行うため、生成データが破壊されたりといった問題は生じない。なお、上記の説明では、ダミー通信後、２回目の通信を行うことにより生成データをやりとりするとしたが、ダミー通信後の通信を複数回行うことも可能である。この場合、２回目の通信後のＳＩＯ割込処理において、生成データの読み出しに加えてさらに３回目の通信で送信すべき生成データを通信データバッファ３０に書き込み、この生成データを３回目の通信によってやりとりするようにすればよい。このように、ダミー通信後の通信の回数は任意に設定することが可能であり、それにより、通信データバッファ３０の容量に左右されずに大量の生成データを１回のＶブランク期間でやりとりすることも可能となる。
【００５１】
（処理ズレを吸収する方法）
本実施形態に係る通信ゲームシステムでは、各ゲーム機は、あるゲーム処理において生成データを生成し、この生成データを通信によりやり取りし、次のゲーム処理において、直前の通信により受信した全ゲーム機の生成データに基づいて処理を行い、再び生成データを生成するという処理を繰り返すことにより、ゲームが進行する。しかしながら、本実施形態では、各ゲーム機の処理が同期していないため、ゲーム処理を行おうとしたときに、そのゲーム処理で用いるはずの全ゲーム機の生成データがまだ受信できていないという状況が生じうる。以下に、その場合の対処方法について説明する。
【００５２】
図６に、親機および２台の子機における通信タイミングとゲーム処理タイミングの一例を示す。子１は、通信Ｔ１において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ１ａを行う。同様に、通信Ｔ２において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ１ｂを行い、通信Ｔ３において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ１ｃを行い、通信Ｔ４において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ１ｄを行う。このように、通信の周期とゲーム処理の周期が完全に一致している場合には、特に問題が生じることなくゲームを進行することができる。
【００５３】
一方、子２は、親とのクロック周波数の微妙なズレ等によって、図６に示すように、通信の周期に対してゲーム処理の周期が若干短くなっている。子２は、通信Ｔ１において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ２ａを行う。同様に、通信Ｔ２において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ２ｂを行い、通信Ｔ３において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ２ｃを行う。
【００５４】
ところが、子２は、このゲーム処理Ｇ２ｃを行った後、通信Ｔ４が行われる前に、ゲーム処理Ｇ２ｄを迎えてしまう。ここでゲーム処理Ｇ２ｄを行うと、そのゲーム処理Ｇ２ｄにおいて新たに生成された生成データを送信データバッファ２０に格納することになるが、この送信データバッファ２０には、ゲーム処理Ｇ２ｃにおいて生成された生成データがまだ送信されずに格納されたままであり、この生成データが上書きにより消失してしまうことになる。従来から、この問題を解決するために複数段の送信データバッファを用意する方法が知られている。しかしながら、ゲーム周期が若干短いゲーム機（この場合子２）では、限りなく送信データバッファの段数を増やさねばならなる。更に送信データバッファにデータが多く溜まった場合、送信すべきデータが遅れて送信されることとなり、引いてはゲームのレスポンスが悪くなってしまう。このため、本実施形態では、ゲーム処理Ｇ２ｄを行わないことにより、この問題に対処する。これにより、ゲーム処理Ｇ２ｃにおいて生成された生成データは、上書きにより消失することなく通信Ｔ４において送信される。その後、子２では、通信Ｔ４において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ２ｅを行う。
【００５５】
このように、本実施形態に係る通信ゲームシステムでは、特徴的な処理として、各ゲーム機は、あるゲーム処理を行う際に、前回のゲーム処理以降に通信が行われたか否かを判断し、通信が行われていない場合にはゲーム処理を行わないという処理を行う。これにより、ゲーム処理周期の短いゲーム機が、他のゲーム機に対して処理がどんどん早くなってしまうという問題が回避されるとともに、送信データバッファ２０を多数段設けなくともデータ消失が起こらないため、必要なバッファ容量を低減できるという利点がある。
【００５６】
なお、あるゲーム処理を行う際に、前回のゲーム処理以降に通信が行われたか否かを判断するための方法としては種々の方法が考えられる。例えば、通信データバッファ３０のＩＮエリア３２に受信データが存在するか否かにより、これを判断することができる。また例えば、通信データバッファ３０のＯＵＴエリア３１に送信データが残ったままであるか否かにより判断することもできる。また例えば、フラグ等を用いて、前回のゲーム処理以降に通信が行われたか否かを判断することもできる。
【００５７】
以上では、ゲーム処理の周期が通信の周期よりも短い場合について述べたが、逆に、ゲーム処理の周期が通信の周期よりも長い場合や、一時的な処理負荷の増大等によってゲーム処理が通常の処理期間で完了しなかった場合のように、通信に対してゲーム処理が遅れる場合も生じうる。図７に示す子１が前者の様子を示しており、図７に示す子２が後者の様子を示している。
【００５８】
図７において、子１は、通信Ｔ１において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ１ａを行う。同様に、通信Ｔ２において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ１ｂを行う。ところが、通信Ｔ３において受信した全ゲーム機の生成データに基づくゲーム処理が行われる前に、通信Ｔ４を迎える。しかしながら、通信Ｔ３において受信した全ゲーム機の生成データは、通信Ｔ３直後のＳＩＯ割込処理において受信データバッファ５０に格納されており、さらに、通信Ｔ４において受信した全ゲーム機の生成データは、通信Ｔ４直後のＳＩＯ割込処理においてこの受信データバッファ５０に追加されるので、受信データが消失することはなく、子１は、ゲーム処理Ｇ１ｃにおいて、通信Ｔ３において受信した全ゲーム機の生成データに基づいてゲーム処理を行い、以下、受信データバッファ５０に格納された順番で順次ゲーム処理が実行される。
【００５９】
一方、図７において、子２は、通信Ｔ１において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ２ａを行う。同様に、通信Ｔ２において受信した全ゲーム機の生成データに基づいてゲーム処理Ｇ２ｂを行う。ところが、子２は、ゲーム処理Ｇ２ｂにおける処理負荷が大きく、通信Ｔ４の後までゲーム処理Ｇ２ｃを開始することができない。しかしながら、通信Ｔ３において受信した全ゲーム機の生成データは、通信Ｔ３直後のＳＩＯ割込処理において受信データバッファ５０に格納されており、さらに、通信Ｔ４において受信した全ゲーム機の生成データは、通信Ｔ４直後のＳＩＯ割込処理においてこの受信データバッファ５０に追加されるので、受信データが消失することはなく、子２は、ゲーム処理Ｇ２ｃにおいて、通信Ｔ３において受信した全ゲーム機の生成データに基づいてゲーム処理を行い、以下、受信データバッファ５０に格納された順番で順次ゲーム処理が実行される。
【００６０】
以上のように、本実施形態に係る通信ゲームシステムでは、受信データバッファ５０にＦＩＦＯバッファを用いているため、通信終了毎に受信データを受信データバッファ５０に追加格納することで、全ての受信データは、消失することなく確実にゲーム処理に利用される。
【００６１】
（受信データバッファにデータが貯まり過ぎるのを防ぐ方法）
上記のように、通信に対してゲーム処理が遅れたゲーム機では、受信データバッファ５０に、遅れに応じて順次受信データが貯まっていくことになる。これに対応するためには、単に受信データバッファ５０のＦＩＦＯの段数を増やすことで対応することも可能であるが、もしも用意したＦＩＦＯの段数と同じ数の受信データが貯まっている状態でさらなる受信データを格納してしまうと受信データが損失してしまうことになるため、単にＦＩＦＯの段数を増やすだけでは確実性に欠ける。そこで、本実施形態に係る通信ゲームシステムでは、このように受信データバッファ５０に受信データがどんどん貯まってしまうのを回避するため、ゲーム機間で、適当なタイミングでエンドコードのやりとりを行う。このエンドコードのやり取りを通じて、処理の遅れているゲーム機が、貯まった受信データを用いたゲーム処理を完了するまでの間、他のゲーム機は、新たな生成データを生成することなく、遅れているゲーム機の生成データを用いてゲーム処理のみを続ける。以下、図８を参照して、このエンドコードを用いる処理について具体的に説明する。
【００６２】
図８は、１フレームに送るデータを一組とし、各ゲーム機が、仮にゲームがスタートしてから２０００組のデータを送った後にエンドコードを送信する場合の、各フレームにおける各ゲーム機の送信データを示している。図８のｎフレーム目において、親および子１は、自機の１９９９組目の生成データを送信しており、子２は、１９９８組目の生成データを、子３は、１９９７組目の生成データを送信している。つまり、この段階で、子２は親から１フレーム、子３は親から２フレーム遅れている。親から処理が遅れていない子１は、通信後のＳＩＯ割込処理において受信データバッファ５０に全ゲーム機の生成データが格納され、次のゲーム処理においてこの生成データが読み出されるといった処理が繰り返される。つまり、子１では、受信データバッファ５０には、多くとも１組の生成データしか格納されていない状態である。一方、子２では、受信データバッファ５０には、常に１組の生成データが格納されており、最大で２組の生成データが格納されている状態である。また、子３では、受信データバッファ５０には、常に２組の生成データが格納されており、最大で３組の生成データが格納されている状態である。
【００６３】
図８において、親および子１は、ｎ＋１フレーム目において、２０００組目の生成データを送信し、続くｎ＋２フレーム目では、エンドコードを送信する。エンドコード送信後は、全てのゲーム機からエンドコードを受信するまでの間、データ「０」を送信し続ける。つまり、この間は、他ゲーム機から送信されてきた生成データに基づくゲーム処理を続けつつ、自ゲーム機の生成データを生成することなく処理を進める。こうして、他の処理が遅れているゲーム機が、受信データバッファ５０に貯まったデータを処理し終えるのを待つ。一方、子２および子３は、親および子１が２０００組目の生成データを送信し終えた後も、受信データバッファ５０に貯まった生成データをもとにゲーム処理を続ける。
【００６４】
子２は、ｎ＋２フレーム目において２０００組目の生成データを送信し終え、ｎ＋３フレーム目においてエンドコードを送信し、以降、全ゲーム機からのエンドコードが揃うまで、データ「０」を送信し続ける。子３は、ｎ＋３フレーム目において２０００組目の生成データを送信し終え、ｎ＋４フレーム目においてエンドコードを送信する。この時点で、全てのゲーム機の受信データバッファ５０には、生成データが一つも残っていない状態となる。ｎ＋４フレーム目において子３がエンドコードを送信したことにより、ｎ＋５フレーム目では、全てのゲーム機において、全てのゲーム機からのエンドコードが受信されることになり、その時点で各ゲーム機はゲーム処理を再開する。こうしてｎ＋６フレーム目では、全てのゲーム機が１組目の生成データを送信することになる。
【００６５】
このように、適宜のタイミングでエンドコードを用いて処理を揃えることにより、受信データバッファ５０に受信データがどんどんたまっていく問題を解消することができる。なお、上記の例では、エンドコードを挿入するタイミングは、２０００組の生成データを送信した後としたが、これに限らず、任意のタイミングで挿入しても構わない。ただし、エンドコードによる瞬間的な処理の中断を目立たないようにするためには、例えばゲーム画面の切り替え時やゲーム画面に動きがない時などに挿入するのが好ましい。また、何らかの原因によって、受信データバッファ５０に受信データの数が貯まっていく速度が大きい場合には、それに応じてエンドコードの挿入間隔を短くすればよい。
【００６６】
（ＣＰＵの処理）
以下、フローチャートを参照して、本実施形態に係る通信ゲームシステムにおけるゲーム機１００のＣＰＵ６０の動作について説明する。
【００６７】
図９に示すように、ゲームプログラムを開始すると、ＣＰＵ６０は、ステップＳ１００で、初期設定を行い、ステップＳ２００に進む。ステップＳ２００で、受信データバッファ５０に受信データが存在するか否かを判定し、受信データが存在する場合にはステップＳ３００に進み、受信データが存在しない場合にはステップＳ４００に進む。ステップＳ２００で、ゲームプログラムや受信データ等に基づいてゲーム処理を行う。ゲーム処理は、基本的には１フレーム（１／６０秒）内に実行される処理である。ゲーム処理が終わると、ステップＳ４００で、Ｖブランク待ち処理を行う。このＶブランク待ち処理では、１／６０秒の周期で発生するＶブランキング期間の開始まで待ってからサウンド処理等の所定の処理を実行する。Ｖブランク待ち処理が終わると、ステップＳ５００で、ゲーム終了の判断を行い、ゲームが続行する場合にはステップＳ２００に戻り、続行しない場合には処理を終了する。つまり、Ｖブランキング期間を待ってからＶブランク待ち処理における所定の処理を実行し、そしてゲーム処理が行われ、その後、再びＶブランキング期間を待つという動作の繰り返しにより、ＣＰＵ６０の処理は進行する。
【００６８】
各ゲーム機１００ａ〜１００ｄは、それぞれ図９に示すフローチャートに従って動作するが、Ｖブランキング期間の開始時およびデータ通信の終了時には、それぞれ後述するＶブランク割り込み処理およびＳＩＯ割り込み処理が発生する。また、親機では、ダミー通信の次の通信を開始するためのタイマ割込処理がさらに発生する。
【００６９】
図１０を参照して、Ｖブランク割り込み処理について説明する。Ｖブランク割り込み処理では、ＣＰＵ６０は、まずステップＳ６０２で、通常のゲーム装置において一般的に実行されるサウンドの処理やＶブランクの処理を行い、ステップＳ６０４に進む。ステップＳ６０４で、自機が親機かどうかを判断し、親機である場合にはステップＳ６０６に進み、子機である場合には処理を終了する。ステップＳ６０６で、ゲーム機１００ａ〜１００ｄ間のデータ通信処理をスタートさせ、その後、処理を終了する。なお、ここでスタートさせる通信は、図５に示したダミー通信である。
【００７０】
このように、Ｖブランク割り込み処理では、親機１００ａがデータ通信を開始するための処理が実行される。つまり、親機のＶブランキング期間の開始タイミングに合わせてデータ通信が実行されることになる。なお、本実施形態では親機１００ａのＶブランキング期間の開始タイミングに合わせて親機１００ａがデータ通信を開始するとしたが、これは一例であって、その他の任意のタイミングでデータ通信を開始しても構わないし、さらには、データ通信制御機能を有する装置を別途設け、この装置がデータ通信を開始するようにしても構わない。
【００７１】
次に、図１１を参照して、ＳＩＯ割り込み処理について説明する。ＳＩＯ割り込み処理は、親機１００ａによって開始された通信が完了した時点で各ゲーム機１００ａ〜１００ｄにおいて発生する割り込み処理である。
【００７２】
ＳＩＯ割り込み処理では、ＣＰＵ６０は、ステップＳ７０２で、この割込処理の直前の通信がダミー通信であるか否かを判定し、ダミー通信である場合にはステップＳ７０４に進み、ダミー通信でない場合、つまりダミー通信に後続する通信である場合にはステップＳ７１０に進む。直前の通信がダミー通信であるか否かを判定するための方法としては、種々の方法が考えられる。一例として、通信回数をカウントするための変数を用意しておき、通信が終了する毎にこの変数の値をインクリメントするとともに、ダミー通信に続く通信が完了した時点でリセットするようにし、この変数の値に基づいてダミー通信であるか否かを判定することができる。
【００７３】
直前の通信がダミー通信であった場合は、ステップＳ７０４で、送信データバッファ２０に格納されている生成データを通信データバッファ３０のＯＵＴエリア３１へ転送し、ステップＳ７０６に進む。ステップＳ７０６で、自機が親機であるか否かを判断し、親機である場合にはステップＳ７０８に進み、子機である場合には処理を終了する。ステップＳ７０８で、タイマのカウントをスタートさせ、処理を終了する。このタイマは、親機がダミー通信の次の通信を開始するまでの時間をカウントするためのものである。
【００７４】
一方、直前の通信がダミー通信でない場合には、ステップＳ７１０で、直前の通信によって通信データバッファ３０のＩＮエリア３２に格納されている全ゲーム機の生成データを受信データバッファ５０に格納し、処理を終了する。
【００７５】
次に、図１２を参照して、タイマ割込処理について説明する。このタイマ割込処理は、親機にのみ発生する処理であり、図１１のフローチャートのステップＳ７０８でスタートされたタイマが所定時間をカウントしたときに発生する割込処理である。タイマ割込処理では、ＣＰＵ６０は、ステップＳ８０２で、通信をスタートし、ステップＳ８０４に進む。ここでスタートする通信は、ダミー通信に後続する通信、つまり図５に示す２回目の通信である。その後、ステップＳ８０４で、タイマをリセットし、処理を終了する。
【００７６】
なお、本来、通信データバッファ３０へのデータの書き込み及び通信データバッファ３０からのデータの読み出しは、任意のタイミングで行っても構わない。しかしながら、通信データバッファ３０に対するデータの読み書きとデータ通信とが同時に行われることによって生じるハード的なエラーを回避するためには、通信データバッファ３０に対するデータの読み書きは、本実施形態のようにデータ通信完了直後に実行されるのが好ましい。
【００７７】
以上のように、本実施形態では、親機１００ａのＶブランキング期間の開始のタイミングに親機１００ａがダミー通信を開始し、ダミー通信の終了後、各ゲーム機１００ａ〜１００ｂは、ＳＩＯ割込処理において、後続する通信において送信すべき生成データを通信データバッファ２０のＯＵＴエリア３１に転送する。その後、親機１００ａは、一定の時間をカウントした後、タイマ割込処理において２回目の通信を開始する。各ゲーム機１００ａ〜１００ｄは、この２回目の通信後のＳＩＯ割込処理において、通信データバッファ３０のＩＮエリア３２に格納されている受信データを受信データバッファ５０に転送する。前述したように、受信データバッファ５０は、先入れ先出し型のいわゆるＦＩＦＯバッファであり、受信されたデータは、受信データバッファ５０に順序づけられて記憶され、格納された順番で順次ゲーム処理に利用される。
【００７８】
以上のように、本実施形態によれば、各ゲーム機は、受信データバッファ５０に受信データが無いことでもって自ゲーム機の処理が進んでいることを自ら察知し、適宜ゲーム処理をパスする。これにより、処理が早いゲーム機、つまりゲーム処理の周期が通信の周期よりも短いゲーム機において、未送信のデータがどんどん貯まってしまうという問題が解消されるため、送信側に多段のバッファを設けることなしに、全ての生成データを確実に送信することができる。よって、必要なバッファ容量が低減するため、ゲーム機の構成を簡素化し、コストを低減することができる。
【００７９】
また、ゲーム機間で特定のタイミングでエンドコードをやりとりすることにより、処理が遅いゲーム機、つまりゲーム処理の周期が通信の周期よりも長いゲーム機あるいは処理遅延が生じたゲーム機において、受信データバッファ５０に、ゲーム処理にまだ利用していないデータがどんどん貯まってしまうという問題を解消することができる。その結果、受信側に多段のバッファを設けることなしに、全ての受信データを確実にゲーム処理に利用することができる。よって、必要なバッファ容量が低減するため、ゲーム機の構成を簡素化し、コストを低減することができる。
【００８０】
また、以上のように、各ゲーム機において生成されたデータは、確実に全ゲーム機に送信され、また送信先の全てのゲーム機は、受信した生成データを、受信した順番で確実にゲーム処理に利用することができるので、ゲーム機間で、ゲーム内容に差が生じることはない。
【００８１】
なお、本実施形態では、複数のゲーム機１００ａ〜１００ｄが通信ケーブル２００を介して接続される構成としたが、これに限らず、例えば、ゲームプログラムに従って動作する複数のコンピュータ端末をそれぞれネットワークに接続し、ネットワークを介して端末間でデータ通信を行うようにしても構わない。また、ゲーム機間で無線通信するようにしても構わない。
【００８２】
また、本実施形態において説明した種々の動作は、外部ＲＯＭカートリッジ７０内に格納されているゲームプログラムに従ってＣＰＵ６０が実行するとしたが、これに限らず、例えば、ゲームプログラムをゲーム機自体が格納するようにしても構わないし、一部の動作をハードウェアによって処理するようにしても構わない。また、複数のゲーム機が同時に同じ内容のゲームを処理する場合に、外部ＲＯＭカートリッジ７０を各々のゲーム機に挿入しても良いし、いずれか一台のゲーム機のみに挿入してゲームをプレイ可能なシステムにおいて使用しても構わない。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る通信ゲームシステムの全体構成図である。
【図２】ゲーム機１００の構成を示すブロック図である。
【図３】各ゲーム機の生成データの流れを示す図である。
【図４】各ゲーム機が非同期で動作している場合のシステム全体の動作を説明するための図である。
【図５】通信処理について詳細に説明するための図である。
【図６】ゲーム処理の周期が通信の周期よりも早い場合のゲーム機の動作について説明するための図である。
【図７】ゲーム処理の周期が通信の周期よりも遅い場合、および処理遅延が生じた場合のゲーム機の動作について説明するための図である。
【図８】エンドコードを利用するときの各ゲーム機の動作およびその効果について説明するための図である。
【図９】ＣＰＵ６０のメインの動作を示すフローチャートである。
【図１０】Ｖブランク割り込み処理時のＣＰＵ６０の動作を示すフローチャートである。
【図１１】ＳＩＯ割り込み処理時のＣＰＵ６０の動作を示すフローチャートである。
【図１２】タイマ割込処理時のＣＰＵ６０の動作を示すフローチャートである。
【符号の説明】
１０  操作部
２０  送信データバッファ
３０  通信データバッファ
３１  ＯＵＴエリア
３２  ＩＮエリア
４０  通信端子
５０  受信データバッファ
６０  ＣＰＵ
７０  外部ＲＯＭカートリッジ
８０  表示部
１００  ゲーム機
２００  通信ケーブル
【図１】
0005059263.tif 000002
【図２】
0005059263.tif 000003
【図３】
0005059263.tif 000004
【図４】
0005059263.tif 000005
【図５】
0005059263.tif 000006
【図６】
0005059263.tif 000007
【図７】
0005059263.tif 000008
【図８】
0005059263.tif 000009
【図９】
0005059263.tif 000010
【図１０】
0005059263.tif 000011
【図１１】
0005059263.tif 000012
【図１２】
0005059263.tif 000013