提交screeps代码,第一次。

This commit is contained in:
facat 2020-10-18 22:00:22 +08:00
commit 075b8cbe4a
8 changed files with 221 additions and 0 deletions

14
builder.js Normal file
View File

@ -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]);
}
}
}
}

View File

@ -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);
}
}
}
}

15
harvester.js Normal file
View File

@ -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']);
}
}
}
}

15
init.js Normal file
View File

@ -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){
// }
}
}
}

101
main.js Normal file
View File

@ -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}`);
}
}

15
picker.js Normal file
View File

@ -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);
}
}
}
}

30
transfer.js Normal file
View File

@ -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']);
}
}
}
}

22
utils.js Normal file
View File

@ -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;//如果不在一个房间内,就返回负数。
}
}