ランダムなスポーンポイントを公正にする?

inappropriateCode 08/22/2017. 9 answers, 4.496 views
game-design level-design

すべてのプレイヤーが隣接するプレイヤーから同じ距離のランダムな位置に生まれた場合、プレイヤーの数は、そのスポーンポジションが不公平になる可能性に比例します。 マップの中心に近いプレイヤーが出現するほど、他のプレイヤーと出会う可能性が高くなり、生存する可能性は低くなります。 すべての選手が同時に生まれたと仮定してください。

スポーンポイントを形成する方法やマップを変更する方法はありますか?

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

答えは完璧である必要はなく、代替案より明らかに優れています。 箱から出て、歓迎します。

5 Comments
10 Zibelas 07/28/2017
円でスポーンする?
1 inappropriateCode 07/28/2017
@Zibelas伝統的なアプローチですが、要件3に違反し、多くのプレイヤーが巨大なマップと空のインテリアを作成します。
4 Zibelas 07/28/2017
あなたのゲームの種類によって異なります。 (2D / 3D、respawn / last man standing、etc.)この場合、完璧なスポーンはボールの世界でのみ可能です(より多くのプレイヤー、より近いスポーン、しかしそれらはすべて同じ距離を持つことが保証できます)。 ボーダーが固定された2D世界では、スポーンする場所がないため、ボーダーの境界が少なくなります。 その3Dゲームなら、複数のレイヤーを持つことができます。
1 RothX 07/28/2017
私はそれがあなたが作っているゲームの種類を知るのに役立つだろうと思う。 それは何らかの戦争ゲームのように聞こえるが、詳細は何か? それはシューティングゲームですか? すべての武器で始めるのか、それとも探検して物事を見つけなければならないのですか? 勝利条件とは何ですか? 試合はどのくらい続くと予想されますか?
3 Jan 'splite' K. 07/28/2017
完全な答えではありませんが、誰もが "公正でバランスの取れたスポーン"をしようとしていると思います。これは楽しいことではありません。 優れたPUBG(および他のバトル・ロワイヤル)の産卵を見てください。プレイヤーは、ほとんどどこでも好きな場所に育てることができます。競合やドラマが必要な場合は、ほとんどのプレイヤーが出現/出現する場所を選択します。 Hight risk hight報酬は、プレーヤーがそれを望む場合に限ります。 あなたは森のどこかに着陸することができます。自分自身を準備する時間があります。低リスクの低報酬ですが、いくつかの選手がそれを好むかもしれません。 そのランダムではなく、選手の選択。

9 Answers


Philipp 07/28/2017.

プレイヤーにスタート地点を選んでもらう。

ゲームの開始時に、すべてのプレイヤーをマップの中心に出現させますが、他のプレイヤーに害を与える手段はありません。 それから彼らは出て、互いに噛み合う手段を得る必要があります(拠点を作る、武器を拾う、資源を集めるなど)

あなたが手続きや手作りの地図を使用するかどうかに応じて、良いスタート地点を早期に見つけるためには、少しの運や地図の知識が必要です。 しかし、いつどこで解決すべきかは、主に戦略的決定である。 早期に展開すると時間の利点が得られますが、危険な立場に陥ります。 あなたのベースを慎重に選ぶことは、初期の試合ではあなたを慎重に後退させますが、中盤と後半の試合では決定的なメリットがあります。

5 comments
14 Shashimee 07/28/2017
Hunger Games 1フィルム産卵システムを使用する場合+1。
3 Philipp 07/28/2017
@Shashimee実際に私はAnno 1602でこの方法を最初に見たと信じています。私は初期のC&Cゲームの中にはオプションのマルチプレイヤーゲームオプションがあるとも思います。
3 Zibelas 07/28/2017
@Philipp MULE for the commodore 64約15歳以上で、あなたのポジションも選んでください:)
Dent7777 07/28/2017
次に、あなたがあなたのスポーンポイントに続いている問題にぶつかります。 これは、もちろん、ゲームのメカニックになる可能性がありますが、非常にイライラしている可能性もありますし、ゲームであなたが望むものではありません。 良いアイデアは、ゲームを開始する前にキャラクターに目に見えない、プレーヤーの衝突がないようにし、ベースを見つけることです。
Kroltan 07/28/2017
これは、Warcraft 3のカスタムゲームモードの "Vampirism"と "Tree Tag"ラインで使用されている方法です。これは、すべてのプレイヤーが(少なくとも最初は)連合され、後で相手チームがリリースされるので最適です。

