MAGES’ MIGHT / STRATEGY WALKTHROUGH

这位巫师怎样做决定?AI世青赛示例程序 · 中文思路讲解

按程序实际执行的顺序,读懂采集、攻击、防御和补员。
不看大段代码,也能说清每一步的条件与做法。

开局安排准确条件防御分流中文讲解

沿着执行顺序,看清条件,区分选择与结果。

01这份程序具体做了什么巫师之战 · 程序思路讲解

这份程序先安排开局,再不断重复一套判断:先检查来袭法术,允许继续行动时,再进攻,最后检查是否补充果农。

采集安排

前 55 秒按队伍颜色指定采集坐标;开局检查一个位置的火果,并保存结果。

进攻安排

先判断水箭,再判断土箭,最后选择火燃烧或火箭。

防御安排

优先检查球类,按横坐标选择撑盾时机,再决定本轮是否继续进攻。

下面只讲这份程序实际写出的做法。程序不会主动释放球类或束类攻击,也没有使用水净化、土生长;它会识别对方的球类和束类来决定防御。

02开局:先设置,再连续生成果农巫师之战 · 程序思路讲解

  1. 获取对手英雄先保存对手英雄对象,后面的攻击判断会读取这个对象的魔力属性。
  2. 设置选果方式把选果函数交给英雄,让果农需要目标时按这个函数选择。
  3. 检查开局火果检查是否有符合指定位置和元素的水果,把“有”或“没有”保存下来。
  4. 设置双方的防御边界记录红方和蓝方各自使用的横坐标区间,后面判断来袭法术时会用到。
  5. 连续生成四位新果农连续执行四次生成指令,完成后才进入反复运行的主循环。
“连续生成四位”是额外生成四位,不是把总人数设为四位。开局自带一位,如果这段时间没有果农损失,生成结束时共有五位。

03采集:前 55 秒指定位置巫师之战 · 程序思路讲解

果农询问下一次目标时,程序先看当前比赛时间。时间不到 55 秒,就按我方颜色返回一个坐标。

询问目标时的情况程序给出的目标
不到 55 秒,红方横坐标 60,纵坐标 42
不到 55 秒,蓝方横坐标 40,纵坐标 42
正好 55 秒或更晚函数不再给出指定坐标,返回空值

这段选果安排没有按果农血量、果农位置或水果元素分别选择;同一时刻、同一队伍的果农会得到相同的坐标安排。

55 秒以后,程序没有写“改收火果”“轮流收三种水果”或“停止采集”。它只是没有返回指定坐标,之后如何处理空值,由竞技场的选果机制决定。

04开局火果:检查一次,保存结果巫师之战 · 程序思路讲解

程序逐个查看开局水果,要同时满足下面三项,才认定找到了目标:

检查项目要求
水果横坐标去掉小数部分后等于 44
水果纵坐标去掉小数部分后等于 48
水果元素火系

一旦找到就结束查找并记为“有”;全部看完还没找到,就记为“没有”。例如横坐标 44.8 去掉小数后是 44,因此并不是只接受原始坐标恰好等于 44 的水果。

这次检查只在开局设置时执行。后面选择火燃烧时,使用的是保存下来的结果,不会重新检查那颗水果现在还在不在。

这项检查和前面的选果坐标是两件事:选果坐标决定去哪里;开局火果检查则为后面是否选择火燃烧提供一个条件。

05每一轮:先防御,再攻击,最后补员巫师之战 · 程序思路讲解

检查来袭法术水箭 → 土箭→ 火燃烧或火箭检查补充果农允许行动需要等待:跳过本轮攻击和补员本轮结束,再检查下一轮
图中的箭头表示判断顺序,不表示每一项都会成功释放法术。

防御检查给出“允许行动”时,程序先执行进攻部分,然后才检查我方果农是否需要补充。如果防御检查给出“等待”,这两部分都会跳过,直接进入下一轮。

“等待”不是固定暂停几秒。程序没有写等待时长,而是下一轮重新读取敌方飞行法术,再判断一次。

06攻击:水箭和土箭分别判断巫师之战 · 程序思路讲解

进攻部分先看水箭,再看土箭。这是两个独立的判断,不是二选一;所以一轮可能先尝试水箭,再尝试土箭。

考虑的攻击第一层:至少满足一项第二层:也要至少满足一项
水箭我方水魔力不少于 6;或者比赛已经超过 100 秒对手火魔力少于 4.3;或者我方火魔力不少于 3
土箭我方土魔力不少于 6;或者比赛已经超过 100 秒对手水魔力少于 4.3;或者我方水魔力不少于 3

每种攻击都要通过两层判断。第一层通过、第二层没通过,仍不会尝试该攻击。

例如:水魔力为 6,已经通过水箭的第一层。若对手火魔力为 5、我方火魔力为 2,第二层的两个条件都不满足,这一轮不会尝试水箭。

超过 100 秒,只放宽第一层的门槛,第二层仍然要检查。正好 100 秒不算“超过”。程序没有在这里调用“能否施法”的检查方法,所以通过策略判断,不代表魔力和冷却一定满足实际施法要求。

07火系选择:先判断火燃烧,否则看火箭巫师之战 · 程序思路讲解

完成水箭和土箭判断后,程序检查下面三个条件是否同时满足:

条件具体要求
开局火果记录开局检查结果为“有”
当前时间不足 90 秒
对手果农数量超过两位,也就是至少三位

三项全满足,就尝试火燃烧,本轮不再判断火箭。只要有一项不满足,才进入火箭的判断。

