(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-03-11
(45)【発行日】2024-03-19
(54)【発明の名称】制御システム、サーバおよび制御方法
(51)【国際特許分類】
A63F 13/35 20140101AFI20240312BHJP
A63F 13/75 20140101ALI20240312BHJP
【FI】
A63F13/35
A63F13/75
(21)【出願番号】P 2024504221
(86)(22)【出願日】2023-12-11
(86)【国際出願番号】 JP2023044310
【審査請求日】2024-01-23
【早期審査対象出願】
(73)【特許権者】
【識別番号】517411623
【氏名又は名称】Game Server Services株式会社
(74)【代理人】
【識別番号】100105784
【氏名又は名称】橘 和之
(72)【発明者】
【氏名】丹羽 一智
【審査官】岸 智史
(56)【参考文献】
【文献】特開2019-107082(JP,A)
【文献】特開2006-6473(JP,A)
【文献】米国特許第9675874(US,B1)
【文献】中国特許出願公開第107451477(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
A63F 9/24、13/00-13/98
(57)【特許請求の範囲】
【請求項1】
サーバと、前記サーバと通信可能な端末とを備え、ゲームを提供する制御システムであって、
前記ゲームの提供の前に、前記サーバと前記端末とのそれぞれが、前記ゲームに対応する共通のノード定義データを利用可能な状態が構築され、
前記ノード定義データには、前記ゲームの状態を示すノードが複数定義され、
前記端末は、
ユーザによって前記ゲームが行われている間、前記端末の前記ノード定義データに基づいて前記ノードを遷移させ、前記ノードの遷移に応じて前記端末の前記ノード定義データに対応する端末側設定情報の値を変化させる一方、前記ノードの遷移を再現可能な遷移再現情報および前記ノードの遷移に応じて変化した前記端末側設定情報の値をログとしてログデータに記録する機能と、
前記ログの送信に関するログ送信条件が成立した場合、前記ログデータに記録された前記ログを含む送信用ログデータを前記サーバに送信する機能とを有する端末制御部を備え、
前記サーバは、
前記端末から受信した前記送信用ログデータの前記遷移再現情報および前記サーバの前記ノード定義データに基づいて前記ノードの遷移を再現し、前記ノードの遷移に応じて前記サーバの前記ノード定義データに対応するサーバ側設定情報の値を変化させると共に、前記サーバ側設定情報の値と前記送信用ログデータに記録された対応する前記端末側設定情報の値とを比較する検証処理を実行する機能を有するサーバ制御部を備える
ことを特徴とする制御システム。
【請求項2】
前記ノード定義データには、前記ノードの遷移のトリガとなるトリガ事象と、前記トリガ事象が発生したときの前記ノードの遷移の態様とが定義された遷移ルールが更に定義され、
前記端末制御部は、
前記ユーザによって前記ゲームが行われている間、前記トリガ事象の発生に応じて、前記端末の前記ノード定義データの前記遷移ルールに基づいて前記ノードを遷移させ、前記ノードの遷移に応じて前記端末側設定情報の値を変化させる一方、
発生した前記トリガ事象の内容を示す前記遷移再現情報を前記ログとして前記ログデータに記録すると共に、前記ノードの遷移に応じて変化した前記端末側設定情報の値を前記ログとして前記ログデータに記録し、
前記サーバ制御部は、前記検証処理において、
前記送信用ログデータに記録された前記遷移再現情報に基づいて、時系列に沿って前記トリガ事象を発生させ、前記トリガ事象の発生に応じて、前記サーバの前記ノード定義データに基づいて前記ノードを遷移させ、前記ノードの遷移に応じて前記サーバ側設定情報の値を変化させると共に、変化後の前記サーバ側設定情報の値と前記送信用ログデータに記録された対応する前記端末側設定情報の値とを比較する
ことを特徴とする請求項1に記載の制御システム。
【請求項3】
前記ノード定義データには、前記ゲームに関する所定の事項の状態を示す状態変数と、自ノードに遷移された場合に実行される処理である遷移時処理が定義可能であり、
前記遷移時処理には、前記状態変数を変化させる処理が含まれ、
前記端末側設定情報には、前記端末の前記ノード定義データに定義された前記状態変数が含まれ、
前記サーバ側設定情報には、前記サーバの前記ノード定義データに定義された前記状態変数が含まれる
ことを特徴とする請求項1に記載の制御システム。
【請求項4】
前記端末制御部は、前記端末側設定情報の値として、前記端末側設定情報の値のハッシュ値である状態ハッシュ値を前記ログデータに記録し、
前記サーバ制御部は、前記検証処理において、前記ノードの遷移に応じて前記サーバ側設定情報の値のハッシュ値である比較対象ハッシュ値を導出し、前記比較対象ハッシュ値と前記送信用ログデータに記録された対応する前記状態ハッシュ値とを比較する
ことを特徴とする請求項1に記載の制御システム。
【請求項5】
前記サーバと前記端末とのそれぞれは、共通する乱数生成器を利用可能であり、
前記サーバ制御部は、乱数シードを生成して前記端末に送信する一方、前記検証処理において前記ノードの遷移に応じて乱数を使用する処理を実行する場合には、生成した前記乱数シードおよび前記サーバの前記乱数生成器を使用して処理を実行し、
前記端末制御部は、前記ノードの遷移に応じて乱数を使用する処理を実行する場合には、前記サーバから受信した前記乱数シードおよび前記端末の前記乱数生成器を使用して処理を実行する
ことを特徴とする請求項1に記載の制御システム。
【請求項6】
前記端末制御部は、
前記ノードの遷移に応じて乱数を使用する処理を実行する場合、カテゴリを指定し、指定したカテゴリに応じて前記乱数シードの値を変化させ、値が変化された後の前記乱数シードおよび前記端末の前記乱数生成器を使用して処理を実行し、
前記サーバ制御部は、前記検証処理において、
前記ノードの遷移に応じて乱数を使用する処理を実行する場合、前記端末で行われた対応する処理において前記端末制御部により指定されたカテゴリと同じカテゴリを指定し、指定したカテゴリに応じて前記乱数シードの値を変化させ、値が変化された後の前記乱数シードおよび前記サーバの前記乱数生成器を使用して処理を実行する
ことを特徴とする請求項5に記載の制御システム。
【請求項7】
前記端末側設定情報には、前記ゲームにおける前記端末制御部によるカテゴリ別の乱数の使用回数が含まれ、
前記サーバ側設定情報には、前記検証処理における前記サーバ制御部によるカテゴリ別の乱数の使用回数が含まれる
ことを特徴とする請求項6に記載の制御システム。
【請求項8】
前記サーバ制御部は、前記検証処理において、
前記ノードの遷移に応じて各値を比較した結果、各値が同一ではないと判定した場合、過去に前記サーバ側設定情報の値と同一であると判定した前記端末側設定情報の値が前記ログデータに記録された段階よりも前から前記ゲームが再開される状態を構築するか、または、前記ゲームが最初から再開される状態を構築する
ことを特徴とする請求項1に記載の制御システム。
【請求項9】
前記ログ送信条件は、定期的に発生するタイミングが到来したことという条件、または、前記ログデータに一定数の前記ログが記録されたことという条件である
ことを特徴とする請求項1に記載の制御システム。
【請求項10】
端末と通信可能であり、前記端末と協働してゲームを提供するサーバであって、
前記ゲームの提供の前に、前記サーバと前記端末とのそれぞれが、前記ゲームに対応する共通のノード定義データを利用可能な状態が構築され、
前記ノード定義データには、前記ゲームの状態を示すノードが複数定義され、
前記端末で行われた前記ノードの遷移を再現可能な遷移再現情報を示すログ、および、前記ノードの遷移に応じて変化した前記端末の前記ノード定義データに対応する端末側設定情報の値を示す前記ログを含む送信用ログデータを前記端末から受信し、受信した前記送信用ログデータの前記遷移再現情報および前記サーバの前記ノード定義データに基づいて前記ノードの遷移を再現し、前記ノードの遷移に応じて前記サーバの前記ノード定義データに対応するサーバ側設定情報の値を変化させると共に、前記サーバ側設定情報の値と前記送信用ログデータに記録された対応する前記端末側設定情報の値とを比較する検証処理を実行する機能を有するサーバ制御部を備える
ことを特徴とするサーバ。
【請求項11】
サーバと、前記サーバと通信可能な端末とを備え、ゲームを提供する制御システムによる制御方法であって、
前記ゲームの提供の前に、前記サーバと前記端末とのそれぞれが、前記ゲームに対応する共通のノード定義データを利用可能な状態が構築され、
前記ノード定義データには、前記ゲームの状態を示すノードが複数定義され、
前記端末が、ユーザによって前記ゲームが行われている間、前記端末の前記ノード定義データに基づいて前記ノードを遷移させ、前記ノードの遷移に応じて前記端末の前記ノード定義データに対応する端末側設定情報の値を変化させる一方、前記ノードの遷移を再現可能な遷移再現情報および前記ノードの遷移に応じて変化した前記端末側設定情報の値をログとしてログデータに記録するステップと、
前記端末が、前記ログの送信に関するログ送信条件が成立した場合、前記ログデータに記録された前記ログを含む送信用ログデータを前記サーバに送信するステップと、
前記サーバが、前記端末から受信した前記送信用ログデータの前記遷移再現情報および前記サーバの前記ノード定義データに基づいて前記ノードの遷移を再現し、前記ノードの遷移に応じて前記サーバの前記ノード定義データに対応するサーバ側設定情報の値を変化させると共に、前記サーバ側設定情報の値と前記送信用ログデータに記録された対応する前記端末側設定情報の値とを比較する検証処理を実行するステップとを含む
ことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、サーバおよび端末によりゲームを提供する制御システム、当該制御装置、および、当該制御システムによる制御方法に関する。
【背景技術】
【0002】
従来、サーバと、このサーバにインターネットを介して通信可能に接続された端末とが協働して、ユーザにゲームを提供する制御システムが知られている。この種のゲームに関し、端末のプログラムが改変されたり、サーバと端末との間での通信が改ざんされたりすることによって不正行為が行われる場合がある。例えばユーザがゲームを有利に進めることができるように、ゲームのキャラクタ、ゲームで使用するアイテム、ゲームで使用可能なポイント、その他のゲームに関する要素が不正に改変される不正行為が行われる場合がある。不正行為に関し、特許文献1には、ゲームを進行させるための処理を全てサーバで実行することによって、不正行為を抑制できる点が記載されている(特に段落0004参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
端末およびサーバが協働してゲームを提供する制御システムに関しては、不正行為に対して耐性が高いことが求められている。そして特許文献1で示されている通り、制御システムについて、サーバがゲームを進行させるための処理(ゲームの進行に応じて画面情報を生成する処理を含む)を実行する一方、端末が画面情報に基づく画面の表示のみを行う構成とすることによって、効果的に不正行為を抑制することが可能である。しかしながら、この構成の場合、以下の問題がある。すなわちこの構成の場合、ゲームの進行に応じて頻繁に端末とサーバとの間での通信が発生することになる。そして、頻繁な通信の発生に起因してゲームの進行に遅延が生じる場合があり、このことがユーザの満足度の低下の要因となる。以上の問題がある。
【0005】
本発明は、このような問題を解決するために成されたものであり、ゲームの進行の遅延を抑制し、かつ、不正行為に対する耐性を向上することを目的とする。
【課題を解決するための手段】
【0006】
上記した課題を解決するために、本発明は、以下の構成を備える。すなわちゲームの提供の前に、サーバと端末とのそれぞれが、ゲームに対応する共通のノード定義データを利用可能な状態が構築される。このノード定義データには、ゲームの状態を示すノードが複数定義される。そして端末は、ユーザによってゲームが行われている間、端末のノード定義データに基づいてノードを遷移させ、ノードの遷移に応じて端末のノード定義データに対応する端末側設定情報の値を変化させる一方、ノードの遷移を再現可能な遷移再現情報およびノードの遷移に応じて変化した端末側設定情報の値をログとしてログデータに記録する。また端末は、ログの送信に関するログ送信条件が成立した場合、ログデータに記録されたログを含む送信用ログデータをサーバに送信する。一方、サーバは、端末から受信した送信用ログデータの遷移再現情報およびサーバのノード定義データに基づいてノードの遷移を再現し、ノードの遷移に応じてサーバのノード定義データに対応するサーバ側設定情報の値を変化させると共に、サーバ側設定情報の値と送信用ログデータに記録された対応する端末側設定情報の値とを比較する検証処理を実行する。
【発明の効果】
【0007】
上記のように構成した本発明によれば、以下の効果を奏する。すなわちゲームの提供に際して、サーバと端末とが、共通するノード定義データを利用可能な状態が構築される。そして端末は、自身のノード定義データに基づいてノードを遷移させ、ゲームを進行させる。つまり端末は、ノードの遷移についてサーバに何らかの判断を行わせることなく、ゲームを進行させる。このためゲームの進行に関して、端末とサーバとの間で頻繁に通信が発生することを抑制でき、ゲームの進行の遅延を抑制できる。
【0008】
更に本発明によれば、端末は、ノードの遷移を再現可能な遷移再現情報、および、ノードの遷移に応じて変化した端末側設定情報の値をログとしてログデータに記録する。更に端末は、所定の条件が成立した場合には、ログを含む送信用ログデータをサーバに送信する。一方、サーバは、送信用ログデータおよび自身のノード定義データに基づいてノードの遷移を再現する。更にサーバは、ノードの遷移に応じて、サーバ側設定情報の値を変化させると共に、当該値と送信用ログデータに記録された対応する端末側設定情報の値とを比較する。ここで、これら値が同じではない場合、端末において端末側設定情報の値が、正しい値から乖離したということである。従って、この場合、端末において何らかの不正行為が行われた可能性が高い。よって、これら値を比較するということは、端末における不正行為の発生の有無をサーバにおいて判別するということに等しい。つまり本発明によれば、不正行為の検出が可能であり、不正行為の検出に応じて不正行為を予防/防止する処理、または、不正行為に起因する悪影響を抑制する処理を行うことが可能である。
【0009】
すなわち本発明によれば、ゲームの進行の遅延を抑制し、かつ、不正行為に対する耐性を向上できる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、制御システムの要部を示す図である。
【
図2】
図2は、制御システムの構成を示す図である。
【
図3】
図3は、サーバおよびユーザ端末の機能構成例を示すブロック図である。
【
図4】
図4は、ボーナスゲームの画面を示す図である。
【
図5】
図5は、ノード定義データの一例を示す図である。
【
図6】
図6は、ボーナスゲームのノードの遷移を示す図である。
【
図7】
図7は、ノード定義データ管理データベースのレコードの内容を示す図である。
【
図8】
図8は、制御システムによる制御方法を示すフローチャートである。
【
図9】
図9は、ノード関連情報の内容を示す図である。
【
図10】
図10は、実行中ゲーム管理データベースのレコードの内容を示す図である。
【
図12】
図12は、端末による制御方法およびサーバによる制御方法を示す図である。
【
図17】
図17は、端末による制御方法およびサーバによる制御方法を示す図である。
【発明を実施するための形態】
【0011】
以下、本発明の一実施形態が図面に基づいて説明される。
【0012】
<本実施形態の概要>
まず、本実施形態の概要が説明される。
図1は、制御システム1の要部を示す図である。
図1で示すように制御システム1は、サーバ2およびサーバ2と通信可能なユーザ端末3(端末)を備える。サーバ2およびユーザ端末3は、協働してゲームを提供する。サーバ2は、サーバ制御部10を備える。ユーザ端末3は、端末制御部13を備える。サーバ制御部10および端末制御部13は共に、ハードウェアとソフトウェアとの協働により処理を実行する。例えばサーバ制御部10は、CPUを含む処理装置が、ROM、その他の記憶部に記憶されたプログラムを読み出して実行することによって処理を実行する。またサーバ2は、データを記憶するサーバ記憶部12を備える。ユーザ端末3は、データを記憶する端末記憶部17を備える。
【0013】
ゲームの提供の前に、サーバ2とユーザ端末3とのそれぞれが、ゲームに対応する共通のノード定義データNDを利用可能な状態が構築される。ノード定義データNDには、ゲームの状態を示すノードが複数定義される。ユーザ端末3の端末制御部13は、ユーザによってゲームが行われている間、ユーザ端末3のノード定義データNDに基づいてノードを遷移させ、ノードの遷移に応じてユーザ端末3のノード定義データNDに対応する端末側設定情報の値を変化させる。その一方で端末制御部13は、ノードの遷移を再現可能な遷移再現情報およびノードの遷移に応じて変化した端末側設定情報の値をログLGとしてログデータLDに記録する。更に端末制御部13は、ログLGの送信に関するログ送信条件が成立した場合、ログデータLDに記録されたログLGを含む送信用ログデータDLをサーバ2に送信する(ステップS1)。
【0014】
サーバ2のサーバ制御部10は、送信用ログデータDLの遷移再現情報およびサーバ2のノード定義データNDに基づいてノードの遷移を再現する。更にサーバ制御部10は、ノードの遷移に応じてサーバのノード定義データNDに対応するサーバ側設定情報の値を変化させると共に、サーバ側設定情報の値と送信用ログデータDLに記録された対応する端末側設定情報の値とを比較する検証処理を実行する。制御システム1の構成によれば、ゲームの進行の遅延を抑制し、かつ、不正行為に対する耐性を向上できる。
【0015】
<本実施形態の詳細>
次に本実施形態の詳細が説明される。
図2は、本実施形態に係る制御システム1の構成例を示す図である。
図2で示すように制御システム1は、サーバ2(コンピュータ)と、1つ以上のユーザ端末3(端末、コンピュータ)とを含んで構成される。サーバ2とユーザ端末3とは、インターネット、電話網、その他の通信網を含むネットワークNを介して通信可能である。サーバ2およびユーザ端末3は、協働してゲームをユーザに提供する。
【0016】
サーバ2は、ゲームに関するサービス(以下「本件サービス」という)を提供する。本実施形態に係るゲームでは、ユーザ端末3側で画面の提供、および、ユーザによる操作の受け付けが行われる。またゲームでは、ゲームに関する所定の情報がサーバ2に記憶され、ゲームの実行中は、ユーザ端末3とサーバ2との間で通信が行われる。
図2および後述する
図3では、サーバ2が1つのブロックで表されている。しかしこのことは、サーバ2が単一のサーバ装置で構成されることを意味しない。例えばサーバ2は、複数のサーバ装置により構成されてもよい。この場合においてサーバ2を構成するサーバ装置に、WebサーバまたはWebアプリケーションサーバが含まれてもよい。特に負荷分散、通信の円滑化、その他の目的のために同一の機能を有する複数のサーバ装置が設けられてシステムが構成される場合がある。この構成の場合、例えばロードバランサによって各サーバ装置にリクエストが分散される。この構成の場合には、サーバ2は、複数のサーバ装置のうちの1つ以上のサーバ装置であってもよい。
【0017】
ユーザ端末3は、ユーザが使用する端末である。ユーザとは、制御システム1によるゲームをプレイし得る者を意味する。ユーザ端末3は、ユーザが使用する端末を便宜的に示すものであり、ユーザが専用的に使用する端末を意味しない。ユーザ端末3のタイプは何でもよい。例えばタブレット型コンピュータ(いわゆるスマートフォンを含む)、デスクトップ型コンピュータ、ノート型コンピュータ、ゲーム機またはウェアラブル端末をユーザ端末3として機能させることができる。
【0018】
図3は、サーバ2およびユーザ端末3の機能構成例を示すブロック図である。
図3で示すように、サーバ2は機能構成として、サーバ制御部10と、サーバ通信部11と、サーバ記憶部12とを備える。ユーザ端末3は機能構成として、端末制御部13と、端末通信部14と、端末表示部15と、端末入力部16と、端末記憶部17とを備える。
【0019】
サーバ2のサーバ制御部10は、処理装置と一次記憶装置とを備える。処理装置は、情報処理機能を有する装置であり、CPUを備える。CPUは、制御装置と、演算装置と、レジスタと、キャッシュメモリとを備える。一次記憶装置は、DRAM、その他の揮発性メモリを備える。サーバ制御部10は、処理装置がサーバ記憶部12(他の記憶領域でもよい)に記憶されたプログラムを一次記憶装置に読み出して実行することによって処理を実行する。つまりサーバ制御部10は、ハードウェアとソフトウェアとの協働により処理を実行する。サーバ通信部11は、外部装置と通信する機能を有する通信装置を備える。通信装置は、通信制御装置とネットワークインタフェイスとを備える。サーバ通信部11は、サーバ制御部10の制御の下で通信装置により外部装置と通信する。以下ではサーバ2によるネットワークNを利用した通信、その他の通信は、サーバ通信部11により適切に行われるものとして詳細な説明を省略する。サーバ記憶部12は、ハードディスクドライブ(他の磁気記憶装置であってもよい)、ROM、フラッシュメモリ、その他の不揮発性メモリを備える。サーバ記憶部12は、不揮発性メモリにデータを記憶する。
【0020】
図3で示すように、サーバ通信部11には、データベースサーバ20が接続される。データベースサーバ20には、ノード定義データ管理データベース21および実行中ゲーム管理データベース22が記憶される。以下、ノード定義データ管理データベース21は「データ管理DB」と呼ばれ、実行中ゲーム管理データベース22は「ゲーム管理DB」と呼ばれる。サーバ制御部10はデータ管理DBおよびゲーム管理DBにアクセスすることができる。
図3は、サーバ2とデータベースサーバ20とが直接接続された図となっている。しかしながらサーバ2とデータベースサーバ20との接続形態は限定されない。サーバ2とデータベースサーバ20とはネットワークNを介して接続されてもよく、LANを介して接続されてもよく、有線または無線により直接接続されてもよい。
【0021】
ユーザ端末3の端末制御部13は、情報処理機能を有する処理装置と一次記憶装置とを備える。端末制御部13は、処理装置が端末記憶部17(他の記憶領域でもよい)に記憶されたプログラムを一次記憶装置に読み出して実行することによって処理を実行する。つまり端末制御部13は、ハードウェアとソフトウェアとの協働により情報処理を実行する。端末通信部14は、通信制御装置とネットワークインタフェイスとを有する通信装置を備える。端末通信部14は、端末制御部13の制御の下で通信装置により外部装置と通信する。以下ではユーザ端末3によるネットワークNを利用した通信、その他の通信は、端末通信部14により適切に行われるものとして詳細な説明を省略する。端末表示部15は、液晶パネル、有機ELパネル、その他の表示装置を備える。端末表示部15は、端末制御部13の制御の下で表示装置に画像を表示する。端末入力部16は、キーボード、マウス、タッチパネル、その他の入力装置を備える。端末入力部16は、入力装置に対する入力を検出し、検出結果を端末制御部13に出力する。端末記憶部17は、不揮発性メモリを備える。端末記憶部17は、不揮発性メモリにデータを記憶する。
【0022】
図3で示すようにユーザ端末3には、ゲームに関するアプリケーションAP(以下「ゲームアプリAP」という)がダウンロードされている。以下、ゲームアプリAPに対応するゲームを「本件ゲーム」という。ゲームアプリAPは例えば、スマートフォン向けのアプリケーションである。この場合、ゲームアプリAPは例えば、アプリケーションのダウンロードサービスを利用して、ユーザ端末3にダウンロードされる。ゲームアプリAPは、本件ゲームに関する各種画面を提供する機能、ユーザによる操作を受け付けて操作に対応する処理を実行する機能、サーバ2との間で各種情報を送受信する機能、その他の本件ゲームに関する処理を実行する機能を備えている。
【0023】
本実施形態では、以下のボーナスゲームが一例として利用される場合がある。ボーナスゲームは例えば、ユーザによって本件ゲームがプレイされているときに、所定の事象が発生したことをトリガとして本件ゲーム内で開始される。以下、ボーナスゲームが利用される例は「本件例」と呼ばれる。
図4は、ボーナスゲームの説明に利用される図である。ボーナスゲームに関し、ユーザは、ポイントを保有する。ポイントの単位は「pt」である。
図4の符号Z4Aで示すように、ボーナスゲームでは、最初に選択前画面G1が端末表示部15に表示される。選択前画面G1には、4枚のカードの裏面が描画される。カードの中身は、アタリかハズレである。ユーザがアタリのカードを選択するとポイント残高が1000pt増加し、ハズレのカードを選択するとポイント残高は変化しない。ユーザは、カーソルを利用して4枚のカードから1枚を指定し、確定ボタンB1を操作することによって1枚のカードを選択する。すると符号Z4Bで示すように、ユーザが選択したカードがアタリのカードであったのかハズレのカードであったのかが明示された選択後画面G2が端末表示部15に表示される。またアタリであったのかハズレであったのかに応じて、ユーザのポイント残高が変動する。ユーザは、当該画面の内容を確認し、ボーナスゲームを終了する場合には、終了ボタンB2を操作する。
【0024】
ここで端末とサーバとの協働により提供されるゲームでは、不正行為が行われる場合がある。ボーナスゲームに関して言えば、何ら手当しない場合には、ハズレのカードが選択されたときにポイント残高を増加させたり、アタリのカードが選択されたときにポイント残高を100000pt増加させたりする不正行為が行われ得る。不正行為は典型的には、端末のプログラム(本実施形態では、ゲームアプリAPまたはこれに付随するプログラム)の改変、または、端末とサーバとの間で行われる通信の改ざんによって行われる。後に明らかとなるように、本実施形態に係る制御システム1では、不正行為に対する耐性の向上が実現されている。
【0025】
後に明らかとなる通りボーナスゲームは、対応するノード定義データND(後述)が利用されてゲームが進行される。以下、ボーナスゲームのように、ゲームの進行にノード定義データNDが利用されるゲームは「単位ゲーム」と呼ばれる。本実施形態では、ユーザによって単位ゲームが行われ得る状況となる前に、単位ゲームに対応するノード定義データNDがサーバ2にアップロードされ、データ管理DBに記憶される。なお「ユーザによって単位ゲームが行われ得る状況となる前」とは、例えば対応するゲームアプリAPがリリースされる前、または、本件ゲームのアップデートによって単位ゲームをプレイ可能となる前である。以下、単位ゲームに対応するノード定義データNDがデータ管理DBに記憶されるまでの流れの一例が説明される。
【0026】
まず本件ゲームを開発する主体は、単位ゲームに対応するノード定義データNDを作成する。以下、本件ゲームを開発する主体は「開発者」と呼ばれる。
図5は、ボーナスゲームに対応するノード定義データNDの内容が、説明に適した態様で単純化されて示された図である。以下、ボーナスゲームに対応するノード定義データNDは「本件ノード定義データNDa」と呼ばれる。ノード定義データNDは、単位ゲームの進行に利用されるデータ/ファイルである。ノード定義データNDは、少なくとも単位ゲームのノードの管理、および、単位ゲームに関する所定の事項の状態の管理に利用される。ノードとは、単位ゲームがとり得る状態を意味する。ここでの状態は、状態遷移図(ステートマシン図)によって表現される各状態を意味する。以下では、ノードとして管理される「単位ゲームの状態」は「ゲーム状態」と呼ばれる。
【0027】
図6は、
図5の本件ノード定義データNDaで定義されたノードに関する状態遷移図である。
図6で示すように本件例では、ボーナスゲームが開始されると、ゲーム状態は待機ノードに遷移される。ゲーム状態が待機ノードのときにカード選択イベントが発生すると、ゲーム状態は抽選ノードに遷移される。ノードの遷移に関し、イベントとは、ノードの遷移のトリガとなる事象(トリガ事象)を意味する。イベントには、パラメータを付加可能である。パラメータは、例えばイベントの実行後に実行されるプログラム/関数に引き渡される引数である。ゲーム状態が抽選ノードのときに抽選完了イベントが発生すると、ゲーム状態は待機ノードに遷移される。ゲーム状態が待機ノードのときに終了イベントが発生すると、ゲーム状態は終了ノードに遷移される。ゲーム状態が終了ノードに遷移されるとボーナスゲームは終了する。各ノードおよび各イベントの内容は後に明らかとなる。本件例では、
図6で示す状態遷移に従ってノードが遷移することによって、ボーナスゲームが進行していく。
【0028】
ノード定義データNDには、状態変数情報を定義可能である。状態変数情報には、単位ゲームに関する所定の事項の状態を示す状態変数が定義される。
図5で示すように本件ノード定義データNDaには、状態変数として、選択回数<項目>、ポイント残高<項目>および抽選結果<項目>が定義される。なお本実施形態において「<項目>」という表現は、対応する用語が値を持つ項目/変数であることを示す。選択回数<項目>には、ボーナスゲームにおいてユーザによってカードの選択が行われた回数を示す値が格納される。ポイント残高<項目>には、ユーザのポイント残高を示す値が格納される。抽選結果<項目>には、カードの選択の結果を示す値が格納される変数である。
【0029】
またノード定義データNDには、初期ノード情報が定義される。初期ノード情報には、単位ゲームの開始時に最初に遷移すべきノード(以下「初期ノード」という)が定義される。
図5で示すように本件ノード定義データNDaには、初期ノードとして待機ノードが定義される。またノード定義データNDには、複数のノードのそれぞれについて、個別ノード情報が定義される。ノード定義データNDに個別ノード定義情報が定義されることは、ノード定義データNDにノードが定義されることに相当する。個別ノード定義情報には、受容イベント情報、遷移時処理情報および完了時発行イベント情報が定義可能である。
【0030】
受容イベント情報には、自ノードにゲーム状態が滞留しているときに受け付けるイベントが定義される。受容イベント情報には、イベントの種類、名称、その他の識別情報が記述されることによって、イベントが定義される。以下、受容イベント情報に定義されたイベントは「受容イベント」と呼ばれる。ゲーム状態が一のノードに滞留しているときに、当該一のノードに定義された受容イベントが発生した場合には、後述する遷移ルールに従って、当該一のノードから他のノードへの遷移が行われる。
【0031】
遷移時処理情報には、自ノードに遷移した場合に実行される処理である遷移時処理が定義される。遷移時処理情報には、遷移時処理に対応するプログラムの識別情報(例えば関数名)が記述されることによって、遷移時処理が定義される。また遷移時処理情報には、遷移時処理に対応するプログラム(スクリプト)が直接、記述されることによって遷移時処理が定義される。遷移時処理には、状態変数の値を変化させる処理が含まれ得る。ゲーム状態が一のノードから他のノードへと遷移した場合において、当該他のノードに1つ以上の遷移時処理が定義されているときは、定義された遷移時処理のそれぞれが実行される。
【0032】
完了時発行イベント情報には、自ノードに遷移された後、自ノードに定義された遷移時処理のそれぞれの実行が完了した後に発行すべきイベントが定義される。ただし、自ノードに遷移時処理が定義されていない場合には、自ノードに遷移された後、遷移時処理が実行されることなく、完了時発行イベント情報に定義されたイベントが発行される。完了時発行イベント情報には、イベントの種類、名称、その他の識別情報が記述されることによって、イベントが定義される。以下、完了時発行イベントに定義されたイベントを「完了時発行イベント」という。ゲーム状態が一のノードから他のノードへと遷移した場合、当該他のノードに遷移時処理が定義されているときは、遷移時処理が実行される。当該他のノードに遷移時処理が定義されていないときは、遷移時処理は実行されない。その後、当該他のノードに完了時発行イベントが定義されているときは、完了時発行イベントが発行される。なお本実施形態では、説明の便宜のため、初期ノードには、完了時発行イベントが定義されないものとする。つまり本実施形態では、初期ノードへの移行に応じて完了時発行イベントが発行されることはない。
【0033】
図5で示すように本件ノード定義データNDaには、待機ノード、抽選ノードおよび終了ノードのそれぞれの個別ノード情報が定義されている。つまり本件ノード定義データNDaには、待機ノード、抽選ノードおよび終了ノードが定義されている。待機ノードに着目すると、待機ノードには、受容イベントとしてカード選択イベントおよび終了イベントが定義されている。これはゲーム状態が待機ノードのときにカード選択イベントまたは終了イベントが発生した場合には、後述する遷移ルールに従って他のノードへの遷移が行われることを意味する。また待機ノードには、遷移時処理および完了時発行イベントは定義されていない。これは、ボーナスゲームが待機ノードに遷移した後に、遷移時処理の実行、および、完了時発行イベントの発行が行われないことを意味する。また抽選ノードに注目すると、抽選ノードには、受容イベントとして抽選完了イベントが定義されている。これはゲーム状態が抽選ノードのときに抽選完了イベントが発生した場合には、後述する遷移ルールに従って他のノードへの遷移が行われることを意味する。また抽選ノードには、遷移時処理として抽選処理が定義されている。これはゲーム状態が抽選ノードに遷移されたときに、抽選処理が実行されることを意味する。また抽選ノードには、完了時発行イベントとして抽選完了イベントが定義されている。これはゲーム状態が抽選ノードに遷移され、抽選処理が完了した後に、抽選完了イベントが発行されることを意味する。
【0034】
ノード定義データNDには、遷移ルール情報が定義される。遷移ルール情報には、ノードの遷移に関するルールである遷移ルールが定義される。遷移ルールには、ノードの遷移のトリガとなるイベント(トリガ事象)と、イベントが発生したときのノードの遷移の態様とが定義される。本実施形態では、遷移ルールには、遷移前のノード(ノードを示す識別情報)と、ノードの遷移のトリガとなるイベント(イベントを示す識別情報)と、遷移後のノード(ノードを示す識別情報)との組合せが定義される。例えば、遷移ルールJAについて、遷移前のノードとしてノードNAが、ノードの遷移のトリガとなるイベントとしてイベントIVが、遷移後のノードとしてノードNBが定義されているとする。この場合、遷移ルールJAは、ゲーム状態がノードNAのときに、イベントIVが発生した場合、ゲーム状態がノードNAからノードNBに遷移されることを示す。
【0035】
図5で示すように本件ノード定義データNDaには、遷移ルールJ1~J3が定義されている。遷移ルールJ1は、遷移前のノードとして待機ノードが、ノードの遷移のトリガとなるイベントとしてカード選択イベントが、遷移後のノードとして抽選ノードが定義されている。この遷移ルールJ1は、ゲーム状態が待機ノードのときに、カード選択イベントが発生した場合、待機ノードから抽選ノードに遷移されることを示す。遷移ルールJ2~J3の内容は
図5で示す通りである。
図6では、ノードの遷移となるトリガとなるイベントと対応付けて、対応する遷移ルールが明示されている。
【0036】
本実施形態ではノード定義データNDは、所定のプログラム言語によるプログラムが記述されたプログラムファイルである。ノード定義データNDには、当該所定のプログラム言語によって各種情報が記述される。当該所定のプログラム言語は、ノード定義データNDに特化された専用のプログラム言語である。ただし、当該所定のプログラム言語は、HTML、その他の既存のプログラム言語であってもよい。例えば開発者は、サーバ2の管理者が提供するツールまたはソフトウェア開発キットを利用してノード定義データNDを作成する。なお本実施形態ではノード定義データNDは、プログラムによって情報が記述されたプログラムファイルである。しかしながらノード定義データNDは、プログラムファイルではなく、JSON、その他の記述方式で情報が記述されたデータであってもよい。またノード定義データNDは、独自のフォーマットで情報が記述されたデータであってもよい。また1つのノード定義データNDが、他の1つ以上のノード定義データNDを参照する構成でもよい。この場合、複数のノード定義データNDの組合せが、「ノード定義データ」として機能する。なおノード定義データNDは、状態遷移に関する情報が記録されたデータであり、ステートマシーンに相当すると言える。
【0037】
さて開発者は、ノード定義データNDを作成した後、当該データをサーバ2にアップロードする。サーバ2は、開発者に対してノード定義データNDをアップロードする手段を提供する。ノード定義データNDがアップロードされるとサーバ2のサーバ制御部10は、以下の処理を実行する。すなわちサーバ制御部10は、アップロードされたノード定義データNDを識別する一意な値のデータIDを生成する。次いでサーバ制御部10は、データベースサーバ20のデータ管理DBに、生成したデータIDと、アップロードされたノード定義データNDとを含むレコードを登録する。ただしレコードには、ノード定義データNDに代えて、当該データの格納場所のアドレス、当該データの格納場所までのパス、その他の当該データにアクセスするための情報が格納されてもよい。
図7は、データ管理DBの1件のレコードの内容を示す。更にサーバ制御部10は、生成したデータIDを所定の方法で開発者に通知する。以上の処理が行われる結果、ユーザによって単位ゲームが行われ得る状況となる前に、データIDとノード定義データNDとが対応付けられたレコードがデータ管理DBに登録される。また開発者にデータIDが通知される。
【0038】
以上が、ノード定義データNDがデータ管理DBに記憶されるまでの流れの一例である。ただし例示した流れは一例であり、例示した流れとは異なる流れでノード定義データNDがデータ管理DBに記憶されてもよい。本実施形態では単位ゲームのそれぞれについて、データIDとノード定義データNDとを含むレコードがデータ管理DBに登録される。なお開発者、その他の権限を有する主体は、データ管理DBに記憶されたノード定義データNDの内容を変更することができる。
【0039】
次に制御システム1の動作が説明される。以下では、特にユーザによって単位ゲームが行われる場合の制御システム1の動作が説明される。
図8は、単位ゲームが行われている期間の制御システム1の動作例を示すフローチャートである。
図8のフローチャートFAはユーザ端末3の動作例を示し、フローチャートFBはサーバ2の動作例を示す。
図8のフローチャートの開始時点では、ユーザ端末3においてゲームアプリAPが起動されており、ユーザが本件ゲームをプレイしているものとする。以下では、本件例に関し、ボーナスゲームをプレイするユーザは特に「注目ユーザ」と呼ばれる。そして、注目ユーザがボーナスゲームをプレイする前の時点では、注目ユーザのポイント残高は1000ptであるものとする。
【0040】
フローチャートFAで示すように、本件ゲーム内で単位ゲームを開始するトリガとなる事象が発生した場合、ユーザ端末3の端末制御部13は、単位ゲームの開始を通知する開始通知情報をサーバ制御部10に送信する(ステップSA1)。開始通知情報には、単位ゲームに対応するノード定義データNDのデータIDが含まれる。このように本実施形態では、単位ゲームごとに、ノード定義データNDがデータIDと対応付けてデータ管理DBに記憶される。そしてユーザ端末3において単位ゲームが開始されると、端末制御部13は、単位ゲームに対応するノード定義データNDのデータIDをサーバ制御部10に送信する。
【0041】
フローチャートFBで示すようにサーバ2のサーバ制御部10は、開始通知情報を受信すると、対応するノード定義データNDを取得する(ステップSB1)。詳述するとサーバ制御部10は、データ管理DBを参照し、開始通知情報に含まれるデータIDに対応するレコードを特定する。次いでサーバ制御部10は、特定したレコードのノード定義データNDを取得する。このようにサーバ制御部10は、データ管理DBに記憶された任意のノード定義データNDを取得することができる。これは、サーバ制御部10が、データ管理DBに記憶された任意のノード定義データNDを利用できる状態であることを意味する。
【0042】
ステップSB1の処理後、サーバ制御部10は、サーバ側初回起動処理を実行する(ステップSB2)。詳述すると、まずサーバ制御部10は、ステップSB1で取得したノード定義データNDのインスタンスを生成する。「ノード定義データNDのインスタンスを生成する」とは、一次記憶装置、その他のメモリの領域にノード定義データNDの領域を確保し、サーバ制御部10がノード定義データNDに基づく処理を実行可能な状態とすることを意味する。このように本実施形態では、ノード定義データNDは、インスタンスの基礎となるクラスとして機能する。
【0043】
ノード定義データNDのインスタンスが生成されると、ノード定義データNDに対応するノード関連情報の項目のそれぞれについてメモリに領域が確保され、各項目に値を格納可能な状態となる。ノード関連情報とは、ノード定義データNDおよびノード定義データに対応する単位ゲームにおいて利用される情報である。ノード関連情報は、ノード定義データNDのインスタンスの生成に応じてメモリに領域が確保される複数の項目/変数によって構成される。ノード定義データNDのインスタンスの生成に応じて、サーバ制御部10が、ノード関連情報の各項目に値を格納し、各項目の値を更新し、各項目の値を参照することができるようになる。
【0044】
図9はノード関連情報の内容を示す図である。
図9で示すように本実施形態ではノード関連情報には、実行中ゲームID<項目>、乱数シード<項目>、ノード遷移回数<項目>、現在ノード<項目>、および、ノード定義データNDに定義された状態変数のそれぞれが含まれる。
図9では、状態変数は、第1状態変数、第2状態変数…のように表現されている。実行中ゲーム<項目>および乱数シード<項目>は初期値が格納された後、値が変化しない。ノード遷移回数<項目>、現在ノード<項目>、および、状態変数のそれぞれは、単位ゲームの進行に応じて値が変化し得る項目である。以下、これら項目をまとめて設定情報という。設定情報の各項目のうち、ノード遷移回数<項目>および現在ノード<項目>は、状態変数として定義されていない項目である。以下、これら項目をまとめて管理情報という。以下、「ノード関連情報の各項目の値」は、単に「ノード関連情報の値」と表現される場合がある。複数の項目により構成される他の情報についても同様である。
【0045】
さてノード定義データNDのインスタンスを生成した後、サーバ制御部10は、ノード関連情報の各項目のそれぞれに初期値をセットする。詳述すると実行中ゲームID<項目>には、生成したインスタンスの識別情報である実行中ゲームIDが格納される。サーバ制御部10は、一意な値の実行中ゲームIDを生成し、初期値として実行中ゲームID<項目>に格納する。乱数シード<項目>には、乱数シードが格納される。乱数シードは、乱数生成器による乱数の生成に際して、乱数生成器に入力される値である。本実施形態において乱数生成器は、漸化式を用いて乱数を発生させるモジュールであり、1つの乱数シードから連続して乱数を出力することができる。本実施形態では、単位ゲームに関してサーバ2とユーザ端末3とのそれぞれは、共通する乱数生成器を利用可能である。乱数生成器が共通するとは、乱数生成器に対応する漸化式が同じであることを意味する。従って、互いに共通する乱数生成器は、入力値が同じであれば出力値が同じである。以下、単位ゲームに関してサーバ2が利用する乱数生成器を「サーバ側乱数生成器」という。サーバ側乱数側生成器は、例えばデータベースサーバ20に記憶され、また例えばサーバ記憶部12に記憶される。また単位ゲームに関してユーザ端末3が利用する乱数生成器を「端末側乱数生成器」という。サーバ制御部10は、所定形式のランダムな値を生成する機能を有するプログラムを利用して乱数シードを生成し、初期値として乱数シード<項目>に格納する。
【0046】
ノード遷移回数<項目>には、単位ゲームが行われている間に行われたノードの遷移の回数を示すノード遷移回数が格納される。サーバ制御部10は、0回を示すノード遷移回数を初期値としてノード遷移回数<項目>に格納する。現在ノード<項目>には、現時点でゲーム状態が滞留するノード(以下「現在ノード」という)を示す現在ノード情報が格納される。サーバ制御部10は、ノードの遷移が行われていないことを示すダミー値を初期値として現在ノード<項目>に格納する。またサーバ制御部10は、状態変数のそれぞれに、適切な初期値を格納する。本件例ではサーバ制御部10は、選択回数<項目>に0回を示す選択回数を格納し、ポイント残高<項目>に1000ptを示すポイント残高を格納し、抽選結果<項目>にアタリでもハズレでもないことを示すダミー値を格納する。なおサーバ制御部10は、ユーザ管理データベース(不図示)から注目ユーザのポイント残高を取得する。ユーザ管理データベースは、データベースサーバ20に記憶される。なおノード関連情報の各項目の値は、実際には、定義されたデータ型に準じた適切な表現形式で表現される。
【0047】
以上がサーバ側初回起動処理である。サーバ側初回起動処理により、サーバ制御部10がノード定義データNDに基づいて処理を実行可能な状態となると共に、生成されたインスタンスに対応するノード関連情報の各項目のそれぞれに初期値が格納される。以下の説明では、サーバ制御部10が生成したインスタンスの基礎となったノード定義データNDは「サーバ側ノード定義データNDs」と呼ばれる。またサーバ制御部10が、生成したインスタンスを利用して処理を実行することは、「サーバ側ノード定義データNDsに基づいて処理を実行する」または「サーバ側ノード定義データNDsを利用して処理を実行する」と表現される。またサーバ制御部10が生成したインスタンスに対応するノード関連情報、設定情報、管理情報および状態変数はそれぞれ、サーバ側ノード関連情報、サーバ側設定情報、サーバ側管理情報およびサーバ側状態変数と呼ばれる。
【0048】
なおサーバ側初回起動処理では、説明した処理だけが行われるのではなく、サーバ制御部10がノード定義データNDに基づいて処理を実行可能な状態を構築するために必要な処理が適切に実行される。特に説明がされない場合であっても、処理の目的を達成するために必要な処理が行われる点は、他の処理についても同様である。
【0049】
ステップSB2の処理後、サーバ制御部10は、ゲーム管理DBに1件の新たなレコードを登録する(ステップSB3)。登録されるレコードにはサーバ側ノード関連情報の各項目の値が含まれる。ただし、この段階では、サーバ側ノード関連情報の各項目の値は、初期値である。以下では、ゲーム管理DBのレコードに含まれるノード関連情報について、ノード関連情報、設定情報、管理情報および状態変数はそれぞれ、登録ノード関連情報、登録設定情報、登録管理情報および登録状態変数と呼ばれる。
図10は、本件例に関して、ステップSB3でゲーム管理DBに登録されるレコードの内容を示す。なお
図10の例では、ゲーム実行中IDの値を「GM01」とし、乱数シードの値を適当な値としている。
【0050】
ステップSB3の処理後、サーバ制御部10は、ステップSB1で取得したノード定義データNDと、ステップSB3でゲーム管理DBに登録したレコードに含まれる登録ノード関連情報とを端末制御部13に送信する(ステップSB4)。なお端末制御部13からサーバ制御部10へのノード定義データNDの送信は、例えばユーザ端末3がノード定義データNDをサーバ2からダウンロードすることによって行われる。ステップSB4の処理後、ステップSB2のサーバ側初回起動処理で生成されたインスタンスは破棄される。
【0051】
フローチャートFAで示すように端末制御部13は、ステップSB4でサーバ制御部10が送信したノード定義データNDおよび登録ノード関連情報を受信し、各データを端末記憶部17に記憶する(ステップSA2)。ステップSA2の処理により、端末制御部13が、ノード定義データNDを利用可能な状態となる。このように本実施形態では、単位ゲーム(ゲーム)の提供の前に、サーバ2とユーザ端末3とのそれぞれが、単位ゲームに対応する共通のノード定義データNDを利用可能な状態が構築される。
【0052】
ステップSA2の処理後、端末制御部13は、端末側起動処理を実行する(ステップSA3)。ステップSA3において端末制御部13は、ステップSA2で受信したノード定義データNDのインスタンスを生成し、ノード定義データNDに基づいて処理を実行可能な状態を構築する。インスタンスの生成に応じて、ノード関連情報の各項目のそれぞれについてメモリに領域が確保され、各項目に値を格納可能な状態となる。以下の説明では、端末制御部13が生成したインスタンスの基礎となったノード定義データNDは便宜的に「端末側ノード定義データNDd」と呼ばれる。また端末制御部13が、生成したインスタンスを利用して処理を実行することは、「端末側ノード定義データNDdに基づいて処理を実行する」または「端末側ノード定義データNDdを利用して処理を実行する」と表現される。また端末制御部13が生成したインスタンスに対応するノード関連情報、設定情報、管理情報および状態変数はそれぞれ、端末側ノード関連情報、端末側設定情報、端末側管理情報および端末側状態変数と呼ばれる。後に明らかとなる通り端末側設定情報の各項目の値は、単位ゲームの進行に応じて、端末制御部13によって更新される。
【0053】
端末制御部13は、端末側ノード関連情報の値を、ステップSA2で受信した登録ノード関連情報に基づいて初期化する。端末側ノード関連情報の値を登録ノード関連情報に基づいて初期化するとは、端末側ノード関連情報の各項目のそれぞれに、受信した登録ノード関連情報の各項目の値のそれぞれを格納することを意味する。この結果、端末側ノード関連情報の各項目には、初期値が格納された状態となる。
【0054】
ステップSA3の処理後、端末制御部13は、ゲーム進行処理を開始する(ステップSA4)。ゲーム進行処理は、端末制御部13が、端末側ノード定義データNDdを利用して、単位ゲームを進行する処理である。以下、ゲーム進行処理の内容が詳述される。
図11のフローチャートFCは、単位ゲームの進行に関して、端末制御部13が端末側ノード定義データNDdに基づいて実行する処理を示す。なお単位ゲームの進行にあたっては、フローチャートFCで示される処理のほか、各種画面の提供、音声の出力、ユーザによる操作の受け付け、その他の本件ゲームに関する処理は当然に実行される。
【0055】
図11のフローチャートFCで示すように端末制御部13は、端末側ノード定義データNDdの初期ノード情報に基づいて、単位ゲームのゲーム状態を初期ノードに遷移させる(ステップSC1)。初期ノードへの遷移に応じて端末制御部13は、端末側管理情報であるノード遷移回数<項目>の値をインクリメントし、更に現在ノード<項目>に初期ノードを示す値を格納する。なお本実施形態では、特に説明されない場合であっても、ノードの遷移があると、ノード遷移回数<項目>および現在ノード<項目>の値が更新される。次いで端末制御部13は、初期ノードに遷移時処理が定義されているか否かを判別する(ステップSC2)。定義されている場合(ステップSC2:YES)、端末制御部13は、遷移時処理を実行する(ステップSC3)。なお遷移時処理が状態変数の値の変化をもたらすような処理の場合、遷移時処理の実行に応じて状態変数の値が更新される。この点は、以下においても同様である。ステップSC3の処理後、端末制御部13は、処理手順をステップSC4に移行する。初期ノードに遷移時処理が定義されていない場合(ステップSC2:NO)、端末制御部13は、処理手順をステップSC4に移行する。
【0056】
ステップSC4において端末制御部13は、ノードの遷移のトリガとなるイベントが発生したか否かを監視する。なお後述するステップSC11で発行された完了時発行イベントが、ノードの遷移のトリガとなるイベントとなるケースもある。ノードの遷移のトリガとなるイベントが発生した場合(ステップSC4:YES)、端末制御部13は、遷移再現情報記録処理を実行する(ステップSC5)。遷移再現情報記録処理は、ノードの遷移を再現可能な遷移再現情報をログLGとしてログデータLDに記録する処理である。ログデータLDは、単位ゲームの開始に応じて生成され、端末記憶部17の所定の記憶領域に記憶される。特に本実施形態では遷移再現情報記録処理は、ノードの遷移のトリガとなるイベントが発生したときに、発生したイベントの内容を示すイベント内容情報をログデータLDに記録する処理である。つまり本実施形態では、イベント内容情報が遷移再現情報に相当する。
【0057】
イベント内容情報のログデータLDへの記録に関し、端末制御部13は、イベントが発生したタイミングを示すイベントタイミング情報と、ログの種類がイベントであることを示す情報と、イベント内容情報とをフォーマットに従ってログデータLDに記録する。本実施形態ではイベントタイミング情報は、イベントが発生した日時(日付+時刻)を示す情報である。ただしイベントタイミング情報は、イベントが発生したタイミングの時系列を把握可能な情報であればよい。この点は後述する状態取得タイミング情報についても同様である。イベント内容情報は、イベントの識別情報を含む。またイベントにパラメータが付加されている場合には、イベント内容情報には、付加されたパラメータの値が含まれる。
【0058】
ステップSC4でイベントが発生したと判定した場合(ステップSC4:YES)、端末制御部13は、更に以下の処理を実行する。すなわち端末制御部13は、端末側ノード定義データNDdに定義された遷移ルールに従ってノードを遷移させる(ステップSC6)。端末制御部13は、ノードの遷移に応じて端末側設定情報を更新する。ステップSC6の処理後、端末制御部13は、遷移後のノードに遷移時処理が定義されているか否かを判別する(ステップSC7)。定義されている場合(ステップSC7:YES)、端末制御部13は、遷移時処理を実行し(ステップSC8)、処理手順をステップSC9へ移行する。定義されていない場合(ステップSC7:NO)、端末制御部13は、処理手順をステップSC9へ移行する。
【0059】
ステップSC9において端末制御部13は、端末側設定情報記録処理を実行する。端末側設定情報記録処理は、端末側設定情報の値をログとしてログデータLDに記録する処理である。特に本実施形態では端末制御部13は、端末側設定情報の値として、端末側設定情報の値のハッシュ値である状態ハッシュ値をログデータLDに記録する。詳述すると端末制御部13は、現時点の端末側設定情報の各項目の値を取得する。端末側設定情報の各項目は、管理情報と状態変数とを含む。次いで端末制御部13は、端末側設定情報の各項目のそれぞれの値をルール(以下「配列ルール」という)に従って配列したデータ(以下「配列データ」という)を生成する。次いで端末制御部13は、所定のハッシュ関数を用いて配列データのハッシュ値を導出する。ここで導出されたハッシュ値が状態ハッシュ値である。次いで端末制御部13は、現時点を示す状態取得タイミング情報と、ログの種類が端末側設定情報であることを示す情報と、状態ハッシュ値とをフォーマットに従ってログデータLDに記録する。このように本実施形態では端末制御部13は、ノードの遷移が行われた後、遷移後のノードに遷移時処理が定義されている場合には当該処理を実行し、その後、端末側設定情報の値(本実施形態では端末側設定情報の値に基づく状態ハッシュ値)をログLGとしてログデータLDに記録する。
【0060】
ステップSC9の処理後、端末制御部13は、遷移後のノードに完了時発行イベントが定義されているか否かを判別する(ステップSC10)。定義されている場合(ステップSC10:YES)、端末制御部13は、完了時発行イベントを発行し(ステップSC11)、処理手順をステップSC4に戻す。定義されていない場合(ステップSC10:NO)、端末制御部13は、処理手順をステップSC4に戻す。
【0061】
次に本件例においてユーザ端末3により実行されるゲーム進行処理が説明される。
図12のフローチャートFDは、本件例に係るゲーム進行処理の詳細を示す。なおフローチャートFDでは、説明の便宜のため、フローチャートの主軸には、ノードを遷移させる処理、および、遷移時処理のみが表記される。フローチャートFDにおいてイベントを発生させる処理、遷移再現情報記録処理、端末側設定情報記録処理、および、各種画面を表示する処理は、フローの主軸と関連付けて表記される。フローチャートFDにおいて、端末側ノード定義データNDdの内容は、
図5の本件ノード定義データNDaの内容である。
【0062】
フローチャートFDで示すように端末制御部13は、端末側ノード定義データNDdの初期ノード情報に基づいて、ボーナスゲームのゲーム状態を待機ノードへ遷移させる(ステップSD1)。待機ノードへの遷移に応じて端末制御部13は、ノード遷移回数<項目>の値を0回から1回へとインクリメントし、更に現在ノード<項目>の値を、待機ノードを示す値へと更新する。ステップSD1の処理後、端末制御部13は、ゲームアプリAPの機能により選択前画面G1(
図4参照)を端末表示部15に表示する(ステップSD2)。本実施形態では、ゲーム状態が待機ノードに遷移したときに、端末側状態変数の選択回数<項目>の値に応じた画面を表示する処理が行われるようにゲームアプリAPがプログラミングされている。ステップSD2において端末制御部13は、選択回数<項目>の値を参照し、カード選択の回数が0回であることを認識した上で、選択前画面G1を表示する。また端末制御部13は、端末側状態変数のポイント残高<項目>の値を参照し、選択前画面G1にポイント残高を示す情報を表示する。このように状態変数は、単位ゲームが行われている間、ゲームアプリAPを実行する端末制御部13により適宜、参照される。端末制御部13は、選択前画面G1の表示後、当該画面の確定ボタンB1が注目ユーザによって操作されたか否かを監視する。
【0063】
その後、注目ユーザにより選択前画面G1の確定ボタンB1が操作されると、端末制御部13は、ゲームアプリAPの機能により、カード選択イベントを発行する(ステップSD3)。カード選択イベントの発生に応じて端末制御部13は、遷移再現情報記録処理を実行する(ステップSD4)。
図13の符号LG1は、ステップSD4の処理でログデータLDに新たに記録される第1ログの内容を示している。第1ログLG1は、ステップSD3のカート選択イベントが発生したタイミングを示すイベントタイミング情報と、第1ログLG1の種類がイベントであることを示す情報と、ステップSD3で発生したイベントの内容を示すイベント内容情報とを含む。
【0064】
更にカード選択イベントの発生に応じて端末制御部13は、端末側ノード定義データNDdに定義された遷移ルールJ1に基づいて、ゲーム状態を抽選ノードへ遷移させる(ステップSD5)。端末制御部13は、抽選ノードへの遷移に応じて端末側設定情報を適切に更新する。抽選ノードへの遷移に応じて端末制御部13は、抽選ノードに遷移時処理として定義された抽選処理を実行する(ステップSD6)。抽選処理とは、端末制御部13が、端末側乱数生成器およびフローチャートFAのステップSA2で受信した登録ノード関連情報に含まれる乱数シードを利用して、カードの選択の結果を決定する処理である。以下、抽選処理が詳述される。
【0065】
抽選処理において端末制御部13は、ステップSA2で受信した乱数シードを端末側乱数生成器に入力し、その出力値(乱数)を得る。次いで端末制御部13は、予め定められたルール(以下「抽選ルール」という)に従って、出力値から、カードの選択の結果を決定する。非常に単純化した例として、例えば乱数生成器は、乱数シードの入力に応じて0、1、2、3の4つの整数のうち、何れかを出力するよう構成される。この場合において抽選ルールは、出力値が0または1のときはカード選択の結果をアタリとし、出力値が2または3のときはカード選択の結果をハズレとするというルールとされる。
【0066】
カードの選択の結果を決定した後、端末制御部13は、端末側設定情報の必要な項目の値を更新する。具体的には端末制御部13は、選択回数<項目>の値をインクリメントし、ポイント残高<項目>の値をカードの選択の結果に基づいて更新し、抽選結果<項目>にカード選択の結果を示す値を格納する。本件例では、カード選択の結果はアタリと決定されたものとする。従って本件例では、端末制御部13は、選択回数<項目>の値を「1回」とし、ポイント残高<項目>の値を「2000pt」とし、抽選結果<項目>にアタリを示す値を格納する。以上の通り端末制御部13は、ノードの遷移に応じて乱数を使用する処理を実行する場合には、サーバ2から受信した乱数シードおよびユーザ端末3の乱数生成器を使用して処理を実行する。
【0067】
ステップSD6の処理後、端末制御部13は、端末側設定情報記録処理を実行する(ステップSD7)。
図13の符号LG2は、ステップSD7の処理によってログデータLDに新たに記録される後の第2ログの内容を示している。第2ログLG2は、現時点を示す状態取得タイミング情報と、ログLGの種類が端末側設定情報であることを示す情報と、現時点の端末側設定情報の各項目の値に基づく状態ハッシュ値とが記録される。
【0068】
ステップSD7の処理後、端末制御部13は、抽選ノードに完了時発行イベントとして定義された抽選完了イベントを発行する(ステップSD8)。抽選完了イベントの発生に応じて端末制御部13は、遷移再現情報記録処理を実行する(ステップSD9)。
図13の符号LG3は、ステップSD9の処理でログデータLDに新たに記録される第3ログの内容を示している。抽選完了イベントの発生に応じて更に端末制御部13は、端末側ノード定義データNDdに定義された遷移ルールJ2に基づいて、ゲーム状態を待機ノードへ遷移させる(ステップSD10)。端末制御部13は、待機ノードへの遷移に応じて端末側設定情報を適切に更新する。待機ノードへの遷移に応じて端末制御部13は、端末側設定情報記録処理を実行する(ステップSD11)。
図13の符号LG4は、ステップSD11の処理によってログデータLDに新たに記録される第4ログの内容を示している。待機ノードのへの遷移に応じて更に端末制御部13は、選択後画面G2(
図4参照)を端末表示部15に表示する(ステップSD12)。端末制御部13は、端末側状態変数の選択回数<項目>の値を参照し、カード選択の回数が1回であることを認識した上で、選択後画面G2を表示する。また端末制御部13は、端末側状態変数のポイント残高<項目>の値および抽選結果<項目>の値を参照し、選択後画面G2の内容をこれら値に基づく内容とする。端末制御部13は、選択後画面G2の表示後、当該画面の終了ボタンB2が注目ユーザによって操作されたか否かを監視する。
【0069】
その後、注目ユーザから選択後画面G2の終了ボタンB2が選択されると、端末制御部13は、ゲームアプリAPの機能により終了イベントを発行する(ステップSD13)。終了イベントの発生に応じて端末制御部13は、遷移再現情報記録処理を実行する(ステップSD14)。
図13のLG5は、ステップSD14の処理でログデータLDに新たに記録される第5ログの内容を示している。終了イベントの発生に応じて更に端末制御部13は、端末側ノード定義データNDdに定義された遷移ルールJ3に基づいて、ゲーム状態を終了ノードへ遷移させる(ステップSD15)。端末制御部13は、待機ノードへの遷移に応じて端末側設定情報を適切に更新する。待機ノードへの遷移に応じて端末制御部13は、端末側設定情報記録処理を実行する(ステップSD16)。
図13の符号LG6は、ステップSD16の処理によってログデータLDに新たに記録される第6ログの内容を示している。終了ノードへの遷移に応じてボーナスゲームは終了する。
【0070】
以上、ゲーム進行処理が説明された。以上の通り端末制御部13は、ゲーム進行処理において以下の処理を実行する。すなわち端末制御部13は、ユーザによってゲームが行われている間、ユーザ端末3のノード定義データNDに基づいてノードを自動で遷移させ、ノードの遷移に応じてユーザ端末3のノード定義データNDに対応する端末側設定情報の値を動的に変化させる。一方で、端末制御部13は、ノードの遷移を再現可能な遷移再現情報およびノードの遷移に応じて変化した端末側設定情報の値をログLGとしてログデータLDに自動で記録する。より詳細には端末制御部13は以下の処理を実行する。すなわち端末制御部13は、ユーザによってゲームが行われている間、イベント(トリガ事象)が発生したか否かを継続して監視し、イベント(トリガ事象)の発生に応じて、ユーザ端末3のノード定義データNDの遷移ルールに基づいてノードを自動で遷移させ、ノードの遷移に応じて端末側設定情報の値を動的に変化させる。一方で、端末制御部13は、発生したイベントの内容を示す遷移再現情報をログLGとしてログデータLDに自動で記録すると共に、ノードの遷移に応じて変化した端末側設定情報の値をログLGとしてログデータLDに自動で記録する。
【0071】
以上の通り本実施形態では、単位ゲームを進行させるためのノードの遷移、および、ノードの遷移に伴う端末側設定情報の更新は、サーバ制御部10ではなく、端末制御部13が端末側ノード定義データNDdに基づいて実行する。つまり端末制御部13は、ノードの遷移および端末側設定情報の更新に関して、「サーバ2に必要な情報を通信によって送信し、サーバ2から処理結果が通信によって送られてくるのを待機する」といった、サーバ2との通信を伴う処理を実行しない。従って、単位ゲームの進行に関して、ユーザ端末3とサーバ2との間での通信の発生が抑制され、当該通信の発生に起因したゲームの進行の遅延が抑制される。
【0072】
ただし端末制御部13が端末側ノード定義データNDdに基づいて単位ゲームを進行させる構成では、何ら手当がされない場合、以下の問題が生じ得る。すなわち単位ゲームが行われている間、端末制御部13は、サーバ制御部10に何らかの判断を行わせることなく、ノードを遷移させ、端末側設定情報を更新し、単位ゲームを進行させる。つまり単位ゲームの進行中、端末側設定情報の値の正しさは、サーバ制御部10によって検証されない。このため不正行為によって、端末側設定情報の値が本来の正しい値から改変された場合であっても、端末側設定情報の値が誤った状態のままゲームが進行する、という問題がある。例えば、フローチャートFDのステップSD6の抽選処理において、不正に改変されたプログラムの機能により、ポイント残高<項目>の値が2000pt(本来の正しい値)から、100000ptへと改変されたとする。この場合であっても、何ら手当がされない場合には、改変後のポイント残高<項目>の値の正しさはサーバ制御部10によって検証されない。従って、何ら手当がされない場合には、ポイント残高<項目>の値が100000ptのまま、ボーナスゲームが進行していくことになる。後に明らかとなるように、本実施形態では、このような不正行為に対する対策が行われ、不正行為に対する耐性の向上が実現されている。
【0073】
さて
図8で示すように、ステップSA4でゲーム進行処理を開始した後、端末制御部13は、ログLGの送信に関するログ送信条件が成立したか否かを監視しつつ(ステップSA5)、単位ゲームが終了したか否かを監視する(ステップSA6)。ステップSA5およびステップSA6の処理は、ステップSA4で開始されたゲーム進行処理と並行して実行される。ログ送信条件とは、送信用ログデータDL(後述)を送信する条件のことである。本実施形態では、所定の間隔(例えば、1秒、10秒または30秒)をあけて定期的に送信用ログデータDLの送信が行われるよう定められている。これを踏まえ本実施形態に係るログ送信条件は、定期的に発生するタイミングが到来したことという条件である。以下、送信用ログデータDLを送信するタイミングを「ログ送信タイミング」という。
【0074】
ステップSA5でログ送信条件が成立したと判定した場合(ステップSA5:YES)、端末制御部13は、ログ送信処理を実行し(ステップSA7)、処理手順をステップSA6へ移行する。一方、ステップSA5でログ送信条件が成立していないと判定した場合(ステップSA5:NO)、端末制御部13は、処理手順をステップSA6へ移行する。ステップSA6において端末制御部13は、単位ゲームが終了したと判定した場合(ステップSA6:YES)、処理手順をステップSA8へ移行し、終了していないと判定した場合(ステップSA6:NO)、処理手順をステップSA5へ戻す。ステップSA8において端末制御部13は、単位ゲームの終了を示す終了通知情報をサーバ制御部10に送信する。終了通知情報には、対応する単位ゲームの実行中ゲームIDが少なくも含まれる。ステップSA8の処理後、フローチャートFAの処理は終了する。
【0075】
以下、ステップSA7のログ送信処理が詳述される。ログ送信処理において、端末制御部13は、ログデータLDに記録されたログLGのうち、サーバ2に未送信のログLGを特定し、特定したログLGのそれぞれを含む送信用ログデータDLを生成する。送信用ログデータDLには、時系列に沿って各ログLGが記録される。次いで端末制御部13は、単位ゲームに対応するデータID、および、ステップSA2で受信した登録ノード関連情報に含まれる実行中ゲームIDと共に送信用ログデータDLをサーバ制御部10に送信する。以下、ログ送信処理により送信されるデータID、実行中ゲームIDおよび送信用ログデータDLの組合せは、「ログ関連データ」と呼ばれる。
【0076】
例えば
図16で示すように、1回目のログ送信タイミングが、第4ログLG4の記録が行われた後、第5ログLG5の記録が行われる前に到来した場合、端末制御部13は、第1~第4ログLG1~LG4を含む送信用ログデータDLを送信する。その後、2回目のログ送信タイミングが、第6ログLG6の記録が行われた後に到来した場合、端末制御部13は、第5、第6ログLG5、LG6を含む送信用ログデータDLを送信する。なお端末制御部13は、ログ送信タイミングが到来したときに、未送信のログLGがない場合には、送信用ログデータDLの送信を行わない。ただし以下では、説明の便宜上、「端末制御部13が、定期的に送信用ログデータDLを送信する」と表現する場合がある。
【0077】
以上の通り本実施形態では端末制御部13は、ユーザによって本件ゲームが行われている間、継続してログ送信条件が成立したか否かを監視する。そして端末制御部13は、ログ送信条件が成立した場合、ログデータLDに記録されたログGを含む送信用ログデータDLをサーバ2に自動で送信する。
【0078】
さて
図8のフローチャートFBで示すように、サーバ制御部10は、ステップSB4の処理後、以下の処理を実行する。すなわちサーバ制御部10は、ログ関連データ(送信用ログデータDL)を受信したか否かを監視しつつ(ステップSB5)、終了通知情報を受信したか否かを監視する(ステップSB6)。ステップSB7においてログ関連データを受信したと判定した場合(ステップSB5:YES)、サーバ制御部10は、検証処理を実行し(ステップSB7)、処理手順をステップSB6へ移行する。一方、ステップSB5において送信用ログデータDLを受信していないと判定した場合(ステップSB5:NO)、サーバ制御部10は、処理手順をステップSB6へ移行する。ステップSB6においてサーバ制御部10は、終了通知情報を受信していないと判定した場合(ステップSB6:NO)、処理手順をステップSB5に戻し、受信したと判定した場合(ステップSB6:YES)、サーバ側終了処理を実行する(ステップSB8)。サーバ側終了処理では、単位ゲームの終了時に実行される処理として定められた処理が実行される。例えばサーバ制御部10は、終了通知情報に含まれる実行中ゲームIDに対応するレコードに基づいて、ユーザ管理データベース、その他のデータベースを適切に更新する。ステップSB8の処理後、フローチャートFBは終了する。
【0079】
なお
図8のフローチャートFBは、ある1つのサーバ2が全てのステップの処理を実行する内容となっている。しかしながら、全ての処理が1つのサーバ2において順番に行われる必要はない。例えばサーバ2が複数のサーバ装置によって構成され、ロードバランサによって負荷分散が実現されているものとする。また、ある特定のユーザ端末3(ユーザ端末TXとする)で単位ゲームが開始されたとする。この構成において、ユーザ端末TXから開始通知情報を受信するサーバ2と、ユーザ端末TXから送信用ログデータDLを受信するサーバ2と、ユーザ端末TXから終了通知情報を受信するサーバ装置とが異なっていてもよい。またユーザ端末TXが、送信用ログデータDLを複数回送信する場合において、複数の送信用ログデータDLを受信するサーバ装置がそれぞれ異なっていてもよい。
【0080】
以上の通りサーバ制御部10は、ユーザによって単位ゲームが行われている間、送信用ログデータDLを受信したか否かを継続して監視し、送信用ログデータDLの受信に応じて、検証処理を実行する。以下、検証処理が詳述される。
【0081】
図14のフローチャートFFは、検証処理の詳細を示す。フローチャートFFで示すように、サーバ制御部10は、受信したログ関連データを取得する(ステップSF1)。ログ関連データには、送信元のユーザ端末3でプレイされている単位ゲームに対応するデータIDおよび実行中ゲームIDと、送信用ログデータDLとが含まれる。次いでサーバ制御部10は、受信したデータIDに対応するノード定義データNDをデータ管理DBから取得する(ステップSF2)。次いでサーバ制御部10は、受信した実行中ゲームIDに対応する登録ノード関連情報をゲーム管理DBから取得する(ステップSF3)。
【0082】
次いでサーバ制御部10は、サーバ側起動処理を実行する(ステップSF4)。詳述するとサーバ制御部10は、ステップSF2で取得したノード定義データNDのインスタンスを生成し、サーバ側ノード定義データNDsに基づく処理を実行可能な状態とする。ノード定義データNDのインスタンスの生成に応じて、サーバ側ノード関連情報の各項目に値を格納可能な状態となる。次いでサーバ制御部10は、サーバ側ノード関連情報の各項目の値を、ステップSF3で取得した登録ノード関連情報の各項目の値によって初期化する。この結果、サーバ側ノード関連情報の値と、現時点でゲーム管理DBに登録されている対応する登録ノード関連情報の値とが一致した状態となる。なおサーバ制御部10は、ノード定義データNDのインスタンスを生成し、ノード関連情報の各項目を初期化した後、サーバ側ノード定義データNDsに基づいてノードを遷移させ、疑似的に単位ゲームを進行させていく。以下、説明の便宜上、サーバ側ノード定義データNDsに基づいて進行される疑似的な単位ゲームは、「疑似単位ゲーム」と呼ばれる。特に疑似的なボーナスゲームは、「疑似ボーナスゲーム」と呼ばれる。また、ステップSF1~SF4の処理は、「再起動処理」と呼ばれる。
【0083】
ステップSF4の処理後、サーバ制御部10は、受信したログ関連データが、単位ゲームの開始後、最初に送信されたデータであるか否かを判別する(ステップSF5)。上述したように端末制御部13は、単位ゲームが開始された後、定期的にログ関連データ(送信用ログデータDL)を送信する。そしてステップSF5においてサーバ制御部10は、受信したログ関連データが1回目のログ送信タイミングで送信されたデータであるか否かを判別している。最初に送信されたデータであるか否かは、例えば、所定のフラグによって管理される。また例えば、ログ関連データに、最初のデータかどうかを示す情報が含められる。最初のデータではない場合(ステップSF5:NO)、サーバ制御部10は、処理手順をステップSF7へ移行する。最初のデータの場合(ステップSF5:YES)、サーバ制御部10は、初期ノード遷移処理を実行する(ステップ:SF6)。初期ノード遷移処理においてサーバ制御部10は、ゲーム状態を初期ノードへ遷移させ、初期ノードに遷移時処理が定義されている場合には当該処理を実行する。初期ノードへの遷移に応じてサーバ側設定情報の値は適切に更新される。ステップSF6の処理後、サーバ制御部10は、処理手順をステップSF7へ移行する。
【0084】
ステップSF7以降、サーバ制御部10は、送信用ログデータDLに含まれるログLGのそれぞれについて、ログLGの時系列に沿ってログ対応処理を実行する。すなわちステップSF7においてサーバ制御部10は、送信用ログデータDLに記録されたログLGのうち、未処理のログLGがあるか否かを判別する。未処理のログLGがある場合(ステップSF7:YES)、サーバ制御部10は、未処理のログLGのうち、最も古いログLGを処理対象ログとして決定する(ステップSF8)。次いでサーバ制御部10は、処理対象ログを対象としてログ対応処理を実行し(ステップSF9)、処理手順をステップSF7へ戻す。
【0085】
一方、ステップSF7において未処理のログLGがないと判定した場合(ステップSF7:NO)、サーバ制御部10は、サーバ反映処理を実行する(ステップSF10)。ステップSF10のサーバ反映処理においてサーバ制御部10は、現時点のサーバ側設定情報の各項目の値によって、ゲーム管理DBの対応するレコード(ステップSF3で登録ノード関連情報を取得したレコード)の登録設定情報の各項目の値を更新する。ステップSF10の処理後、フローチャートFFは終了する。
【0086】
このように本実施形態では、送信用ログデータDLに記録された全てのログLGについて、状態不一致(後述)が発生することなく、ログ対応処理が完了した場合、サーバ側設定情報の各項目の値によって、ゲーム管理DBの対応するレコードの登録設定情報の各項目の値が更新される。これにより次に新たなログ関連データを受信したときに再起動処理が行われると、サーバ側設定情報の各項目の値が、1つ前に受信したログ関連データに対する処理が完了した時点の各項目の値となる。なお後に明らかとなる通り、ログ対応処理において状態不一致(後述)が発生し、エラー処理が行われる場合には、検証処理は中断される。この場合には、ステップSF10のサーバ反映処理は行われないことになる。
【0087】
図15のフローチャートFGは、ログ対応処理の詳細を示す。ログ対応処理においてサーバ制御部10は、処理対象ログの種類が、イベントであるか端末側設定情報であるかを判別する(ステップSG1)。上述の通り、処理対象ログの種類がイベントの場合、処理対象ログにはイベント内容情報が記録され、当該種類が端末側設定情報の場合、処理対象ログには状態ハッシュ値が記録される。処理対象ログの種類がイベントの場合(ステップSG1:「イベント」)、サーバ制御部10は、処理対象ログのイベント内容情報が示すイベントを発行する(ステップSG2)。なおイベント内容情報が、パラメータが付加されたイベントを示している場合には、サーバ制御部10は、パラメータを正確に再現してイベントを発行する。次いでサーバ制御部10は、サーバ側ノード定義データNDsの遷移ルールに従って、擬似単位ゲームのノードを遷移させる(ステップSG3)。サーバ制御部10は、ノードの遷移に応じて必要なサーバ側設定情報の更新を実行する。次いでサーバ制御部10は、遷移後のノードに遷移時処理が定義されているか否かを判別する(ステップSG4)。定義されている場合(ステップSG4:YES)、サーバ制御部10は、遷移時処理を実行する(ステップSG5)。遷移時処理は、状態変数、その他のサーバ側設定情報の項目の値を変化させる処理を含む。従ってステップSG5の処理によって、サーバ側設定情報の1つ以上の項目の値が変化する場合がある。またサーバ制御部10は、遷移時処理が乱数を使用する処理の場合には、サーバ側設定情報の乱数シード<項目>に格納された乱数シードおよびサーバ側乱数生成器を用いて乱数を発生させる。当該乱数シードの値は、サーバ制御部10がステップSB2で生成し、ステップSB4でユーザ端末3に送信した乱数シードの値と一致する。
【0088】
以上の通りサーバ2とユーザ端末3とのそれぞれは、共通する乱数生成器を利用可能である。そしてサーバ制御部10は、乱数シードを生成してユーザ端末3に送信する一方、検証処理においてノードの遷移に応じて乱数を使用する処理を実行する場合には、生成した乱数シードおよびサーバ2の乱数生成器を使用して処理を実行する。一方で端末制御部13は、ノードの遷移に応じて乱数を使用する処理を実行する場合には、サーバ2から受信した乱数シードおよび端末の乱数生成器を使用して処理を実行する。これにより、その他の乱数生成器を用いて行う処理に関し、サーバ制御部10の処理結果と、端末制御部13の処理結果とを完全に一致させることが可能となる。
【0089】
なおサーバ制御部10は、検証処理において、遷移後のノードに完了時発行イベントが定義されている場合であっても、完了時発行イベントの発行を行わず、完了時発行イベントの発行をキャンセルする。ステップSG5の処理後、ログ対応処理は終了する。一方、遷移後のログに遷移時処理が定義されていない場合(ステップSG4:NO)、サーバ制御部10は、ログ対応処理を終了する。
【0090】
ステップSG1において処理対象ログの種類が端末側設定情報であると判定した場合(ステップSG1:「端末側状態情報」)、サーバ制御部10は、比較対象ハッシュ値を導出する(ステップSG6)。サーバ制御部10は、端末制御部13が状態ハッシュ値を導出する方法と同じ方法で比較対象ハッシュ値を導出する。すなわちサーバ制御部10は、サーバ側設定情報の各項目の値を取得する。次いでサーバ制御部10は、各項目の値に基づいて、ユーザ端末3のルールと同じルールで配列データを生成する。次いでサーバ制御部10は、ユーザ端末3のハッシュ関数と同じハッシュ関数を用いてハッシュ値を導出する。ここで導出されたハッシュ値が比較対象ハッシュ値である。仮に状態ハッシュ値の基礎となった端末側設定情報の各項目の値と、比較対象ハッシュ値の基礎となったサーバ側設定情報の各項目の値とが同じであるならば、状態ハッシュ値と比較対象ハッシュ値とは完全に一致する。
【0091】
次いでサーバ制御部10は、比較対象ハッシュ値と、処理対象ログに含まれる状態ハッシュ値とが同一であるか否かを判別する(ステップSG7)。ここで、これら値が同一ではない場合、ユーザ端末3において端末側設定情報の1つ以上の項目の値が、正しい値から乖離したということである。従って、この場合、何らかの不正行為が行われた可能性が高い。よって、これら値が同一か否かを判別するということは、ユーザ端末3における不正行為の発生の有無をサーバ2において判別するということに等しい。比較対象ハッシュ値と状態ハッシュ値とが同一の場合(ステップSG7:YES)、サーバ制御部10は、ログ対応処理を終了する。一方、これら値が同一ではない場合(ステップSG7:NO)、サーバ制御部10は、エラー処理を実行する(ステップSG8)。エラー処理は後述される。エラー処理が実行される場合、検証処理は中断される。
【0092】
以下の説明において、ログ対応処理において比較対象ハッシュ値と状態ハッシュ値とが同一ではないことは、「状態不一致」と表現される場合がある。またステップSG6、SG7で示す比較対象ハッシュ値を導出し、比較対象ハッシュ値と状態ハッシュ値とを比較する処理のことは、「状態比較処理」と呼ばれる。
【0093】
次に本件例についてサーバ制御部10が実行する検証処理が説明される。
図12のフローチャートFEは、本件例についてサーバ制御部10が実行する検証処理の詳細を示す。本件例では端末制御部13が、1回目のログ送信タイミングで第1~第4ログLG1~LG4を含む送信用ログデータDL(以下「第1送信用ログデータDL-1」とする)を送信し、2回目のログ送信タイミングで第5、第6ログLG5、LG6を含む送信用ログデータDL(以下「第2送信用ログデータDL-2」とする)を送信したものとする。第1~第6ログLG1~LG6については
図13に示されている。
図12のフローチャートFEは、第1送信用ログデータDL-1の受信に応じた検証処理、および、第2送信用ログデータDL-2の受信に応じた検証処理を示す。
【0094】
フローチャートFEで示すようにサーバ制御部10は、第1送信用ログデータDL-1を含むログ関連データを受信すると(ステップSE1)、再起動処理を実行する(ステップSE2)。これによりサーバ側ノード定義データNDsに基づく処理が実行可能な状態となり、サーバ側ノード関連情報の各項目の値が、ゲーム管理DBの対応するレコードの現時点の登録ノード関連情報の各項目の値によって初期化される。次いでサーバ制御部10は、初期ノード遷移処理を行って、疑似ボーナスゲームのゲーム状態を待機ノードへ遷移させる(ステップSE3)。待機ノードへの遷移に応じてサーバ制御部10は、サーバ側設定情報の値を適切に更新する。
【0095】
次いでサーバ制御部10は、第1ログLG1に基づくログ対応処理を行ってカード選択イベントを発行する(ステップSE4)。ここで発行されたカード選択イベントは、フローチャートFDの遷移再現情報記録処理でログデータLDに記録されたカード選択イベントに対応する。カード選択イベントの発生に応じて、サーバ制御部10は、サーバ側ノード定義データNDsの遷移ルールJ1に基づいて疑似ボーナスゲームのゲーム状態を抽選ノードへ遷移させる(ステップSE5)。抽選ノードへの遷移に応じてサーバ制御部10は、サーバ側設定情報の値を更新する。カード選択イベントの発生に応じて更にサーバ制御部10は、抽選ノードに遷移時処理として定義された抽選処理を実行する(ステップSE6)。
【0096】
ステップSE6の抽選処理に関し、サーバ制御部10は、以下の処理を実行する。すなわちサーバ制御部10は、サーバ側ノード関連情報の乱数シード<項目>に格納された乱数シードをサーバ側乱数生成器に入力し、その出力値を得る。次いでサーバ制御部10は、端末制御部13が用いた抽選ルールと同じルールに従って、出力値に基づいてカードの選択の結果を決定する。次いでサーバ制御部10は、サーバ側状態変数の各項目の値を、決定した結果に基づいて更新する。ここで端末制御部13がフローチャートFDのステップSD6の抽選処理において使用する乱数生成器と、サーバ制御部10がフローチャートFEのステップSE6の抽選処理において使用する乱数生成器とは共通している。更に端末制御部13が抽選処理において乱数生成器に入力する乱数シードの値と、サーバ制御部10が抽選処理において乱数生成器に入力する乱数シードの値とは同一である。従ってサーバ制御部10による抽選処理の処理結果は、端末制御部13による抽選処理の処理結果と必ず同じとなる。このためユーザ端末3で不正行為が行われていない場合には、ステップSE6の抽選処理が終わった時点のサーバ側状態変数の値と、フローチャートFDのステップSD6の抽選処理が終わった時点の端末側状態変数の値とは一致する。
【0097】
ステップSE6の処理後、サーバ制御部10は、第2ログLG2に基づくログ対応処理の状態比較処理を実行する(ステップSE7)。ステップSE7の状態比較処理では、現時点のサーバ側設定情報の各項目の値に基づく比較対象ハッシュ値と、フローチャートFDのステップSD7でログデータLDに記録された状態ハッシュ値とが同一か否か判別される。ユーザ端末3において不正行為が行われていない場合にはこれら値は一致する。ステップSE7において各値が同一ではないと判定した場合、サーバ制御部10は、検証処理を中断しエラー処理を実行する。
【0098】
ステップSE7の処理後、サーバ制御部10は、第3ログLG3に基づくログ対応処理を行って抽選完了イベントを発行する(ステップSE8)。この抽選完了イベントは、フローチャートFDのステップSD9の遷移再現情報記録処理で記録された抽選完了イベントに対応する。抽選完了イベントの発生に応じて、サーバ制御部10は、サーバ側ノード定義データNDsの遷移ルールJ2に基づいて疑似ボーナスゲームのゲーム状態を待機ノードへ遷移させる(ステップSE9)。待機ノードの遷移に応じてサーバ制御部10は、サーバ側設定情報の各項目の値を更新する。
【0099】
ステップSE9の処理後、サーバ制御部10は、第4ログLG4に基づく状態比較処理を実行する(ステップSE10)。状態比較処理では、現時点のサーバ側設定情報の各項目の値に基づく比較対象ハッシュ値と、フローチャートFDのステップSD11でログデータLDに記録された状態ハッシュ値とが同一か否か判別される。ステップSE10において各値が同一ではないと判定した場合、サーバ制御部10は、検証処理を中断しエラー処理を実行する。ステップSE10の処理後、サーバ制御部10は、サーバ反映処理を実行する(ステップSE11)。ステップSE11の処理により、ゲーム管理DBの対応するレコードの登録ノード関連情報の各項目の値が、現時点のサーバ側ノード関連情報の各項目の値となる。以上により第1送信用ログデータDL-1に基づく検証処理は完了する。
【0100】
その後、サーバ制御部10は、第2送信用ログデータDL-2を含むログ関連データを受信する(ステップSE12)。するとサーバ制御部10は、再起動処理を実行する(ステップSE13)。ステップSE13の処理により、サーバ側ノード定義データNDsに基づく処理が実行可能な状態となる。更にサーバ側ノード関連情報の各項目の値が、ゲーム管理DBの対応するレコードの現時点の登録ノード関連情報の各項目の値によって初期化される。次いでサーバ制御部10は、第5ログLG5に基づくログ対応処理を行って終了イベントを発行する(ステップSE14)。この終了イベントは、フローチャートFDのステップSD14でログデータLDに記録された終了イベントに対応する。終了イベントの発生に応じて、サーバ制御部10は、サーバ側ノード定義データNDsの遷移ルールJ3に基づいて疑似ボーナスゲームのゲーム状態を終了ノードへ遷移させる(ステップSE15)。終了ノードへの遷移に応じてサーバ制御部10は、サーバ側設定情報の値を更新する。ステップSE15の処理後、サーバ制御部10は、第5ログLG5に基づく状態比較処理を実行する(ステップSE16)。ステップSE16の処理後、サーバ制御部10は、サーバ反映処理を実行する(ステップSE17)。ステップSE17の処理により、ゲーム管理DBの対応するレコードの登録ノード関連情報の各項目の値が、現時点のサーバ側ノード関連情報の各項目の値となる。以上により第2送信用ログデータDL-2に基づく検証処理は完了する。
【0101】
以上の通りサーバ制御部10は、ユーザ端末3から受信した送信用ログデータDLの遷移再現情報およびサーバ2のノード定義データNDに基づいてノードの遷移を再現する。更にサーバ制御部10は、ノードの遷移に応じてサーバ2のノード定義データNDに対応するサーバ側設定情報の値を変化させると共に、サーバ側設定情報の値と送信用ログデータDLに記録された対応する端末側設定情報の値とを比較する検証処理を実行する。より詳細には、サーバ制御部10は、検証処理において、送信用ログデータDLに記録された遷移再現情報に基づいて、時系列に沿ってトリガ事象を発生させ、トリガ事象の発生に応じて、サーバのノード定義データに基づいてノードを自動で遷移させ、ノードの遷移に応じてサーバ側設定情報の値を動的に変化させると共に、変化後のサーバ側設定情報の値と送信用ログデータに記録された対応する端末側設定情報の値とを比較する。この構成のため、以下の効果を奏する。すなわちサーバ側設定情報の値と送信用ログデータDLに記録された対応する端末側設定情報の値とが同じではない場合、ユーザ端末3において端末側設定情報の値が、正しい値から乖離したということである。従って、この場合、ユーザ端末3において何らかの不正行為が行われた可能性が高い。よって、これら値を比較するということは、ユーザ端末3における不正行為の発生の有無をサーバ2において判別するということに等しい。そして上記構成によれば、不正行為の検出が可能であり、不正行為の検出に応じて不正行為を予防/防止する処理、または、不正行為に起因する悪影響を抑制する処理を行うことが可能である。これにより不正行為に対する耐性を向上できる。
【0102】
次にエラー処理が詳述される。エラー処理では、不正行為の予防/防止に寄与する処理、または、不正行為に起因する悪影響を抑制する処理が実行される。本実施形態ではサーバ制御部10は、エラー処理として、ロールバック処理を実行する。ロールバック処理においてサーバ制御部10は、過去に比較対象ハッシュ値(サーバ側設定情報の値)と同一であると判定した状態ハッシュ値(端末側設定情報の値)がログデータLDに記録された段階よりも前からゲームが再開される状態を構築する。以下、本件例を用いてエラー処理の一例が説明される。
【0103】
図12のフローチャートFEを参照し、例えばステップSE16の状態比較処理において状態不一致が発生したとする。この場合、ステップSE10の状態比較処理では状態不一致が発生しなかったということである。この場合、フローチャートFDのステップSD11の処理が行われたタイミングから、ステップSD16の処理が行われたタイミングまでの期間に、不正行為によって端末側設定情報の1つ以上の項目の値が改変されたことが想定される。なおこの場合、サーバ制御部10は、検証処理を中断し、ステップSE17のサーバ反映処理を実行しない。
【0104】
そしてステップSE16で状態不一致が発生すると、サーバ制御部10は、ゲーム管理DBの対応するレコードを参照し、現時点の登録ノード関連情報を取得する。ここで取得された登録ノード関連情報は、ステップSE11のサーバ反映処理において更新された情報である。次いでサーバ制御部10は、取得した登録ノード関連情報、および、ボーナスゲームに対応するノード定義データNDを端末制御部13に送信する。更にサーバ制御部10は、ステップSD11の端末側設定情報記録処理が行われた段階からボーナスゲームを再開することを端末制御部13に指示する。
【0105】
当該指示に応じて端末制御部13は、受信したノード定義データNDに基づいてインスタンスを生成し、受信した登録ノード関連情報に基づいてインスタンスに対応する端末側ノード関連情報の各項目の値を初期化する。この初期化によって、現在ノード<項目>の値が更新され、ボーナスゲームのゲーム状態は、端末側設定情報の現在ノード<項目>が示すノード(本例では待機ノード)へ遷移される。更に端末制御部13は、端末側設定情報の各項目の値に対応する処理を実行する。本例では端末制御部13は、選択後画面G2を端末表示部15に表示する。以上の処理が行われる結果、ボーナスゲームがステップSD11の端末側設定情報記録処理が行われた段階から再開される状態が構築される。
【0106】
なおボーナスゲームが再開された後、端末制御部13は、
図11のフローチャートFCのステップSC4以降の処理に従ってゲーム進行処理を実行すると共に、定期的にログ関連データを送信する。サーバ制御部10は、ログ関連データの受信に応じて検証処理を実行する。
【0107】
このように本実施形態では、ログ対応処理において状態不一致が発生した場合には、不正行為による影響がない時点からボーナスゲームが再開される。この構成のため、不正行為が行われた場合であっても、不正行為による悪影響を抑制することができる。また不正行為を行ったユーザに対して、不正行為を行っても、不正行為による利益を享受できないことを認識させることができ、ユーザが不正行為を行うことを牽制することができる。なお、不正行為を行わないユーザについては、ボーナスゲームが行われている間、ロールバック処理が行われることなく、ゲームがスムーズに進行することになる。従って不正行為を行わないユーザの満足度が低下することはない。
【0108】
<変形例>
次に上記実施形態の変形例が説明される。本変形例では、管理情報に項目として、乱数使用実績情報が含まれる。
図16は、乱数使用実績情報の内容を模式的に示す図である。乱数使用実績情報には、単位ゲームで使用され得る乱数カテゴリごとに、乱数カテゴリID<項目>と、乱数使用回数<項目>とが設けられる。乱数カテゴリは後述される。乱数カテゴリID<項目>には、乱数カテゴリの識別情報である乱数カテゴリIDが格納される。乱数使用回数<項目>には、対応する乱数カテゴリにおいて乱数が使用された回数を示す乱数使用回数が格納される。乱数使用回数の初期値は、0回を示す値である。
図16の1つ目のレコードは、乱数カテゴリID:R01の乱数カテゴリにおいて乱数が3回使用されたことを示している。なお、端末側設定情報には、単位ゲームにおける端末制御部13によるカテゴリ別の乱数の使用回数が含まれることになる。またサーバ側設定情報には、検証処理におけるサーバ制御部10によるカテゴリ別の乱数の使用回数が含まれることになる。
【0109】
本変形例では、端末制御部13は、ゲーム進行処理において以下の処理を実行する。
図17のフローチャートFHは、端末制御部13により実行されるゲーム進行処理のうち、乱数使用処理に関連する部分を示す。以下の説明では、単位ゲームに第1ステージ、第2ステージおよび第3ステージが設けられているものとする。更に第1ステージについて乱数カテゴリIDとして「R01」が割り振られ、第2ステージについて「R02」が割り振られ、第3ステージについて「R03」が割り振られているものとする。また上述の通り、遷移時処理には乱数を使用する処理が含まれる。以下、乱数を使用する処理を「乱数使用処理」という。第1ステージでは乱数使用処理P1a~P1cが実行され、第2ステージでは乱数使用処理P2a、P2bが実行され、第3ステージでは乱数使用処理P3a、P3bが実行される。なお
図17を用いた説明では、乱数生成器は、0~3の範囲で整数を出力するものとする。また、特に説明しないものの、乱数使用処理は、ノードの遷移に応じて実行される。
【0110】
図17のフローチャートFHで示すように、端末制御部13は、第1ステージで乱数使用処理P1aを実行する際、第1ステージに対応する乱数カテゴリID:R01(カテゴリ)を指定する。当該指定は、例えば、乱数を発生させる関数にパラメータとして乱数カテゴリID:R01が引き渡されることによって実行される。次いで端末制御部13は、指定した乱数カテゴリID(カテゴリ)に応じて乱数シードの値を変化させる。上記実施形態で説明した通り乱数シードは、サーバ2から受信されたものである。変化させるときのルールは、乱数シードが同じ場合に、カテゴリIDが異なれば変化後の乱数シードの値が異なり、カテゴリIDが同じであれば変化後の乱数シードの値が同じとなるルールとされる。当該ルールは例えば、乱数シードの値に、カテゴリIDに応じた値を加算するというルールである。以下、変化後の乱数シードを「変化後乱数シード」という。
【0111】
次いで端末制御部13は、変化後乱数シードを端末側乱数生成器に入力し、その出力を得る。
図17は、乱数使用処理P1aにおける端末側乱数生成器の出力が3であったことを示す。更に端末制御部13は、端末側設定情報の乱数使用実績情報の乱数カテゴリID:R01に対応する乱数使用回数の値をインクリメントする。以後、第1ステージにおいて、端末制御部13は、乱数使用処理を実行する場合、カテゴリID:R01に対応して変化された変化後乱数シードを入力とする端末乱数生成器が連続して出力する出力値を順番に使用(消費)する。また端末制御部13は、乱数の使用に応じて対応する乱数使用回数の値をインクリメントする。上述したように乱数生成器は漸化式であり、特定の値が入力された場合には、連続する出力値の態様が特定の態様となる。
図17は、第1ステージにおいて乱数使用処理P1bで乱数:0が使用され、乱数使用処理P1cで乱数:1が使用された様子を示す。
【0112】
乱数使用処理P1cの処理後、端末制御部13は、第1端末側設定情報記録処理を実行する。この時点で乱数カテゴリID:R01、R02、R03に対応する乱数使用回数はそれぞれ、3回、0回、0回である。
【0113】
第1ステージに続く第2ステージにおいて端末制御部13は、以下の処理を実行する。すなわち端末制御部13は、乱数使用処理P2aにおいて、乱数カテゴリID:R02を指定し、指定した乱数カテゴリIDに応じて変化後乱数シードを生成する。端末制御部13は、変化後乱数シードを端末側乱数生成器に入力し、出力値(乱数)を得る。乱数使用処理P2aに続く乱数使用処理P2bにおいて端末制御部13は、乱数カテゴリID:R02に対応する変化後乱数シードを入力とする端末乱数生成器が次に出力する出力値(乱数)を取得する。端末制御部13は、乱数の使用に応じて、対応する乱数使用回数の値をインクリメントする。
図17は、第2ステージにおいて乱数使用処理P2aで乱数:1が使用され、乱数使用処理P2bで乱数:0が使用された様子を示す。乱数使用処理P2bの処理後、端末制御部13は、第2端末側設定情報記録処理を実行する。この時点で乱数カテゴリID:R01、R02、R03に対応する乱数使用回数はそれぞれ、3回、2回、0回である。
【0114】
第2ステージに続く第3ステージについても端末制御部13は、第1ステージおよび第2ステージと同様の処理を実行する。
図17は、第3ステージにおいて乱数使用処理P3aで乱数:3が使用され、乱数使用処理P3bで乱数:2が使用された様子を示す。乱数使用処理P3bの処理後、端末制御部13は、第3端末側設定情報記録処理を実行する。この時点で乱数カテゴリID:R01、R02、R03に対応する乱数使用回数はそれぞれ、3回、2回、2回である。
【0115】
以上の通り本実施形態では、端末制御部13は、ノードの遷移に応じて乱数を使用する処理を実行する場合、カテゴリを指定し、指定したカテゴリに応じて乱数シードの値を変化させ、値が変化された後の乱数シードおよび端末に記憶された乱数生成器を使用して処理を実行する。これにより以下の効果を奏する。すなわち単位ゲームにおいて、1つの乱数シードに基づいて端末側乱数生成器が連続して出力する出力値(乱数)が継続して使われた場合、乱数の予測可能性が高まると共に、いわゆる乱数調整が行われ易くなる。一方で、単位ゲームに複数のカテゴリが設けられ、カテゴリごとに独立した乱数シードが用いられることによって、単位ゲームにおいてカテゴリごとに、乱数の関連性をなくすことができ、乱数の予測可能性を低減することができると共に、乱数調整の困難性を向上できる。
【0116】
次に本変形例におけるサーバ2の動作を説明する。
図17のフローチャートFIは、ユーザ端末3がフローチャートFHの処理を実行した場合におけるサーバ2の動作例を示す。特にフローチャートFIは、検証処理におけるサーバ2の動作例を示す。フローチャートFIで示される通り、サーバ制御部10は、検証処理において、ノードの遷移に応じて、乱数使用処理Q1a、Q1b、Q1cを実行する。この乱数使用処理Q1a、Q1b、Q1cは、フローチャートFHで端末制御部13が実行した乱数使用処理P1a、P1b、P1cに対応する。乱数使用処理Q1aにおいて端末制御部13は、乱数カテゴリID:R01を指定し、乱数カテゴリID:R01に応じて、ユーザ端末3のルールと同じルールに従って変化後乱数シードを生成する。そして端末制御部13は、変化後乱数シードをサーバ側乱数生成器に入力し、その出力値(乱数)を得る。サーバ側乱数生成器と端末側乱数生成器とは共通するため、サーバ2に係る乱数使用処理Q1aで使用される乱数の値と、ユーザ端末3に係る乱数使用処理P1aで使用される乱数の値とは必ず一致する。以後、サーバ制御部10は、乱数使用処理Q1b、Q1cにおいてカテゴリID:R01に対応する変化後乱数シードに基づいてサーバ側乱数生成器が連続して出力する出力値を順番に使用(消費)する。この結果、サーバ2に係る乱数使用処理Q1b、Q1cで使用される乱数の値と、ユーザ端末3に係る乱数使用処理P1b、P1cで使用される乱数の値とは同じとなる。
【0117】
またサーバ制御部10は、乱数使用処理Q1cの後に、第1状態比較処理を実行する。この第1状態比較処理において、比較対象ハッシュ値の基礎となる乱数使用実績情報の乱数使用回数の値は以下である。乱数カテゴリID:R01→3回、R02→0回、R03→0回。これは、第1端末側設定情報記録処理において、状態ハッシュ値の基礎となった乱数使用実績情報の乱数使用回数の値と一致する。従って、不正行為が行われていない場合、第1状態比較処理において状態不一致は発生しない。
【0118】
フローチャートFIの乱数使用処理Q2a、Q2bは、フローチャートFHで端末制御部13が実行した乱数使用処理P2a、P2bに対応する。乱数使用処理Q2a、Q2bについて、サーバ制御部10は、カテゴリID:R02に対応する変化後乱数シードに基づいてサーバ側乱数生成器が連続して出力する出力値を順番に使用(消費)する。サーバ制御部10は、乱数使用処理Q2bの処理後、第2状態比較処理を実行する。この第2状態比較処理では、第1状態比較処理と同じ理由により、不正行為が行われていない場合には、状態不一致は発生しない。またフローチャートFIの乱数使用処理Q3a、Q3bは、フローチャートFHで端末制御部13が実行した乱数使用処理P3a、P3bに対応する。乱数使用処理Q3a、Q3bについて、サーバ制御部10は、カテゴリID:R03に対応する変化後乱数シードに基づいてサーバ側乱数生成器が連続して出力する出力値を順番に使用(消費)する。この結果、サーバ2に係る乱数使用処理Q3a、Q3bで使用される乱数の値と、ユーザ端末3に係る乱数使用処理P3a、P3bで使用される乱数の値とは同じとなる。また乱数使用処理Q3bに続く第3状態比較処理では、第1状態比較処理と同じ理由により、不正行為が行われていない場合には、状態不一致は発生しない。
【0119】
以上の通り、サーバ制御部10は、検証処理において、ノードの遷移に応じて乱数を使用する処理を実行する場合、ユーザ端末3で行われた対応する処理において端末制御部13により指定されたカテゴリと同じカテゴリを指定し、指定したカテゴリに応じて乱数シードの値を変化させ、値が変化された後の乱数シードおよびサーバ2の乱数生成器を使用して処理を実行する。
【0120】
以上、本発明の一実施形態について説明したが、上記実施形態は、本発明を実施するにあたっての具体化の一例を示したものに過ぎず、これによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその要旨、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【0121】
例えば上記実施形態では、ログ送信条件は、定期的に発生するタイミングが到来したことという条件であった。しかしながら、ログ送信条件の内容は、上記実施形態で例示した内容に限られない。一例として、ログデータLDに一定数のログLGが記録されたことという条件であってもよい。この場合に、一定数は、1つでもよく、2つ以上でもよい。
【0122】
また上記実施形態では端末制御部13は、ログ送信条件が成立した場合、ログデータLDに記録されたログのうち未送信のものを含む送信用ログデータDLを送信する構成であった。この点に関し、端末制御部13が、ログデータLDに記録された全てのログLGを含む送信用ログデータDLを送信する構成でもよい。この構成の場合においてサーバ制御部10は、送信用ログデータDLを受信した後、都度、未処理のログLGを抽出し、ログ対応処理を実行してもよい。またサーバ制御部10は、送信用ログデータDLを受信する度に、全てのログLGを対象としてログ対応処理を実行してもよい。
【0123】
また上記実施形態では、端末制御部13は、ログデータLDにハッシュ値である状態ハッシュ値を記録した。この点に関し端末制御部13が、状態ハッシュ値ではなく、端末側設定情報の値(ハッシュ化されていない値)をフォーマットに従ってログデータLDに記録する構成でもよい。この場合、送信用ログデータLSのログLGには、状態ハッシュ値に代えて端末側設定情報の値(ハッシュ化されていない値)が含まれる。この構成の場合、サーバ制御部10は、状態比較処理において、比較対象ハッシュ値を導出することなく、サーバ側ノード定義データNDsのサーバ側設定情報の値と、送信用ログデータDLの対応する端末側設定情報の値とが同一であるか否かを判別する。
【0124】
またサーバ制御部10が実行するエラー処理は、上記実施形態で例示した処理に限定されない。例えばサーバ制御部10が以下の処理を実行する構成でもよい。例えばサーバ制御部10が、エラー処理として、単位ゲームが最初から再開される状態を構築する構成でもよい。この場合、サーバ制御部10は、再開の対象となる単位ゲームに対応するゲーム管理DBのレコードを破棄し、
図8のフローチャートFBのステップSB1以下の処理を改めて実行する。また例えばサーバ制御部10が、端末制御部13と協働してユーザに対して所定の警告を通知する構成でもよい。また例えばサーバ制御部10が、不正行為を行ったユーザをリストに登録する構成でもよい。すなわち、状態不一致が発生したときにサーバ制御部10が実行する処理は、不正行為の予防/防止に寄与する処理、または、不正行為に起因する悪影響を抑制する処理であればよい。
【0125】
また上記実施形態では、サーバ制御部10が、ノード定義データNDと併せて乱数シードを端末制御部13に送信する構成であった。しかしながら単位ゲームにおいて乱数が使用されない場合には、端末制御部13が乱数シードを送信しない構成でもよい。
【0126】
またログLGの内容は上記実施形態で例示した内容に限られない。特に上記実施形態では、遷移再現情報は、イベント(トリガ事象)の内容を示す情報であったが、遷移再現情報の内容は例示した内容に限定されない。例えば、遷移再現情報は、ノードの遷移にあたって参照した遷移ルールを識別する情報でもよい。また例えば遷移再現情報は、イベント以外の事象によってノードの遷移が可能に構成されている場合には、ノードの遷移のトリガとなった事象を示す情報でもよい。すなわち遷移再現情報は、サーバ制御部10が、検証処理においてノードの遷移を再現するときに利用可能な情報であればよい。
【0127】
また上記実施形態では、遷移ルールがノード定義データに記録された構成であった。しかしながら、遷移ルールがノード定義データに記録されない構成でもよい。例えば遷移ルールは、ノード定義データNDとは別のファイルに記録されてもよい。ただしこの構成の場合、ノード定義データNDのファイルと、遷移ルールが記録されたファイルとの組合せが「ノード定義データ」であると捉えられてもよい。また、ある単位ゲームに関し、サーバ制御部10が使用するプログラム(ノード定義データに係るプログラムとは別のプログラム)に遷移ルールが定義され、端末制御部13が使用するプログラム(例えばゲームアプリAP)にサーバ2に係る遷移ルールと同じ内容の遷移ルールが定義される構成でもよい。すなわち、単位ゲームに関し、サーバ制御部10と端末制御部13とが同じ内容の遷移ルールを利用する状態が構築されればよい。
【0128】
また本実施形態では、単位ゲームの提供の前に、サーバ2とユーザ端末3とのそれぞれが単位ゲームに対応する共通のノード定義データNDを利用可能な状態(以下「共有状態」という)が構築された。そして共有状態が構築される方法は、本実施形態で例示した方法に限られない。例えば、一の単位ゲームについて、サーバ2にノード定義データNDがアップロードされると共に、ゲームアプリAPにノード定義データNDが組み込まれる構成でもよい。この構成の場合、ユーザ端末3側のノード定義データNDの内容の改変(更新)は、ゲームアプリAPのアップデートによって行われるようにすればよい。またこの構成において、ゲームアプリAPにノード定義データNDが最初から組み込まれないものの、追加データとして事後的に組み込まれる構成としてもよい。また例えば、CD-ROM、USBメモリ、その他の物理的媒体に記憶されたノード定義データNDがユーザ端末3にダウンロードされ、これにより共有状態が構築される構成でもよい。すなわち、共有状態を構築する手段は何でもよく、単位ゲームの提供の前に、サーバ2とユーザ端末3とのそれぞれが単位ゲームに対応する共通のノード定義データNDを利用可能な状態が構築されればよい。なお「サーバ2が利用するノード定義データNDと、ユーザ端末3が利用するノード定義データNDとが共通する」とは、サーバ2に係るノード定義データNDと、ユーザ端末3に係るノード定義データNDとが形式的な点も含めて完全に一致することを意味しない。すなわち、これらデータが共通するとは、ノード定義データNDに基づいて処理が実行されたときに、不正行為が行われない限り、同じ態様でノードが遷移し、同じ態様で処理が行われ、同じ態様で設定情報が更新されるという点でデータの内容に同一性があることを意味する。
【0129】
また上記実施形態では、ユーザ端末3およびサーバ2により提供されるゲームは、ユーザ端末3にダウンロードされた専用的なアプリケーションによって提供されるものであった。しかしながらゲームは、上記実施形態で例示したゲームに限られない。一例として、ブラウザを利用して行われるオンラインゲームであってもよい。
【0130】
また上述の通りノード定義データNDは、プログラムファイルではなく、JSON、その他の記述方式で情報が記述されたデータであってもよい。すなわちノード定義データNDは、端末制御部13およびサーバ制御部10が利用可能な態様でノードが記述されたデータであればよい。例えば、ノード定義データNDが所定のデータフォーマットに従って情報が記述されたテキストデータであるものとする。またノード定義データNDの設定情報の各項目(一部の項目でもよい)について、項目名と項目値とが対応付けてテキストによってノード定義データNDを構成するテキストデータに記述されているものとする。この構成において端末制御部13(サーバ制御部10も同様)は、ノード定義データNDを構成するテキストデータを適宜、参照し、ノードの遷移およびノードの遷移に伴う処理を実行する。また端末制御部13は、適宜、当該テキストデータに記録された項目値を更新することによって、設定情報の値を更新する。
【0131】
また上記実施形態では、端末側設定情報を具体的に例示した。ここで端末側設定情報は、状態比較処理において端末側設定情報と比較される対象となる情報を意味するものとする。上記実施形態では、状態ハッシュ値の基礎となる項目の組合せが端末側設定情報に相当する。そして端末側設定情報に関して、端末側設定情報の態様は、上記実施形態で例示した態様に限られない。例えば、端末側状態変数の一部の状態変数または端末側管理情報の一部の項目が端末側設定情報に含められる構成でもよい。また、設定情報および管理情報のうち、何れか一方の情報が端末側設定情報に含められる構成でもよい。すなわち、端末側設定情報は、単位ゲームの進行に伴うノードの遷移に応じて値が変化し得る情報であればよい。なお状態比較処理において比較対象となるサーバ側設定情報の項目は、端末側設定情報の項目に応じて適切に選択される。
【0132】
またノード関連情報の内容は、上記実施形態で例示した内容に限られない。例えば、ノード関連情報に、ユーザIDまたはノード定義データNDのバージョンが含まれてもよい。
【0133】
また上記実施形態において、ゲームアプリAPの機能により実行されるとした処理の一部または全部を、ブラウザが実行する構成としてもよい。
【0134】
また上記実施形態において、サーバ記憶部12にデータ管理DBおよびゲーム管理DBが記憶される構成でもよい。
【0135】
また上記実施形態で示した機能ブロックは、任意のハードウェア、または、任意のハードウェアと任意のソフトウェアとの連携により実現可能である。つまり、これら機能ブロックは、特定のハードウェアに限定されるものではない。
【0136】
また上記実施形態のフローチャートの処理単位は、処理を理解容易にするために、主な処理内容に応じて分割したものである。処理単位の分割の仕方または名称によって、本願発明が制限されることはない。各装置の処理は、処理内容に応じて、さらに多くの処理単位に分割することもできる。また、1つの処理単位がさらに多くの処理を含むように分割することもできる。また、同様の処理を行うことができるのであれば、上記のフローチャートの処理順序も、図示した例に限られるものではない。
【0137】
また例えば、サーバ2またはユーザ端末3のコンピュータが実行するプログラムの提供を実施形態に含めることができる。また、当該プログラムをコンピュータで読み取り可能に記録した記録媒体の提供を実施形態に含めることができる。上記記録媒体は例えば、フレキシブルディスク、HDD(Hard Disk Drive)、CD-ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)、Blu-ray Disc(登録商標)、光磁気ディスク、フラッシュメモリ、カード型記録媒体である。
【符号の説明】
【0138】
1 制御システム
2 サーバ
3 ユーザ端末(端末)
10 サーバ制御部
13 端末制御部
LD ログデータ
LG ログ
ND ノード定義データ
DL 送信用ログデータ
【要約】
ゲームの提供の前に、サーバ2とユーザ端末3とのそれぞれが、ゲームに対応する共通のノード定義データNDを利用可能な状態が構築される。ノード定義データNDには、ゲームの状態を示すノードが複数定義される。ユーザ端末3は、ユーザによってゲームが行われている間、ユーザ端末3のノード定義データに基づいてノードを遷移させ端末側設定情報の値を変化させる一方、ノードの遷移を再現可能な遷移再現情報および変化した端末側設定情報の値をログとしてログデータに記録する。更にユーザ端末3は、ログを含む送信用ログデータDLをサーバ2に送信する。サーバ2は、送信用ログデータの遷移再現情報およびサーバ2のノード定義データNDに基づいてノードの遷移を再現し、ノードの遷移に応じてサーバ側設定情報の値を変化させると共に、サーバ側設定情報の値と送信用ログデータに記録された端末側設定情報の値とを比較する。