commit 075b8cbe4a63d0e986a129543c68e0e3a464237f Author: facat Date: Sun Oct 18 22:00:22 2020 +0800 提交screeps代码,第一次。 diff --git a/builder.js b/builder.js new file mode 100644 index 0000000..53a438b --- /dev/null +++ b/builder.js @@ -0,0 +1,14 @@ +module.exports = { + run(creep) { + if (creep.carry.energy < creep.carryCapacity){ + if(ERR_NOT_IN_RANGE==creep.withdraw(Game.spawns.Spawn1,RESOURCE_ENERGY)){ + creep.moveTo(Game.spawns.Spawn1); + } + }else{ + let construction_site=creep.room.find(FIND_CONSTRUCTION_SITES); + if(ERR_NOT_IN_RANGE==creep.build(construction_site[0])){ + creep.moveTo(construction_site[0]); + } + } + } +} \ No newline at end of file diff --git a/controller_contributer.js b/controller_contributer.js new file mode 100644 index 0000000..cb94420 --- /dev/null +++ b/controller_contributer.js @@ -0,0 +1,9 @@ +module.exports = { + run(creep) { + if (Game.spawns.Spawn1.store.getFreeCapacity(RESOURCE_ENERGY) == 0) { + if (creep.transfer(Game.spawns.Spawn1.room.controller, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(Game.spawns.Spawn1.room.controller.pos); + } + } + } +} \ No newline at end of file diff --git a/harvester.js b/harvester.js new file mode 100644 index 0000000..933faf4 --- /dev/null +++ b/harvester.js @@ -0,0 +1,15 @@ +module.exports = { + run(creep) { + //分配source + if (creep.carry.energy < creep.carryCapacity) { + let sources = creep.room.find(FIND_SOURCES); + if (creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) { + creep.moveTo(sources[0]); + } + } else { + if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(Game.spawns['Spawn1']); + } + } + } +} \ No newline at end of file diff --git a/init.js b/init.js new file mode 100644 index 0000000..8ad1fce --- /dev/null +++ b/init.js @@ -0,0 +1,15 @@ + + +module.exports = { + init(){ + if(!Memory.Source){ + Memory.Source=new Object(); + Memory.Source.Energy=[]; + // let sources = creep.room.find(FIND_SOURCES); + + // for(let source in sources){ + + // } + } + } +} \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..3402981 --- /dev/null +++ b/main.js @@ -0,0 +1,101 @@ +const init=require('init') +const harvester = require('harvester'); +const picker = require('picker'); +const util = require('utils'); +const transfer = require('transfer'); +module.exports.loop = function () { + init.init(); + Creep.prototype.action = action; + if ((_(Game.creeps).filter({ memory: { role: 'harvester' } }).size() + _(Game.creeps).filter({ memory: { role: 'picker' } }).size()) < 2) { + createHarvestCreep(); + } else { + if (_(Game.creeps).filter({ memory: { role: 'transfer' } }).size() < 2) { + createTransferCreep(); + + } + } + chanage_role(); + assign_task(); + +} + +function action() { + let role = this.memory.role; + // this.say(`${role}`); + switch (role) { + case "harvester": + harvester.run(this) + break; + case "picker": + picker.run(this) + break; + case "transfer": + transfer.run(this) + break; + } +} + +function assign_task() { + for (const creep_id in Game.creeps) { + let creep = Game.creeps[creep_id]; + creep.action(); + } + +} + +function chanage_role() { + if (_(Game.creeps).filter({ memory: { role: 'transfer' } }).size() > 0) { + let harvester_array = _(Game.creeps).filter({ memory: { role: 'harvester' } }).value(); + // console.log(harvester_array[0].memory.role); + for (let harvester_creep of harvester_array) { + harvester_creep.memory.role = 'picker'; + } + } else { + let picker_array = _(Game.creeps).filter({ memory: { role: 'picker' } }).value(); + // console.log(harvester_array[0].memory.role); + for (let picker_creep of picker_array) { + picker_creep.memory.role = 'harvester'; + } + } +} + +function get_creep_with_name(inlcude_string) { + let creeps = []; + for (const creep_id in Game.creeps) { + let creep = Game.creeps[creep_id]; + if (creep.name.include(inlcude_string)) { + creeps.push(creep); + } + } + return creeps; +} + +function count(hash_container) { + return Object.keys(hash_container).length +} + +function createHarvestCreep() { + //create new creep + let new_creep_name = "AUTO_CREATE_Harvester_" + util.uuid(); + let Re_code; + Re_code = Game.spawns['Spawn1'].createCreep([MOVE, CARRY, WORK], new_creep_name) + if (Re_code == new_creep_name) { + Game.creeps[new_creep_name].memory.role = 'harvester'; + console.log('Create new creep name ' + new_creep_name); + } else { + console.log(`failed to create harvester with code ${Re_code}`); + } +} + +function createTransferCreep() { + //create new creep + let new_creep_name = "AUTO_CREATE_Transfer_" + util.uuid(); + let Re_code; + Re_code = Game.spawns['Spawn1'].createCreep([MOVE, CARRY, CARRY], new_creep_name); + if (new_creep_name == Re_code) { + Game.creeps[new_creep_name].memory.role = 'transfer'; + console.log('Create new creep name ' + new_creep_name); + } else { + console.log(`failed to create transfer with code ${Re_code}`); + } +} diff --git a/picker.js b/picker.js new file mode 100644 index 0000000..2e40cc8 --- /dev/null +++ b/picker.js @@ -0,0 +1,15 @@ +//只收集,不运输 +module.exports = { + run(creep) { + let sources = creep.room.find(FIND_SOURCES); + let Re_code=creep.harvest(sources[0]); + if ( Re_code== ERR_NOT_IN_RANGE) { + creep.moveTo(sources[0]); + }else{ + if(OK==Re_code){ + creep.harvest(sources[0]); + creep.drop(RESOURCE_ENERGY); + } + } + } +} \ No newline at end of file diff --git a/transfer.js b/transfer.js new file mode 100644 index 0000000..7458994 --- /dev/null +++ b/transfer.js @@ -0,0 +1,30 @@ +const utils=require('utils') +// const harvester = require("./harvester"); + +module.exports = { + run(creep) { + if (creep.carry.energy < creep.carryCapacity) { + let harvester_array = _(Game.creeps).filter({ memory: { role: 'picker' } }).value(); + let harvester_creep=harvester_array[0]; + let target_harvester_pos=harvester_creep.pos; + let my_pos=creep.pos; + // console.log("distance "+utils.distance(target_harvester_pos,my_pos)) + if(utils.distance(target_harvester_pos,my_pos)>1.5){//在附近就是1或者1.414 + + creep.moveTo(target_harvester_pos); + }else{ + //find dropped source + let found=creep.room.lookForAt(LOOK_ENERGY,target_harvester_pos); + if(found.length>0){ + creep.pickup(found[0]) + } + + } + + }else{ + if (creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) { + creep.moveTo(Game.spawns['Spawn1']); + } + } + } +} \ No newline at end of file diff --git a/utils.js b/utils.js new file mode 100644 index 0000000..a53ac39 --- /dev/null +++ b/utils.js @@ -0,0 +1,22 @@ +module.exports = { + uuid() { + //6位 + let _uuid = ""; + for (let i = 0; i < 6; i++) { + if (Math.random() > 0.5) { + //大于0.5就是数字,小于则是字母 + _uuid = _uuid + (Math.round((Math.random() * 100)) % 10 ); + } else { + _uuid = _uuid + String.fromCharCode(97 + (Math.round(Math.random() * 100)) % 26); + } + } + return _uuid; + }, + distance(pos1,pos2){ + if(pos1.roomName==pos2.roomName){ + return Math.sqrt(Math.pow((pos1.x-pos2.x),2)+Math.pow((pos1.y-pos2.y),2)); + } + return -1;//如果不在一个房间内,就返回负数。 + } + +} \ No newline at end of file