(58)【調査した分野】(Int.Cl.,DB名)
前記仮想カードペアのうちの第1の仮想カードは前記プレーヤに属し、前記仮想カードペアのうちの第2の仮想カードは第2のプレーヤに属する、請求項1に記載の方法。
前記差異値を差異値範囲と比較することによって前記仮想カードバトルの困難度を決定するステップであって、前記差異値範囲は、前記複数の属性を定義する様々な困難度に関連付けられる、ステップ、をさらに含む請求項1に記載の方法。
前記比較分析は、前記仮想カードペアの各々についての前記1つ以上のスキルを困難度範囲に対して比較して前記差異値を算定することをさらに含む、請求項9に記載の方法。
前記困難度は、対向するプレーヤの数、環境条件、ターゲットエリア又はサイズ、照準安定化、ターゲット距離、及びこれらの組み合わせのうち、任意のものから選択された複数の属性を含む、請求項15に記載の方法。
【発明を実施するための形態】
【0007】
本テクノロジーは、多くの異なる形態における実施形態の余地があるが、いくつかの特定の実施形態が、本開示が本テクノロジーの原理の例示とみなされるべきであり、本テクノロジーを例示される実施形態に限定するものではないとの理解と共に、図面において示され、本明細書において詳細に説明される。
【0008】
本明細書において使用される専門用語は、単に具体的な実施形態を説明する目的のものであり、本テクノロジーの限定であることは意図されない。本明細書において使用されるとき、単数形「一の(a、an)」及び「その(the)」は、文脈が別途明確に示さない限り、複数形を同様にして含むことが意図される。さらに、用語「含む」及び/又は「含んでいる」は、本明細書において使用されるとき、示された特徴、整数、ステップ、動作、要素、及び/又はコンポーネントについての存在を指定し、しかし、1つ以上の他の特徴、整数、ステップ、動作、要素、コンポーネント、及び/又はこれらのグループについての存在又は追加を除外しないことが理解されるであろう。
【0009】
本明細書において参照される同様又は類似の要素及び/又はコンポーネントが、図面の全体をとおして同様の参照文字で識別され得ることが理解されるであろう。さらに、図のいくつかは単に本テクノロジーの概略表現であることが理解されるであろう。そのようなものとして、コンポーネントのうちいくつかは、絵的な明りょうさのため、その実際のスケールからゆがめられている場合がある。
【0010】
本テクノロジーは、仮想ゲーム体験を提供するシステム及び方法に向けられる。いくつかの実施形態において、仮想ゲーム体験は、仮想カードバトルと仮想ゲーム活動との双方を含む。いくつかの実施形態に従い、仮想ゲーム活動の初期条件は、部分的に、仮想カードバトルの結果に基づく。一実施形態において、初期条件は、仮想ゲーム活動の困難度を参照する。
【0011】
図1は、本テクノロジーの態様を実践する一例示的なアーキテクチャを例示している。アーキテクチャは、様々な機能性を提供するように構成されたサーバシステム、以降「システム105」、を含み、上記機能性は、本文献の全体をとおしてさらに詳細に説明される。一般に、システム105は、クライアント装置、例えば、クライアント115などと通信するように構成される。クライアント115には、例えば、スマートフォン、ラップトップ、コンピュータ、又は他の同様のコンピューティング装置が含まれ得る。本テクノロジーに従って利用されることが可能なコンピューティング装置の一例が、
図13に関してさらに詳細に説明される。
【0012】
システム105は、パブリック又はプライベートネットワーク、例えば、ネットワーク120などを介して、クライアント115に通信可能に結合することができる。適切なネットワークが、例えば、ローカルイントラネット、PAN(パーソナルエリアネットワーク)、LAN(ローカルエリアネットワーク)、WAN(ワイドエリアネットワーク)、MAN(メトロポリタンエリアネットワーク)、仮想プライベートネットワーク(VPN)、ストレージエリアネットワーク(SAN)、フレームリレー接続、高度インテリジェントネットワーク(AIN)接続、同期型光ネットワーク(SONET)接続、デジタルT1、T3、E1、又はE3回線、デジタルデータサービス(DDS)接続、DSL(デジタル加入者回線)接続、イーサネット(登録商標)接続、ISDN(統合サービスデジタルネットワーク)回線、ダイヤルアップポート、例えば、V.90、V.34、又はV.34bisアナログモデム接続、ケーブルモデム、ATM(非同期転送モード)接続、又はFDDI(ファイバ分散データインターフェース)若しくはCDDI(銅線分散データインターフェース)接続のうち、任意の1つ以上を含み、あるいは該任意の1つ以上とインターフェースをとり得る。さらに、通信が、WAP(ワイヤレスアプリケーションプロトコル)、GPRS(General Packet Radio Service)、GSM(登録商標)(Global System for Mobile Communication)、CDMA(符号分割多重アクセス)若しくはTDMA(時分割多重アクセス)、セルラーフォンネットワーク、GPS(グローバルポジショニングシステム)、CDPD(セルラーデジタルパケットデータ)、RIM(リサーチインモーション社)デュプレックスページングネットワーク、Bluetooth(登録商標)無線、又はIEEE802.11ベースの無線周波数ネットワークを含む、様々なワイヤレスネットワークのうち任意のものに対するリンクをさらに含み得る。ネットワーク120は、さらに、RS−232シリアル接続、IEEE−1394(Firewire)接続、ファイバチャネル接続、IrDA(赤外線)ポート、SCSI(スモールコンピュータシステムインターフェース)接続、USB(ユニバーサルシリアルバス)接続、又は、他の有線若しくはワイヤレスの、デジタル若しくはアナログの、インターフェース若しくは接続、メッシュ、若しくはDigi(登録商標)ネットワーキングのうち、任意の1つ以上含み、あるいは該任意の1つ以上とインターフェースをとることができる。
【0013】
システム105は、プロセッサ130、ネットワークインターフェース135、及びメモリ140を一般に含む。いくつかの実施形態に従い、メモリ140は、様々な方法を実行するための、プロセッサ130により実行されることが可能なロジック(例えば、命令)145を含む。例えば、ロジックは、ビデオゲームクライアントアプリケーション(以降、「ゲーミングアプリケーション150」)を含むことができ、これは、本明細書においてさらに説明される機能性を提供するように構成される。
【0014】
システム105に帰する、本明細書に説明される機能性は、クライアント115内でさらに実行されてもよいことが理解されるであろう。すなわち、クライアント115は、本明細書に説明される機能性を実行するようにプログラムされることができる。別の例において、システム105とクライアント115とが協働して、本明細書に説明される機能性を提供してもよく、したがって、クライアント115は、システム105とクライアント115とがクライアント/サーバ関係において動作するような、システム105と相互作用するクライアント側アプリケーションを提供される。複雑な計算の機能は、サーバ105によって実行されることができると同時に、より少ない計算リソースを必要とする簡素な動作は、クライアント115によって実行されることができ、例えば、データ収集及びデータ表示などである。
【0015】
一般に、ユーザインターフェースモジュール125は、システム105によって実行されて、ユーザがシステム105と相互作用することを可能にする様々なグラフィカルユーザインターフェース(GUI)を提供することができる。いくつかの例において、GUIが、アプリケーション150の実行によって生成される。ユーザは、例えばクライアント115を用いて、システム105と相互作用することができる。システム105は、クライアントのためのウェブベースのインターフェースを生成することができる。
【0016】
ゲーミングアプリケーション150
(さらにアプリケーション150としても参照される)は、ユーザ装置(例えば、クライアント115)、例えば、スマートフォン又はタブレットデバイスなどにおいて、ローカルに実行されることができる。別法として、アプリケーション150は、ネットワークを通じて、ユーザ装置によってアクセスされることができる。ゆえに、アプリケーション150は、サーバ上で実行され、ブラウザアプリケーションを用いてユーザ装置によってアクセスされることができる。サーバは、アプリケーション150のGUIを、標準又はモバイルのウェブサイトのウェブページとして供給することになる。
【0017】
いくつかの実施形態において、ゲーミングアプリケーション150は、ゲーミング体験、例えば、ユーザがゲームプレーに参加するところの仮想ゲーミング環境などを、ユーザに提供するように構成される。仮想ゲーミング環境の例には、これらに限られないが、ロールプレイングゲーム、1人用シューター(first person shooter)ゲーム、マルチプレーヤゲーム、スポーツの(sporting)ゲームなどが含まれる。
【0018】
ゲーミングアプリケーション150は、仮想カードバトルと仮想ゲーム活動との双方を提供するように構成され、仮想ゲーム活動は、少なくとも部分的に、仮想カードバトルに結果に基づく。
【0019】
下記の
図2〜
図11は、仮想カードバトルと仮想ゲーム活動との双方の例示的なスクリーンショットを含む。こうした例示は単に例であり、仮想カードゲームに基づく仮想活動を可能にするロジック及び/又はアルゴリズムが他の仮想ゲーム体験に拡張され得ることに言及することは、注目に値する。
【0020】
次に
図2を参照すると、第1のプレーヤが第1のフットボールチームのための複数のカードを提供されている。ゲーミングアプリケーション150は、仮想ゲームを実施して1つ以上のスキルをランダムに選択するように構成され、上記スキルは、例えば、ほんの数例を挙げると、パワー(power)、視野(vision)、意識(awareness)、スピード(speed)、及び素早さ(agility)などである。これらスキルは、第1のフットボールチームのための複数のカードの上方に表示される第2のフットボールチームのプレーヤについての類似の又は類似でないスキルに対して対抗させられる。ユーザは、ディフェンスマンのための防御(defend)又は攻撃プレーヤのためのシュート(shot)を選択することによって、プレーヤが攻撃プレーヤであるか又は防御プレーヤであるかを選択することができる。いくつかの実施形態において、GUI200は、プレーヤがシュート選択と防御選択との間で切り換えるようにトグルすることができる選択可能ボタン205を含むことができる。
【0021】
詳細に、仮想カード210テオ・アイラス(Teo Eiras)は、複数のスキル値、例えば、パワー45、視野43、意識46、スピード38、及び素早さ38などを備える。各仮想カードは、その独自の、スキル値の順列(permutations)を有することになる。上記スキル値は、差異値(differential values)を決定することに対して本明細書において説明される比較算定に利用される。
【0022】
図3において、仮想カードが、プレーヤによる選択に対して強調表示される。プレーヤは、いくつかの実施形態において、選択のために複数のカードを通してスクロールすることができる。別の実施形態において、プレーヤは、アプリケーション150によってランダムに選択されることができる。上記実施形態において、プレーヤは、第3のペアリングのために自身の仮想カードを選択している。アプリケーション150によりランダムに選択される仮想カードは、プレーヤが自身の仮想カードを選択し終えるまで、クエスチョンマークでブロックされる。
【0023】
2つのカードバトル比較が行われており、差異値が算定されている。第1のペアリングにおいて、差異値215は−531であり、第2のペアリングについての第2の差異値は−235である。
【0024】
図4は、複数の仮想カードバトルペアを例示している。プレーヤは、キックオフ(kick off)ボタン220を選択して、仮想カードバトルを実行することができる。
【0025】
ユーザは、仮想カードバトルにおける使用のためのカードを選択することができる(あるいは、仮想カードは、システムによってランダムに選択されることができる)。各プレーヤが自身の仮想カードをいったん選択すると、
図4に例示されるとおり、チームが整列させられる。
図5において、
図2のとおりの防御又はシュートをプレーヤが選択することを可能にする選択可能ボタンに代わって、仮想カードバトルの各々の結果が表示される。プレーヤは、自身が仮想活動のための基礎として利用したい、仮想カードバトルペアリングのうちいずれかを選択することができる。
【0026】
いくつかの実施形態において、ゲーミングアプリケーション150は、各々のあり得る仮想カード対戦について、困難さの算定を表示するように構成される。例えば、第2のフットボールチームの仮想カード225のジェイムズ・メルバ(James Melba)が仮想カード230のハンス・ディートリック(Hans Dietrich)と対戦し、結果として、マイナス235のスコアと共に「非常に厳しい(very hard)」の困難さ算定235がもたらされることになる。この困難さ算定は、ハンス・ディートリックに関連付けられた視野27及び意識39のスキル値と対して比較されたジェイムズ・メルバについての選択されたスキル値の意識160及びスピード141とにおける差異である。
【0027】
ゆえに、ハンス・ディートリックの、ジェイムズ・メルバに対して仮想カード対決に勝利する見込みは、低い。
【0028】
第1のユーザが、ハンス・ディートリックの仮想カードを選択する場合、ゲーミングアプリケーション150は、困難度に対して、仮想プレイングカードにより表現される各プレーヤについての選択されたスキルレベルを用いて、比較分析を実行するように構成される。困難さの括り(bracket)は、ゲーミング活動についての困難度に関連付けられた差異値の範囲を含む。例えば、困難度の「容易」が、ゼロ乃至−40の差異値の範囲に関連付けられ得る。別の例において、中くらいの困難度が、−41乃至−75の差異値の範囲に関連付けられ得る。上記範囲は、所望されるとおり層化されてよい。
【0029】
一意の困難度に関連付けられた差異値の上記範囲の各々が、同様に、仮想活動のための活動属性の選択にリンクされる。一例示的な仮想の活動が、
図10に関して例示され、説明される。
【0030】
図7及び
図8は、仮想カードバトルの開始と対応する仮想活動とを例示している。詳細には、
図7は、1対1の仮想カード対決を例示している。
図8には、仮想カード対決の結果が例示されており、予測されるとおり、ハンス・ディートリックは、235ポイントの差異で、ジェイムズ・メルバに対するバトルに敗れている。上記実施形態は、実際のカードバトルの前に行われる(precedes)困難さ算定に等しい差異値を例示しているが、使用される確率算定は、困難さ算定とは異なる差異値を生じさせてもよいことが理解されるであろう。例えば、確率に基づいて、差異値に基づき不利な立場のパーティ(party)がそれにかかわらずカードバトルに勝利し、あるいは、−235より大きい、より小さい負の差異値で敗れることがある。上記差異値の大きさ(magnitude)は、仮想活動の様々な属性について、困難度240を選択することに使用される。
【0031】
図10は、仮想活動300、例えばゴールキック活動などを例示しており、仮想活動300は、仮想カードバトルの結果に起因して選択される/影響される困難(又は、複雑)度を有する複数の属性を有する。例えば、仮想カードゲームの結果の負の差異値に起因して、ゴールキックは、第1の属性において、過酷な角度に置かれたゴール305を含む。さらに、第2の属性が、キッカー315に近接した3人のディフェンダー310の配置を含む。第3の属性が、キッカー315とゴール305との間の距離を含み、さらなる第4の属性が、風速計320により示されるとおり、時間あたり14キロメートルの横風を含む。
【0032】
いくつかの実施形態において、ゴールキーパー325のスキル又は挙動が、差異値、又は、差異値に対して選択される差異値範囲に従って、システムにより選択的に調整されることができる。
【0033】
ゆえに、他の属性が、より積極的なゴールキーパー、又は焦点のはずれたゴールのビューを含むことができる。別の属性が、サイズにおいて実質的に低減されたターゲットエリア、又は、移動し又は不安定であるターゲットエリアを含み得る。いくつかの実施形態において、困難度は、複数の属性、例えば、対向するプレーヤの数、環境条件、ターゲットエリア又はサイズ、照準安定化、ターゲット距離、及びこれらの様々な組み合わせなどを含む。上記属性の各々は、同様に、プレーヤのスキル値に対して詳細に合わせられることができる。例えば、プレーヤが、比較的低い視野スキル値を有する場合、仮想活動の属性には、ゴールをぼやけて見えさせることが含まれ得る。
【0034】
対照的に、仮想カードバトルにおける差異値がゼロに近づくとき、より少ない負の属性が選択され、あるいは、属性のいくつかの負性(negativity)が大きさにおいて低減される。例えば、差異が負の100である場合、中間のディフェンダーが1人だけである可能性があり、風が時間あたり5キロメートルに低減される可能性がある。さらに、キッカーが、ゴールに対してわずかにより近く置かれることができる。差異値が正になるとき、属性は、キッカーの好みでゆがめる(skew)ことができ、例えば、ゴールキーパーを取り除くこと、キッカーをゴールのすぐ前に移動することなどである。
【0035】
上記属性を合わせるために使用されるアルゴリズムは、設計要件に従って変動してもよく、しかし、いかなる活動も、前に行われる仮想カードバトルの結果に基づいて選択される困難さ属性を有する。いくつかの実施形態において、仮想カードバトルは、同じタイプの活動を通じたバトルを含むことができる。例えば、システムは、コーナーキックのアクションに相対して、2つの仮想カード間における仮想カードバトルを行うことができる。カードバトルの後に続く仮想活動は、仮想カードバトルにおけるパーティのうちの一方を伴うコーナーキック活動である。
【0036】
別の例として、差異値が容易の困難度の範囲内に入る場合、この困難度は、(1)ゴールの中央に整列されたプレーヤ、(2)ゴールの前にゆっくりなゴールキーパーのみ、及び、(3)横風なし、の仮想活動の活動属性に関連付けられる。念のために、上記は本テクノロジーの単に一例示的な実施形態であり、限定であることは意図されない。
【0037】
念のために、困難度に関連付けられた活動属性の量又は数は、困難さが増加するとき、増加し得る。例えば、「厳しい」困難度のための活動属性の数は5であり、一方、「中間の」困難度のための活動属性の数は3である。
【0038】
同じ原理が、差異が結果として負の困難度(負の差異)をもたらすか又は正の困難度(正の差異)をもたらすかにかかわらず、適用される。
【0039】
アプリケーション150は、活動のために予め決定された属性を利用することができ、あるいは、仮想活動を作成するためにランダム又はスキルベースの属性を利用することができる。例えば、ディフェンダー、ゴールキーパー、風、及び距離の属性が、活動がコーナーキックであるため、選択される。他の仮想活動が、カードゲームバトルの間に選択されたスキルに基づいて、異なる属性の選択を結果としてもたらし得る。例えば、プレーヤが低い視野スキルスコアを有し、フリーキックに関するカードバトルに敗れる場合、フリーキック仮想活動の属性には、小さいゴールターゲット、又は見かけにおいてぼやけているゴールが含まれ得る。
【0040】
図11は、本開示の一例示的な方法のフローチャートである。この方法は、第1のプレーヤのための仮想カードのセットと、第2のプレーヤのための仮想カードのセットとを選択するステップを含み得る。いくつかの実施形態において、プレーヤのうち一方には、ゲーミングシステムが含まれ得る。プレーヤにより選択されるカードは、カードごとのバトルの事例において、1回につき1つ選ばれることができ、あるいは別法として、プレーヤは、システムによるペア単位対決の前に、自身の仮想カードのすべてを選択することができる。ゆえに、プレーヤは、自身がバトルをしたい仮想カードのすべてを選択し、システムは、仮想カードのランダム選択をすることにより応答し、該仮想カードは、プレーヤにより選択された仮想カードとペアにされることになる。
【0041】
使用される処理にかかわらず、仮想カードバトルには、カードのペアを含むことができ、1つは第1のプレーヤからであり、1つは第2のプレーヤからである。ゆえに、上記方法は、仮想カードバトルのための仮想カードのペア(仮想カードペア)のうち少なくとも1つの選択を受信すること(1105)を含み得る。再びになるが、実施形態のうちいくつかは、プレーヤが双方人間のプレーヤであるとき、システムがカードのペアの双方の選択を受信することを可能にする。システムが1プレーヤから仮想カードの選択を受信し、それから、システムがペアのための他方のカードを精選するところの実施形態において、システムは、仮想カードペアのうち一方だけを受信する。
【0042】
いったんカードが選択されると、方法は、仮想カードペアの各々について、1つ以上のスキルを選択すること(1110)を含む。上記で提供された例において、システムは、スキル、例えば、素早さ、視野、又はカードに関連付けられた他のスキルなどをランダムに選択することができる。さらに、選択されたカードのスキルは、カードが属する対象事項に従って変動してもよい。例えば、フットボール選手を表現する仮想カードは、ベースボール選手を表現する仮想カードとは異なるスキルを有し得る。
【0043】
次いで、方法は、1つ以上のスキルを用いて比較分析を実行することにより仮想カードバトルを実行して、差異値を算定すること(1115)を含む。いったん差異値が算定されると、方法は、システムが差異値を使用して仮想活動のための複数の属性を選択すること(1120)を含み得る。上記で言及されたとおり、仮想活動は仮想カードバトルのインタラクティブ版(interactive version)である。
【0044】
有利なことに、システムは、仮想カードバトルの結果が仮想の活動又はゲーミング体験を作り出すことに使用されるロジックを選択することを可能にすることによって、仮想ゲームの領域内で新しい、魅力のある(engaging)仮想活動を作成することができる。各仮想活動は、一意の(unique)ゲーミングインスタンスである潜在性を有し、そのインスタンスの属性は、カードバトル結果に基づいて選択される。
【0045】
より詳細に、システムは、差異値が増加するとき、仮想活動の困難さ又は複雑さを選択的に改変することができる。例えば、差異値が増加するとき、仮想活動の属性は、数又は困難さにおいて増加してもよい。例として、差異値が−100のときにゴールが30メートルの距離に置かれる場合、差異値が−200のときにゴールは50メートルに置かれ得る。別法として、又は追加的に、差異値が−100から−200に移るとき、ゴールキーパーがサイズ又は素早さにおいて増加して、試行されるゴールをブロックしてもよい。
【0046】
システムが、差異値を用いて仮想活動の初期条件をいったん決定すると、方法は、複数の属性を有する仮想活動を仮想カードバトルのプレーヤに提供すること(1125)を含み得る。仮想活動の一例示的な提供が、
図10に例示されている。
【0047】
図12は、前述された処理において困難値範囲を利用する方法を例示している。文脈のため、仮想カードペアが上記で説明された手法のうち任意のものを用いて仮想カードバトルのために選択されていることが仮定される。さらに、上記方法は、カードバトルの対象事項の、システムによってランダムにか又はプレーヤによってかのいずれかの、選択を伴い得る。上記で言及されたとおり、対象事項は、防御又はシュートを含み得る。防御構成において、仮想活動は、プレーヤが、キッカーとは対照的にゴールキーパー又はディフェンダーとして仮想活動に参加することを含むことになる。
【0048】
上記方法は、仮想カードペアの各々について、1つ以上のスキルを選択すること(1205)を含む。再びになるが、1つ以上のスキルは、各々、スキルに関連付けられたスキル値を有する。
【0049】
次いで、方法は、仮想カードペアの各々についての1つ以上のスキルを用いた仮想カードペアの比較分析を含む仮想カードペアを用いた仮想カードバトルを行って、差異値を確立すること(1210)を含み得る。
【0050】
差異値が算定された後、方法は、差異値を差異値範囲と比較することによって仮想カードバトルの困難度を決定すること(1215)を含む。再びになるが、差異値範囲は、複数の属性を定義する様々な困難度に関連付けられる。例えば、ゼロ乃至−100の困難度範囲内に入る差異値が、「難しい(difficult)」としてラベル付けされ得る。困難値範囲は、仮想活動についての属性の予め決定されたセットに関連付けられ得る。この事前決定は、システムが差異値の大きさに基づいて仮想活動のための属性をインテリジェントに選択することができる実施形態とは対照的に、システムがより静的な仕方において動作することを可能にする。ゆえに、いくつかの実施形態において、「難しい」差異値範囲に入る差異値を有するすべてのカードバトルが、属性の動的選択と比較して、仮想活動属性の同じセットを有する仮想活動を結果としてもたらすことになる。
【0051】
方法は、選択された差異値範囲に関連付けられた複数の属性を用いて仮想活動を生成すること(1220)をさらに含み得る。
【0052】
いくつかの実施形態において、本開示のシステムは、離散確率密度算定と、差異値ルックアップ関数(困難度に関連付けられた差異値の範囲を含むテーブルを使用する)と、仮想カードバトルに結び付けられた仮想活動の属性を動的に選択する乱数スクリプティングとを利用することができる。例として、差異値が使用されて困難度の「厳しい」が選択された場合、仮想活動、例えばコーナーキックなどのパラメータには、ディフェンダーの数、キックの角度、ゴールからの距離、風速などが含まれ得る。システムは、これらパラメータの各々についての値を選択する乱数ジェネレータ機能を実装することができる。
ゼロ乃至10のスケールを用いて、システムにより生成される乱数がより大きくなるほど、与えられるパラメータがより難しくなる。
【0053】
いくつかの実施形態において、方法は、(a)第1パーティ仮想カードの選択を受信することと、(b)第2パーティ仮想カードの選択を受信することと、(c)仮想カードバトルのための仮想カードペアを選択することであって、仮想カードペアは、第1パーティ仮想カードのうちの1つと第2パーティ仮想カードのうちの1つとを含む、ことと、(d)仮想カードペアの各々について、1つ以上のスキルを選択することと、(e)仮想カードペアの各々についての1つ以上のスキルを用いて仮想カードペアの比較分析を実行して、差異値を確立することと、(f)差異値の範囲を含むテーブルのルックアップを実行することであって、各範囲は仮想カードバトルに基づく仮想活動の困難度に関連付けられ、ルックアップは、算定された差異値が入る差異値の範囲のうちいずれかを決定する、ことと、(g)プレーヤが仮想活動に如何にして参加するかを定義する複数の選択された仮想活動パラメータの各々について、離散確率密度算定を実行することと、(h)乱数スクリプティングを実行して、複数の選択された仮想活動パラメータの各々について、値を動的に選択することと、(i)プレーヤに対して仮想活動を実行することと、をさらに含む。カードバトルのための困難値範囲と仮想活動パラメータの選択とを決定することに使用される差異値の算定を例示する疑似コードの一例示的な実施形態が、以下に提供される。システムは、一実施形態においてPythonスクリプトを利用することができる。例示的なPythonスクリプトは、困難値範囲を含むテーブルから値をルックアップする対決フローを例証する。
import json
import random
【0054】
スクリプトの第1の部分は、離散確率密度に基づいて値のランダムリストを生成する。
def DiscretePDF( dist, count=None ):
returnlist = True
if count == None:
returnlist = False
count = 1
total = sum( dist.values( ) )
result = [ ]
i = 0
while i < count:
val = random.uniform( 0, total )
cur = 0
for k, v in dist.items( ):
cur += v
if val <= cur:
result.append( k )
break
i += 1
if returnlist:
return result
else:
return result[ 0 ]
def ResolveCardBattle(cardValuePlayer, cardValueOpponent):
return cardValuePlayer - cardValueOpponent
def SelectDifficulty(cardBattleDelta):
difficulty = None
for difficulty_key, delta_range in tuning["Data"]["DifficultyLevelRanges"].items():
if cardBattleDelta >= delta_range[0] and cardBattleDelta < delta_range[1]:
print "Selected", difficulty_key
difficulty = difficulty_key
break
return difficulty
【0055】
以下のスクリプトのセクションは、活動のクラスの選択を提供しており、この実施形態においては、パス活動が含まれる:
class Scenario:
pass
def play_match():
card_slots = [
(194,35),
(100,350),
(300,350),
(954,423),
(234,290)
]
【0056】
仮想カードバトルからのデルタ値が以下で生成される:
for card_slot in card_slots:
delta = ResolveCardBattle(*card_slot)
difficulty = SelectDifficulty(delta)
scenario = Scenario()
scenario.defenders = DiscretePDF(tuning["Data"]["KickingGames"]["DefenderDifficultyTuning"][difficulty])
scenario.wind = random.uniform(*tuning["Data"]["KickingGames"]["WindStrengthRange"][difficulty])
scenario.shot_angle = DiscretePDF(tuning["Data"]["KickingGames"]["ShotAngle"][difficulty])
scenario.shot_distance = DiscretePDF(tuning["Data"]["KickingGames"]["ShotDistance"][difficulty])
print "Player Card Value", card_slot[0]
print "Opponent Card Value", card_slot[1]
print "The following are the basic scenario parameters for a Shooting/Passing Gameplay scenario,"
print "Based on the above card values"
print "These values would feed into the game runtime engine to generate a Shooting/Passing attempt visualization."
print "--------------------------------------"
print json.dumps(scenario.__dict__, indent=4)
print "--------------------------------------"
【0057】
スクリプトの下記のセクションは、インタラクティブゲームのためにパラメータ選択を適合させることであって、上記で選択された差異値を用いて(さらに、値テーブルの困難値範囲を利用して)属性を選択する、ことと、さらに、乱数生成を利用して活動パラメータの各々について値を選択することとを提供する。
tuning = json.loads("""{
"Type": "TuningData",
"Description": "Tunables used for the interactivity games",
"Data":
{
"FieldMaxX": 33,
"FieldMaxZ": 52,
"AttemptTimeOutTime": 2,
"CardBattleWinBonus": 0,
"DifficultyLevelRanges":
{
"VERY_EASY": [175, 1000000],
"EASY": [33, 174],
"MEDIUM": [0, 32],
"HARD": [-224, -1],
"VERY_HARD": [-1000000, -225]
},
"KickingGames":
{
"ChanceToWinOnGoodAction": [0.9, 0.7, 0.4, 0.2, 0.05],
"TargetColors":
{
"BIG": [0.0, 1.0, 0.0],
"MEDIUM": [1.0, 1.0, 0.0],
"SMALL": [1.0, 0.0, 0.0]
},
"TargetColorRanges":
{
"SMALL": [0.0, 0.40],
"MEDIUM": [0.40, 0.75],
"BIG": [0.75, 1.0]
},
"NickingTargetCountsAsHit": false,
"TimerTotalTime":
[
3.0,
3.0,
3.0,
3.0,
3.0
],
"TimerFlashTime": 0.75,
"TimeToSlowTime": 0.85,
"LowHeightKick": 0.1,
"HighHeightKick": 3.3,
"MaxCurveForce": 100000,
"BallPastTargetCutOff": 7.5,
"MinSwipeSpeedCrossThreshold" : 0.005,
"DefenderSpacing": 1.0,
"DefenderWallDist": 8.0,
"DefenderToMarkSpacingMin": 1.75,
"DefenderToMarkSpacingMax": 3,
"ExtrasMinDistSide": 3.0,
"ExtrasMaxDistSide": 6.0,
"ExtrasMinDistBall": 0.4,
"ExtrasMaxDistBall": 0.7,
"KickerOffset":
[
-0.5,
0.0,
-5.5
],
"CameraOffset":
[
0,
2.6,
-9.5
],
"CameraLookAtOffset":
[
0,
1.5,
0
],
"PreCameraBlendTime": 1.0,
"PreCameraOffset":
[
0,
4,
-20
],
"TargetScales": [ 1.1, 0.95, 0.8, 0.7, 0.6 ],
"TargetVanishChance": [ 0.0, 0.0, 0, 0, 0 ],
"TargetWhenToVanish": 3.25,
"WindStrengthRange":
{
"VERY_EASY": [0, 0],
"EASY": [2, 5],
"MEDIUM": [5, 10],
"HARD": [10, 15],
"VERY_HARD": [10, 20]
},
"WindChance": [ 0.0, 0.2, 0.5, 0.85, 1.0 ],
"DefendingScenarios":
{
"none" : [],
"1left" : [{"x": 1.25, "y": 3.0}],
"1right" : [{"x": -1.25, "y": 3.0}],
"1closeleft" : [{"x": 0.4, "y": 1.5}],
"1closeright" : [{"x": -0.4, "y": 1.5}],
"1centre": [{"x": 0.0, "y": 1.0}],
"2left": [{"x": -1.0, "y": 1.0}, {"x": 0.5, "y": 1.0}],
"2farright": [{"x": -0.90, "y": 0.5}, {"x": 1.10, "y": 3.0}],
"2farleft": [{"x": -1.10, "y": 3.0}, {"x": 0.90, "y": 0.5}],
"2right": [{"x": -0.5, "y": 1.0}, {"x": 1.0, "y": 1.0}],
"2closeleft" : [{"x": -1.45, "y": 4.0}, {"x": 0.25, "y": 0}],
"2closeright" : [{"x": -0.25, "y": 0}, {"x": 1.45, "y": 4.0}],
"2centreA" : [{"x": -1.4, "y": 0.5}, {"x": 0.0, "y": 0.0}],
"2centreB" : [{"x": 0.0, "y": 0.0}, {"x": 1.4, "y": 0.5}],
"2block" : [{"x": -0.4, "y": 0.75}, {"x": 0.4, "y": 3.75}],
"3left": [{"x": -0.8, "y": 1.25}, {"x": 0.25, "y": 0.5}, {"x": 2.0, "y": 3.5}],
"3right": [{"x": -2.0, "y": 3.5}, {"x": -0.25, "y": 0.5}, {"x": 0.8, "y": 1.25}],
"3closeleft" : [{"x": 2.5, "y": 5.0}, {"x": 0.0, "y": 0.0}, {"x": -1.0, "y": 2.5}],
"3closeright" : [{"x": 1.0, "y": 2.5}, {"x": 0, "y": 0.0}, {"x": -2.5, "y": 5.0}],
"3centre" : [{"x": -1.2, "y": 3.0}, {"x": 0.0, "y": 5.0}, {"x": 1.2, "y": 2.0}]
},
"DefenderDifficultyTuning":
{
"VERY_EASY" :
{
"none": 50,
"1left": 20,
"1right": 20,
"1closeleft": 5,
"1closeright": 5
},
"EASY" :
{
"none": 10,
"1left": 30,
"1right": 30,
"1closeleft": 10,
"1closeright": 10,
"1centre": 10,
"2left": 0,
"2right": 0,
"2farright" : 0,
"2farleft" : 0,
"2closeleft" : 0,
"2closeright" : 0,
"2centreA" : 0,
"2centreB" : 0
},
"MEDIUM" :
{
"none": 0,
"1left": 0,
"1right" : 0,
"1closeleft" : 10,
"1closeright" : 10,
"1centre": 10,
"2left": 20,
"2right": 20,
"2closeleft" : 20,
"2closeright" : 20,
"2farright" : 0,
"2farleft" : 0,
"2centreA" : 15,
"2centreB" : 15,
"2block" : 15,
"3left": 0,
"3right": 0,
"3closeleft" : 0,
"3closeright" : 0,
"3centre" : 0
},
"HARD" :
{
"none": 0,
"1left": 5,
"1right" : 5,
"1closeleft" : 5,
"1closeright" : 5,
"1centre": 5,
"2left": 10,
"2right": 10,
"2closeleft" : 10,
"2closeright" : 10,
"2farright" : 0,
"2farleft" : 0,
"2centreA" : 10,
"2centreB" : 10,
"2block" : 10,
"3left": 0,
"3right": 0,
"3closeleft" : 0,
"3closeright" : 0,
"3centre" : 0
},
"VERY_HARD" :
{
"none": 0,
"1left": 0,
"1right" : 0,
"1closeleft" : 0,
"1closeright" : 0,
"1centre": 0,
"2left": 0,
"2right": 0,
"2closeleft" : 0,
"2closeright" : 0,
"2centreA" : 5,
"2centreB" : 5,
"2block" : 5,
"3left": 15,
"3right": 15,
"3closeleft" : 20,
"3closeright" : 20,
"3centre" : 15
}
},
"ShotAngle":
{
"VERY_EASY":
{
"WideLeft": 0,
"NearLeft": 10,
"NoAngle": 80,
"NearRight": 10,
"WideRight": 0
},
"EASY":
{
"WideLeft": 0,
"NearLeft": 10,
"NoAngle": 80,
"NearRight": 10,
"WideRight": 0
},
"MEDIUM":
{
"WideLeft": 10,
"NearLeft": 25,
"NoAngle": 30,
"NearRight": 25,
"WideRight": 10
},
"HARD":
{
"WideLeft": 20,
"NearLeft": 20,
"NoAngle": 20,
"NearRight": 20,
"WideRight": 20
},
"VERY_HARD":
{
"WideLeft": 25,
"NearLeft": 15,
"NoAngle": 10,
"NearRight": 15,
"WideRight": 25
}
},
"ShotDistance":
{
"VERY_EASY":
{
"Near": 100,
"Mid": 0,
"Far": 0
},
"EASY":
{
"Near": 50,
"Mid": 50,
"Far": 0
},
"MEDIUM":
{
"Near": 0,
"Mid": 50,
"Far": 50
},
"HARD":
{
"Near": 0,
"Mid": 0,
"Far": 100
},
"VERY_HARD":
{
"Near": 0,
"Mid": 0,
"Far": 100
}
}
},
"ShootingGame":
{
"ShotAngleValues" :
{
"WideLeft": -40,
"NearLeft": -20,
"NoAngle": 0,
"NearRight": 20,
"WideRight": 40
},
"ShotDistanceValues" :
{
"Near": 20,
"Mid": 30,
"Far": 42
},
"ShotSpeeds" :
{
"Near": 25,
"Mid": 40,
"Far": 45
}
}
}
}
""")
play_match()
【0058】
スクリプトがいったん実行されて、仮想活動の属性が確率的に決定されると、仮想活動は、プレイ対決スクリプト呼び出しによって実行される。
【0059】
下記のセクションは、仮想カードバトルの実行を通して選択される仮想活動を提供することに利用される一例示的なゲームスクリプトを説明する。
【0060】
スクリプトが使用されて、様々なシュート距離から選択される:
public enum ShotDistances
{
Near,
Mid,
Far,
Invalid
};
【0061】
スクリプトが使用されて、様々なシュート角度から選択される:
public enum ShotAngles
{
WideLeft,
NearLeft,
NoAngle,
NearRight,
WideRight,
Invalid
};
【0062】
スクリプトが使用されて、様々なボールスピードから選択される:
public enum BallSpeed
{
Slow,
Medium,
Fast,
Invalid
};
【0063】
全体の活動困難度が算定され、表示される:
// 困難さメーター(meter)について
public enum DifficultyLevel
{
VERY_EASY = -2,
EASY,
MEDIUM,
HARD,
VERY_HARD,
Count = 5,
Invalid = -100
}
【0064】
スクリプトがさらに使用されて、この事例において、キックするゲームを伴う活動スクリプトのクラスが選択される:
public class KickingGameScript
{
//-------------------------------------------------------------------------
//
//
//
//-------------------------------------------------------------------------
public static DifficultyLevel GetDifficultyLevel(int playerDifference, DifficultyLevel diffLevel = DifficultyLevel.Count)
{
if (diffLevel == DifficultyLevel.Count)
{
if (Interactivity.Util.Tuning == null)
{
Interactivity.Util.RefreshTuning();
}
foreach (KeyValuePair<DifficultyLevel, List<int>> pair in Interactivity.Util.Tuning.DifficultyLevelRanges)
{
List<int> range = pair.Value;
if (range[0] <= playerDifference && playerDifference <= range[1])
{
for (int i = (int)DifficultyLevel.VERY_EASY; i <= (int)DifficultyLevel.VERY_HARD; i++)
{
if (pair.Key == ((DifficultyLevel)i))
{
diffLevel = pair.Key;
}
}
}
}
}
return diffLevel;
}
public int GetCurrentPlayerDifference()
{
return user.player[current_slot_index] - opponent.player[current_slot_index];
}
public DifficultyLevel GetDifficultyLevel()
{
return MatchFlowUtil.GetDifficultyLevel(GetCurrentPlayerDifference(), tut_GetDifficultyLevelOverride());
}
protected ShotDistances GetShotDistance()
{
if (eCurrentShotDistance == ShotDistances.Invalid)
{
eCurrentShotDistance = random.DiscretePDF(Util.Tuning.KickingGames.ShotDistance[GetDifficultyLevel()])[0];
if (tut_GetOverrideShotDistance() != ShotDistances.Invalid)
{
eCurrentShotDistance = tut_GetOverrideShotDistance();
}
if (eOverrideShotDistance != ShotDistances.Invalid)
{
eCurrentShotDistance = eOverrideShotDistance;
}
}
return eCurrentShotDistance;
}
protected ShotAngles GetShotAngle()
{
if (eCurrentShotAngle == ShotAngles.Invalid)
{
eCurrentShotAngle = random.DiscretePDF(Util.Tuning.KickingGames.ShotAngle[GetDifficultyLevel()])[0];
if (tut_GetOverrideShotAngle() != ShotAngles.Invalid)
{
eCurrentShotAngle = tut_GetOverrideShotAngle();
}
if (eOverrideShotAngle != ShotAngles.Invalid)
{
eCurrentShotAngle = eOverrideShotAngle;
}
}
return eCurrentShotAngle;
}
override protected float GetShotDistanceValue()
{
return Util.Tuning.ShootingGame.ShotDistanceValues[GetShotDistance()];
}
override protected float GetShotAngleValue()
{
return Util.Tuning.ShootingGame.ShotAngleValues[GetShotAngle()];
}
override protected float GetShotSpeed()
{
return Util.Tuning.ShootingGame.ShotSpeeds[eCurrentShotDistance];
}
// ここが値をとるところ(This is where we take the values)
protected override void SetupNewAttempt()
{
ResetCharacterInstances();
EnableAllInteractiveCharacters(false);
PopulateBackgroundCharacters(playerInitData, nonKeeperSlots, teamPlayerInstances, mInputData.SelectedPlayers);
PopulateBackgroundCharacters(opponentInitData, nonKeeperSlots, defenderInstances, mInputData.SelectedOpponents);
CharacterInitData playerKeeperInitData = new CharacterInitData();
playerKeeperInitData.teamSlot = TeamSlotType.K;
playerKeeperInitData.playerGO = PlayerGoalie;
playerInitData.Add(playerKeeperInitData);
ReplaceCharacterModels(Kicker, OpponentGoalie);
// 距離
eCurrentShotDistance = GetShotDistance();
float fDistance = GetShotDistanceValue();
fShotAngle = GetShotAngleValue();
float x = fDistance * Mathf.Sin(Mathf.Deg2Rad * fShotAngle);
float z = fDistance * Mathf.Cos(Mathf.Deg2Rad * fShotAngle);
v3MomentOrigin = v3KickToPos + new Vector3(x, BallPrefab.transform.lossyScale.x / 2.0f, -z);
// キッカー
Vector3 kickerPosition = new Vector3(v3MomentOrigin.x, 0.0f, v3MomentOrigin.z);
Kicker.transform.position = kickerPosition;
Kicker.transform.LookAt(v3KickToPos);
// キッカーのオフセットも回転する
Vector3 kickerOffset = new Vector3(Util.Tuning.KickingGames.KickerOffset[0], Util.Tuning.KickingGames.KickerOffset[1], Util.Tuning.KickingGames.KickerOffset[2]);
Vector3 kickerRotatedOffset = Kicker.transform.rotation * kickerOffset;
Vector3 correctedKickerPosition = kickerPosition + kickerRotatedOffset;
Kicker.transform.position = correctedKickerPosition;
// キッカーにおいてボールを作り出すので、アタッチされたときに動き回らない(create the ball at the kicker, so it doesn't move around when attached)
Quaternion identityRotation = Quaternion.identity;
Instantiate(BallPrefab, correctedKickerPosition, identityRotation);
GameObject ball = Interactivity.Ball.GetInstance();
Debug.DrawLine(ball.transform.position, ball.transform.position + Vector3.up * 2.0f, Color.red, 10.0f);
ball.transform.parent = tempObjects;
ball.GetComponent<Ball>().TrajectoryPredictedEvent += new TrajectoryPredictedEventHandler(TrajectoryPredicted);
// キックスピードを設定する
float fKickSpeed = GetShotSpeed();
BallKicker2 ballKickScript = Kicker.GetComponent<BallKicker2>();
if ( ballKickScript != null )
{
ballKickScript.SetKickSpeed(fKickSpeed);
}
////////////////////////////////
// ゴールキーパー(Goalie)
Vector3 netToBall = v3MomentOrigin - v3KickToPos;
Vector3 v3GoaliePosition = v3KickToPos + netToBall.normalized * GoalieDistOffGoalline;
OpponentGoalie.transform.position = v3GoaliePosition;
OpponentGoalie.transform.LookAt(new Vector3(v3MomentOrigin.x, 0.0f, v3MomentOrigin.z));
if (OpponentGoalie != null)
{
AIKickInterceptorScript goalieScript = OpponentGoalie.GetComponent<AIKickInterceptorScript>();
if (goalieScript != null)
{
goalieScript.Reset(v3GoaliePosition, v3MomentOrigin);
goalieScript.TouchBallEvent += GoalieTouchedBall;
}
}
base.SetupNewAttempt();
mCameraBlender.StartBlend();
}
Team user;
Team opponent;
int current_slot_index;
void PlayGame(Team user, Team opponent)
{
this.user = user;
this.opponent = opponent;
int num_players = 5;
for(int i = 0; i < num_players; i++)
{
this.current_slot_index = i;
SetupNewAttempt();
WaitForAttemptToComplete();
}
}
}
【0065】
図13は、本システム及び方法の実施形態を実装することに使用され得る一例示的なコンピューティング装置1
(さらにシステム1及びコンピュータシステム1としても参照される)を例示している。
図13のシステム1は、コンピューティング装置、ネットワーク、サーバ、又はこれらの組み合わせなどの文脈において実装され得る。
図13のコンピューティング装置1は、1つ以上のプロセッサ10
とメモリ20とを含む。メモリ20は、部分的に、プロセッサ10による実行のための命令及びデータを記憶する。メモリ20は、動作しているとき、実行可能コードを記憶し得る。
図13のシステム1は、大容量記憶装置30、ポータブル記憶装置40、出力装置50、ユーザ入力装置60、表示システム70、及び
(1つ以上の)周辺装置80をさらに含む。
【0066】
図13に示されるコンポーネントは、単一のバス90を介して接続されるものとして表されている。コンポーネントは、1つ以上のデータトランスポート手段を通して接続され得る。プロセッサ10及びメモリ20は、ローカルマイクロプロセッサバスを介して接続されてもよく、大容量記憶装置30、周辺装置80、ポータブル記憶装置40、及び表示システム70は、1つ以上の入力/出力(I/O)バスを介して接続されてもよい。
【0067】
大容量記憶装置30は、磁気ディスクドライブ又は光学ディスクドライブと共に実装されることがあり、プロセッ
サ10による
使用のためのデータ及び命令を記憶する不揮発記憶装置である。大容量記憶装置30は、本テクノロジーの実施形態を実装するシステムソフトウェアを、そのソフトウェア
をメモリ20にロードする目的で、記憶し得る。
【0068】
ポータブル記憶装置40は、ポータブル不揮発記憶媒体、例えば、フロッピーディスク、コンパクトディスク、デジタルビデオディスク、又はUSB記憶装置などと関連して動作して、
図13のコンピュータシステム1に及び該システム1から、データ及びコードを入力し及び出力する。本テクノロジーの実施形態を実装するシステムソフトウェアは、こうしたポータブル媒体に記憶され、ポータブル記憶装置40を介してコンピュータシステム1に入力されてもよい。
【0069】
ユーザ入力装置60は、ユーザインターフェースの部分を提供する。ユーザ入力装置60は、英数字及び他の情報を入力するための英数字キーパッド、例えばキーボードなど、又は、ポインティング装置、例えば、マウス、トラックボール、スタイラス、又はカーソル方向キーなどを含み得る。さらなるユーザ入力装置60には、これらに限られないが、発話認識システム、顔認識システム、モーションベース入力システム、ジェスチャベースシステムなどが含まれ得る。例えば、ユーザ入力装置60には、タッチスクリーンが含まれ得る。さらに、
図2に示されるとおりのシステム1には、出力装置50が含まれる。適切な出力装置には、スピーカー、プリンタ、ネットワークインターフェース、及びモニタが含まれる。
【0070】
表示システム70には、液晶ディスプレイ(LCD)又は他の適切な表示装置が含まれ得る。表示システム70は、テキストの及びグラフィックの情報を受信し、この情報を表示装置に対する出力のために処理する。
【0071】
周辺装置80には、さらなる機能性をコンピュータシステムに追加する任意タイプのコンピュータサポート装置が含まれ得る。周辺装置80には、モデム又はルータが含まれ得る。
【0072】
図2のコンピュータシステム1において提供されるコンポーネントは、本テクノロジーの実施形態での使用に適し得るコンピュータシステムにおいて典型的に見られるものであり、当分野においてよく知られるこうしたコンピュータコンポーネントの広いカテゴリを表すことが意図される。ゆえに、
図2のコンピュータシステム1は、パーソナルコンピュータ、ハンドヘルドコンピューティング装置、電話、モバイルコンピューティング装置、ワークステーション、サーバ、ミニコンピュータ、メインフレームコンピュータ、又は任意の他のコンピューティング装置であり得る。コンピュータは、異なるバス構成、ネットワーク化されたプラットフォーム、マルチプロセッサプラットフォーム等をさらに含み得る。様々なオペレーティングシステムが、Unix(登録商標)、Linux(登録商標)、Windows(登録商標)、MacOS(登録商標)、PalmOS(登録商標)、Android(登録商標)、iOS(登録商標)(2010年6月以前のiPhone(登録商標) OSとして知られる)、QNX(登録商標)、及び他の適切なオペレーティングシステムを含め、使用されてもよい。
【0073】
本明細書に説明される処理を実行することに適した任意のハードウェアプラットフォームが、本明細書に提供されるシステム及び方法での使用に適することは、注目に値する。コンピュータ可読記憶媒体は、中央処理ユニット(CPU)、プロセッサ、マイクロコントローラ又は同様のものに命令を提供することに参加する任意の1つ又は複数の媒体を参照する。こうした媒体は、これらに限られないが、不揮発媒体及び揮発媒体、例えば、それぞれ、光学又は磁気ディスク及びダイナミックメモリなどを含む形態をとり得る。コンピュータ可読記憶媒体の一般的形態には、フロッピーディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気記憶媒体、CD‐ROMディスク、デジタルビデオディスク(DVD)、任意の他の光学記憶媒体、RAM、PROM、EPROM、FLASHEPROM、任意の他のメモリチップ又はカートリッジが含まれる。
【0074】
本テクノロジーの態様のための動作を実行するコンピュータプログラムコードは、Java(登録商標)、Smalltalk(登録商標)、C++又は同様のものなどのオブジェクト指向プログラミング言語と“C”プログラミング言語又は類似のプログラミング言語などの従来の手続き型プログラミング言語とを含む1つ以上のプログラミング言語の任意の組み合わせにおいて書かれることができる。プログラムコードは、ユーザのコンピュータ上で全体的に、ユーザのコンピュータ上で部分的に、スタンドアロンソフトウェアパッケージとして、ユーザのコンピュータ上で部分的に且つリモートのコンピュータ上で部分的に、あるいはリモートのコンピュータ又はサーバ上で全体的に実行され得る。後半のシナリオにおいて、リモートコンピュータは、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意タイプのネットワークを通してユーザのコンピュータに結合されてもよく、あるいは、接続は、外部のコンピュータに対して(例えば、インターネットサービスプロバイダを用いてインターネットを通して)行われてもよい。
【0075】
以下における請求項内のすべてのミーンズ又はステッププラスファンクション要素の対応する構造、材料、動き、及び均等物は、具体的に請求されるとおり、他の請求された要素との組み合わせにおいてその機能を実行する任意の構造、材料、又は動きを含むことが意図される。本テクノロジーの説明は、例示及び説明の目的で提示されており、しかし、網羅的であること、又は開示された形態における本テクノロジーに限定されることは意図されない。多くのモディフィケーション及びバリエーションが、本テクノロジーの範囲及び主旨から逸脱することなく、当業者に対して明らかになるであろう。例示的な実施形態は、本テクノロジーの原理とその実際的な適用とを最も良く説明し、考えられる具体的な使用に適するとおりの様々なモディフィケーションを有する様々な実施形態に対して当業者が本テクノロジーを理解することを可能にするために、選ばれ、説明されている。
【0076】
本テクノロジーの態様は、本テクノロジーの実施形態に従う方法、装置(システム)、及びコンピュータプログラム製品についてのフローチャート例示及び/又はブロック図を参照して上記で説明されている。フローチャート例示及び/又はブロック図の各ブロックと、フローチャート例示及び/又はブロック図における複数のブロックの組み合わせとが、コンピュータプログラム命令によって実装され得ることが理解されるであろう。上記コンピュータプログラム命令は、汎用目的コンピュータ、特別目的コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに提供されてマシンを生じさせることができ、したがって、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行される命令は、フローチャート及び/又はブロック図の一ブロック又は複数ブロックに指定される機能/動きを実施する手段を作成する。
【0077】
上記コンピュータプログラム命令は、さらに、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスを特定の仕方において機能するように指図することができるコンピュータ可読媒体に記憶されることができ、したがって、コンピュータ可読媒体に記憶された命令は、フローチャート及び/又はブロック図の一ブロック又は複数ブロックに指定される機能/動きを実施する命令を含む製造品を生じさせる。
【0078】
コンピュータプログラム命令は、さらに、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上にロードされて、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で実行させて、コンピュータにより実施されるプロセスを生じさせることができ、したがって、コンピュータ又は他のプログラム可能装置上で実行される命令は、フローチャート及び/又はブロック図の一ブロック又は複数ブロックに指定される機能/動きを実施するプロセスを提供する。
【0079】
図におけるフローチャート及びブロック図は、本テクノロジーの様々な実施形態に従って、システム、方法、及びコンピュータプログラム製品のあり得る実装についてのアーキテクチャ、機能性、及び動作を例示している。このことに関連し、フローチャート又はブロック図の中の各ブロックは、指定された論理機能を実施する1つ以上の実行可能命令を含むコードのモジュール、セグメント、又は部分を表現し得る。さらに、いくつかの代替的な実装において、ブロックの中に記された機能は、図に記された順序以外で発生し得ることが留意されるべきである。例えば、連続して示される2つのブロックは、実際、実質的に同時に実行されてもよく、あるいは、上記2つのブロックは、時に、関与する機能性に依存して、逆の順序において実行されてもよい。さらに、ブロック図及び/又はフローチャート例示の各ブロックと、ブロック図及び/又はフローチャート例示における複数のブロックの組み合わせとは、指定された機能又は動きを実行する特別目的ハードウェアベースシステム、又は、特別目的ハードウェアとコンピュータ命令との組み合わせによって実装され得ることが留意される。
【0080】
様々な実施形態が上記で説明されたが、これらは単に例として提示されており、限定でないことが理解されるべきである。上記説明は、本発明の範囲を本明細書に明記される具体的な形式に限定するものではない。ゆえに、好適な実施形態の幅広さ及び範囲は、上述された例示的な実施形態のいずれかによって限定されるべきではない。上記説明は限定的でなく例示的であることが理解されるべきである。反対に、本説明は、別記の請求項により定義され、そうでなければ当業者により十分理解されるとおり、本テクノロジーの主旨及び範囲内に含まれ得るとき、上記の代替、モディフィケーション、及び均等物をカバーすることが意図される。ゆえに、本テクノロジーの範囲は、上記説明を参照して決定されるべきでなく、しかし代わって、別記の請求項をその完全な範囲の均等物と共に参照して決定されるべきである。