程序员专属游戏 Screeps:使用 JS/TS 代码控制自己的殖民地

Posted 迷渡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员专属游戏 Screeps:使用 JS/TS 代码控制自己的殖民地相关的知识,希望对你有一定的参考价值。

Screeps 是一款面向编程爱好者的开源 MMO RTS 沙盒游戏,其核心机制是为您的单位编写AI。您可以通过编写 javascript 来控制自己的殖民地。

Screeps 的游戏模式类似红警、星际争霸、魔兽、帝国时代等,但是和这些游戏不同,你无法通过鼠标或者键盘控制你的角色,你需要编写 JavaScript 代码来控制你的单位去完成各项任务。

您的殖民地可以采集资源,建造单位,征服领土或是与其他殖民地进行贸易。您征服的土地越多,您扩展疆域的能力和在游戏世界中的影响力也就越大。但是请注意,意图控制相同区域的多个玩家可能会引发一场战争!

Steam售价:65元。我是前不久搞促销的时候半价买的。

进入游戏后选择一个资源丰富、地形不错的地图,创建自己的基地,默认名字为 Spawn1。全局对象 Game 的 spawns包含了所有的基地(母巢),因此 Game.spawns['Spawn1']或者 Game.spawns.Spawn1就是我们刚才创建的基地。

使用 spawnCreep方法我们可以创建自己的第一个单位(creep) :

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

上面代码创建了一个名字为 creeper1 的单位。接下来我们编写代码,让他去采集资源:

module.exports.loop = function () 
    var creep = Game.creeps['creeper1'];
    var sources = creep.room.find(FIND_SOURCES);
    if(creep.harvest(sources[0]) == ERR_NOT_IN_RANGE)
        creep.moveTo(sources[0]);
    

  • Game.creeps['creeper1']从全局对象 Game 的 creeps 属性中根据名字找到刚才创建的 creep(单位)

  • 从当前房间 creep.room中寻找特定建筑,我们传入的参数是 FIND_SOURCES,因此我们寻找的所有 source(资源)

  • 命令 creep 去采集所有 source 中的第 1 个 source

  • 要想采集资源,需要 creep 在资源的附近,我们需要编写代码让 creep 移动过去,然后判断两者的距离再采集。但是有个讨巧的方式,我们可以通过判断 harvest 函数的返回值来实现。如果返回了 ERR_NOT_IN_RANGE。说明 creep 距离 source 太远,此时我们就调用 creep.moveTo 方法。

  • 最后是整个程序的入口。Screeps 规定程序的入口文件是 main.js,在主文件中需要导出一个 loop 函数。这样整个过程就永不间断地执行下去。

这只是一个简单的例子,你还可以发挥自己的想象力,开发不同的算法和策略来经营自己的殖民地。

通过算法你可以给房间的物品安排特定的布局以提高资源的产量和利用率:

当有敌人侵入时你可以防守,甚至可以主动去进攻别人,扩大自己的殖民地:

你不需要一直盯在电脑前,只需要把代码上传,然后是不是查看一下自己的基地就可以了。

Screeps 支持搭建私服,服务器代码使用 Node.js 编写,并且在 GitHub 开源。

我上周末也搭建了一个:screeps.devtips.cn。目前已经运行了一周,基本运行平稳。

服务器中有 20*20 共 400 个房间,80% 以上的房间都是相对平坦的地形,并配有 2 个资源采集点。

相关链接:

  • 游戏官网:https://screeps.com

  • 我的私服地址:https://screeps.devtips.cn

以上是关于程序员专属游戏 Screeps:使用 JS/TS 代码控制自己的殖民地的主要内容,如果未能解决你的问题,请参考以下文章

推荐几个编程游戏

markdown Screeps Javascript Basics

screeps所遇到的难题

想一次拥有全部steam游戏角色?专属游戏制作福利来袭!

手游项目的专属防御

12 个最佳的免费学习编程的游戏网站