Theraot 07/28/2017.

要件の理解

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

最初に、我々は、プレイヤーのスポーンポイントについて話しているのであって、ゲームの所定のポイントにおけるプレイヤーの現在のポジションについては言及していない。 Just getting that out of the way.

隣接については、グラフについて話すときによく定義されます。 マップ上でのナビゲート可能性を表すマップを、今から「グラフ」と考えることができます。

canノードが最大で1つのスポーンポイントを持つことができれば、それらの "隣接する"と話すことは意味をなさない。 注:後で明らかになる理由のため、最大でも1つの単一のスポーンポイントを持つようにノードを制約しません。

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

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

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

  1. すべてのプレイヤーは隣接する敵に遭遇する機会が等しい。

私は敵が他のプレイヤーであると仮定します。 Again, just getting that out of the way.

各プレイヤーがランダムウォークをしていると仮定すると、障害物のないフラットスペース上の任意のポイントでプレイヤーを見つける確率は、スポーンポイントまでの距離の(ガウス関数)によって与えられます。関数"。

グラフを作成しているので、代わりにグラフに値を注釈します。

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

ノードごとに単一のスポーンポイントを持つという制約があった場合、プレイヤーを追加するために、より小さなノードが必要になります。 私たちがどれくらい多くのプレーヤーを持つかを知る前にグラフを決定すると、特定のゲームのノードを細分化する必要が生じるかもしれません。

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

私は問題を解決するために障害を追加するつもりはない。 Au contraire 、私は障害を回避する必要があります。 彼らがそこにいなければ、実装はより簡単になります。


溶液

我々はN個のスポーンポイントを配置しようとしているので、それらのスポーンポイントすべてで他のプレイヤーに遭遇する機会は等しくなります。

チャンスの平均に対するチャンスの差の合計として誤差の尺度を得ることができます。 私たちはそれを最小化しようとしています(実際には0にしたい)。

これを行うには、グラフの各ノードでプレーヤに出会う機会を知る必要があります。

そのチャンスを計算するには、ゼロから始めます。 与えられたノード上でプレイヤーを見つける機会は、プレイヤーがいないときは0なので、ゼロになります。 そして、スポーンポイントごとに、アノテーションされたチャンスに現在のスポーンポイントの関数の値を追加してグラフを歩きます。

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

注2:各スポーンポイントがチャンスにどれだけ影響を与えるかを把握しておくと、操作が簡単になります。

注3:ノードにはサイズがあるため、エラー= 0までの到達距離はノードのサイズによって異なります。 値の範囲(ノード内のスポーンポイントの特定の位置に応じて、minimunとmaximunチャンス)を扱うことで、より正確にすることができます。

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

注4:スポーンポイントを移動するときに、スポーンポイントの新しい位置を無作為に選択するようにプレイヤー(移動するスポーンポイントを除く)に遭遇する機会を利用することができます。プレイヤーに近づく可能性のある位置平均がより高い可能性があります。 私は、スポーンポイントを移動すると平均に影響を与えることを思い出します。

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

任意の反復で、ノード上に複数のスポーンポイントがある場合(そうではない可能性が高いため、離れて移動する傾向があるため、十分な大きさのノードがある場合は可能です)、ノードを分割して解決してください。 ノードのどの部門も有効です。


上記の解は誤差=ゼロに近づくが、ゼロに達することは保証されない。 理論的には、ノードを分割して正確にゼロにすることができます...しかし、それはスポーンポイントの座標を微調整するのと同じです!

シミュレーションされたアニーリングを試して、ノード内のスポーンポイントを移動してください。 正直なところ、このような詳細レベルで気にするのはそれほど価値がないかもしれません。


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


Zibelas 07/28/2017.

それはあなたが作成したいゲームの種類と速さがどの程度速いかによって異なります。 世界のような球体では、完全に均等な間隔で分布することが可能です(例:惑星の消滅)。 しかし、それはあなたのゲームの公正なオプションですか? たとえすべての人が等距離で産卵していても、いくつかの産卵にはさらに優位性があるかもしれません。

  • 射程距離/より多くの資源の近くに/より良い武器
  • より良いカバー/より多くの隠された/概要
  • プレイヤーの「流れ」、いくつかの場所は他のものよりも魅力的です(その家がどこにあるかにかかわらず、1つの家が1つの場所にある完全な森林地図を考えて、人々がそれをチェックしている)

