爬虫工人的逻辑
- 下面来深入到爬虫工人部分~
var roleBuilder = {
run: function(creep) {
if(creep.memory.building && creep.store[RESOURCE_ENERGY] == 0) {
creep.memory.building = false;
creep.say('🍗 I am hungry!');
}
if(!creep.memory.building && creep.store.getFreeCapacity() == 0) {
creep.memory.building = true;
creep.say('🚧 I am going to work!');
}
if(creep.memory.building) {
var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
if(targets.length) {
if(creep.build(targets[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#FF0000'}});
}
}
}else {
var sources = creep.room.find(FIND_SOURCES);
if(creep.harvest(sources[1]) == ERR_NOT_IN_RANGE) {
creep.moveTo(sources[1], {visualizePathStyle: {stroke: '#FFAA00'}});
}
}
}
};
module.exports = roleBuilder;
- 关键字:var,声明了变量:roleBuilder
var roleBuilder = {
……
}
- run:定义了一个函数,该函数的使用对象为:creep
run: function(creep) {
……
}
- 一段在 if-else 中嵌套 if 的语句结构~
if(…条件1…) {
…执行1…
}
if(…条件2…) {
…执行2…
}
if(…条件3…) {
…执行3…
if(…条件A…) {
if(…条件4…) {
…执行4…
}
}
}else {
…执行B…;
if(…条件5…) {
…执行5…;
}
}
}
};
- 条件1:爬虫工人正在执行建造任务且它所携带的能量为0~
creep.memory.building && creep.store[RESOURCE_ENERGY] == 0
- 执行1:爬虫工人当前不执行建造任务,并大喊一声“I am hungry!”
creep.memory.building = false;
creep.say('🍗 I am hungry!');
- 条件2:爬虫工人当前不在执行建造任务且它所携带的能量为满值~
!creep.memory.building && creep.store.getFreeCapacity() == 0
- 执行2:爬虫工人开始执行建造任务,并大喊一声“I am going to work!”
creep.memory.building = true;
creep.say('🚧 I am going to work!');
- 条件3:爬虫工人正在工作~
creep.memory.building
- 执行3:查找爬虫工人当前所在的房间中所有未完成的建筑工地,并将这些建筑工地存储在变量
targets
中~
var targets = creep.room.find(FIND_CONSTRUCTION_SITES);
- 条件A:建筑工地的数量(是否为空?)~
targets.length
- 条件4:爬虫工人不在建筑工地周围~
creep.build(targets[0]) == ERR_NOT_IN_RANGE
- 执行4:让爬虫工人移动到第一个建筑工地的位置,并使用十六进制颜色代码:纯红色,来可视化爬虫工人的行走路径~
creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#FF0000'}})
- 执行B:在当前爬虫工人所在的房间中查找所有能量源,并存储在变量
sources
中~
var sources = creep.room.find(FIND_SOURCES)
- 条件5:爬虫工人不在能量源周围~
creep.harvest(sources[1]) == ERR_NOT_IN_RANGE
- 执行5:让爬虫工人移动到能量源的位置,并使用十六进制颜色代码:橘黄色,来可视化爬虫工人的行走路径~
creep.moveTo(sources[1], {visualizePathStyle: {stroke: '#FFAA00'}})
- 收尾,module 将 roleBuilder 作为当前模块的导出内容,当在其他脚本内通过
require()
函数引入当前模块时,它们就会得到roleHarvester
中所引用的一切~
module.exports = roleBuilder;
小结
谢谢阅读!喜欢Screeps的大家!我会持续对其中的错误和疏漏之处进行再补充,欢迎大家在评论区内交流,希望可以指出我的不足,我会对文章加以改进~