以下、添付図面を参照しながら各実施例について詳細に説明する。
<概要>まず、図1~図6C、図6E、及び図6Fを参照して、一実施例によるゲームシステム1の概要について説明する。
図1は、一実施例によるゲームシステム1の全体構成を概略的に示す図である。
ゲームシステム1は、例えば対戦型のゲームに用いるものである。対戦型とは、第1プレイヤと第2プレイヤとが相対して戦うタイプであるが、第1プレイヤと第2プレイヤとが1対1で対峙する形態に限らず、1対複数や、複数対複数等の形態であってよい。例えば、1対複数の場合、第1プレイヤと第2プレイヤ及び一人以上の他のプレイヤとが対峙する形態、又は、第1プレイヤ及び一人以上の他のプレイヤと第2プレイヤとが対峙する形態であり、複数対複数の場合、第1プレイヤ及び一人以上の他のプレイヤと第2プレイヤ及び一人以上の他のプレイヤとが対峙する形態である。なお、1対複数の場合、複数で協力して共通の敵と戦う形態(共闘の形態)である。1対1の場合、第1プレイヤ及び第2プレイヤのいずれか一方に関連付けられた操作は、コンピュータにより実現されてもよい。また、1対複数の場合、いずれかのプレイヤに関連付けられた操作は、コンピュータにより実現されてもよい。以下、ユーザとは、第1プレイヤ又は第2プレイヤが人である場合、当該人を指す。また、第1プレイヤにとっては、第2プレイヤは対戦相手であり、第2プレイヤにとっては、第1プレイヤは対戦相手である。また、プレイヤは、ユーザ(人間)とコンピュータを含む概念である。
以下では、主に野球ゲームに適用したゲームシステム1について説明するが、野球ゲーム以外の対戦型の各種ゲーム、例えばサッカーゲームのような他の球技のゲームや、格闘ゲーム、アクションゲーム等に適用できる。
ゲームシステム1は、ゲーム端末群10と、サーバ装置30とを含む。ゲーム端末群10及びサーバ装置30とは、ネットワークNを介して接続される。ネットワークNは、例えば、携帯電話の無線通信網、インターネット、VPN(Virtual Private Network)、WAN(Wide Area Network)、有線ネットワーク、又はこれらの任意の組み合わせ等を含んでもよい。
ゲーム端末群10は、複数のゲーム端末10-1、10-2、10-3、・・・、10-nを含む。これら複数のゲーム端末10-1、10-2、10-3、・・・、10-nは、ネットワークNを介して互いに通信可能になっている。
ゲーム端末10-1は、図1に示すようなスマートフォン等の携帯電話の形態であってもよいし、他の形態であってもよい。例えば、ゲーム端末10-1は、タブレット型コンピュータ)や、ウェアラブル端末、パーソナルコンピュータ、携帯ゲーム機、据置ゲーム機、業務用ゲーム機、情報処理機能を備えた多機能型テレビジョン受像機(スマートテレビ)等の形態であってもよい。これは、他のゲーム端末10-2、10-3、・・・、10-nについても同様である。
サーバ装置30は、複数のゲーム端末10-1、10-2、10-3、・・・、10-nと協動して、各種処理(後述)を実行する。サーバ装置30は、コンピュータの形態であり、複数のサーバコンピュータにより協動して実現されてもよい。例えば、サーバ装置30は、機能ごとに異なるサーバコンピュータを含んでよい(後出の図7参照)。
図2Aは、ゲーム端末10-1のハードウェア構成の一例を概略的に示す図であり、図2Bは、サーバ装置30のハードウェア構成の一例を概略的に示す図である。なお、ここでは、ゲーム端末10-1のハードウェア構成について説明するが、他のゲーム端末10-2、10-3、・・・、10-nについても同様であってよい。
ゲーム端末10-1は、制御部11、記憶部12、通信部13、操作部14、表示部15、及び音声出力部16を含む。
制御部11は、少なくとも一つのマイクロプロセッサ(CPU:Central Processing Unit)を含み、記憶部12に記憶されたオペレーティングシステムやその他のプログラムに従って情報処理を実行する。記憶部12は、ROM(Read Only Memory)やRAM(Random Access Memory)等の主記憶部や、フラッシュメモリ(不揮発性の半導体メモリ)等の補助記憶部を含む。記憶部12は、プログラムやデータを記憶する。なお、例えば、ゲーム端末10-1がパーソナルコンピュータ等である場合、補助記憶部は、例えばハードディスクドライブ又はソリッドステートドライブ等であってよい。通信部13は、ネットワークNを介して他の装置とデータ通信する。通信部13は、通信モジュールや通信インタフェースを含んでよい。
操作部14は、ユーザが各種操作を行うユーザインタフェースである。操作部14は、例えばタッチパネルや、ボタン(キー)、レバー(スティック)、マウス、タッチパッド等を含む。操作部14は、ユーザが音声又はジェスチャによって操作を行うためのものであってもよい。すなわち、操作部14は、ユーザが音声又はジェスチャによって入力操作を行うためのマイクやカメラを含んでもよい。表示部15は、各種画面画像を表示するためのものであり、例えば液晶ディスプレイ又は有機EL(Electro Luminescence)ディスプレイ等である。
音声出力部16は音声データを出力するためのものであり、例えばスピーカ又はヘッドホン等である。
なお、操作部14、表示部15、及び音声出力部16はゲーム端末10-1自体に設けられていてもよいし、ゲーム端末10-1に接続された外部装置として設けられてもよい。
サーバ装置30は、制御部31、記憶部32、及び通信部33を含む。制御部31、記憶部32、及び通信部33は、ゲーム端末10-1の制御部11、記憶部12、及び通信部13と同様である。なお、記憶部32は、リレーショナルデータベースサーバやNoSQLサーバのようなデータベースサーバにより実現されてもよい。
記憶部12又は記憶部32に記憶されるプログラムやデータは、例えば、ネットワークNを介してゲーム端末10-1又はサーバ装置30に供給されてよい。なお、情報記憶媒体(例えば光ディスクや、メモリカード等)に記憶されたプログラムやデータを読み取るための構成要素(例えば光ディスクドライブや、メモリーカードスロット等)がゲーム端末10-1又はサーバ装置30に備えられてもよい。そして、プログラムやデータが情報記憶媒体を介してゲーム端末10-1又はサーバ装置30に供給されてもよい。
図3は、ゲーム端末10-1の機能の一例と、ゲーム端末10-2の機能の一例と、サーバ装置30の機能の一例とを示す図である。なお、ここでは、ゲーム端末10-1、10-2の機能について説明するが、他のゲーム端末10-3、・・・、10-nについても同様であってよい。図4は、ゲーム状況情報の説明図である。なお、図4において、説明用に、ゲーム状況情報の各情報項目の属性が示されているが、属性は、ゲーム状況情報の要素ではない。図5は、ゲームデータ記憶部320内のゲームデータの一例の説明図である。
ゲーム端末10-1及びゲーム端末10-2は、それぞれ、ゲーム実行部110と、修正指示処理部116と、ゲーム状況情報記憶部120とを含む。ゲーム実行部110及び修正指示処理部116は、制御部11が記憶部12内のプログラムを実行することで実現できる。また、ゲーム実行部110は、通信部13を利用することで通信を行い、表示部15に映像を表示し、音声出力部16を利用して音声出力を行うことができる。ゲーム状況情報記憶部120は、記憶部12により実現できる。
サーバ装置30は、強制終了処理部301と、判定処理部302と、ゲームデータ記憶部320とを含む。強制終了処理部301及び判定処理部302は、制御部31が記憶部32内のプログラムを実行することで実現できる。ゲームデータ記憶部320は、記憶部32により実現できる。
以下では、一例として、ゲーム端末10-1(第1ゲーム端末の一例)とゲーム端末10-2(第2ゲーム端末の一例)とサーバ装置30とが協動してゲーム用の各種処理を実行する場合を想定する。ただし、本実施例は、3つ以上のゲーム端末とサーバ装置30とが協動してゲーム用の各種処理を実行する場合にも適用可能である。
ゲーム端末10-1のゲーム実行部110(第1ゲーム実行部の一例)、及び、ゲーム端末10-2のゲーム実行部110(第2ゲーム実行部の一例)は、それぞれ、進行処理部111と、操作情報送受信処理部112と、結果通知処理部113と、ゲーム状況情報送信処理部114と、更新処理部115と、通信処理部118とを含む。なお、本実施例においては、ゲーム端末10-1の修正指示処理部116(第1修正指示処理部の一例)、ゲーム端末10-2の修正指示処理部116(第2修正指示処理部の一例)、サーバ装置30の判定処理部302が、修正部200を形成する。
以下では、主にゲーム端末10-1のゲーム実行部110について説明するが、ゲーム端末10-2のゲーム実行部110について、各種情報の送信先や送信元が逆のゲーム端末10-1になりかつ修正対象の情報が第2ゲーム状況情報(後述)になるだけであり、実質的に同様である。
ゲーム端末10-1の進行処理部111は、第1操作情報(第1指示情報の一例)と、第2操作情報(第2指示情報の一例)とに基づいて、ゲームを進行し、ゲームのゲーム状況を表すゲーム状況情報を、ゲーム端末10-1のゲーム状況情報記憶部120に記憶する進行処理を実行する。
以下、区別のため、ゲーム端末10-1の進行処理部111が生成及び記憶するゲーム状況情報を、「第1ゲーム状況情報」と称し、ゲーム端末10-2の進行処理部111が生成及び記憶するゲーム状況情報を、「第2ゲーム状況情報」と称する。また、区別のため、ゲーム端末10-1の進行処理部111が実行する進行処理を、「第1進行処理」と称し、ゲーム端末10-2の進行処理部111が実行する進行処理を、「第2進行処理」と称する。
第1操作情報は、第1プレイヤ情報に関連付けられた操作情報である。第1プレイヤ情報とは、例えば第1プレイヤに固有の情報であり、例えば第1プレイヤの識別情報である。操作情報は、操作部14を介して入力される。例えば、ゲーム端末10-1で動作中のゲームアプリ(ゲームシステム1に係るゲーム用アプリケーション)に第1プレイヤがログインしている場合に、ゲーム端末10-1の操作部14を介して入力される操作情報は、第1プレイヤ情報に関連付けられた操作情報となる。
第1操作情報は、操作に応じて操作部14で発生する信号データ自体(生データ)の形態であってもよいし、生データを加工して得られる形態であってもよい。これは、第2操作情報についても同様である。例えば、野球ゲームの場合、第1操作情報は、生データを加工して得られる形態の投球情報や打撃情報を含む。
第2操作情報は、第2プレイヤ情報に関連付けられた操作情報である。第1操作情報と同様に、例えば、ゲーム端末10-2で動作中のゲームアプリに第2プレイヤがログインしている場合に、ゲーム端末10-2の操作部14を介して入力される操作情報は、第2プレイヤ情報に関連付けられた操作情報となる。
ゲーム端末10-1の進行処理部111は、ネットワークNを介して第2操作情報をゲーム端末10-2から取得できる。例えば、ゲーム端末10-1の進行処理部111は、サーバ装置30を介してゲーム端末10-1の操作情報送受信処理部112が第2操作情報を受信することで、第2操作情報をゲーム端末10-2から取得してよい。この場合、ゲーム端末10-2は、サーバ装置30に第2操作情報を送信する。
ゲームを進行する処理は、第1操作情報と第2操作情報とに基づく任意の態様であってよく、例えば、第1操作情報と第2操作情報と後述するチーム情報とに基づいて実行されてよい。また、ゲームを進行する処理は、例えば、不確定要素によるゲーム性を高めるために、乱数による抽選処理を含んでよい。例えば、野球ゲームの場合、打球の飛ぶコースや角度、投球のコースや球威といった各種不確定要素が抽選により決定されてもよい。この場合、第1進行処理と第2進行処理とで同じ乱数シードを用いることで、第1進行処理と第2進行処理との間でのゲームの進行態様の整合性を確保できる。すなわち、第1進行処理と第2進行処理においてそれぞれのタイミングで利用される乱数が同じになり、例えば空振りや、ファール、ヒット、エラー等の結果は、第1進行処理と第2進行処理とで同じになる。
ゲーム状況とは、進行されるゲームの状況(ありさま)である。ゲーム状況は、ゲームに登場するゲームオブジェクトの状態を含む。ゲームオブジェクトとは、ゲームに登場するオブジェクトであり、例えば、カードや、フィギュア、アイテム等のことである。野球ゲームの場合、ゲームオブジェクトは、選手を表す。なお、第1プレイヤ情報に関連付けられた各ゲームオブジェクトは、第1操作情報に基づき、第2プレイヤ情報に関連付けられた各ゲームオブジェクトは、第2操作情報に基づき、ゲーム中で野球の試合を行うように描画される。
第1ゲーム状況情報は、進行処理部111が進行させたゲームの状況を表す。本実施例では、一例として、第1ゲーム状況情報は、属性(種類)の異なる情報として、対戦結果関連情報(第1情報の一例)と対戦能力情報(第2情報の一例)とを含む。
対戦結果関連情報は、ゲームに係る対戦結果に影響する対戦結果関連パラメータ(第1パラメータの一例)の値を含む。対戦結果とは、勝敗又は引き分けとして現れる結果であり、得点の状態を含んでよい。対戦結果関連パラメータは、例えば得点である。野球ゲームの場合、対戦結果関連パラメータは、各イニングにおける得点である。図4に示す第1ゲーム状況情報D101では、対戦結果関連パラメータは、自チームの得点と、相手チームの得点である。
対戦結果関連パラメータは、ゲームが進行されると値が変化する。例えば野球ゲームの場合、得点が入ると、得点が変化し、イニングが変わると、直前のイニングの得点が確定する。
対戦能力情報は、終了したゲームに起因して値が変化しかつ対戦能力に影響する対戦能力パラメータ(第2パラメータの一例)の値を含む。対戦能力情報は、例えばチーム情報(後述)に含まれる情報である。例えば、野球ゲームの場合、対戦能力パラメータは、各選手の能力に影響する。選手の能力は、野手の場合、パワー、守備力、肩の強さ、走力、ミート力等であり、投手の場合、制球力、スピード、球威、キレ等である。対戦能力パラメータは、疲労度合いに応じて値が変化するスタミナである。例えば、ある選手のスタミナが低下すると、当該選手の能力が低下する。なお、ある選手のスタミナは、当該選手を休ませたり、回復アイテムを使ったりすることで回復可能とされてよい。なお、以下では、一例として、スタミナを例に挙げて説明するが、スタミナに代えて、疲労度合いのような他の同等のパラメータが使用されてもよい。例えば、疲労度合いの場合、ある選手の疲労度合いが増加すると、当該選手の能力が低下する。図4に示す第1ゲーム状況情報D101では、対戦能力パラメータは、選手ごとのスタミナである。なお、対戦能力パラメータは、選手ごとのスタミナに代えて又は加えて、チーム全体としてのスタミナを含んでもよい。
対戦能力パラメータは、ゲームが進行されるに伴って値が変化するパラメータを含んでもよい。例えば、ある選手に係るスタミナの値は、ゲーム中における当該選手の運動量に関する情報(例えば当該選手が投手であれば投球数、野手であれば出場イニング数)等に基づいて更新される。この場合、スタミナの値は、選手の運動量が大きいほど低下する態様で更新される。従って、ある選手の能力は、ゲーム中の当該選手のスタミナの値の変化に応じてゲーム中に変化する。
対戦能力パラメータは、ゲームが進行されても値は変化しないパラメータを含んでもよい。ゲームが進行されても値は変化しないパラメータである場合、当該パラメータは、ゲームの終了の際又はゲームの終了後に(次のゲームの開始時までに)更新(変化)される。以下、ゲームが進行されても値は変化しないパラメータであってゲームの終了の際又はゲームの終了後に更新されるパラメータを、「ゲーム後更新パラメータ」とも称する。
ゲーム後更新パラメータは、例えば選手の怪我(故障)の有無等である。図4に示す第1ゲーム状況情報D101では、ゲーム後更新パラメータは、選手ごとの能力値と、チーム経験値である。能力値は、例えば、“S”の方が“A”より高く、“A”の方が“B”より高い。また、能力値は、同じ“S”であっても、そのあとに付されている数値が大きいほど高い。ある選手に係る能力値は、ゲームの終了の際の第1ゲーム状況情報のうちの、当該選手の活躍や貢献に関する情報(例えば当該選手が投手であれば、投球成績、当該選手が野手であれば、打撃成績)等に基づいて更新される。この場合、ある選手に係る能力値は、当該選手の活躍度合いが大きいほど増加する態様で更新される。チーム経験値は、例えば勝敗や、得点差、チーム全体としての打撃成績及び投球成績等に応じて算出及び加算される値であってよい。なお、図4では、打撃成績及び投球成績は、値が大きいほど良好な成績であることを意味する。なお、変形例では、スタミナがゲーム後更新パラメータであってもよい。
以下では、第1ゲーム状況情報の対戦能力情報のうちの、ゲーム後更新パラメータの値を表す情報を、第1ゲーム後更新情報(第1所定情報の一例)と称する。また、区別のため、第2ゲーム状況情報の対戦能力情報のうちの、ゲーム後更新パラメータの値を表す情報を、第2ゲーム後更新情報(第2所定情報の一例)と称する。
なお、変形例では、第1ゲーム状況情報の対戦能力情報は、第1ゲーム後更新情報を含まず、第2ゲーム状況情報の対戦能力情報は、第2ゲーム後更新情報を含まない。この場合、後述の更新処理部115は不要となる。
第1ゲーム状況情報は、その他、ゲームに係る対戦結果に影響しないパラメータの値を含んでよい。例えば、野球ゲームの場合、ゲームに係る対戦結果に影響しないパラメータは、安打数、失点、四死球の数、エラーの数等である。図4に示す第1ゲーム状況情報D101では、ゲームに係る対戦結果に影響しないパラメータは、選手ごとの打撃成績及び投球成績と、チーム全体としての打撃成績及び投球成績である。打撃成績は、安打数等に応じて算出される値であってよく、投球成績は、防御率や奪三振数等に応じて算出される値であってよい。
また、第1ゲーム状況情報は、その他、ゲームに係るプレイヤに関する情報(以下、「プレイヤ状況情報」と称する)を含んでよい。プレイヤ状況情報は、プレイヤのランクやポイントであってよい。図4に示す第1ゲーム状況情報D101では、プレイヤ状況情報は、プレイヤポイントの加点値と、現在のランク値である。
進行処理部111は、任意のタイミングで第1ゲーム状況情報を、ゲーム端末10-1のゲーム状況情報記憶部120に記憶してもよい。例えば、進行処理部111は、ゲーム状況が変化するごとに、変化後のゲーム状況を表す第1ゲーム状況情報を、ゲーム状況情報記憶部120に記憶してもよい。なお、第1ゲーム状況情報は、例えば、記憶部12のうちの、揮発性メモリ(図示せず)に記憶されてから、記憶部12のうちの、不揮発性メモリ(ゲーム状況情報記憶部120)に転送される態様で記憶される。なお、第1ゲーム状況情報は、最新のものを更新していく記憶方式でゲーム状況情報記憶部120に記憶されてよい。
なお、進行処理部111は、第1ゲーム状況情報のうちの、属性の異なる情報を、異なるタイミングで更新してもよい。
操作情報送受信処理部112は、ネットワークNを介して第1操作情報をゲーム端末10-2に送信する操作情報送信処理を実行する。例えば、操作情報送受信処理部112は、サーバ装置30に第1操作情報を送信し、サーバ装置30が第1操作情報をゲーム端末10-2に送信する。また、操作情報送受信処理部112は、ネットワークNを介して第2操作情報をゲーム端末10-2から受信する操作情報受信処理を実行する。例えば、ゲーム端末10-2の操作情報送受信処理部112は、サーバ装置30に第2操作情報を送信し、サーバ装置30が第2操作情報をゲーム端末10-1に送信し、ゲーム端末10-1の操作情報送受信処理部112が第2操作情報を受信する。
結果通知処理部113は、通知タイミングで、ゲーム終了の際の第1ゲーム状況情報に基づいて、終了したゲームに係る対戦結果を出力する結果通知処理を実行する。例えば、結果通知処理部113は、対戦結果を表示部15に出力する。通知タイミングは、ゲーム終了の際のタイミングであり、例えば、サーバ装置30から通信処理部118が結果通知指示を受信したタイミングに対応する。なお、サーバ装置30が結果通知指示を送信するタイミングと結果通知処理が実行されるタイミングは、通信時間や処理時間等があるので厳密には同じでないが、実質的に同じである。以下、区別のため、ゲーム端末10-1の結果通知処理部113に係る通知タイミングを、「第1通知タイミング」と称し、ゲーム端末10-2の結果通知処理部113に係る通知タイミングを、「第2通知タイミング」と称する。
対戦結果の出力は、勝ち負け(又は引き分け)を表す態様であり、更に得点の関係を表す態様であってもよい。例えば、結果通知処理は、得点の関係を表す態様として、第1プレイヤ情報に関連付けられた得点と、第2プレイヤ情報に関連付けられた得点とを出力してもよい。
本実施例では、一例として、結果通知処理部113は、ゲームが正常に終了した場合は、得点の関係を表す対戦結果画面を出力し、ゲームが強制的に終了した場合は、得点の関係を表すことなく勝ち負け(又は引き分け)を表す対戦結果画面を出力する。ゲームが正常に終了する場合とは、予め決められたゲームのルールに従って終了する場合である。例えば、野球のゲームの場合、例えば9イニング制で延長なしの場合、9回の裏の攻撃が終了したときに、ゲームが終了する。ゲームが強制的に終了する場合とは、ゲームが正常に終了しない場合であり、後述のリタイアによるゲームが終了する場合を含む。
ゲーム状況情報送信処理部114は、ゲームの終了の際に、ゲーム端末10-1のゲーム状況情報記憶部120に記憶される第1ゲーム状況情報をサーバ装置30に送信する第1ゲーム状況情報送信処理を実行する。ゲーム状況情報送信処理部114は、結果通知処理部113による結果通知処理よりも前に第1ゲーム状況情報送信処理を実行する。
本実施例では、一例として、ゲーム状況情報送信処理部114は、ゲームの終了の際を除いて、ゲーム端末10-1のゲーム状況情報記憶部120に記憶される第1ゲーム状況情報をサーバ装置30に送信することはない。従って、ゲーム端末10-1の進行処理部111は、ゲーム端末10-2の進行処理部111が生成及び記憶する第2ゲーム状況情報を取得することなく、第1進行処理を実行し、ゲーム端末10-2の進行処理部111は、ゲーム端末10-1の進行処理部111が生成及び記憶する第1ゲーム状況情報を取得することなく、第2進行処理を実行する。
更新処理部115は、ゲームの終了の際の第1ゲーム状況情報のうちの第1ゲーム後更新情報以外の情報に基づいて、第1ゲーム後更新情報を更新する更新処理を実行する。以下、区別のため、ゲーム端末10-1の更新処理部115が第1ゲーム後更新情報を更新する更新処理を、「第1更新処理」と称し、ゲーム端末10-2の更新処理部115が第2ゲーム後更新情報を更新する更新処理を、「第2更新処理」と称する。
第1ゲーム後更新情報は、上述のように、第1ゲーム状況情報の対戦能力情報のうちの、ゲーム後更新パラメータの値を表す。
なお、更新処理部115は、更に、第1ゲーム後更新情報の更新処理を実行する際に、プレイヤポイントを更新してもよい。プレイヤポイントは、対戦ごとに勝ち(2点)、負(-1点)、引き分け(1点)として、加算されてよい。なお、負けた場合は加算分のプレイヤポイントが0点とされてもよい(すなわち加算なし)。また、得点差に応じて付与されるプレイヤポイントが変化されてもよい。
修正指示処理部116は、通信処理部118がサーバ装置30から修正指示(後述)を受信した場合に、修正指示に従って、第1ゲーム状況情報を修正する修正指示処理を実行する。修正指示は、後述するが、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報が整合しない場合に生成される。
修正指示処理は、ゲームの終了の際の第1ゲーム状況情報のうちの、ゲームの終了の際の第2ゲーム状況情報に整合しないすべての情報を修正する処理であってもよい。この場合、修正指示処理は、通信処理部118が修正指示を受信したタイミングやその後の所定のタイミングで一括して実行されてもよいし、ゲームの終了の際の第1ゲーム状況情報のうちの、一部の情報に対してと、他の情報に対してとで、別々のタイミングで実行されてもよい。
本実施例では、一例として、修正指示処理は、第1ゲーム状況情報のうちの対戦結果関連情報を修正する処理と、第1ゲーム状況情報のうちの対戦能力情報を修正する処理とを含む。
修正指示処理部116は、好ましくは、対戦結果関連情報については、第1通知タイミング(結果通知処理の実行タイミング)よりも前の第1修正タイミングで、修正する。これにより、修正された対戦結果関連情報に基づいて対戦結果画面を生成できるので、修正されない対戦結果関連情報に基づいて対戦結果画面を出力した場合にユーザに与えうる違和感を低減できる。
修正指示処理部116は、好ましくは、対戦能力情報については、第1通知タイミング(結果通知処理の実行タイミング)よりも後の第2修正タイミングで、修正する。これにより、ゲーム端末10-2のゲーム実行部110は、ゲーム端末10-1側で対戦能力情報の修正が完了するまで待機することなく、速やかに対戦結果画面を出力し、当該ゲームに係る処理を完了させることができる。すなわち、対戦結果画面を出力するまでの対戦相手(第2プレイヤ)の待ち時間を低減しつつ、例えば処理負荷の低い状況下で対戦能力情報を修正できる。
なお、変形例では、修正指示処理部116は、第1修正タイミングで、対戦結果関連情報及び対戦能力情報を修正してもよい。ただし、この場合、対戦能力情報の修正のための処理時間分だけ、対戦結果画面を出力するまでの対戦相手の待ち時間が長くなる。また、他の変形例では、修正指示処理部116は、第2修正タイミングで、対戦結果関連情報及び対戦能力情報を修正してもよい。
修正指示処理部116は、上述した第1ゲーム後更新情報(ゲーム後更新パラメータの値を表す情報)を修正する場合、第1更新処理により更新された第1ゲーム後更新情報を修正してもよいし、第1更新処理により更新される前の第1ゲーム後更新情報を、サーバ装置30から通信処理部118が受信する置換用の第1ゲーム後更新情報に置き換えることで、更新してもよい。置換用の第1ゲーム後更新情報は、第2ゲーム状況情報に基づいて生成され、例えば第2ゲーム後更新情報と同じであってよい。また、第1ゲーム状況情報が、ゲームに係る対戦結果に影響しないパラメータの値(対戦能力情報以外の情報)を含む場合、修正指示処理部116は、当該パラメータの値を、対戦能力情報と同じ第2修正タイミングで修正してもよい。この場合も、第1修正タイミングにおける修正対象の情報項目数を低減できるので、第1修正タイミングにおける修正を速やかに完了できる。この結果、対戦結果画面を出力するまでの対戦相手(第2プレイヤ)の待ち時間を低減できる。
通信処理部118は、操作情報送受信処理部112、通知処理部113、及びゲーム状況情報送信処理部114で実行される通信処理以外の各種の通信処理を実行する。例えば、通信処理部118は、サーバ装置30から結果通知指示等を受信したり、サーバ装置30に接続要求等を送信したりする。
強制終了処理部301は、ゲームの正常な終了が通信の遮断に起因して不能となる状態に基づいて、ゲームを強制的に終了する。ゲームの正常な終了が通信の遮断に起因して不能となる状態とは、例えば、通信の遮断が所定期間T1以上継続した状態であってよい。所定期間T1は、例えば通信の接続待ち状態の対戦相手が許容できる上限時間に対応するように適合される。なお、所定期間T1以上経過した場合は、通信の接続待ち状態を継続させるか、あるいは、通信の接続待ち状態を解除する(リタイアによる勝ち)かを対戦相手が選択可能であってもよい。
強制終了処理部301は、更に、ゲーム端末10-1又はゲーム端末10-2からリタイア要求を受け付けた場合に、ゲームを強制的に終了してもよい。
判定処理部302は、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報を比較し、比較結果に応じて、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報のうちの、一方のゲーム状況情報を、他方のゲーム状況情報に整合するように修正するための修正指示を、ゲーム端末10-1、10-2のゲーム実行部110に送信する。本実施例では、判定処理部302は、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報が整合するか否かを判定し、整合しないと判定した場合に、ゲーム端末10-1及び/又はゲーム端末10-2のゲーム実行部110に修正指示を送信する。
判定処理部302は、整合性判定部303と、修正指示生成部304と、ゲームデータ修正部306とを含む。
整合性判定部303は、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報が整合するか否か、言い換えると、第1ゲーム状況情報と第2ゲーム状況情報とが同じか否かを判定する判定処理を行う。なお、ゲームの終了の際とは、ある対戦に係るゲームが終了した際を意味する。ある対戦とは、勝敗が決まる単位であるが、複数の対戦セットが1つの対戦を形成する場合は対戦セットの単位であってもよいし、前半の対戦や後半の対戦のように区切られた単位であってもよい。ゲームの終了とは、ゲームの正常な終了のみならず、ゲームの強制的な終了をも含む。
ゲームの終了の際の第1ゲーム状況情報は、ゲームの終了の際にゲーム端末10-1のゲーム状況情報記憶部120(第1記憶部の一例)に記憶されている第1ゲーム状況情報に対応し、以下、単に「第1ゲーム状況情報」と称する。同様に、ゲームの終了の際の第2ゲーム状況情報は、例えば、ゲームの終了の際にゲーム端末10-2のゲーム状況情報記憶部120(第2記憶部の一例)に記憶されている第2ゲーム状況情報に対応し、以下、単に「第2ゲーム状況情報」と称する。なお、整合性判定部303は、ゲームの終了の際に、ゲーム端末10-1から第1ゲーム状況情報を、ゲーム端末10-2から第2ゲーム状況情報を、それぞれ受信すると、所定の記憶部(例えばゲームデータ記憶部320)に第1ゲーム状況情報及び第2ゲーム状況情報を記憶する。
第1ゲーム状況情報と第2ゲーム状況情報とが整合しない場合とは、例えば第1ゲーム状況情報におけるある選手に関する投球数が、第2ゲーム状況情報における同選手に関する投球数と異なる場合である。また、第1ゲーム状況情報におけるある選手に関するスタミナが、第2ゲーム状況情報における同選手に関するスタミナと異なる場合である。また、第1ゲーム状況情報におけるあるイニングの得点が、第2ゲーム状況情報における同イニングの得点と異なる場合である。また、第1ゲーム状況情報における第1プレイヤに関連付けられた本塁打の数が、第2ゲーム状況情報における第2プレイヤに関連付けられた被本塁打の数と異なる場合である。
整合性判定部303は、ゲームの終了の際に、判定処理を行ってよい。具体的には、整合性判定部303は、第1通知タイミングよりも前に、第1ゲーム状況情報及び第2ゲーム状況情報のすべての属性に係る情報について、又は、対戦結果関連情報及び対戦能力情報について、判定処理を行ってもよい。あるいは、対戦結果関連情報について修正しない変形例では、整合性判定部303は、ゲームの終了後(次のゲームの開始時までに)、判定処理を行ってもよい。
ただし、整合性判定部303は、好ましくは、ゲームの終了の際に、第1ゲーム状況情報及び第2ゲーム状況情報のうちの対戦結果関連情報に関してのみ判定処理を行い、ゲームの終了後(次のゲームの開始時までに)、第1ゲーム状況情報及び第2ゲーム状況情報のうちの対戦能力情報に関して判定処理を行ってもよい。より具体的には、整合性判定部303は、第1通知タイミングよりも前に、第1ゲーム状況情報及び第2ゲーム状況情報のうちの対戦結果関連情報に関してのみ判定処理を行い、第1通知タイミングよりも後に(次のゲームの開始時までに)、第1ゲーム状況情報及び第2ゲーム状況情報のうちの対戦能力情報に関して判定処理を行ってもよい。この場合、ゲームの終了の際に、第1ゲーム状況情報及び第2ゲーム状況情報間のすべての情報の整合性を判定する場合に比べて、ゲームの終了時点から第1通知タイミングまでの時間を短くできる。
修正指示生成部304は、整合性判定部303が第1ゲーム状況情報と第2ゲーム状況情報とが整合しないと判定した場合に、第1ゲーム状況情報と第2ゲーム状況情報のうちの少なくとも一方のゲーム状況情報を修正するための修正指示を生成する。
ここで、上述したように、このような不整合が生じる原因は、例えば、単なるバグや、いわゆる同期ずれと呼ばれる類のバグ、キャッシュの不具合、ゲーム中の電源の遮断(電源オフ操作)等がありうる。揮発性メモリへの記憶と不揮発性メモリへの記憶にはソフトウェアによるタイムラグがあるので、例えば、ゲーム端末10-1のゲーム実行部110において、不揮発性メモリに揮発性メモリ内のゲーム状況情報が転送(更新)される前に電源の遮断が生じると、第1ゲーム状況情報が第2ゲーム状況情報と整合しない状況が生じる。
なお、単なるバグ、いわゆる同期ずれと呼ばれる類のバグは、主にゲーム端末10-1のユーザ固有の設定(例えば、仮想カメラ)に基づいてゲーム処理を行った場合、初期化した乱数を使わなかった場合、ゲーム処理以外の処理において、初期化した乱数を使ってしまった場合、メモリ破壊、メモリオーバー、変数の初期化忘れ、スレッドセーフに実装されていない場合等で生じやすい。特に、オンラインゲームはオンラインアップデートを頻繁に繰り返すため、バグが混入しやすい。
修正指示生成部304は、整合性判定部303が第1ゲーム状況情報と第2ゲーム状況情報とが整合しないと判定した場合に、いずれか一方のゲーム状況情報を“偽”と看做し、他方のゲーム状況情報を“真”と看做してよい。この場合、修正指示生成部304は、“真”と看做したゲーム状況情報に、“偽”と看做したゲーム状況情報に合わせる態様で、“偽”と看做したゲーム状況情報が修正されるような修正指示(修正指示処理部116に対する修正指示)を生成する。すなわち、“偽”と看做したゲーム状況情報を、“真”と看做したゲーム状況情報に更新させる修正指示を生成する。あるいは、修正指示生成部304は、第1ゲーム状況情報と第2ゲーム状況情報とが整合しない場合に、双方の中間値等に双方が修正されるような修正指示を生成してもよい。あるいは、サーバ装置30は、ゲーム処理を再現することで正しいゲーム状況情報を導出し、当該正しいゲーム状況情報に整合するように第1ゲーム状況情報及び/又は第2ゲーム状況情報が修正されるような修正指示を生成してもよい。
本実施例では、一例として、修正指示生成部304は、整合性判定部303が第1ゲーム状況情報と第2ゲーム状況情報とが整合しないと判定した場合に、第1ゲーム状況情報と第2ゲーム状況情報とが整合するように、第1ゲーム状況情報と第2ゲーム状況情報の一方を修正するための修正指示を生成するものとする。
修正指示生成部304は、所定のルールに従って、第1ゲーム状況情報と第2ゲーム状況情報のうちのいずれか一方を、“偽”と看做す。所定のルールは、任意であり、例えば、ゲーム端末10-1及びゲーム端末10-2のうちの、ゲーム中の通信遮断回数が多い方のゲーム端末に係るゲーム状況情報を、“偽”と看做してもよい。
あるいは、修正指示生成部304は、第1ゲーム状況情報と第2ゲーム状況情報のうちの、サーバ装置30に早く受信された方を、“真”と看做してもよい。この場合、簡易なルールで、第1ゲーム状況情報と第2ゲーム状況情報のうちの、“偽”と看做すゲーム状況情報を決定できる。
なお、修正指示生成部304は、第1ゲーム状況情報と第2ゲーム状況情報のうちの一方がサーバ装置30に受信されない場合、サーバ装置30に受信されない方のゲーム状況情報を、“偽”と看做してもよい。例えば、ゲーム端末10-1及びゲーム端末10-2のうちのいずれかにおいて、ゲーム中の電源の遮断(電源オフ操作)があった場合、電源の遮断があった方のゲーム端末からのゲーム状況情報は、サーバ装置30に受信されない。従って、この場合、電源の遮断がない方のゲーム端末に係るゲーム状況情報が、“真”と看做されることになる。
修正指示生成部304は、修正指示を生成すると、ゲーム端末10-1及びゲーム端末10-2のうちの、修正対象のゲーム状況情報を記憶しているゲーム端末に、修正指示を送信する。このようにして修正指示が送信されると、ゲーム端末10-1及びゲーム端末10-2のうちの、修正指示を受信したゲーム端末において修正指示処理部116によりゲーム状況情報が修正されることになるので、ゲーム端末10-1及びゲーム端末10-2において記憶されるゲーム状況情報は同じになる。
修正指示は、修正内容を示す情報を含んでよい。例えば、ある選手のスタミナについて、“偽”と看做したゲーム状況情報では“8”であるのに対して、“真”と看做したゲーム状況情報では“7”である場合、“8”を“7”に修正する修正内容となる。
あるいは、修正指示は、“真”と看做したゲーム状況情報のうちのすべて又は一部(修正すべき部分)をゲーム端末10-1又はゲーム端末10-2に送信することで実現されてもよい。この場合、“真”と看做されたゲーム状況情報を受信したゲーム端末10-1又はゲーム端末10-2は、当該ゲーム状況情報に基づいて、ゲーム状況情報記憶部120に記憶されているゲーム状況情報(“偽”と看做されたゲーム状況情報)を修正してよい。
また、第1ゲーム状況情報の対戦能力情報のうちの、上述の第1ゲーム後更新情報を修正する場合は、修正指示生成部304は、ゲーム端末10-1に、置換用の第1ゲーム後更新情報を送信してもよい。この場合、修正指示生成部304は、第2ゲーム状況情報に基づいて置換用の第1ゲーム後更新情報を生成する。また、上述の第2ゲーム後更新情報を修正する場合は、修正指示生成部304は、ゲーム端末10-2に、置換用の第2ゲーム後更新情報を送信してもよい。この場合、修正指示生成部304は、第1ゲーム状況情報に基づいて置換用の第2ゲーム後更新情報を生成する。
修正指示の送信タイミングは、上述した第1修正タイミング及び第2修正タイミングに応じて決定される。例えば、対戦結果関連情報についての修正指示の送信タイミングは、修正指示処理部116が上述した第1修正タイミングで修正を行えるように、第1通知タイミング(結果通知処理の実行タイミング)よりも前に設定される。換言すると、修正指示生成部304は、対戦結果関連情報についての修正指示の送信後に、第1通知タイミングに係る結果通知処理の実行を許可してよい。
同様に、対戦能力情報についての修正指示の送信タイミングは、第1通知タイミング(結果通知処理の実行タイミング)よりも後に設定されてもよい。換言すると、修正指示生成部304は、対戦能力情報についての修正指示の送信後に、次のゲームの実行を許可してよい。ただし、第1修正タイミング及び第2修正タイミングはゲーム端末10-1において調整できるので、対戦結果関連情報及び対戦能力情報についての修正指示の送信タイミングは、第1通知タイミング(結果通知処理の実行タイミング)よりも前に設定されてもよい。
ゲームデータ修正部306は、整合性判定部303が第1ゲーム状況情報と第2ゲーム状況情報とが整合しないと判定した場合に、ゲームデータ記憶部320内のゲームデータを修正する。
本実施例では、一例として、ゲームデータ記憶部320内のゲームデータは、各チームに係る各種情報を含むチーム情報や、ゲーム端末10-1からの第1ゲーム状況情報及びゲーム端末10-2からの第2ゲーム状況情報を含む。例えば、図5に示すゲームデータD50は、プレイヤIDごとに、チーム全体の情報D52と、保有選手の情報D54と、対戦IDごとのゲーム状況情報D56とを含む。第1ゲーム状況情報及び第2ゲーム状況情報がサーバ装置30に送信されてくると、ゲームデータ記憶部320には、第1ゲーム状況情報及び第2ゲーム状況情報がそのままの形式で記憶されてもよいし、加工された形式で記憶されてもよい。
ゲームデータ修正部306は、整合性判定部303が第1ゲーム状況情報と第2ゲーム状況情報とが整合しないと判定した場合に、ゲームデータ記憶部320内のゲームデータのうちの、“真”と看做したゲーム状況情報に基づいて、“偽”と看做したゲーム状況情報を修正する。この場合、ゲームデータのうちの、ゲーム状況情報は、“真”と看做したゲーム状況情報で置換される態様で、又は、“真”と看做したゲーム状況情報に基づいて修正される態様で、修正されてよい。これにより、ゲームデータのうちの、対戦IDごとのゲーム状況情報のような情報に対しては、上述した修正指示に係る修正と同様の修正が反映される。なお、ゲームデータ修正部306は、ゲームデータのうちの、ゲーム状況情報以外の情報も、“真”と看做したゲーム状況情報に基づいて修正してもよい。なお、変形例では、ゲームデータ修正部306は省略されてもよい。
このようにして、本実施例では、サーバ装置30の判定処理部302と、ゲーム端末10-1又はゲーム端末10-2の修正指示処理部116とは、協動して修正処理を実行する。
従って、本実施例では、ゲーム端末10-1及びゲーム端末10-2の各ゲーム実行部110によりそれぞれ記憶される第1ゲーム状況情報及び第2ゲーム状況情報間における不整合(ゲームの終了の際の第1及び第2ゲーム状況情報間における不整合)を、修正することが可能となる。
ゲームの終了の際のゲーム状況情報間の不整合が修正されないと、ユーザに違和感を与えたり、不利になる方向へのゲーム状況情報の更新を妨げるために電源オフ操作が誘発されたりするおそれがある。
具体的には、ゲーム中に電源オフ操作等によりゲームアプリが強制終了した場合、強制終了したゲームアプリ側の勝敗が負け(リタイアによる敗北)になることは確定する。しかしながら、強制終了したゲームアプリからは、ゲーム状況情報がサーバ装置30に送れないため、サーバ装置30は、ゲーム状況情報を受け取れない。その結果、強制終了したゲーム中のスタミナの値が更新されず、強制終了したゲームアプリのユーザは、当該ゲームに敗北しても次のゲームが有利になる。そして、ゲームが不利になった場合に電源オフ操作を誘発させてしまうおそれがある。一方、対戦相手のゲームアプリの強制終了によってゲームが終了すると、ゲームを有利に進めているユーザのモチベーションが低下する、という問題もある。
この点、実施例では、ゲームの終了の際のゲーム状況情報間の不整合が修正されるので、上記の問題は生じない。すなわち、本実施例では、ゲーム中にゲームアプリが強制終了した場合でも、次のゲームまでに、強制終了したゲームアプリ側のゲーム状況情報のうちの対戦能力情報が修正される。従って、本実施例によれば、電源オフ操作が誘発されることや、ゲームを有利に進めているユーザのモチベーションの低下等を防止できる。
ところで、本実施例では、サーバ装置30は、ゲーム端末10-1及びゲーム端末10-2のそれぞれでどのようなゲーム処理が実行されているかを、ゲーム中に確認(再現)していない。ゲーム端末10-1及びゲーム端末10-2間でやり取りするデータはすべてサーバ装置30を経由するため、サーバ装置30は、ゲーム端末10-1及びゲーム端末10-2のそれぞれで行っているゲーム処理をサーバ装置でも確認できるようにするためだけに、ゲーム処理を実行することはできる。しかしながら、現実的には、対戦している数千、数万の対戦に係るゲーム処理をサーバ装置30で確認できるようにするためだけに、サーバ装置30で同様のゲーム処理を再現することは、サーバ負担やサーバ運用費用の観点から現実的ではない。
この点、本実施例によれば、サーバ装置30は、第1ゲーム状況情報と第2ゲーム状況情報とが整合しない場合に、対応するゲーム処理をサーバ装置30で再現して修正するのではなく、ゲーム端末10-1及びゲーム端末10-2のうちの一方からのゲーム状況情報(“偽”と看做されたゲーム状況情報)を、他方からのゲーム状況情報(“真”と看做されたゲーム状況情報)に基づいて修正する。ここで、“真”と看做されたゲーム状況情報は、ゲーム端末10-1、10-2のいずれかから送信されてくる情報であるので、サーバ装置30は、かかる情報を利用して、比較的軽い処理負荷で修正指示を生成できる。すなわち、ゲーム処理をサーバ装置30で再現する場合に比べて、サーバ装置30の負荷を低減できる。
なお、本実施例では、対戦結果関連情報を修正する処理(第1修正処理の一例)と、対戦能力情報を修正する処理(第2修正処理の一例)の双方が実行されるが、いずれか一方だけが実行されてもよい。
図6Aは、ゲーム端末10-1、ゲーム端末10-2、及びサーバ装置30の3者間でのデータ(情報)のやり取り(通信)を概略的に示す図である。なお、図6A(後出の図6B~図6Fも同様)は、概略図であり、3者間でのデータ(情報)のやり取りのすべてを図示しているわけではない。図6Aは、ゲームが正常に終了する場合を示す。図6Aでは、ゲーム端末10-1、ゲーム端末10-2、及びサーバ装置30の3者間を結ぶ点線は、データ(情報)のやり取りを示し、各ブロックは、ゲーム端末10-1、ゲーム端末10-2、又はサーバ装置30の処理を示す。なお、図6Aでは、各ブロック間の実線の矢印の方向が時間の経過方向に対応するが、順序を示しているだけであり、時間の経過方向で同じ位置のブロックの処理が同時に実行されることを意味しているわけではない。図6Cは、他の例によるゲーム端末10-1、ゲーム端末10-2、及びサーバ装置30の3者間でのデータ(情報)のやり取り(通信)を概略的に示す図である。図6Dは、比較例の説明図である。ここでは、図6Aについて、図6C及び図6Dとの対比で説明する。図6Cに示す態様は、図6Aに示す態様に比べて、処理の順序が異なるだけであり、同じ処理については同じ符号を付している。また、図6Dに示す比較例は、修正部200を備えていない構成に関する。
ゲームの開始時、サーバ装置30は、進行処理に必要な初期データをゲーム端末10-1及びゲーム端末10-2に送信し(TS2)、ゲーム端末10-1及びゲーム端末10-2のそれぞれの通信処理部118がそれぞれ初期データを受信する(TA2、TB2)。初期データは、例えば、共通の乱数シードと、第1プレイヤ情報に対応付けられたチーム情報(第1ゲームデータの一例)と、第2プレイヤ情報に対応付けられたチーム情報(第2ゲームデータの一例)とを含む。第1プレイヤに対応付けられたチーム情報は、第1プレイヤ情報に関連付けられた各ゲームオブジェクト(選手)に関するデータを含み、第2プレイヤ情報に対応付けられたチーム情報は、第2プレイヤ情報に関連付けられた各ゲームオブジェクト(選手)に関するデータを含む。
ゲームが開始されると、第2操作情報と第1操作情報とがサーバ装置30を介してゲーム端末10-1及びゲーム端末10-2の間でやり取りされながら、ゲーム端末10-1においては第1進行処理が実行され、ゲーム端末10-2においては第2進行処理が実行される。
図6Aに示す例では、まず、ゲーム端末10-2側の攻撃のセッションSC1である。セッションSC1では、ゲーム端末10-1の操作情報送受信処理部112は、投手を表すゲームオブジェクトの投球動作に係る第1操作情報をサーバ装置30に送信し(TA4)、サーバ装置30は、当該第1操作情報をゲーム端末10-2に送信し(TS4)、ゲーム端末10-2の操作情報送受信処理部112は、当該第1操作情報を受信する(TB4)。次いで、ゲーム端末10-2の操作情報送受信処理部112は、当該第1操作情報に対する第2操作情報であって、打者を表すゲームオブジェクトの打撃動作に係る第2操作情報を、サーバ装置30に送信し(TB6)、サーバ装置30は、当該第2操作情報をゲーム端末10-1に送信し(TS6)、ゲーム端末10-1の操作情報送受信処理部112は、当該第2操作情報を受信する(TA6)。ゲーム端末10-2の進行処理部111及びゲーム端末10-1の進行処理部111は、それぞれ、このようにして得られた投球動作に係る第1操作情報と打撃動作に係る第2操作情報と初期データとに基づいて、第2進行処理及び第1進行処理を実行する(TB8、TA8)。図6Aでは、ゲーム端末10-2側の攻撃のセッションSC1は、1回のデータのやり取りしか含んでいないが、実際には、ゲーム端末10-2側の攻撃が終了するまで、繰り返される。なお、セッションSC1は、第1操作情報及び第2操作情報に基づくことなくゲームが自動進行するパートを含んでもよい。
ゲーム端末10-2側の攻撃のセッションSC1では、上述の第2進行処理及び第1進行処理が実行されるごとに、ゲーム端末10-1のゲーム状況情報記憶部120における第1ゲーム状況情報及びゲーム端末10-2のゲーム状況情報記憶部120における第2ゲーム状況情報が更新されていく。
次いで、ゲーム端末10-1側の攻撃のセッションSC2である。セッションSC2では、ゲーム端末10-2の操作情報送受信処理部112は、投手を表すゲームオブジェクトの投球動作に係る第2操作情報をサーバ装置30に送信し(TB10)、サーバ装置30は、当該第2操作情報をゲーム端末10-1に送信し(TS8)、ゲーム端末10-1の操作情報送受信処理部112は、当該第2操作情報を受信する(TA10)。次いで、ゲーム端末10-1の操作情報送受信処理部112は、当該第2操作情報に対する第1操作情報であって、打者を表すゲームオブジェクトの打撃動作に係る第1操作情報を、サーバ装置30に送信し(TA12)、サーバ装置30は、当該第1操作情報をゲーム端末10-2に送信し(TS10)、ゲーム端末10-2の操作情報送受信処理部112は、当該第1操作情報を受信する(TB12)。ゲーム端末10-1の進行処理部111及びゲーム端末10-2の進行処理部111は、それぞれ、このようにして得られた投球動作に係る第2操作情報と打撃動作に係る第1操作情報と初期データとに基づいて、第1進行処理及び第2進行処理を実行する(TA14、TB14)。図6Aでは、ゲーム端末10-1側の攻撃のセッションSC2は、1回のデータのやり取りしか含んでいないが、実際には、ゲーム端末10-1側の攻撃が終了するまで、繰り返される。なお、セッションSC2は、第1操作情報及び第2操作情報に基づくことなくゲームが自動進行するパートを含んでもよい。
ゲーム端末10-1側の攻撃のセッションSC2では、上述の第1進行処理及び第2進行処理が実行されるごとに、ゲーム端末10-1のゲーム状況情報記憶部120における第1ゲーム状況情報及びゲーム端末10-2のゲーム状況情報記憶部120における第2ゲーム状況情報が更新されていく。
このようにしてセッションSC1及びセッションSC2が交互に繰り返されてゲームが正常に終了すると、ゲーム端末10-1のゲーム状況情報送信処理部114は、ゲーム状況情報記憶部120内の第1ゲーム状況情報(ゲームの終了の際の第1ゲーム状況情報)をサーバ装置30に送信し(TA16)、ゲーム端末10-2のゲーム状況情報送信処理部114は、ゲーム状況情報記憶部120内の第2ゲーム状況情報(ゲームの終了の際の第2ゲーム状況情報)をサーバ装置30に送信する(TB16)。
サーバ装置30の整合性判定部303は、ゲームの終了に伴って第1ゲーム状況情報及び第2ゲーム状況情報を受信すると(TS12)、第1ゲーム状況情報及び第2ゲーム状況情報間の整合性のうちの、対戦結果関連情報についての整合性を判定する処理(第1整合性判定処理)を行う(TS14)。図6Aでは、第1ゲーム状況情報及び第2ゲーム状況情報は、対戦結果関連情報が整合しておらず、第2ゲーム状況情報が“偽”と看做された場合を想定する。この場合、サーバ装置30の修正指示生成部304は、第2ゲーム状況情報のうちの、対戦結果関連情報についての修正指示を、ゲーム端末10-2に送信する(TS16)。
ゲーム端末10-2の修正指示処理部116は、ゲーム端末10-2の通信処理部118が対戦結果関連情報についての修正指示を受信すると(TB18)、第2ゲーム状況情報のうちの、対戦結果関連情報を修正し(TB20)、ゲーム端末10-2の通信処理部118から第1修正完了通知をサーバ装置30に送信させる(TB22)。なお、第1修正完了通知は、対戦結果関連情報が修正された第2ゲーム状況情報を含んでもよいし、修正された対戦結果関連情報だけを含んでもよい。
サーバ装置30は、第1修正完了通知を受信すると(TS18)、結果通知指示をゲーム端末10-1及びゲーム端末10-2に送信する(TS20)。なお、サーバ装置30は、第2ゲーム状況情報を“偽”と看做した際に(例えば対戦結果関連情報についての修正指示をゲーム端末10-2に送信する際に)、結果通知指示をゲーム端末10-1に送信してもよい。この場合、第1修正完了通知を受信した後に結果通知指示をゲーム端末10-1に送信する場合に比べて、ゲーム端末10-1における次の結果通知処理(TS20)の実行タイミングを早めることができる。
ゲーム端末10-1の結果通知処理部113は、ゲーム端末10-1の通信処理部118が結果通知指示を受信すると(TA18)、結果通知処理を実行する(TA20)。その後、ゲーム端末10-1は、今回のゲームに係る処理を完了させる。
ゲーム端末10-2の結果通知処理部113は、ゲーム端末10-2の通信処理部118が結果通知指示を受信すると(TB24)、結果通知処理を実行する(TB26)。この場合、ゲーム端末10-2の結果通知処理部113は、修正後の対戦結果関連情報に基づいて結果通知処理を実行する。
その後、サーバ装置30の修正指示生成部304は、第1ゲーム状況情報及び第2ゲーム状況情報間の整合性のうちの、対戦能力情報についての整合性を判定する処理(第2整合性判定処理)を行う(TS22)。図6Aでは、第1ゲーム状況情報及び第2ゲーム状況情報は、対戦能力情報が整合していない場合を想定する。なお、上述のように第2ゲーム状況情報が“偽”と看做されている。この場合、サーバ装置30の修正指示生成部304は、第2ゲーム状況情報のうちの、対戦能力情報についての修正指示を、ゲーム端末10-2に送信する(TS24)。ゲーム端末10-2の修正指示処理部116は、ゲーム端末10-2の通信処理部118が対戦能力情報についての修正指示を受信すると(TB28)、第2ゲーム状況情報のうちの、対戦能力情報を修正する(TB30)。その後、ゲーム端末10-2は、今回のゲームに係る処理を完了させる。
ここで、図6Aに示す例との対比として、図6Dに示す比較例では、ゲームの終了の際のゲーム状況情報間の不整合が修正されないので、かかる不整合が放置されることに起因した上述した不都合が生じる。すなわち、ユーザに違和感を与えたり、不利になる方向へのゲーム状況情報の更新を妨げるために電源オフ操作が誘発されたり、バグ等に起因した誤ったゲーム状況情報が次のゲームに使用されたりする等の不都合が生じる。
この点、図6Aに示す例によれば、ゲームの終了の際のゲーム状況情報間の不整合が修正されるので、かかる不整合が放置されることに起因した上述した不都合を、低減できる。また、図6Aに示す例によれば、セッションSC3の同期状態では、サーバ装置30は、ゲーム中に第1操作情報及び第2操作情報を転送するだけであるので、サーバ装置30の処理負荷を低減できる。
ここで、図6Aでは、セッションSC3は、ゲーム端末10-1とゲーム端末10-2とがサーバ装置30を介して情報をやり取りしながらそれぞれの処理を行う状態(同期状態)に対応し、セッションSC4は、ゲーム端末10-1とゲーム端末10-2との間が互いに対して独立した態様で処理を行う状態(非同期状態)に対応する。すなわち、結果通知指示(TS20)が送受されることで開始されるセッションSC4は、ゲーム端末10-1及びゲーム端末10-2が、互いからの情報を必要とせずに処理を行うことができる状態である。他方、同期状態では、例えばゲーム端末10-1側では、ゲーム端末10-2からの情報が取得されていない場合、当該情報が取得されるまで待機させられる。
図6Aに示す例との対比として、図6Cに示す例では、対戦結果関連情報を修正する処理(TS14、TS16、TB18、TB20)(第1修正処理の一例)と、対戦能力情報を修正する処理(TS22、TS24、TB28、TB30)(第2修正処理の一例)とが同じタイミングで、すなわち、結果通知指示(TS20)よりも前に実行されている。この場合、ゲーム端末10-1は、ゲーム端末10-2での対戦能力情報の修正が完了するまで同期状態で待機する必要があり、その分だけ、今回のゲームに係る処理を完了できるまでの時間が遅れてしまう。
この点、図6Aに示す例によれば、ゲームが正常に終了する場合、対戦結果関連情報を修正する処理(TS14、TS16、TB18、TB20)(第1修正処理の一例)と、対戦能力情報を修正する処理(TS22、TS24、TB28、TB30)(第2修正処理の一例)とが異なるタイミングで実行される。これにより、ゲーム端末10-1は、ゲーム端末10-2での対戦能力情報の修正が完了するまで同期状態で待機する必要がなく、速やかに今回のゲームに係る処理を完了できる。すなわち、ゲーム端末10-2での比較的時間のかかる対戦能力情報の修正のための各種処理(TS22、TS24、TB28、TB30)を、結果通知指示(TS20)よりも後回しにすることで、ゲーム端末10-1を同期状態から解放して、ゲーム端末10-1に速やかに結果通知処理を実行させることができる。
なお、変形例では、第2整合性判定処理(TS22)は、第1整合性判定処理(TS14)と同じタイミングで実行されてもよい。この場合でも、対戦能力情報を修正する処理の一部(TS24、TB28、TB30)が結果通知指示(TS20)よりも後回しされるので、図9Cに示す例に比べて、ゲーム端末10-1に速やかに結果通知処理を実行させることができる。
なお、図6Cには図示されていないが、ゲーム端末10-2の修正指示処理部116は、第2ゲーム状況情報のうちの対戦能力情報を修正すると(TB30)、ゲーム端末10-2の通信処理部118から第2修正完了通知をサーバ装置30に送信させてもよい。なお、第2修正完了通知は、対戦能力情報が修正された第2ゲーム状況情報を含んでもよいし、修正された対戦能力情報だけを含んでもよい。この場合、サーバ装置30は、第2修正完了通知を受信すると、結果通知指示をゲーム端末10-1及びゲーム端末10-2に送信してよい(TS20)。あるいは、ゲーム端末10-2の修正指示処理部116は、ゲーム端末10-2の通信処理部118が対戦能力情報についての修正指示を受信すると、対戦能力情報を修正する前に、ゲーム端末10-2の通信処理部118から応答通知をサーバ装置30に送信させてもよい。この場合、サーバ装置30は、当該応答通知を受信すると、結果通知指示をゲーム端末10-1及びゲーム端末10-2に送信してよい(TS20)。
図6Bは、ゲーム端末10-1、ゲーム端末10-2、及びサーバ装置30の3者間でのデータ(情報)のやり取りを概略的に示す図である。図6Bは、ゲームが強制的に終了する場合を示す点で、ゲームが正常に終了する場合を示す図6Aと異なる。図6Bに関しては、図6Aと異なる点について主に説明し、図6Aと実質的に同様の処理については、同一の参照符号を付して説明を省略又は簡略化する場合がある。
図6Bは、図6Aに対して、ゲーム端末10-1に関しては、TA16の前にTA40が追加された点が異なり、サーバ装置30に関しては、TS40、TS42、TS44が追加され、かつ、TS14、TS16、TS18が削除された点が異なり、ゲーム端末10-2に関しては、TB40、TB42が追加され、かつ、TB16~TB26が削除された点が異なる。
図6Bでは、セッションSC3の最中に、ゲーム端末10-2の電源が遮断された場合(あるいは電源遮断に起因せずにゲームアプリが強制終了された場合)が想定される。この場合、サーバ装置30の強制終了処理部301は、ゲームの正常な終了が通信の遮断に起因して不能となる状態に基づいて、ゲームを強制的に終了する(TS40)。サーバ装置30は、ゲームを強制的に終了すると、ゲーム終了要求をゲーム端末10-1に通知する(TS42)。なお、ゲーム端末10-2においては、電源が遮断される前までのデータが正常に保存されていない場合等に、第2ゲーム状況情報が第1ゲーム状況情報に対して整合しない状態となる。
ゲーム端末10-1のゲーム状況情報送信処理部114は、ゲーム端末10-1の通信処理部118がゲーム終了要求を受信すると(TA40)、ゲーム状況情報記憶部120内の第1ゲーム状況情報(ゲームの終了の際の第1ゲーム状況情報)をサーバ装置30に送信する(TA16)。
サーバ装置30は、ゲームの終了に伴って第1ゲーム状況情報を受信すると(TS12)、整合性判定部303による第1整合性判定処理(TS14)後、結果通知指示をゲーム端末10-1に送信する(TS20)。ゲーム端末10-1の結果通知処理部113は、ゲーム端末10-1の通信処理部118が結果通知指示を受信すると(TA18)、結果通知処理を実行する(TA20)。
一方、ゲーム端末10-2の通信処理部118は、電源が投入されかつゲームシステム1に係るアプリケーションが起動(復帰)すると(TB40)、サーバ装置30に接続要求を送信する(TB42)。
サーバ装置30の修正指示生成部304は、接続要求を受信すると(TS44)、接続処理を行ってから、第2ゲーム状況情報のうちの対戦能力情報についての修正指示を、ゲーム端末10-2に送信する(TS24)。ゲーム端末10-2の修正指示処理部116は、ゲーム端末10-2の通信処理部118が対戦能力情報についての修正指示を受信すると(TB28)、第2ゲーム状況情報のうちの、対戦能力情報を修正する(TB30)。
このように、図6Bに示す例によれば、ゲームが強制的に終了する場合、対戦能力情報を修正する処理(TS22、TS24、TB28、TB30)(第2修正処理の一例)が実行される。これにより、不利になる方向へのゲーム状況情報の更新を妨げるための電源オフ操作のような、ゲーム性を損なうような電源オフ操作が誘発される可能性を低減できる。
なお、図6Bに示す例では、第2整合性判定処理(TS22)は、接続要求の受信(TS44)前に実行されているが、接続要求の受信(TS44)後に実行されてもよい。
図6Eは、他の例による3者間でのデータ(情報)のやり取りを概略的に示す図である。図6Eは、図6Aと同様、ゲームが正常に終了する場合を示すが、図6Eを参照して以下で説明する処理は、ゲームが強制的に終了する場合でも適用可能である。
図6Eに関しては、図6Aと異なる点について主に説明し、図6Aと実質的に同様の処理については、同一の参照符号を付して説明を省略又は簡略化する場合がある。
図6Eは、図6Aに対して、ゲーム端末10-1に関しては、TA50が追加された点が異なり、サーバ装置30に関しては、TS50が追加された点が異なり、ゲーム端末10-2に関しては、TB50、TB52、TB54が追加された点が異なる。
ゲーム端末10-1の更新処理部115は、ゲーム状況情報記憶部120内の第1ゲーム状況情報のうちの第1ゲーム後更新情報以外の情報に基づいて、第1ゲーム後更新情報を更新する更新処理を実行する(TA50)。
ゲーム端末10-2の更新処理部115は、ゲーム状況情報記憶部120内の第2ゲーム状況情報のうちの第2ゲーム後更新情報以外の情報に基づいて、第2ゲーム後更新情報を更新する更新処理を実行する(TB50)。
サーバ装置30の修正指示生成部304は、第2ゲーム状況情報のうちの第2ゲーム後更新情報についての修正指示を、ゲーム端末10-2に送信する(TS50)。
ゲーム端末10-2の修正指示処理部116は、ゲーム端末10-2の通信処理部118が第2ゲーム後更新情報についての修正指示を受信すると(TB52)、第2ゲーム状況情報のうちの、第2ゲーム後更新情報を修正する(TB54)。すなわち、ゲーム端末10-2の修正指示処理部116は、更新処理(TB50)で更新された第2ゲーム後更新情報を修正する。
このように、図6Eに示す例によれば、対戦能力情報と同様のタイミングで、第2ゲーム後更新情報を修正できる。これにより、ゲーム端末10-1は、ゲーム端末10-2での対戦能力情報の修正が完了するまで同期状態で待機する必要がなく、速やかに今回のゲームに係る処理を完了できる。すなわち、ゲーム端末10-2での比較的時間のかかる対戦能力情報や第2ゲーム後更新情報の修正のための各種処理(TS22、TS24、TB28、TB30、TS50、TB52、TB54)を、結果通知指示(TS20)よりも後回しにすることで、ゲーム端末10-1を同期状態から解放して、ゲーム端末10-1に速やかに結果通知処理を実行させることができる。
なお、図6Eに示す例では、対戦能力情報を修正する処理(TS22、TS24、TB28、TB30)が、第2ゲーム後更新情報を修正する処理(TS50、TB52、TB54)よりも先に実行されているが、逆であってもよいし、同時に実行されてもよい。例えば、同時に実行される場合、TS24にて、サーバ装置30の修正指示生成部304は、第2ゲーム状況情報のうちの、対戦能力情報及び第2ゲーム後更新情報についての修正指示を、ゲーム端末10-2に送信してよい。
また、図6Eに示す例では、第2ゲーム後更新情報についての修正指示は、更新処理部115による更新処理後にゲーム端末10-2に受信されているが、第2ゲーム後更新情報についての修正指示は、更新処理部115による更新処理前に受信されてもよい。この場合、更新処理部115による更新処理に代えて、第2ゲーム後更新情報についての修正指示に基づいて、第2ゲーム後更新情報が修正(更新)されればよい。
図6Fは、他の例による3者間でのデータ(情報)のやり取りを概略的に示す図である。図6Fは、図6Aと同様、ゲームが正常に終了する場合を示すが、図6Fを参照して以下で説明する処理は、ゲームが強制的に終了する場合でも適用可能である。
図6Fに関しては、図6Aと異なる点について主に説明し、図6Aと実質的に同様の処理については、同一の参照符号を付して説明を省略又は簡略化する場合がある。
図6Fは、図6Aに対して、ゲーム端末10-1に関しては、同じであるが、サーバ装置30に関しては、TS60、TS62、TS64、TS66が追加された点が異なり、ゲーム端末10-2に関しては、TB60、TB62、TB64、TB66が追加された点が異なる。また、図6Fには、ゲーム端末10-2の次の対戦相手に係るゲーム端末10-3が示されている。
サーバ装置30のゲームデータ修正部306は、第1ゲーム状況情報に基づいて、ゲームデータ記憶部320内のゲームデータのうちの、第2ゲーム状況情報を修正する(TS60)。なお、ゲームデータ修正部306は、第1整合性判定処理(TS14)後に、ゲームデータ記憶部320内の第2ゲーム状況情報のうちの、対戦結果関連情報だけを修正してもよい。この場合、ゲームデータ修正部306は、TS60では、ゲームデータ記憶部320内の第2ゲーム状況情報のうちの、残りの修正が必要な情報(対戦能力情報を含む)を修正してもよい。あるいは、ゲームデータ修正部306は、第1整合性判定処理(TS14)後に、ゲームデータ記憶部320内の第2ゲーム状況情報を修正せず、TS60では、ゲームデータ修正部306は、ゲームデータ記憶部320内の第2ゲーム状況情報のうちの修正が必要な情報(対戦結果関連情報及び対戦能力情報を含む)を修正してもよい。その後、ゲーム端末10-2の通信処理部118は、サーバ装置30に接続要求を送信し(TB60)、次のゲームに進む操作がなされる(TB62)。ここでは、次のゲームの対戦相手に係るゲーム端末がゲーム端末10-3であるとする。なお、次のゲームの対戦相手に係るゲーム端末がゲーム端末10-1であってもよい(すなわち再戦であってもよい)。ゲーム端末10-2の通信処理部118は、サーバ装置30にゲーム開始要求を送信する(TB64)。
サーバ装置30は、接続要求を受信し(TS62)、ゲーム開始要求を受信すると(TS64)、ゲームデータ記憶部320内のゲームデータのうちの、第3プレイヤに対応付けられたチーム情報と第2プレイヤに対応付けられたチーム情報と乱数シードとを含む初期データをゲーム端末10-2に送信するとともに、同初期データをゲーム端末10-3に送信する(TS66)。ゲーム端末10-3及びゲーム端末10-2は、それぞれの通信処理部118(ゲーム端末10-3の通信処理部118については図示せず)がそれぞれ初期データを受信する(TC60、TB66)。この際、ゲーム端末10-2の修正指示処理部116は、サーバ装置30から送られてくるチーム情報で、ゲーム状況情報記憶部120内の同チーム情報を置き換える。この結果、第2ゲーム状況情報の少なくとも一部の情報(チーム情報に関連する情報であり、対戦能力情報を含む)が修正されることになる。後は図6Aと同様に、ゲームが開始される。なお、この場合、ゲーム端末10-2に初期データが送信されることで、ゲーム端末10-2に修正指示が送信されることが実現されている。
このように、図6Fに示す例によれば、ゲームが開始される直前のタイミングで、対戦能力情報等を修正できる。これにより、ゲーム端末10-1は、ゲーム端末10-2での対戦能力情報の修正が完了するまで同期状態で待機する必要がなく、速やかに今回のゲームに係る処理を完了できる。すなわち、ゲーム端末10-2での比較的時間のかかる対戦能力情報の修正のための各種処理(TS22、TS60、TS66、TB66)を、結果通知指示(TS20)よりも後回しにすることで、ゲーム端末10-1を同期状態から解放して、ゲーム端末10-1に速やかに結果通知処理を実行させることができる。
なお、図6Fに示す例では、第2ゲーム状況情報のうちの、対戦結果関連情報以外の情報は、第1ゲーム状況情報の対応する情報に対して整合していなくても、ゲームが開始される直前のタイミングまでは修正されない。このため、第2プレイヤの操作等により第2ゲーム状況情報や第2ゲーム状況情報に基づき算出される情報等が表示部15に出力されると、潜在的な不整合が表出されることになる。ただし、かかる不都合があるものの、第2ゲーム状況情報の対戦能力情報が修正されないまま、次の対戦に係るゲームが開始されてしまうことは防止できる。
また、図6Fに示す例では、ゲームデータ記憶部320内のゲームデータ(ゲームデータ内の第2ゲーム状況情報)を修正する処理(TS60)は、接続要求の受信(TS44)前に実行されているが、接続要求の受信(TS44)後に実行されてもよい。
また、図6A~図6C、図6Eに示す例では、ゲームデータ記憶部320内のゲームデータ(ゲームデータ内の第2ゲーム状況情報)を修正する処理(TS60)は示されていないが、同様に実行されてもよい。
<具体例>次に、図7~図40を参照して、具体的な構成について説明する。
以下では、一例として、上述した第1プレイヤ及び第2プレイヤが人であるとして、第1プレイヤを「第1ユーザ」と表記し、第2プレイヤを「第2ユーザ」と表記し、区別しないときは単に「ユーザ」と表記する。
また、以下の図7~図40を参照した説明では、ゲーム状況情報は、複数の修正対象項目の情報を含むものとし、ゲーム状況情報に含まれるすべての修正対象項目の情報のうちの、上述した対戦結果関連情報以外の情報(上述した対戦能力情報を含む)を、「ゲーム詳細情報」と称する。すなわち、以下では、ゲーム状況情報は、対戦結果関連情報と、ゲーム詳細情報とからなるものとする。ゲーム詳細情報は、対戦能力情報のみを含んでもよいし、対戦能力情報以外の情報(例えば、安打数や、失点、四死球の数、エラーの数等のような、ゲームに係る対戦結果に影響しないパラメータの値等)を更に含んでもよい。
また、以下の図7~図40を参照した説明では、区別のため、ゲーム状況情報を修正するための修正指示のうちの、対戦結果関連情報を修正するための修正指示を「訂正指示」と称し、ゲーム詳細情報を修正するための修正指示を「復元指示」と称する。
図7は、サーバ装置30の具体的な構成例を示す図である。
図7では、サーバ装置30は、ゲートサーバ3011と、複数の認証サーバ3012と、複数のロビーサーバ3013と、複数のゲームサーバ3014とを含む。
ゲートサーバ3011は、サーバコンピュータである。ゲートサーバ3011は、ゲームシステム1内のサーバコンピュータのリストを管理する。例えば、ゲートサーバ3011は、認証サーバ3012、ロビーサーバ3013、及びゲームサーバ3014のそれぞれのサーバ名(ホスト名)、IP(Internet Protocol)アドレス、ポート番号や各サーバコンピュータの稼働状態等の情報を管理する。
認証サーバ3012は、サーバコンピュータである。例えば、認証サーバ3012は、ユーザ情報等の認証情報に基づいてユーザ認証を実行する。ユーザ認証に成功するとユーザトークンを発行し、ゲーム端末10-1、10-2に送信する。ゲーム端末10-1、10-2は、認証サーバ3012で発行されたユーザトークンを送信する情報に添付することで、各サーバコンピュータは、正しく認証された端末からの情報であると認識する。
ロビーサーバ3013は、サーバコンピュータである。例えば、ロビーサーバ3013は、ゲームの対戦におけるマッチングを実行する。
ゲームサーバ3014は、サーバコンピュータである。例えば、ゲームサーバ3014は、マッチング完了後にゲーム端末10-1、10-2が接続するサーバであり、ゲーム端末10-1、10-2と協動してゲーム実行に係る各種処理を実行する。
なお、以下で説明するゲーム端末10-1、10-2とサーバ装置30との間でやり取りされる情報は、共通鍵に基づき暗号化されてよい。
なお、ゲームシステム1内のサーバの台数に制限はなく、ゲートサーバ3011、認証サーバ3012、ロビーサーバ3013、及びゲームサーバ3014のそれぞれは、2台以上であってもよい。また、1台のサーバコンピュータが、ゲートサーバ3011、認証サーバ3012、ロビーサーバ3013、及びゲームサーバ3014のうちの少なくとも2つ以上の機能を担ってもよい。ゲームシステム1内のサーバコンピュータは1台だけであってもよいし、図7に示すサーバコンピュータ以外のコンピュータがゲームシステム1に含まれてもよい。
また、上述したように、ここでは、2台のゲーム端末10-1、10-2を例に挙げて説明していくが、ゲームシステム1内のゲーム端末10-1、10-2の台数に制限はなく、ゲーム端末は、3台以上であってもよいし、1台だけであってもよい。
次に、図8及び図9を参照して、ゲームシステム1におけるソフトウェアプロセス構成について説明する。
図8は、ゲーム端末10-1、10-2におけるソフトウェアプロセス構成を示す図である。
ゲーム端末10-1、10-2は、それぞれ、ゲームシステム1に係るゲーム用アプリケーション(以下、単に「ゲームアプリ20」と称する)が実装される。ゲーム端末10-1、10-2のゲームアプリ20は、同じであるが、区別する場合は、ゲーム端末10-1のゲームアプリ20を「20-1」と表記し、ゲーム端末10-2のゲームアプリ20を「20-2」と表記する。
図9は、サーバ装置30におけるソフトウェアプロセス構成を示す図である。
ゲートサーバ3011は、ゲートサーバプロセス40が実装される。ゲートサーバプロセス40は、ゲートサーバ3011で動作しているソフトウェアプロセスである。ゲートサーバプロセス40は、ゲートサーバ3011に割り当てられているIPアドレスを利用し、ネットワークNを介して、ゲームアプリ20と接続する。なお、ゲートサーバプロセス40のPORT番号は予め定められている。
認証サーバ3012は、認証サーバプロセス41が実装される。認証サーバプロセス41は、認証サーバ3012で動作しているソフトウェアプロセスである。認証サーバプロセス41は、ユーザ認証を行うためのプロセスである。一般的には、ワンタイムの共通鍵を互いにやり取りし、やり取りした共通鍵を使って、個人情報をやり取りする。認証サーバプロセス41は、認証サーバ3012に割り当てられているIPアドレスを利用し、ネットワークNを介して、ゲームアプリ20と接続する。認証サーバプロセス41のPORT番号は予め定められている。認証サーバプロセス41のPORT番号は、ゲートサーバプロセス40のPORT番号と異なり、同様に後出する各種プロセスのPORT番号も、互いに異なる。
認証サーバ3012は、また、SQLプロセス42が実装される。SQLプロセス42は、認証サーバ3012で動作しているソフトウェアプロセスである。SQLプロセス42は、認証サーバ3012に割り当てられているIPアドレスを利用し、サーバ装置30内のローカルエリアネットワーク(図示せず)を介して、各種サーバコンピュータと接続される。SQLプロセス42のPORT番号は予め定められている。
なお、SQLプロセス42は、認証サーバ3012で動作しているが、専用のサーバで動作してもよいし、例えば、ゲートサーバ3011、ロビーサーバ3013、及びゲームサーバ3014のいずれかで動作してもよい。
ロビーサーバ3013は、ロビーサーバプロセス43が実装される。ロビーサーバプロセス43は、ロビーサーバ3013で動作しているソフトウェアプロセスである。ロビーサーバプロセス43は、ロビーサーバ3013に割り当てられているIPアドレスを利用し、ネットワークNを介して、ゲームアプリ20と接続する。ロビーサーバプロセス43のPORT番号は予め定められている。
ロビーサーバ3013は、複数のサブロビーサーバプロセス(44-1、44-2のみ図示)が実装される。サブロビーサーバプロセス44-1、44-2は、ロビーサーバプロセス43によって起動されたプロセスである。ゲームアプリ20-1からロビーサーバプロセス43に接続要求があると、ロビーサーバプロセス43は、サブロビーサーバプロセス44-1を起動する。その後、ゲームアプリ20-1から送信された通信パケットは、すべて、サブロビーサーバプロセス44-1が処理する。ゲームアプリ20-1以外の他のゲームアプリ20-2からロビーサーバプロセス43に接続要求があると、ロビーサーバプロセス43は、サブロビーサーバプロセス44-2を起動する。その後、ゲームアプリ20-2から送信された通信パケットは、すべて、サブロビーサーバプロセス44-2が処理する。以下、区別しないときは、サブロビーサーバプロセス44と表記する。
ゲームサーバ3014は、マッチングプロセス45が実装される。マッチングプロセス45は、ゲームサーバ3014で動作しているソフトウェアプロセスである。マッチングプロセス45は、ゲームサーバ3014に割り当てられているIPアドレスを利用し、ネットワークNを介して、ゲームアプリ20と接続する。マッチングプロセス45のPORT番号は予め定められている。
ゲームサーバ3014は、複数のゲームサーバプロセス(46-1、46-2のみ図示)が実装される。ゲームサーバプロセス46-1は、ゲームサーバ3014で動作しているソフトウェアプロセスである。ゲームサーバプロセス46-1は、ゲームサーバ3014に割り当てられているIPアドレスを利用し、ネットワークNを介して、ゲームアプリ20と接続する。ゲームサーバプロセス46-1、46-2のそれぞれのPORT番号は予め定められている。ゲームサーバプロセス46-2は、ゲームサーバプロセス46-1と同一の実行ファイルから起動したゲームサーバプロセスである。
ゲームサーバプロセス46-1とゲームサーバプロセス46-2との相違点は、割り当てられているPORT番号が異なる点である。ゲームサーバ3014は、ゲームサーバプロセス46-1及びゲームサーバプロセス46-2以外にも複数のソフトウェアプロセスが動作している。
次に、図10A及び図10Bを参照して、ゲーム画面について説明する。
図10Aは、ゲームが正常に終了する場合のゲーム画面の遷移態様を概略的に示す図である。図10Aにおいて、“失敗”とは認証の失敗や接続の失敗を意味し、“成功”とは認証の成功や接続の成功を意味する。
図10Aに示すように、ゲームアプリ20を起動すると、タイトル画面G100が表示部15に表示される。操作部14から操作が入力されると、初めてゲームアプリ20を起動した場合、又は、ゲーム端末10-1(又はゲーム端末10-2)の内部キャッシュをクリアした場合に、初期画面G200が表示部15に表示される。ユーザが初期画面G200に表示されている指示に従って操作部14から必要事項を入力すると、ユーザ認証がサーバ装置30でなされる。ユーザ認証が正しく行われると、サーバ装置30への接続処理中の状態を表す接続中画面G300が表示部15に表示される。一度ユーザ認証が正しく行われると初期画面G200は表示部15に表示されずに接続中画面G300が表示される。その後、マップ画面G400が表示部15に表示される。マップ画面G400に表示されているボタン(図示せず)(操作部14の一例)を使って操作すると、接続中画面G500が表示部15に表示される。その後、対戦画面G600が表示部15に表示される。ゲームが終わると、対戦結果画面G700が表示部15に表示される。その後、ゲーム結果画面G800が表示部15に表示され、接続中画面G900が表示部15に表示され、サーバ装置30に正しく接続されると再び、マップ画面G400が表示部15に表示される。サーバ装置30に正しく接続されない場合、タイトル画面G100が表示される。
図10Bは、ゲームが強制的に終了する場合のゲーム画面の遷移態様を概略的に示す図である。図10Bは、図10Aとほぼ同じである。図10Aの対戦結果画面G700と図10Bの対戦結果画面G710が異なっている。図10Aのゲーム結果画面G800と図10Bのゲーム結果画面G810が異なっている。図10Bに示すように、ゲームアプリ20-1が対戦画面G600を表示部15に表示している最中に、対戦相手のゲームアプリ20-2の電源の遮断等に起因してゲームが強制的に終了すると、ゲームアプリ20-1は、G710のような得点なしの状態の対戦結果画面を表示部15に表示させる。
ゲーム結果画面G810は、ゲーム結果画面G800よりも出力されている情報量が少ない。このようにして、ゲームが強制的に終了する場合、ゲーム結果画面G810のように一部のゲーム状況情報が欠落する態様で表示部15に表示されてもよい。例えば、ゲーム結果画面G800は、ゲーム状況情報のうちの、対戦結果関連情報に基づく表示内容と、ゲーム詳細情報の少なくとも一部に基づく表示内容を含むのに対して、ゲーム結果画面G810は、ゲーム状況情報のうちの、対戦結果関連情報に基づく表示内容を含むが、ゲーム詳細情報の少なくとも一部に基づく表示内容を含まない。これにより、修正される可能性のあるゲーム詳細情報に基づき生成される表示内容を、ゲーム結果画面が含んでしまう可能性を低減できる。
次に、ゲームアプリ20について説明する。
図11は、ゲームアプリ20によるメイン処理を示すフローチャートである。図12は、ゲームアプリ20による各種割り込み処理を示すフローチャートである。
図11に示すように、ゲームアプリ20は起動すると、各種の初期化処理(S110)を行う。次に、後述するゲームメイン処理(S120)を行い、その後、ゲームメイン処理(S120)で更新された情報を利用して描画処理(S130)を行う。描画処理(S130)の結果として得られる画像は、表示部15上に出力される。ゲームアプリ20は、ゲームアプリ20の終了操作が行われたか否かの終了判定(S140)を実行する。終了操作は、ユーザにより例えば操作部14により実行される。その後、ゲームアプリ20は、バックバッファ(図示せず)への描画が完了したか否かの描画完了判定(S150)を実行し、描画が完了していなければ描画の完了を待つ待機状態となる(S150:NO)。ゲームアプリ20は、バックバッファへの描画が完了した場合(S150:YES)は、フロントバッファとバックバッファの描画を切り替えた後、ゲームメイン処理(S120)へ戻る。なお、ゲーム端末10-1、10-2の制御部11の性能によっても異なるが、一連の処理は約16ms~33msで行われる。ゲームアプリ20の終了操作が行われていた場合(S140:YES)は、ゲームアプリ20は、終了処理(S160)を行った後、終了する。
ゲームアプリ20は、メイン処理の実行中、図12に示すような各種割り込み処理を実行する。
サスペンド処理は、所定のサスペンド条件が成立すると割り込み実行される。サスペンド処理では、ゲームアプリ20は、通信部13から切断要求をサーバ装置30に送信する(S170)。サスペンド条件は、例えば、リタイアボタン(操作部14の一要素)が操作された場合や、ゲーム端末10-1、10-2の電源ボタンが押されて画面表示が消去された場合、ゲーム端末10-1、10-2の無操作状態が所定時間継続して画面表示が消去された場合等に成立する。
受信割り込み処理は、サーバ装置30からのデータが受信されたときに割り込み実行される。受信割り込み処理では、ゲームアプリ20は、通信部13を介してサーバ装置30からデータを取得する(S172)。ゲームアプリ20は、通信部13からデータを取得すると、取得したデータのヘッダ部分を確認し、ヘッダ部分の内容に応じて記憶部12の所定記憶領域にサーバ装置30から取得したデータを保存する(S174)。なお、ゲームアプリ20は、データを保存する際にヘッダ部分を削除する等の加工を行う場合がある。ゲームアプリ20は、サーバ装置30からデータを受信したか否かを判定するために、ゲームメイン処理(S120)の際に、受信割り込み処理により記憶部12に保存されたデータを利用する。
例えば、受信割り込み処理では、ゲームアプリ20は、サーバ装置30から復元指示を受信した場合に、記憶部12の第1所定記憶領域に、復元指示を記憶し、復元要フラグを“オン”に設定する。復元要フラグが“オン”状態であることは、上述したゲーム詳細情報を修正する処理が必要な状態を表す。なお、記憶部12の第1所定記憶領域は、後述の通常ゲーム進行処理により更新されるゲーム状況情報が記憶される記憶領域(ゲーム状況情報記憶部120)とは異なる。
操作割り込み処理は、操作部14から操作情報が入力されると割り込み実行される。操作割り込み処理では、ゲームアプリ20-1は、操作情報(第1操作情報)を記憶部12に保存する(S176)。ゲームアプリ20-2は、操作情報(第2操作情報)を記憶部12に保存する(S176)。記憶部12に保存されている操作情報は、ゲームメイン処理(S120)の際に利用される。
送信割り込み処理は、通信部13の送信バッファが空又は所定量以下の値になった場合に割り込み実行される。送信割り込み処理では、ゲームアプリ20は、記憶部12の送信キューに保存されているデータを取り出して、通信部13の送信バッファにセットする(S178)。記憶部12の送信キューのデータは、ゲームメイン処理(S120)の際に保存される。
次に、メイン処理中のゲームメイン処理(S120)について説明する。
図13は、処理に用いるメイン状態(以下、「STATUS」)と称する)の種類を示す図であり、図14は、STATUSに係る状態遷移図である。
ここでは、STATUSは、図13に示すように、「タイトル」、「ユーザ認証」、「マップ」、「ゲーム中」、及び「ゲーム後」の5つの種類を含む。STATUSは、「タイトル」、「ユーザ認証」、「マップ」、「ゲーム中」、及び「ゲーム後」に応じた値が、記憶部12に記憶される。記憶部12に記憶されているSTATUSの値は、現在の状態を表す。「タイトル」、「ユーザ認証」、「マップ」、「ゲーム中」、及び「ゲーム後」の間の遷移は、図14に示す態様で実現される。「タイトル」からは、「接続」を介して「マップ」に遷移でき、「マップ」を介して「ゲーム中」及び「ゲーム後」に遷移できる。「ゲーム後」からは、「マップ」又は「タイトル」に遷移される。
なお、ある一のSTATUSは、更に分類された状態(以下、「SUBSTATUS」)と称する)を含んでよい。SUBSTATUSは、後述する。ここでは、STATUS「マップ」は、2種類のSUBSTATUS「復元」及び「マップメイン」を含む。SUBSTATUSが「復元」の値であることは、上述したゲーム詳細情報を修正する処理が必要な状態を表す。STATUS「マップ」のSUBSTATUSの初期値は、「復元」の値に設定される。SUBSTATUSの値は、STATUSの値が変化すると、初期値にリセットされる。また、STATUS「ゲーム中」は、2種類のSUBSTATUS「ゲーム初期化」及び「ゲーム進行」を含む。SUBSTATUS「ゲーム進行」は、更に下層に、4種類の「通常進行」、「投球待ち」、「投球入力待ち」、及び「打撃待ち」を含む。
図15は、ゲームメイン処理(S120)のフローチャートである。
図15に示すように、ゲームメイン処理(S120)では、ゲームアプリ20は、記憶部12に記憶されているSTATUSの値によって、処理を分岐する。ゲームアプリ20は、STATUSがタイトルであれば(S1200:YES)、タイトル処理(S1202)を行い、STATUSがタイトルでなければ(S1200:NO)、次の処理(S1204)に進む。ゲームアプリ20は、STATUSがユーザ認証であれば(S1204:YES)、ユーザ認証処理(S1206)を行い、STATUSがユーザ認証でなければ(S1204:NO)、次の処理(S1208)に進む。ゲームアプリ20は、STATUSがマップであれば(S1208:YES)、マップ処理(S1210)を行い、STATUSがマップでなければ(S1208:NO)、次の処理(S1212)に進む。ゲームアプリ20は、STATUSが「ゲーム中」であれば(S1212:YES)、ゲーム処理(S1214)を行い、STATUSが「ゲーム中」でなければ(S1212:NO)、次の処理(S1216)に進む。ゲームアプリ20は、STATUSがゲーム後であれば(S1216:YES)、ゲーム後処理(S1218)を行い、STATUSがゲーム後でなければ(S1216:NO)、今回の処理周期のゲームメイン処理を終了する。
図16は、タイトル処理(S1202)のフローチャートである。
図16に示すように、タイトル処理(S1202)では、ゲームアプリ20は、ゲームの開始操作が行われたか否かを判定する(S12022)。ゲームの開始操作(以下で説明する各種操作も同様)は、ユーザにより操作部14を介して実現される。ゲームアプリ20は、開始操作が行われていない場合は(S12022:NO)、タイトル処理(S1202)を終了し、ゲームメイン処理(S120)に戻る。
ゲームアプリ20は、開始操作を検出すると(S12022:YES)、ゲートサーバ3011に接続し、サーバリストを要求する(S12024)。ゲームアプリ20は、ゲートサーバ3011からサーバリストを受け取ったか否かを判定し(S12026)、受け取っていなかったら(S12026:NO)、タイトル処理(S1202)を終了し、ゲームメイン処理(S120)に戻る。ゲームアプリ20は、ゲートサーバ3011からサーバリストを受け取ったら(S12026:YES)、ゲートサーバ3011から受け取ったサーバリストを記憶部12に保存する(S12028)。サーバリストには、現在正常に稼働しているサーバを特定する情報が含められる。サーバは24時間稼働しており、定期的なメンテナンスや長期間の稼働によって、システムダウンすることがある。そのため、現在稼働している最新情報をゲートサーバ3011から受け取ることによって、正常に動作するサーバに接続することができる。ゲームアプリ20は、今後各種サーバコンピュータに接続するときには、ここで保存したサーバリストを参照する。
次いで、ゲームアプリ20は、ユーザ認証済みのユーザトークンが記憶部12に保存されているか否か判断する(S12030)。なお、ユーザトークンが保存されていても期限が切れていた場合は、ユーザトークンが保存されていないと判定する。ゲームアプリ20は、ユーザトークンが保存されていなかったら(S12030:NO)、ユーザトークンを再取得する(S12032)。ユーザトークンが記憶部12に保存されていたら、S12036に進む。この後、明記していないが、すべての通信パケットにユーザトークンを追加して通信を行う。
ユーザトークンが保存されていない場合(S12030:NO)、ゲームアプリ20は、記憶部12に保存されているSTATUSを「ユーザ認証」に変更する(S12032)。ゲームアプリ20は、記憶部12に保存されているサーバリストから認証サーバ3012を選んで接続する(S12034)。その後、ゲームアプリ20は、タイトル処理(S1202)を終了し、ゲームメイン処理(S120)に戻る。
ユーザトークンが保存されている場合(S12030:YES)、ゲームアプリ20は、記憶部12に保存されているSTATUSを「マップ」に変更する(S12036)。ゲームアプリ20は、記憶部12に保存されているサーバリストからロビーサーバ3013を選んで接続する(S12038)。その後、ゲームアプリ20は、タイトル処理(S1202)を終了し、ゲームメイン処理(S120)に戻る。
図17は、ユーザ認証処理(S1206)のフローチャートである。
図17に示すように、ユーザ認証処理(S1206)では、ゲームアプリ20は、認証用の個人情報(例えば、ユーザ名とパスワード)の入力を待つ(S12060)。ユーザは、操作部14を介して個人情報を入力できる。ゲームアプリ20は、入力が完了していない場合(S12060:NO)は、ユーザ認証処理(S1206)を終了し、ゲームメイン処理(S120)に戻る。ゲームアプリ20は、入力が完了した場合(S12060:YES)、入力された個人情報を認証サーバ3012に送信する(S12062)。その後、ゲームアプリ20は、認証サーバ3012からの返答を確認する(S12064)。ゲームアプリ20は、認証サーバ3012からの返答がNG(認証失敗)であった場合(S12064:NO)、記憶部12に保存されているSTATUSを「タイトル」に設定する(S12070)。そして、ゲームアプリ20は、ユーザ認証処理(S1206)を終了し、ゲームメイン処理(S120)に戻る。ゲームアプリ20は、認証サーバ3012からの返答がOK(認証成功)であった場合(S12064:YES)、認証サーバ3012から受信したユーザトークンを記憶部12に保存し(S12066)、記憶部12に保存されているSTATUSを「マップ」に設定する(S12068)。そして、ゲームアプリ20は、ユーザ認証処理(S1206)を終了し、ゲームメイン処理(S120)に戻る。なお、ユーザ認証において、個人情報を送信するときに暗号化処理(秘密鍵暗号)を行う。
図18は、マップ処理(S1210)のフローチャートである。
図18に示すように、マップ処理(S1210)では、ゲームアプリ20は、記憶部12に記憶されているSUBSTATUSの値によって、処理を分岐する。ゲームアプリ20は、SUBSTATUSが「復元」であれば(S12102:YES)、復元処理(S12104)を行い、SUBSTATUSが「復元」でなければ(S12102:NO)、次の処理(S12106)に進む。ゲームアプリ20は、SUBSTATUSが「マップメイン」であれば(S12106:YES)、マップメイン処理(S12108)を行い、SUBSTATUSが「マップメイン」でなければ(S12106:NO)、マップ処理(S1210)を終了し、ゲームメイン処理(S120)に戻る。
図19は、復元処理(S12104)のフローチャートである。復元処理は、上述した修正処理のうちの、ゲーム詳細情報を修正する処理に対応する。
図19に示すように、復元処理(S12104)では、ゲームアプリ20は、前回行ったゲームに関して、修正すべきゲーム状況情報(ゲーム詳細情報)があるか否かについてロビーサーバ3013からの返答に基づいて確認する(S121040)。具体的には、ゲームアプリ20は、上述した復元要フラグが“オン”状態であるか否かを判定する。修正すべきゲーム状況情報(ゲーム詳細情報)がない場合、すなわち復元要フラグが“オフ”状態である場合(S121040:NO)は、ステップS121044に進み、修正すべきゲーム状況情報(ゲーム詳細情報)がある場合、すなわち復元要フラグが“オン”状態である場合(S121040:YES)は、記憶部12の第1所定記憶領域に記憶されている復元指示に基づいて、ゲーム状況情報記憶部120内のゲーム詳細情報を修正する(S121042)。この際、ゲームアプリ20は、対戦結果関連情報についても修正してもよい。この場合、履歴として過去の対戦結果が表示される場合は、修正した対戦結果関連情報に基づいて過去の対戦結果を表示できる。その後、ゲームアプリ20は、記憶部12に記憶されているSUBSTATUSを「マップメイン」に変更し(S121044)、マップ処理(S1210)に戻る。
図20は、マップメイン処理(S12108)のフローチャートである。
図20に示すように、マップメイン処理(S12108)では、ゲームアプリ20は、ゲームに進む操作が行われたか否かを判定し(S121080)、ゲームに進む操作が行われていない場合(S121080:NO)、マップ処理(S1210)に戻る。ゲームアプリ20は、ゲームに進む操作があった場合(S121080:YES)、ゲーム開始要求を送信し(後出の図34のサブロビーサーバプロセス44のステップS446参照)、記憶部12に保存されているサーバリストに基づいて、ゲームサーバ3014に接続する(S121082)。その後、ゲームアプリ20は、記憶部12に記憶されているSTATUSの値を「ゲーム中」に変更し(S121084)、マップ処理(S1210)に戻る。
図21は、ゲーム処理(S1214)のフローチャートである。
図21に示すように、ゲーム処理(S1214)では、ゲームアプリ20は、記憶部12に記憶されているSUBSTATUSの値によって、処理を分岐する。ゲームアプリ20は、SUBSTATUSが「ゲーム初期化」であれば(S12140:YES)、ゲーム初期化処理(S12142)を行い、SUBSTATUSが「ゲーム初期化」でなければ(S12140:NO)、次の処理(S12144)に進む。ゲームアプリ20は、SUBSTATUSが「ゲーム進行」であれば(S12144:YES)、ゲーム進行処理(S12146)を行う。そして、ゲームアプリ20は、ゲーム進行処理(S12146)後に、ゲームメイン処理(S120)に戻る。また、ゲームアプリ20は、SUBSTATUSが「ゲーム中」でなければ(S12144:NO)、ゲームメイン処理(S120)に戻る。
図22は、ゲーム初期化処理(S12142)のフローチャートである。
図22に示すように、ゲーム初期化処理(S12142)では、ゲームアプリ20は、ゲームサーバ3014から受け取った乱数シードを使って、乱数を初期化する(S121420)。ゲームアプリ20は、両チーム(自チームと相手チーム)のチーム情報を読み込む(S121422)。チーム情報は、各選手の各種情報(各選手を表すゲームオブジェクトの識別情報や、各選手を表すゲームオブジェクトの名前、ポジション等)を含む。特に、チーム情報は、各選手を表すゲームオブジェクトのスタミナを含む。チーム情報のうちのスタミナは、ゲーム状況情報としてゲーム中に更新される(後出の図26のステップS12146022参照)。
両チーム(自チームと相手チーム)のチーム情報は、受信割り込み処理(図12のステップS172、ステップS174)で、ゲームサーバ3014から受信され、保存されたものである。その後、ゲームアプリ20は、記憶部12に記憶されているSUBSTATUSの値を「ゲーム進行」に変更する(S121424)。なお、ゲームサーバ3014からは、同一の乱数シードがゲームアプリ20-1、20-2に送信されている。従って、ゲームアプリ20-1、20-2のそれぞれで実現するゲーム状況は基本的には同一になる。
図23は、ゲーム進行処理(S12146)のフローチャートである。図24は、ゲーム状況情報D240の例を示す図である。ここでは、ゲーム状況情報D240を用いて説明を続ける。なお、図24に示すゲーム状況情報D240は、図4に示したゲーム状況情報(概要の説明用のゲーム状況情報)D101とは異なる。ゲーム状況情報の詳細な構成は任意である。
図23に示すように、ゲーム進行処理(S12146)では、ゲームアプリ20は、S121420で初期化した乱数を使って、対戦処理(S121460)を実行する。乱数シードが同一であれば、乱数を取得する回数における数値が同じになる。例えば、野球ゲームの場合、バットにボールが当たるか否かの抽選をした場合、ゲーム端末10-1、10-2のいずれにおいても同じ結果になる。例えば野球ゲームの場合、打者がバッターボックスに入り、バットを振る姿勢になり、投手が投球する直前になるまでのゲームの進行は、ゲーム端末10-1、10-2のそれぞれで実現される。ゲーム中においてゲーム端末10-1、10-2間で操作情報以外の交換(通信)を要せず、共通の乱数シードを使っていれば、ランダムに決定される不確定要素の結果はゲームアプリ20-1とゲームアプリ20-2との間で同じになる。
次いで、ゲームアプリ20は、ユーザ操作を受け付ける状態で(S121462:YES)、実際に操作部14の入力を受け付けると、ゲームサーバ3014に操作情報を送信する(S121464)。なお、ゲームサーバ3014は、ゲームアプリ20-1から受け取った操作情報をゲームアプリ20-2に送信し、ゲームアプリ20-2から受け取った操作情報をゲームアプリ20-1に送信する(後述)。このようにしてゲームサーバ3014に送信される操作情報は、他方のゲームアプリ20に受け取られる。
ゲームアプリ20は、受け取った操作情報があったら(S121466:YES)、当該操作情報を記憶部12に保存する(S121468)。ゲームアプリ20は、ゲームサーバ3014からのゲーム終了要求を受信したか否か、又は、対戦処理(S121460)でゲームを進行させた結果、ゲーム終了まで到達したか否か(S121470)を判定し、ゲームを終了させる場合(S121470:YES)は、ゲーム終了通知及びゲーム状況情報(図24)をゲームサーバ3014に送信し(S121472)、ゲームを終了させない場合(S121470:NO)は、ゲーム進行処理(S12146)を終了する。図24では、ゲーム状況情報D240は、各チームの得点や、各イニングの表と裏の各得点、各選手のスタミナ、投手の投球回数等を含む。なお、各選手には、投手も含まれる。なお、投手が1~Nまで複数あるのは、先発から抑えまで複数人数設定できるからである。また、表チームの得点は、各イニングの表の得点の合計であり、裏チームの得点は、各イニングの裏の得点の合計である。
なお、ゲームアプリ20-1が記憶するゲーム状況情報とゲームアプリ20-2が記憶するゲーム状況情報とは、各情報項目自体は同じである。従って、ゲームアプリ20-1が記憶するゲーム状況情報とゲームアプリ20-2が記憶するゲーム状況情報は、それぞれ、自チームの各選手のスタミナや投球回数のみならず、相手チームの各選手のスタミナや投球回数等をも含む。
その後、ゲームアプリ20は、ゲームサーバ3014からの訂正指示があるか否かを(S121474)判断する。訂正指示があった場合(S121474:YES)、ゲーム状況情報記憶部120内のゲーム状況情報(S121472で送信したゲーム状況情報)のうちの、対戦結果関連情報を修正する(S121476)。その後、ゲームアプリ20は、修正した対戦結果関連情報をゲームサーバ3014に送信する(S121478)。次いで、ゲームアプリ20は、ゲームサーバ3014からの結果通知指示があるか否か判断する(S121480)。結果通知指示があるか否かは、受信割り込み処理(図12のステップS172、ステップS174)で、ゲームサーバ3014から受信され、保存されたものがあるか否かに基づいて判断できる。
次いで、ゲームアプリ20は、結果通知指示がある場合(S121480:YES)、STATUSを「ゲーム後」に変更し、結果通知処理として結果表示画面を表示する(S121482)。次いで、ゲームアプリ20は、ゲームサーバ3014からの情報に基づいて、ゲームが正常に終了したか否かを判定する(S121484)。ゲームアプリ20は、ゲームが正常に終了していなかった場合(S121484:NO)、ゲーム状況情報記憶部120に保存されている対戦結果関連情報の得点を出さないための得点非表示フラグを“オン”に設定する(S121486)。これにより、当該フラグは、描画処理(図11のステップS130参照)において参照される。この結果、ゲームが正常に終了した場合(S121484:YES)は、対戦結果画面G700(図10A参照)のように得点が表示され、ゲームが正常に終了しなかった場合(S121484:NO)は、対戦結果画面G710(図10B参照)のように得点が表示されない。
図25は、対戦処理(S121460)のフローチャートである。
対戦処理(S121460)では、ゲームの進行度合いを示すGTIMEが利用される。GTIMEは、通常ゲーム進行処理(S1214602)が実行されるごとにカウントアップされる。通常ゲーム進行処理(S1214602)以外の各種処理、すなわち投球待ち処理(S1214606)や、投球入力待ち処理(S1214610)、打撃待ち処理(S1214614)では、GTIMEはカウントアップされない。これは、ゲームアプリ20-1がゲームアプリ20-2から(逆も同じ)操作情報等の必要な情報を受け取るまで、ゲーム内での時間を進めないようにするためである。ゲーム内での時間は進めないが、描画処理は、行われるため、選手のモーション等は再生される。この場合、選手はバットを揺らしたり、頭をかいたり等のゲーム進行に関係のないモーションが再生される。GTIMEがカウントアップされないため、ゲーム進行が止まる。そのため、ゲームアプリ20-1、20-2間で対戦処理がずれることはない。また、ゲーム初期化処理(S12142)で初期化された乱数は、GTIMEがカウントアップされる通常ゲーム進行処理(S1214602)でしか、使用されない。
ゲームアプリ20は、SUBSTATUSが「通常進行」であれば(S1214600:YES)、通常ゲーム進行処理(S1214602)を行い、SUBSTATUSが「投球待ち」であれば(S1214604:YES)、投球待ち処理(S1214606)を行い、SUBSTATUSが「投球入力待ち」であれば(S1214608:YES)、投球入力待ち処理(S1214610)を行い、SUBSTATUSが「打撃待ち」であれば(S1214612:YES)、打撃待ち処理(S1214614)を行う。それぞれの処理については後述する。
図26は、通常ゲーム進行処理(S1214602)のフローチャートである。
図26に示すように、通常ゲーム進行処理(S1214602)では、ゲームアプリ20は、GTIMEをカウントアップし、最新のGTIMEに更新する(S12146020)。その後、ゲームアプリ20は、現在のGTIMEに応じた各種処理を行う(S12146022)。GTIMEに応じた各種処理とは、選手やボール等の3次元のゲームオブジェクトの位置座標の更新であったり、球場に設置される仮想カメラ(描画範囲を決める仮想カメラ)の移動であったり、仮想カメラの切り替えであったりする。
ここで、通常ゲーム進行処理(S1214602)におけるGTIMEに応じた各種処理(S12146022)は、GTIMEが進むのに伴って、ゲーム状況情報を更新する処理を含む。例えば、通常ゲーム進行処理(S1214602)において、GTIMEが進み、選手がホームインした場合、ホームインした選手のチームが表チームか裏チームかによって、裏チームの得点又は表チームの得点が加算される。すなわち、1回表~5回裏の得点のそれぞれに対応した箇所の得点が更新される(図24参照)。ここでは、5回までの得点データしか説明していないが、延長回数も含めて、15回までの得点データであっても、20回までの得点データであってもよい。また、ゲームアプリ20は、GTIMEに応じた各種処理の一部として、安打から牽制刺のそれぞれの値(図24参照)を更新する。
なお、通常ゲーム進行処理(S1214602)では、打撃情報の加工と、ボールの位置移動のための処理が行われる。投手の手から捕手のミットまでのボールの位置移動のタイミングでバット操作が行われなかった場合、“見逃し”を示す打撃情報が、記憶部12の送信キューにセットされる。バット操作は、振る操作や、バント用の操作等を含む。打者がバットを振り、バットにボールが当たった場合は、バットとボールの当たり具合が打撃情報として計算(加工)される。計算(加工)された打撃情報は、記憶部12の送信キューにセットされる。すなわち、通常ゲーム進行処理(S1214602)では、GTIMEが進むと必ずボールが打者近くまで移動する。そして、通常ゲーム進行処理(S1214602)では、打者がバットを振ったか否かにかかわらず、所定のタイミングで打撃情報が記憶部12の送信キューにセットされる。
ゲームアプリ20は、S12146022で各種処理を行った結果、打者がバッターボックスに入り、投手からの投球待ちの状態までGTIMEが進む。ゲームアプリ20は、攻撃側の場合(S12146024:YES)、SUBSTATUSを「投球待ち」に変更する(S12146026)。ゲームアプリ20は、守備側の場合(S12146028:YES)、SUBSTATUSは、「投球入力待ち」に変更する(S12146030)。その後、ゲームアプリ20は、対戦処理(S121460)に戻る。
図27は、投球待ち処理(S1214606)のフローチャートである。投球待ち処理(S1214606)は、ゲームアプリ20-2から投球情報が届くまでゲームアプリ20-1がGTIMEを進めないようにするための処理である。
図27に示すように、投球待ち処理(S1214606)では、ゲームアプリ20は、受信割り込み処理(図12のステップS172、ステップS174)で受信したデータが保存される記憶部12に投球情報があるか否かを判定し(S12146060)、当該投球情報を通常ゲーム進行処理(S1214602)で使用する別の記憶領域(記憶部12)に保存し直す(S12146062)。なお、変形例では、投球情報は別の場所に保存され直されない。この場合、ゲームアプリ20は、受信割り込み処理(図12のステップS172、ステップS174)でゲームアプリ20が受信したデータが保存される記憶部12から、投球情報を読み出してよい。その後、ゲームアプリ20は、SUBSTATUSを「通常進行」に変更し(S12146064)、対戦処理(S121460)に戻る。
図28は、投球入力待ち処理(S1214610)のフローチャートである。
図28に示すように、投球入力待ち処理(S1214610)では、ゲームアプリ20は、操作部14で入力された操作情報を受け取り、投球情報に加工する加工処理を行う(S12146100)。具体的には、投球情報の球種は、画面上のストレートを示すボタンをタップすればストレートという情報に、カーブを示すボタンを押せばカーブという情報に、それぞれ加工される。また、投球情報のコントロール精度(制球の精度)は、例えば、画面に表示されるタイミングバー(図示せず)のどのタイミングでタップしたかに基づいて算出される。ゲームアプリ20は、これらのすべての操作情報を加工して投球情報を生成する。
なお、S12146100において、ゲームアプリ20は、投球情報を加工する際に、操作割り込み処理(図12のステップS176)でゲームアプリ20が保存した操作情報を記憶部12から読み出してもよい。なお、操作割り込み処理(図12のステップS176)は、操作部14から得た原始的な生データを“フリック”や“タップ”といった操作形態を表す情報に加工する処理を含む。S12146100の加工処理は、“フリック”や“タップ”といった操作形態を表す情報から投げたボールの球種やコントロールの精度等の投球情報に更に加工する処理である。
ゲームアプリ20は、S12146100の加工処理の結果、投球情報が完成した場合(球種や精度等がすべて出揃った場合)(S12146102:YES)、投球情報を記憶部12の送信キューにセットする(S12146104)。例えば、ゲームアプリ20-1は、ゲームアプリ20-2に投球情報を送信するために、投球情報をゲーム端末10-1の記憶部12の送信キューにセットし、ゲームアプリ20-2は、ゲームアプリ20-1に投球情報を送信するために、投球情報をゲーム端末10-2の記憶部12の送信キューにセットする。なお、ゲーム端末10-1の記憶部12の送信キューに入れられた投球情報は、送信割り込み処理(図12のステップS178)によって、サーバ装置30を介して、ゲームアプリ20-2に送信される。同様に、ゲーム端末10-2の記憶部12の送信キューに入れられた投球情報は、送信割り込み処理(図12のステップS178)によって、サーバ装置30を介して、ゲームアプリ20-1に送信される。
その後、ゲームアプリ20は、SUBSTATUSを「打撃待ち」に変更し(S12146106)、対戦処理(S121460)に戻る。
図29は、打撃待ち処理(S1214614)のフローチャートである。
図29に示すように、打撃待ち処理(S1214614)では、ゲームアプリ20は、受信割り込み処理(図12のステップS172、ステップS174)で受信したデータが保存される記憶部12に打撃情報があるか否かを判定し(S12146140)、打撃情報があれば(S12146140:YES)、SUBSTATUSを「通常ゲーム進行」に変更する(S12146142)。その後、ゲームアプリ20は、対戦処理(S121460)に戻る。
ここで、投手側になっている例えばゲームアプリ20-1が投球情報をゲームアプリ20-2に送った後すぐにSUBSTATUSを「通常ゲーム進行」に変更してしまうと、ゲームアプリ20-2からの打撃情報が送られてくる前にGTIMEがカウントアップされ(S1214602)、ゲームが進行してしまう(S12146022)ことで、不都合が生じうる。具体的には、ボールがバットに当たる直前になって、打撃情報が届かなかった場合、S12146022で処理ができなくなってしまう。ボールがバットに当たる直前で、打撃情報が来ていなかったら、GTIMEのカウントアップは一時停止するという処理であってもよいが、この場合、打者がバットを振り、ボールに当たる直前で画面が静止してしまうことになるため、ユーザはゲームアプリ20の不具合が出たように感じてしまう。また、ゲームをプレイしているユーザに違和感を与えてしまうことにもなる。
この点、図29に示す処理によれば、受信割り込み処理で受信したデータが保存される記憶部12に打撃情報がある場合に、SUBSTATUSが「通常ゲーム進行」に変更されるので、上記のような不都合を防止できる。
なお、受信割り込み処理で受信したデータが保存される記憶部12に打撃情報がない場合(S12146140:NO)は、SUBSTATUSが「通常ゲーム進行」に変更されないが、その間、投手と捕手が投球サインの交換をする等のゲーム進行に関係ない選手モーションを再生することで、ゲームアプリ20の不具合が出たように感じさせないようにしてよい。
このようにして、ゲームアプリ20-1は、投球入力待ち処理(S1214610)の後、打撃待ち処理(S1214614)では、ゲームアプリ20-2から打撃情報を受け取るまでGTIMEを更新せずに待つ処理を行う。同様に、ゲームアプリ20-2は、投球入力待ち処理(S1214610)の後、打撃待ち処理(S1214614)では、ゲームアプリ20-1から打撃情報を受け取るまでGTIMEを更新せずに待つ処理を行う。
図30は、ゲーム後処理(S1218)のフローチャートである。ゲーム後処理(S1218)は、ゲーム詳細情報の不整合を修正するための処理である。
図30に示すように、ゲーム後処理(S1218)では、ゲームアプリ20は、ゲームサーバ3014からの復元指示があるか否かを判定する(S12180)。ゲームサーバ3014から復元指示があるか否かは、受信割り込み処理(図12のステップS172、ステップS174)でサーバ装置30から受信したデータ(内容に応じて記憶部12に保存したデータ)に基づいて判断される。具体的には、ゲームサーバ3014から復元指示があるか否かは、復元要フラグの状態に基づいて判断される。
ゲーム後処理(S1218)では、ゲームアプリ20は、復元指示があった場合、すなわち復元要フラグが“オン”状態である場合(S12180:YES)、ゲーム状況情報のうちのゲーム詳細情報を修正する(S12182)。ゲーム状況情報のうちの、ステップS12182で修正対象となる情報項目は、復元処理(S12104)で修正対象となる情報項目と同じである。すなわち、ステップS12182及びステップS12104では、いずれも、ゲーム詳細情報が修正対象である。本来は、ゲーム後処理(S1218)でゲーム詳細情報の修正が実現されるべきであるが、例えばゲームアプリ20-1、20-2を強制終了させた場合等は、ゲームアプリ20-1、20-2を再起動する必要があり、その場合、タイトル画面G100から始まるため、ゲーム後処理(S1218)が行われないためである。ゲームアプリ20は、ゲーム後処理(S1218)で修正が実現された場合は、復元処理(S12104)が行われないように、復元要フラグを“オフ”にリセットする。
その後、ゲームアプリ20は、ゲームサーバ3014から応答通知を受信すると(S12184:YES)、ゲームサーバ3014から再びロビーサーバ3013に接続し直す(S12186)。そして、ゲームアプリ20は、ロビーサーバ3013に正しく接続ができたか否か判断し(S12188)、正常に接続できた場合は(S12188:YES)、STATUSを「マップ」に変更し(S12190)、正常に接続できなかった場合は(S12188:NO)、STATUSを「タイトル」に変更し(S12192)、ゲームメイン処理(S120)に戻る。
なお、図30に示す例では、ステップS12180及びステップS12182が実行されるが、ステップS12180及びステップS12182は省略されてもよい。これは、次の対戦を開始するためには必ずSTATUS「マップ」を経由する必要があり、復元要フラグが“オン”状態である場合、復元処理(S12104)で修正されるためである。
次に、サーバ装置30における各プロセスについて説明する。
図31は、ゲートサーバプロセス40のフローチャートである。
図31に示すように、ゲートサーバプロセス40は、ゲームアプリ20からの接続要求を待機している(S400:NO)。ゲートサーバプロセス40は、ゲームアプリ20からの接続要求があると(S400:YES)、接続要求を送信したゲームアプリ20との接続を許可する(S402)。その後、ゲートサーバ3011は、接続要求を送信したゲームアプリ20に現在稼働中のサーバコンピュータで、比較的空いているサーバコンピュータを選んでサーバリストを送信する(S404)。ゲートサーバプロセス40は、ゲームアプリ20が切断するまでしばらく待つ(S406:NO)が、所定時間を過ぎる(S406:YES)と、強制的に切断する(S408)。その後、ゲートサーバプロセス40は、S400に戻って、他のゲームアプリ20からの接続要求を待つ(S400:NO)。ゲートサーバプロセス40は、ゲームアプリ20からの接続要求を一手に引き受ける。なお、ミラーリング等の技術を使い、複数のプロセスを並列に動作させる場合もあるが、基本的にゲートサーバプロセス40によって、次に接続するサーバリストがゲームアプリ20に与えられる。これにより、ゲームアプリ20は、現在稼働中で、比較的空いているサーバコンピュータに接続することができる。ゲートサーバプロセス40とゲームアプリ20との通信においては、暗号化しない場合が一般的である。ゲートサーバプロセス40は、ユーザ認証前の段階の通信であるため、ハッキングを受けたとしても、ハッキングで得られる情報からは稼働中のサーバコンピュータの有無しかわからないためである。
図32は、認証サーバプロセス41のフローチャートである。
図32に示すように、認証サーバプロセス41は、ゲームアプリ20からの接続要求を待つ(S410:NO)。認証サーバプロセス41は、ゲームアプリ20からの接続要求があると(S410:YES)、接続処理を行う(S412)。認証サーバプロセス41は、ゲームアプリ20から送られてきた個人情報を、予め登録されている登録情報と照合する(S414)。認証サーバプロセス41は、ゲームアプリ20から送られてきた個人情報が正しかった場合(S416:YES)は、ユーザトークンを発行し、ユーザトークンを送信する(S418)。認証サーバプロセス41は、ゲームアプリ20から送られてきた個人情報が正しくなかった場合(S416:NO)は、個人情報が間違っている旨の内容(エラー)を送信する(S420)。その後、認証サーバプロセス41は、ゲームアプリ20からの切断を待つ(S422:NO)が、所定時間経っても、ゲームアプリ20から切断されない場合(S422:YES)、ゲームアプリ20との接続を切断する(S424)。その後、認証サーバプロセス41は、ステップS410に戻り、他のゲームアプリ20からの接続要求(ユーザ認証)を待つ(S410:NO)。
図33は、ロビーサーバプロセス43のフローチャートである。
図33に示すように、ロビーサーバプロセス43は、ゲームアプリ20からの接続要求を待つ(S430:NO)。ロビーサーバプロセス43は、ゲームアプリ20からの接続要求があると(S430:YES)、接続処理を行う(S432)。その後、ロビーサーバプロセス43は、現在接続しにきているゲームアプリ20用のスレッド又は別プロセスを作成し、その後は別プロセスとやり取りできるようにする(S434)。その後、ロビーサーバプロセス43は、ステップS430に戻って、他のゲームアプリ20が接続してくるのを待つ。
図34は、サブロビーサーバプロセス44のフローチャートである。図35は、ゲームデータ記憶部320に記憶されるゲームデータD301の一例を示す図である。なお、ゲームデータ記憶部320は、SQLサーバにより実現されてもよい。ここでは、ゲームデータD301を用いて説明を続ける。なお、図35に示すゲームデータD301は、図5に示したゲームデータD50(概要の説明用のゲームデータ)とは異なる。ゲームデータの詳細な構成は任意である。
サブロビーサーバプロセス44は、ゲームデータD301における復元フラグ(接続中のゲームアプリに係る復元フラグ)の状態を参照して、修正すべきゲーム状況情報(ゲーム詳細情報)がありかつ未だ修正されていないか否かを判定する(S440)。復元フラグの“オン”状態は、修正すべきゲーム状況情報(ゲーム詳細情報)がありかつ未だ修正されていない状態である。図35では、ユーザIDが「U0000001」に関連付けられた復元フラグが“オン”状態であり、ユーザIDが「U0000002」に関連付けられた復元フラグが“オフ”状態である。図35では、ゲームデータD301は、ユーザIDごとに、ユーザランク、ユーザポイント、ユーザトークン、チーム情報、及び対戦結果情報(履歴)のデータを含む。チーム情報は、ゲームオブジェクトの識別情報(図35では「選手ID」と表記)、ゲームオブジェクトの名前(図35では「選手名」と表記)、ポジション、及びスタミナのデータを含む。また、対戦結果情報は、対戦ごとに、勝敗、点数、打率、及び防御率のデータを含む。
サブロビーサーバプロセス44は、修正すべきゲーム状況情報(ゲーム詳細情報)がある場合(S440:YES)、復元指示を送信する(S442)。なお、復元指示は、上述した通りである。例えば、復元指示は、受信したゲームアプリ20が当該復元指示に基づき正しい修正が実現できるものであれば任意の情報を含んでよく、“真”と看做されたゲーム状況情報の全部又は一部(ゲーム詳細情報)であってもよいし、修正内容を示す情報であってもよい。
サブロビーサーバプロセス44は、ゲームアプリ20から情報が送信されているか否かを判定する(S444)。更にゲームアプリ20から送られてきた情報がゲーム開始要求であった場合(S446:YES)、サブロビーサーバプロセス44は、ゲームアプリ20との接続を切断して(S452)、プロセスを終了させる。サブロビーサーバプロセス44は、ゲーム開始要求以外のデータであれば(S446:NO)、当該データを保存し(S448)、必要に応じて、当該データに対応する応答をゲームアプリ20に送る(S450)。その後、サブロビーサーバプロセス44は、ゲームアプリ20からデータが送られてくるのを待つ(S444:NO)。
図36は、ゲームサーバプロセス46のフローチャートである。
ゲームサーバプロセス46は、ゲームアプリ20からの接続要求を待つ(S460:NO)。ゲームサーバプロセス46は、ゲームアプリ20からの接続要求があると(S460:YES)、ゲームアプリ20との接続処理を行う(S462)。その後、ゲームサーバプロセス46は、対戦が可能な状態になったか否かを判定する(S464)。野球のゲームの場合、1対1であるため、対戦が可能なゲームアプリ20が2つ接続されたか否かを判定する(S464)。対戦が可能なゲームアプリ20が2つ接続されていなければ(S464:NO)、ステップS460に戻り、対戦が可能なゲームアプリ20が2つ接続された場合(S464:YES)は、進行処理に必要な初期データ(乱数シードやチーム情報)を2つのゲームアプリ20に送信し(S466)、ステップS468へ進む。ゲームサーバプロセス46は、接続したゲームアプリ20のいずれかからデータ(パケット)を受信しているか否かを判定する(S468)。ゲームサーバプロセス46は、受信したデータが他のゲームアプリ20へのデータであれば、他のゲームアプリ20へ当該データを送信する(S470)。その後、ゲームサーバプロセス46は、ゲーム終了判定処理(S472)と切断判定処理(S474)を行う。その後、ゲームサーバプロセス46は、ゲーム終了でないなら(S476:NO)、ステップS468へ戻り、ゲームアプリ20からのデータ受信待ち状態となる。ゲームサーバプロセス46は、ゲーム終了フラグが“オン”状態であるか否かを判定し(S476)、ゲーム終了フラグが“オン”状態であると(S476:YES)、結果通知指示をゲームアプリ20に送信し(S478)、ステップS460に戻る。そして、ゲームサーバプロセス46は、再びゲームアプリ20からの接続要求を待つ(S460:NO)。
図37は、ゲーム終了判定処理(S472)のフローチャートである。ゲーム終了判定処理(S472)は、ゲームアプリ20-1、20-2から送信されてくるゲーム状況情報が整合するか否かを判定する処理である。
図37に示すように、ゲーム終了判定処理(S472)では、ゲームサーバプロセス46は、ゲームアプリ20-1、20-2からゲーム終了通知とゲーム状況情報(図23のステップS121472参照)が届いたか否かを判定する(S4720)。ゲーム終了通知及びゲーム状況情報が届いていない場合(S4720:NO)、ゲームサーバプロセス46は、ゲーム終了判定処理(S472)を終了する。ゲーム終了通知及びゲーム状況情報が届いた場合(S4720:YES)、ゲームサーバプロセス46は、ゲーム状況情報を保存し(S4722)、接続中のゲームアプリ20からのゲーム状況情報が揃ったか否かを判定する(S4724)。接続中のゲームアプリ20からのゲーム状況情報が揃っていない場合(S4724:NO)、ゲームサーバプロセス46は、ゲーム終了判定処理(S472)を終了する。ステップS4724では、ゲームアプリ20-1、20-2のうちの、例えばゲームアプリ20-2が切断されており、接続されていない場合は、ゲームアプリ20-1だけが、接続中のゲームアプリ20である。従って、この場合、ゲームアプリ20-1からのゲーム終了通知及びゲーム状況情報が届いた場合は、接続中のゲームアプリ20からのゲーム状況情報が揃ったと判定される。接続中のゲームアプリ20からのゲーム状況情報が揃った場合(S4724:YES)、ゲームサーバプロセス46は、各ゲーム状況情報のうちの、対戦結果関連情報が示す勝敗又は引き分けが整合しているか否かを判定する(S4726)。なお、リタイア等に起因して、接続中のゲームアプリ20が1つだけである場合は、ステップS4726はスキップされて、ステップS4730に進んでもよい。勝敗が整合していなければ(S4726:NO)、ゲームサーバプロセス46は、特殊処理を行う(S4728)。
特殊処理は、例えば、チートチェック用ソフトでチェックしたメモリの改ざんがあったか否かを判定し、改ざんがあれば改ざんがあった方のゲーム状況情報に含まれる改ざん内容を、元の内容に正す処理である。なお、ゲームサーバプロセス46は、特殊処理の結果に基づいて勝敗又は引き分けを確定させる。なお、改ざんが検出できなかった場合は、ゲームサーバプロセス46は、ゲームアプリ20-1、20-2からの各ゲーム状況情報のうちの、早く到着した方のゲーム状況情報に基づいて、勝敗又は引き分けを確定させてよい。また、ゲームサーバプロセス46は、ゲームアプリ20-1、20-2のうちの一方が切断されている場合は、切断された方を“敗北”として、勝敗を確定させてよい。また、ゲームサーバプロセス46は、ゲームアプリ20-1、20-2の双方が切断されている場合は、先に切断された方を“敗北”として、勝敗を確定させてよい。このようにすることで、簡易なルールに従って勝敗又は引き分けを確定させることができる。
勝敗が整合していれば(S4726:YES)、ゲームサーバプロセス46は、対戦結果関連情報が示す得点が整合しているか否かを判定する(S4730)。得点が整合している場合(S4730:YES)、ゲームサーバプロセス46は、ゲーム終了フラグを“オン”に設定する(S4734)。得点が整合していない場合(S4730:NO)、ゲームサーバプロセス46は、ゲームアプリ20-1、20-2からの各ゲーム状況情報のうちの、早く到着した方のゲーム状況情報を“真”と看做し、他方のゲーム状況情報のうちの、対戦結果関連情報を修正するための訂正指示を生成及び送信する(S4732)。訂正指示の送信先は、ゲームアプリ20-1、20-2のうちの、修正を行うべき側、すなわち、遅く到着した方のゲーム状況情報を送信した側である。なお、ゲームアプリ20-1、20-2のうちの一方が切断されている場合は、他方からのゲーム状況情報が“真”と看做される。
このように、ゲームサーバ3014は、ゲームアプリ20-1とゲームアプリ20-2との間で同期をとって動作しているとき(図6AのセッションSC3参照)、最低限の処理で進めるために、まず対戦結果関連情報だけをゲーム進行処理(S12146)(図23)で修正させ、ゲーム状況情報の大部分を復元処理(S12104)(図19)又はゲーム後処理(S1218)(図30)で修正させる。
その後、ゲームサーバプロセス46は、ゲームアプリ20-1、20-2からのゲーム状況情報のうちの、ゲーム詳細情報が整合しているか否かを判定し(S4736)、整合していなければ(S4736:NO)、復元フラグを“オン”に設定するとともに、ゲーム状況情報(ゲーム詳細情報)を修正するための復元指示を生成及び送信する(S4738)。復元指示の送信先は、ゲームアプリ20-1、20-2のうちの、“偽”と看做された方のゲーム状況情報を送信したゲームアプリである。ただし、ゲームアプリ20-1、20-2のうちの、復元指示の送信先のゲームアプリ20が切断されている場合は、ゲームサーバプロセス46は、復元指示の送信先のゲームアプリ20に、復元指示を送信しなくてよい。この場合でも、復元フラグは“オン”にすることで、上述したサブロビーサーバプロセス44のステップS442(図34参照)に起因した復元処理(S12104)(図19参照)によって同様の修正が実現されることになる。
なお、ステップS4738における復元指示は、上述したサブロビーサーバプロセス44のステップS442と同様であってよい。なお、復元フラグは、ゲームアプリ20-1、20-2ごとに管理され、ゲームアプリ20-1、20-2のうちの、修正を行うべき側の復元フラグが“オン”に設定される。すなわち、“真”と看做されたゲーム状況情報に対して、復元フラグは“オン”に設定されることはなく、“偽”と看做されたゲーム状況情報に対してのみ、復元フラグは“オン”に設定される。
ゲームサーバプロセス46は、ゲームアプリ20-1、20-2からのゲーム詳細情報が整合していれば(S4736:YES)、ゲーム終了判定処理(S472)を終了する。
このように、図37に示すゲーム終了判定処理(S472)によれば、ゲームアプリ20-1、20-2からの各ゲーム状況情報のうちの、早く受信された方のゲーム状況情報が“真”と看做され、他方のゲーム状況情報が“偽”と看做される。そして、“偽”と看做されたゲーム状況情報のうちの、対戦結果関連情報を修正するための訂正指示が生成及び送信される(S4732)とともに、“偽”と看做されたゲーム状況情報うちの、ゲーム詳細情報を修正するために、修正フラグが“オン”に設定される(S4738)。
なお、図37に示す例では、ステップS4738において、復元指示の送信は省略されてもよい。すなわち、復元フラグが“オン”に設定されるだけであってもよい。この場合、それに伴い、上述のように、前出した図30のゲーム後処理(S1218)のステップS12180及びステップS12182が省略されてよい。
また、図37に示す例では、ステップS4732の後にステップS4736が実行されるが、ステップS4736は、ステップS4734が実行された後に実行されることとしてもよい。この場合、ステップS4736の処理時間に起因して結果通知指示の送信が遅れる可能性を、低減できる。
図38は、切断判定処理(S474)のフローチャートである。以下の説明で用いるSUBSTATUSの初期値は、「切断待ち」であるとする。
図38に示すように、ゲームサーバプロセス46は、ゲームアプリ20-1、20-2のうちの、一方のゲームアプリ20から切断要求(図12のS170参照)を受信した場合(S4740:YES)はSUBSTATUSを「切断確認」に変更する(S4742)。
ゲームサーバプロセス46は、SUBSTATUSが「切断待ち」の場合(S4744:YES)、切断検知処理(S4746)を行う。ゲームサーバプロセス46は、SUBSTATUSが「切断確認」の場合(S4748:YES)、切断確認処理(S4750)を行う。その後、ゲームサーバプロセス46は、切断判定処理(S474)を終了する。
図39は、切断検知処理(S4746)のフローチャートである。
図39に示すように、切断検知処理(S4746)では、ゲームサーバプロセス46は、所定期間T1にわたりゲームアプリ20-1、20-2のうちのいずれか1つからの通信が途絶えたか否かを判定する(S47460)。なお、ゲームアプリ20-1、20-2は、接続中、所定周期ごとにキープアライブをサーバ装置30に送信している。通信が途絶えたか否かは、キープアライブが受信されるか否かに基づいて判断できる。所定期間T1は上述の通りである。ゲームサーバプロセス46は、所定期間T1にわたり、あるゲームアプリ20からの通信が途絶えたと判定した場合(S47460:YES)、ゲームサーバプロセス46は、SUBSTATUSを「切断確認」に変更し(S47462)、当該ゲームアプリ20に応答確認用のリクエストを送信し(S47464)、切断検知処理(S4746)を終了する。
図40は、切断確認処理(S4750)のフローチャートである。
図40に示すように、切断確認処理(S4750)では、ゲームサーバプロセス46は、リタイア条件が成立したか否かを判定する。リタイア条件は、例えば、切断要求を受信してから所定期間T2経過した場合、応答確認用のリクエストに対応する応答が所定期間T3内に来なかった場合、又は、ゲームアプリ20からの通信が途絶えたと確認した後更に所定期間T4経過した場合に成立する。リタイア条件が成立すると(S47500:YES)、ゲームサーバプロセス46は、切断要求を行った側又は通信が途絶えた側のゲームアプリ20をリタイアによる“敗北”にする(S47502)。その後、ゲームサーバプロセス46は、切断確認処理(S4750)を終了する。
以上、各実施例について詳述したが、特定の実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、種々の変形及び変更が可能である。また、前述した実施例の構成要素を全部又は複数を組み合わせることも可能である。
例えば、上述した実施例では、ゲームを進行する処理は、第1操作情報と第2操作情報とに基づく任意の態様であったが、これに限られない。すなわち、ゲームを進行する処理は、第1操作情報及び第2操作情報に基づくことなく、自動的に実現されてもよい。例えば、ゲームを進行する処理は、乱数と各チーム情報とに基づいて実行されてもよい。
また、上述した実施例では、ゲーム端末10-1、10-2間の通信はサーバ装置30を介して実現されているが、無線による通信路を介して直接的に実現されてもよい。この場合、無線による通信路は、近距離無線通信、ブルートゥース(登録商標)、Wi-Fi(Wireless Fidelity)等により実現されてもよい。
また、上述した実施例では、第1プレイヤ情報(第2プレイヤ情報についても同様)は、第1プレイヤに固有の情報以外の情報であってもよい。例えば、ゲームシステムによっては、最初はユーザ登録ができず、本ゲームシステム以外の各種サービスで使用するIDや、アカウント、ゲーム端末10の機種のシリアルコード、Mac(Media Access Control)アドレスを使って仮ユーザ登録してもらい、少し遊んでもらった後に、本登録してもらう、という登録方式がある。また、ユーザが引継ぎデータを設定するまで本登録ができないゲームシステムも増えつつある。従って、かかるゲームシステムにおいては、第1プレイヤ情報に関連付けられた操作情報は、ユーザ(第1プレイヤ)が、ゲームアプリを起動し、サーバ認証を行った後のゲームアプリを操作した際の操作情報を含む。サーバ認証に関しては、第1プレイヤが正規の手続きとして入力したユーザ名に基づくサーバ認証に限られず、例えば、各種サービスのIDやゲーム端末10の機種のシリアルコード等に基づくサーバ認証であってもよい。
なお、以上の実施例に関し、更に以下の付記を開示する。
[付記1]
互いに通信可能な第1ゲーム実行部(110)及び第2ゲーム実行部(110)を含むゲーム用のゲームシステム(1)であって、
前記第1ゲーム実行部(110)は、第1ユーザ情報に関連付けられた第1指示情報(例えば、操作部14から得られる生データ又は生データを加工した情報)と、前記第1ユーザ情報とは異なる第2ユーザ情報に関連付けられた第2指示情報であって前記第2ゲーム実行部(110)から通信により取得した第2指示情報とに基づいて、前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第1ゲーム状況情報(例えばD101、D240)を第1記憶部(例えばゲーム状況情報記憶部120)に記憶する第1進行処理(例えばTA8、TA14、S12146の処理)を実行し、
前記第2ゲーム実行部(110)は、前記第1ゲーム実行部(110)から通信により取得した前記第1指示情報と、前記第2指示情報とに基づいて、前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第2ゲーム状況情報(例えばD101、D240)を第2記憶部(例えばゲーム状況情報記憶部120)に記憶する第2進行処理(例えばTB8、TB14、S12146の処理)を実行し、
前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報を比較し(例えばTS14、S4726、S4736の処理)、比較結果に応じて、前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報のうちの、一方のゲーム状況情報を、他方のゲーム状況情報に整合するように修正する修正処理(例えばTS14、TS16、TB18、TB20、TS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4732、S4738、S12104、S12182、S121476の処理)を実行する修正部(200)を更に含む、ゲームシステム(1)。
付記1によるゲームシステム(1)によれば、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報を比較し、比較結果に応じて、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報のうちの、一方のゲーム状況情報を、他方のゲーム状況情報に整合するので、ユーザに違和感を与えるといった不都合を回避することが可能となる。
[付記2]
前記修正部(200)は、前記比較結果として前記ゲームの終了の際の前記第1ゲーム状況情報(例えばD101、D240)及び前記ゲームの終了の際の前記第2ゲーム状況情報(例えばD101、D240)とが整合しない場合に、前記他方のゲーム状況情報に基づいて前記一方のゲーム状況情報を修正する前記修正処理を実行する、付記1に記載のゲームシステム(1)。
付記2によるゲームシステム(1)によれば、他方のゲーム状況情報を利用して一方のゲーム状況情報を修正できるので、新たにゲーム処理を行って“真”のゲーム状況情報を再現する必要性を低減できる。
[付記3]
前記第1ゲーム実行部(110)は、前記第1ユーザ情報に関連付けられたゲームオブジェクトの対戦能力に影響する第1対戦能力パラメータ(例えばD101のスタミナ)の値と、前記第2ユーザ情報に関連付けられたゲームオブジェクトの対戦能力に影響する第2対戦能力パラメータ(例えばD101のスタミナ)の値とに更に基づいて、前記第1進行処理(例えばTA8、TA14、S12146の処理)を実行し、
前記第2ゲーム実行部(110)は、前記第1対戦能力パラメータの値と前記第2対戦能力パラメータの値とに更に基づいて、前記第2進行処理(例えばTB8、TB14、S12146の処理)を実行し、
前記第1ゲーム状況情報は、前記第1対戦能力パラメータ及び前記第2対戦能力パラメータの各値とを含み、
前記第2ゲーム状況情報は、前記第1対戦能力パラメータ及び前記第2対戦能力パラメータの各値とを含み、
前記修正処理は、前記一方のゲーム状況情報の前記第1対戦能力パラメータ及び前記第2対戦能力パラメータの各値を、前記他方のゲーム状況情報の前記第1対戦能力パラメータ及び前記第2対戦能力パラメータの各値に整合するように修正するパラメータ修正処理(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)を含む、付記1又は2に記載のゲームシステム(1)。
付記3によるゲームシステム(1)によれば、次のゲームの際に利用される対戦能力パラメータの値を修正できるので、対戦能力パラメータの値が不利な方向に更新されないようにするための電源オフ操作が誘発されることを、防止できる。
[付記4]
前記第1ゲーム実行部(110)は、更に、第1通知タイミング(例えばTA20)で、前記ゲームの終了の際の前記第1ゲーム状況情報に基づいて、終了した前記ゲームに係る対戦結果を出力する結果通知処理(例えばTA20、S121482の処理)を実行し、
前記第2ゲーム実行部(110)は、更に、第2通知タイミング(例えばTB26)で、前記ゲームの終了の際の前記第2ゲーム状況情報に基づいて、終了した前記ゲームに係る対戦結果を出力する結果通知処理(例えばTB26、S121482の処理)を実行し、
前記第1ゲーム状況情報に係る前記パラメータ修正処理のうちの少なくとも一部は、前記第1通知タイミング(例えばTA20)よりも後に実行され、
前記第2ゲーム状況情報に係る前記パラメータ修正処理(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)のうちの少なくとも一部((例えばTS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)は、前記第2通知タイミング(例えばTB26)よりも後に実行される、付記3に記載のゲームシステム(1)。
付記4によるゲームシステム(1)によれば、次のゲームの際に利用される対戦能力パラメータの値が、結果通知処理後に修正されるので、対戦能力パラメータの値が結果通知処理前に修正される場合よりも、結果通知処理が実行可能となるまでの時間を短くできる。この結果、修正が必要でない側における結果通知処理が可能となるまでの待ち時間(修正が必要となる側の修正が終了するまでの待機時間)を短くできる。
[付記5]
前記第1ゲーム状況情報及び前記第2ゲーム状況情報は、それぞれ、属性の異なる第1情報(例えば、対戦結果関連情報)と第2情報(例えば、対戦能力情報又はゲーム詳細情報)とを含み、
前記修正処理は、前記一方のゲーム状況情報の前記第1情報を修正する第1修正処理(例えばTS14、TS16、TB18、TB20、S4732、S121476の処理)、及び、前記一方のゲーム状況情報の前記第2情報を修正する第2修正処理(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)の少なくともいずれか1つを含む、付記1に記載のゲームシステム(1)。
付記5によるゲームシステム(1)によれば、属性の異なる第1情報及び第2情報の少なくともいずれか1つに係る不整合が修正可能となる。
[付記6]
前記第1情報は、終了した前記ゲームに係る対戦結果に影響する第1パラメータ(例えば得点のような対戦結果関連パラメータ)の値を含み、
前記第2情報は、終了した前記ゲームに起因して値が変化する第2パラメータであって対戦能力に影響する第2パラメータ(例えばスタミナのような対戦能力パラメータ)の値を含む、付記5に記載のゲームシステム(1)。
付記6によるゲームシステム(1)によれば、第1パラメータの値を修正することで、ゲームに係る対戦結果を正しく出力できる可能性を高めることができる。また、第2パラメータの値を修正することで、第2パラメータの値が不利な方向に更新されないようにするための電源オフ操作が誘発されることを、防止できる。
[付記7]
前記修正部(200)は、第1修正タイミングで前記第1修正処理(例えばTS14、TS16、TB18、TB20、S4732、S121476の処理)のうちの少なくとも一部を実行し、
前記修正部(200)は、前記第1修正タイミングとは異なる第2修正タイミングで前記第2修正処理(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)のうちの少なくとも一部を実行する、付記5又は6に記載のゲームシステム(1)。
付記7によるゲームシステム(1)によれば、属性の異なる第1情報及び第2情報について、異なるタイミングで修正できる。
[付記8]
前記第1ゲーム実行部(110)は、更に、第1通知タイミング(例えばTA20)で、前記ゲームの終了の際の前記第1ゲーム状況情報の前記第1情報に基づいて、終了した前記ゲームに係る対戦結果を出力する結果通知処理(例えばTA20、S121482の処理)を実行し、
前記第2ゲーム実行部(110)は、更に、第2通知タイミング(例えばTB26)で、前記ゲームの終了の際の前記第2ゲーム状況情報の前記第1情報に基づいて、終了した前記ゲームに係る対戦結果を出力する結果通知処理(例えばTB26、S121482の処理)を実行し、
前記第1ゲーム状況情報の前記第1情報を修正する場合の前記第1修正タイミングは、前記第1通知タイミングよりも前であり、
前記第2ゲーム状況情報の前記第1情報を修正する場合の前記第1修正タイミング(例えばTS14、TS16、TB18、TB20)は、前記第2通知タイミングよりも前である、付記7に記載のゲームシステム(1)。
付記8によるゲームシステム(1)によれば、結果通知処理の前に第1情報を修正することで、ゲームに係る対戦結果を正しく出力できる可能性を高めることができる。
[付記9]
前記第1ゲーム実行部(110)は、更に、第1通知タイミング(例えばTA20)で、前記ゲームの終了の際の前記第1ゲーム状況情報の前記第1情報に基づいて、終了した前記ゲームに係る対戦結果を出力する結果通知処理(例えばTA20、S121482の処理)を実行し、
前記第2ゲーム実行部(110)は、更に、第2通知タイミング(例えばTB26)で、前記ゲームの終了の際の前記第2ゲーム状況情報の前記第1情報に基づいて、終了した前記ゲームに係る対戦結果を出力する結果通知処理(例えばTB26、S121482の処理)を実行し、
前記第1ゲーム状況情報の前記第2情報を修正する場合の前記第2修正タイミングは、前記第1通知タイミングよりも後であり、
前記第2ゲーム状況情報の前記第2情報を修正する場合の前記第2修正タイミング(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66)は、前記第2通知タイミングよりも後である、付記7に記載のゲームシステム(1)。
付記9によるゲームシステム(1)によれば、結果通知処理の後に第2情報を修正することで、第2情報の不整合を修正可能としつつ、ゲームの終了後速やかに対戦結果を出力できる。
[付記10]
前記結果通知処理(例えばTA20、TB26、S121482の処理)は、前記第1ユーザ情報に関連付けられた得点と、前記第2ユーザ情報に関連付けられた得点とを出力することを含む、付記8又は9に記載のゲームシステム(1)。
付記10によるゲームシステム(1)によれば、修正が反映された得点関係(対戦結果)を出力できる。
[付記11]
前記第1ゲーム状況情報の前記第2情報は、前記ゲーム中に更新されることなく前記ゲームの終了後に更新される第1所定情報(例えば選手ごとの能力値のようなゲーム後更新パラメータの値を表す情報)を含み、
前記第2ゲーム状況情報の前記第2情報は、前記ゲーム中に更新されることなく前記ゲームの終了後に更新される第2所定情報(例えば選手ごとの能力値のようなゲーム後更新パラメータの値を表す情報)を含み、
前記第1ゲーム実行部(110)は、更に、前記ゲームの終了の際の前記第1ゲーム状況情報のうちの前記第1所定情報以外の情報に基づいて、前記第1所定情報を更新する第1更新処理を実行し(例えばTA50の処理)、
前記第2ゲーム実行部(110)は、更に、前記ゲームの終了の際の前記第2ゲーム状況情報のうちの前記第2所定情報以外の情報に基づいて、前記第2所定情報を更新する第2更新処理を実行し(例えばTB50の処理)、
前記第2修正処理は、前記第1更新処理又は前記第2更新処理により更新された前記第1所定情報又は前記第2所定情報を修正する処理(例えばTS50、TB52、TB54の処理)、又は、前記第1更新処理又は前記第2更新処理に代わり、前記ゲームの終了の際の前記第2ゲーム状況情報に基づいて前記第1所定情報を更新又は前記ゲームの終了の際の前記第1ゲーム状況情報に基づいて前記第2所定情報を更新する処理(例えばTS50、TB52、TB54の処理)を含む、付記5又は6に記載のゲームシステム(1)。
付記11によるゲームシステム(1)によれば、ゲーム中に更新されることなく前記ゲームの終了後に更新される情報についても修正できる。
[付記12]
前記ゲームの正常な終了が通信の遮断に起因して不能となる状態に基づいて、前記ゲームを強制的に終了する強制終了処理部(301)を更に含み、
前記修正部(200)は、前記ゲームが正常に終了した場合に、前記第1修正処理(例えばTS14、TS16、TB18、TB20、S4732、S121476の処理)と前記第2修正処理(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)を実行し、前記ゲームが強制的に終了された場合に、前記第2修正処理(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)を実行する、付記5~11のうちのいずれか1項に記載のゲームシステム(1)。
付記12によるゲームシステム(1)によれば、ゲームが正常に終了した場合は、第1情報及び第2情報の不整合が修正可能となり、ゲームが強制的に終了した場合は、第2情報の不整合が修正可能となる。
[付記13]
前記修正部(200)は、サーバ装置(30)に設けられる判定処理部(302)と、前記第1記憶部(例えばゲーム状況情報記憶部120)を含む第1ゲーム端末(10-1)に設けられる第1修正指示処理部(116)と、前記第1ゲーム端末(10-1)とは異なりかつ前記第2記憶部(例えばゲーム状況情報記憶部120)を含む第2ゲーム端末(10-2)に設けられる第2修正指示処理部(116)とを含み、
前記第1ゲーム実行部(110)は、前記第1ゲーム端末(10-1)に設けられ、
前記第2ゲーム実行部(110)は、前記第2ゲーム端末(10-2)に設けられ、
前記判定処理部(302)は、前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報が整合するか否かを判定し、整合しないと判定した場合に、前記第1ゲーム実行部(110)又は前記第2ゲーム実行部(110)に修正指示を送信し、
前記第1修正指示処理部(116)は、前記判定処理部(302)から前記修正指示を受信した場合に、前記修正処理(例えばS442、S4732、S4738、S12104、S12182、S121476の処理)のうちの、前記第1ゲーム状況情報を修正する処理(例えばS12104、S12182、S121476の処理)を実行し、
前記第2修正指示処理部(116)は、前記判定処理部(302)から前記修正指示を受信した場合に、前記修正処理(例えばS442、S4732、S4738、S12104、S12182、S121476の処理)のうちの、前記第2ゲーム状況情報を修正する処理(例えばS12104、S12182、S121476の処理)を実行する、付記1~12のうちのいずれか1項に記載のゲームシステム(1)。
付記13によるゲームシステム(1)によれば、サーバ装置側で整合性を判断し、修正が必要な側のゲーム端末に修正指示を送信できる。
[付記14]
前記第1ゲーム実行部(110)は、更に、前記ゲームの終了の際に、前記第1記憶部(例えばゲーム状況情報記憶部120)に記憶される前記第1ゲーム状況情報を前記サーバ装置(30)に送信する第1ゲーム状況情報送信処理(例えばTA16の処理)を実行し、
前記第2ゲーム実行部(110)は、更に、前記ゲームの終了の際に、前記第2記憶部(例えばゲーム状況情報記憶部120)に記憶される前記第2ゲーム状況情報を前記サーバ装置(30)に送信する第2ゲーム状況情報送信処理(例えばTB16の処理)を実行する、付記13に記載のゲームシステム(1)。
付記14によるゲームシステム(1)によれば、サーバ装置は、ゲームの終了の際に送信されてくる第1ゲーム状況情報及び第2ゲーム状況情報を比較できる。
[付記15]
前記他方のゲーム状況情報は、前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報のうちの、前記サーバ装置(30)に早く受信された方である、付記14に記載のゲームシステム(1)。
付記15によるゲームシステム(1)によれば、簡易なルールに従って修正が必要なゲーム状況情報を決定できる。
[付記16]
前記第1ゲーム実行部(110)は、更に、前記第1指示情報を前記サーバ装置(30)に送信する第1指示情報送信処理(例えばTA4、TA12の処理)を実行し、
前記第2ゲーム実行部(110)は、更に、前記第2指示情報を前記サーバ装置(30)に送信する第2指示情報送信処理(例えばTB6、TB10の処理)を実行し、
前記サーバ装置(30)は、前記第1指示情報を前記第2ゲーム実行部(110)に送信し(例えばTS4、TS10の処理)、かつ、前記第2指示情報を前記第1ゲーム実行部(110)に送信する(例えばTS6、TS8の処理)、付記13に記載のゲームシステム(1)。
付記16によるゲームシステム(1)によれば、サーバ装置は、指示情報の中継を行うだけでよく、サーバ装置の処理負荷を低減できる。
[付記17]
前記第1ゲーム実行部(110)は、前記ゲームの開始時に、前記第1ユーザ情報に関連付けられた第1ゲームデータ(例えばD50、D301)と、前記第2ユーザ情報に関連付けられた第2ゲームデータ(例えばD50、D301)と、乱数シードとを含む初期データを取得し(例えばTA2の処理)、前記ゲームの終了まで、前記初期データと、前記第1指示情報と、前記第2指示情報とに基づいて、前記第1進行処理を実行し(例えばTA8、TA14、S12146の処理)、
前記第2ゲーム実行部(110)は、前記ゲームの開始時に前記初期データを取得し(例えばTB2、TB66の処理)、前記ゲームの終了まで、前記初期データと、前記第1指示情報と、前記第2指示情報とに基づいて、前記第2進行処理(例えばTB8、TB14、S12146の処理)を実行する、付記1~16のうちのいずれか1項に記載のゲームシステム(1)。
付記17によるゲームシステム(1)によれば、乱数シードを用いた不確定要素によるゲーム性を高めることが可能となる。なお、第1ゲーム実行部と第2ゲーム実行部とで共通の乱数シードを用いることで、不確定要素の結果を第1進行処理と第2進行処理とで同じにできる。
[付記18]
第1ユーザ情報に関連付けられた第1指示情報(例えば、操作部14から得られる生データ又は生データを加工した情報)と前記第1ユーザ情報とは異なる第2ユーザ情報に関連付けられた第2指示情報であって第2ゲーム実行部(110)から通信により取得した第2指示情報とに基づいてゲームを進行し(例えばTA8、TA14、S12146の処理)かつ進行した前記ゲームのゲーム状況を表す第1ゲーム状況情報を第1記憶部(例えばゲーム状況情報記憶部120)に記憶する第1ゲーム実行部(110)から、前記ゲームの終了の際の前記第1ゲーム状況情報を受信する第1受信処理(例えばTS12の処理)と、
前記第1ゲーム実行部(110)から通信により取得した前記第1指示情報と前記第2指示情報とに基づいて前記ゲームを進行し(例えばTA8、TA14、S12146の処理)かつ進行した前記ゲームのゲーム状況を表す第2ゲーム状況情報を第2記憶部(例えばゲーム状況情報記憶部120)に記憶する前記第2ゲーム実行部(110)から、前記ゲームの終了の際の前記第2ゲーム状況情報を受信する第2受信処理(例えばTS12の処理)と、
前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報を比較し(例えばTS14、TS22、S4726、S4736の処理)、比較結果に応じて、前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報のうちの、一方のゲーム状況情報を、他方のゲーム状況情報に整合するように修正するための修正指示を生成する処理(例えばTS16、TS24、TS50、TS60、TS66、S12104、S12182、S121476の処理)とを実行する、サーバ装置(30)。
[付記19]
第1ユーザ情報に関連付けられた第1指示情報(例えば、操作部14から得られる生データ又は生データを加工した情報)と、前記第1ユーザ情報とは異なる第2ユーザ情報に関連付けられた第2指示情報であって通信により取得した第2指示情報とに基づいて、ゲームを進行し(例えばTA8、TA14、S12146の処理)、
進行した前記ゲームのゲーム状況を表す第1ゲーム状況情報を記憶部(例えばゲーム状況情報記憶部120)に記憶し(例えばTB8、TB14、S12146の処理)、
前記ゲームの終了の際の前記第1ゲーム状況情報をサーバ装置(30)に送信し(例えばTB16の処理)、
前記第2指示情報及び通信により取得された前記第1指示情報に基づいて他のプログラムにより生成された前記ゲームに係る第2ゲーム状況情報と前記第1ゲーム状況情報との間の比較結果に応じて修正指示(例えばTS16、TS24、TS50、TS60、TS66、S12104、S12182、S121476の処理)を生成する前記サーバ装置(30)から、前記修正指示を受信し(例えばTB18、TB20、TB28、TB30、TB52、TB54、TB66、S442、S4732、S4738の処理)、
受信した前記修正指示に基づいて、前記ゲームの終了の際の前記第1ゲーム状況情報を修正する(例えばTB18、TB20、TB28、TB30の処理)、
処理を、コンピュータに実行させるプログラム。
[付記20]
第1ゲーム実行部(110)及び第2ゲーム実行部(110)を含むゲーム用のゲームシステム(1)であって、
前記第1ゲーム実行部(110)は、所定のユーザ情報に関連付けられた第1指示情報(例えば、操作部14から得られる生データ又は生データを加工した情報)と、前記第2ゲーム実行部(110)から通信により取得した第2指示情報とに基づいて、前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第1ゲーム状況情報を第1記憶部(例えばゲーム状況情報記憶部120)に記憶する第1進行処理(例えばTA8、TA14、S12146の処理)を実行し、
前記第2ゲーム実行部(110)は、前記第1ゲーム実行部(110)から通信により取得した前記第1指示情報と、自動的に生成した前記第2指示情報とに基づいて、前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第2ゲーム状況情報を第2記憶部(例えばゲーム状況情報記憶部120)に記憶する第2進行処理(例えばTB8、TB14、S12146の処理)を実行し、
前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報を比較し(例えばTS14、TS22、S4726、S4736の処理)、比較結果に応じて、前記ゲームの終了の際の前記第1ゲーム状況情報を、前記第2ゲーム状況情報に整合するように修正する修正処理(例えばTS14、TS16、TB18、TB20、TS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4732、S4738、S12104、S12182、S121476の処理)を実行する修正部(200)を更に含む、ゲームシステム(1)。
付記20によるゲームシステム(1)によれば、ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報が比較され、比較結果に応じて、第1ゲーム状況情報を、第2ゲーム状況情報に整合するように修正する。これにより、ゲームの終了の際のゲーム状況情報間の不整合が放置されずに修正されるので、ゲームの終了の際のゲーム状況情報間の不整合が放置された場合の不都合を低減できる。また、第2ゲーム状況情報は、自動的に生成した第2指示情報に基づき生成されるので(すなわちユーザが入力した指示情報とは異なるので)、第2ゲーム実行部は、ユーザとは切り離してサーバ装置等により実現できる。そして、第2ゲーム実行部で生成される第2ゲーム状況情報の方を“真”として修正を行うことで、一貫性の高い態様で不整合を修正できる。
[付記21]
互いに通信可能な第1ゲーム実行部(110)及び第2ゲーム実行部(110)を含むゲーム用のゲームシステム(1)であって、
前記第1ゲーム実行部(110)は、第1プレイヤ情報に関連付けられた第1操作情報(例えば、操作部14から得られる生データ又は生データを加工した情報)と、前記第1プレイヤ情報とは異なる第2プレイヤ情報に関連付けられた第2操作情報であって前記第2ゲーム実行部から通信により取得した第2操作情報とに基づいて、前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第1ゲーム状況情報を第1記憶部に記憶する第1進行処理を実行し(例えばTA8、TA14、S12146の処理)、
前記第2ゲーム実行部(110)は、前記第1ゲーム実行部から通信により取得した前記第1操作情報と、前記第2操作情報とに基づいて、前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第2ゲーム状況情報を第2記憶部に記憶する第2進行処理を実行し(例えばTB8、TB14、S12146の処理)、
前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報間の整合性に応じて、少なくとも一方のゲーム状況情報を修正する修正処理(例えばTS14、TS16、TB18、TB20、TS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4732、S4738、S12104、S12182、S121476の処理)を実行する修正部を更に含む、ゲームシステム。
付記21によるゲームシステム(1)によれば、ゲームの終了の際の第1ゲーム状況情報及びゲームの終了の際の第2ゲーム状況情報間の整合性に応じて、少なくとも一方のゲーム状況情報を修正する修正処理を実行できる。これにより、ゲームの終了の際のゲーム状況情報間の不整合が放置されずに修正されるので、ゲームの終了の際のゲーム状況情報間の不整合が放置された場合の不都合を低減できる。
ところで、ゲームの終了の際のゲーム状況情報間の不整合が修正されないと、ユーザに違和感を与えたり、不利になる方向へのゲーム状況情報の更新を妨げるために電源オフ操作が誘発されたりするおそれがある。例えば、ゲーム状況情報が、対戦能力に影響するパラメータの値を含む場合、パラメータの値が不利な方向に変化するような場面等で、かかる変化を阻止すべく(例えば今回の対戦は諦めて次の対戦に備えて)電源オフ操作による強制終了が誘発されるおそれがある。
ゲーム状況情報は、不整合が生じる複数の属性の情報を含み得り、すべての属性の情報を一括して同時に修正すると、処理負荷が高くなり、ゲームの終了後の処理に時間がかかり、ユーザに違和感を与えるおそれがある。例えば、対戦結果の出力前に、不整合が生じたすべての属性の情報を修正すると、かかる修正のための処理時間に起因して対戦結果の出力が遅れ、ユーザに違和感を与えるおそれがある。
そこで、1つの側面では、本発明は、複数のゲーム実行部によりそれぞれ記憶されるゲーム状況情報間における不整合であって、ゲームの終了の際のゲーム状況情報間における不整合を、属性に応じたタイミングで修正することを目的とする。
[付記22]
互いに通信可能な第1ゲーム実行部(110)及び第2ゲーム実行部(110)を含むゲーム用のゲームシステム(1)であって、
前記第1ゲーム実行部(110)は、ゲーム処理を行うことで前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第1ゲーム状況情報を第1記憶部(例えばゲーム状況情報記憶部120)に記憶する第1進行処理(例えばTA8、TA14、S12146の処理)を実行し、
前記第2ゲーム実行部(110)は、ゲーム処理を行うことで前記ゲームを進行し、進行した前記ゲームのゲーム状況を表す第2ゲーム状況情報を第2記憶部(例えばゲーム状況情報記憶部120)に記憶する第2進行処理(例えばTB8、TB14、S12146の処理)を実行し、
前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報を比較し(例えばTS14、TS22、S4726、S4736の処理)、比較結果に応じて、前記ゲームの終了の際の前記第1ゲーム状況情報及び前記ゲームの終了の際の前記第2ゲーム状況情報のうちの、一方のゲーム状況情報を、他方のゲーム状況情報に整合するように修正する修正処理(例えばTS14、TS16、TB18、TB20、TS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4732、S4738、S12104、S12182、S121476の処理)を実行する修正部(200)を更に含み、
前記第1ゲーム状況情報及び前記第2ゲーム状況情報は、それぞれ、属性の異なる第1情報(例えば、対戦結果関連情報)と第2情報(例えば、対戦能力情報又はゲーム詳細情報)とを含み、
前記修正部(200)は、第1修正タイミング(例えばTS14、TS16、TB18、TB20)で前記第1情報を修正し(例えばTS14、TS16、TB18、TB20、S4732、S121476の処理)、前記第1修正タイミングとは異なる第2修正タイミング(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66)で前記第2情報を修正する(例えばTS22、TS24、TB28、TB30、TS50、TB52、TB54、TS60、TS66、TB66、S442、S4738、S12104、S12182の処理)、ゲームシステム(1)。
付記22によるゲームシステム(1)によれば、属性の異なる第1情報及び第2情報について、異なる属性に応じたタイミングで修正できる。これにより、修正のための処理時間に起因して対戦結果の出力が遅れる等の可能性を低減できる。