❄️ 冰锋竞速 · 强化篇

方法库(API 参考手册)完全指南

以下是冰锋竞速战场中你可以使用的所有方法和属性。熟练掌握它们,是成为顶尖指挥官的必经之路。

一、🧊 水晶属性

hero.x

你的水晶中心的 x(水平)坐标。当你被分配到蓝队时,坐标会自动镜像翻转,你不需要为此编写额外代码。

baseX = hero.x hero.build("archer", baseX + 10, hero.y)
var baseX = hero.x; hero.build("archer", baseX + 10, hero.y);
auto baseX = hero.x; hero.build("archer", baseX + 10, hero.y);

hero.y

你的水晶中心的 y(垂直)坐标

baseY = hero.y hero.build("cannon", hero.x + 5, baseY)
var baseY = hero.y; hero.build("cannon", hero.x + 5, baseY);
auto baseY = hero.y; hero.build("cannon", hero.x + 5, baseY);

hero.color

你所属的队伍颜色,值为 "red"(红队)或 "blue"(蓝队)。你可以用它来判断自己当前属于哪一方,但通常不需要根据颜色编写不同逻辑,因为坐标系统已经自动处理了镜像。

if hero.color == "red": hero.build("archer", "A")
if (hero.color === "red") { hero.build("archer", "A"); }
if (hero.color == "red") { hero.build("archer", "A"); }

hero.time

从战斗开始到现在实际经过的时间,单位为秒。你可以用它来制定基于时间的策略,比如在战斗进行到一定时间后切换建造策略。

if hero.time > 30: hero.build("cannon", "B")
if (hero.time > 30) { hero.build("cannon", "B"); }
if (hero.time > 30) { hero.build("cannon", "B"); }

hero.health

你的水晶当前生命值,是一个数字。当生命值降到 0 时,你就输了。时刻关注它,在生命值告急时及时调整防御策略。

