Human Resource Machine游戏介绍

《人力资源机》是Tomorrow Corporation开发的一款为技术宅制作的解谜游戏。在每一层中,玩家的上司会给出一份任务。玩家需要通过给小职员编程来自动化你的任务。如果成功了,玩家会晋升到这幢巨大的办公楼的下一层工作一年。

avatar_cover Alex Xiang
2025-01-01 285阅读

Human Resource Machine(HRM),是个非常经典的编程类游戏。这个游戏结构非常简单,但是又很有深度,教新手编程语言基础课程时,也可以推荐这款游戏,对于训练编程思维很有帮助。

现在很多教青少年编程入门的时候,都首选Python语言,这当然比较可行,因为Python是一门相对比较好掌握的编程语言,也能实现一些很酷炫的效果,让孩子们很有成就感。并且Python在很多场景下确实是一门生产可用的语言,不单单是教学语言或者一种玩具,这样说来,Python比Scratch或者乐高之类的图形化编程语言更有价值一些。

但是如果一直使用Python来编程,还是会有一些短板的,那就是没法更好的掌握编程的底层知识,无法深刻的理解编程的本质。C语言是一门更接触底层的编程语言,但是C语言不太适合入门的小朋友,缺乏娱乐性,很有可能一开始就会劝退一部分孩子。

这时不妨尝试一下Human Resource Machine,这是一个非常有意思的游戏。看似是一个闯关解谜的小游戏,但是实质可以看作一个极小的计算机系统。首先,它有输入和输出,然后空地可以看作暂存器,起着寄存器的效果,机器人就是一个执行单元,负责指令读取和执行,在输入、输出、寄存器之间传递数据。机器人可以执行的程序类似于计算机的编程语言,有各种类型的指令,包括数据存取(INBOX、OUTBOX)、算术运算(ADD、SUB)、寄存器存取(COPYTO、COPYFROM)、跳转(JUMP、JUMPIFZERO)等等。

HRM的指令系统非常小,小到只有10条左右的指令,看似做不了什么事情,或者做一件很简单的事情也需要很多指令完成,但是仔细琢磨一下,你会发现你其实已经了解到了计算机执行程序的根本。某种意义上,HRM的指令系统于汇编语言甚至机器语言是一个级别的,能更细致的了解计算机的底层逻辑。

比如说,简单的将两个数相加再输出,但是你知道计算机底层都在干什么吗?我们来看一下HRM要完成这个任务的指令序列:

inbox
copyto 0
inbox
add 0
outbox

机器人负责读取指令,然后从inbox获取数据,写道outbox,根据需要还会与寄存器打交道。先看一下指令的说明:

指令 操作数 说明
inbox 机器人拿起输入传送带的第一个积木(即成为当前积木)。原有当前积木被舍弃。当输入传送带上没有积木时,游戏结束。
outbox 将当前积木摆在输出传送带上。(机器人不再拥有当前积木)
add X 将当前机器人手中积木的数字加上X号空地上的积木。X号空地上的积木保持不变,机器人手中积木的数字替换成加完的结果。
sub X 将当前积木的数字减去X号空地上的积木。X号空地上的积木保持不变,机器人手中积木的数字替换成减完的结果。
copyto X 复制当前积木到X号空地。若X空地上有积木则舍弃原有积木。
copyfrom X 复制X号空地上的积木到当前积木,即把机器人手中积木的数字替换成X号空地上的积木的数字。若存在当前积木则舍弃原有当前积木。
jump X 改变机器人的机器人程序,将后续执行的指令改为从第X条指令开始执行。(这里的第X条是指机器人程序中的第X条比如假设第一条被执行过10次,它依旧是第一条指令)
jumpifzero X 如果当前积木为0,则改变机器人的机器人程序,将后续执行的指令改为从第X条指令开始执行。如果当前积木不为0,则不做任何操作。

指令非常简单,游戏中还有个别指令没在这说明,不过先忽略。我们再回过头看看前面那个例子,两个数相加的过程,细化到每条指令是这样的:

从输入读数
暂存到寄存器0
从输入读数
与寄存器0的数相加
输出

看起来挺繁琐的对不对?但是实际上计算机的运行过程就是这样的!我们再来看一个稍微复杂一些的程序:

INBOX
COPYTO   0
ADD      0
COPYTO   0
ADD      0
COPYTO   0
ADD      0
COPYTO   0
ADD      0
ADD      0
ADD      0
ADD      0
OUTBOX
JUMP     1

这个程序的效果是将一个数乘以40,你可以琢磨一下,程序是怎么实现这个效果的。

有兴趣的建议可以玩一下这个游戏,B站可以找到游戏的攻略视频,在github上还可以找到游戏的完整解决答案,每一关都有若干结果,不同的结果所用到的指令数量和执行时间也有区别,这个从文件名可以看出来。

HRM是一个很高的开端,我们完全可以将其稍微扩展一下,做成一个更有实际效果的编程入门工具。

Filter blog posts by tag HRM
rust (4)   wagtail (4)   zola (4)   kaggle (3)   vscode (3)   deepseek (2)   gemma (2)   go (2)   winui (2)   wsl (2)