> プログラミング
動きの評価と攻撃の組み合わせの管理により、ダメージ マップは LeekWars に不可欠です。 主な目的は、敵に応じて各ボックスの危険レベルを評価し、ターンの終わりに危険の少ないボックスに退却できるようにすることです。 最も簡単な方法は、連想配列 dangerMap=[ cell1:danger1 , cell2:danger2 , ... ] を作成することです。おそらくアクセス可能なセルに限定されます。 この目的のために、いくつかのアルゴリズムが可能です
これは通常、危険評価アルゴリズムを作成するときに頭に浮かぶ最初のアイデアです。アイデアは次のとおりです。
/* -アクセス可能なセルごとに ・対戦相手ごと -対戦相手のアクセス可能なセルごとに ・対戦相手の武器ごと
セルに「危険スコア」を追加する */
スコアの選択は、アルゴリズムの不可欠な部分です。スコアに「+1」を入れたり、潜在的に与えられるダメージを計算したりできます...この評価を改善する方法はプレイヤーの数だけあります 😉
このアルゴリズムの大きな問題は、操作が非常に貪欲であることです。したがって、通常は非常に迅速に最適化する必要があります。
最初にすべきことは、ネギが「クラッシュ」するのを防ぐことです...したがって、コードのどこかでgetOperations()のテストを行い、操作の数が近づきすぎた場合はループを終了する必要があります限界: 危険度の部分的な評価しかできませんが、ニラは最小限の動きしかできません 😉
最適化自体については、アプローチを導くべき最初の原則の 1 つは、ループ内で同じ操作を何度も繰り返さないようにすることです。したがって、たとえば、「危険スコア」を計算する最も内側のループで、getStrength(Enemy) への呼び出しを貼り付けると、その関数を何千回も呼び出すことになります。アイデアは、敵の強さを 1 回だけ計算し、内部ループを実行する前に変数に格納することです。あなたはすでに数十万の取引を獲得し始めています!したがって、ループ変数に依存せず、「外部」ループのみに依存する「内部」ループの要素を探します。これらの要素をループまで追跡できます。
アルゴリズムが高価なままである場合、最適化のためのもう 1 つの美的な方法は、この評価の解像度を下げることです。たとえば、すべてのアクセス可能な正方形 (自分および/または対戦相手のもの) をテストするのではなく、偶数の移動ポイントを必要とする正方形のみをテストすることができます。次に、隣接する正方形の値の補間によって得られたギャップを埋めることで「十分」です(隣接するものの平均、隣接するものの最大値、2 本の線間の平均値の最大値など)。このアプローチは精度が低くなりますが、偶数 PM の例では、最初のアルゴリズムの約 4 分の 1 しか消費しません。
最適化を継続するには、通常は最初のラウンドで、再計算する必要があり変更されない特定のものを大規模な (または多数の) 配列に格納するか、特定の値を更新して更新することを事前に計算することについて考える必要があります。各ターン(この例では、敵のネギの強さ)。
このアルゴリズムは、戦闘開始時に危険マップを 1 回事前計算します。安価で、精度ははるかに劣りますが、一般的に危険な戦闘マップのエリアのリストをすばやく取得できます。それは、ターンの開始時に、戦闘マップの各セルについて、敵が持っている武器でそれを撃つことを可能にするすべてのセルを評価することから成ります: 5からのみ到達できる正方形他の正方形は、200 個の他の正方形が到達可能な正方形よりもはるかに低いスコアになります。 「危険度の低い」地域に退却し、「危険度の高い」地域に敵を留まらせるのが賢明かもしれません。
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.