if hero.health < hero.maxHealth * 0.3: # 生命值低于30%,紧急释放爆炸技能保命 hero.special("burst", hero.x + 5, hero.y)
if (hero.health < hero.maxHealth * 0.3) { // 生命值低于30%,紧急释放爆炸技能保命 hero.special("burst", hero.x + 5, hero.y); }
if (hero.health < hero.maxHealth * 0.3) { // 生命值低于30%,紧急释放爆炸技能保命 hero.special("burst", hero.x + 5, hero.y); }

hero.maxHealth

你的水晶最大生命值,是一个数字。可以配合 hero.health 计算当前生命值百分比,用于触发紧急防御策略。

healthPercent = hero.health / hero.maxHealth
var healthPercent = hero.health / hero.maxHealth;
auto healthPercent = hero.health / hero.maxHealth;

hero.type

英雄的类型。在本关卡中,它的值始终是 "base",代表你的角色就是水晶本身。

if hero.type == "base": hero.build("archer", "A")
if (hero.type === "base") { hero.build("archer", "A"); }
if (hero.type == "base") { hero.build("archer", "A"); }

二、⚡ 法力值与资源

hero.mana

你当前拥有的法力值,是一个数字。建造和升级防御塔都需要消耗法力值(每次 25 点)。法力值上限为 100,注意不要让法力溢出浪费。

if hero.mana >= 25: hero.build("archer", "A")
if (hero.mana >= 25) { hero.build("archer", "A"); }
if (hero.mana >= 25) { hero.build("archer", "A"); }

三、🏗️ 建造与升级

hero.build(towerType, place)

预设点位上建造一座防御塔。点位名称从 "A""I"。你只能在己方颜色或紫色的格子上建造。

建造需要消耗法力值,如果法力不足,你的代码会自动暂停等待,直到法力值积累到足够为止。

如果该点位已被对手的塔占据,则无法在此建造。如果该点位已有**你自己的塔**,则会将该塔升级到下一级;如果传入的 towerType 与已有塔类型不同,则会替换塔的类型,同时等级在原有基础上提升。

可用的 towerType 包括:

你也可以通过 hero.availableTowerTypes 属性在代码中获取完整列表。

hero.build("archer", "A") hero.build("cannon", "D") # 在A点再次建造弓箭塔,会将A点的弓箭塔升级 hero.build("archer", "A")
hero.build("archer", "A"); hero.build("cannon", "D"); // 在A点再次建造弓箭塔,会将A点的弓箭塔升级 hero.build("archer", "A");
hero.build("archer", "A"); hero.build("cannon", "D"); // 在A点再次建造弓箭塔,会将A点的弓箭塔升级 hero.build("archer", "A");

hero.build(towerType, x, y)

在包含坐标点 {x, y} 的格子中心建造一座防御塔。你只能在己方颜色或紫色的格子上建造。

建造需要消耗法力值,如果法力不足,你的代码会自动暂停等待,直到法力值积累到足够为止。

如果该格子已被对手的塔占据,则无法在此建造。如果该格子已有你自己的塔,则会将该塔升级到下一级;如果传入的 towerType 与已有塔类型不同,则会替换塔的类型,同时等级在原有基础上提升。

该函数返回所建造的塔对象,你可以保存它以便后续对该塔进行操作(如设置瞄准模式)。

myTower = hero.build("mage", 15, 40) # 返回塔对象,可以用于后续操作 hero.setTargeting(myTower, "strong")
var myTower = hero.build("mage", 15, 40); // 返回塔对象,可以用于后续操作 hero.setTargeting(myTower, "strong");
auto myTower = hero.build("mage", 15, 40); // 返回塔对象,可以用于后续操作 hero.setTargeting(myTower, "strong");

hero.canBuildAt(x, y)

检查包含坐标 {x, y} 的格子是否可以建造防御塔。如果可以建造或可以升级已有的己方塔,则返回 true;否则返回 false。适合在代码中动态判断某个位置是否可用。

if hero.canBuildAt(15, 40): hero.build("archer", 15, 40)
if (hero.canBuildAt(15, 40)) { hero.build("archer", 15, 40); }
if (hero.canBuildAt(15, 40)) { hero.build("archer", 15, 40); }

hero.towerTypes

返回一个列表,包含所有可用的防御塔类型名称。你可以用它来遍历所有塔类型,结合 hero.getTowerParameters() 进行策略分析。等同于 hero.availableTowerTypes

types = hero.towerTypes for t in types: params = hero.getTowerParameters(t)
var types = hero.towerTypes; for (var i = 0; i < types.length; i++) { var params = hero.getTowerParameters(types[i]); }
auto types = hero.towerTypes; for (int i = 0; i < types.size(); i++) { auto params = hero.getTowerParameters(types[i]); }

hero.getTowerParameters(towerType, level=1)

返回指定 towerType 在指定等级(默认为 1 级)下的详细参数对象。用它可以在代码中动态获取防御塔的各项数据,帮助你做出更精准的建造决策。

返回的对象包含以下字段:

archerInfo = hero.getTowerParameters("archer", 3) # archerInfo.attackDamage -- 3级弓箭塔的攻击伤害 # archerInfo.attackRange -- 3级弓箭塔的攻击范围 # archerInfo.cost -- 建造费用
var archerInfo = hero.getTowerParameters("archer", 3); // archerInfo.attackDamage -- 3级弓箭塔的攻击伤害 // archerInfo.attackRange -- 3级弓箭塔的攻击范围 // archerInfo.cost -- 建造费用
auto archerInfo = hero.getTowerParameters("archer", 3); // archerInfo.attackDamage -- 3级弓箭塔的攻击伤害 // archerInfo.attackRange -- 3级弓箭塔的攻击范围 // archerInfo.cost -- 建造费用

hero.setTargeting(tower, targetingType)

设置指定防御塔的目标选择策略,决定塔在多个怪物进入射程时优先攻击哪一个。不同的策略适用于不同的战术场景。

targetingType 参数可以是以下值之一:

myTower = hero.build("cannon", "B") # 让加农炮优先攻击生命值最低的怪物,快速收割残血 hero.setTargeting(myTower, "weak")
var myTower = hero.build("cannon", "B"); // 让加农炮优先攻击生命值最低的怪物,快速收割残血 hero.setTargeting(myTower, "weak");
auto myTower = hero.build("cannon", "B"); // 让加农炮优先攻击生命值最低的怪物,快速收割残血 hero.setTargeting(myTower, "weak");

四、🗼 防御塔查询

hero.findTowers()

返回一个列表,包含地图上所有防御塔(包括你的和对手的)。你可以用它来总览全局塔的分布情况。

allTowers = hero.findTowers() for t in allTowers: pass # t.type, t.level, t.x, t.y
var allTowers = hero.findTowers(); for (var i = 0; i < allTowers.length; i++) { var t = allTowers[i]; // t.type, t.level, t.x, t.y }
auto allTowers = hero.findTowers(); for (int i = 0; i < allTowers.size(); i++) { auto t = allTowers[i]; // t.type, t.level, t.x, t.y }

hero.findMyTowers()

返回一个列表,包含地图上你自己的所有防御塔。你可以用它来检查自己的防御布局,决定哪些塔需要升级。

myTowers = hero.findMyTowers() for t in myTowers: if t.type == "archer" and t.level < 3: # 把低等级弓箭塔升级 hero.build("archer", t.x, t.y)
var myTowers = hero.findMyTowers(); for (var i = 0; i < myTowers.length; i++) { var t = myTowers[i]; if (t.type === "archer" && t.level < 3) { // 把低等级弓箭塔升级 hero.build("archer", t.x, t.y); } }
auto myTowers = hero.findMyTowers(); for (int i = 0; i < myTowers.size(); i++) { auto t = myTowers[i]; if (t.type == "archer" && t.level < 3) { // 把低等级弓箭塔升级 hero.build("archer", t.x, t.y); } }

hero.findEnemyTowers()

返回一个列表,包含地图上对手的所有防御塔。你可以用它来分析对手的防御布局,制定针对性策略。

enemyTowers = hero.findEnemyTowers() # 查看对手有多少座塔 count = len(enemyTowers)
var enemyTowers = hero.findEnemyTowers(); // 查看对手有多少座塔 var count = enemyTowers.length;
auto enemyTowers = hero.findEnemyTowers(); // 查看对手有多少座塔 auto count = enemyTowers.size();

五、⚙️ 防御塔属性

以下属性可以通过防御塔对象访问(例如通过 hero.build() 的返回值,或通过 hero.findMyTowers() 列表中的元素)。

tower.x

该防御塔中心的 x(水平)坐标。当你被分配到蓝队时,坐标会自动镜像翻转。

myTowers = hero.findMyTowers() firstTower = myTowers[0] towerX = firstTower.x
var myTowers = hero.findMyTowers(); var firstTower = myTowers[0]; var towerX = firstTower.x;
auto myTowers = hero.findMyTowers(); auto firstTower = myTowers[0]; auto towerX = firstTower.x;

tower.y

该防御塔中心的 y(垂直)坐标

myTowers = hero.findMyTowers() firstTower = myTowers[0] towerY = firstTower.y
var myTowers = hero.findMyTowers(); var firstTower = myTowers[0]; var towerY = firstTower.y;
auto myTowers = hero.findMyTowers(); auto firstTower = myTowers[0]; auto towerY = firstTower.y;

tower.attackDamage

该防御塔的攻击伤害值。这个值会随塔的等级提升而增长。

myTowers = hero.findMyTowers() for t in myTowers: dmg = t.attackDamage
var myTowers = hero.findMyTowers(); for (var i = 0; i < myTowers.length; i++) { var dmg = myTowers[i].attackDamage; }
auto myTowers = hero.findMyTowers(); for (int i = 0; i < myTowers.size(); i++) { auto dmg = myTowers[i].attackDamage; }

tower.attackCooldown

该防御塔两次攻击之间的冷却间隔,单位为秒。数值越小,攻击越频繁。

myTowers = hero.findMyTowers() cd = myTowers[0].attackCooldown
var myTowers = hero.findMyTowers(); var cd = myTowers[0].attackCooldown;
auto myTowers = hero.findMyTowers(); auto cd = myTowers[0].attackCooldown;

tower.attackRange

该防御塔的最大攻击范围。只有进入这个范围内的怪物才会被该塔攻击。

myTowers = hero.findMyTowers() range = myTowers[0].attackRange
var myTowers = hero.findMyTowers(); var range = myTowers[0].attackRange;
auto myTowers = hero.findMyTowers(); auto range = myTowers[0].attackRange;

tower.level

该防御塔的当前等级。每次在同一位置建造同类型塔,等级加 1。等级越高,伤害和部分属性越强。

myTowers = hero.findMyTowers() for t in myTowers: if t.level < 5: hero.build(t.type, t.x, t.y)
var myTowers = hero.findMyTowers(); for (var i = 0; i < myTowers.length; i++) { if (myTowers[i].level < 5) { hero.build(myTowers[i].type, myTowers[i].x, myTowers[i].y); } }
auto myTowers = hero.findMyTowers(); for (int i = 0; i < myTowers.size(); i++) { if (myTowers[i].level < 5) { hero.build(myTowers[i].type, myTowers[i].x, myTowers[i].y); } }

tower.type

该防御塔的类型名称,例如 "archer""mage""cannon""frost"

myTowers = hero.findMyTowers() for t in myTowers: if t.type == "frost": pass # 找到了寒霜塔
var myTowers = hero.findMyTowers(); for (var i = 0; i < myTowers.length; i++) { if (myTowers[i].type === "frost") { // 找到了寒霜塔 } }
auto myTowers = hero.findMyTowers(); for (int i = 0; i < myTowers.size(); i++) { if (myTowers[i].type == "frost") { // 找到了寒霜塔 } }

六、🌀 技能系统

hero.special(specialType, x, y)

在坐标 {x, y} 处释放一个技能。技能不消耗法力值,但需要时间恢复(有冷却时间)。这是你的免费王牌武器,合理使用可以大幅提升生存能力。

可用的 specialType 有四种:

# 在坐标(30, 40)处释放拉力,将怪物吸聚到一起 hero.special("pull", 30, 40) # 在水晶前方释放爆炸,紧急弹飞逼近的怪物 hero.special("burst", hero.x + 5, hero.y)
// 在坐标(30, 40)处释放拉力,将怪物吸聚到一起 hero.special("pull", 30, 40); // 在水晶前方释放爆炸,紧急弹飞逼近的怪物 hero.special("burst", hero.x + 5, hero.y);
// 在坐标(30, 40)处释放拉力,将怪物吸聚到一起 hero.special("pull", 30, 40); // 在水晶前方释放爆炸,紧急弹飞逼近的怪物 hero.special("burst", hero.x + 5, hero.y);

hero.isReady(specialType)

检查指定的技能是否已经冷却完毕、可以使用。返回布尔值:true 表示可以释放,false 表示还在冷却中。在释放技能前先检查冷却状态,可以避免代码被不必要地阻塞。

if hero.isReady("pull"): hero.special("pull", 30, 40) elif hero.isReady("burst"): hero.special("burst", hero.x + 5, hero.y)
if (hero.isReady("pull")) { hero.special("pull", 30, 40); } else if (hero.isReady("burst")) { hero.special("burst", hero.x + 5, hero.y); }
if (hero.isReady("pull")) { hero.special("pull", 30, 40); } else if (hero.isReady("burst")) { hero.special("burst", hero.x + 5, hero.y); }

hero.findActiveAnomalies()

返回一个列表,包含当前战场上所有正在生效的技能区域的信息对象。你可以用它来追踪自己或对手已释放的技能状态,避免在同一位置重复释放,或根据对手的技能动态调整策略。

每个技能区域对象包含以下字段:

anomalies = hero.findActiveAnomalies() for a in anomalies: pass # a.name -- 技能名称,如 "pull", "push", "burst", "teleport" # a.force -- 力的强度,正值=拉力,负值=推力 # a.x, a.y -- 技能释放位置 # a.duration -- 剩余持续时间
var anomalies = hero.findActiveAnomalies(); for (var i = 0; i < anomalies.length; i++) { var a = anomalies[i]; // a.name -- 技能名称,如 "pull", "push", "burst", "teleport" // a.force -- 力的强度,正值=拉力,负值=推力 // a.x, a.y -- 技能释放位置 // a.duration -- 剩余持续时间 }
auto anomalies = hero.findActiveAnomalies(); for (int i = 0; i < anomalies.size(); i++) { auto a = anomalies[i]; // a.name -- 技能名称,如 "pull", "push", "burst", "teleport" // a.force -- 力的强度,正值=拉力,负值=推力 // a.x, a.y -- 技能释放位置 // a.duration -- 剩余持续时间 }

七、👾 怪物情报

hero.monsterTypes

返回一个列表,包含你在怪物波次中会遇到的所有怪物类型名称。你可以用它来提前了解战场上有哪些种类的怪物,配合 hero.getMonsterParameters() 查看各类型的详细数据。

types = hero.monsterTypes for t in types: info = hero.getMonsterParameters(t)
var types = hero.monsterTypes; for (var i = 0; i < types.length; i++) { var info = hero.getMonsterParameters(types[i]); }
auto types = hero.monsterTypes; for (int i = 0; i < types.size(); i++) { auto info = hero.getMonsterParameters(types[i]); }

hero.getMonsterParameters(monsterType)

返回指定类型怪物的详细参数对象。用它可以了解每种怪物的战斗能力,从而制定针对性的防御策略。

返回的对象包含以下字段:

ogreInfo = hero.getMonsterParameters("ogre") # ogreInfo.attackDamage -- 攻击伤害 # ogreInfo.flying -- 是否飞行(True/False) # ogreInfo.mana -- 击败后获得的法力值
var ogreInfo = hero.getMonsterParameters("ogre"); // ogreInfo.attackDamage -- 攻击伤害 // ogreInfo.flying -- 是否飞行(true/false) // ogreInfo.mana -- 击败后获得的法力值
auto ogreInfo = hero.getMonsterParameters("ogre"); // ogreInfo.attackDamage -- 攻击伤害 // ogreInfo.flying -- 是否飞行(true/false) // ogreInfo.mana -- 击败后获得的法力值

hero.getWaves()

返回一个二维数组,包含所有怪物波次的信息。外层数组的每个元素代表一波怪物,内层数组是该波中怪物类型的名称列表,按出场顺序排列。怪物会按照列表中的顺序循环出现。

例如返回值的结构如下:

[
  ["munchkin"],                       // 第0波:只有小怪
  ["munchkin", "ogre"],               // 第1波:一个小怪接一个食人魔,循环
  ["ogre", "thrower", "munchkin"],    // 第2波:三种怪物按此顺序循环
  ...
]
waves = hero.getWaves() # waves -- 第0波的怪物类型列表 # waves -- 第1波的怪物类型列表 for wave in waves: pass # wave 是一个字符串列表,如 ["munchkin", "ogre"]
var waves = hero.getWaves(); // waves -- 第0波的怪物类型列表 // waves -- 第1波的怪物类型列表 for (var i = 0; i < waves.length; i++) { var wave = waves[i]; // wave 是一个字符串数组,如 ["munchkin", "ogre"] }
auto waves = hero.getWaves(); // waves -- 第0波的怪物类型列表 // waves -- 第1波的怪物类型列表 for (int i = 0; i < waves.size(); i++) { auto wave = waves[i]; // wave 是一个字符串数组,如 ["munchkin", "ogre"] }

hero.getWave(waveNumber)

返回指定波次的怪物类型列表(字符串数组)。第一波的编号是 0。你可以用它来查看任意一波的怪物组成,提前规划防御。

firstWave = hero.getWave(0) # firstWave 可能是 ["munchkin"] secondWave = hero.getWave(1) # secondWave 可能是 ["munchkin", "ogre"]
var firstWave = hero.getWave(0); // firstWave 可能是 ["munchkin"] var secondWave = hero.getWave(1); // secondWave 可能是 ["munchkin", "ogre"]
auto firstWave = hero.getWave(0); // firstWave 可能是 ["munchkin"] auto secondWave = hero.getWave(1); // secondWave 可能是 ["munchkin", "ogre"]

hero.getWaveNumber()

返回当前波次的编号(整数)。第一波的编号是 0。你可以用它来判断战斗进行到了哪个阶段,从而切换不同的建造和防御策略。

currentWaveNum = hero.getWaveNumber() if currentWaveNum >= 5: # 第5波之后,开始升级防御塔 hero.build("cannon", "B")
var currentWaveNum = hero.getWaveNumber(); if (currentWaveNum >= 5) { // 第5波之后,开始升级防御塔 hero.build("cannon", "B"); }
auto currentWaveNum = hero.getWaveNumber(); if (currentWaveNum >= 5) { // 第5波之后,开始升级防御塔 hero.build("cannon", "B"); }

hero.getCurrentWave()

返回当前正在进行的波次的怪物类型列表(字符串数组)。你可以用它来实时了解当前面对的是什么怪物,动态调整技能释放和建造策略。

currentWave = hero.getCurrentWave() # 检查当前波次是否有飞行怪物 for monsterType in currentWave: info = hero.getMonsterParameters(monsterType) if info.flying: # 当前波次有飞行怪物,确保有法师塔 hero.build("mage", "C") break
var currentWave = hero.getCurrentWave(); // 检查当前波次是否有飞行怪物 for (var i = 0; i < currentWave.length; i++) { var info = hero.getMonsterParameters(currentWave[i]); if (info.flying) { // 当前波次有飞行怪物,确保有法师塔 hero.build("mage", "C"); break; } }
auto currentWave = hero.getCurrentWave(); // 检查当前波次是否有飞行怪物 for (int i = 0; i < currentWave.size(); i++) { auto info = hero.getMonsterParameters(currentWave[i]); if (info.flying) { // 当前波次有飞行怪物,确保有法师塔 hero.build("mage", "C"); break; } }

hero.getNextWave()

返回下一波怪物的类型列表(字符串数组)。提前侦察下一波的怪物组成,可以让你在当前波次结束前就做好准备,占据先机。

nextWave = hero.getNextWave() for monsterType in nextWave: info = hero.getMonsterParameters(monsterType) if info.flying: # 下一波有飞行怪物,提前建造法师塔 hero.build("mage", "E") break
var nextWave = hero.getNextWave(); for (var i = 0; i < nextWave.length; i++) { var info = hero.getMonsterParameters(nextWave[i]); if (info.flying) { // 下一波有飞行怪物,提前建造法师塔 hero.build("mage", "E"); break; } }
auto nextWave = hero.getNextWave(); for (int i = 0; i < nextWave.size(); i++) { auto info = hero.getMonsterParameters(nextWave[i]); if (info.flying) { // 下一波有飞行怪物,提前建造法师塔 hero.build("mage", "E"); break; } }

hero.getBosses()

返回一个二维数组,包含所有 Boss 的信息。每个元素是一个数组,其中第 0 项是 Boss 的名称(字符串),第 1 项是该 Boss 出现的时间(秒数)。你可以用它提前规划 Boss 战策略。

bosses = hero.getBosses() for boss in bosses: bossName = boss[0] # Boss 名称 spawnTime = boss[1] # 出现时间(秒)
var bosses = hero.getBosses(); for (var i = 0; i < bosses.length; i++) { var bossName = bosses[i][0]; // Boss 名称 var spawnTime = bosses[i][1]; // 出现时间(秒) }
auto bosses = hero.getBosses(); for (int i = 0; i < bosses.size(); i++) { auto bossName = bosses[i][0]; // Boss 名称 auto spawnTime = bosses[i][1]; // 出现时间(秒) }

hero.findMonsters()

返回一个列表,包含当前地图上所有存活的怪物。你可以用它来分析战场态势,找到最危险的怪物并决定技能释放位置。

monsters = hero.findMonsters() for m in monsters: pass # m.x, m.y -- 怪物位置; m.type -- 怪物类型
var monsters = hero.findMonsters(); for (var i = 0; i < monsters.length; i++) { var m = monsters[i]; // m.x, m.y -- 怪物位置 // m.type -- 怪物类型 }
auto monsters = hero.findMonsters(); for (int i = 0; i < monsters.size(); i++) { auto m = monsters[i]; // m.x, m.y -- 怪物位置 // m.type -- 怪物类型 }

八、🔴 对手信息

hero.getEnemyHero()

返回对手英雄(水晶)的引用。你可以通过它访问对手的坐标、生命值等信息,用于分析对手的状态或计算传送技能的方向。

enemy = hero.getEnemyHero() # enemy.x, enemy.y -- 对手水晶坐标 # enemy.health -- 对手当前生命值 # enemy.maxHealth -- 对手最大生命值
var enemy = hero.getEnemyHero(); // enemy.x, enemy.y -- 对手水晶坐标 // enemy.health -- 对手当前生命值 // enemy.maxHealth -- 对手最大生命值
auto enemy = hero.getEnemyHero(); // enemy.x, enemy.y -- 对手水晶坐标 // enemy.health -- 对手当前生命值 // enemy.maxHealth -- 对手最大生命值

hero.findNearest(targets)

从一个目标数组中,返回距离你的水晶最近的那个目标。如果数组为空,则返回 null。这是快速定位最近威胁的便捷方法。

monsters = hero.findMonsters() nearest = hero.findNearest(monsters) if nearest: hero.special("pull", nearest.x, nearest.y)
var monsters = hero.findMonsters(); var nearest = hero.findNearest(monsters); if (nearest) { hero.special("pull", nearest.x, nearest.y); }
auto monsters = hero.findMonsters(); auto nearest = hero.findNearest(monsters); if (nearest) { hero.special("pull", nearest.x, nearest.y); }

十、📏 通用工具

hero.wait(t)

让英雄等待 t 秒,期间不执行任何操作。适合在不需要建造或释放技能时让代码暂停,避免空转消耗性能。

# 等待2秒再执行下一步操作 hero.wait(2) hero.build("archer", "A")
// 等待2秒再执行下一步操作 hero.wait(2); hero.build("archer", "A");
// 等待2秒再执行下一步操作 hero.wait(2); hero.build("archer", "A");