ムヌブボロノむ

序文の代わりに



グルゞアの非ロシア語孊校でのロシア語レッスン。

先生

-Dati、これは理解するこずは䞍可胜です。これは芚えおおく必芁がありたす。FROMYOUは別に曞かれおいたす。

KVAS-䞀緒に。


ここで冗談が取られたす 。



はじめに



この蚘事は、RPG芁玠を備えたタヌンベヌスの戊略ゲヌムであるWesnothゲヌムに觊発されたした。 このゲヌムでは、キャラクタヌは六角圢のポリゎンで構成されるマップ䞊を動き回りたす。 したがっお、四方を囲たれたキャラクタヌは、6人の敵キャラクタヌに攻撃されたす。 このため、ゲヌムの戊術的な芁玠は非垞に重芁です。 疑問が生じたしたポリゎンの固定ゞオメトリを持぀マップから任意のゞオメトリを持぀マップぞの移行は、ゲヌムプレむにどのように圱響したすか



この投皿では、ランダムなゲヌムカヌドずしお「ボロノむ図」を䜿甚する可胜性に぀いお曞くこずにしたした。 ネットワヌク䞊でボロノむ図を構築するためのアルゎリズムの説明をいく぀か芋぀けたした。 しかし、私が偶然読んだものはすべお、衚面的なものであるか、アカデミックな蚀語で曞かれおいたす。 䞀般に、アルゎリズムの即時実装に適した説明は芋぀かりたせんでした。 アルゎリズムのすべおの埮劙な点を明確に理解するこずなく、実装を開始する必芁がありたした。 ネットワヌク䞊で異なる蚀語の゜ヌスコヌドを芋぀けたしたが、必芁な蚀語に翻蚳しおタスクに適応するための知識がただ䞍足しおいたした。 そのため、「少し䞞いホむヌルず柔らかいサドルを䜿甚しお」ホむヌルを再発明するこずにしたした。

おそらく、読者の1人が、゜ヌスコヌドを䜿甚しお同様のタスクの説明を芋぀けたした。 その埌、コメントのリンクを残しおください-私が埗たものず比范したしょう。



アルゎリズム



だから...「指の䞊の」シリヌズは続きたす。 りィキペディアでボロノむ図に぀いおロシア語で読むこずができたす[ 1 ]。 䞀番䞋の行は、プレヌン䞊のランダムなポむント䞭心のセット簡単にするために2Dの堎合を考えたすで、この図はポリゎンのコレクションであり、ポリゎン内のすべおのポむントは他のポリゎンの「䞭心」よりも「䞭心」に近くなりたす。 したがっお、2぀のポリゎン間の境界䞊のすべおのポむントは䞡方の䞭心から等しい距離にあり、ポリゎンの頂点は3぀以䞊の䞭心から䞀床に等距離にありたす。

ダむアグラムを䜜成する最も「簡単な」方法は、すべおの䞭心の間に「䞭間垂線」を䜜成するこずです。 これらのセグメントの䞭倮に䜍眮する䞭心のペアを接続するセグメントに垂盎。 次に、埗られた垂線の亀点を芋぀けお切り取る必芁がありたす。 ただし、ほずんどの堎合、蚈算を実行する必芁がありたすOn ^ 2 * log n。

いわゆるのアルゎリズムがありたす 「掃匕線」掃匕線、フォヌチュンのアルゎリズム[ 2 ]。 その蚈算の耇雑さはOnlognです。 以䞋に説明したす。



アルゎリズムの本質


このアルゎリズムの基本は、補助オブゞェクト盎線RFをスむヌプするの䜿甚です。 垂盎でも氎平でもかたいたせん。 倧きなY倀から小さなY倀に移動する氎平3Dを䜿甚したす。

䞀番䞋の行は、RFPの各䜍眮で、この行より䞊でその䞊にあるポむントのみが考慮されるずいうこずです。 同時に、「䞭心」のそれぞれに察しお攟物線が䜜成され、その䞊の点は「䞭心」およびRFから等距離にありたす。 この堎合、「䞭心」は察応する攟物線の焊点であり、RFPは同じ攟物線のディレクタヌです 。

攟物線方皋匏の圢匏は次のずおりです。

  y =x-xf^ 2 + yf ^ 2-L ^ 2/2 *yf-L 


ここで、 xf 、 yfは攟物線ボロノむ倚角圢の䞭心の焊点の座暙です。

LはRFPの䜍眮です凊理䞭の珟圚のむベントのY座暙。

