Screeps入门: harvest,upgrader,builder初级自动化

2021-08-03 15:50:01 浏览数 (3)

文章目录

    • 前言
    • 设计
    • 角色设计
      • harvester
      • upgrader
      • builder
    • main

前言

这篇博客给想要入坑Screeps但是不知道一开始不知道如何下手的玩家的教程,关于要不要入坑这篇博文介绍的很详细:Screeps 介绍及入坑,其他关于Screeps的信息也空余参考如下文档: 中文官方文档 官方教程 Screeps API Screep 中文教程目录

设计

这篇文章主要设计了初步自动化运行的代码,在找到并确定一个合适的房间后,选取某合适的位置设定为spawn(可以将其理解为虫族母巢),前期先确定使用如下三个角色

harvester

采矿者

将能量或元素矿开采出来并存入指定的结构中

upgrader

升级者

从指定的结构中取出能量升级房间控制器

builder

建造者

从指定的结构中取出能量并建造结构

角色设计

harvester

主要设计思路是假如这个harvester的store还有空间,那么就先找到一个source,然后到他附近收集能源,能源收集足够之后,遍历各个建筑,找出需要补充能量的建筑,然后去各个补充能量。

代码语言:javascript复制
var roleHarvester = {

    /** @param {Creep} creep **/
    run: function(creep) {
	    if(creep.store.getFreeCapacity() > 0) { // 背包未满 采矿
            var sources = creep.room.find(FIND_SOURCES);
            if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
                creep.moveTo(sources[0], {visualizePathStyle: {stroke: '#ffaa00'}});
            }
        }
        else {
            var targets = creep.room.find(FIND_STRUCTURES, { //找出需要补充能量的建筑
                    filter: (structure) => {
                        return (structure.structureType == STRUCTURE_EXTENSION || 
                                structure.structureType == STRUCTURE_SPAWN ||
                                structure.structureType == STRUCTURE_TOWER) &&
                            structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0;
                    }
            });
            if(targets.length > 0) { // 需要维护的建筑数目 > 0
                if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
                    creep.moveTo(targets[0], {visualizePathStyle: {stroke: '#ffffff'}});
                }
            }
        }
	}
};

module.exports = roleHarvester;

upgrader

upgrader主要是升级控制器用的,设计思路是用upgrading来设定是否是升级状态,是的话就去升级控制器,不是的话就去采集能量。

代码语言:javascript复制
var roleUpgrader = {

    /** @param {Creep} creep **/
    run: function(creep) {

        if(creep.memory.upgrading && creep.store[RESOURCE_ENERGY] == 0) {  // 升级状态&&能量不足的时候,变为采集者
            creep.memory.upgrading = false; 
            creep.say('

1 人点赞