ランダムなスポーンポイントを公平にしますか?


22

すべてのプレイヤーが隣接するプレイヤーから同じ距離のランダムな位置にスポーンされる場合、プレイヤーの数は、スポーン位置が不公平になる可能性に比例します。マップの端にいるプレイヤーに比べて、プレイヤーがマップの中央に近付くほど、他のプレイヤーに遭遇する可能性が高くなり、生き残る可能性が低くなります。すべてのプレイヤーが同時にスポーンすると仮定します。

スポーンポイントをシェーピングする方法、またはマップを変更する方法はありますか。

  1. すべてのプレイヤーは限られた数の隣接する敵を持っています。
  2. すべてのプレイヤーは、隣接する敵に平等に遭遇する可能性があります。
  3. マップサイズは、プレーヤーの数に比例して増加する必要はありません。
  4. これらの制限は、任意の通過不可能なスペースでは強制されません。

答えは完璧である必要はなく、明らかに他の選択肢よりも優れています。箱から出して思考を歓迎します。


10
円でスポーンしますか?
ジベラス

1
@Zibelas従来のアプローチですが、要件3に違反しており、多くのプレーヤーでこれは巨大なマップと空のインテリアを作成します。
不適切な

4
ゲームの種類によって異なります。(2D / 3D、リスポーン/ラストマンスタンディングなど)その場合、完全なスポーンはボールシェイプワールドでのみ可能です(より多くのプレイヤー、より近いスポーンですが、すべて同じ距離にあることを保証できます)。境界線が固定された2Dワールドでは、スポーンする場所がないため、常に境界線の少ないプレーヤーがいます。3Dゲームの場合、複数のレイヤーを持つことができます。
ジベラス

1
あなたがどんなゲームを作っているのかを知ることは助けになると思います。ある種の戦争ゲームのように聞こえますが、詳細は何ですか?射手ですか?すべての武器から始めますか、それとも物事を探求して見つける必要がありますか?勝利条件は何ですか?試合はどれくらい続くと予想されますか?
RothX

3
完全な答えではありませんが、誰もが「公平でバランスの取れたスポーン」を試みていると思います。優れたPUBG(およびその他のバトルロワイヤル)スポーンを見てください:プレイヤーはどこでも好きな場所に「スポーン」できます(よく、ジャンプして着陸します)。ハイトはハイトの報酬を危険にさらしますが、プレイヤーがそれを望む場合のみです。あなたは森のどこかに着陸することができ、あなた自身を準備する時間がありました-低リスクの低報酬ですが、一部のプレイヤーはそれを好むかもしれません(例えば私のように;))。ランダムではなく、プレイヤーによる選択です。
1月 'splite' K.

回答:


27

プレイヤーが自分で開始場所を選択できるようにします。

ゲームの開始時に、すべてのプレイヤーをマップの中央にスポーンしますが、他のプレイヤーに危害を加える手段はありません。その後、彼らは群れを形成し、互いに関与する手段を獲得する必要があります(ベースの構築、武器のピックアップ、リソースの収集など)。

良いスタート地点を早期に見つけるには、少しの運またはマップの知識が必要です(手順マップを使用するか、手作りのマップを使用するかによって異なります)。しかし、いつどこで解決するかは、ほとんど戦略的な決定です。早期に展開することで時間的に有利になりますが、危険な状況に陥ります。基地を慎重に選ぶことで、アーリーゲームであなたを後ろに追いやることができますが、ミッドゲームとレイトゲームでは決定的なアドバンテージとなります。


3
@Shashimee実際、私はこの方法を最初にAnno 1602で見たことがあると思います。初期のC&Cゲームのいくつかは、オプションのマルチプレイヤーゲームオプションとしてそれを持っていたと思います(しかし、私はそれを正しく思い出すかどうかわかりません)。
フィリップ

3
約15歳のコモドール64の@Philipp MULEで、自分のポジションも選択できるようにします:)
ジベラス