すべおの攟物線の䞋から゚ンベロヌプを構築するず、いわゆる 「海岞線」ビヌチラむン。 この区分曲線は、アルゎリズムで重芁な圹割を果たしたす。 「攟物線の砎片」の亀差点ブレヌクポむントず呌びたしょうは、ダむアグラムのポリゎンの境界䞊にありたす。 2぀のブレヌクポむントが1぀のポむントに収束するず、「アヌチ」の1぀攟物線の1぀が「厩壊」したす。 それに隣接する2぀のアヌチは互いに接続されおいたす。 これは、チャヌトポリゎンの䞊郚を圢成したす。

したがっお、タスクは2぀のむベントの怜出ず凊理に芁玄されたす。怜蚎䞭のセンタヌのリストに新しいポむントサむトむベントを远加し、頂点円むベントを疑いたす[ 3 ]。 など...このようなものは、さたざたな蚀語でネット䞊で説明したした。 そしお、この抂念レベルでは、すべおが非垞に耇雑に芋えるわけではありたせん。 しかし、怜出はどの皋床正確に段階的に実行されたすか そしお、これらのむベントをどうすればいいのでしょうか

簡単な蚀葉で述べようず思いたす。



デヌタ構造


前述のように、アルゎリズムの䞻芁なオブゞェクトはむベントですサむトむベントずサヌクルむベント。 これらのむベントはリストに配眮され、私の堎合はY座暙の降順で゜ヌトされおいたす。 Y座暙の倀が倧きいむベントは、キュヌの䞊䜍に配眮され、より早く凊理されたす。 したがっお、最初に必芁なのは、むベントを栌玍するための順序付きリストです。

次に必芁なのは二分朚です。 このツリヌには、3぀のタむプのノヌドが配眮されたす。Arc-アヌチ攟物線の䞀郚。このノヌドは、攟物線の焊点の座暙ず、円むベントぞのリンクある堎合を栌玍する必芁がありたす。 BP-ブレヌクポむント、2぀の攟物線の亀点。 BPOwnerはサブツリヌのルヌトであり、その子はタむプBPのノヌドです。 BPおよびBPOwnerノヌドは、顔ぞのリンクを保存する必芁がありたす。 顔を別のリストに保存する必芁がありたす、なぜなら サヌクルむベントを凊理するず、BPおよびBPOwnerノヌドが削陀されたす。

出版物[ 6 ]で簡単に芋぀けるこずができるArcおよびBPのノヌドぞの察応。 BPOwnerには盎接的な名前はありたせん-サブツリヌのルヌトだけです。 ゜フトりェア実装の利䟿性のためだけに名前を付けたした。

ボロノむ図の兞型的な二分朚図を私が想像しおいるように図に瀺したす。 1。



図 1.バむナリツリヌ。

この図では、朜圚的に存圚するサヌクルむベントをすぐに匷調衚瀺できたす。 巊を芋るず、Arc1、Arc2、Arc3は3぀のトリックを圢成したすが、1぀の盎線䞊にある可胜性は高くありたせん。 サヌクルむベントが衚瀺される堎所は他にありたせん。 トリプルは{Arc3 Arc3 Arc2}、{Arc3 Arc2 Arc2}および{Arc2 Arc2 Arc1}のたたです。 このようなツリヌ構築スキヌムは冗長ですが、分析が容易です。

デヌタ構造は、[ 6 ]でより詳现に調べるこずができたす。 おそらく私の発衚はその出版物で発衚されたものずは異なりたすが、私にずっおは簡単です。



メむンサむクル


  1. デヌタの初期化。
  2. 行は空ではありたせんが

    1. キュヌから最初のむベントを切り取りたすY座暙の最倧倀を䜿甚
    2. Ifむベント= =サむトむベント

      ProcessSiteむベント
    3. その他

      ProcessCircleむベント


  3. バむナリツリヌで参照されおいるすべおの面を仕䞊げたす。


本圓に簡単です。 むベントハンドラヌのすべおの魔法。



ポむントむベントの凊理


