(57)【要約】【課題】不確実性を有するゲームについて、複数のクライアントに対して共通にゲームを遂行するための基盤となる環境を実現する、ゲームシステム、ゲームサーバ及びゲーム遂行方法を提供する。【解決手段】本実施形態のカーリングゲームシステム１０１は、"BESTSHOT"コマンドと"RUNSHOT"コマンドを規定し、物理シミュレータ３０５でリンクを計算機上で再現する環境を提供する。カーリングゲームシステム１０１と共通の物理シミュレータ３０５を用いて、コマンド体系に沿うゲームクライアント１０３を開発することで、開発者はカーリングのゲームアルゴリズムの開発にのみ集中することができる。【選択図】図１
2015089484.tif 000002
【特許請求の範囲】
【請求項１】
ゲームエリア内の移動体に所定の力を与えて移動させるショットの、ゲームの進行上好適と判断するベストショット情報に対し、所定の乱数を与えて現実のショットを模擬したかく乱済ショット情報を生成する乱数付与演算部と、
前記乱数付与演算部が生成した前記かく乱済ショット情報に基づいて、前記ゲームエリア内に存在する前記移動体の座標情報を物理シミュレーション演算にて求める物理シミュレータと、
前記物理シミュレータが算出した前記ゲームエリア内における前記移動体の座標情報に基づいてゲームのスコアを算出するゲーム処理部と
を具備するゲームシステム。
【請求項２】
更に、
前記ベストショット情報を生成するショット演算部と
を具備する、請求項１に記載のゲームシステム。
【請求項３】
ゲームクライアントから送信される、ゲームエリア内の移動体に所定の力を与えて移動させるショットのうち、ゲームの進行上好適と判断するベストショット情報に対し、所定の乱数を与えて現実のショットを模擬したかく乱済ショット情報を生成する乱数付与演算部と、
前記乱数付与演算部が生成した前記かく乱済ショット情報に基づいて、前記ゲームエリア内に存在する前記移動体の座標情報を物理シミュレーション演算にて求める物理シミュレータと、
前記ベストショット情報を前記ゲームクライアントから受信して前記乱数付与演算部に与えると共に、前記物理シミュレータが算出した前記ゲームエリア内における前記移動体の座標情報を前記ゲームクライアントに送信するサーバ入出力制御部と
を具備するゲームサーバ。
【請求項４】
更に、
前記物理シミュレータが算出した前記ゲームエリア内における前記移動体の座標情報に基づいてゲームのスコアを算出するゲーム処理部と
を具備し、
前記サーバ入出力制御部は前記ゲーム処理部が算出した前記スコアを前記ゲームクライアントに送信する、
請求項３記載のゲームサーバ。
【請求項５】
ゲームクライアントが、ゲームエリア内の移動体に所定の力を与えて移動させるショットのうち、ゲームの進行上好適と判断するベストショット情報をゲームサーバに送信するベストショット情報送信ステップと、
前記ゲームサーバが、前記ベストショット情報に対し、所定の乱数を与えて現実のショットを模擬したかく乱済ショット情報を前記ゲームクライアントに送信するかく乱済ショット情報送信ステップと、
前記ゲームサーバが、前記ベストショット情報に対し、所定の乱数を与えて現実のショットを模擬した前記かく乱済ショット情報に基づいて、前記ゲームエリア内に存在する前記移動体の座標情報を物理シミュレーション演算にて求め、前記移動体の座標情報を前記ゲームクライアントに送信する座標情報送信ステップと、
前記ゲームサーバが、前記移動体の座標情報に基づいてゲームのスコアを算出して前記ゲームクライアントに送信するスコア情報送信ステップと
を有するゲーム遂行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ゲームシステム、ゲームサーバ及びゲーム遂行方法に関する。
より詳細には、カーリング等の、不確実性を有するゲームを計算機上でシミュレートして実行するゲームシステムと、これに用いるゲームサーバ、そしてプロトコルを含むゲーム遂行方法に関する。
【背景技術】
【０００２】
近年、様々なスポーツでＩＴ技術（Information Technology）を用いた戦術支援が行われている。例えば、ロンドンオリンピックの日本女子バレーチームでは、過去の試合データを基にした戦略構築を行い銅メダル獲得に大きく貢献した。他にも、野球やビリヤードでもＩＴ技術による戦略支援が行われており、成果を挙げている。
一方、カーリングは「氷上のチェス」と呼ばれるほど高度な戦略が必要とされるにも関わらず、実用化に至るほどの戦術支援システムの開発が行われていない。
【０００３】
カーリングは氷上で行われるウィンタースポーツである。４人ずつ２チームで行われ、約４０メートル先に描かれたハウスと呼ばれる円を目がけて各チームが交互に８回ずつストーンを氷上に滑らせる。この、ストーンを氷上に滑らせる行為を「ショット」と呼ぶ。全てのストーンを投げ終わると、得点をカウントして終了する。ストーンをティーと呼ばれる円の中心により近づけたチームが得点を得る。この一区切りをエンドと呼び、試合では１０エンドを行い総得点で勝敗を競う。先攻後攻は１エンド目ではコイントスなどで決め、２エンド目以降は、前エンドで得点したチームが先攻となる。どちらも得点しなかった場合には先攻後攻を入れ替えずに次のエンドを行う。
投げたストーンは、ホッグラインを越えないとアウトになり、バッグラインを越えてもアウトになる。アウトになったストーンはプレーから外される。また、アウトにならないホッグラインからバックラインの間をプレーエリアと呼ぶ。
カーリングでは、１エンド毎に両チームが全てのストーン（１チーム８個、計１６個）を投げ終わった時点で、ハウスの中心に１番近いチームだけが得点できる。つまり負けたチームは必ず０点となる。
また、このとき得られる得点は相手チームのストーンより中心に近いストーン全てが得点になる。ただし、ハウスの外にあるストーンは得点にはならない。
【０００４】
先攻と後攻ではどちらが有利だろうか。先攻は、後攻の最後の一投でハウスの中央へショットを決めるコースを完全に塞ぐことは難しい。一般に、ラストショットで後攻はハウスの中央を狙うショットを投げることができるので、多くの場合においてカーリングは後攻が圧倒的に有利なゲームである。そのため、勝つためにはハウスの中心にストーンを置きに行くだけではなく、相手を邪魔するような位置にストーンを置く戦略が必要となってくる。また、先攻のセオリーとして、無理をせず「後攻チームに１点を取らせる」というものがある。カーリングでは、得点をあげると次のエンドで有利な後攻が回ってくるので、最少失点の１点を相手に取らせる代わりに次のエンドで後攻を取るという１０エンドを通した戦略の先読みも必要となる。
このように、カーリングは一投毎に深い戦略が必要とされるゲームのため、「氷上のチェス」と呼ばれている。
【０００５】
非特許文献１は、本発明に一部関係があると思われる、ゲーム木に基づくカーリングの戦略解析に関する先行技術文献である。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】浦正広，山田雅之，遠藤守，宮崎慎也，安田孝美，横井茂樹：ゲーム木に基づくカーリングの戦略解析，電子情報通信学会技術研究報告，vol.107, no.130, MVE2007-28, pp.31-36 (2007.07.02)
【発明の概要】
【発明が解決しようとする課題】
【０００７】
チェス、将棋、囲碁等のボードゲームは、通信プロトコルが共通化されているので、コンピュータシステムや言語圏を超えて、対戦が可能である。しかし、カーリングにはそのような通信プロトコルが未だ実現されていない。それは、カーリングにおける、リンク上にて人間がストーンを投げるという行為が、リンクの状態やショットミス等の不確実性を有することに起因する。このようなゲームの進行を左右する不確実性は、チェス、将棋、囲碁等のボードゲームには存在しない。
【０００８】
一方、カーリングの戦略支援システムの先行研究として、非特許文献１に示す論文がある。この論文では、不確定なゲームとしてカーリングを取り上げ、経験者の協力のもとショットの難しさを数値で表し、最善な戦略をゲーム木探索により計算している。しかしながら、この論文ではショットが失敗した場合のリスクについては考慮されていない。また、カーリングをコンピュータ対戦ゲームとして実現するための技術内容は開示されていない。
【０００９】
本発明はかかる課題を解決し、不確実性を有するゲームについて、複数のクライアントに対して共通にゲームを遂行するための基盤となる環境を実現する、ゲームシステム、ゲームサーバ及びゲーム遂行方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明のゲームシステムは、ゲームエリア内の移動体に所定の力を与えて移動させるショットの、ゲームの進行上好適と判断するベストショット情報に対し、所定の乱数を与えて現実のショットを模擬したかく乱済ショット情報を生成する乱数付与演算部とを備える。更に、乱数付与演算部が生成したかく乱済ショット情報に基づいて、ゲームエリア内に存在する移動体の座標情報を物理シミュレーション演算にて求める物理シミュレータと、物理シミュレータが算出したゲームエリア内における移動体の座標情報に基づいてゲームのスコアを算出するゲーム処理部とを具備する。
【発明の効果】
【００１１】
本発明によれば、不確実性を有するゲームについて、複数のクライアントに対して共通にゲームを遂行するための基盤となる環境を実現する、ゲームシステム、ゲームサーバ及びゲーム遂行方法を提供することができる。
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態に係る、カーリングゲームシステムの概略図である。
【図２】ゲームクライアントのハードウェアの構成を示すブロック図である。
【図３】ゲームクライアントのソフトウェアの機能を示すブロック図である。
【図４】ゲームサーバのハードウェアの構成を示すブロック図である。
【図５】ゲームサーバのソフトウェアの機能を示すブロック図である。
【図６】ゲームクライアントの表示部に表示されるＧＵＩの一例を示す図である。
【図７】ゲームクライアントとゲームサーバとの間で送受信が行われる、通信のログの一例である。
【図８】ゲームクライアントとゲームサーバとの間で送受信が行われる、通信と処理の流れを示すタイムチャートである。
【図９】ゲームクライアントがゲームサーバに送信するベストショット情報と、ゲームサーバがベストショット情報に基づいて算出する「実際のショット」を説明する概略図である。
【図１０】ゲームクライアントの処理の流れを示すフローチャートである。
【図１１】ゲームサーバの全体的な動作の流れを示すフローチャートである。
【図１２】エンド処理の流れを示すフローチャートである。
【図１３】ショット処理の流れを示すフローチャートである。
【図１４】カーリング戦略支援システムの概略図である。
【図１５】ゲーム演算装置の機能ブロック図である。
【発明を実施するための形態】
【００１３】
［カーリングゲームシステムの全体構成］
図１Ａ及び図１Ｂは、本発明の実施形態に係る、カーリングゲームシステム１０１の概略図である。
図１Ａは、標準的と思われるカーリングゲームシステム１０１の実施態様を示す概略図である。
図１Ｂは、いわゆるコンピュータ対戦と呼ばれる、カーリングゲームシステム１０１の実施態様を示す概略図である。
カーリングゲームシステム１０１は、ＴＣＰ／ＩＰネットワークに接続される、ゲームサーバ１０２と一つ以上のゲームクライアント１０３よりなる。図１Ａの場合、ネットワークに接続されている第一ゲームクライアント１０３ａと第二ゲームクライアント１０３ｂが、ネットワーク１０４に接続されているゲームサーバ１０２を通じてカーリングの対戦を行う。図１Ｂの場合、第三ゲームクライアント１０３ｃは、ゲームサーバ１０２を対戦相手とみなしてカーリングの対戦を行う。ゲームサーバ１０２が後述する非対話型ゲームクライアントを内蔵している場合、単一のゲームクライアント１０３がカーリングのゲームを遂行できる。
また、図示はしていないが、同一のパソコンにゲームクライアント１０３のプログラムとゲームサーバ１０２のプログラムを稼働させることも可能である。あるいは、ゲームクライアント１０３の一部機能（例えば後述のショット演算部）を、複数のコンピュータを接続して並列的に処理を行う構成としてもよい。
なお、第一ゲームクライアント１０３ａ、第二ゲームクライアント１０３ｂ及び第三ゲームクライアント１０３ｃについて、特にこれらゲームクライアントを区別しない場合には、ゲームクライアント１０３と総称する。
【００１４】
［ゲームクライアント１０３のハードウェア構成］
図２は、ゲームクライアント１０３のハードウェアの構成を示すブロック図である。
周知のコンピュータよりなるゲームクライアント１０３は、ＣＰＵ２０１、ＲＯＭ２０２、ＲＡＭ２０３、不揮発性ストレージ２０４、表示部２０５、操作部２０６、ＮＩＣ（Network Information Card）２０７、日時情報を出力するリアルタイムクロック（以下「ＲＴＣ」と略、図２中も「ＲＴＣ」と略）２０８が、バス２０９に接続されている。不揮発性ストレージ２０４には、周知のネットワークＯＳと、コンピュータをゲームクライアント１０３として機能させるためのプログラムが格納されている。
【００１５】
［ゲームクライアント１０３のソフトウェア機能］
図３は、ゲームクライアント１０３のソフトウェアの機能を示すブロック図である。
クライアント入出力制御部３０１は、ネットワーク１０４を通じてゲームサーバ１０２に接続して、ゲームサーバ１０２と通信を行い、ゲームサーバ１０２に認証情報３０２を送信して認証を行った後、後述する種々のコマンドを送受信する。
クライアント入出力制御部３０１には、ショット演算部３０３、ゲーム処理部３０４、物理シミュレータ３０５、表示制御部３０６及び操作部２０６が接続されている。
【００１６】
ゲーム処理部３０４は、現在のゲームの状況に基づいて点数計算等を行う。
物理シミュレータ３０５は、ゲームサーバ１０２からストーンの座標情報を受けて、仮想リンク上にストーンを配置すると共に、ゲームサーバ１０２からショットのベクトル情報等を受けて、仮想リンク上にストーンの動作を描画する。ここで、シミュレーションされるストーンは、ショットによって投じられたストーンと、仮想リンク上に既に存在し、投じられたストーンとの衝突によって飛ばされるストーンの両方である。物理シミュレータ３０５が形成する仮想リンクは、実際の氷上のリンクを模擬し、ストーンの重量、形状、弾性係数、リンクの摩擦係数が固定値として与えられている。物理シミュレータ３０５には、公知の物理エンジン（例えばＢｏｘ２Ｄ(http://box2d.org/)等）を用いることができる。
【００１７】
ショット演算部３０３は、ゲーム処理部３０４と物理シミュレータ３０５から得られる現在のリンクの状況に基いて、最も点数が高く、且つ失敗した際の失点がなるべく少ないと思われるショット、すなわちベストショット情報を計算する。なお、ショット演算部３０３は単にその場限りの配点を追求するのではなく、数手先の、エンドが終了する時点における点数や、ゲームが終了する時点の点数を考慮して、演算処理を行うことが好ましい。例えば、演算の一例として、モンテカルロ法を用いた統計的に期待値の高いショットを求める方法を挙げる。（但し、演算の方法はこれに限ったものではなく、色々な演算アルゴリズムが考えられる。クライアントとして、様々な演算アルゴリズムによるショット決定システム を接続させることができる。）具体的には以下のようにして求める。まず、ある局面に対し考えられる候補ショットを全て挙げる。次に、各候補ショットに誤差を加えてシミュレーションを行う。それによって得られた新しい局面に対しても同様に候補ショットを挙げる。その中からランダムに1つを選びシミュレーションを行う．これを繰り返しエンド終了時まで行う。この一連のシミュレーションを何度も行うことにより、それぞれの候補ショットを選んだ場合に目標得点を越える確率を計算する。その中で確率が一番高かったものをベストショットとする。
【００１８】
操作部２０６は手入力でベストショット情報を入力する他、ショット演算部３０３が算出したベストショット情報をゲームサーバ１０２に送信する等の用途に使用される。
表示部２０５は物理シミュレータ３０５の仮想リンクを含むＧＵＩを提供する。
【００１９】
［ゲームサーバ１０２のハードウェア構成］
図４は、ゲームサーバ１０２のハードウェアの構成を示すブロック図である。
周知のコンピュータよりなるゲームサーバ１０２は、ＣＰＵ４０１、ＲＯＭ４０２、ＲＡＭ４０３、不揮発性ストレージ４０４、ＮＩＣ４０７、ＲＴＣ４０８が、バス４０９に接続されている。
不揮発性ストレージ４０４には、周知のネットワークＯＳと、コンピュータをゲームサーバ１０２として機能させるためのプログラムが格納されている。
なお、一般的なパソコンもゲームサーバ１０２として利用可能である。その場合、表示部４０５と操作部４０６がバス４０９に接続されている。但し、表示部４０５と操作部４０６は必ずしもゲームサーバ１０２に必要なものではない。
【００２０】
［ゲームサーバ１０２のソフトウェア機能］
図５は、ゲームサーバ１０２のソフトウェアの機能を示すブロック図である。
サーバ入出力制御部５０１は、ネットワーク１０４を通じてゲームクライアント１０３に接続されて、ゲームクライアント１０３と通信を行う。そして、ゲームクライアント１０３から送信された認証情報３０２を受信して、認証処理部５０２に引き渡す。認証処理部５０２はユーザマスタ５０３を参照して認証を行い、その結果をサーバ入出力制御部５０１に返す。サーバ入出力制御部５０１は正常に認証が行われたことを受けて、ゲームクライアント１０３と通信を確立し、後述する種々のコマンドを送受信する。
【００２１】
サーバ入出力制御部５０１には、乱数付与演算部５０４、ゲーム処理部３０４、物理シミュレータ３０５、ゲームステータス情報格納部５０５が接続されている。
ゲーム処理部３０４は、ゲームクライアント１０３と同様に、現在のゲームの状況に基づいて点数計算等を行う。
物理シミュレータ３０５は、ゲームクライアント１０３の物理シミュレータ３０５と全く同じ仮想リンクを内包して、ゲームクライアント１０３の物理シミュレータ３０５と全く同じ物理シミュレーションを実行する。
【００２２】
本実施形態のゲームシステムでは、全てのゲームクライアント１０３とゲームサーバ１０２が、共通の物理シミュレータ３０５を有する。これにより、これらゲームクライアント１０３とゲームサーバ１０２に対して同じパラメータを与えると、それらは全く同じ物理シミュレーションを実行して、全く同じ実行結果を生成する。
【００２３】
乱数付与演算部５０４は、ゲームクライアント１０３から受信したベストショット情報に対し、乱数を与えることによって、擬似的にショットを乱して、かく乱済ショット情報を生成する。こうすることで、人間のショットミス、リンクの摩擦係数のばらつき、スウィーピングによる影響等を模擬する。
【００２４】
不揮発性ストレージ４０４内に形成されるゲームステータス情報格納部５０５には、ゲームクライアント１０３とゲームの状態を示すゲームステータス情報が格納される。ゲームステータス情報は、ゲーム処理部３０４の演算結果により、サーバ入出力制御部５０１を通じて内容が更新される。
【００２５】
ゲームサーバ１０２はいわゆるコンピュータ対戦を実現するために、非対話型ゲームクライアント５０６を内包してもよい。クライアント入出力制御部３０１はゲームクライアント１０３のクライアント入出力制御部３０１と同等の機能を実現する。同様に、ショット演算部３０３はゲームクライアント１０３のショット演算部３０３と同等の機能を実現する。非対話型ゲームクライアント５０６は、ゲーム処理部３０４と物理シミュレータ３０５をゲームサーバ１０２と共用する。
【００２６】
［ゲームクライアント１０３の表示画面］
ゲームクライアント１０３とゲームサーバ１０２の動作を説明する前に、先ず、ゲームクライアント１０３の表示部２０５に表示される画面の一例を示す。
図６は、ゲームクライアント１０３の表示部２０５に表示されるＧＵＩの一例を示す図である。
ウィンドウ６０１には、カーリングのリンクの全体俯瞰図面６０２と、ハウスの拡大図面６０３が表示されている。拡大図面６０３内のハウス６０４には、現在存在する自分側のストーンと対戦相手側のストーンが配置されている。
ウィンドウ６０１下の送信ボタン６０５を押すと、入力窓６０６に現れるショットのデータがゲームサーバ１０２に送信される。ゲームサーバ１０２は乱数付与演算部５０４にて擬似的にショットを乱して、かく乱済ショット情報を生成し、ゲームクライアント１０３に返信する。この、かく乱済ショット情報が、ゲームクライアント１０３内部の物理シミュレータ３０５に与えられる。
物理シミュレータ３０５はかく乱済ショット情報に基づく物理シミュレーション演算を行い、ショットの動作によるストーンの動きがハウス６０４の拡大図面６０３上に表示される。
ストーンが止まると、ゲーム処理部３０４によってゲーム状態の演算処理が行われ、ウィンドウ６０１下のスコア領域に点数が表示される。
【００２７】
［ゲームクライアント１０３とゲームサーバ１０２の、コマンドの送受信］
図７は、ゲームクライアント１０３とゲームサーバ１０２との間で送受信が行われる、通信のログの一例である。図７中、"Server:"はゲームサーバ１０２がゲームクライアント１０３に送信する文字列を指し、"Client:"はゲームクライアント１０３がゲームサーバ１０２に送信する文字列を指す。
ゲームクライアント１０３とゲームサーバ１０２との通信は、基本的には、ＡＳＣＩＩ文字とも呼ばれる、全て１バイト英数文字と一部の特殊文字を用いて、テキストストリームのみで情報の送受信を行う。ゲームクライアント１０３の名称にＵＴＦ−８文字を用いてもよいが、コマンドは全てＡＳＣＩＩ文字のみである。
【００２８】
先ず、ゲームクライアント１０３がゲームサーバ１０２のゲーム用のポート番号に接続すると、ゲームサーバ１０２はゲームクライアント１０３に対し、ネットワーク１０４接続が確立したことを示す"CONNECTED"コマンドを送信する（Ｓ７０１）。ゲームクライアント１０３はこれを受けて、認証情報３０２からユーザＩＤとパスワード、ユーザ名を読み出し、"LOGIN"コマンドをゲームサーバ１０２へ送信する（Ｓ７０２）。ゲームサーバ１０２はこれを受けて、認証処理部５０２が認証を行い、正規のユーザであることを確認したら"LOGIN OK"コマンドをゲームクライアント１０３へ返信する（Ｓ７０３）。
【００２９】
次に、ゲームサーバ１０２はゲームクライアント１０３に対し、対戦開始前の準備ができたかを確認する、"ISREADY"コマンドを送信する（Ｓ７０４）。ゲームクライアント１０３はこれを受けて、ゲームクライアント１０３自身の状態を確認し、ゲームを実行してもよいと判断したら、"READYOK"コマンドをゲームサーバ１０２に送信する（Ｓ７０５）。ゲームサーバ１０２はこれを受けて、ゲームクライアント１０３と対戦する他のゲームクライアント１０３が存在するか、またその場合、他のゲームクライアント１０３に"ISREADY"コマンドを送った結果、"READYOK"コマンドの返信を受けたかを確認する。他のゲームクライアント１０３も対戦開始可能な状態であるならば、ゲームを開始する合図である"NEWGAME"コマンドをゲームクライアント１０３に返信する（Ｓ７０６）。
【００３０】
次に、ゲームサーバ１０２は先攻後攻双方のゲームクライアント１０３に対し、１投目から１６投分のストーンの位置座標を示す"POSITION"コマンドを送信する（Ｓ７０７）。"POSITION"コマンドの引数は、左から順に「ｘ１  ｙ１  ｘ２  ｙ２  …  ｘ１６  ｙ１６」となる。すなわち、１投目のＸ座標とＹ座標、２投目のＸ座標とＹ座標、…１６投目のＸ座標とＹ座標の値が並べられる。
次に、ゲームサーバ１０２は先攻後攻双方のゲームクライアント１０３に対し、ゲームの情報を示す"SETSTATE"コマンドを送信する（Ｓ７０８）。"SETSTATE"コマンドの引数は、左から順に
・現在何投目までショットが終わったか、
・現在何エンド目か、
・最終エンドは何エンドか、
・手番はどっちか（０：初回先手だった方の手番、１：初回後手だった方の手番）
となる。
【００３１】
次に、ゲームサーバ１０２は先攻側のゲームクライアント１０３に対し、思考の開始を命ずる"GO"コマンドを送信する（Ｓ７０９）。すると、先攻側のゲームクライアント１０３はショット演算部３０３でベストショット情報を演算する。そして、ベストショット情報を示す"BESTSHOT"コマンドをゲームサーバ１０２に返信する（Ｓ７１０）。"BESTSHOT"コマンドの引数は、左から順に
・Ｘ座標
・Ｙ座標
・ショットの強さ
・ストーンの回転方向（０：右方向（上から見て時計回り）、１：左方向（反時計回り））
である。ストーンはその性質上、必ず回転し、その回転速度は殆ど変わらない。このため、本実施形態のゲームシステムでは、回転方向を右方向と左方向の二通りのみとし、回転速度は一定として扱っている。
ゲームサーバ１０２は、先攻側のゲームクライアント１０３から"BESTSHOT"コマンドを受け取ると、乱数付与演算部５０４でベストショット情報を乱す演算処理を施す。そして得られた演算結果である「実際のショット」を示す"RUNSHOT"コマンドを、先攻後攻双方のゲームクライアント１０３に送信する（Ｓ７１１）。"RUNSHOT"コマンドの引数は、左から順に
・ショットのＸベクトル
・ショットのＹベクトル
・ストーンの回転方向
である。このうちストーンの回転方向を除く二つの値は、人為的ミスやリンクの状態等の要因で乱される要素である。
ゲームサーバ１０２は"RUNSHOT"コマンドの引数である実際のショットのベクトル情報を物理シミュレータ３０５に与えて、物理演算を行わせる。そして得られた、リンク上の全てのストーンの位置座標を示す"POSITION"コマンドを送信する（Ｓ７１２）。
【００３２】
ステップＳ７１２で"POSITION"コマンドを送信したら、次は後攻の番である。
先ず、ゲームサーバ１０２は先攻後攻双方のゲームクライアント１０３に対し、ゲームの情報を示す"SETSTATE"コマンドを送信する（Ｓ７１３）。
次に、ゲームサーバ１０２は後攻側のゲームクライアント１０３に対し、思考の開始を命ずる"GO"コマンドを送信する。なお、図７ではこの"GO"コマンドは図示していない。すると、後攻側のゲームクライアント１０３はショット演算部３０３でベストショット情報を演算する。そして、ベストショット情報を示す"BESTSHOT"コマンドをゲームサーバ１０２に返信する（Ｓ７１４）。
ゲームサーバ１０２は、後攻側のゲームクライアント１０３から"BESTSHOT"コマンドを受け取ると、乱数付与演算部５０４でベストショット情報を乱す演算処理を施す。そして得られた演算結果である「実際のショット」を示す"RUNSHOT"コマンドを、先攻後攻双方のゲームクライアント１０３に送信する（Ｓ７１５）。
ゲームサーバ１０２は"RUNSHOT"コマンドの引数である実際のショットのベクトル情報を物理シミュレータ３０５に与えて、物理演算を行わせる。そして得られた、リンク上の全てのストーンの位置座標を示す"POSITION"コマンドを送信する（Ｓ７１６）。
【００３３】
ステップＳ７１６にて"POSITION"コマンドを送信したら、次は再び先攻の番である。ゲームサーバ１０２は"SETSTATE"コマンドを、先攻後攻双方のゲームクライアント１０３に送信した後（Ｓ７１７）、先攻側のゲームクライアント１０３に"GO"コマンドを送信する（Ｓ７１８）。以下同様に続く。
このように、"SETSTATE"コマンドから始まり、"POSITION"コマンドまでが１ショット分の流れである。
【００３４】
先攻後攻全１６投分のショットが終了したら、ゲームサーバ１０２はゲーム処理部３０４でスコアを計算し、先攻後攻双方のゲームクライアント１０３に対し、スコアを示す"SCORE"コマンドを送信する（Ｓ７１９）。そして、先攻後攻双方のゲームクライアント１０３に、ゲームが終了した旨の通知と、どちらが勝ち、どちらが負けたのかを示す"GAMEEND"コマンドを送信する（Ｓ７２０）。
【００３５】
図８は、ゲームクライアント１０３とゲームサーバ１０２との間で送受信が行われる、通信と処理の流れを示すタイムチャートである。
ログイン処理（Ｓ８０１）は、図７のステップＳ７０１、Ｓ７０２及びＳ７０３に相当する。ログイン処理の詳細は図７で説明済みなので詳細は割愛する。
【００３６】
次に、ゲームサーバ１０２はゲームクライアント１０３に対し、対戦開始前の準備ができたかを確認するための"ISREADY"コマンドを送信する（Ｓ８０２＝図７のＳ７０４）。ゲームクライアント１０３はこれを受けて、ゲームクライアント１０３自身の状態を確認し、ゲームを実行してもよいと判断したら、"READYOK"コマンドをゲームサーバ１０２に送信する（Ｓ８０３＝図７のＳ７０５）。ゲームサーバ１０２はこれを受けて、ゲームクライアント１０３と対戦する他のゲームクライアント１０３が存在するか、またその場合、他のゲームクライアント１０３に"ISREADY"コマンドを送った結果、"READYOK"コマンドの返信を受けたかを確認する（Ｓ８０４）。他のゲームクライアント１０３も対戦開始可能な状態であるならば、ゲームを開始する合図である"NEWGAME"コマンドをゲームクライアント１０３に返信する（Ｓ８０５＝図７のＳ７０６）。
【００３７】
次に、ゲームサーバ１０２は先攻後攻双方のゲームクライアント１０３に対し、１投目から１６投分のストーンの位置座標を示す"POSITION"コマンドを送信する（Ｓ８０６＝図７のＳ７０７）。
ゲームクライアント１０３は、ゲームサーバ１０２から"NEWGAME"コマンドと"POSITION"コマンドを受けて、ゲーム処理部３０４におけるゲーム初期化処理を行う（Ｓ８０７）。
【００３８】
次に、ゲームサーバ１０２は先攻後攻双方のゲームクライアント１０３に対し、ゲームの情報を示す"SETSTATE"コマンドを送信する（Ｓ８０８＝図７のＳ７０８）。
ゲームクライアント１０３は、ゲームサーバ１０２から"SETSTATE"コマンドを受けて、ゲーム処理部３０４におけるゲームステータスの設定を行う（Ｓ８０９）。
【００３９】
次に、ゲームサーバ１０２は先攻側のゲームクライアント１０３に対し、思考の開始を命ずる"GO"コマンドを送信する（Ｓ８１０＝図７のＳ７０９）。すると、先攻側のゲームクライアント１０３はショット演算部３０３でベストショット情報を演算する。そして、ベストショット情報を示す"BESTSHOT"コマンドをゲームサーバ１０２に返信する（Ｓ８１１＝図７のＳ７１０）。
【００４０】
ゲームサーバ１０２は、先攻側のゲームクライアント１０３から"BESTSHOT"コマンドを受け取ると、乱数付与演算部５０４でベストショット情報を乱す演算処理を施す。そして得られた演算結果である「実際のショット」を示す"RUNSHOT"コマンドを、先攻後攻双方のゲームクライアント１０３に送信する（Ｓ８１２＝図７のＳ７１１）。
ゲームクライアント１０３は、ゲームサーバ１０２から"RUNSHOT"コマンドを受けて、"RUNSHOT"コマンドの引数である実際のショットのベクトル情報を物理シミュレータ３０５に与えて、物理演算を行わせる。そして、表示部２０５にショットの動作を表示する（Ｓ８１３）。
【００４１】
一方、ゲームサーバ１０２は"RUNSHOT"コマンドの引数である実際のショットのベクトル情報を物理シミュレータ３０５に与えて、物理演算を行わせる。そして得られた、リンク上の全てのストーンの位置座標を示す"POSITION"コマンドを、先攻後攻双方のゲームクライアント１０３に対し、送信する（Ｓ８１４＝図７のＳ７１２）。
ゲームクライアント１０３は、ゲームサーバ１０２から"POSITION"コマンドを受けて、"POSITION"コマンドの引数であるストーンの座標情報に基づき、表示部２０５にリンクとストーンを表示する（Ｓ８１５）。
【００４２】
ステップＳ８１４にて"POSITION"コマンドを送信したら、次は後攻の番である。
先ず、ゲームサーバ１０２は先攻後攻双方のゲームクライアント１０３に対し、ゲームの情報を示す"SETSTATE"コマンドを送信する（Ｓ８１６＝図７のＳ７１３）。
ゲームクライアント１０３は、ゲームサーバ１０２から"SETSTATE"コマンドを受けて、ゲーム処理部３０４におけるゲームステータスの設定を行う（Ｓ８１７）。
次に、ゲームサーバ１０２は後攻側のゲームクライアント１０３に対し、思考の開始を命ずる"GO"コマンドを送信する。なお、図８ではこの"GO"コマンドは図示していない。すると、後攻側のゲームクライアント１０３はショット演算部３０３でベストショット情報を演算する。そして、ベストショット情報を示す"BESTSHOT"コマンドをゲームサーバ１０２に返信する。
ゲームサーバ１０２は、後攻側のゲームクライアント１０３から"BESTSHOT"コマンドを受け取ると、乱数付与演算部５０４でベストショット情報を乱す演算処理を施す。そして得られた演算結果である「実際のショット」を示す"RUNSHOT"コマンドを、先攻後攻双方のゲームクライアント１０３に送信する（Ｓ８１８＝図７のＳ７１５）。
ゲームクライアント１０３は、ゲームサーバ１０２から"RUNSHOT"コマンドを受けて、"RUNSHOT"コマンドの引数である実際のショットのベクトル情報を物理シミュレータ３０５に与えて、物理演算を行わせる。そして、表示部２０５にショットの動作を表示する（Ｓ８１９）。
ゲームサーバ１０２は"RUNSHOT"コマンドの引数である実際のショットのベクトル情報を物理シミュレータ３０５に与えて、物理演算を行わせる。そして得られた、リンク上の全てのストーンの位置座標を示す"POSITION"コマンドを送信する（Ｓ８２０＝図７のＳ７１６）。
ゲームクライアント１０３は、ゲームサーバ１０２から"POSITION"コマンドを受けて、"POSITION"コマンドの引数であるストーンの座標情報に基づき、表示部２０５にリンクとストーンを表示する（Ｓ８２１）。
以下、ステップＳ８０８からステップＳ８２１迄を８回繰り返す。その後、ゲームサーバ１０２とゲームクライアント１０３は採点処理を行い（Ｓ８２２）、エンド一回分を終える。
【００４３】
図９Ａ及び図９Ｂは、ゲームクライアント１０３がゲームサーバ１０２に送信するベストショット情報と、ゲームサーバ１０２がベストショット情報に基づいて算出する「実際のショット」を説明する概略図である。
図９Ａにおいて、今、ゲームクライアント１０３がショットＶ９０１を演算したとする。ショットＶ９０１は、理想的にはストーンを位置Ｐ９０２に配置する。
図９Ｂにおいて、ゲームサーバ１０２は、ゲームクライアント１０３から受信したショットＶ９０１に対し、乱数を用いてかく乱する。但し、無秩序にかく乱してはゲームが成立しなくなるので、理想的な位置になるであろう位置Ｐ９０２に対し、予め理想的な位置Ｐ９０２を中心とする円形のかく乱範囲Ａ９０３を算出する。そして、その中にストーンが配置されるように、位置に乱数を与えてかく乱する。これにより、ストーンの位置は位置Ｐ９０４やＰ９０５のように、かく乱範囲Ａ９０３の範囲内の任意の位置へかく乱される。
【００４４】
同様に、図９Ａにおいて、今、ゲームクライアント１０３がショットＶ９０６を演算したとする。ショットＶ９０６は、理想的にはストーンを位置Ｐ９０７に配置する。
図９Ｂにおいて、ゲームサーバ１０２は、ゲームクライアント１０３から受信したショットＶ９０６に対し、乱数を用いてかく乱する。但し、無秩序にかく乱してはゲームが成立しなくなるので、理想的な位置になるであろう位置Ｐ９０７に対し、予め理想的な位置Ｐ９０７を中心とするかく乱範囲Ａ９０８を算出する。そして、その中にストーンが配置されるように、位置に乱数を与えてかく乱する。これにより、ストーンの位置は位置Ｐ９０９やＰ９１０のように、かく乱範囲Ａ９０８の範囲内の任意の位置へかく乱される。
【００４５】
ショットＶ９０１とＶ９０６を比べると、ショットＶ９０６の方がショットを実行する競技者から遠い位置にストーンを配置する。そこで、乱数付与演算部５０４はストーンの速度に応じて、かく乱範囲の半径を調節する。ストーンの速度が遅い場合はかく乱範囲を狭くする。逆にストーンの速度が速い場合はかく乱範囲を広くする。
図９Ｂでは、かく乱範囲Ａ９０３と比べると、かく乱範囲Ａ９０８の方が広い。このため、ショットＶ９０６はショットＶ９０１と比べると、プレーエリアを外れる可能性が高い。
【００４６】
図７及び図８の説明から判るように、本実施形態のカーリングゲームシステム１０１は、ゲームクライアント１０３が「理想」であるベストショット情報を"BESTSHOT"コマンドでゲームサーバ１０２に送信すると、ゲームサーバ１０２は乱数でベストショット情報を乱して、「現実」のショットを"RUNSHOT"コマンドでゲームクライアント１０３に返信する。このように、ゲームサーバ１０２がベストショット情報を乱数で乱すことで、実際のカーリングを模擬する。ゲームに中立な立場のゲームサーバ１０２がベストショット情報を乱すので、プログラム内に恣意的な処理を施さない限り、本質的な不公平や不正行為が生じ得ない。
【００４７】
［ゲームクライアント１０３の動作］
図１０は、ゲームクライアント１０３の処理の流れを示すフローチャートである。
処理を開始すると（Ｓ１００１）、先ずクライアント入出力制御部３０１は認証処理を行う。そして、ゲームサーバ１０２との通信が確立し、ログインが成功するまで待つ（Ｓ１００２のＮＯ）。認証処理が正常に終了したら（Ｓ１００２のＹＥＳ）、クライアント入出力制御部３０１はゲームサーバ１０２から来るコマンドを待つ（Ｓ１００３）。
【００４８】
ゲームサーバ１０２から受信したコマンドが"ISREADY"及び"NEWGAME"の、エンドの開始を告げるコマンドであるならば（Ｓ１００４のＹＥＳ）、クライアント入出力制御部３０１はゲーム処理部３０４に対し、ゲームステータスの初期化処理を行う（Ｓ１００５＝図８のステップＳ８０７）。そして再びゲームサーバ１０２から送信されるコマンドを待つ（Ｓ１００３）。
【００４９】
ステップＳ１００４で、ゲームサーバ１０２から受信したコマンドがエンドの開始を告げるコマンドでないならば（Ｓ１００４のＮＯ）、クライアント入出力制御部３０１は次にゲームサーバ１０２から受信したコマンドが"GO"コマンドであるか否か確認する（Ｓ１００６）。
ゲームサーバ１０２から受信したコマンドが"GO"コマンドであるならば（Ｓ１００６のＹＥＳ）、クライアント入出力制御部３０１はショット演算部３０３でベストショット情報を演算する。そして、ベストショット情報を示す"BESTSHOT"コマンドをゲームサーバ１０２に返信する（Ｓ１００７＝図８のステップＳ８１１）。そして再びゲームサーバ１０２から送信されるコマンドを待つ（Ｓ１００３）。
【００５０】
ステップＳ１００６で、ゲームサーバ１０２から受信したコマンドが"GO"コマンドでないならば（Ｓ１００６のＮＯ）、クライアント入出力制御部３０１は次にゲームサーバ１０２から受信したコマンドが"SETSTATE"コマンドであるか否かを確認する（Ｓ１００８）。
ゲームサーバ１０２から受信したコマンドが"SETSTATE"コマンドであるならば（Ｓ１００８のＹＥＳ）、クライアント入出力制御部３０１はゲーム処理部３０４に対し、ゲームステータスの設定処理を行う（Ｓ１００９＝図８のステップＳ８０９、Ｓ８１７）。そして再びゲームサーバ１０２から送信されるコマンドを待つ（Ｓ１００３）。
【００５１】
ステップＳ１００８で、ゲームサーバ１０２から受信したコマンドが"SETSTATE"コマンドでないならば（Ｓ１００８のＮＯ）、クライアント入出力制御部３０１は次にゲームサーバ１０２から受信したコマンドが"RUNSHOT"及び"POSITION"の、表示系のコマンドであるか否か確認する（Ｓ１０１０）。
ゲームサーバ１０２から受信したコマンドが表示系のコマンドであるならば（Ｓ１０１０のＹＥＳ）、クライアント入出力制御部３０１は物理シミュレータ３０５に対し物理演算を行わせ、表示部２０５に表示処理を行わせる（Ｓ１０１１＝図８のステップＳ８１３、Ｓ８１５、Ｓ８１９及びＳ８２１）。そして再びゲームサーバ１０２から送信されるコマンドを待つ（Ｓ１００３）。
【００５２】
ステップＳ１０１０で、ゲームサーバ１０２から受信したコマンドが表示系のコマンドでないならば（Ｓ１０１０のＮＯ）、クライアント入出力制御部３０１はゲームサーバ１０２から送信されたゲームの結果を表示部２０５に表示して（Ｓ１０１２）、一連の処理を終了する（Ｓ１０１３）。
【００５３】
［ゲームサーバ１０２の動作］
これより、図１１、図１２及び図１３を参照して、ゲームサーバ１０２の動作を説明する。
図１１は、ゲームサーバ１０２の全体的な動作の流れを示すフローチャートである。
ゲームクライアント１０３がゲームサーバ１０２とのネットワーク１０４接続を確立したら、処理を開始する（Ｓ１１０１）。
先ず、ゲームサーバ１０２の入出力処理部は、ゲームクライアント１０３が正常にログインしたか確認する（Ｓ１１０２）。認証処理部５０２による認証処理が正常に終了するまでは（Ｓ１１０２のＮＯ）、ゲームサーバ１０２は認証処理を待つ（Ｓ１１０２）。
認証処理が正常に終了したら（Ｓ１１０２のＹＥＳ）、サーバ入出力制御部５０１はゲームステータス情報にゲームクライアント１０３のＩＤ情報を登録する（Ｓ１１０３）。
【００５４】
次にゲームサーバ１０２は、ゲームクライアント１０３の対戦相手がいるか否かを確認する（Ｓ１１０４）。対戦相手がいない場合には（Ｓ１１０４のＮＯ）、対戦相手が現れるまで待つ。
対戦相手がいたら（Ｓ１１０４のＹＥＳ＝図８のＳ８０４）、ゲームサーバ１０２はゲームクライアント１０３に対し、ゲームを開始する合図である"NEWGAME"コマンドを先攻後攻双方のゲームクライアント１０３に返信する（Ｓ１１０５＝図８のＳ８０５）。
【００５５】
次に、ゲームサーバ１０２はカウンタ変数ｉを１に初期化する（Ｓ１１０６）。そして、エンド処理を実行する（Ｓ１１０７）。エンド処理を実行した後、ゲームサーバ１０２はカウンタ変数ｉが１０以上であるか否かを確認する（Ｓ１１０８）。１０未満であれば（Ｓ１１０８のＮＯ）、カウンタ変数ｉを１インクリメントして（Ｓ１１０９）、再びエンド処理を実行する（Ｓ１１０７）。こうして、エンド処理は１０回実行される。
エンド処理が１０回実行されたら（Ｓ１１０８のＹＥＳ）、サーバ入出力制御部５０１はゲーム処理部３０４にゲームスコアの演算処理を行わせ、その演算結果を先攻後攻双方のゲームクライアント１０３に送信して（Ｓ１１１０）、一連の処理を終了する（Ｓ１１１１）。
【００５６】
図１２は、図１１のステップＳ１１０７のエンド処理の流れを示すフローチャートである。
処理を開始すると（Ｓ１２０１）、ゲームサーバ１０２は先攻後攻双方のゲームクライアント１０３に対し、エンドの初期状態を示す、全ての座標が「０」の"POSITION"コマンドを送信する（Ｓ１２０２）。
次に、ゲームサーバ１０２は現在ゲームサーバ１０２に接続されている第一ゲームクライアント１０３ａと第二ゲームクライアント１０３ｂのどちらが先攻でどちらが後攻かを確認する（Ｓ１２０３）。そして、先攻が第一ゲームクライアント１０３ａの場合であれば（Ｓ１２０３の「第一ゲームクライアント１０３ａ」）、後攻は第二ゲームクライアント１０３ｂに設定する（Ｓ１２０４）。先攻が第二ゲームクライアント１０３ｂの場合であれば（Ｓ１２０３の「第二ゲームクライアント１０３ｂ」）、後攻は第一ゲームクライアント１０３ａに設定する（Ｓ１２０５）。
【００５７】
次に、ゲームサーバ１０２は先攻をショット実行側、後攻を待機側に設定してショット処理を行う（Ｓ１２０６）。
次に、ゲームサーバ１０２は先攻を待機側、後攻をショット実行側に設定してショット処理を行う（Ｓ１２０７）。
そして、ゲームサーバ１０２はエンドが終了したか否かを確認する（Ｓ１２０８）。
エンドが終了していなければ（Ｓ１２０８のＮＯ）、ゲームサーバ１０２は再びステップＳ１２０６から処理を繰り返す。
エンドが終了していれば（Ｓ１２０８のＹＥＳ）、ゲームサーバ１０２は一連の処理を終了する（Ｓ１２０９）。
【００５８】
図１３は、図１２のステップＳ１２０６及びＳ１２０７の、ショット処理の流れを示すフローチャートである。
処理を開始すると（Ｓ１３０１）、ゲームサーバ１０２はショット実行側、待機側の双方のゲームクライアント１０３に対し、現在のゲームのステータス情報を示す"SETSTATE"コマンドを送信する（Ｓ１３０２＝図８のＳ８１６＝図７のＳ７１３）。
次に、ゲームサーバ１０２のサーバ入出力制御部５０１はショット実行側のクライアントに対し、思考の開始を命ずる"GO"コマンドを送信する（Ｓ１３０３＝図８のＳ８１０＝図７のＳ７０９）。そして、ショット実行側のクライアントからベストショット情報を示す"BESTSHOT"コマンドが返信されるのを待つ（Ｓ１３０４及びＳ１３０５のＮＯ）。
【００５９】
ショット実行側のクライアントからベストショット情報を示す"BESTSHOT"コマンドが返信されたら、（Ｓ１３０５のＹＥＳ）、ゲームサーバ１０２のサーバ入出力制御部５０１は、乱数付与演算部５０４を稼働させて、ショット実行側のクライアントから受信したベストショット情報を乱数で乱す演算処理を施す（Ｓ１３０６）。そして得られた演算結果である「実際のショット」を示す"RUNSHOT"コマンドを、ショット実行側、待機側の双方のゲームクライアント１０３に送信する（Ｓ１３０７＝図８のＳ８１８＝図７のＳ７１５）。
次に、ゲームサーバ１０２のサーバ入出力制御部５０１は、"RUNSHOT"コマンドの引数である実際のショットのベクトル情報を物理シミュレータ３０５に与えて、物理演算を行わせる（Ｓ１３０８）。そして得られた、リンク上の全てのストーンの位置座標を示す"POSITION"コマンドを、ショット実行側、待機側の双方のゲームクライアント１０３に送信する（Ｓ１３０９＝図８のＳ８２０＝図７のＳ７１６）。そして、サーバ入出力制御部５０１はゲーム処理部３０４を稼働させて、この時点におけるゲームスコアを演算させてゲームステータス情報を更新して（Ｓ１３１０）、一連の処理を終了する（Ｓ１３１１）。
【００６０】
上述の実施形態の他、以下のような応用例が考えられる。
（１）本実施形態のカーリングゲームシステム１０１は、僅かな修正で、現実世界におけるカーリングの戦略支援システムに応用することが可能である。
図１４は、カーリング戦略支援システム１４０１の概略図である。カーリング戦略支援システム１４０１は、一般的なパソコンであるゲーム演算装置１４０２にリンク１４０３を撮影するデジタルカメラ１４０４が接続されている。ゲーム演算装置１４０２のハードウェア構成は図２のゲームクライアント１０３と変わらないので説明を省略する。
【００６１】
図１５は、ゲーム演算装置１４０２の機能ブロック図である。
デジタルカメラ１４０４はリンク１４０３を撮影して、画像情報を出力する。すると、画像解析部１５０１は画像情報を解析して、リンク１４０３上のストーンの座標情報を出力する。この座標情報が、ゲームサーバ１０２における"POSITION"コマンドに相当する。ベストショット情報の演算にはゲームのステータス情報とストーンの座標情報があればよいので、"RUNSHOT"コマンドが実装されなくても、カーリングの戦略支援としての機能は果たされる。
また、画像解析部１５０１がショットの動画を解析できる場合、画像解析部１５０１は"RUNSHOT"コマンドを実装できる。
【００６２】
（２）物理シミュレータ３０５が全てのクライアントにおいて完全に共通のものであることが保証できるなら、ゲームサーバ１０２に物理シミュレータ３０５を持たせず、ゲームクライアント１０３の物理シミュレータ３０５を流用してもよい。この場合、ゲームサーバ１０２は"POSITION"コマンドをゲームクライアント１０３に送信する必要はなくなり、各ゲームクライアント１０３が、"RUNSHOT"コマンドを受信し、受信した"RUNSHOT"コマンドの引数である実際のショットのベクトル情報等をゲームクライアント１０３の物理シミュレータ３０５に与えて物理演算を行うことにより、ショット後の各ストーンの位置（上記実施形態においてゲームサーバ１０２から送信される"POSITION"コマンドによる情報に相当）を求める。
【００６３】
（３）本実施形態のゲームサーバ１０２及びゲームクライアント１０３は、カーリングに使用する他、ビリヤードゲーム等にも応用が可能である。
【００６４】
（４）ゲームサーバ１０２は、カーリングのゲーム進行上、残り時間をゲームクライアント１０３に通知するために、"SETSTATE"コマンドの後に、残り時間を通知する"REMAIN"コマンドを発行するとよい。
【００６５】
（５）採点処理は比較的公平性を担保し易いので、必ずしもゲームサーバ１０２が実装していなくても、ゲームクライアント１０３が処理するようにしてもよい。
【００６６】
（６）本実施形態のカーリングゲームシステム１０１は、ゲームサーバ１０２の乱数付与演算部５０４が生成する実際のショットが織りなす「運」の要素があるものの、主にゲームクライアント１０３に実装されるショット演算部３０３が算出するベストショットの出来不出来が、ゲームの勝敗を左右する。開発者は、このショット演算部３０３をモジュール化して、より優れた戦略思考に基づくベストショットを算出する思考エンジンを実装するショット演算部３０３を開発する。そして、ゲームクライアント１０３同士がネット対戦することで、どちらのショット演算部３０３が優れているのかを競わせることができる。この場合、ショット演算部３０３とクライアント入出力制御部３０１との間で行われるベストショット情報のやり取りのためのＡＰＩ(Application Programming Interface)を予め決めておけばよい。
【００６７】
（７）また、（６）の場合において、ショット演算部３０３をベストショット情報を手動入力するユーザインタフェース部に置き換えることも可能である。このユーザインタフェース部は、例えば、ユーザによるマウス操作やタッチパネル操作に応じてベストショット情報を算出するＧＵＩとして実装することが考えられる。また、ユーザインタフェース部とクライアント入出力制御部３０１との間のＡＰＩは（６）と共通にすることができる。
【００６８】
（８）上記説明では、複数のゲームクライアント１０３による対戦を前提としているが、対戦相手を決定する際に、ゲームサーバ１０２の非対話型ゲームクライアント５０６との対戦を選択できるようにしてもよい。これにより、非対話型ゲームクライアント５０６との対戦が選択された場合には、１つのゲームクライアント１０３とゲームサーバ１０２との対戦が行われるようにすることができる。
【００６９】
本実施形態では、カーリングゲームシステム１０１を開示した。ゲームサーバ１０２はゲームクライアント１０３から送信されるベストショット情報（"BESTSHOT"コマンド）にもとづいて、乱数付与演算部５０４でかく乱したデータを生成する（"RUNSHOT"コマンド）ことで、現実世界のカーリングに似た、競技者のショットミスやリンクの不均一性等の不確実性を模擬する。
本実施形態のカーリングゲームシステム１０１は、"BESTSHOT"コマンドと"RUNSHOT"コマンドを規定し、物理シミュレータ３０５でリンクを計算機上で再現する環境を提供する。カーリングゲームシステム１０１と共通の物理シミュレータ３０５を用いて、コマンド体系に沿うゲームクライアント１０３を開発することで、開発者はカーリングのゲームアルゴリズムの開発にのみ集中することができる。
【００７０】
以上、本発明の実施形態例について説明したが、本発明は上記実施形態例に限定されるものではなく、特許請求の範囲に記載した本発明の要旨を逸脱しない限りにおいて、他の変形例、応用例を含む。
例えば、上記した実施形態例は本発明をわかりやすく説明するために装置及びシステムの構成を詳細かつ具体的に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることは可能であり、更にはある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることも可能である。
また、上記の各構成、機能、処理部等は、それらの一部又は全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）等の揮発性或は不揮発性のストレージ、または、ＩＣカード、光ディスク等の記録媒体に保持することができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆ど全ての構成が相互に接続されていると考えてもよい。
【符号の説明】
【００７１】
１０１…カーリングゲームシステム、１０２…ゲームサーバ、１０３…ゲームクライアント、１０３ａ…第一ゲームクライアント、１０３ｂ…第二ゲームクライアント、１０４…ネットワーク、２０１…ＣＰＵ、２０２…ＲＯＭ、２０３…ＲＡＭ、２０４…不揮発性ストレージ、２０５…表示部、２０６…操作部、２０７…ＮＩＣ、２０８…リアルタイムクロック、２０９…バス、３０１…クライアント入出力制御部、３０２…認証情報、３０３…ショット演算部、３０４…ゲーム処理部、３０５…物理シミュレータ、３０６…表示制御部、４０１…ＣＰＵ、４０２…ＲＯＭ、４０３…ＲＡＭ、４０４…不揮発性ストレージ、４０５…表示部、４０６…操作部、４０７…ＮＩＣ、４０８…ＲＴＣ、４０９…バス、５０１…サーバ入出力制御部、５０２…認証処理部、５０３…ユーザマスタ、５０４…乱数付与演算部、５０５…ゲームステータス情報格納部、５０６…非対話型ゲームクライアント、６０１…ウィンドウ、６０２…全体俯瞰図面、６０３…拡大図面、６０４…ハウス、６０５…送信ボタン、６０６…入力窓、１４０１…カーリング戦略支援システム、１４０２…ゲーム演算装置、１４０３…リンク、１４０４…デジタルカメラ、１５０１…画像解析部
【図１】
2015089484.tif 000003
【図２】
2015089484.tif 000004
【図３】
2015089484.tif 000005
【図４】
2015089484.tif 000006
【図５】
2015089484.tif 000007
【図６】
2015089484.tif 000008
【図７】
2015089484.tif 000009
【図８】
2015089484.tif 000010
【図９】
2015089484.tif 000011
【図１０】
2015089484.tif 000012
【図１１】
2015089484.tif 000013
【図１２】
2015089484.tif 000014
【図１３】
2015089484.tif 000015
【図１５】
2015089484.tif 000016
【図１４】
2015089484.tif 000017