超硬核程序游戏Screeps:一个奇妙的代码沙盒世界
**前言: **
Screeps这款游戏早在2016年就开始Early Access,但到目前为此,Steam上也只有不到800的评测数量。官方对于这款游戏的定位是专为程序员(Programmers)量身打造的游戏,不知道是不是因为程序大佬们都忙着996,根本没空玩游戏,所以不管是网上关于Screeps的文章,还是机核、B站,几乎为零。作为一个程序员,并热爱着这款游戏的人,由此萌生了向更多人介绍Screeps的想法。
编程类游戏有很多,被大家所熟知的应该是Zachtronics的编程游戏系列,包括像《TIS-100》、《SHENZHEN I/O》、《SpaceChem》,还有最近发售,以汇编语言作为基础玩法的《Exapunks》。先不说汇编是个什么东西,光"编程"这两个字,就已经劝退了一大部分玩家了。实际上Zachtronics的游戏在一定程度上还算不上真正意义上的编程游戏,游戏毕竟是以玩法为主,所以不管是《SHENZHEN I/O》,还是更硬核的《TIS-100》,实际都是做了简化,游戏过程更像是益智解迷类游戏,每个关卡设置一个难题,玩家通过手上的工具完成解答。
那什么是更真实的编程,很简单的说,就是程度员每天干的事情,用代码解决问题。Screeps的游玩过程,就是编码的过程,也更接近真实的编程。Screeps不是关卡式的,也不会设置什么难题,玩家所在的世界是一个开放式的世界,游戏也没有目确的目标,硬要说的话,生存可能算是一个,玩家唯一的武器就是编码。那在这样一个世界里,到底玩什么呢?怎么玩儿?为什么好玩儿?读完这篇文章,也许能让你了解还有这样一款特别的游戏,说不一定还能激发你对编程的兴趣,进入真实的程序员世界。
游戏世界观:
Screeps到底是个什么游戏,我们先来看看官方是怎么定义的。Screeps的意思是可编程的脚本爬虫(scripting creeps),它是一个沙盒式的大型多人在线即时战略游戏(MMO RTS game),核心游戏机制是对你的单位进行AI编程。通过JaveScript(一种程序语言,简称JS)的编写来控制你的殖民地,并和其它玩家的代码一起实时的,全天候7*24小时运行的世界。
先放一张图,整个Screeps的世界大概就是这个样子。
这个世界是由无数个小房间组成的,每个小方格代表着一个小房间,每个不同样式的图标代表这个房间正被某个玩家殖民。房间内的样貌大概是这个样子:
玩家可以在殖民地上开采资源,建立单位,以此来征服更多的领土。
当然与一般的RTS游戏不同的是,你所编写的代码才是操控Screeps世界的方式。当你完成对单位的编码后,就不需要再一直盯着游戏,离开游戏后,代码一样会在这个世界上持续运行。偶尔回来检测下状况,看看所有单位的行动,是否如你所愿,然后再做调整,所以完全可以当作"挂机"式游戏来玩儿。
这就是整个Screeps世界的构成。如果你的代码不够优秀,Creep不够智能,很可能就被其它玩家攻占。这个时候回过头去想,有没有比之前更优秀的算法,更好的策略选择,更效率的行动方式。每个玩家都是为了占领更多的领地,或者守住疆土,不停的在进化,迭代自己的代码,游戏最大的乐趣,也就是的这个过程,你总是会冒出更好的想法,更完善的策略机制。不断重复的这个过程中,其实也在无形中提升了你的自身的能力。
下面来展示下,如何在这个世界里"白手起家",当中不会涉及任何一句程序代码,以便让更多的玩家能够理解游戏过程。
玩法介绍:
在游戏开始之前,会让你在整个大世界(第一张图片)里选择一间房间作为起始殖民地,假如我们已经选好了房间,大概就会是下面这个样子:
这里面有几个元素,我们来介绍下:
Spawn
孵化器(Spawn) :孵化器是殖民地中的核心建筑,它负责创建Creep(脚本爬虫)。可以存储300点能量。
Energy sources
能量块(Energy sources) :游戏里最主要的资源,可以被爬虫采集。总共3000点能量,每300个游戏时间重置一次。
Controller
控制器(Controller) :控制器代表你对这个房间的有殖民权。控制器可通过能量升级,总共8个等级,到达一定等级时,解锁相应的建筑和其它功能。
Creep
爬虫(Creep) :游戏世界中最基础的行动单位,负责采集能量,修造,进攻,治疗。生存时间为1500个游戏时间。
这里需要着重介绍下Creep,游戏中大部的工作都是由Creep完成的。Creep本身可由7不同的身体部位组成:
- WORK 采集能量,修建和升级控制器的能力 (需要50能量)
- _MOVE _ 移动的能力(需要100能量)
- CARRY 运输能量的能力(需要50能量)
- ATTACK 近距离攻击的能力(需要80能量)
- **RANGED_ATTACK **远距离攻击的能力(需要150能量)
- **HEAL **治疗的能力(需要250能量)
- **CLAIM **认领殖民地控制器的能力(需要600能量)
- **TOUGH **额外的耐久(需要10能量)
一个Creep由什么部位组成,就可以干相应的事情,每一个部位还需要花费一定的能量值。有了身体部位这个机制,就可以自由搭配出不同职业定位的Creep了。比如专门负责采集的Creep,身体组成是 [CARRY, WORK, MOVE],有攻击能力的士兵Creep,身体组成是[TOUGH, ATTACK, MOVE, MOVE]。
Creep每移动一格,每个身体部位还会产生2点疲劳值,在疲劳值为0的时候,Creep才能继续移动。每一个Move部位可以消除2点疲劳值,且Move本身是不会产生疲劳值的。如果在[道路]这个地形上移动,每个部位也只产生1点疲劳值。
如果有多个相同部位,可以提高对应的能力,比如装配1个WORK的Creep,1个游戏时间可以采集2点能量,2个WORK可以采集4点,以此类推。
OK,上面这四个元素就已经可以够成游戏的最小玩法了。玩家需要做的就是通过孵化器生产Creep,采集能量,运输到孵化器供下个Creep生产,或者运输到Controller升级,完成这一过程就需要程序去控制了。
程序就像搭积木,游戏提供给你最基础的模块,怎样搭建完全是由玩家自由决定。游戏初期的这个阶段, 游戏提供的资源是很有限的,玩家能做的事情也很有限,先整理下我们的资源:
- 一个房间
- 一个能量块(3000点能量,每300个游戏时间重置)
- 一个孵化器(可以生产Creep)
一个控制器(可以升级)
这里其实已经有几个问题摆在面前了:
Creep的有哪些任务需要做
Creep的身体部位该如何搭配
应该生产多少个Creep才合适
是应该优先升级,还是保证孵化器能量
这个游戏最大的乐趣也就在这里,虽然没有具体目标,但游戏提供机制,就已经产生一大堆需要解决的问题了。而且程序员的强迫症,是要找到最优解决这些问题方法的。程序这个0和1的世界,是不会骗人的,具体编写成什么样子,就一定会按程序逻辑执行下去,没有偏差。所以理论上如果能够达到最优解,用程序是很容易达到这个目的的。
我们以如何最大化利用资源,不浪费能量块的采集为原则,来算一下,3000点能量/300游戏时间,1个游戏时间需要采集10点能量,理论上5个WORK同时采集就能达到最大效率。但这里还没有算上其它意外情况,比如Creep来回运输的时间,以及Creep的死亡。所以这里最智能的代码应该是考虑了所有情况,并且保证随时都有5个WORK同时工作。
再来考虑一下一个采集型Creep的部位组成 [CARRY, WORK, MOVE]为什么比较合理,其实很简单,1个部位如果在[道路]上只会产生1点疲劳,那1个MOVE部位搭配2个其它部位的情况下,刚好可以不需要休息、不间断的移动。
另外孵化器的能量存储上限只有300,一个采集型Creep[CARRY, WORK, MOVE]会消耗200点能量, 我们如果以[CARRY, WORK, MOVE]为基础部位组来构建采集型Creep,那当孵化器到达600上限的时候,是不是应该生产采集型Creep增强型 [CARRY, WORK, MOVE,CARRY, WORK, MOVE],来提高采集效率。那更智能的程序,是不是应该根据孵化器的上限,动态的生产Creep。
以上差不多就是游戏初期需要考虑的一些事情,游戏的全貌当然不止这一点,游戏的玩法还有很多。还包含各类建造,领土控制,经济,制造,运输,贸易,甚至可以采集特殊资源以赚取游戏内置货币,来换取更多的付费用户体验。
完结:
介绍了这么多,只是想让更多的人知道有这样一个神奇的游戏,虽然是程序员向的游戏,但编程其实也没有那么难。也许你对编程有点兴趣,把此游戏作为你的编程入门学习也是不错的选择。当你真的踏进Screeps的世界的,真是一入坑,深似海,每天思考的都是如何优化你的代码,总会有一大堆想法在脑海里,等着被实现。
PS:这个游戏其实有一个的终极目标,就是当你点下运行代码的那一刻起,你只需要作为一个旁观者,观察着你的思维产物,在整个世界漫延,生长,它已经是一台能够自主运行的智能生物了。
游戏相关资料:
如果有兴趣的玩家,建议先上官网试玩。并且玩这个游戏需要阅读大量英文文档,英文水平不佳者请慎重购买。
官方网站
游戏文档介绍
作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: