[success]之前看到群里有人推荐这个游戏,所以我就想玩一玩看一下,顺便记下笔记[/success]
游戏简介
Screep其实意味着'Scripting Creeps',玩家与这个游戏唯一的互动方式,是通过编写自己的AI脚本,而这些AI将运行在服务器上,全年365天无休地进行模拟。游戏经过两年的发展,游戏元素丰富到了具备了极佳的可玩性:能源采集、矿物采集、地区控制、十余种功能建筑、全球贸易市场、战争、塔防、通过化学合成新的元素(想起被化学支配的恐怖了么)、生物改造以及正在调整测试的PVE模式(PowerBank Rob,on issue)。
使用VsCode编写代码
游戏自己带的编辑器很垃圾,建议自己使用VsCode来编写代码。可以在这里打开脚本所在的位置,然后用VScode打开这个目录即可。
然后我们下载node.js。下载好后我们可以直接在vscode的terminal里面输入下面的命令。
1.换源
[block]
npm config set registry https://registry.npm.taobao.org
[/block]
2.安装声明文件
[block]
npm install @types/screeps @types/lodash@3.10.1
[/block]
安装好后打开vscode就可以进行代码自动补全了。。下面就可以愉快的游戏了(不过先让我在模拟器里面先模拟一波,毕竟技术太菜)
游戏基础
这个文章并不是教程,只是做一下笔记,没有任何基础的人自己先通关新手教程。收获者
我们先来简单的创建一个收获者[block]
Game.spawns['Spawn1'].spawnCreep( [WORK, CARRY, MOVE], 'Harvester1' );
[/block]
这个代码的意思就是创建一个叫Harvester1
的小兵(这里主要用来采集),有wrok,carry,move等基础能力。
这里我们让它具有采集东西和运输功能
[highlight lanaguage=”javaScript”]
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']); } } }
[/highlight]
如果有多个小兵,可以使用for循环来进行迭代。
[highlight lanaguage=”JavaScript”]
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’]);
}
}
}
}
[/highlight]
为了方便模块管理,同时也为了使用,我们可以把这些代码写到一个模块里面。
[highlight lanaguage=”JavaScript”]
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;
[/highlight]
主函数代码如下
[block]
//引入模块文件
var roleHarvester = require(‘role.harvester’);
module.exports.loop = function () {
for(var name in Game.creeps) {
//先赋值然后执行模块里面的函数
var creep = Game.creeps[name];
roleHarvester.run(creep);
}
}
[/block]
[infobox title=”注意”]这篇文章会持续更新,现在我其实没多少时间玩游戏,所以以后有时间我就继续更新[/infobox]
参考文章
1.Screeps 使用VSCode进行开发并添加自动补全