Screeps系列 - 对脚本的刨根问底【3】(Builder)

爬虫工人的逻辑

  • 下面来深入到爬虫工人部分~
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的大家!我会持续对其中的错误和疏漏之处进行再补充,欢迎大家在评论区内交流,希望可以指出我的不足,我会对文章加以改进~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值