沿着执行顺序,看清条件,区分选择与结果。
01这份程序具体做了什么巫师之战 · 程序思路讲解
这份程序先安排开局,再不断重复一套判断:先检查来袭法术,允许继续行动时,再进攻,最后检查是否补充果农。
采集安排
前 55 秒按队伍颜色指定采集坐标;开局检查一个位置的火果,并保存结果。
进攻安排
先判断水箭,再判断土箭,最后选择火燃烧或火箭。
防御安排
优先检查球类,按横坐标选择撑盾时机,再决定本轮是否继续进攻。
02开局:先设置,再连续生成果农巫师之战 · 程序思路讲解
- 获取对手英雄先保存对手英雄对象,后面的攻击判断会读取这个对象的魔力属性。
- 设置选果方式把选果函数交给英雄,让果农需要目标时按这个函数选择。
- 检查开局火果检查是否有符合指定位置和元素的水果,把“有”或“没有”保存下来。
- 设置双方的防御边界记录红方和蓝方各自使用的横坐标区间,后面判断来袭法术时会用到。
- 连续生成四位新果农连续执行四次生成指令,完成后才进入反复运行的主循环。
03采集:前 55 秒指定位置巫师之战 · 程序思路讲解
果农询问下一次目标时,程序先看当前比赛时间。时间不到 55 秒,就按我方颜色返回一个坐标。
| 询问目标时的情况 | 程序给出的目标 |
|---|---|
| 不到 55 秒,红方 | 横坐标 60,纵坐标 42 |
| 不到 55 秒,蓝方 | 横坐标 40,纵坐标 42 |
| 正好 55 秒或更晚 | 函数不再给出指定坐标,返回空值 |
这段选果安排没有按果农血量、果农位置或水果元素分别选择;同一时刻、同一队伍的果农会得到相同的坐标安排。
04开局火果:检查一次,保存结果巫师之战 · 程序思路讲解
程序逐个查看开局水果,要同时满足下面三项,才认定找到了目标:
| 检查项目 | 要求 |
|---|---|
| 水果横坐标 | 去掉小数部分后等于 44 |
| 水果纵坐标 | 去掉小数部分后等于 48 |
| 水果元素 | 火系 |
一旦找到就结束查找并记为“有”;全部看完还没找到,就记为“没有”。例如横坐标 44.8 去掉小数后是 44,因此并不是只接受原始坐标恰好等于 44 的水果。
这次检查只在开局设置时执行。后面选择火燃烧时,使用的是保存下来的结果,不会重新检查那颗水果现在还在不在。
05每一轮:先防御,再攻击,最后补员巫师之战 · 程序思路讲解
防御检查给出“允许行动”时,程序先执行进攻部分,然后才检查我方果农是否需要补充。如果防御检查给出“等待”,这两部分都会跳过,直接进入下一轮。
06攻击:水箭和土箭分别判断巫师之战 · 程序思路讲解
进攻部分先看水箭,再看土箭。这是两个独立的判断,不是二选一;所以一轮可能先尝试水箭,再尝试土箭。
| 考虑的攻击 | 第一层:至少满足一项 | 第二层:也要至少满足一项 |
|---|---|---|
| 水箭 | 我方水魔力不少于 6;或者比赛已经超过 100 秒 | 对手火魔力少于 4.3;或者我方火魔力不少于 3 |
| 土箭 | 我方土魔力不少于 6;或者比赛已经超过 100 秒 | 对手水魔力少于 4.3;或者我方水魔力不少于 3 |
每种攻击都要通过两层判断。第一层通过、第二层没通过,仍不会尝试该攻击。
例如:水魔力为 6,已经通过水箭的第一层。若对手火魔力为 5、我方火魔力为 2,第二层的两个条件都不满足,这一轮不会尝试水箭。
07火系选择:先判断火燃烧,否则看火箭巫师之战 · 程序思路讲解
完成水箭和土箭判断后,程序检查下面三个条件是否同时满足:
| 条件 | 具体要求 |
|---|---|
| 开局火果记录 | 开局检查结果为“有” |
| 当前时间 | 不足 90 秒 |
| 对手果农数量 | 超过两位,也就是至少三位 |
三项全满足,就尝试火燃烧,本轮不再判断火箭。只要有一项不满足,才进入火箭的判断。
| 火箭的判断层次 | 至少满足一项 |
|---|---|
| 第一层 | 我方火魔力不少于 6;或者比赛已经超过 100 秒 |
| 第二层 | 对手土魔力少于 4.3;或者我方土魔力不少于 3 |
火箭也必须同时通过两层判断。它和火燃烧用的是同一个选择分支,不能把两者理解成这一轮一定都放。
08防御:先决定检查哪些法术巫师之战 · 程序思路讲解
每轮先取得敌方飞行法术列表,再把这个列表查看两遍。
- 第一遍:找有没有球类只要出现火球、水球或土球中的任意一种,就记为“有球类”,结束第一遍查找。这里不要求球类已经靠近。
- 第二遍:逐个筛选球类始终会进入后续位置判断;束类只有在整个列表中没有球类时,才进入位置判断。
- 其他类型跳过箭类不进入这份程序的护盾判断,其他不属于球类或束类的类型也会跳过。
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把整套做法串起来巫师之战 · 程序思路讲解
- 开局先安排设置按颜色选坐标,保存指定火果的开局检查结果,连续生成四位新果农。
- 每轮先看防御有球类时先看球类,没有球类时再看束类;用我方颜色和横坐标判断处理时机。
- 进入区间就选盾先看克制护盾的魔力,再看同系护盾;处理第一个符合位置条件的法术后结束防御检查。
- 允许行动才进攻依次判断水箭、土箭,然后在火燃烧与火箭之间选一个分支。
- 最后才看补员不足三位并且不到 110 秒时,生成一位果农。然后进入下一轮。
| 时间节点 | 程序的实际变化 |
|---|---|
| 55 秒 | 不再返回固定采集坐标 |
| 90 秒 | 不再进入火燃烧分支 |
| 超过 100 秒 | 三种箭的第一层判断不再要求本系魔力达到 6;第二层仍保留 |
| 110 秒 | 不再执行后续补员 |