(57)【要約】【課題】ゲームシステム全体における処理の効率を向上させる。【解決手段】ゲームプログラムは、プロセッサに、第１データの送信から第２データの受信までに要する通信時間を、ユーザ端末（１００Ａ，１００Ｂ）ごとに特定することによって、複数の通信時間を特定するステップ（Ｓ３）と、特定された複数の通信時間に基づいて、複数のユーザ端末（１００Ａ，１００Ｂ）が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成するステップ（Ｓ４）と、生成された時間情報を複数のユーザ端末（１００Ａ，１００Ｂ）に送信するステップ（Ｓ５）とを実行させる。【選択図】図３
2020062106.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサを備えるサーバにおいて実行されるゲームプログラムであって、
前記ゲームプログラムは、前記プロセッサに、
複数のユーザ端末に第１データを送信するステップと、
前記複数のユーザ端末のそれぞれが前記第１データの受信に応答して第２データを受信するステップと、
前記第１データの送信から前記第２データの受信までに要する通信時間を、前記ユーザ端末ごとに特定することによって、複数の通信時間を特定するステップと、
特定された前記複数の通信時間に基づいて、前記複数のユーザ端末が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成するステップと、
生成された前記時間情報を前記複数のユーザ端末に送信するステップとを実行させる、ゲームプログラム。
【請求項２】
前記ゲームプログラムは、前記プロセッサに、
前記時間情報の送信後、前記複数のユーザ端末にゲームを開始させるステップと、
前記複数のユーザ端末のうちの第１ユーザ端末が第１ユーザから受け付けた第１操作の内容を表す第１操作情報を、前記第１ユーザ端末から受信するステップと、
前記第１操作情報を、前記複数のユーザ端末のうちの前記第１ユーザ端末以外の各ユーザ端末に送信するステップと、
前記複数のユーザ端末のうちの第２ユーザ端末が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、前記第２ユーザ端末から受信するステップと、
前記第２操作情報を、前記複数のユーザ端末のうちの前記第２ユーザ端末以外の各ユーザ端末に送信するステップと、
前記第２ユーザ端末が前記第２操作を受け付けた後から前記第１時間が経過するまでの間に前記第２操作情報を受信しなかった場合に前記第２操作情報を受信するまでの間に前記ゲームを停止させる前記第１ユーザ端末であった、前記ゲームの停止発生状況が所定の条件を満たす前記第１ユーザ端末から、前記第１時間の増加を要求するための要求情報を受信するステップと、
前記要求情報の受信に応答して、前記時間情報を、より長い前記第１時間を表す時間情報に変更するステップと、
変更後の前記時間情報を、前記複数のユーザ端末に送信するステップとを実行させる、請求項１に記載のゲームプログラム。
【請求項３】
前記第１操作情報を受信するステップでは、現フレームにおいて受け付けられた前記第１操作の内容を表す前記第１操作情報と、前記現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた前記第１操作の内容を表す各前記第１操作情報とを含む複数の第１操作情報を、フレームごとに受信し、
前記第１操作情報を送信するステップでは、前記複数の第１操作情報をフレームごとに送信し、
前記第２操作情報を受信するステップでは、現フレームにおいて受け付けられた前記第２操作の内容を表す前記第２操作情報と、前記現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた前記第２操作の内容を表す各前記第２操作情報とを含む複数の第２操作情報を、フレームごとに受信し、
前記第２操作情報を送信するステップでは、前記複数の第２操作情報をフレームごとに送信し、
前記要求情報を受信するステップでは、前記停止発生状況が所定の条件を満たすフレームにおいて前記ゲームを停止させる前記第１ユーザ端末であって、基準フレーム数に対する前記ゲームを停止させたフレーム数の割合である停止発生率を前記停止発生状況として特定すると共に前記停止発生率が閾値以上になった場合に前記要求情報を送信する前記第１ユーザ端末から前記要求情報を受信する、請求項２に記載のゲームプログラム。
【請求項４】
前記変更するステップでは、前記時間情報を、前記第１時間に１フレーム分の時間を加算した時間を表す時間情報に変更する、請求項３に記載のゲームプログラム。
【請求項５】
前記第１操作情報を受信するステップでは、前記第１操作情報を、送達確認を行わない第１通信プロトコルに従う第１通信により受信し、
前記第１操作情報を送信するステップでは、前記第１操作情報を、前記第１通信により送信し、
前記第２操作情報を受信するステップでは、前記第２操作情報を、前記第１通信により受信し、
前記第２操作情報を送信するステップでは、前記第２操作情報を、前記第１通信により送信し、
前記要求情報を送信するステップでは、前記要求情報を、送達確認を行う第２通信プロトコルにより受信する、請求項２〜４のいずれか１項に記載のゲームプログラム。
【請求項６】
前記第１時間を特定するステップでは、前記複数の通信時間のうち最も大きい通信時間を、前記第１時間として特定する、請求項１〜５のいずれか１項に記載のゲームプログラム。
【請求項７】
前記要求情報を受信するステップにおいて、前記第１時間が上限時間に達している場合、前記第１ユーザ端末から前記要求情報を受信しない、請求項２〜５のいずれか１項に記載のゲームプログラム。
【請求項８】
プロセッサを備えるユーザ端末において実行されるゲームプログラムであって、
前記ゲームプログラムは、前記プロセッサに、
複数のユーザ端末がゲームを互いに同期して進行させるために用いる第１時間を表す時間情報を、サーバから受信するステップと、
前記ユーザ端末に対する第１操作を、第１ユーザから受け付けるステップと、
前記第１操作の内容を表す第１操作情報を、前記サーバに送信するステップと、
第２ユーザ端末が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、前記サーバから受信するステップと、
前記第１操作と、前記第１操作と同一の時点に受け付けられた前記第２操作を表す前記第２操作情報とに基づいて、前記ゲームを進行させるステップと、
前記第２ユーザ端末が前記第２操作を受け付けた後から前記第１時間が経過するまでの間に前記第２操作情報を受信しなかった場合、前記第２操作情報を受信するまでの間、前記ゲームを停止させるステップと、
前記ゲームを停止させた場合、前記ゲームの停止発生状況を特定するステップと、
前記停止発生状況が所定の条件を満たす場合、前記第１時間の増加を要求するための要求情報を前記サーバに送信するステップとを実行させる、ゲームプログラム。
【請求項９】
前記第１操作を受け付けるステップでは、前記第１操作をフレームごとに受け付け、
前記第１操作情報を送信するステップでは、現フレームにおいて受け付けられた前記第１操作の内容を表す前記第１操作情報と、前記現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた前記第１操作の内容を表す各前記第１操作情報とを含む複数の第１操作情報を、フレームごとに送信し、
前記第２操作情報を受信するステップでは、現フレームに受け付けられた前記第２操作の内容を表す前記第２操作情報と、前記現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた前記第２操作の内容を表す各前記第２操作情報とを含む複数の第２操作情報を、フレームごとに受信し、
前記停止させるステップでは、前記第２操作情報を受信するまでの間、フレームごとに前記ゲームを停止させ、
前記特定するステップでは、基準フレーム数に対する前記ゲームを停止させたフレーム数の割合である前記ゲームの停止発生率を、前記停止発生状況として特定し、
前記要求情報を送信するステップでは、前記停止発生率が閾値以上になった場合、前記要求情報を送信する、請求項８に記載のゲームプログラム。
【請求項１０】
前記第１操作情報を送信するステップでは、前記ゲームが停止した場合、前回送信した前記複数の第１操作情報と同一の複数の第１操作情報を送信する、請求項９に記載のゲームプログラム。
【請求項１１】
前記第１操作情報を送信するステップでは、前記第１操作情報を、送達確認を行わない第１通信プロトコルに従う第１通信により送信し、
前記第２操作情報を送信するステップでは、前記第２操作情報を、前記第１通信により送信し、
前記要求情報を送信するステップでは、前記要求情報を、送達確認を行う第２通信プロトコルにより受信する、請求項８〜１０のいずれか１項に記載のゲームプログラム。
【請求項１２】
前記ゲームを進行させるステップでは、前記第１操作が受け付けられた第１時点から前記第１時間が経過した第２時点に、前記第１時点において受け付けられた前記第１操作を表す前記第１操作情報と、前記第１時点において受け付けられた前記第２操作を表す前記第２操作情報とに基づいて、前記ゲームを進行させる、請求項８〜１１のいずれか１項に記載のゲームプログラム。
【請求項１３】
前記要求情報を送信するステップにおいて、前記第１時間が上限時間に達している場合、前記要求情報を送信しない、請求項８〜１２のいずれか１項に記載のゲームプログラム。
【請求項１４】
プロセッサを備えるサーバがゲームプログラムを実行する方法であって、
前記方法は、前記プロセッサが、
複数のユーザ端末に第１データを送信するステップと、
前記複数のユーザ端末のそれぞれが前記第１データの受信に応答して第２データを受信するステップと、
前記第１データの送信から前記第２データの受信までに要する通信時間を、前記ユーザ端末ごとに特定することによって、複数の通信時間を特定するステップと、
特定された前記複数の通信時間に基づいて、前記複数のユーザ端末が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成するステップと、
生成された前記時間情報を前記複数のユーザ端末に送信するステップとを含む、方法。
【請求項１５】
情報処理装置であって、
前記情報処理装置は、
前記情報処理装置によって実行されるプログラムを記憶する記憶部と、
前記プログラムを実行することにより、前記情報処理装置の動作を制御する制御部と、を備え、
前記制御部は、
複数のユーザ端末に第１データを送信し、
前記複数のユーザ端末のそれぞれが前記第１データの受信に応答して第２データを受信し、
前記第１データの送信から前記第２データの受信までに要する通信時間を、前記ユーザ端末ごとに特定することによって、複数の通信時間を特定し、
特定された前記複数の通信時間に基づいて、前記複数のユーザ端末が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成し、
生成された前記時間情報を前記複数のユーザ端末に送信する、情報処理装置。
【請求項１６】
プロセッサを備えるユーザ端末がゲームプログラムを実行する方法であって、
前記方法は、前記プロセッサが、
複数のユーザ端末がゲームを互いに同期して進行させるために用いる第１時間を表す時間情報を、サーバから受信するステップと、
前記ユーザ端末に対する第１操作を、第１ユーザから受け付けるステップと、
前記第１操作の内容を表す第１操作情報を、前記サーバに送信するステップと、
第２ユーザ端末が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、前記サーバから受信するステップと、
前記第１操作と、前記第１操作と同一の時点に受け付けられた前記第２操作を表す前記第２操作情報とに基づいて、前記ゲームを進行させるステップと、
前記第２ユーザ端末が前記第２操作を受け付けた後から前記第１時間が経過するまでの間に前記第２操作情報を受信しなかった場合、前記第２操作情報を受信するまでの間、前記ゲームを停止させるステップと、
前記ゲームを停止させた場合、前記ゲームの停止発生状況を特定するステップと、
前記停止発生状況が所定の条件を満たす場合、前記第１時間の増加を要求するための要求情報を前記サーバに送信するステップとを含む、方法。
【請求項１７】
情報処理装置であって、
前記情報処理装置は、
前記情報処理装置によって実行されるプログラムを記憶する記憶部と、
前記プログラムを実行することにより、前記情報処理装置の動作を制御する制御部と、を備え、
前記制御部は、
複数の情報処理装置がゲームを互いに同期して進行させるために用いる第１時間を表す時間情報を、サーバから受信し、
前記情報処理装置に対する第１操作を、第１ユーザから受け付け、
前記第１操作の内容を表す第１操作情報を、前記サーバに送信し、
第２情報処理装置が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、前記サーバから受信し、
前記第１操作と、前記第１操作と同一の時点に受け付けられた前記第２操作を表す前記第２操作情報とに基づいて、前記ゲームを進行させ、
前記第２情報処理装置が前記第２操作を受け付けた後から前記第１時間が経過するまでの間に前記第２操作情報を受信しなかった場合、前記第２操作情報を受信するまでの間、前記ゲームを停止させ、
前記ゲームを停止させた場合、前記ゲームの停止発生状況を特定し、
前記停止発生状況が所定の条件を満たす場合、前記第１時間の増加を要求するための要求情報を前記サーバに送信する、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ゲームプログラム、プログラムを実行する方法、および情報処理装置に関する。
【背景技術】
【０００２】
特許文献１に、制御部を、グループでゲームを行なう各ユーザ端末における遅延時間を、継続的に取得して記憶部に記録し、ゲーム管理システム及び各ユーザ端末におけるゲーム進行を同期させるために、記憶部に記録された遅延時間の最大値に基づいて、各ユーザ端末に対して、猶予時間を含めたゲーム進行の同期指示を送信する手段として機能させるゲーム管理プログラムが開示される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１５−１３９６４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１の技術には、ゲームシステム全体における処理の効率を向上できる余地がある。
【０００５】
本開示の一態様は、ゲームシステム全体における処理の効率を向上させることを目的とする。
【課題を解決するための手段】
【０００６】
本開示に係るプログラムは、プロセッサを備えるサーバにより実行される。ゲームプログラムは、プロセッサに、複数のユーザ端末に第１データを送信するステップと、複数のユーザ端末のそれぞれが第１データの受信に応答して第２データを受信するステップと、第１データの送信から第２データの受信までに要する通信時間を、ユーザ端末ごとに特定することによって、複数の通信時間を特定するステップと、特定された複数の通信時間に基づいて、複数のユーザ端末が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成するステップと、生成された時間情報を複数のユーザ端末に送信するステップとを実行させる。
【発明の効果】
【０００７】
本開示の一態様によれば、ゲームシステム全体における処理の効率を向上させることができる効果を奏する。
【図面の簡単な説明】
【０００８】
【図１】ゲームシステムのハードウェア構成を示す図である。
【図２】ゲームシステムに含まれるサーバ及びユーザ端末の機能的構成を示すブロック図である。
【図３】ある実施の形態に係るゲームシステムが、ゲームプログラムに基づいて実行する処理の流れを示すフローチャートである。
【図４】ある実施の形態に係るゲームシステムが、ゲームプログラムに基づいて実行する処理の流れを示すフローチャートである。
【図５】ある実施の形態に係るゲームシステムが、ゲームプログラムに基づいて実行する処理の流れを示すフローチャートである。
【図６】ある実施の形態に係るゲームシステムが、ゲームプログラムに基づいて実行する処理の流れを示すフローチャートである。
【発明を実施するための形態】
【０００９】
本開示に係るゲームシステムは、ユーザにゲームを提供するためのシステムである。以下、ゲームシステムについて図面を参照しつつ説明する。なお、本発明はこれらの例示に限定されるものではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が本発明に含まれることが意図される。以下の説明では、図面の説明において同一の要素には同一の符号を付し、重複する説明を繰り返さない。
【００１０】
（ゲームシステム１のハードウェア構成）
図１は、ゲームシステム１のハードウェア構成を示す図である。ゲームシステム１は図示の通り、複数のユーザ端末１００と、サーバ２００とを含む。各ユーザ端末１００は、サーバ２００とネットワーク２を介して接続する。ネットワーク２は、インターネット及び図示しない無線基地局によって構築される各種移動通信システム等で構成される。この移動通信システムとしては、例えば、所謂３Ｇ、４Ｇ移動通信システム、ＬＴＥ（Long Term Evolution）、及び所定のアクセスポイントによってインターネットに接続可能な無線ネットワーク（例えばWi-Fi（登録商標））等が挙げられる。
【００１１】
サーバ２００（コンピュータ、情報処理装置）は、ワークステーション又はパーソナルコンピュータ等の汎用コンピュータであってよい。サーバ２００は、プロセッサ２０と、メモリ２１と、ストレージ２２と、通信ＩＦ２３と、入出力ＩＦ２４とを備える。サーバ２００が備えるこれらの構成は、通信バスによって互いに電気的に接続される。
【００１２】
ユーザ端末１００（コンピュータ、情報処理装置）は、スマートフォン、フィーチャーフォン、ＰＤＡ（Personal Digital Assistant）、又はタブレット型コンピュータ等の携帯端末であってよい。ユーザ端末１００は、ゲームプレイに適したゲーム装置であってもよい。ユーザ端末１００は図示の通り、プロセッサ１０と、メモリ１１と、ストレージ１２と、通信インターフェース（ＩＦ）１３と、入出力ＩＦ１４と、タッチスクリーン１５（表示部１５２）と、カメラ１７と、測距センサ１８とを備える。ユーザ端末１００が備えるこれらの構成は、通信バスによって互いに電気的に接続される。なお、ユーザ端末１００は、タッチスクリーン１５に代えて、又は、加えて、ユーザ端末１００本体とは別に構成されたディスプレイ（表示部１５２）を接続可能な入出力ＩＦ１４を備えていてもよい。
【００１３】
また、図１に示すように、ユーザ端末１００は、１つ以上のコントローラ１０２０と通信可能に構成されることとしてもよい。コントローラ１０２０は、例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）等の通信規格に従って、ユーザ端末１００と通信を確立する。コントローラ１０２０は、１つ以上のボタン等を有していてもよく、該ボタン等に対するユーザの入力操作に基づく出力値をユーザ端末１００へ送信する。また、コントローラ１０２０は、加速度センサ、及び、角速度センサ等の各種センサを有していてもよく、該各種センサの出力値をユーザ端末１００へ送信する。
【００１４】
なお、ユーザ端末１００がカメラ１７及び測距センサ１８を備えることに代えて、又は、加えて、コントローラ１０２０がカメラ１７及び測距センサ１８を有していてもよい。
【００１５】
ユーザ端末１００は、例えばゲーム開始時に、コントローラ１０２０を使用するユーザに、該ユーザの名前又はログインＩＤ等のユーザ識別情報を、該コントローラ１０２０を介して入力させることが望ましい。これにより、ユーザ端末１００は、コントローラ１０２０とユーザとを紐付けることが可能となり、受信した出力値の送信元（コントローラ１０２０）に基づいて、該出力値がどのユーザのものであるかを特定することができる。
【００１６】
ユーザ端末１００が複数のコントローラ１０２０と通信する場合、各コントローラ１０２０を各ユーザが把持することで、ネットワーク２を介してサーバ２００などの他の装置と通信せずに、該１台のユーザ端末１００でマルチプレイを実現することができる。また、各ユーザ端末１００が無線ＬＡＮ（Local Area Network）規格等の無線規格により互いに通信接続する（サーバ２００を介さずに通信接続する）ことで、複数台のユーザ端末１００によりローカルでマルチプレイを実現することもできる。１台のユーザ端末１００によりローカルで上述のマルチプレイを実現する場合、ユーザ端末１００は、さらに、サーバ２００が備える後述する種々の機能の少なくとも一部を備えていてもよい。また、複数のユーザ端末１００によりローカルで上述のマルチプレイを実現する場合、複数のユーザ端末１００は、サーバ２００が備える後述する種々の機能を分散して備えていてもよい。
【００１７】
なお、ローカルで上述のマルチプレイを実現する場合であっても、ユーザ端末１００はサーバ２００と通信を行ってもよい。例えば、あるゲームにおける成績又は勝敗等のプレイ結果を示す情報と、ユーザ識別情報とを対応付けてサーバ２００に送信してもよい。
【００１８】
また、コントローラ１０２０は、ユーザ端末１００に着脱可能な構成であるとしてもよい。この場合、ユーザ端末１００の筐体における少なくとも何れかの面に、コントローラ１０２０との結合部が設けられていてもよい。該結合部を介して有線によりユーザ端末１００とコントローラ１０２０とが結合している場合は、ユーザ端末１００とコントローラ１０２０とは、有線を介して信号を送受信する。
【００１９】
図１に示すように、ユーザ端末１００は、外部のメモリカード等の記憶媒体１０３０の装着を、入出力ＩＦ１４を介して受け付けてもよい。これにより、ユーザ端末１００は、記憶媒体１０３０に記録されるプログラム及びデータを読み込むことができる。記憶媒体１０３０に記録されるプログラムは、例えばゲームプログラムである。
【００２０】
ユーザ端末１００は、サーバ２００等の外部の装置と通信することにより取得したゲームプログラムをユーザ端末１００のメモリ１１に記憶してもよいし、記憶媒体１０３０から読み込むことにより取得したゲームプログラムをメモリ１１に記憶してもよい。
【００２１】
以上で説明した通り、ユーザ端末１００は、該ユーザ端末１００に対して情報を入力する機構の一例として、通信ＩＦ１３、入出力ＩＦ１４、タッチスクリーン１５、カメラ１７、及び、測距センサ１８を備える。入力する機構としての上述の各部は、ユーザの入力操作を受け付けるように構成された操作部と捉えることができる。
【００２２】
例えば、操作部が、カメラ１７及び測距センサ１８の少なくとも何れか一方で構成される場合、該操作部が、ユーザ端末１００の近傍の物体１０１０を検出し、当該物体の検出結果から入力操作を特定する。一例として、物体１０１０としてのユーザの手、予め定められた形状のマーカーなどが検出され、検出結果として得られた物体１０１０の色、形状、動き、又は、種類などに基づいて入力操作が特定される。より具体的には、ユーザ端末１００は、カメラ１７の撮影画像からユーザの手が検出された場合、該撮影画像に基づき検出されるジェスチャ（ユーザの手の一連の動き）を、ユーザの入力操作として特定し、受け付ける。なお、撮影画像は静止画であっても動画であってもよい。
【００２３】
あるいは、操作部がタッチスクリーン１５で構成される場合、ユーザ端末１００は、タッチスクリーン１５の入力部１５１に対して実施されたユーザの操作をユーザの入力操作として特定し、受け付ける。あるいは、操作部が通信ＩＦ１３で構成される場合、ユーザ端末１００は、コントローラ１０２０から送信される信号（例えば、出力値）をユーザの入力操作として特定し、受け付ける。あるいは、操作部が入出力ＩＦ１４で構成される場合、該入出力ＩＦ１４と接続されるコントローラ１０２０とは異なる入力装置（図示せず）から出力される信号をユーザの入力操作として特定し、受け付ける。
【００２４】
（各装置のハードウェア構成要素）
プロセッサ１０は、ユーザ端末１００全体の動作を制御する。プロセッサ２０は、サーバ２００全体の動作を制御する。プロセッサ１０及び２０は、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、及びＧＰＵ（Graphics Processing Unit）を含む。
【００２５】
プロセッサ１０は後述するストレージ１２からプログラムを読み出し、後述するメモリ１１に展開する。プロセッサ２０は後述するストレージ２２からプログラムを読み出し、後述するメモリ２１に展開する。プロセッサ１０及びプロセッサ２０は展開したプログラムを実行する。
【００２６】
メモリ１１及び２１は主記憶装置である。メモリ１１及び２１は、ＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）等の記憶装置で構成される。メモリ１１は、プロセッサ１０が後述するストレージ１２から読み出したプログラム及び各種データを一時的に記憶することにより、プロセッサ１０に作業領域を提供する。メモリ１１は、プロセッサ１０がプログラムに従って動作している間に生成した各種データも一時的に記憶する。メモリ２１は、プロセッサ２０が後述するストレージ２２から読み出した各種プログラム及びデータを一時的に記憶することにより、プロセッサ２０に作業領域を提供する。メモリ２１は、プロセッサ２０がプログラムに従って動作している間に生成した各種データも一時的に記憶する。
【００２７】
本実施形態においてプログラムとは、ゲームをユーザ端末１００により実現するためのゲームプログラムであってもよい。あるいは、該プログラムは、該ゲームをユーザ端末１００とサーバ２００との協働により実現するためのゲームプログラムであってもよい。あるいは、該プログラムは、該ゲームを複数のユーザ端末１００の協働により実現するためのゲームプログラムであってもよい。また、各種データとは、ユーザ情報及びゲーム情報などのゲームに関するデータ、ならびに、ユーザ端末１００とサーバ２００との間又は複数のユーザ端末１００間で送受信する指示又は通知を含んでいる。
【００２８】
ストレージ１２及び２２は補助記憶装置である。ストレージ１２及び２２は、フラッシュメモリ又はＨＤＤ（Hard Disk Drive）等の記憶装置で構成される。ストレージ１２及びストレージ２２には、ゲームに関する各種データが格納される。
【００２９】
通信ＩＦ１３は、ユーザ端末１００における各種データの送受信を制御する。通信ＩＦ２３は、サーバ２００における各種データの送受信を制御する。通信ＩＦ１３及び２３は例えば、無線ＬＡＮ（Local Area Network）を介する通信、有線ＬＡＮ、無線ＬＡＮ、又は携帯電話回線網を介したインターネット通信、ならびに近距離無線通信等を用いた通信を制御する。
【００３０】
入出力ＩＦ１４は、ユーザ端末１００がデータの入力を受け付けるためのインターフェースであり、またユーザ端末１００がデータを出力するためのインターフェースである。入出力ＩＦ１４は、ＵＳＢ（Universal Serial Bus）等を介してデータの入出力を行ってもよい。入出力ＩＦ１４は、例えば、ユーザ端末１００の物理ボタン、カメラ、マイク、又は、スピーカ等を含み得る。サーバ２００の入出力ＩＦ２４は、サーバ２００がデータの入力を受け付けるためのインターフェースであり、またサーバ２００がデータを出力するためのインターフェースである。入出力ＩＦ２４は、例えば、マウス又はキーボード等の情報入力機器である入力部と、画像を表示出力する機器である表示部とを含み得る。
【００３１】
ユーザ端末１００のタッチスクリーン１５は、入力部１５１と表示部１５２とを組み合わせた電子部品である。入力部１５１は、例えばタッチセンシティブなデバイスであり、例えばタッチパッドによって構成される。表示部１５２は、例えば液晶ディスプレイ、又は有機ＥＬ（Electro-Luminescence）ディスプレイ等によって構成される。
【００３２】
入力部１５１は、入力面に対しユーザの操作（主にタッチ操作、スライド操作、スワイプ操作、及びタップ操作等の物理的接触操作）が入力された位置を検知して、位置を示す情報を入力信号として送信する機能を備える。入力部１５１は、図示しないタッチセンシング部を備えていればよい。タッチセンシング部は、静電容量方式又は抵抗膜方式等のどのような方式を採用したものであってもよい。
【００３３】
図示していないが、ユーザ端末１００は、該ユーザ端末１００の保持姿勢を特定するための１以上のセンサを備えていてもよい。このセンサは、例えば、加速度センサ、又は、角速度センサ等であってもよい。ユーザ端末１００がセンサを備えている場合、プロセッサ１０は、センサの出力からユーザ端末１００の保持姿勢を特定して、保持姿勢に応じた処理を行うことも可能になる。例えば、プロセッサ１０は、ユーザ端末１００が縦向きに保持されているときには、縦長の画像を表示部１５２に表示させる縦画面表示としてもよい。一方、ユーザ端末１００が横向きに保持されているときには、横長の画像を表示部１５２に表示させる横画面表示としてもよい。このように、プロセッサ１０は、ユーザ端末１００の保持姿勢に応じて縦画面表示と横画面表示とを切り替え可能であってもよい。
【００３４】
カメラ１７は、イメージセンサ等を含み、レンズから入射する入射光を電気信号に変換することで撮影画像を生成する。
【００３５】
測距センサ１８は、測定対象物までの距離を測定するセンサである。測距センサ１８は、例えば、パルス変換した光を発する光源と、光を受ける受光素子とを含む。測距センサ１８は、光源からの発光タイミングと、該光源から発せられた光が測定対象物にあたって反射されて生じる反射光の受光タイミングとにより、測定対象物までの距離を測定する。測距センサ１８は、指向性を有する光を発する光源を有することとしてもよい。
【００３６】
ここで、ユーザ端末１００が、カメラ１７と測距センサ１８とを用いて、ユーザ端末１００の近傍の物体１０１０を検出した検出結果を、ユーザの入力操作として受け付ける例をさらに説明する。カメラ１７及び測距センサ１８は、例えば、ユーザ端末１００の筐体の側面に設けられてもよい。カメラ１７の近傍に測距センサ１８が設けられてもよい。カメラ１７としては、例えば赤外線カメラを用いることができる。この場合、赤外線を照射する照明装置及び可視光を遮断するフィルタ等が、カメラ１７に設けられてもよい。これにより、屋外か屋内かにかかわらず、カメラ１７の撮影画像に基づく物体の検出精度をいっそう向上させることができる。
【００３７】
プロセッサ１０は、カメラ１７の撮影画像に対して、例えば以下の（１）〜（５）に示す処理のうち１つ以上の処理を行ってもよい。（１）プロセッサ１０は、カメラ１７の撮影画像に対し画像認識処理を行うことで、該撮影画像にユーザの手が含まれているか否かを特定する。プロセッサ１０は、上述の画像認識処理において採用する解析技術として、例えばパターンマッチング等の技術を用いてよい。（２）また、プロセッサ１０は、ユーザの手の形状から、ユーザのジェスチャを検出する。プロセッサ１０は、例えば、撮影画像から検出されるユーザの手の形状から、ユーザの指の本数（伸びている指の本数）を特定する。プロセッサ１０はさらに、特定した指の本数から、ユーザが行ったジェスチャを特定する。例えば、プロセッサ１０は、指の本数が５本である場合、ユーザが「パー」のジェスチャを行ったと判定する。また、プロセッサ１０は、指の本数が０本である（指が検出されなかった）場合、ユーザが「グー」のジェスチャを行ったと判定する。また、プロセッサ１０は、指の本数が２本である場合、ユーザが「チョキ」のジェスチャを行ったと判定する。（３）プロセッサ１０は、カメラ１７の撮影画像に対し、画像認識処理を行うことにより、ユーザの指が人差し指のみ立てた状態であるか、ユーザの指がはじくような動きをしたかを検出する。（４）プロセッサ１０は、カメラ１７の撮影画像の画像認識結果、及び、測距センサ１８の出力値等の少なくとも何れか１つに基づいて、ユーザ端末１００の近傍の物体１０１０（ユーザの手など）とユーザ端末１００との距離を検出する。例えば、プロセッサ１０は、カメラ１７の撮影画像から特定されるユーザの手の形状の大小により、ユーザの手がユーザ端末１００の近傍（例えば所定値未満の距離）にあるのか、遠く（例えば所定値以上の距離）にあるのかを検出する。なお、撮影画像が動画の場合、プロセッサ１０は、ユーザの手がユーザ端末１００に接近しているのか遠ざかっているのかを検出してもよい。（５）カメラ１７の撮影画像の画像認識結果等に基づいて、ユーザの手が検出されている状態で、ユーザ端末１００とユーザの手との距離が変化していることが判明した場合、プロセッサ１０は、ユーザが手をカメラ１７の撮影方向において振っていると認識する。カメラ１７の撮影範囲よりも指向性が強い測距センサ１８において、物体が検出されたりされなかったりする場合に、プロセッサ１０は、ユーザが手をカメラの撮影方向に直交する方向に振っていると認識する。
【００３８】
このように、プロセッサ１０は、カメラ１７の撮影画像に対する画像認識により、ユーザが手を握りこんでいるか否か（「グー」のジェスチャであるか、それ以外のジェスチャ（例えば「パー」）であるか）を検出する。また、プロセッサ１０は、ユーザの手の形状とともに、ユーザがこの手をどのように移動させているかを検出する。また、プロセッサ１０は、ユーザがこの手をユーザ端末１００に対して接近させているのか遠ざけているのかを検出する。このような操作は、例えば、マウス又はタッチスクリーンなどのポインティングデバイスを用いた操作に対応させることができる。ユーザ端末１００は、例えば、ユーザの手の移動に応じて、タッチスクリーン１５においてポインタを移動させ、ユーザのジェスチャ「グー」を検出する。この場合、ユーザ端末１００は、ユーザが選択操作を継続中であると認識する。選択操作の継続とは、例えば、マウスがクリックされて押し込まれた状態が維持されること、又は、タッチスクリーンに対してタッチダウン操作がなされた後タッチされた状態が維持されることに対応する。また、ユーザ端末１００は、ユーザのジェスチャ「グー」が検出されている状態で、さらにユーザが手を移動させると、このような一連のジェスチャを、スワイプ操作（またはドラッグ操作）に対応する操作として認識することもできる。また、ユーザ端末１００は、カメラ１７の撮影画像によるユーザの手の検出結果に基づいて、ユーザが指をはじくようなジェスチャを検出した場合に、当該ジェスチャを、マウスのクリック又はタッチスクリーンへのタップ操作に対応する操作として認識してもよい。
【００３９】
＜ゲームシステム１の機能的構成＞
図２は、ゲームシステム１に含まれるサーバ２００及びユーザ端末１００の機能的構成を示すブロック図である。サーバ２００及びユーザ端末１００のそれぞれは、図示しない、一般的なコンピュータとして機能する場合に必要な機能的構成、及び、ゲームにおける公知の機能を実現するために必要な機能的構成を含み得る。
【００４０】
ユーザ端末１００は、ユーザの入力操作を受け付ける入力装置としての機能と、ゲームの画像や音声を出力する出力装置としての機能を有する。ユーザ端末１００は、プロセッサ１０、メモリ１１、ストレージ１２、通信ＩＦ１３、及び入出力ＩＦ１４等の協働によって、制御部１１０及び記憶部１２０として機能する。
【００４１】
サーバ２００は、各ユーザ端末１００と通信して、ユーザ端末１００がゲームを進行させるのを支援する機能を有する。例えば、有価データの販売、サービスの提供などを実行する。ゲームがマルチプレイゲームである場合には、サーバ２００は、ゲームに参加する各ユーザ端末１００と通信して、ユーザ端末１００同士のやりとりを仲介する機能を有していてもよい。サーバ２００は、プロセッサ２０、メモリ２１、ストレージ２２、通信ＩＦ２３、及び入出力ＩＦ２４等の協働によって、制御部２１０及び記憶部２２０として機能する。
【００４２】
記憶部１２０及び記憶部２２０は、ゲームプログラム１３１、ゲーム情報１３２及びユーザ情報１３３を格納する。ゲームプログラム１３１は、ユーザ端末１００及びサーバ２００で実行するゲームプログラムである。ゲーム情報１３２は、制御部１１０及び制御部２１０がゲームプログラム１３１を実行する際に参照するデータである。ユーザ情報１３３は、ユーザのアカウントに関するデータである。記憶部２２０において、ゲーム情報１３２及びユーザ情報１３３は、ユーザ端末１００ごとに格納されている。
【００４３】
（サーバ２００の機能的構成）
制御部２１０は、記憶部２２０に格納されたゲームプログラム１３１を実行することにより、サーバ２００を統括的に制御する。例えば、制御部２１０は、ユーザ端末１００に各種データ及びプログラム等を送信する。制御部２１０は、ゲーム情報もしくはユーザ情報の一部又は全部をユーザ端末１００から受信する。ゲームがマルチプレイゲームである場合には、制御部２１０は、ユーザ端末１００からマルチプレイの同期の要求を受信して、同期のためのデータをユーザ端末１００に送信してもよい。
【００４４】
制御部２１０は、ゲームプログラム１３１の記述に応じて、通信時間特定部２１１、時間情報生成部２１２、および通信部２１３として機能する。制御部２１０は、実行するゲームの性質に応じて、ユーザ端末１００におけるゲームの進行を支援するために、図示しないその他の機能ブロックとしても機能する。通信時間特定部２１１は、サーバ２００とユーザ端末１００との間の通信時間を特定する。時間情報生成部２１２は、複数のユーザ端末１００が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成する。通信部２１５は、ユーザ端末１００との間で各種のデータ、信号、および情報を送受信する。
【００４５】
（ユーザ端末１００の機能的構成）
制御部１１０は、記憶部１２０に格納されたゲームプログラム１３１を実行することにより、ユーザ端末１００を統括的に制御する。例えば、制御部１１０は、ゲームプログラム１３１およびユーザの操作にしたがって、ゲームを進行させる。また、制御部１１０は、ゲームを進行させている間、必要に応じて、サーバ２００と通信して、情報の送受信を行う。
【００４６】
制御部１１０は、ゲームプログラム１３１の記述に応じて、操作受付部１１１、ゲーム進行部１１２、停止発生率特定部１１３、表示制御部１１４、および通信部１１５として機能する。制御部１１０は、実行するゲームの性質に応じて、ゲームを進行させるために、図示しないその他の機能ブロックとしても機能することができる。
【００４７】
操作受付部１１１は、タッチスクリーン１５（入力部１５１）の出力に基づいて、ユーザの入力操作を受け付ける。具体的には、操作受付部１１１は、ユーザの指などがタッチスクリーン１５に接近したことを、タッチスクリーン１５を構成する面の横軸及び縦軸からなる座標系の座標として検出する。例えば、操作受付部１１１は、入力部１５１に対する入力操作を受け付け、該入力操作の入力位置の座標を検出し、該入力操作の種類を特定する。操作受付部１１１は、入力操作の種類として、例えばタッチ操作、スライド操作、スワイプ操作、およびタップ操作等を特定する。また、操作受付部１１１は、連続して検知されていた入力が途切れると、タッチスクリーン１５から接触入力が解除されたことを検知する。
【００４８】
操作受付部１１１は、タッチスクリーン１５に対するユーザの操作を判別する。操作受付部１１１は、例えば、（１）「接近操作」、（２）「リリース操作」、（３）「タップ操作」、（４）「ダブルタップ操作」、（５）「長押し操作（ロングタッチ操作）」、（６）「ドラッグ操作（スワイプ操作）」、（７）「ムーブ操作」、（８）「フリック操作」、その他のユーザの操作を判別する。操作受付部１１１が判別するユーザの操作は、上記に限られない。例えば、タッチスクリーン１５が、ユーザがタッチスクリーン１５に対して押下する圧力の大きさを検出可能な機構を有する場合、操作受付部１１１は、ユーザにより押下された圧力の大きさを判別する。
【００４９】
（１）「接近操作」とは、ユーザが指などをタッチスクリーン１５に接近させる操作である。タッチスクリーン１５は、ユーザの指などが接近したこと（ユーザの指などがタッチスクリーン１５に接触したことを含む）をタッチスクリーン１５により検出し、検出したタッチスクリーン１５の座標に応じた信号を制御部１１０へ出力する。制御部１１０は、タッチスクリーン１５へのユーザの指などの接近を検出しない状態から、接近を検出したときに、状態が「タッチオン状態」になったと判別する。
【００５０】
（２）「リリース操作」とは、ユーザがタッチスクリーン１５を接近操作している状態を止める操作である。操作受付部１１１は、例えば、ユーザが指などをタッチスクリーン１５に接触させている状態から、指を離す操作をしたときに、ユーザの操作を「リリース操作」と判別する。制御部１１０は、タッチスクリーン１５へのユーザの指などの接近を検出している状態から、接近を検出しない状態になったときに、状態が「タッチオン状態」から「タッチオフ状態」になったと判別する。
【００５１】
（３）「タップ操作」とは、ユーザがタッチスクリーン１５に対して指などを接近させる接近操作をした後に、接近操作をした位置でリリース操作を行うことである。操作受付部１１１は、接近操作が検出されない状態（ユーザの指などがタッチスクリーン１５から離れており、タッチスクリーン１５がユーザの指などの接近を検出していない状態）から、タッチスクリーン１５の出力に基づいて、ユーザの指などが接近したことを検出した場合に、その検出した座標を「初期タッチ位置」として保持する。操作受付部１１１は、初期タッチ位置の座標と、リリース操作をした座標とがほぼ同一である場合（接近操作が検出された座標から一定範囲内の座標においてリリース操作の座標が検出された場合）に、ユーザの操作を「タップ操作」と判別する。
【００５２】
（４）「ダブルタップ操作」とは、ユーザがタップ操作を一定時間内に２回行う操作である。操作受付部１１１は、例えば、ユーザの操作をタップ操作と判別してから一定時間内に、タップ操作にかかる座標で再びタップ操作を判別した場合に、ユーザの操作を「ダブルタップ操作」と判別する。
【００５３】
（５）「長押し操作」とは、ユーザがタッチスクリーン１５を押し続ける操作である。タッチスクリーン１５は、ユーザの操作を検出して接近操作を判別してから、接近操作が検出された座標において接近操作が継続している時間が一定時間を超えた場合に、ユーザの操作を「長押し操作」（「長押し操作」を、「ロングタッチ操作」と称することもある）と判別する。
【００５４】
（６）「ドラッグ操作」とは、ユーザがタッチスクリーン１５に指などを接近させた接近状態を維持したまま、指をスライドさせる操作である。
【００５５】
（７）「ムーブ操作」とは、ユーザがタッチスクリーン１５において、接近操作を維持しつつ、タッチスクリーン１５に指などを接近させている位置を移動させてリリース操作を行う一連の操作をいう。
【００５６】
（８）「フリック操作」は、ユーザがムーブ操作を予め定められた時間よりも短い時間で行う操作をいう。フリック操作は、ユーザがタッチスクリーン１５で指を弾くような操作である。
【００５７】
ゲーム進行部１１２は、複数のユーザ端末１００において同一の時点で受け付けられた各操作の内容に基づいて、ユーザ端末１００においてマルチプレイゲームを進行させる。停止発生率特定部１１３は、ユーザ端末１００における基準時間内のゲームの停止発生率を特定する。
【００５８】
表示制御部１１４は、タッチスクリーン１５の表示部１５２に対して、上述の各要素によって実行された処理結果が反映されたゲーム画面を出力する。表示制御部１１４は、各種オブジェクトのモーションを示すアニメーションを含むゲーム画面を、表示部１５２に表示してもよい。また、表示制御部１１４は、ＵＩ（User  Interface）オブジェクトを、ゲーム画面に重畳して描画してもよい。
【００５９】
通信部１１５は、サーバ２００との間で各種のデータ、信号、および情報を送受信する。
【００６０】
図２に示すサーバ２００およびユーザ端末１００の機能は、一例にすぎない。サーバ２００は、ユーザ端末１００が備える機能の少なくとも一部を備えていてもよい。また、ユーザ端末１００は、サーバ２００が備える機能の少なくとも一部を備えていてもよい。さらに、ユーザ端末１００およびサーバ２００以外の他の装置をゲームシステム１の構成要素とし、該他の装置にゲームシステム１における処理の一部を実行させてもよい。すなわち、本実施形態においてゲームプログラムを実行するコンピュータは、ユーザ端末１００、サーバ２００、および他の装置の何れであってもよいし、これらの複数の装置の組み合わせにより実現されてもよい。
【００６１】
（ゲーム概要）
ゲームシステム１に基づくゲームは、ユーザによって操作されるキャラクタ（第１キャラクタ、武器）が登場する任意のゲームである。このゲームは、例えば、ユーザによって操作されるキャラクタと、ゲームシステム１によって制御される他のキャラクタ（第２キャラクタ、武器）とが戦闘するゲームである。ユーザは、複数の異なるキャラクタを保有することができる。ユーザは、保有するキャラクタ群のうち少なくとも１つのキャラクタを選択して、ゲーム中に利用することができる。
【００６２】
以下では、ゲームシステム１が、異なるユーザ端末１００をそれぞれ操作するユーザＡ（第１ユーザ）およびユーザＢ（第２ユーザ）に、ゲームプログラム１３１に基づくゲームをマルチプレイさせる例を説明する。異なるユーザが操作するユーザ端末１００を区別するために、ユーザＡが操作するユーザ端末１００（第１ユーザ端末）をユーザ端末１００Ａと表し、ユーザＢが操作するユーザ端末１００（第２ユーザ端末、第２情報処理装置）をユーザ端末１００Ｂと表す。さらに、ユーザ端末１００Ａに関する各構成要素の参照符号に「Ａ」を付し、ユーザ端末１００Ｂに関する各構成要素の参照符号にＢを付す。例えば、ユーザ端末１００Ａが備える通信部１１５を通信部１１５Ａと表し、ユーザ端末１００Ｂが備える通信部１１５を通信部１１５Ｂと表す。
【００６３】
ゲームシステム１は、フレームごとにゲームを進行させる。フレームは、サーバ２００およびユーザ端末１００がゲームを進行させるための単位期間である。１フレームの長さは、１秒間当たりにゲーム画面が更新される回数によって決まる。例えば、ゲーム画面が１秒内に２０回更新される場合、１フレームの長さは０．０５秒である。以下では、フレームの個数を単にフレーム数と表す場合がある。
【００６４】
図３は、ある実施の形態に係るゲームシステム１が、ゲームプログラム１３１に基づいて実行する処理の流れを示すフローチャートである。ゲームシステム１は、図３に示す一連の処理を、ゲームの開始前に実行する。
【００６５】
ステップＳ１において、サーバ２００は、第１データを、ユーザ端末１００Ａおよびユーザ端末１００Ｂに、送達確認を行わないＵＤＰ（User Data Protocol）に従う第１通信によって送信する。以下、ＵＤＰに従う第１通信を、単にＵＤＰ通信と表記する。第１データは、任意の形式のデータであり、例えば特定の数値データである。一般に、ＵＤＰ通信によって送信されるデータは、通信相手に高速で到着するが、たまに消失して通信相手に到着しない場合がある。ステップＳ１１において、通信部１１５Ａは、第１データを、サーバ２００からＵＤＰ通信によって受信する。ステップＳ２１において、通信部１１５Ｂは、第１データをサーバ２００からＵＤＰ通信によって受信する。
【００６６】
ステップＳ１２において、通信部１１５Ａは、第１データの受信に応答して、第２データをＵＤＰ通信によってサーバ２００に送信する。第２データは、任意の形式のデータであり、例えば第１データと同じく特定の数値データである。第２データは、サーバ２００に対する返信として役割を有する。ステップＳ２２において、通信部１１５Ｂは、第１データの受信に応答して、第２データをＵＤＰ通信によってサーバ２００に送信する。
【００６７】
ステップＳ２において、通信部２１３は、ユーザ端末１００Ａおよびユーザ端末１００Ｂのそれぞれがサーバ２００に送信した第２データを受信する。ステップＳ３において、時間情報生成部２１２は、ユーザ端末１００Ａおよびユーザ端末１００Ｂのそれぞれごとに、第１データの送信から第２データの受信までに要する通信時間を特定する。時間情報生成部２１２は、まず、ユーザ端末１００Ａに第１データを送信した時点から、ユーザ端末１００Ａから第２データを受信した時点までの経過時間を、ユーザ端末１００Ａに対応する第１通信時間として特定する。時間情報生成部２１２は、さらに、ユーザ端末１００Ｂに第１データを送信した時点から、ユーザ端末１００Ｂから第２データを受信した時点までの経過時間を、ユーザ端末１００Ｂに対応する第２通信時間として特定する。これにより、時間情報生成部２１２は、複数の通信時間を特定する。
【００６８】
ステップＳ４において、時間情報生成部２１２は、複数の通信時間に基づいて、第１時間を表す時間情報を生成する。時間情報生成部２１２は、例えば、第１通信時間および第２通信時間のうちより大きい時間を、第１時間として特定する。時間情報生成部２１２は、特定した第１時間を表す任意の形式の時間情報を生成する。ここでは、第１時間は、３フレーム分の長さに相当する時間であるとする。時間情報生成部２１２は、生成された時間情報を記憶部２３０に記憶する。
【００６９】
ステップＳ５において、通信時間特定部２１１は、生成された時間情報をユーザ端末１００Ａおよびユーザ端末１００ＢにＵＤＰ通信によって送信する。ステップＳ１３において、通信部１１５Ａは、時間情報をＵＤＰ通信によってサーバ２００から受信する。ステップＳ２３において、通信部１１５Ｂは、時間情報をＵＤＰ通信によってサーバ２００から受信する。ステップＳ６において、制御部２１０は、時間情報の送信に応答して、ゲームを開始する。ステップＳ１４において、ゲーム進行部１１２Ａは、時間情報の受信に応答して、ゲームを開始する。ステップＳ２４において、ゲーム進行部１１２Ｂは、時間情報の受信に応答して、ゲームを開始する。このように、サーバ２００は、時間情報の送信後、ユーザ端末１００Ａおよびユーザ端末１００Ｂにゲームを開始させる。
【００７０】
図４は、ある実施の形態に係るゲームシステム１が、ゲームプログラム１３１に基づいて実行する処理の流れを示すフローチャートである。ゲームシステム１は、図４に示す一連の処理を、ゲームの開始後に実行する。以下では、ゲームシステム１が、ユーザからの操作の受け付け、操作情報の送受信、操作情報に基づくゲームの進行を、フレームごと実行する例を説明する。
【００７１】
ステップＳ１１１において、操作受付部１１１は、ユーザ端末１００Ａに対する第１操作を、第１フレームにおいてユーザＡから受け付ける。第１操作は、例えば、ユーザＡに関連付けられる第１キャラクタに対して所定の動作を実行させるための操作である。操作受付部１１１Ａは、タッチスクリーン１５Ａに対するタップ操作などの各種の操作を、第１操作として受け付ける。以下、第１フレームにおいて受け付けられた第１操作を、単に第１フレームの第１操作と表記する。ステップＳ１１２において、操作受付部１１１Ａは、第１フレームの第１操作に応答して、第１フレームの第１操作の内容を表す第１操作情報を生成する。以下、第１フレームの第１操作の内容を表す第１操作情報を、単に第１フレームの第１操作情報と表記する。
【００７２】
第１操作情報は、受け付けられた第１操作の種類を識別する第１識別子を少なくとも含む。第１操作の種類として、例えば、タップ操作、フリック操作、ドラッグ（スワイプ）操作、長押し操作などが挙げられる。第１操作がフリック操作またはドラッグ操作である場合、第１操作情報は、第１操作の方向を表す第２識別子をさらに含む。第１操作情報は、第１操作情報が表す第１操作が受け付けられたフレームの番号をさらに含む。例えば、第１フレームの第１操作情報は、第１フレームの番号「１」をさらに含む。操作受付部１１１Ａは、生成された第１フレームの第１操作情報を、記憶部１３０Ａに記憶させる。ステップＳ１１３において、通信部１１５Ａは、第１フレームの第１操作情報を、サーバ２００にＵＤＰ通信によって第１フレームにおいて送信する。
【００７３】
ステップＳ１２１において、操作受付部１１１Ｂは、ユーザ端末１００Ｂに対する第２操作を、第１フレームにおいてユーザＢから受け付ける。第２操作は、例えば、ユーザＢに関連付けられる第２キャラクタに対して所定の動作を実行させるための操作である。操作受付部１１１Ｂは、タッチスクリーン１５Ｂに対するタップ操作などの各種の操作を、第２操作として受け付ける。以下、第１フレームにおいて受け付けられた第２操作を、単に第２フレームの第操作と表記する。ステップＳ１２２において、操作受付部１１１Ｂは、第１フレームの第２操作に応答して、第１フレームの第２操作の内容を表す第２操作情報を生成する。以下、第１フレームの第２操作の内容を表す第２操作情報を、単に第１フレームの第２操作情報と表記する。
【００７４】
第２操作情報は、受け付けられた第２操作の種類を識別する第１識別子を少なくとも含む。第２操作の種類として、例えば、タップ操作、フリック操作、ドラッグ（スワイプ）操作、長押し操作などが挙げられる。第２操作がフリック操作またはドラッグ操作である場合、第２操作情報は、第２操作の方向を表す第２識別子をさらに含む。第２操作情報は、第２操作情報が表す第２操作が受け付けられたフレームの番号をさらに含む。例えば、第１フレーム第２操作情報は、第１フレームの番号「１」をさらに含む。操作受付部１１１Ｂは、生成された第１フレームの第２操作情報を、記憶部１３０Ｂに記憶させる。ステップＳ１２３において、通信部１１５Ｂは、第１フレームの第２操作情報を、サーバ２００にＵＤＰ通信によって送信する。
【００７５】
ステップＳ１０１において、通信部２１３は、第１フレームの第１操作情報を、ユーザ端末１００ＡからＵＤＰ通信によって受信する。ステップＳ１０２において、通信部２１３は、第１フレームの第２操作情報をユーザ端末１００ＢからＵＤＰ通信によって受信する。ステップＳ１０３において、通信部２１３は、第１フレームの第１操作情報を、ユーザ端末１００ＢにＵＤＰ通信によって送信する。図４の例では、このとき送信された第１操作情報は、途中で消失せずにユーザ端末１００Ｂまで到着する。したがって、ステップＳ１２４において、通信部１１５Ｂは、第１フレームの第１操作情報をサーバ２００からＵＤＰ通信によって受信する。通信部１１５Ｂは、受信した第１フレームの第１操作情報を、記憶部１２０Ｂに記憶させる。この結果、記憶部１２０Ｂには、第１フレームの第１操作情報および第２操作情報がいずれも保持されることになる。ステップＳ１０４において、通信部２１３は、第１フレームの第２操作情報を、ユーザ端末１００ＡにＵＤＰ通信によって送信する。図４の例では、このとき送信された第２操作情報は、途中で消失せずにユーザ端末１００Ａまで到着する。したがって、ステップＳ１１４において、通信部１１５Ａは、第１フレームの第２操作情報をサーバ２００からＵＤＰ通信によって受信する。通信部１１５Ａは、受信した第１フレームの第２操作情報を、記憶部１２０Ａに記憶させる。この結果、記憶部１２０Ａには、第１フレームの第１操作情報および第２操作情報がいずれも保持されることになる。
【００７６】
この後、ユーザ端末１００Ａは、第２フレームから第４フレームのそれぞれにおいて、第１操作の受け付け、第１操作情報の生成および送信、ならびに第２操作情報の受信を実行する。これらの処理は、フレームの番号が異なることを除き、ステップＳ１１１〜Ｓ１１４と相違ないため、図４への図示および詳細な説明を繰り返さない。また、サーバ２００は、第２フレームから第４フレームのそれぞれにおいて、第１操作情報の受信および送信、ならびに第２操作情報の受信および送信を実行する。これらの処理は、フレームの番号が異なることを除き、ステップＳ１０１〜Ｓ１０４と相違ないため、図４への図示および詳細な説明を繰り返さない。また、ユーザ端末１００Ｂは、第２フレームから第４フレームのそれぞれにおいて、第２操作の受け付け、第２操作情報の生成および送信、ならびに第１操作情報の受信を実行する。これらの処理は、本質的にステップＳ１２１〜Ｓ１２４と相違ないため、図４への図示および詳細な説明を繰り返さない。
【００７７】
図４の例では、記憶部１２０Ａは、第４フレームにおいて、第１フレーム〜第４フレームの各第１操作情報と、第１フレーム〜第４フレームの各第２操作情報とを記憶している。同様に、記憶部１２０Ｂは、第４フレームにおいて、第１フレーム〜第４フレームの各第１操作情報と、第１フレーム〜第４フレームの各第２操作情報とを記憶している。ステップＳ１１５において、ゲーム進行部１１２Ａは、記憶部１２０Ａに記憶される第１フレームの第１操作情報および第２操作情報を、第４フレームにおいて特定する。ゲーム進行部１１２Ａは、まず、第４フレームの番号「４」よりも、第１時間に相当するフレーム数「３」だけ小さい第１フレームの番号「１」を特定する。ゲーム進行部１１２Ａは、さらに、記憶部１２０Ａに記憶される複数の第１操作情報の中から、特定された番号「１」を含む第１操作情報を、第１フレームの第１操作情報として特定する。ゲーム進行部１１２Ａは、さらに、記憶部１２０Ａに記憶される複数の第２操作情報の中から、特定された番号「１」を含む第２操作情報を、第１フレームの第２操作情報として特定する。このように、ゲーム進行部１１２Ａは、現フレームである第４フレームよりも第１時間だけ前の時点である第１フレームにおいて生成された第１操作情報および第２操作情報を、記憶部１２０Ａから特定する。
【００７８】
ステップＳ１１６において、ゲーム進行部１１２Ａは、特定した第１フレームの第１操作情報および第２操作情報に基づいて、第４フレームにおいてゲームを進行させる。このように、ゲーム進行部１１２Ａは、第１フレームの第１操作を表す第１操作情報と、第１フレームの第１操作と同一の時点（第１フレーム）において受け付けられた第２操作を表す第２操作情報とに基づいて、ゲームを進行させる。ゲーム進行部１１２Ａは、例えば、第１操作情報に含まれる第１識別子に基づいて、第１フレームの第１操作の種類を特定し、特定した種類に応じた態様の動作を第１キャラクタに実行させる。ゲーム進行部１１２Ａは、さらに、第２操作情報に含まれる第１識別子に基づいて、第１フレームの第２操作の種類を特定し、特定した種類に応じた態様の動作を第２キャラクタに実行させる。
【００７９】
ステップＳ１２５において、ゲーム進行部１１２Ｂは、記憶部１２０Ｂに記憶される第１フレームの第１操作情報および第２操作情報を、第４フレームにおいて特定する。ゲーム進行部１１２Ｂは、まず、第４フレームの番号「４」よりも、第１時間に相当するフレーム数「３」だけ小さい第１フレームの番号「１」を特定する。ゲーム進行部１１２Ｂは、さらに、記憶部１２０Ｂに記憶される複数の第１操作情報の中から、特定された番号「１」を含む第１操作情報を、第１フレームの第１操作情報として特定する。ゲーム進行部１１２Ｂは、さらに、記憶部１２０Ｂに記憶される複数の第２操作情報の中から、特定された番号「１」を含む第２操作情報を、第１フレームの第２操作情報として特定する。このように、ゲーム進行部１１２Ｂは、現フレームである第３フレームよりも第１時間だけ前の時点である第１フレームにおいて生成された第１操作情報および第２操作情報を、記憶部１２０Ｂから特定する。
【００８０】
ステップＳ１２６において、ゲーム進行部１１２Ｂは、特定した第１フレームの第１操作情報および第２操作情報に基づいて、第４フレームにおいてゲームを進行させる。このように、ゲーム進行部１１２Ｂは、第１フレームの第１操作を表す第１操作情報と、第１フレームの第１操作と同一の時点（第１フレーム）において受け付けられた第２操作を表す第２操作情報とに基づいて、ゲームを進行させる。ゲーム進行部１１２Ｂは、例えば、第１操作情報に含まれる第１識別子に基づいて、第１フレームの第１操作の種類を特定し、特定した種類に応じた態様の動作を第１キャラクタに実行させる。ゲーム進行部１１２Ｂは、さらに、第２操作情報に含まれる第１識別子に基づいて、第１フレームの第２操作の種類を特定し、特定した種類に応じた態様の動作を第２キャラクタに実行させる。
【００８１】
図４の例では、第４フレームにおいて、ユーザ端末１００Ａにおけるゲーム進行に用いられる第１操作情報および第２操作情報が、ユーザ端末１００Ｂにおけるゲーム進行に用いられる第１操作情報および第２操作情報と同一である。これにより、第４フレームにおいて、ユーザ端末１００Ａのゲームの進行状況とユーザ端末１００Ｂにおけるゲーム進行状況とを正確に一致させることができるので、マルチプレイゲームを正常に成り立たせることができる。
【００８２】
ゲーム進行部１１２Ａは、次の第５フレームにおいて、それよりも３つ前の第２フレームの第１操作情報および第２操作情報を記憶部１２０Ａから特定する。記憶部１２０Ａには第２フレームの第１操作情報および第２操作情報が記憶されているので、ゲーム進行部１１２Ａはこれらの特定に成功する。したがって、ゲーム進行部１１２Ａは、第２フレームの第１操作情報および第２操作情報に基づいて、第５フレームにおいてゲームを進行させる。このように、ゲーム進行部１１２Ａは、各フレームにおいて、現フレームよりも３つ前のフレームの第１操作情報および第２操作情報を記憶部１２０Ａから特定できる限り、各フレームにおいてゲームを停止させずに進行させることができる。同様に、ゲーム進行部１１２Ｂは、次の第５フレームにおいて、それよりも３つ前の第２フレームの第１操作情報および第２操作情報を記憶部１２０Ｂから特定する。記憶部１２０Ｂには第２フレームの第１操作情報および第２操作情報が記憶されているので、ゲーム進行部１１２Ｂはこれらの特定に成功する。したがって、ゲーム進行部１１２Ｂは、第２フレームの第１操作情報および第２操作情報に基づいて、第５フレームにおいてゲームを進行させる。このように、ゲーム進行部１１２Ｂは、各フレームにおいて、現フレームよりも３つ前のフレームの第１操作情報および第２操作情報を記憶部１２０Ｂから特定できる限り、各フレームにおいてゲームを停止させずに進行させることができる。
【００８３】
図５は、ある実施の形態に係るゲームシステム１が、ゲームプログラム１３１に基づいて実行する処理の流れを示すフローチャートである。ゲームシステム１は、図５に示す一連の処理を、ゲームの開始後に実行する。以下では、ゲームシステム１が、ユーザからの操作の受け付け、操作情報の送受信、および操作情報の不足によるゲームの停止を、フレームごと実行する例を説明する。図５に示すステップＳ１１１〜Ｓ１１３、Ｓ１０１〜Ｓ１０４、Ｓ１２１〜Ｓ１２６の各処理は、図４に示すステップＳ１１１〜Ｓ１１３、Ｓ１０１〜Ｓ１０４、Ｓ１２１〜Ｓ１２６の各処理と同一であるため、詳細な説明を繰り返さない。
【００８４】
図５の例では、ゲームシステム１おいて通信遅延が発生しており、サーバ２００からユーザ端末１００Ａへの情報送信に要する時間が長くなっている。そのため、第１フレームの第２操作情報は、第１フレーム〜第４フレームのそれぞれにおいて、ユーザ端末１００Ａに到着していない。したがって、通信部１１５Ａは、第１フレームの第１操作情報を、第４フレームまでにサーバ２００から受信することができない。同様に、通信部１１５Ａは、第２フレーム〜第４フレームの第２操作情報も、第４フレームまでに受信することができない。したがって、図５の例では、第４フレームにおいて、記憶部１２０Ａは、第１フレーム〜第４フレームの第１操作情報を記憶しているが、第１フレーム〜第４フレームの第２操作情報は記憶してない。
【００８５】
ステップＳ２１４において、ゲーム進行部１１２Ａは、第１フレームの第１操作情報を、第４フレームにおいて記憶部１２０Ａから特定する。ゲーム進行部１１２Ａは、まず、第４フレームの番号「４」よりも、第１時間に相当するフレーム数「３」だけ小さい第１フレームの番号「１」を特定する。ゲーム進行部１１２Ａは、さらに、記憶部１２０Ａに記憶される複数の第１操作情報の中から、特定された番号「１」を含む第１操作情報を、第１フレームの第１操作情報として特定する。記憶部１２０Ａには番号「１」を含む第２操作情報が記憶されない。したがって、ゲーム進行部１１２Ａは、第１フレームの第２操作情報を記憶から特定することができない。このように、ゲーム進行部１１２Ａは、第１フレームの第１操作情報および第１フレームの第２操作情報のうち、第１フレームの第１操作情報のみを特定する。
【００８６】
ステップＳ２１５において、ゲーム進行部１１２Ａは、第１フレームの第２操作情報を特定できなったことに基づいて、第４フレームにおいてゲームを停止する。このゲーム停止は、第１フレームの第１操作を受け付けてから第１時間が経過するまでに、第１フレームの第２操作情報が操作受付部１１１Ａに到着しなかったことを原因として発生する。以下では、このゲーム停止を、操作情報の未着による停止と表記する場合がある。ゲーム進行部１１２Ａは、第４フレームにゲームを停止させる際、第４フレームにおいて、ゲームを進行させるためのゲーム処理を実行しない。ゲーム進行部１１２Ａは、例えば、第４フレームにおいて、第１キャラクタおよび第２キャラクタの双方を制御しない。表示制御部１１４Ａは、ゲームが停止したことに基づいて、第４フレームにおいてゲーム画面を更新しない。これにより、第４フレームにおいて、第３フレームと同一のゲーム画面が表示部１５２Ａに表示される。
【００８７】
ゲーム進行部１１２Ａは、現フレームにおいてゲームが停止した場合、現在のフレーム番号を同一値に維持する。ユーザ端末１００Ａは、例えば、第４フレームにおいてゲームが停止した場合、次のフレームを再び第４フレームとして扱う。ゲーム進行部１１２Ａは、さらに、第１フレームにおいてユーザ端末１００Ｂが第２操作を受け付けた後、第１時間が経過するまでに第１フレームの第２操作情報を受信しない場合、その後に第１フレームの第２操作情報を受信するまでの間、フレームごとにゲームを停止させる。通信部１１５Ａは、ゲ第１フレームの第１操作を受け付けた後、第１時間が経過するまでの間に、第１フレームの番号が含まれる第２操作情報をサーバ２００から受信しかった場合、ユーザ端末１００Ｂが第２操作を受け付けた後か第１時間が経過するまでの間に第２操作情報を受信しなかったことを特定する。通信部１１５Ａが、再度の第４フレームにおいても第１フレームの第２操作情報をサーバ２００から受信しなかったとする。この場合、ゲーム進行部１１２Ａは、２度目の第４フレームにおいて、再び、第１フレームの第２操作情報を特定することができない。したがって、ゲーム進行部１１２Ａは、２度目の第４フレームにおいても、ゲームを進行させずに停止する。これにより、操作情報の未着によるゲームの停止が２フレーム続いて発生することになる。
【００８８】
通信部１１５Ａが、３度目の第４フレームにおいて、第１フレームの第２操作情報をサーバ２００から受信したとする。この場合、ゲーム進行部１１２Ａは、２度目の第３フレームにおいてゲームを停止させた後、３度目の第４フレームにおいて、第１フレームの第１操作情報および第２操作情報を特定することができる。したがって、ゲーム進行部１１２Ａは、３度目の第４フレームにおいて、ゲームを進行させる。これにより、ゲームの停止が２フレーム続いた後、ゲームの進行が再開される。
【００８９】
図６は、ある実施の形態に係るゲームシステム１が、ゲームプログラム１３１に基づいて実行する処理の流れを示すフローチャートである。ゲームシステム１は、図５に示す一連の処理を、ユーザ端末１００Ａにおけるゲームの停止後に実行する。
【００９０】
ステップＳ３１１において、停止発生率特定部１１３は、基準時間が経過するたびに、直近の基準時間内に発生したゲームの停止回数を特定する。ステップＳ３１２において、停止発生率特定部１１３は、直近の基準時間内におけるゲームの停止発生率を特定する。停止発生率特定部１１３は、詳細には、ゲームの停止回数を、基準時間に相当する基準フレーム数で除算することによって、ゲームの停止発生率を特定する。このように、ゲームの停止発生率は、基準フレーム数に対する、ゲームを停止させたフレーム数の割合である。
【００９１】
ステップＳ３１３において、停止発生率特定部１１３は、停止発生率が閾値以上であるか否かを判定する。ステップＳ３１３においてＮＯの場合、図６に示す一連の処理は終了する。停止発生率が閾値を下回る場合は、基準時間内においてゲームがあまり停止しないので、ユーザＡは快適にゲームをプレイすることができる。したがって、ユーザ端末１００Ａは、現在の第１時間を継続して用いることによって、ゲームを進行させるようにする。
【００９２】
ステップＳ３１３においてＹＥＳの場合、ステップＳ３１４において、通信部１１５Ａは、第１時間の増加を要求する要求情報を、送達確認を行うＴＣＰ（Transmission Control Protocol）に従う第２通信によってサーバ２００に送信する。以下、ＴＰＣに従う第２通信を、単にＴＣＰ通信と表記する。ＴＣＰ通信によって送信されるデータは、ＵＤＰ通信よりも低速で通信相手に到着するが、送達確認を伴うので、ＵＤＰ通信とは異なり通信相手に確実に到着することが保証される。ステップＳ３０１において、通信部２１３は、要求情報を、ユーザ端末１００ＡからＴＣＰ通信によって受信する。ステップＳ３０３において、時間情報生成部２１２は、要求情報の受信に応答して、記憶部２３０に記憶される時間情報を、より長い第１時間を表す時間情報に変更する。
【００９３】
時間情報生成部２１２は、例えば、記憶部２３０に記憶される時間情報が表す第１時間に、１フレーム分の時間を加算した新たな第１時間を特定する。時間情報生成部２１２は、記憶部２３０に記憶される時間情報を、特定した新たな第１時間を表す時間情報に変更する。ここでは、新たな第１時間は、４フレーム分の長さに相当する。ステップＳ３０３において、通信部２１３は、変更後の時間情報を、ユーザ端末１００Ａおよびユーザ端末１００ＢにＴＣＰ通信によって送信する。ステップＳ３１５において、通信部１１５Ａは、変更後の時間情報を、サーバ２００からＴＣＰ通信によって受信する。この後、ユーザ端末１００Ａは、より長い第１時間を、ゲームを進行させるために用いる。ステップＳ３２１において、通信部１１５Ｂは、変更後の時間情報を、サーバ２００からＴＣＰ通信によって受信する。この後、ユーザ端末１００Ｂは、ユーザ端末１００Ａと同様に、より長い第１時間を、ゲームを進行させるために用いる。
【００９４】
（主要な作用効果）
サーバ２００は、複数のユーザ端末１００のそれぞれとサーバ２００との間の通信時間を、サーバ２００自らが特定すると共に、その特定結果に基づいて第１時間を決定する。これにより、各ユーザ端末１００が、サーバ２００とユーザ端末１００との間の通信時間を特定する必要がなくなるので、ゲームシステム１全体における処理の効率を向上させることができる。
【００９５】
サーバ２００は、複数の通信時間のうち最も大きい時間を第１時間として特定するので、最も通信速度の遅いユーザ端末１００に合わせて各ユーザ端末１００において用いられる第１時間を特定することができる。これにより、最も通信速度の遅いユーザ端末１００から送信される操作情報が、他のユーザ端末１００において第１時間内に未着となる可能性を低くすることができる。したがって、各ユーザ端末１００において操作情報の未着によるゲームの停止が発生する可能性を低くすることができるので、各ユーザ端末１００におけるゲームのプレイ感を一律に向上させることができる。
【００９６】
ユーザ端末１００Ａは、第１操作が受け付けられた第１時点（第１フレーム）から第１時間が経過した第２時点（第４フレーム）に、第１フレームの第１操作を表す第１操作情報と、第１フレームの第２操作情報とに基づいて、ゲームを進行させる。これにより、ユーザ端末１００Ａには、第１フレームにおけるユーザＡによる第１操作の後、第２操作情報を受信するための時間を、第１時間だけ確保することができる。したがって、ユーザ端末１００Ａは、多少の通信遅延が発生して第１フレームの第２操作情報の到着が遅れても、第１時間が経過するまでに第２操作情報を受信できればゲームを問題なく進行させることができるため、第２操作情報の未着によるゲーム停止の発生頻度を下げることができる。
【００９７】
しかし、第１時間は、サーバ２００がゲームの開始前に特定した時間であるため、ゲームの開始後においても適切な値であるとは限らない。ゲームの開始後、ゲームシステム１における通信状況が変化したことによって、第１時間をより長くする必要が生じる場合もある。例えば、ゲームの開始後に、通信途中における操作情報の消失が起こりやすくなったために、ゲーム開始前に特定された第１時間を用いたままでは、第２操作情報を受信するための時間を十分に確保できなくなり得る。この場合、第１時間をより長くしないと、第２操作情報の未着によるゲームの停止が頻発することによって、ゲーム画面のガタ付きが頻発してしまう。
【００９８】
ユーザ端末１００は、第２操作情報の未着によるゲームの停止が発生した場合、ゲームの停止発生状況を特定する。ユーザ端末１００は、ゲームの停止発生状況が所定の条件を満たす場合に、要求情報をサーバ２００に送信する。停止発生率が閾値以上であることは、停止発生状況が所定の条件を満たす場合の一例である。サーバ２００は、要求情報の受信に応答して、記憶部２３０に記憶される時間情報を、より長い第１時間に変更するこれにより、停止発生状況が所定の条件を満たしたユーザ端末１００において、第１時間がより長くなるので、ゲーム画面のガタ付きを防止でき、ゲームのプレイ感を改善することができる。
【００９９】
ゲームシステム１は、例えば、いずれかのユーザ端末１００におけるゲームの停止発生率が閾値以上となった場合、第１時間をより長くする。これにより、各ユーザ端末１００は、より長い第１時間を、互いに同期してゲームを進行させるために用いることができる。その結果、各ユーザ端末１００は、第１操作を受け付けた後、第１操作と同一の時点に受け付けられた第２操作の内容を表す第２操作情報を受信するまで、より長い時間待つことができる。これにより、第２操作情報の未着によるゲーム停止の発生頻度を下げることができるので、ゲーム画面のガタ付きを防止でき、ゲームのプレイ感を改善することができる。
【０１００】
ゲームシステム１では、第１時間をあまり長くしすぎると、操作レスポンスの悪化を招いてしまう。そこで、ゲームシステム１は、第１時間を、ゲームシステム１に設定される上限を超えて長くすることはない。これにより、操作レスポンスの悪化およびゲーム画面のガタ付きの双方の悪影響を、必要最小限に留めることができる。
【０１０１】
ユーザ端末１００およびサーバ２００は、操作情報をＵＤＰ通信によって送受信する。これにより、操作情報を高速に送受信することができるので、マルチプレイゲームをよりスムーズに進行させることができる。ユーザ端末１００は、要求情報をＴＣＰ通信によってサーバ２００に送信する。これにより、要求情報を確実にサーバ２００に受信させることができるので、第１時間を確実に増加させることができる。
【０１０２】
（その他の例）
通信部２１３は、ゲームが開始される前における任意のタイミングで、第１データを複数のユーザ端末１００に送信することができる。通信部２１３は、第１データを複数のユーザ端末１００に同時に送信してもよいし、異なるタイミングで複数のユーザ端末１００のそれぞれに送信してもよい。
【０１０３】
時間情報生成部２１２は、複数の通信時間に基づいて、任意の手法によって第１時間を特定することができる。時間情報生成部２１２は、例えば、複数の通信時間のうち最も大きい時間を、第１時間として特定する。これは第１時間の特定手法の一例に過ぎない。
【０１０４】
ゲームシステム１は、操作情報を、複数のフレームごとに送受信することができる。複数のフレームが、たとえばフレームであるとする。この場合、通信部１１５Ａは、２フレームごとに（１フレーム間隔で）、第１操作情報を送信し、かつ、第２操作情報を受信する。通信部１１５Ｂは、２フレームごとに、第２操作情報を送信し、かつ、第１操作情報を受信する。サーバ２００は、２フレームごとに、第１操作情報および第２操作情報を送受信する。送受信の単位フレーム数が小さいほど、１秒間当たりの操作情報の送受信回数が多くなるので、ゲームのプレイ感をより高めることができる。単位フレーム数が大きいほど、１秒間当たりの操作情報の送受信回数が小さくなるので、サーバ２００および各ユーザ端末１００における処理負荷をより下げることができる。
【０１０５】
ゲームシステム１は、送達確認を行わない任意の第１通信プロトコルに従う第１通信によって、操作情報を送受信することができる。上述したＵＤＰは、第１通信プロトコルの一例に過ぎない。ユーザ端末１００は、送達確認を行う任意の第２通信プロトコルに従う第２通信によって、サーバ２００に要求情報を送信することができる。上述したＴＣＰは、第２通信プロトコルの一例に過ぎない。
【０１０６】
通信部１１５は、現フレームの操作情報と、現フレームから一定数のフレーム分さかのぼった過去の各フレームの各操作情報とを含む複数の操作情報を、サーバ２００に送信することができる。一定数は、１以上の任意の整数である。一定数が、例えば３であるとする。通信部１１５Ａは、例えば、第４フレームにおいて、第４フレームの第１操作情報と、第１フレーム〜第３フレームの各第１操作情報とを含む４フレーム分の複数の第１操作情報を、サーバ２００に送信する。通信部２１３は、ユーザ端末１００から受信した４フレーム分の第１操作情報を、ユーザ端末１００Ｂに送信する。これにより、通信部１１５Ｂは、４フレーム分の第１操作情報を、サーバ２００から受信する。通信部１１５Ｂは、同様に、第４フレームにおいて、第４フレームの第２操作情報と、第１フレーム〜第３フレームの各第２操作情報とを含む４フレーム分の複数の第２操作情報を、サーバ２００に送信する。通信部２１３は、ユーザ端末１００Ｂから受信した４フレーム分の第１操作情報を、ユーザ端末１００Ａに送信する。これにより、通信部１１５Ａは、４フレーム分の第２操作情報を、サーバ２００から受信する。
【０１０７】
第１フレームにおいてユーザ端末１００Ｂから送信された第１フレームの第２操作情報が、送信途中で消失したことにより、ユーザ端末１００Ａまで到着しなかったとする。この場合でも、第４フレームにおいてユーザ端末１００Ｂから送信される４フレーム分の第２操作情報には、第１フレームの第２操作情報も含まれている。したがって、ユーザ端末１００Ａは、第４フレームにおいて、第１フレーム〜第４フレームまでの４フレーム分の第２操作情報を受信すれば、送信途中で消失した第１フレームをも、第４フレームで受信することができる。これにより、第１フレームの後から第１時間が経過するまでにユーザ端末１００Ａが第１フレームの第２操作情報を受信できる可能性を高めることができるので、ユーザ端末１００Ａにおいて第１フレームの操作情報の未着によるゲーム停止が発生する可能性を下げることができる。さらには、仮にあるフレームにおいてゲームの停止が発生したとしても、次のフレーム以降に、ゲームの進行に必要な操作情報を受信できる可能性が高くなるので、ゲーム停止が続く状態を回避することができる。
【０１０８】
通信部１１５は、ゲームが停止した場合、前回送信した複数の操作情報と同一の複数の操作情報を、サーバ２００に送信することができる。ユーザ端末１００Ａが、例えば、第５フレームにおいて、第２フレームの第２操作情報の未着のためゲームを停止させたとする。この場合、通信部１１５Ａは、１つ前の第４フレームにおいて送信した第１フレーム〜第４フレームの第１操作情報と同一の複数の第１操作情報を、第５フレームにおいてサーバ２００に送信する。言い換えれば、通信部１１５Ａは、第４フレームにおいて送信済みの第１フレーム〜第４フレームの第１操作情報を、第５フレームにおいてサーバ２００に再送信する。
【０１０９】
ユーザ端末１００Ａが第５フレームにおいてゲームを停止させた場合、最新の第１操作情報がユーザ端末１００Ｂに到着していないために、ユーザ端末１００Ｂが第５フレームにおいて最新の第２操作情報を送信できなくなっている可能性がある。ユーザ端末１００が第５フレームにおいて最新の第１操作情報を含む複数の第１操作情報を送信すれば、最新の第１操作情報がユーザ端末１００Ｂに到着したことによって、ユーザ端末１００Ｂが最新の第２操作情報を送信できるようになる可能性を高めることができる。これにより、複数のユーザ端末１００が、最新の操作情報を互いに送信できなくなるデッドロック状態に陥ることを回避できるので、マルチプレイゲームの安定性を高めることができる。
【０１１０】
通信部１１５は、停止発生率が閾値以上になったとしても、第１時間が上限に達している場合は、要求情報をサーバ２００に送信しないようにすることができる。この場合、サーバ２００は、第１時間が上限に達している場合、要求情報をユーザ端末１００Ａから受信しない。これにより、各ユーザ端末１００において、ユーザから操作を受け付けてから、当該操作に応じてゲームが進行されるまでに要する待ち時間が、第１時間の上限を超えることがない。その結果、ユーザの操作に対するゲーム進行の応答レスポンスが過剰に遅くなることがないため、ユーザに快適にゲームをプレイさせることができる。
【０１１１】
〔ソフトウェアによる実現例〕
制御部１１０および２１０の制御ブロックは、集積回路（ＩＣチップ）等に形成された論理回路（ハードウェア）によって実現してもよいし、ＣＰＵ（Central Processing Unit）を用いてソフトウェアによって実現してもよい。
【０１１２】
後者の場合、制御部１１０、もしくはその両方を備えた情報処理装置は、各機能を実現するソフトウェアであるプログラムの命令を実行するＣＰＵ、上記プログラム及び各種データがコンピュータ（またはＣＰＵ）で読み取り可能に記録されたＲＯＭ（Read Only Memory）又は記憶装置（これらを「記録媒体」と称する）、上記プログラムを展開するＲＡＭ（Random Access Memory）などを備えている。そして、コンピュータ（またはＣＰＵ）が上記プログラムを上記記録媒体から読み取って実行することにより、本発明の目的が達成される。上記記録媒体としては、「一時的でない有形の媒体」、例えば、テープ、ディスク、カード、半導体メモリ、プログラマブルな論理回路などを用いることができる。また、上記プログラムは、該プログラムを伝送可能な任意の伝送媒体（通信ネットワークや放送波等）を介して上記コンピュータに供給されてもよい。なお、本発明の一態様は、上記プログラムが電子的な伝送によって具現化された、搬送波に埋め込まれたデータ信号の形態でも実現され得る。
【０１１３】
本発明は上述した各実施形態に限定されるものではなく、請求項に示した範囲で種々の変更が可能であり、異なる実施形態にそれぞれ開示された技術的手段を適宜組み合わせて得られる実施形態についても本発明の技術的範囲に含まれる。
【０１１４】
〔付記事項〕
本発明の一側面に係る内容を列記すると以下の通りである。
【０１１５】
（項目１）  ゲームプログラムを説明した。本開示のある局面によると、ゲームプログラム（１３１）は、プロセッサ（２０）を備えたサーバ（２００）により実行される。ゲームプログラムは、プロセッサに、複数のユーザ端末に第１データを送信するステップ（Ｓ１）と、複数のユーザ端末のそれぞれが第１データの受信に応答して送信した第２データを受信するステップ（Ｓ２）と、第１データの送信から第２データの受信までに要する通信時間を、ユーザ端末ごとに特定することによって、複数の通信時間を特定するステップ（Ｓ３）と、特定された複数の通信時間に基づいて、複数のユーザ端末が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成するステップ（Ｓ４）と、生成された時間情報を複数のユーザ端末に送信するステップ（Ｓ５）とを実行させる。
【０１１６】
（項目２）  （項目１）において、ゲームプログラムは、プロセッサに、時間情報の送信後、複数のユーザ端末にゲームを開始させるステップ（Ｓ５）と、複数のユーザ端末のうちの第１ユーザ端末が第１ユーザから受け付けた第１操作の内容を表す第１操作情報を、第１ユーザ端末から受信するステップ（Ｓ１０１）と、第１操作情報を、複数のユーザ端末のうちの第１ユーザ端末以外の各ユーザ端末に送信するステップ（Ｓ１０２）と、複数のユーザ端末のうちの第２ユーザ端末が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、第２ユーザ端末から受信するステップ（Ｓ１０３）と、第２操作情報を、複数のユーザ端末のうちの第２ユーザ端末以外の各ユーザ端末に送信するステップ（Ｓ１０４）と、第２ユーザ端末が第２操作を受け付けた後から第１時間が経過するまでの間に第２操作情報を受信しなかった場合に第２操作情報を受信するまでの間にゲームを停止させる第１ユーザ端末（１００Ａ）であって、ゲームの停止発生状況が所定の条件を満たす第１ユーザ端末から、第１時間の増加を要求するための要求情報を受信するステップ（Ｓ３０１）と、要求情報の受信に応答して、時間情報を、より長い第１時間を表す時間情報に変更するステップ（Ｓ３０２）と、変更後の時間情報を、複数のユーザ端末に送信するステップ（Ｓ３０３）とを実行させる。
【０１１７】
（項目３）  （項目２）において、第１操作情報を受信するステップでは、現フレームにおいて受け付けられた第１操作の内容を表す第１操作情報と、現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた第１操作の内容を表す各第１操作情報とを含む複数の第１操作情報を、フレームごとに受信し、第１操作情報を送信するステップでは、複数の第１操作情報をフレームごとに送信し、第２操作情報を受信するステップでは、現フレームにおいて受け付けられた第２操作の内容を表す第２操作情報と、現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた第２操作の内容を表す各第２操作情報とを含む複数の第２操作情報を、フレームごとに受信し、第２操作情報を送信するステップでは、複数の第２操作情報をフレームごとに送信し、要求情報を受信するステップでは、停止発生状況が所定の条件を満たすフレームにおいてゲームを停止させる第１ユーザ端末であって、基準フレーム数に対するゲームを停止させたフレーム数の割合である停止発生率を停止発生状況として特定すると共に停止発生率が閾値以上になった場合に要求情報を送信する第１ユーザ端末から要求情報を受信する。
【０１１８】
（項目４）  （項目３）において、変更するステップでは、時間情報を、第１時間に１フレーム分の時間を加算した時間を表す時間情報に変更する。
【０１１９】
（項目５）  （項目２）〜（項目４）のいずれかにおいて、第１操作情報を受信するステップでは、第１操作情報を、送達確認を行わない第１通信プロトコルに従う第１通信により受信し、第１操作情報を送信するステップでは、第１操作情報を、第１通信により送信し、第２操作情報を受信するステップでは、第２操作情報を、第１通信により受信し、第２操作情報を送信するステップでは、第２操作情報を、第１通信により送信し、要求情報を送信するステップでは、要求情報を、送達確認を行う第２通信プロトコルに従う第２通信により受信する。
【０１２０】
（項目６）  （項目１）〜（項目５）のいずれかにおいて、第１時間を特定するステップでは、複数の通信時間のうち最も大きい通信時間を、第１時間として特定する。
【０１２１】
（項目７）  （項目２）〜（項目５）のいずれかにおいて、要求情報を受信するステップにおいて、第１時間が上限時間に達している場合、第１ユーザ端末から要求情報を受信しない。
【０１２２】
（項目８）  ゲームプログラムを説明した。本開示のある局面によると、ゲームプログラム（１３１）は、プロセッサ（１０）を備えたユーザ端末（１００）により実行される。ゲームプログラムは、プロセッサに、複数のユーザ端末がゲームを互いに同期して進行させるために用いる第１時間を表す時間情報を、サーバ（２００）から受信するステップ（Ｓ１３）と、ユーザ端末に対する第１操作を、第１ユーザから受け付けるステップ（Ｓ１１１）と、第１操作の内容を表す第１操作情報を、サーバに送信するステップ（Ｓ１１２）と、第２ユーザ端末（１００Ｂ）が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、サーバから受信するステップ（Ｓ１１４）と、第１操作と、第１操作と同一の時点に受け付けられた第２操作を表す第２操作情報とに基づいて、ゲームを進行させるステップ（Ｓ１１６）と、第２ユーザ端末が第２操作を受け付けた後から第１時間が経過するまでの間に第２操作情報を受信しなかった場合、第２操作情報を受信するまでの間、ゲームを停止させるステップ（Ｓ２１５）と、ゲームを停止させた場合、ゲームの停止発生状況を特定するステップ（Ｓ３１２）と、停止発生状況が所定の条件を満たす場合、第１時間の増加を要求するための要求情報をサーバに送信するステップ（Ｓ３１４）とを実行させる。
【０１２３】
（項目９）  （項目８）において、第１操作を受け付けるステップでは、第１操作をフレームごとに受け付け、第１操作情報を送信するステップでは、現フレームにおいて受け付けられた第１操作の内容を表す第１操作情報と、現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた第１操作の内容を表す各第１操作情報とを含む複数の第１操作情報を、フレームごとに送信し、第２操作情報を受信するステップでは、現フレームに受け付けられた第２操作の内容を表す第２操作情報と、現フレームから一定数のフレーム分さかのぼった過去の各フレームにおいて受け付けられた第２操作の内容を表す各第２操作情報とを含む複数の第２操作情報を、フレームごとに受信し、停止させるステップでは、第２操作情報を受信するまでの間、フレームごとにゲームを停止させ、特定するステップでは、基準フレーム数に対するゲームを停止させたフレーム数の割合であるゲームの停止発生率を、停止発生状況として特定し、要求情報を送信するステップでは、停止発生率が閾値以上になった場合、要求情報を送信する。
【０１２４】
（項目１０）  （項目９）において、第１操作情報を送信するステップでは、ゲームが停止した場合、前回送信した複数の第１操作情報と同一の複数の第１操作情報を送信する。
【０１２５】
（項目１１）  （項目８）〜（項目１０）のいずれかにおいて、第１操作情報を送信するステップでは、第１操作情報を、送達確認を行わない第１通信プロトコルに従う第１通信により送信し、第２操作情報を送信するステップでは、第２操作情報を、第１通信により送信し、要求情報を送信するステップでは、要求情報を、送達確認を行う第２通信プロトコルにより受信する。
【０１２６】
（項目１２）  （項目８）〜（項目１１）のいずれかにおいて、ゲームを進行させるステップでは、第１操作が受け付けられた第１時点から第１時間が経過した第２時点に、第１時点において受け付けられた第１操作を表す第１操作情報と、第１時点において受け付けられた第２操作を表す第２操作情報とに基づいて、ゲームを進行させる。
【０１２７】
（項目１３）  （項目８）〜（項目１２）のいずれかにおいて、要求情報を送信するステップにおいて、第１時間が上限時間に達している場合、要求情報を送信しない。
【０１２８】
（項目１４）  ゲームプログラムを実行する方法を説明した。本開示のある局面によると、ゲームプログラム（１３１）は、プロセッサ（２０）を備えたサーバ（２００）によって実行される。方法は、プロセッサが、複数のユーザ端末に第１データを送信するステップ（Ｓ１）と、複数のユーザ端末のそれぞれが第１データの受信に応答して送信した第２データを受信するステップ（Ｓ２）と、第１データの送信から第２データの受信までに要する通信時間を、ユーザ端末ごとに特定することによって、複数の通信時間を特定するステップ（Ｓ３）と、特定された複数の通信時間に基づいて、複数のユーザ端末が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成するステップ（Ｓ４）と、生成された時間情報を複数のユーザ端末に送信するステップ（Ｓ５）とを含む。
【０１２９】
（項目１５）  サーバを説明した。本開示のある局面によると、サーバ（２００）は、ゲームプログラム（１３１）を記憶する記憶部（２２０）と、ゲームプログラムを実行することにより、情報処理装置の動作を制御する制御部（２１０）と、を備える。制御部は、複数のユーザ端末に第１データを送信し、複数のユーザ端末のそれぞれが第１データの受信に応答して第２データを受信し、第１データの送信から第２データの受信までに要する通信時間を、ユーザ端末ごとに特定することによって、複数の通信時間を特定し、特定された複数の通信時間に基づいて、複数のユーザ端末が互いに同期してゲームを進行させるために用いる第１時間を表す時間情報を生成し、生成された時間情報を複数のユーザ端末に送信する。
【０１３０】
（項目１６）  ゲームプログラムを実行する方法を説明した。本開示のある局面によると、ゲームプログラム（１３１）は、プロセッサ（１０）を備えたユーザ端末（１００）によって実行される。方法は、プロセッサが、複数のユーザ端末がゲームを互いに同期して進行させるために用いる第１時間を表す時間情報を、サーバ（２００）から受信するステップ（Ｓ１３）と、ユーザ端末に対する第１操作を、第１ユーザから受け付けるステップ（Ｓ１１１）と、第１操作の内容を表す第１操作情報を、サーバに送信するステップ（Ｓ１１２）と、第２ユーザ端末（１００Ｂ）が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、サーバから受信するステップ（Ｓ１１４）と、第１操作と、第１操作と同一の時点に受け付けられた第２操作を表す第２操作情報とに基づいて、ゲームを進行させるステップ（Ｓ１１６）と、第２ユーザ端末が第２操作を受け付けた後から第１時間が経過するまでの間に第２操作情報を受信しなかった場合、第２操作情報を受信するまでの間、ゲームを停止させるステップ（Ｓ２１５）と、ゲームを停止させた場合、ゲームの停止発生状況を特定するステップ（Ｓ３１２）と、停止発生状況が所定の条件を満たす場合、第１時間の増加を要求するための要求情報をサーバに送信するステップ（Ｓ３１４）とを含む。
【０１３１】
（項目１７）  情報処理装置を説明した。本開示のある局面によると、情報処理装置（ユーザ端末１００）は、ゲームプログラム（１３１）を記憶する記憶部（１２０）と、ゲームプログラムを実行することにより、情報処理装置の動作を制御する制御部（１１０）と、を備える。制御部は、複数の情報処理装置がゲームを互いに同期して進行させるために用いる第１時間を表す時間情報を、サーバから受信し、情報処理装置に対する第１操作を、第１ユーザから受け付け、第１操作の内容を表す第１操作情報を、サーバに送信し、第２情報処理装置が第２ユーザから受け付けた第２操作の内容を表す第２操作情報を、サーバから受信し、第１操作と、第１操作と同一の時点に受け付けられた第２操作を表す第２操作情報とに基づいて、ゲームを進行させ、第２情報処理装置が第２操作を受け付けた後から第１時間が経過するまでの間に第２操作情報を受信しなかった場合、第２操作情報を受信するまでの間、ゲームを停止させ、ゲームを停止させた場合、ゲームの停止発生状況を特定し、停止発生状況が所定の条件を満たす場合、第１時間の増加を要求するための要求情報をサーバに送信する。
【符号の説明】
【０１３２】
１  ゲームシステム、２  ネットワーク、１０，２０  プロセッサ、１１，２１  メモリ、１２，２２  ストレージ、１３，２３  通信ＩＦ（操作部）、１４，２４  入出力ＩＦ（操作部）、１５  タッチスクリーン（表示部、操作部）、１７  カメラ（操作部）、１８  測距センサ（操作部）、１００  ユーザ端末（情報処理装置）、１１０，２１０  制御部、１１１  操作受付部、１１２  ゲーム進行部、１１３  停止率特定部、１１４  表示制御部、１１５  通信部、１２０，２２０  記憶部、１３１  ゲームプログラム、１３２  ゲーム情報、１３３  ユーザ情報、１５１  入力部（操作部）、１５２  表示部、２００  サーバ（情報処理装置）、２１１  通信時間特定部、２１２  時間情報生成部、２１３  通信部、１０１０  物体、１０２０  コントローラ（操作部）、１０３０  記憶媒体
【図１】
2020062106.tif 000003
【図２】
2020062106.tif 000004
【図３】
2020062106.tif 000005
【図４】
2020062106.tif 000006
【図５】
2020062106.tif 000007
【図６】
2020062106.tif 000008