あなたのマップは固定されたものか手続き型のものか そして、2人の地図で8人でAge of Empiresをプレイしようとしたことはありますか? マップサイズを調整せずに無限にプレーヤをスケーリングすることはできません。 不公平な開始配置であっても、ゲームではダイナミックな動きを生み出すことができます(Wormsシリーズ参照)。 他のプレイヤーとのラウンドアライアンスが続いたり、最初のラウンド後に最も生き残ったワームがなかったりしている限り、大規模なクラスタですぐに生まれば、誰も訴えませんでした。

(あなたのゲームの種類についてもっと知っているなら、いくつか例を追加します)


Aric Fowler 07/28/2017.

これまで示唆されていないことに行く:地図の中心がないようにする。 私が意味することは、地図の端が反対側に加わることです。 これは多くのプログラミング作業を必要としますが、実際には一方向に歩いているとレベルを無限に繰り返すことができます。 つまり、中心がなく、ランダムなスポーン位置には利点や欠点がありません。

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

あるいは、マップ全体が球の外側に存在する可能性がありますが、これによって産卵が困難になります。

1 comments
2 Avery 07/29/2017
または、中心にある地図を作って、狩りや狩りをもっと簡単にすることができます。また、簡単に見つけることもできますが、もう一度、このような狩りをすることは可能です。センター以外の地域では、それはプレイヤーが他のユーザーや略奪品を見つける可能性が低いため、より多くの奪取物を望むならば、彼らはセンターに行かなければならない。もし彼らがより長く生き残りたいなら、彼らはどこにいてもいなくてはならない。 だから、基本的にランダムな欠点の欠点を有利にする。

dnk drone.vs.drones 07/28/2017.

可能な解決策は次のとおりです。

  • 円周上にランダムにスポーンする
  • 半径をランダムに発生させます(中心を閉じるために産卵しません)
  • ランダムなスポーン時間成分を追加する

産卵メカニズムの図

2 comments
Zanon 07/28/2017
2番目の画像は素晴らしい選択肢です。 それは、プレーヤーが他のプレイヤーがどこにいるのかを正確に知っている最初のオプションの問題を解決します。
Avery 07/29/2017
@ Zanonしかし、最初の画像プレーヤーは誰かがそこに来る前に(そしておそらく)離れて移動することができます。 2番目は不公平な産卵を引き起こし、いくつかは他の産卵に近い。 たぶん、 このような2つの円があり、小さいものと大きいものとの違いは、2番目のイメージのように、スポーンする場所ですが、中心には少なくなります。

MrCranky 07/28/2017.

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

理想ノードは、

  • 現在それに入っているプレーヤーはいません
  • 近くのノードに0人以上のプレイヤーがいる(少数のリンクが離れている)

グラフが正則化され、各ノードの周りに同心円のゾーンを描画しているとします。 内側のゾーンにすでにプレイヤーが存在する場合はノードに不利益を被り、適切な距離にプレイヤーを持つノードには報酬を与えます。 あなたは、彼らが彼らのベアリングを得る機会を持っていた前に彼らが飛び乗ってくるほど近くではなく、彼らがすぐに関心を見つけることができる他のプレイヤーに十分近くに産卵を奨励したい。

選手の数が増えるにつれて地図のサイズを大きくwill必要willありますが、 kは1以上である必要はありません。 あなたの最悪のケースは、グラフ上のすべてのノードに少なくとも1人のプレイヤーがいることです。この場合は、使用するノードがまったくなく、そのケースに苦しんで、プレイヤーがそれを知っていることを知っている必要があります他のものの上にまっすぐに着陸する。 スコアリングアルゴリズムはノードに重み付けをして、他のプレイヤーの数が最も少ないノードにスポーンするようにする必要があります。

マップマップ、ルート、チョークポイント、 actual距離ではなくノードポイント間のeffective距離の知識を持って、マップグラフを慎重に構築する必要があることに注意してください。 同様に、より困難な地形を考慮に入れて、距離ではなくノード間を移動するために測定時間のようなものを使用します。 また、あなたはオープンネスとカバーを考慮する必要があります。 2つのノードは物理的に離れているかもしれませんが、それらは非常に開いているため、各ノードでプレーヤーを産んでも、まるでそれらをすぐ隣に生まれた場合と同じように脆弱である可能性があります。

