添付図面を参照して、本発明によるオンラインゲーム開発システムを実施するための形態を以下に説明する。
まず、本発明によるオンラインゲーム開発システムで開発するオンラインゲームについて説明する。なお、ここでは主に非リアルタイム型のオンラインゲームの場合について述べるが、これはリアルタイム型のオンラインゲームに係る権利範囲を排除するものではない。
(実施形態)
図1Aは、オンラインゲームを運用するシステムの一構成例を示すブロック図である。
図1Aに示したオンラインゲームシステムの構成要素について説明する。オンラインゲームシステム1は、クライアント端末11、12と、ネットワーク20と、アプリケーションサーバ21と、ゲームサーバシステム30とを含んでいる。ゲームサーバシステム30は、ゲームサーバ31と、運用管理ユーザインタフェースサーバ32と、ゲームデータベース33とを含んでいる。
図1Aに示した各構成要素の接続関係について説明する。クライアント端末11、12と、アプリケーションサーバ21と、ゲームサーバ31とは、それぞれ、ネットワーク20に接続されている。
その他、ゲームサーバ31と、運用管理ユーザインタフェースサーバ32と、ゲームデータベース33とは、相互に接続されている。なお、この接続関係は、ネットワーク20を介していても良いし、図示しない別のネットワークを介していても良い。
図1Aに示した各構成要素の動作について説明する。クライアント端末11、12のそれぞれは、例えば、パーソナルコンピュータや、ゲーム専用機器や、スマートフォンなどの、オンラインゲームのクライアント側アプリケーションソフトウェアを実行可能で、かつ、通信機能を有する情報端末であり、ネットワーク20は、例えば、インターネットや、LAN(Local Area Network:ローカルエリアネットワーク)などの、複数の端末を通信可能に接続するネットワーク回路である。アプリケーションサーバ21は、オンラインゲームのクライアント側アプリケーションソフトウェアを、ネットワーク20を介してクライアント端末11、12などに供給するサーバである。ゲームサーバ31は、オンラインゲームのサーバ側アプリケーションソフトウェアを実行し、かつ、ネットワーク20を介してクライアント端末11、12で実行されるクライアント側アプリケーションソフトウェアのそれぞれとの通信を行う。運用管理ユーザインタフェースサーバ32は、ゲームサーバ31の運用管理や監視を行う。ゲームデータベース33は、オンラインゲームで利用される各種データのうち、不揮発な情報を主に格納し、必要に応じてゲームサーバ31に提供する。
図1Aに示したクライアント端末11、12、アプリケーションサーバ21、ゲームサーバ31、運用管理ユーザインタフェースサーバ32およびゲームデータベース33のそれぞれは、例えば、所定のプログラムを実行するコンピュータとして実現可能である。
図1Bは、図1Aに示した各コンピュータの一般的な構成例を示すブロック図である。
図1Bに示したコンピュータ100の構成要素について説明する。コンピュータ100は、バス101と、通信装置102と、演算装置103と、記憶装置104と、入力装置105と、出力装置106と、外部記憶装置107とを含む。ここで、図1Aに示した各コンピュータは、図1Bに示した構成要素のうち、一部だけを含んでいても良いし、他の構成要素をさらに含んでいても良い。
図1Bに示した各構成要素の接続関係について説明する。バス101は、通信装置102と、演算装置103と、記憶装置104と、入力装置105と、出力装置106と、外部記憶装置107とに接続されている。
その他、通信装置102は、ネットワーク20に接続されていることが好ましい。また、外部記憶装置107は着脱可能な記憶媒体108に接続されていることが好ましい。
図1Bに示した各構成要素の動作について説明する。バス101は、複数の構成要素の間で通信を仲介するネットワーク回路である。なお、図1Bではバス101を象徴的に表しており、実際には複数のネットワーク回路に分かれていても良いし、これら複数のネットワーク回路のそれぞれが図1Bに示した複数の構成要素の一部だけに接続されていても良い。
演算装置103は、例えばCPU(Central Processing Unit:中央演算装置)などであって、プログラムやアプリケーションソフトウェアを実行する。
記憶装置104は、例えばRAM(Random Access Memory:ランダムアクセスメモリ)や、不揮発性のストレージなどを含み、プログラムや、アプリケーションソフトウェアや、各種のデータを格納し、必要に応じてこれらを演算装置に提供する。
入力装置105は、例えばキーボードや、物理ボタンや、液晶ディスプレイと一体型のタッチパネルや、カメラモジュールなどであって、利用者による操作や、外部環境などに基づく各種信号を入力して演算装置103に提供する。
出力装置106は、例えば液晶ディスプレイや、スピーカや、バイブレーション機能部などであって、演算装置103の出力信号を外部に出力する。
外部記憶装置107は、例えば光学メディアドライブなどであって、記憶媒体108としての光学メディアなどからプログラムや、アプリケーションソフトウェアや、データなどを読み取る。
次に、オンラインゲームを開発するにあたって、従来の機能指向的な方法に対して、本実施形態で提案する方法が通信指向的であることについて、ゲーム内の一場面であるバトル開始時に行う通信を例に挙げて説明する。
ここでは、プレイヤーが選択した番号に対応するステージマップ上に予め配置された複数の敵キャラクターを、他の参加メンバから提供される複数の味方キャラクターと協力して倒すことを目的とするバトルについて考える。クライアント端末で実行されるクライアント側アプリケーションソフトウェアは、バトル開始時に、ステージマップ情報と、敵配置情報と、参加メンバ情報とを、ゲームサーバ31から取得する必要がある。ここで、ステージマップ情報はステージマップを定義し、敵配置情報は敵キャラクターの種類や位置関係を定義し、参加メンバ情報はプレイヤーに協力してくれる参加メンバとその味方キャラクターを定義する。
図2Aは、機能指向的な方法で開発された従来のオンラインゲームにおいて、クライアント端末およびサーバの間で行う理想的な通信の一例を示すタイムチャートである。
図2Aに示したタイムチャートでは、クライアント端末11で実行されるクライアント側アプリケーションソフトウェアが、ステージマップ管理機能111と、敵配置管理機能112と、参加メンバ管理機能113とを含んでいる。ここで、ステージマップ管理機能111はステージマップ情報を管理しており、必要に応じて指定したステージのステージマップ情報をゲームサーバ31から取得する。同様に、敵配置管理機能112は敵配置情報を管理しており、必要に応じて指定したステージの敵配置情報をゲームサーバ31から取得する。同様に、参加メンバ管理機能113は参加メンバ情報を管理しており、必要に応じてバトルに参加する参加メンバ情報をゲームサーバ31から取得する。
さらに、ゲームサーバ31で実行されるサーバ側アプリケーションソフトウェアも、ステージマップ管理機能311と、敵配置管理機能312と、参加メンバ管理機能313とを含んでいる。ここで、ステージマップ管理機能311はステージマップ情報を管理しており、クライアント端末11からのリクエストに応じて指定されたたステージのステージマップ情報を提供する。同様に、敵配置管理機能312は敵配置情報を管理しており、クライアント端末11からのリクエストに応じて指定されたステージの敵配置情報を提供する。同様に、参加メンバ管理機能313は参加メンバ情報を管理しており、クライアント端末11からのリクエストに応じてバトルに参加する参加メンバ情報を提供する。
機能指向的に開発された従来のオンラインゲームでは、クライアント側アプリケーションソフトウェアに含まれるステージマップ管理機能111、敵配置管理機能112および参加メンバ管理機能113が、それぞれの機能によって分割された設計に基づいて通信を行う。同様に、サーバ側アプリケーションソフトウェアに含まれるステージマップ管理機能311、敵配置管理機能312および参加メンバ管理機能313も、それぞれの機能によって分割された設計に基づいて通信を行う。
図2Aに示した例では、まずクライアント端末11において、バトル開始時に、ステージマップ管理機能111がステージマップ管理機能311に向けてステージマップ情報リクエスト201を送信する。また、敵配置管理機能112が、ステージマップ管理機能111とは無関係に、敵配置管理機能312に向けて敵配置情報リクエスト202を送信する。さらに、参加メンバ管理機能113が、ステージマップ管理機能111および敵配置管理機能112とは無関係に、参加メンバ管理機能313に向けて参加メンバ情報リクエスト203を送信する。
次にゲームサーバ31において、ステージマップ管理機能311は、ステージマップ情報リクエスト201を受信すると、ステージマップ管理機能111に向けてステージマップ情報211を送信する。また、敵配置管理機能312は、敵配置情報リクエスト202を受信すると、ステージマップ管理機能311とは無関係に、敵配置管理機能112に向けて敵配置情報212を送信する。さらに、参加メンバ管理機能313は、参加メンバ情報リクエスト203を受信すると、ステージマップ管理機能311および敵配置管理機能312とは無関係に、参加メンバ管理機能113に向けて参加メンバ情報213を送信する。
次にクライアント端末11において、ステージマップ管理機能111は、ステージマップ情報211を受信すると、ステージマップ管理機能311に向けてステージマップ情報アクノリッジ221を送信する。また、敵配置管理機能112は、敵配置情報212を受信すると、ステージマップ管理機能111とは無関係に、敵配置管理機能312に向けて敵配置情報アクノリッジ222を送信する。さらに、参加メンバ管理機能113は、参加メンバ情報213を受信すると、ステージマップ管理機能111および敵配置管理機能112とは無関係に、参加メンバ管理機能313に向けて参加メンバ情報アクノリッジ223を送信する。
ここで、ステージマップ情報211と、敵配置情報212と、参加メンバ情報213とがクライアント端末11に揃うと、クライアント側アプリケーションソフトウェアに含まれるバトル機能が動作を開始する。
次に、ゲームサーバ31において、ステージマップ管理機能311がステージマップ情報アクノリッジ221を受信し、敵配置管理機能312が敵配置情報アクノリッジ222を受信し、参加メンバ管理機能313が参加メンバ情報アクノリッジ223を受信すると、サーバ側アプリケーションソフトウェアはクライアント側アプリケーションソフトウェアのバトル機能の動作開始を状況的に認識出来る。
このように、機能指向的に開発されたオンラインゲームでは、複数の機能がそれぞれに分割された通信を行う。図2Aに示した理想的な場合はこれで問題無いが、通信障害が発生するとその復旧が困難となることを説明する。
図2Bは、図2Aに例示した通信で起こり得る通信障害の一例を示すタイムチャートである。図2Cは、図2Bに例示した通信障害を復旧する方法の一例を示すタイムチャートである。図2Bおよび図2Cに示した例では、図2Aに示した例に、いくつかの違いを加えたものに等しい。したがって、図2Bおよび図2Cのうち、図2Aと重複する部分については詳細な説明を省略する。
図2Aに示した例と比較して、図2Bに示した例では、第1の違いとして、ステージマップ情報リクエスト201の送信時に通信障害201aが発生している。その結果、ステージマップ管理機能111では、ステージマップ情報211を受信しないままタイムオーバー201bが発生する。
さらに、第2の違いとして、参加メンバ情報213の送信時にも通信障害213aが発生している。参加メンバ管理機能113では、参加メンバ情報213を受信しないままタイムオーバー203bが発生し、参加メンバ管理機能313では、参加メンバ情報アクノリッジ223を受信しないままタイムオーバー213bが発生する。
また、図2Aに示した例と比較して、図2Cに示した例では、第1の違いとして、ステージマップ管理機能111は、タイムオーバー201bが発生した後、ステージマップ管理機能311に向けてステージマップ情報リクエストの再送201cを行っている。その結果、ステージマップ管理機能311およびステージマップ管理機能111の間で、ステージマップ情報211およびステージマップ情報アクノリッジ221を送信する通信が回復する。
さらに、第2の違いとして、参加メンバ管理機能113は、タイムオーバー203bが発生した後、参加メンバ情報リクエスト203の送信を再度行っている。その結果、参加メンバ管理機能113および参加メンバ管理機能313の間で、参加メンバ情報213の送信と、参加メンバ情報アクノリッジ223を送信する通信とが回復する。
ここで、クライアント端末11に揃ったステージマップ情報211、敵配置情報212および参加メンバ情報213は、それぞれがゲームサーバ31から送信された時刻が、タイムオーバー201b、203b、213bの影響により、大きく異なることに注目されたい。
オンラインゲームの場合は、期間限定イベントなどと呼ばれる期限付き仕様変更によって、バトルの各種条件が所定の時刻を境に切り替わることが少なくない。つまり、タイムオーバー201b、203b、213bなどの影響により、クライアント端末11に揃ったステージマップ情報211、敵配置情報212および参加メンバ情報213の間で整合性が取れていない可能性を考慮して、予め対策を用意する必要がある。そして、このような対策の難易度は、整合性を取るべきデータの総数に応じて上昇する可能性がある。
例えば、タイムオーバー201b、203b、213bなどの間に、ゲームデータベースの更新などの永続的な情報の変更が発生した場合は、タイムオーバー後にデータの再送を行う前に、変更の取り消しが必要になる。したがって、情報の変更は、その取り消しが可能でなければならない。
このような困難を回避するために、発明者は、オンラインゲームの通信指向的な開発方法を提案する。発明者は、クライアント端末およびサーバの間の、情報の整合性の観点から、一連の処理は不可分なものとして扱われるべきであって、通信も1回の情報交換で完結させるべきであると考える。ここで、一連の処理とは、例えば、ステージマップ管理と、敵配置管理と、参加メンバ管理の処理のことであるが、この例に限定されない。
図3Aは、通信指向的な方法で開発されたオンラインゲームにおいて、クライアント端末およびサーバの間で行う理想的な通信の一例を示すタイムチャートである。なお、図3Aのうち、図2Aと共通する部分については詳細な説明を省略する。
図3Aに示したタイムチャートでは、クライアント端末11で実行されるクライアント側アプリケーションソフトウェアが、ステージマップ管理機能111と、敵配置管理機能112と、参加メンバ管理機能113とに加えて、集約通信機能114をさらに含んでいる。集約通信機能114は、クライアント端末11がゲームサーバ31との間で行う通信を集約する。図3Aの場合、集約通信機能114は、図2Aで示したステージマップ情報リクエスト201、敵配置情報リクエスト202および参加メンバ情報リクエスト203からなる3つのリクエストを、単独の集約情報リクエスト231に集約してゲームサーバ31に向けて送信する。
さらに、ゲームサーバ31で実行されるサーバ側アプリケーションソフトウェアも、ステージマップ管理機能311と、敵配置管理機能312と、参加メンバ管理機能313とに加えて、集約通信機能314をさらに含んでいる。集約通信機能314は、ゲームサーバ31がクライアント端末11との間で行う通信を集約する。図3Aの場合、集約通信機能314は、図2Aで示したステージマップ情報211、敵配置情報212および参加メンバ情報213からなる3つの情報を、単独の集約情報232に集約してクライアント端末11に向けて送信する。
集約通信機能114は、集約情報232を受信すると、集約情報アクノリッジ233を集約通信機能314に向けて送信する。
ここで、集約情報232がクライアント端末11に届くことは、ステージマップ情報211と、敵配置情報212と、参加メンバ情報213とがクライアント端末11に揃うことに等しい。このとき、クライアント側アプリケーションソフトウェアに含まれるバトル機能が動作を開始する。
集約通信機能314が集約情報アクノリッジ233を受信すると、サーバ側アプリケーションソフトウェアはクライアント側アプリケーションソフトウェアのバトル機能の動作開始を状況的に認識出来る。
このように、通信指向的に開発されたオンラインゲームでも、機能指向的に開発された場合と同様の通信を行うことが出来る。次に、通信障害が発生しても、その復旧が容易であることを説明する。
図3Bは、図3Aに例示した通信で起こり得る通信障害およびその復旧の一例を示すタイムチャートである。図3Bに示した例では、図3Aに示した例に、いくつかの違いを加えたものに等しい。したがって、図3Bのうち、図3Aと重複する部分については詳細な説明を省略する。
図3Aに示した例と比較して、図3Bに示した例では、第1の違いとして、集約情報リクエスト231の送信時に通信障害231aが発生している。その結果、集約通信機能114では、集約情報232を受信しないままタイムオーバー231bが発生する。
さらに、第2の違いとして、集約通信機能114は、タイムオーバー231bの後、集約情報の再送231cを行っている。その結果、集約通信機能314および集約通信機能114の間で、集約情報232および集約情報アクノリッジ233を送信する通信が回復する。
ここで、例えばクライアント端末11がバトルを開始する前に各種情報をリクエストする段階のままタイムオーバー231bが発生していたとしても、リクエストを受信していないゲームサーバ31も同じ段階に留まることになる。したがって、タイムオーバー231bの後に通信が回復すれば、クライアント端末11に届いた集約情報232に含まれるステージマップ情報211、敵配置情報212および参加メンバ情報213は、ゲームサーバ31から送信された時刻にも差は無く、したがってさらなるリカバリ処理は不要である。
また、仮に通信障害が集約情報232の送信時に発生して、タイムオーバーが集約通信機能314で発生した場合は、クライアント端末11は各種情報をリクエストする段階にとどまり、ゲームサーバ31だけがその次のバトルの開始を認識する段階に進む、という問題が発生し得る。このような場合も、集約通信機能314にキャッシュ機能を設けるだけで、さらなるリカバリ処理は不要となる。
ここで、キャッシュ機能とは、集約情報リクエスト231などのリクエストへの返答として送信した集約情報232などの情報を所定の記憶領域に格納しておき、再度同じリクエストを受信した場合には格納しておいた情報を記憶領域から再送する機能である。上記の例では、ゲームサーバ31がバトルを開始する段階に進んだまま、直前の段階に戻ることなく、集約通信機能314は一度送信した集約情報232を集約通信機能114に再送することが可能となる。このとき、通信障害のリカバリ処理が簡略化されているのみならず、ゲームサーバ31の計算量も節約出来ていることに注目されたい。
このとき、タイムオーバー後にクライアント端末11がゲームサーバ31に向けて再送する集約情報リクエスト231は、ワンタイムセッションIDを含んでいることが好ましい。ワンタイムセッションIDを参照することで、ゲームサーバ31は、受信するリクエストが、初めて送信された新しいリクエストであるのか、それとも過去に送信されたリクエストと同一のリクエストであるのかを判別出来る。すなわち、ゲームサーバ31は、受信したリクエストが1つ古いワンタイムセッションIDを含んでいる場合には、キャッシュ機能により返信済みの情報を再送し、受信したリクエストが正規のワンタイムセッションIDを持つ場合には、集約通信機能314により初めて受信した新しいリクエストに対応する新たな情報を返信することが出来る。
図3Aおよび図3Bに示したように、クライアント端末11からゲームサーバ31への全ての情報リクエストと、ゲームサーバ31からクライアント端末11への全ての情報提供とを、1回の情報交換で済ませることで、図2A〜図2Cを参照して説明した従来の通信で必要とされた複雑なリカバリ処理について考えずに済む。
本実施形態では、クライアント端末11およびゲームサーバ31の間で、送受信する頻度を下げ、1度に送受信するデータを複雑化する。このことは、クライアント端末11およびゲームサーバ31の間で行う通信の解読をより困難にし、不正アクセスへの悪用を防止する効果をもたらす。さらに、ワンタイムセッションIDの採用により、リクエストのコピーを悪用した不正操作や、複数のクライアント側アプリケーションソフトの同時利用による意図的競合状態下での攻撃行為を防止する効果が得られる。
図3Aおよび図3Bに例示した、通信指向型のオンラインゲームを開発する方法と、この方法を実現するための開発システムとについて説明する。
図4は、通信指向的な方法で開発するオンラインゲームの一構成例を表す通信指向型状態遷移図である。
図4に示した通信指向型状態遷移図の構成要素について説明する。図4の通信指向型状態遷移図は、UML(Unified Modeling Language:統一モデリング言語)の表記法を拡張して表されており、合計8個の状態ノードN00〜N07と、合計13本の遷移エッジE01〜E13とを含んでいる。
ここで、状態ノードN00〜N07は、オンラインゲームのプレイ中に切り替わる複数の内部状態をそれぞれ表す。図4の例では、各状態ノードを、角を丸めた長方形で表している。この長方形の上部には、各状態ノードのタイトルが表示されている。この長方形の下部には、各状態ノードの詳細を表示しても良いが、図4では省略している。
また、遷移エッジE01〜E13は、状態ノードN00〜N07の間で行われる状態遷移と、状態遷移の際にクライアント端末11およびゲームサーバ31の間で行われる通信とを表す。各遷移エッジは、遷移元の状態ノードから遷移先の状態ノードに向かう矢印と、その際にクライアント端末およびゲームサーバの間で通信される入出力データとを含んでいる。矢印の下に配置された文字列のうち、スラッシュ記号「/」の左側部分に、遷移元の状態から遷移先の状態に遷移するきっかけとなる遷移トリガを示し、右側部分に、通信の名称と、クライアント端末11からゲームサーバシステム30への入力データと、ゲームサーバシステム30からクライアント端末11への出力データとを、「出力データ=通信の名称(入力データ)」の形式で示す。
第0状態ノードN00は、通信型指向状態遷移図の開始点を示す。第1状態ノードN01は、クライアント端末11によるゲームサーバシステム30へのログイン状態問い合わせを完了した状態を示す。第2状態ノードN02は、クライアント端末11がゲームサーバシステム30へのログイン処理を完了した状態を示す。第3状態ノードN03は、クライアント端末11がゲームサーバシステム30からお知らせ取得を完了し、メニュー画面を表示している状態を示す。第4状態ノードN04は、クライアント端末11がゲームサーバシステム30からステージ一覧取得を完了し、ステージを選択する画面を表示している状態を示す。第5状態ノードN05は、クライアント端末11がゲームサーバシステム30からアイテム一覧取得を完了し、アイテム購入画面を表示している状態を示す。第7状態ノードN07は、クライアント端末11がステージ番号や参加メンバをゲームサーバシステム30に送信し、バトルを開始するために必要なステージマップや敵配置の情報取得を完了し、バトルを開始して終了するまでの状態を示す。第6状態ノードN06は、クライアント端末11がバトルの勝敗をゲームサーバシステム30に送信し、獲得アイテムの通知を受け、バトルの結果を表示している状態を示す。
図4に示した各構成要素の接続関係について説明する。第1遷移エッジE01は、通信「ログイン状態問い合わせ」を伴う、第0状態ノードN00から第1状態ノードN01への状態遷移を示す。第2遷移エッジE02は、通信「ログイン処理」を伴う、第1状態ノードN01から第2状態ノードN02への状態遷移を示す。第3遷移エッジE03は、通信「お知らせ取得」を伴う、第1状態ノードN01から第3状態ノードN03への状態遷移を示す。第4遷移エッジE04は、通信「お知らせ取得」を伴う、第2状態ノードN02から第3状態ノードN03への状態遷移を示す。第5遷移エッジE05は、通信「ステージ一覧取得」を伴う、第3状態ノードN03から第4状態ノードN04への状態遷移を示す。第6遷移エッジE06は、通信「アイテム一覧取得」を伴う、第3状態ノードN03から第5状態ノードN05への状態遷移を示す。第7遷移エッジE07は、第4状態ノードN04から第3状態ノードN03への状態遷移を示す。第8遷移エッジE08は、通信「バトル開始」を伴う、第4状態ノードN04から第7状態ノードN07への状態遷移を示す。第9遷移エッジE09は、第5状態ノードN05から第3状態ノードN03への状態遷移を示す。第10遷移エッジE10は、通信「アイテム購入」を伴う、第5状態ノードN05での自己ループ遷移を示す。第11遷移エッジE11は、第6状態ノードN06から第4状態ノードN04への状態遷移を示す。第12遷移エッジE12は、通信「バトル終了」を伴う、第7状態ノードN07から第6状態ノードN06への状態遷移を示す。第13遷移エッジE13は、通信「アイテム消費」を伴う、第7状態ノードN07での自己ループ遷移を示す。
図4に示した通信指向型状態遷移図で表されるオンラインゲームの動作について説明する。まず、第0状態ノードN00において、オンラインゲームのクライアント側アプリケーションソフトウェアをクライアント端末11上で起動する。第0状態ノードN00の次は、第1遷移エッジE01を介して第1状態ノードN01に遷移する。
第1遷移エッジE01において、クライアント側アプリケーションソフトウェアは、クライアント端末11がオンラインゲームにログインしている状態にあるか否かをゲームサーバシステム30に確認する。
もし、クライアント端末11が既にログインしている状態にあれば、第3遷移エッジE03を介して第3状態ノードN03に遷移する。このときクライアント端末11は、メニューに表示するためのお知らせを、ゲームサーバシステム30に問い合わせる。
反対に、もし、クライアント端末11がまだログインしていない状態にあれば、第2遷移エッジE02を介して第2状態ノードN02に遷移する。このとき、クライアント端末11は、ログインに必要な情報をゲームサーバシステム30に伝え、ゲームサーバシステム30はログインを受け入れた後の通信に使われるワンタイムセッションIDをクライアント端末11に送信する。このとき、クライアント端末11はプレイヤーにIDやパスワードなどの入力を求めても良いし、予め記憶されているIDやパスワードなどを自動的に利用しても良い。
第2状態ノードN02において、クライアント端末11がオンラインゲームへのログインを完了した状態となる。第2状態ノードN02の次は、第4遷移エッジE04を介して第3状態ノードN03に遷移する。このときクライアント端末11は、メニューに表示するためのお知らせを、ゲームサーバシステム30に問い合わせる。
第3状態ノードN03において、クライアント端末11は、お知らせなどを含むメニュー画面を表示する。メニュー画面には、プレイヤーが次に取れる行動の選択肢が表示されていることが好ましい。図4に示した例では、プレイヤーが次にとれる行動として、アイテムの購入と、バトルとが選択可能である。なお、メニュー画面には、さらに、プレイヤーの各種パラメータや、プレイヤーが所持する各種アイテムの種類および数量などが表示されても良い。
第3状態ノードN03のメニュー画面において、アイテムの購入を選択した場合は、第6遷移エッジE06を介して第5状態ノードN05に遷移する。このときクライアント端末11は、現在購入可能なアイテムの一覧データを、ゲームサーバシステム30に問い合わせる。
第5状態ノードN05において、クライアント端末11は、アイテム購入画面を表示する。アイテム購入画面には、ゲームサーバシステム30から取得した、現在購入可能なアイテムの一覧が表示される。
アイテムの購入は、一覧表示された購入可能アイテムをプレイヤーが選択し、かつ、アイテムごとに設定された対価を支払い、プレイヤーのアイテム所持数をクライアント端末11およびゲームサーバシステム30の両方のデータ上で調整することで完了する。アイテムの対価は、例えば、オンラインゲームに特有の仮想通貨や、ネット上で流通可能なオンライン通貨などを利用して支払われても良い。
アイテムの購入を行う場合は、第10遷移エッジE10を介して、第5状態ノードN05に自己ループ遷移を行う。このとき、クライアント端末11およびゲームサーバシステム30は、アイテム所持数や、仮想通貨などの増減に係る通信を行い、クライアント端末11はアイテム購入が完了した旨をプレイヤーに伝える通知をゲームサーバシステム30から取得する。
アイテムの購入が完了し、またはアイテムの購入を取りやめ、メニュー画面に戻る場合は、第9遷移エッジE09を介して第3状態ノード03に戻る。このとき、クライアント端末11およびゲームサーバシステム30の間で行う通信は特に無い。
第3状態ノードN03のメニュー画面において、バトルを選択した場合は、第5遷移エッジE05を介して第4状態ノードN04に遷移する。このときクライアント端末11は、現在利用可能なステージの一覧を、ゲームサーバシステム30に問い合わせる。
第4状態ノードN04において、クライアント端末11は、ステージ選択画面を表示する。ステージ選択画面には、ゲームサーバシステム30から取得した、現在利用可能なステージの一覧が表示される。ステージの選択は、一覧表示された利用可能ステージをプレイヤーが選択することで完了する。その後、第8遷移エッジE08を介して第7状態ノードN07に遷移する。このとき、クライアント端末11およびゲームサーバシステム30は、バトルを開始するために必要な情報に関する通信を行い、クライアント端末11でバトルを開始できる状態とする。
第7状態ノードN07において、クライアント端末11は、バトル画面を表示する。バトル画面では、第4状態ノードN04で選択されたステージ上に、プレイヤーの自キャラクターや、協力してくれる参加メンバの味方キャラクターや、敵キャラクターなどが表示されても良い。
第7状態ノードN07において、バトル中にアイテムを消費する場合は、第13遷移エッジE13を介して、第7状態ノードN07に自己ループ遷移を行う。このとき、クライアント端末11およびゲームサーバシステム30は、指定されたアイテム所持数を減らす通信を行い、クライアント端末11はアイテムを消費したことで得られる効果を処理する。
バトルが終了すると、第12遷移エッジE12を介して第6状態ノードN06に遷移する。このとき、クライアント端末11は、バトルの終了状態をゲームサーバシステム30に通知し、獲得アイテムの情報を得る。
第6状態ノードN06において、クライアント端末11は、バトルの結果画面を表示する。その後、通信を伴わない第11遷移エッジE11を介して、第4状態ノードN04に戻る。
第4状態ノードN04において、ステージの選択を取りやめ、メニュー画面に戻る場合は、第7遷移エッジE07を介して第3状態ノード03に戻る。このとき、クライアント端末11およびゲームサーバシステム30の間で行う通信は特に無い。
以上に説明したように、図4に例示した通信指向型状態遷移図では、オンラインゲームの内部状態の切り替えが、クライアント端末11に表示される画面の切り替えに対応しており、かつ、クライアント端末およびサーバの間で発生する通信は、画面の切り替えタイミングに合わせて行われる。ここで、クライアント端末11およびゲームサーバシステム30の間で行われる通信が、1回の状態遷移ごとに1回に集約されていることに注目されたい。
また、図4に例示した通信指向型状態遷移図は、オンラインゲームの内部状態の切り替えが、クライアント端末11に表示される画面の切り替えに対応しているため、オンラインゲームの開発者にとって直観的に理解し易い。通信指向型状態遷移図は、オンラインゲームの構成という抽象的な概念を、複数の開発者の間で高精度に共有するためのツールとしても有用であり、その結果、オンラインゲーム開発の生産性向上につながる。
また、クライアント端末11およびゲームサーバ31の間で、定義された状態遷移が守られているかを確認しながら動作が可能であるため、正規の通信に割り込まれて行われる不正などに対し、耐性を持つことができる。この際、通信指向型状態遷移図から、画面の切り替えを捨象し、通信に注目した抽象化を行って、通信を伴わない遷移エッジを取り去った状態遷移を使うことが出来る。
次に、図4に例示したような通信指向型状態遷移図を用いてオンラインゲームを開発する方法と、この方法を実現するオンラインゲーム開発システムとについて説明する。
図5は、本発明のオンラインゲーム開発システム2の一構成例を示すブロック図である。
図5に示したオンラインゲーム開発システム2の構成要素について説明する。図5のオンラインゲーム開発システム2は、クライアント端末11と、ネットワーク20と、アプリケーションサーバ21と、ゲームサーバシステム30と、開発用ゲームサーバ41と、開発用ユーザインタフェースサーバ42と、開発用ゲームデータベース43と、開発用端末44と、プラグインリポジトリ45と、テスト用ゲームサーバ46と、開発用クライアント端末13とを含んでいる。ゲームサーバシステム30は、ゲームサーバ31と、運用管理ユーザインタフェースサーバ32と、ゲームデータベース33とを含んでいる。
なお、クライアント端末11と、ネットワーク20と、アプリケーションサーバ21と、ゲームサーバシステム30は、ゲームサーバ31と、運用管理ユーザインタフェースサーバ32と、ゲームデータベース33とだけを抜き出すと、図5に示したオンラインゲーム開発システム2が図1Aに示したオンラインゲームシステム1を含んでいることが分かる。
図5に示した構成要素の接続関係について説明する。開発用端末44は、プラグインリポジトリ45と、開発用ユーザインタフェースサーバ42とに接続されている。開発用ユーザインタフェースサーバ42は、開発用ゲームサーバ41と、開発用ゲームデータベース43と、開発用端末44と、プラグインリポジトリ45とに接続されている。プラグインリポジトリ45は、ゲームサーバ31と、テスト用ゲームサーバ46と、開発用ゲームサーバ41と、開発用ユーザインタフェースサーバ42と、開発用端末44とに接続されている。開発用ゲームサーバ41は、開発用クライアント端末13と、開発用ゲームデータベース43と、プラグインリポジトリ45と、開発用ユーザインタフェースサーバ42とに接続されている。開発用ゲームデータベース43は、開発用ユーザインタフェースサーバ42と、開発用ゲームサーバ41に接続されている。テスト用ゲームサーバ46は、ネットワーク20と、ゲームデータベース33と、プラグインリポジトリ45とに接続されている。ネットワーク20は、クライアント端末11と、アプリケーションサーバ21と、ゲームサーバ31と、テスト用ゲームサーバ46とに接続されている。ゲームサーバ31は、ゲームデータベース33と、運用管理ユーザインタフェースサーバ32と、ネットワーク20とに接続されている。ゲームデータベース33は、ゲームサーバ31と、テスト用ゲームサーバ46と、運用管理ユーザインタフェースサーバ32とに接続されている。運用管理ユーザインタフェースサーバ32は、ゲームデータベース33と、ゲームサーバ31とに接続されている。クライアント端末11は、ネットワーク20に接続されている。アプリケーションサーバ21は、ネットワーク20に接続されている。
図5に示した構成要素の動作について説明する。
開発用端末44は、オンラインゲーム開発者が直接操作する端末である。開発用端末44には、通信指向型状態遷移図を生成するためのUMLツールや、各状態ノードおよび各遷移エッジにそれぞれ対応するプラグインを生成するためのプログラミング開発ツールなどがインストールされていることが好ましい。なお、開発用端末44は、プラグインリポジトリ45を検索して既存のプラグインや雛形プラグインなどを読み出し、これらを流用し、または改良しても良い。開発用端末44は、開発者のそれぞれが有していることが好ましく、その総数は複数であっても良いし、それぞれの開発用端末44で異なるプログラミング言語を使用しても良い。
プラグインリポジトリ45は、自動生成された雛形プラグインや、過去に開発されたオンラインゲーム用プラグインを格納しており、必要に応じて開発用端末44に提供する。なお、プラグインリポジトリ45は、内部に格納されたプラグインのそれぞれについて、再利用の可否や、ソースコードの開示の可否を管理する機能を有していることが好ましい。開発者がソースコード管理システムを特に指定した場合、プラグインリポジトリ45の他に、指定されたソースコード管理システムに、プラグイン一式をコピーする。この場合、指定されたソースコード管理システムが、プラグインリポジトリ45に相当するものとして振る舞う。プラグインリポジトリ45に用意されたプラグイン一式において、雛形プラグインについては、開発用端末44を使って、意図した働きを行うように、プログラミング作業を行う。プラグインリポジトリ45に用意されたプラグイン一式に対するプログラミング作業が完了したら、開発用ユーザインタフェースサーバ42は、プラグイン一式を、開発用ゲームサーバ41に配備する。
開発用ユーザインタフェースサーバ42は、設計情報として開発用端末44で生成された通信指向型状態遷移図に基づき、プラグインリポジトリ45に登録されたプラグイン一式を開発用ゲームサーバ41に配備するなどの処理を行う。設計情報として開発用端末44で生成された通信指向型状態遷移図は、開発用ユーザインタフェースサーバ42に送信され、雛形プラグインを自動生成した上で、プラグインリポジトリ45に登録する。この際、通信指向型状態遷移図で、既に開発済みでプラグインリポジトリ45に登録済みの通信が指定されていた場合、雛形プラグインは生成されず、登録もされない。
開発用ゲームデータベース43は、本番用のゲームデータベース33と同様に、オンラインゲーム内の不揮発な情報を格納する。開発用ゲームデータベース43と、本番用のゲームデータベース33とは、テーブル構造などが同じ構成ではあるものの、別々の実体として設けられる。
開発用ゲームサーバ41は、開発中のオンラインゲームに合わせてプラグインを配備したゲームサーバである。開発用クライアント端末13や、開発用ゲームデータベース43との組み合わせで、開発中のオンラインゲームをテストプレイする環境が構築される。
テスト用ゲームサーバ46は、ゲームサーバ31の補助として動作する。オンラインゲームがリリースされて、一般ユーザなどへのサービスが開始された後に、プラグインの改修や、ゲームデータベース33の更新などが必要となり、その結果としてゲームサーバ31の振る舞いが変わる場合がある。このような場合に、回収や変更を行った後のオンラインゲームの検証を、本番環境に準じたテスト用ゲームサーバ46を用いて行う。この検証を経た後、本番環境用のゲームサーバ31の更新が実行される。
なお、クライアント端末11、ネットワーク20、アプリケーションサーバ21、ゲームサーバ31、運用管理ユーザインタフェースサーバ32およびゲームデータベース33の動作については、図1Aを参照して既に説明したとおりであるので、ここでは省略する。
図6は、本発明のオンラインゲーム開発システム2の一構成例を機能別に示す機能ブロック図である。
図6に示した機能ブロック図の構成要素について説明する。図6の機能ブロック図において、本発明のオンラインゲーム開発システム2は、状態遷移図作成機能部51と、プラグイン作成機能部52と、開発環境構築機能部53と、本番環境構築機能部54とを含んでいる。
状態遷移図作成機能部51は、状態プログラムモジュール作成機能部511と、遷移情報集約機能部512とを含んでいる。
プラグイン作成機能部52は、プラグイン格納機能部521と、既存プラグイン検索機能部522と、雛形プラグイン提供機能部523とを含んでいる。
開発環境構築機能部53は、開発版プレイ機能部531と、テストプレイ機能部532を含んでいる。
図6に示した構成要素と、図5に示した構成要素の対応関係について説明する。
状態遷移図作成機能部51は、開発用端末44および開発用ユーザインタフェースサーバ42のうち、状態遷移図の作成および加工に用いられる部分に対応する。
状態プログラムモジュール作成機能部511は、開発用端末44および開発用ユーザインタフェースサーバ42のうち、状態遷移図の状態遷移情報からゲームの状態遷移を監視するプログラムモジュールの作成に用いられる部分に対応する。
遷移情報集約機能部512は、開発用端末44および開発用ユーザインタフェースサーバ42のうち、状態遷移図の各遷移エッジに含まれる通信の定義を集約し、プラグイン作成機能部52のための情報の作成に用いられる部分に対応する。
プラグイン作成機能部52は、開発用端末44と、開発用ユーザインタフェースサーバ42と、プラグインリポジトリ45のうち、プラグインの作成に用いられる部分に対応する。
プラグイン格納機能部521は、プラグインリポジトリ45に含まれる記憶領域のうち、プラグインの格納に用いられる部分に対応する。
既存プラグイン検索機能部522は、プラグインリポジトリ45のうち、プラグインリポジトリ45の記憶領域から既存プラグインを検索するために用いられる部分に対応する。
雛形プラグイン提供機能部523は、開発用ユーザインタフェースサーバ42のうち、雛形プラグインの提供に用いられる部分に対応する。
開発環境構築機能部53は、開発用ユーザインタフェースサーバ42と、プラグインリポジトリ45とのうち、開発環境の構築に用いられる部分に対応する。
テストプレイ機能部532は、テスト用ゲームサーバ46、ゲームデータベース33およびクライアント端末11のうち、テストプレイに用いられる部分に対応する。
本番環境構築機能部54は、開発用ユーザインタフェースサーバ42およびプラグインリポジトリ45のうち、本番環境の構築に用いられる部分に対応する。
図6に示した各構成要素の動作を、図7Aおよび図7Bを参照して説明する。
図7Aは、本発明のオンラインゲームの開発方法の一構成例を示すフローチャートの一部である。図7Bは、図7Aに示したフローチャートの残りである。
図7Aおよび図7Bのフローチャートは、第0ステップS00〜第15ステップS15の、合計16のステップを含んでいる。
第0ステップS00は、本発明のオンラインゲーム開発方法の開始点を示す。第0ステップS00の次に、第1ステップS01を実行する。
第1ステップS01において、状態遷移図作成機能部51が、通信指向型状態遷移図を編集する。ここで、状態遷移図作成機能部51は、通信指向型状態遷移図を、最初から生成しても良いし、既存の通信指向型状態遷移図を流用しても良いし、既存の通信指向型状態遷移図を改良しても良い。
第2ステップS02において、状態プログラムモジュール作成機能部511が、通信指向型状態遷移図から、状態遷移情報を取り出す。
第3ステップS03において、状態プログラムモジュール作成機能部511が、取り出した状態遷移情報から、状態プログラムモジュールを作成する。作成されたプログラムモジュールは、クライアント側の通信呼び出し履歴をサーバ側でチェックし、状態遷移図の通りにゲームが進行しているか、ゲームの状態遷移を監視する機能を有する。
第4ステップS04において、遷移情報集約機能部512が、通信指向型状態遷移図から、各遷移エッジの通信の情報を取り出す。取り出された各通信の情報は、プラグインとして実装されるため、プラグイン作成機能部52に渡される。
第5ステップS05において、プラグイン作成機能部52が、遷移情報集約機能部512から受け取った各通信について、対応するプラグインが在るか否かを、既存プラグイン検索機能部522を用いて判定する。もし、対応するプラグインが既にプラグインリポジトリ45に格納されていれば(YES)、第5ステップS05の次に第7ステップS07を実行する。反対に、もし、対応するプラグインがプラグインリポジトリ45を検索しても見つからなければ(NO)、第5ステップS05の次に第6ステップS06を実行する。
第6ステップS06において、指定された通信のプラグインの雛形を自動生成する。生成された雛形プラグインは、プラグイン格納機能部521により、プラグインリポジトリ45に格納される。第6ステップS06の次に、第8ステップS08を実行する。
第7ステップS07において、見つかったプラグインを、開発に使えるように、プラグインリポジトリ45内でコピーを行う。コピーすることで、元となったプラグインに影響を与えることなく、プラグインの改造など派生開発を行うことが可能となる。
第8ステップS08において、プラグイン作成機能部52が、第5ステップS05の段階で、遷移情報集約機能部512から受け取っていた各通信について、対応するプラグイン(雛形も含む)が、プラグインリポジトリ45に揃っているかを確認する。揃っていれば(YES)、第8ステップS08の次に第9ステップS09を実行する。揃っていなければ(NO)、第8ステップS08の次に第5ステップS05に戻る。
第9ステップS09において、開発用端末44上で、雛形プラグインに対するプログラミング作業の進捗を確認する。プログラミング作業の終わっていない雛形プラグインが残っていれば(YES)、第9ステップS09の次に第10ステップS10を実行する。プラグインに対するプログラミング作業が終わっていれば(NO)、第9ステップS09の次に第11ステップS11を実行する。
第10ステップS10において、開発用端末44上で、雛形プラグインに対するプログラミング作業を行う。第10ステップS10の次に第9ステップS09を実行する。
第11ステップS11において、開発環境構築機能部53に含まれる開発版プレイ機能部531が、開発中の最新のプログラムを使って、開発用ゲームサーバ41と、開発用ゲームデータベース43と、開発用クライアント端末13に、開発版プレイ環境を構築する。
第12ステップS12において、開発版プレイ機能部531が、開発用ゲームサーバ41と、開発用ゲームデータベース43と、開発用クライアント端末13とを用いたゲームのプレイに問題が在るか否かを判定する。もし、プレイに問題が在った場合(NO)は、第12ステップS12の次に第1ステップS1に戻る。プレイに問題が無い場合(YES)は、つまり、オンラインゲームのプログラムが完成した場合は、第13ステップS13を実行する。
第13ステップS13において、開発環境構築機能部53に含まれるテストプレイ機能部532が、開発版プレイ環境と同じプログラムを使って、テスト用ゲームサーバ46と、ゲームデータベース33と、クライアント端末11に、テストプレイ環境を構築する。
第14ステップS14において、テストプレイ機能部532が、テスト用ゲームサーバ46と、ゲームデータベース33と、クライアント端末11とを用いたゲームのプレイに問題が在るか否かを判定する。もし、プレイに問題が在った場合(NO)は、第14ステップS14の次に第1ステップS1に戻る。プレイに問題が無い場合(YES)は、つまり、オンラインゲームのプログラムが、テストプレイ環境でも問題ないと分かった場合は、第15ステップS15を実行する。
第15ステップS15において、本番環境構築機能部54は、本番用のゲームサーバ31および運用管理ユーザインタフェースサーバ32のシステムを構築し、オンラインゲームは完成する。
このように、本実施形態によるオンラインゲーム開発システムは、通信指向型状態遷移図に基づく開発方法を用いることによって、オンラインゲームの開発をその設計手法からカバーしている。その一方で、従来の手法は機能指向型であって、通信モデルや各機能のレイヤからしかカバーしておらず、このような観点から本実施形態によるオンラインゲーム開発システムはより高品質なオンラインゲームの開発を可能にする。
また、本実施形態によるオンラインゲーム開発システムでは、複数の通信を1つに集約することによって、通信のモデルがより単純になり、仮に通信障害が発生してもそのリカバリがしやすい。その一方で、従来の手法はオンラインゲームの開発者が高い知見を有しない限りその品質が下がりやすい。このような観点からも、本実施形態によるオンラインゲーム開発システムはより高品質なオンラインゲームの開発を可能にする。
以上、発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。また、前記実施の形態に説明したそれぞれの特徴は、技術的に矛盾しない範囲で自由に組み合わせることが可能である。