バむナリツリヌのポむントむベントずは䜕ですか RFPが次のポむントに到達するず、新しい攟物線がツリヌに远加されたす。 最初に、ZPアルゎリズムに埓っお、むベントからむベントに移動するこずに泚意しおくださいデモアニメヌションでは、この盎線はスムヌズに移動したす。次に、最初は攟物線は垂盎方向の光線です。 この光線ず攟物線の1぀ずの亀点で、2぀の「ブレヌクポむント」BPが䞀床に圢成されたす。 したがっお、ツリヌ内のポむントの各むベントには、察応する光線の亀差が発生する攟物線がありたす。 これは、ツリヌ党䜓のルヌトから開始し、このむベントのX座暙ずBPOwnerおよびBPノヌドを比范する降䞋法によっお簡単に実行できたす。 アヌチが出䌚うたで降䞋したす。 アヌチにキュヌ内の既存のサヌクルむベントぞのリンクが含たれおいる堎合、このむベントをキュヌから削陀し、このむベントぞのリンクをこのアヌチずその隣の巊右のアヌチから削陀する必芁がありたす。 次に、アヌチ以䞋のArc1を参照の代わりに、フォヌムのサブツリヌが䜜成されたす。

  BPOwner
      / \
     BP BP
   / \ / \
 Arc1 Arc2 Arc2 Arc1 


ツリヌの構造が倉曎されたので、サヌクルむベントを怜玢しおツリヌを巊から右に実行する必芁がありたす。 これを行うには、アヌチのトリプルを連続しお取埗し、察応する攟物線の焊点の座暙を確認しお共盎線性を確認する必芁がありたす。 3぀の焊点が1぀の盎線䞊にない堎合は、それらに共通の円を䜜成できたす。 この円の䞋のポむントがRFの䞋にある堎合は、キュヌに円むベントを远加できたす。 円の最䞋郚はむベントが発生する堎所であり、䞭心はボロノむ倚角圢の最䞊郚が配眮されるポむントです。

芁玄するず、ポむントむベントはノヌドをツリヌに远加するだけで、むベントキュヌ内のむベントを埪環させるだけです。 それらが発生しおも、それ以䞊䜕も行われたせん。 ポむントむベントが発生するず、攟物線の亀点であるBPの座暙も蚈算されたせん。 「メむンマゞック」は、サヌクルむベントハンドラヌで行われたす。



「サヌクルむベント」の凊理


各サヌクルむベントには、このむベントが発生したずきに削陀されるアヌチ「厩壊」、䞊蚘参照ぞのリンクが含たれおいる必芁がありたす。 以前は、サヌクルむベントを怜出するために、アヌチのトリプルが考慮されるず曞かれおいたした。 したがっお、䞭倮のアヌチぞのリンク、぀たり X座暙倀が他の2぀のアヌチの察応する倀の間にあるものに。 䞭倮のむベントず同じサヌクルむベントぞのリンクも、これらの隣接するアヌチに保存する必芁がありたす。 これに぀いおは特に必芁はありたせんが。 「オンザフラむ」で、䞭倮のアヌチにある2぀の隣接するアヌチ巊ず右のアヌチぞのリンクを曞き留める方が簡単です。 これにより、目的のアヌチを持぀次のブランチを探すためにツリヌを歩く必芁がなくなりたすツリヌはバむナリであるため、残りの2぀のアヌチのいずれかが次のブランチにありたす。

サヌクルむベントの凊理は、削陀されたアヌチを盎接制限するブレヌクポむントの座暙を曎新するこずで構成されたす。 次に、アヌチずそれに関連付けられた2぀のブレヌクポむントが削陀されたす。 その埌、ツリヌを再構築する必芁がありたす。 その結果、新しいBPノヌドが远加され、結果のサブツリヌが1レベル䞊に移動したす...

テキストでは、このような手順はかなり難しいず感じられたす。 いずれにせよ、私にずっおは、グラフず二分朚の理論に真剣な知識を持たない人ずしお、これは重芁な䜜業でした。したがっお、図にも説明したす。 2。



図 2サヌクルむベントの凊理



結果



ここで、ダむアグラムの特城的なビュヌ、぀たり 任意の倚角圢のゞオメトリを持぀ゲヌムカヌドのビュヌ。



図3ゲヌムカヌド

「䞭心」のこの地図私は芚えおいたす-これは、゚リア党䜓にランダムに分垃する最初のポむントのセットです文字がありたす。 これらのポリゎンの゚ッゞを通しお、敵のキャラクタヌはキャラクタヌを攻撃できたす。 䞊の写真では、「グリヌンマン」ずは...いや、アルコヌル䟝存症ではありたせん。 緑のシル゚ットが配眮されおいる埋め立お地は、敵の移動ごずに可胜な攻撃の数の芳点から安党な堎所です最倧4。 しかし、赀い文字は䞍運でした。 非友奜的な集団による最倧8回の攻撃がそれに察しお行われたす。



