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)
更像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)
事实上,我将把这件事用于我自己的蠕动来计算成本.谢谢你搞清楚各种费用:)
使用 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)