次に、スポーンポイントまで追跡される問題に遭遇します。もちろん、これは望ましいゲームメカニックになる可能性がありますが、非常にイライラする可能性もあり、ゲームで自分が望むものではありません。キャラクターを目に見えないようにスポーンさせ、プレイヤーと衝突しないようにし、ゲームを開始する前にベースを見つけることをお勧めします。
-Dent7777

これは、Warcraft 3のカスタムゲームモードの「Vampirism」および「Tree Tag」ラインで使用される方法です。すべてのプレイヤーが(少なくとも最初は)同盟し、反対側のチームは後でリリースされるため、最適に機能します。
-Kroltan

これには、不公平感が少ないという利点もあります。ランダムに出現し、素早く死んだり、ペナルティを受けたりすると、たとえそれがかなり公平であっても、それは不公平に感じることがあります。死角や罰を生む場所を選択する場合、産卵ポイントを選択すること自体がスキルであり、あなたがより良くなることができるので、不公平で罰せられないように見えます。とはいえ、スポーンポイントを選択するのが本当に難しい場合は、スキルの高いプレイヤーがより良い結果を出すため、不公平を感じることもあります。
アヌビアヌーブ

9

要件を理解する

  1. すべてのプレイヤーは限られた数の隣接する敵を持っています。

まず、ゲームの特定のポイントでのプレイヤーの現在の位置ではなく、プレイヤーのスポーンポイントについて話します。邪魔にならないように。

グラフについて話すとき、隣接は明確に定義されています。マップ上のナビゲーション性を表すマップを考えることができます-これからは「グラフ」。

できるノードが最大で1つのスポーンポイントを持つことができる場合、それらのノードが「隣接している」ということは理にかなっています。注:後で明らかになる理由から、ノードを1つだけ制約してスポーンポイントを1つにすることはしません。

グラフを作成するには、壁、橋、はしご、テレポーテーションポイントなどを考慮する必要があります。また、飛べるプレイヤーがいる場合は飛行スペースを考慮する必要があります。各ノードは通過可能な場所を表します。各接続は、可能な動きを表します。

注:ノードのサイズと形状を把握し、実際に隣接するノードを操作します。ノードをポイントと見なさないでください。接続に長さがあると考えないでください。また、凸ノードを使用します。

グラフはプリコンパイルされている可能性があります(マップはデザイナーによって作成されました)。それ以外の場合、マップがランダムに生成される場合、その場で作成できます。

  1. すべてのプレイヤーは、隣接する敵に平等に遭遇する可能性があります。

敵は他のプレイヤーだと思います。繰り返しますが、それは邪魔になりません。

各プレイヤーがランダムウォークを行うと仮定すると、特定のポイント(障害物のない平坦な空間)でプレイヤーを見つける確率は、スポーンポイントまでの距離の(ガウス)関数によって与えられます。関数"。

グラフで作業しているため、代わりにグラフの値に注釈を付けます。

  1. マップサイズは、プレーヤーの数に比例して増加する必要はありません。

ノードごとに1つのスポーンポイントを持つという制約がある場合、プレーヤーを追加するには、より小さいノードが必要になります。プレイヤーの人数を知る前にグラフを決定した場合、特定のゲームのノードを再分割する必要があります。

  1. これらの制限は、任意の通過不可能なスペースでは強制されません。

問題を解決するために障害物を追加するつもりはありません。反対に、私は障害を回避する必要があります。それらがなければ、実装はより簡単になります。


溶液

N個のスポーンポイントを配置して、それらすべてのスポーンポイントで別のプレイヤーと遭遇する可能性が等しくなるようにしています。

確率の平均と確率の差の合計として誤差の測定値を取得できます。これを最小化しようとしています(実際、0にしたい)。

そのためには、グラフの各ノードでプレイヤーに遭遇する可能性を知る必要があります。

その可能性を計算するには、ゼロから始めます。特定のノードでプレイヤーが見つからない場合、プレイヤーがいない場合はゼロです。次に、各スポーンポイントについて、現在のスポーンポイントの関数の値を注釈付きのチャンスに追加してグラフを調べます。

注1:スポーンポイントを追加または移動すると、すべてのマップでプレイヤーが遭遇する可能性に影響します。