戊術



マップ䞊の各ポリゎンに「通過コスト」を割り圓おるこずができたす。 それ以倖の堎合は、「亀差コスト」をポリゎンの境界に割り圓おるか、䞡方の組み合わせを䜿甚したす境界亀差コスト+通過コストの半分。 たた、ポリゎンの゚リアたたはマップグリッドのカバヌポむントの数に応じお、さたざたなボヌナスアヌティファクトの発生頻床、むベントの発生など、保護ポむント、芁塞を構築するためのリ゜ヌスなどを割り圓おるこずができたす。 これはすでに玠晎らしい戊術的な機䌚を提䟛したす。 さらに、滞圚できる適切なトレヌニング堎を遞択する必芁がありたす。 冒頭に曞いたように、倧きな蚓緎堎はより倚くの境界を持぀こずができたす。぀たり、敵の1回の動きでより倚くの攻撃を行うこずができたす。 ただし、倧きなトレヌニンググラりンドは倧きなボヌナスを意味したす境界線の数ではなく、゚リアに応じたボヌナスの察象ずなりたす。 これは、最小数の境界で最倧面積のポリゎンが特に䟡倀があるこずを意味したす。 これはMaxiMinタスクであり、自動化が簡単です。 AIで受け取ったボヌナスの䜿甚を自動化するこずはより困難です。

A *1぀の投皿の「TODO」を䜿甚しおパスを怜玢できたす。 パスを敷蚭するためのシステムに入るこずができたす-最初に、キャラクタヌを手動で保持し、パスを蚘録しおから、䜜成した「りェむポむント」を自動化に䜿甚できたす。 しかし、それはおそらく䞍䟿すぎるでしょう。 ゲヌムプレむはマむナスの圱響を䞎える可胜性がありたす。

今、芁塞に぀いお。 各蚓緎堎には、芁塞を䜜成するための特定のリ゜ヌスセットが必芁です。芁塞のタむプず構造の構築速床は、これらに䟝存したす。 たさに「文明」が埗られたす。 キャラクタヌはアクションポむントを䜿甚しお、遞択した䜍眮で匷化したす。 圌らは2぀のグルヌプに分けるこずができたす-防埡ず攻撃。 同時に、保護ODは、敵の攻撃シヌルドを䞊げる、矢をかわす、攻撃をブロックするなどの間に芁塞ず防埡掻動を構築するために費やされ、攻撃者は攻撃䞭ず防埡反撃、軍瞮の䞡方に費やすこずができたす。 ZPG「MyBrute」に蚀及するこずができたす。アバタヌは、防埡するずきに、敵からの打撃を受けるこずなく、むニシアチブを奪い、それに応じお攻撃するこずができたす。

各キャラクタヌは芁塞のセットを持぀こずができ、その構造は蚓緎されたす。 各タむプの芁塞は、異なる皋床の保護および/たたはボヌナスを䞎えたす。 芁塞からのボヌナスに加えお、埋め立お地自䜓はランダムなボヌナスを䞎えるこずができたす。 特定の堎所に長時間滞圚するず、キャラクタヌは、特定のポリゎンの貎重な䜕かを芋぀けたり、隠されたプロパティを「発芋」する確率を高めたす。

このような掚論を続けるこずができたす。 挔習の䜙地は十分にありたすが、蚘事のトピックから逞​​脱したす。



結論



ゲヌムカヌドのゞオメトリを倉曎するず、必然的にゲヌムの戊術に重倧な倉曎より良いず思いたすが発生したす。 远加の戊術レベル、戊闘の転換点で正しい方向にスケヌルを正しく䞊回る胜力がありたす。 さらに、このアプロヌチにより、ゲヌムカヌドが動的になり、トポロゞがロヌカルたたはグロヌバルに倉曎されたす。 ここでは、STALKERゲヌムの可倉ロケヌションの考えを思い起こせずにはいられたせんでした私の意芋では。 2Dでは、これを実装するのはそれほど難しくありたせん。 しかし、ボロノむ図も3D甚に構築されおいるこずを忘れないでください。

ご枅聎ありがずうございたした あなたのコメント...



参照資料



  1. ボロノむ図
  2. ボロノむ図ずビヌチでの䞀日
  3. Fortuneのアルゎリズムによる平面ボロノむ図
  4. 倚角圢マップの生成
  5. ボロノむ図
  6. フォヌチュンスむヌプアルゎリズム



All Articles