新手教程(2)升级控制器
本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
这个教学关里主要是关于 Room Controller 这个关键战略对象的讨论。通过控制这个无敌的建筑,玩家可以在房间里建造设施。控制器级别越高,可建造的结构就越多。(耳边响起红警里经常听到的 Construction Completed)
现在需要创建一个新的工蚁(类比)来升级我们的控制器等级。我们叫这个 「Creep」 为 Upgrader1。之后会教学怎么自动创建 「Creep」,现在还是先手动在控制台创建这个 Upgrader1,依然是拥有 [WORK, CARRY, MOVE] 三个身体部件。
文档:
Game.spawns['Spawn1'].spawnCreep( [WORK, CARRY, MOVE], 'Upgrader1' );
实际上现在这个升级者和收割者干的活是一样的,但是 「Creep」 对象名是按照实际功能来取的,所以我们需要对他们的功能作出区分。
这时候就需要用到每个 「Creep」 的 memory 属性了,可以写一些自定义的信息到每个 「Creep」 的存储里。这样就可以给 「Creep」 分配不同的角色了。
所有使用的存储都可以通过全局的 Memory 对象来访问。然后对 V8 熟悉的大佬就可以随便玩了(滑稽)。
在控制台这把性质 role = 'harvester' 写到收割者的存储里,把性质 role = 'upgrader' 写到升级者的存储里。(我对浏览器的 memory 不是很熟悉,这里的“存储”实际上就是 memory 这个词,有些资料里面是直接当内存翻译的)
文档:
Game.creeps['Harvester1'].memory.role = 'harvester';
Game.creeps['Upgrader1'].memory.role = 'upgrader';
要看 「Creep」 的存储,既可以去左边 「Creep」 的信息面板里面看,又可以去底下的 Memory 标签这里找。
现在来定义新 「Creep」 的行为。两个 「Creep」 都需要收集能量,但是 harvester 把能量带回 「Spawn」,upgrader 把能量带给控制器,并且对其应用 upgradeController(通过属性 Creep.room.controller 来找到控制器对象)。
所以现在需要创建一个新的模块,就叫 role.upgrader。
文档:
var roleUpgrader = {
/** @param {Creep} creep **/
run: function(creep) {
if(creep.store[RESOURCE_ENERGY] == 0) {
var sources = creep.room.find(FIND_SOURCES);
if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(sources[0]);
}
}
else {
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
}
};
module.exports = roleUpgrader;
新模块定义好了当然要引入主模块了,根据先前定义的属性 Creep.memory.role 来将对应 「Creep」 和对应模块连接,这样就能将不同 「Creep」 的行为区分开。
现在在主模块代码里将 role.upgrader 应用在角色为 upgrader 的 「Creep」 对象 Upgrader1 上。
var roleHarvester = require('role.harvester');
var roleUpgrader = require('role.upgrader');
module.exports.loop = function () {
for(var name in Game.creeps) {
var creep = Game.creeps[name];
if(creep.memory.role == 'harvester') {
roleHarvester.run(creep);
}
if(creep.memory.role == 'upgrader') {
roleUpgrader.run(creep);
}
}
}
图片里的控制器已经升级了。
重要提示:如果在 20000 game ticks 内没有对控制器进行升级,控制器会掉一级。当等级掉到 level 0,玩家就会丧失对这个房间的控制权,其他的玩家有可能会来争夺这个房间的控制权(高玩的脚本探到或者手动操作的玩家看到一定是会来的)。要保证至少有一个 「Creep」 周期性的执行 upgradeController 函数。
第二关结束。