注2:各スポーンポイントがチャンスにどの程度影響するかを追跡することで、物事が簡単になります。

注3:ノードにはサイズがあるため、エラー=ゼロにどれだけ近づくことができるかは、ノードのサイズによって異なります。値の範囲(ノード内のスポーンポイントの特定の位置に応じて、最小および最大のチャンス)を操作することにより、より正確にすることができます。

スポーンポイントをランダムに配置し、エラーが小さくなるように移動を開始します(可能な移動を考慮し、エラーが減少する場合は維持し、そうでない場合は元に戻します)。そして、それ以上改善できなくなるまで(改善なしの反復が多すぎるか、エラーがゼロになるまで)続けます。

注4:スポーンポイントを移動する場合、プレイヤーに遭遇する可能性(移動するスポーンポイントを除く)を使用して、スポーンポイントの新しい位置をランダムに選択して、より近いプレイヤーに遭遇する可能性のある位置を獲得できます平均がより可能性が高い。スポーンポイントを移動すると平均に影響することを思い出してください。

予想される動作は、互いに近すぎるスポーンポイントが離れ、離れすぎるスポーンポイントが近づくことです。それらが平衡に達するまで。

特定の反復でノードに複数のスポーンポイントがある場合(ノードは離れる傾向があるため、可能性は低いですが、十分な大きさのノードがある場合は可能です)、ノードを分割して解決を続けます。ノードの分割はすべて有効です。


上記のソリューションは、エラー=ゼロに近づきますが、ゼロに達することは保証されません。できることは、ローカルミニマムに達するまで実行することです...理論的には、ノードを分割して正確にゼロにすることができます。

シミュレーテッドアニーリングを試して、ノード内のスポーンポイントを移動します。正直なところ、このようなレベルの詳細を気にすることはおそらく価値がありません。


障害物のないフラットマップの結果は、均一に分布したポイントにはならないことを明確にしたいと思います。代わりに、マップにエッジがある場合(つまり、ラップアラウンドしない場合)、エッジに近いスポーンポイントが多くなります。これは、中心のポイントがより多くの方向から到達できるため、遭遇する可能性が高くなるためです。他のプレイヤーがいます。したがって、補正するために中心付近でさらに離れたポイント。


6

