> 编程
随着动作的评估和攻击组合的管理,伤害图在 LeekWars 中是必不可少的。 主要目标是能够根据对手评估每个盒子的危险程度,以便能够在回合结束时撤退到危险较小的盒子。 最简单的方法是创建一个关联数组:dangerMap=[ cell1:danger1 , cell2:danger2 , ... ],可能仅限于您可访问的单元格。 为此,可以使用多种算法
这通常是创建危险评估算法时首先想到的想法。这个想法如下:
/* -对于我的每个可访问单元格
-如果他能从他的牢房里射出我的牢房 为我的手机添加“危险分数” */
分数的选择是您算法不可或缺的一部分:您可以在其中输入“+1”,或计算可能造成的伤害,...有多少玩家就有多少种方法可以改进此评估😉
这个算法最大的问题就是在运算上极其贪婪!因此通常需要非常快速地对其进行优化。
首先要做的是防止你的韭菜“崩溃”......所以你必须在代码的某处对 getOperations() 进行测试,如果操作数太接近则退出循环限制:你只会对危险进行部分评估,但你的韭菜仍然能够移动最低限度😉
对于优化本身,指导您的方法的首要原则之一是避免在循环中多次重复相同的操作:在这种情况下,最好在表中准备内容然后记住。因此,例如,在计算“危险分数”的最内层循环中,如果您在其中调用 getStrength(Enemy),您将调用该函数数千次。这个想法是只计算一次敌人的力量并将其存储在变量之前进行内部循环。您将已经开始赚取数十万笔交易!因此,寻找不依赖于循环变量但仅依赖于“外部”循环的“内部”循环元素:然后您可以将这些元素追溯到它们的循环。
如果您的算法仍然很昂贵,另一个相当美观的优化途径是降低此评估的分辨率。例如,您可以不测试所有可访问的方块(您的和/或对手的方块),而是例如只测试那些需要偶数个移动点的方块。然后“足够”填充通过对相邻正方形的值进行插值(邻居的平均值、邻居的最大值、两条线之间的平均值的最大值等)所获得的间隙。这种方法不太准确,但以偶数 PM 为例,其消耗比第一种算法少约 4 倍。
要继续优化,您将不得不考虑预先计算的事情,通常是在第一轮,将某些您必须重新计算并且永远不会改变的东西存储在大型(或许多)数组中,甚至更新更新某些值每回合(在我们的例子中,敌人韭菜的力量)。
该算法在战斗开始时预先计算一次危险地图。价格低廉,精度低得多,但可以让您快速获得战斗地图上通常危险的区域列表。它包括在回合开始时评估战斗地图的每个单元格,所有允许您使用敌人拥有的武器射击它的单元格:一个方格只能从 5其他方块的得分将远低于 200 个其他方块可达的方块! 尝试撤退到“低危险”地区,让敌人留在“高危险”地区可能是明智的。
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.