詳細:

  • プレイヤーがそのノードに最近出現した場合に、一時的なペナルティを加えて、チョークポイントの形成を止めます(同じ方向から来て、選び出される無限の流れのプレイヤー)
  • ある範囲内のランダム性を追加する(例えば、最良の3つのノードを選び、等確率でそれらの中からランダムに選択する)。
  • 誰もまだ生まれていないときに、マップの中心(または最も興味深い点)に初期ウェイトを付け加えます。他のプレイヤーがいないため、すべてのノードがスコアが0になっても既知の場所にスポーンします。

Aaron 07/28/2017.

他のいくつかはあなたの要件の限界についてすでに議論しています(マップは、過密状態を防ぐためにある時点でスケーリングする必要があります)、最終的に「完璧な」配置アルゴリズムがない可能性があるという事実はありません。 「完璧な」アルゴリズムが存在しない可能性が高い場合、私は常にヒューリスティックを目指します。 あなたには、直接的または間接的にお互いに不利な条件がいくつかあり、非常に複雑な検索スペースがあります。 最適解を見つけることは実現可能でも実用的でもないかもしれませんが、少し調整するだけで、統計的アプローチは大部分の時間で非常にうまく実行できます。

あなたの第3および第4の基準に対処する: "The map shouldn't have to expand."

私は最初にあなたがノードが豊富であることを確かめます(すなわち、経路探索のためのナビゲーションメッシュとして密集します)。 これは、他のプレイヤーとの距離をより高価に(直接隣接ノードではなく)計算することになりますが、これは1回のラウンドで2回以上発生するプロセスではありません。 これのボーナスは、ほとんどの操作で事前にロールされたnavライブラリを使用できることです。 さらに、これは、ユークリッド距離がない場合、公平な方法で障害物の周りを巡ることを尊重する(迷路内のプレイヤーはオープンフィールドよりも近くに配置されるかもしれない)

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

すべてのプレイヤーをランダムに配置した後、あなたの基準(他のプレイヤーからの距離、スポーンまでの距離など)に基づいて周囲のノードのパフォーマンスを計算します。値の重みを調整し、パフォーマンスを正確に調整するために非線形に操作できます邪魔にならない理想的なケース(邪魔にならない平坦な長方形のグリッド)が必要です。世界を戻すときのパフォーマンスは似ているはずです。そこから、検索するノードの数、開始点を移動するためのしきい値、およびスポーンを終了してゲームを開始する前に実行する反復回数を指定します。


Anton Sherwood 07/29/2017.

プレイフィールドがトポロジカルトーラス(すなわち、「範囲外」とは反対側に入ることを意味する長方形)の場合、プレイヤーjx = (pjW/N) mod W, y = (qjH/N) mod Hスポーンしx = (pjW/N) mod W, y = (qjH/N) mod Hここで、 W,Hは矩形の寸法、 Nは選手の人数、 p,qは決定される整数でありp,q x = (pjW/N) mod W, y = (qjH/N) mod Hである。 それらは別個であり、(おそらく)相対的に素数であり、それほど遠くない。 スポーンポイントは斜めの「壁紙」パターンを形成します。

それは、プレイヤーが試合開始時にのみ発動すると仮定している。 後で出現する場合は、他のプレイヤーによって定義されたVoronoi図の頂点で、プレーヤーの現在の位置からできるだけ遠くに配置したいと思います。


NotThatGuy 07/31/2017.

どのように:

各プレイヤーは、非産卵ボックス (または円)で囲まれています

のように、あるプレーヤーの周りに広がり、そのプレーヤーの周りをたどる一定の大きさの四角形があります。他のプレーヤーはその四角形内に出現することはできません。

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

これは、初期のみの産卵または連続産卵のいずれかで機能します。

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

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

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

  • プレイヤーの数に基づいて非産卵ボックスのサイズを小さくする。
  • 各ボックスに最大X個の敵プレイヤーが出現できるようにする。
    • この数字は、あなたが行くにつれて増加します(0から始まります)。
    • 変種1:スポーンなしのボックスが小さく、スポーンボックスが大きくなりました。
    • 変種2:このプレイヤーに新しいスポーンがどれくらい近くにあるかに応じて(ボックス内にある場合) - 効率を実装するのが難しいかもしれない。

Related questions

Hot questions

Language

Popular Tags