それは、あなたがどのような種類のゲームを作りたいか、そしてそれがどれだけ速いペースかによって異なります。完全な等間隔の分布は、世界のような球体で可能です(たとえば、惑星消滅)。しかし、それはあなたのゲームで公正な選択肢ですか?すべての人が同じ距離でスポーンしていても、いくつかのスポーンのほうが有利な場合があります。

  • 範囲内のより近い/より良い武器/より多くのリソース
  • より良いカバー/より多くの隠された/概要
  • プレイヤーの「流れ」、いくつかの場所は他の場所よりも魅力的です(1つの場所に1つの家がある完全な森林マップを考えてください。

マップは固定のものですか、それとも手続き型の地図ですか?そして、2人のマップで8人とAge of Empiresをプレイしようとしたことがありますか?マップサイズを調整しないと、プレーヤーを無限にスケーリングすることはできません。不公平なスタート配置でも、ゲームに多くのダイナミックさをもたらす可能性があります(Wormsシリーズを参照)。他のプレイヤーとの1ラウンドのアライアンスが続いた場合、または最初のラウンドの後に最も生き残ったワームがなかった限り、大きなクラスターで右にスポーンした場合、誰も不満を言いませんでした。

(あなたのゲームのタイプについてもっと知っていれば、いくつかの例を追加します)


5

これまでに提案されていないものを探します:地図の中心がないようにします。これが意味することは、マップのエッジが反対側に結合するということです。これには多くのプログラミング作業が必要になりますが、実際には、一方向に歩くとレベルが無限に繰り返される可能性があります。これは、中心が存在しないことを意味し、ランダムなスポーン位置には長所も短所もありません。

これを行うには、正方形のフラットマップを作成し、各エッジを反対側のエッジのコピーに結合します。プレイヤーが脇から歩くと、プレイヤーの知らないうちにテレポートされて反対側に移動します。もちろん、理論的には、境界の反対側のプレイヤーを見ることができません。これを修正するには、境界線の反対側を歩き回るように見えるプレーヤーのクローンを作成し、それらを見ることができるようにします。

または、マップ全体が球体の外側に存在する可能性がありますが、これにより座標の生成が困難になります。


2
または、マップを作成すると、中心部で狩りや狩りがはるかに簡単になり、略奪品も簡単に見つけることができますが、このように狩りをすることははるかに可能です。プレイヤーが他のユーザーや略奪品を見つける可能性が低くなるため、さらに略奪が必要な場合はセンターに行かなければならず、より長く生き残りたい場合は現在の場所に留まる必要があります。したがって、基本的にランダムスポーンのデメリットをアドバンテージにします。
アベニュー

4

考えられる解決策は次のとおりです。

  • 円周上にランダムにスポーンします
  • 半径上でランダムにスポーンします(中心を閉じるためにスポーンしません)
  • ランダムなスポーン時間コンポーネントを追加します

産卵メカニズムの図


2番目の画像は素晴らしいオプションです。これは、プレーヤーが他のすべてのプレーヤーの位置を正確に知っている最初のオプションの問題を解決します。
ザノン

@Zanonは、最初の画像では、誰かがそこに来る前に離れることができます(そしてそうなる可能性が高い)。2つ目は不公平なスポーンを引き起こします。たぶんのようなもの、この 2円と小さい方と大きい方の違いが存在する場合には、どこに産卵するので、第二の画像のように、あまり中央にあります。
アベニュー

1

基本的に、これはグラフの分布の問題だと思います。デスマッチの状況(他のプレイヤーはすべて敵)を想定して、マップを相互接続されたグラフとしてモデル化し、各プレイヤーがグラフ上のどのノードに最も近いかを追跡する必要があります。すべてのノードがスポーンポイントである必要はありませんが、スポーンポイント間の距離をモデル化するには複雑なグラフが必要です。スポーン時には、グラフを反復処理し、近くのノードにプレーヤーがあるかどうかに基づいて各スポーン可能ノードにスコアを付けます。

理想的なノードは次のとおりです。

  • 現在プレーヤーはいません
  • 近くのノードにゼロ人以上のプレイヤー(少し離れたリンクがあります)

グラフが正規化され、各ノードの周りに同心円状のゾーンを描いていると想像してください。内側のゾーンに既にプレイヤーがいる場合はノードにペナルティーを科し、プレイヤーが適切な距離にいるノードに報酬を与えます。他のプレイヤーのすぐ近くに興味を見つけることができるほど十分近くに産卵を促したいが、彼らがベアリングを手に入れる前にジャンプするほど近くではない。

プレイヤーの数が増えるにつれてマップサイズを大きくする必要ありますが、k1以上である必要はありません。最悪の場合は、グラフ上のすべてのノードに少なくとも1人のプレーヤーがいるということです。その場合、使用する適切なノードがなく、その場合に苦しみ、プレーヤーが出現することを認識しなければなりません。真上に着陸します。スコアリングアルゴリズムは、他のプレイヤーが最も少ないノードでスポーンするように、ノードに重みを付ける必要があります。

マップグラフは、マップ、そのルート、チョークポイント、および 実際の距離ではなくノードポイント間の有効距離の。同様に、より困難な地形を考慮して、距離ではなく測定された時間のようなものを使用してノード間を行き来します。また、オープン性とカバー率を考慮する必要があります。2つのノードは物理的に離れている場合がありますが、非常に開いているため、各ノードでプレイヤーをスポーンすると、それらを隣り合わせでスポーンした場合と同じくらい脆弱になる可能性があります。

改良点:

  • プレイヤーがそのノードで最近スポーンした場合、チョークポイントが形成されないようにするために一時的なペナルティを追加します(同じ方向から来てピックオフされるプレイヤーの無限のストリーム)
  • 範囲内でランダム性を追加して(たとえば、最適な3つのノードを選択し、等しい確率でランダムに選択する)、より多くのバリエーションを取得します。
  • 誰もまだスポーンしていない場合、マップの中心(または最も興味深いポイント)に初期ウェイトを追加します。これにより、他のプレイヤーがいないためにすべてのノードのスコアがゼロの場合でも、既知の場所でスポーンします。

0

他のいくつかは既に要件の制限について議論しており(マップは、混雑を防ぐためにある時点で拡大縮小する必要があります)、最終的には「完全な」配置アルゴリズムではない可能性があるという事実を避けました。「完璧な」アルゴリズムが存在しない可能性がある場合、私は常にヒューリスティックに目を向けます。非常に複雑な検索スペースとともに、直接的または間接的に互いに対立するいくつかの基準があります。最適なソリューションを見つけることは実行可能でも実用的でもないかもしれませんが、少し調整すれば、統計的アプローチはほとんどの場合非常にうまく機能します。

3番目と4番目の基準に対処する: 「マップを展開する必要はありません。」

最初に、ノードが過剰に存在することを確認します(つまり、パス検索用のナビゲーションメッシュと同じ密度)。これにより、他のプレイヤーとの距離の計算がより高価になります(直接隣接するノードではありません)が、これはラウンドごとに複数回発生するプロセスではありません(私は推測します)。これのボーナスは、ほとんどの操作で事前にロールされたnavライブラリを使用できることです。加えて、これはユークリッド距離ではないかもしれない公正な方法で障害物の周りのトラバースを尊重します(迷路のプレイヤーはオープンフィールドよりも近くに配置されるかもしれません)

希望するスポーン特性のヒューリスティックを計算します。

すべてのプレーヤーをランダムに配置した後、基準(他のプレーヤーからの距離、スポーンまでの距離など)に基づいて周囲のノードのパフォーマンスを計算します。値の重みを微調整し、非線形に操作してパフォーマンスを正確に調整できます。サニタイズされた理想的なケース(障害物のない平らな長方形のグリッド)が必要であり、ワールドを再び追加したときのパフォーマンスは同様です。そこから、検索するノードの数、開始点を移動するためのしきい値を決定できます、およびスポーンを終了してゲームを開始する前に実行する反復回数。


0

活躍の場は、トポロジカルトーラスがある場合(つまり、A長方形手段は反対側で入力する「範囲外」に行く場合)、これは良い答えである可能性が高い:プレイヤーjのスポーンx = (pjW/N) mod W, y = (qjH/N) mod HW,H長方形の寸法は、Nありますプレーヤーの数、およびp,q決定される整数です。それらは明確で、(おそらく)比較的素数で、からそれほど遠くありませんsqrt(N)。スポーンポイントは斜めの「壁紙」パターンを形成します。

これは、プレイヤーがゲームの開始時にのみ出現すると仮定しています。後で出現する場合、他のプレイヤーによって定義されたボロノイ図の頂点で、プレイヤーの現在の位置から可能な限り遠くに配置したいと思います。


0

どうですか:

各プレイヤーは、非スポーンボックス(または円)に囲まれています

同様に、すべてのプレイヤーの周りにスポーンし、そのプレイヤーの周りをたどる特定のサイズの四角形があります。他のプレイヤーはその四角形内にスポーンできません。

これらの四角は、スポーンにのみ影響し、ゲーム中の他の動きには影響しません。

これは、初期のみのスポーンまたは連続的なスポーンのいずれかで機能します。

(ドットはプレイヤーを示し、緑は新しいプレイヤーのスポーン可能エリアを示します)

マップサイズは、プレーヤーの数に比例して増加する必要はありません。

これに対処するには、次の2つのいずれかを実行できます:(または両方)

  • プレイヤーの数に基づいて、非スポーンボックスのサイズを小さくします。
  • 各ボックスに最大X人の敵プレイヤーが出現できるようにします。
    • この数は、進むにつれて増加します(0から始まります)。
    • バリエーション1:小さい非スポーンボックスと大きな限定スポーンボックスがあります。
    • バリエーション2:新しいスポーンがこのプレイヤーにどれだけ近いかによる重みの確率(ボックス内の場合)-効率的に実装するのは難しいかもしれません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.