Screeps:计算身体的构建成本

Ani*_*t3d 13 javascript screeps

在玩游戏screeps.com时,我想计算构建所需身体的成本.请参阅下面的我的尝试,cfg.bodybodypart数组在哪里,例如[Game.ATTACK, Game.MOVE, Game.WORK, Game.CARRY, Game.MOVE]:

var buildCost = 0;

for(var bodypart in cfg.body){
  switch(bodypart){
    case "MOVE":
    case "CARRY":
       buildCost+=50;
       break;
    case "WORK":
       buildCost+=20;
       break;
    case "HEAL":
       buildCost+=200;
       break;
    case "TOUGH":
       buildCost+=20;
       break;
    case "ATTACK":
       buildCost+=80;
       break;
    case "RANGED_ATTACK":
       buildCost+=150;
       break;
  }
  console.log(bodypart + " costs " + buildCost);
}
Run Code Online (Sandbox Code Playgroud)

打印bodypart到控制台时,它显示索引(0,1,2,3,...),buildCost保持为0.

成本和零件在Screeps页面上描述.

小智 19

也许之前的BODYPART_COST常数不可用,但是你可以这样做:

function bodyCost (body) {
    return body.reduce(function (cost, part) {
        return cost + BODYPART_COST[part];
    }, 0);
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,这应该是正确的答案 (2认同)

Too*_*ker 6

更像JavaScripty的解决方案,无需交换机,可能如下所示:

var _ = require("lodash");
var body = [Game.WORK, Game.CARRY, Game.MOVE, Game.TOUGH];
var bodyCost = {
  "move": 50,
  "carry": 50,
  "work": 20,
  "heal": 200,
  "tough": 20,
  "attack": 80,
  "ranged_attack": 150
};
var cost = 0;
_.forEach(body, function(part) { cost += bodyCost[part]; });
console.log("Cost of construction: " + cost);
Run Code Online (Sandbox Code Playgroud)

事实上,我将把这件事用于我自己的蠕动来计算成本.谢谢你搞清楚各种费用:)


jfr*_*484 5

使用 lodash 的 sum 方法,就更简单了:

let cost = _.sum(creep.body.map(function (b) {
               return BODYPART_COST[b];
           }));
Run Code Online (Sandbox Code Playgroud)

箭头方法使它更优雅:

let cost = _.sum(creep.body.map((b) => BODYPART_COST[b]));
Run Code Online (Sandbox Code Playgroud)