【问题标题】:Screeps autospawner not 'totally' workingScreeps autospawner 不能“完全”工作
【发布时间】:2018-02-09 02:39:25
【问题描述】:

所以我尝试更新我的 screeps 脚本,嗯.. 嗯.. 出了点问题,因为我的自动生成器代码陷入了循环。我对 JavaScript 还是很陌生,所以这可能是我犯的一些愚蠢的错误。我试图做的是通过将 console.log 添加到 if 语句来获取错误的参考错误......除了垃圾邮件发送到我的控制台的“harvester spawned”消息之外什么也没有。我真的很挣扎。请帮帮我!

如果您需要任何额外的信息,请说出来,我很乐意提供您需要的任何东西!

const roleHarvester = require('role.harvester');
const roleUpgrader = require('role.upgrader');
const roleBuilder = require('role.builder');

module.exports.loop = function () {

for(let name in Memory.creeps) {
    if(!Game.creeps[name]) {
        delete Memory.creeps[name];
    }
}

//change to object
let minimum = {
    NumberOfHarvesters: 3,
    NumberOfUpgraders: 3,
    NumberOfBuilders: 3
}
let numberOf = {
    Harvesters: _.sum(Game.creeps, (c) => c.memory.role == 'harvester'),
    Upgraders: _.sum(Game.creeps, (c) => c.memory.role == 'upgraders'),
    Builders: _.sum(Game.creeps, (c) => c.memory.role == 'builders')
}

if (numberOf.Harvesters < 3) {
    Game.spawns.Spawn1.createCreep([WORK, CARRY, CARRY, CARRY, MOVE], {role: 'harvester'})
    console.log('harvester spawned');
} 
else if (numberOf.Upgraders < 3) {
    Game.spawns.Spawn1.createCreep([WORK, CARRY, CARRY, CARRY, MOVE], {role: 'upgrader'})
    console.log('upgrader spawned');
} 
else if (numberOf.Builders < 3) {
    Game.spawns.Spawn1.createCreep([WORK, WORK, CARRY, MOVE], {role: 'builder'})
    console.log('builder spawned');
}
else {
    Game.spawns.Spawn1.createCreep([WORK, CARRY, MOVE], {role: 'upgrader'})
}   

for(let name in Game.creeps) {
    let creep = Game.creeps[name];
    if(creep.memory.role == 'harvester') {
        roleHarvester.run(creep);
    }
    if(creep.memory.role == 'upgrader') {
        roleUpgrader.run(creep);
    }
    if(creep.memory.role == 'builder') {
        roleBuilder.run(creep);
    } 
}
}

【问题讨论】:

  • 与 yohr 问题完全无关,但您正在迭代 Game.creeps 3 次来计数。如果你有很多 Creeps,这将是非常低效的。您可能希望将总和更改为 _.groupBy(Game.creeps, c =&gt; c.memory.role);

标签: javascript if-statement screeps


【解决方案1】:

根据来自控制台的时间戳,您的代码不会像在主循环中那样“陷入循环”。 numberOf.Harvesters &lt; 3 计算结果为 true 的每个刻度,都会执行 if 块中的代码。假设蠕变计数部分正在工作,这意味着它将继续执行,直到您拥有至少 3 个收割机。

也许你应该添加一些代码来检查 spawn 是否已经生成了另一个cree,以及在调用Spawn1.createCreep() 之前是否有足够的可用能量。这将大大减少您控制台中的喋喋不休。

如果已经有 3 个收割机,请尝试在 if 语句之前添加类似 console.log('harvester count: ' + numberOf.Harvesters); 的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多