火箭的判断层次至少满足一项
第一层我方火魔力不少于 6;或者比赛已经超过 100 秒
第二层对手土魔力少于 4.3;或者我方土魔力不少于 3

火箭也必须同时通过两层判断。它和火燃烧用的是同一个选择分支,不能把两者理解成这一轮一定都放。

选择火燃烧的三个条件中,没有检查火魔力或冷却。如果进入火燃烧分支但实际没能放出来,程序也没有写“再改放火箭”的备用处理。

08防御:先决定检查哪些法术巫师之战 · 程序思路讲解

每轮先取得敌方飞行法术列表,再把这个列表查看两遍。

  1. 第一遍:找有没有球类只要出现火球、水球或土球中的任意一种,就记为“有球类”,结束第一遍查找。这里不要求球类已经靠近。
  2. 第二遍:逐个筛选球类始终会进入后续位置判断;束类只有在整个列表中没有球类时,才进入位置判断。
  3. 其他类型跳过箭类不进入这份程序的护盾判断,其他不属于球类或束类的类型也会跳过。
只要列表里有球,即使球很远,也会暂时忽略束类。程序没有比较球和束哪个更近;这就是它实际采用的类型优先顺序。

09防御时机:只比较横坐标巫师之战 · 程序思路讲解

筛选后的法术,还要看横坐标有没有进入指定区间。程序按我方颜色选择基础边界;如果是束类,左边界再加 40,右边界再加 100。

我方颜色球类:横坐标范围束类:横坐标范围
红方大于 30,且不超过 40大于 70,且不超过 140
蓝方大于 60,且不超过 70大于 100,且不超过 170

每个区间都不包含左端,包含右端。例如红方面对球类:横坐标正好 30 不算进入,正好 40 算进入。

程序只读取横坐标,没有结合纵坐标,也没有按法术的速度计算还要多久到达。

程序按照列表给出的顺序查看,没有先按距离排序。找到第一个进入区间、需要处理的法术后,就会结束这一轮的防御检查。

10选盾:先克制,魔力不足再用同系巫师之战 · 程序思路讲解

法术进入区间后,程序按来袭元素挑盾。先检查克制护盾所需的魔力,至少有 3 才尝试;不足 3 时,再检查同系护盾所需的魔力。

来袭类型优先选择优先魔力不足时
火球或火束水魔力不少于 3:尝试水盾火魔力不少于 3:尝试火盾
水球或水束土魔力不少于 3:尝试土盾水魔力不少于 3:尝试水盾
土球或土束火魔力不少于 3:尝试火盾土魔力不少于 3:尝试土盾

两种魔力都不够,就不尝试撑盾。只要优先护盾的魔力条件通过,就不会再判断备用护盾;即使优先护盾因为其他施法条件没有成功,也没有再切换备用盾的处理。

这里的备用判断针对“优先护盾的魔力不足”,不是“优先护盾施法失败”。程序检查了魔力数值,但没有额外检查护盾冷却。

11防御结束:什么情况下继续行动巫师之战 · 程序思路讲解

防御函数最后交回一个“可以继续”或“先等待”的结果。它的意思是控制后续流程,不是在汇报护盾有没有挡住伤害。

这一轮的情况交回的结果接下来
没有需要处理的球类或束类,包括只有箭类的情况可以继续执行攻击,再检查补员
有需要处理的球类或束类,但没有一个进入区间先等待跳过攻击和补员,下一轮重新检查
找到一个需要处理、并且进入区间的法术可以继续做完选盾判断,执行攻击,再检查补员

如果先看到一个区间外的法术,程序会先记为“等待”,但仍然往后查看。后面只要找到一个区间内的法术,仍会改为“可以继续”并立刻结束检查。

即使进入区间时两种护盾都缺魔力,程序仍然交回“可以继续”。所以不能把这个结果讲成“已经安全”或“防御成功”。

12补充果农:攻击判断之后再检查巫师之战 · 程序思路讲解

只有本轮防御检查允许继续,程序才会执行攻击部分。攻击部分结束后,还要同时满足下面两项,才再生成一位果农:

检查项目必须满足
我方果农数量少于三位,也就是零位、一位或两位
当前时间不足 110 秒

每轮符合条件时只生成一位,下一轮再重新判断。正好三位不补,正好 110 秒也不补。如果这一轮防御检查要求等待,即使人数不足,也不会执行补员。

开局连续生成四位,和后续少于三位才补员,是两套不同的安排。程序没有要求后续一定把人数补回开局的五位。

13把整套做法串起来巫师之战 · 程序思路讲解

  1. 开局先安排设置按颜色选坐标,保存指定火果的开局检查结果,连续生成四位新果农。
  2. 每轮先看防御有球类时先看球类,没有球类时再看束类;用我方颜色和横坐标判断处理时机。
  3. 进入区间就选盾先看克制护盾的魔力,再看同系护盾;处理第一个符合位置条件的法术后结束防御检查。
  4. 允许行动才进攻依次判断水箭、土箭,然后在火燃烧与火箭之间选一个分支。
  5. 最后才看补员不足三位并且不到 110 秒时,生成一位果农。然后进入下一轮。
时间节点程序的实际变化
55 秒不再返回固定采集坐标
90 秒不再进入火燃烧分支
超过 100 秒三种箭的第一层判断不再要求本系魔力达到 6;第二层仍保留
110 秒不再执行后续补员
这份程序的主要特点:开局安排固定,后续防御按类型和位置分流,进攻同时参考双方魔力,并用时间切换部分条件。理解时要把“条件通过”“尝试施法”和“实际成功”分开。