人力资源机器 | |||||||
![]() | |||||||
原名 | Human Resource Machine | ||||||
常用译名 | 人力资源机、程序员升职记 | ||||||
类型 | 解谜、编程 | ||||||
平台 | Microsoft Windows | ||||||
分级 |
| ||||||
开发 | Tomorrow Corporation | ||||||
发行 | Tomorrow Corporation Experimental Gameplay Group (iOS) | ||||||
设计师 | Kyle Gabler Kyle Gray | ||||||
程序 | Allan Blomquist | ||||||
美工 | Kyle Gabler Kyle Gray | ||||||
音乐 | Kyle Gabler 没错整个团队只有3个人 | ||||||
模式 | 单人 | ||||||
发行时间 | Microsoft Windows, MacOS:2015年10月15日 Wii U:2015年10月29日 | ||||||
相关作品 | 续作:70亿人 |
人力资源机器(Steam译名为“程序员升职记”,英语:Human Resource Machine)是一款可视化编程游戏,由Tomorrow Corporation开发并发行。游戏于2015年在Windows和MacOS平台首发,之后被移植至Android、Nintendo Switch等平台。
游戏包含了近40个关卡,每个关卡都有一个“年份”。游戏发生在一间办公室里,坐在屏幕右上角的上司会指派任务,通常是从输入(英语:inbox)中取出带有数字或字母的方块并进行处理后,放到输出(英语:outbox)处。玩家需要使用游戏提供的指令编程以移动小人(相当于一台电脑中唯一的一个寄存器)完成任务。
随着游戏推进,玩家会逐步解锁更为高级的指令;而一些关卡中,玩家实际上用较为低级的指令实现了高级指令(例如用加法和循环实现乘法和除法[1])。玩家不需要关注垃圾回收——小人不需要手上的方块时可以直接丢掉销毁[2]。
办公室的地毯上设有可以存储方块的格子,印有编号。玩家可以将其作为存储器使用,相当于电脑的内存,而编号即为内存地址,从0开始。
游戏整体的编程风格接近于汇编语言,含有逻辑判断、循环等结构,但只能使用“jump(跳转)”指令(相当于C语言和C++编程中的goto),令一些习惯了高级语言的程序员玩家十分不爽。[3]
虽然每个关卡都有按顺序编号的“年份”,但玩家不一定要按照年份顺序游戏。部分关卡属于支线关卡,不影响玩家主线推进。而有些“关卡”实际是过场动画,在选关界面(“电梯”)中的图标是一杯咖啡并被称为“咖啡时间”[4]@Java,但仍然计入年份,玩家也不能直接跳过(动画开始后可以跳过动画)。
每个关卡还会有两个附加挑战,分别要求玩家使用尽可能少的指令数量以及尽可能提高程序运行的速度[5][6],两个附加挑战可以使用不同的程序达成。为方便玩家游戏,每个关卡都有三个独立的档案,玩家可以将程序保存在不同档案中以实现修改备份、达到不同目标等。此外,移动端游戏可以切换横/竖屏布局。
虽然游戏的主体是编程,但游戏实际是有剧情的。主要的剧情出现在“咖啡时间”中,内容是主角所在的城市遭遇了智械危机,这也为续作的剧情埋下了伏笔。
同时如果仔细观察,会发现随着游戏进度的推进,主角头上的毛发会越来越少程序员容易秃顶。
游戏里的数据类型包括数字和字母两种,数字印在绿色的盒子上,范围是±999范围内的整数;字母则是大写的A~Z,印在紫色的盒子上。
整数运算如果超过范围会导致溢出报错[7],字母只能和另一个字母执行减法运算,不能执行加法运算,也不能和数字运算。字母执行减法运算则会将A~Z视为1~26[8]进行运算。
游戏的指令系统原型相当于Intel x86架构,这些指令和8086的指令集都有对应,因此可算作一种类汇编语言例如把if和jump绑定一块不能分割同时由于只有一个寄存器,因此运算指令就只有一个操作数。
游戏提供了以下几种指令,随着游戏进行会逐渐引入。其中有一些(比如方括号用作间接寻址)是后期引入的。
inbox
:从输入栏取出一个方块。outbox
:从输入栏取出一个方块。copyto x
:把手上的方块复制到地毯上的x号位置,相当于汇编语言的直接寻址。[9]相当于8086里的mov
指令。copyto [x]
:看一下x号位置中的值(必须是一个非负整数,如果是负数或者字母或者空则会报错),将这个值当做地址,把手上的方块复制到地毯上的对应编号位置。相当于间接寻址。copyfrom x
:把地毯上的x号位置的方块复制到手上。相当于8086里的mov
指令。copyfrom [x]
:看一下x号位置中的值(必须是一个非负整数,如果是负数或者字母或者空则会报错),将这个值当做地址,把这个地址对应位置的方块复制到手上。add x
:把手上的方块与地毯上x号位置的值相加,把结果拿在手上。相当于8086里的add
指令。add [x]
:看一下x号位置中的值(必须是一个非负整数,如果是负数或者字母或者空则会报错),将这个值当做地址,把手上的方块与地毯对应地址位置的值相加,把结果拿在手上。sub x
:用手上的方块减去地毯上x号位置的方块,把结果拿在手上。相当于8086里的sub
指令。sub [x]
:看一下x号位置中的值(必须是一个非负整数,如果是负数或者字母或者空则会报错),将这个值当做地址,把手上的方块与地毯对应地址位置的值相减,把结果拿在手上。bump+ x
:地毯的x号位置增加1,增加后的值也会复制到手里[10]。相当于8086里的inc
指令。bump+ [x]
:将x视为地址,地毯的对应地址位置增加1,增加后的值也会复制到手里。bump- x
:地毯的x号位置减少1,减少后的值也会复制到手里[11]。相当于8086里的dec
指令。bump- [x]
:将x视为地址,地毯的对应地址位置减少1,减少后的值也会复制到手里。jump
:跳转(无条件跳转)。相当于8086里的jmp
指令。jump if zero
:如果手上的方块是0,则跳转;反之忽略该条继续向下执行。相当于8086里的jnz
指令。jump if negative
:如果手上的方块是负数,则跳转;反之忽略该条继续向下执行。相当于8086里的js
指令。指令的使用存在下面的限制:
copyfrom
必须作用在地毯上放置有方块的位置,copyto
也必须在手里有物品的情况下使用,否则程序会异常结束[12];add/sub/bump+/bump-/jump if zero/jump if negative
:这些指令必须在小人手里有物品的情况下使用,否则会报错[13]。add/bump+/bump-
的操作数只能是数字方块,不能是字母方块。同时值得注意的是,游戏中不允许使用立即数(汇编语言中称为立即寻址,指的是直接在寄存器或内存中预置一个数,例如mov ax, 10
表示将十进制10移入寄存器ax),也就是说不允许玩家直接在地毯上预置数字或者字母方块,这使得打表的策略(程序设计竞赛用语,指的是直接预先计算出所有的答案,存储在数组里,然后需要的时候进行查询暴力出奇迹,打表进省一)完全不可行。某些关卡涉及到累加和循环,关卡开始时,地毯的某处会预置一个方块(一般是数字0)。
Brainf**k + Scratch即视
所以这游戏真的不要当作编程入门!这是面向有编程基础的人玩的不是编程入门游戏!
本作的游戏BGM可在网易云音乐中查看:
https://music.163.com/#/album/34751202/?userid=38532616
鉴于本作获得的极高评价,开发商于2018年推出了续作《70亿人》。相比于本作,续作中玩家可以使用的指令集有所扩展,指挥的对象则由单个小人变为了多个小人,同时也引入了小人之间的沟通等新元素。
|
|
![]() 维基百科 提示您 | 关于人力资源机器, 在自由的百科全书维基百科上 有相关条目。 请参阅:Human Resource Machine |