screeps 入坑记

之前看到群里有人推荐这个游戏,所以我就想玩一玩看一下,顺便记下笔记

游戏简介

Screep其实意味着'Scripting Creeps',玩家与这个游戏唯一的互动方式,是通过编写自己的AI脚本,而这些AI将运行在服务器上,全年365天无休地进行模拟。
游戏经过两年的发展,游戏元素丰富到了具备了极佳的可玩性:能源采集、矿物采集、地区控制、十余种功能建筑、全球贸易市场、战争、塔防、通过化学合成新的元素(想起被化学支配的恐怖了么)、生物改造以及正在调整测试的PVE模式(PowerBank Rob,on issue)。

使用VsCode编写代码

游戏自己带的编辑器很垃圾,建议自己使用VsCode来编写代码。

可以在这里打开脚本所在的位置,然后用VScode打开这个目录即可。
然后我们下载node.js。下载好后我们可以直接在vscode的terminal里面输入下面的命令。
1.换源

npm config set registry https://registry.npm.taobao.org
2.安装声明文件

npm install @types/screeps @types/lodash@3.10.1

安装好后打开vscode就可以进行代码自动补全了。。下面就可以愉快的游戏了(不过先让我在模拟器里面先模拟一波,毕竟技术太菜)

游戏基础

这个文章并不是教程,只是做一下笔记,没有任何基础的人自己先通关新手教程。

收获者

我们先来简单的创建一个收获者

Game.spawns['Spawn1'].spawnCreep( [WORK, CARRY, MOVE], 'Harvester1' );

这个代码的意思就是创建一个叫Harvester1的小兵(这里主要用来采集),有wrok,carry,move等基础能力。
这里我们让它具有采集东西和运输功能

module.exports.loop = function () {
    //获取这个小兵然后作为变量
    var creep = Game.creeps['Harvester1'];
    //判断当前小兵是否收集完毕所有能量
    if(creep.store.energy < creep.carryCapacity) {
        //找到房间里面的资源,然后赋值(会获得一个数组)
        var sources = creep.room.find(FIND_SOURCES);
        //判断距离,如果里自己很远那么就移动到资源所在的 ERR_NOT_IN_RANGE是目标太远的意思
        if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
            creep.moveTo(sources[0]);
        }
    }//如果能量收集完毕
    else {
        //下面这个是传送能量给基地 RESOURCE_ENERGY是资源的一种类型,我们指定一个目标,还有资源类型就可以传送能量了
        if( creep.transfer(Game.spawns['Spawn1'], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE ) {
            //这里是移动到基地
            creep.moveTo(Game.spawns['Spawn1']);
        }
    }
}

 
如果有多个小兵,可以使用for循环来进行迭代。

module.exports.loop = function () {
//这里就是遍历所有的物体
for(var name in Game.creeps) {
var creep = Game.creeps[name];
if(creep.carry.energy < creep.carryCapacity) {
var 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']);
}
}
}
}

 
为了方便模块管理,同时也为了使用,我们可以把这些代码写到一个模块里面。

var roleHarvester = {
/** @param {Creep} creep **/
run: function(creep) {
if(creep.store.energy < creep.carryCapacity) {
var 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']);
}
}
}
};
module.exports = roleHarvester;

主函数代码如下

//引入模块文件
var roleHarvester = require('role.harvester');
module.exports.loop = function () {
for(var name in Game.creeps) {
//先赋值然后执行模块里面的函数 var creep = Game.creeps[name]; roleHarvester.run(creep); } }

注意

这篇文章会持续更新,现在我其实没多少时间玩游戏,所以以后有时间我就继续更新

参考文章

1.Screeps 使用VSCode进行开发并添加自动补全
2.screeps中文文档