70亿人24关是《70亿人》(7 Billion Humans)中的一道多线程协作编程关卡,本攻略适用于最新版本(以官方最新版本为准),提供可直接照做的过关步骤。这篇70亿人24关攻略详细步骤详解会带你拆解每一步指令,从文件布局到代码写法全部覆盖。
适用版本/更新时间:以官方最新版本为准(本攻略基于2024年后的常规版本编写,若后续更新改动关卡,请以实机为准)。
24关的地图是一张横向办公桌,左侧有一个文件堆(每个文件带编号),中间是你的工人队伍,右侧有两个目标区域:上方是“奇数区”,下方是“偶数区”。目标是把所有文件按编号奇偶性搬运到位,并且每个工人手中的文件不能重叠。
关键数据:本关一共6个工人、6份文件【以实机为准】,编号范围通常是1~6但不固定。工人在同一格会互相阻挡,所以不能所有人挤一个文件堆。
工人初始站在桌子下方一排,从左到右编号。第一步不是急着拿文件,而是先让所有人移动到文件堆下方,保持一列纵向排队,这样不会互相推挤。
这段代码跑完后,第一个工人会拿着一份文件站在右侧入口附近。你不需要让所有人同时拿文件,因为文件堆一次只能被一个人拿取。
拿到文件后,最关键的判断来了。每个文件都有编号(内存中叫 file data),你需要读取它并决定往上还是往下走。
这里有个常见坑:放下文件时必须保证目标格子里没人,否则会卡住报错。我这边实测在右侧区域最靠边的格子放下最稳妥,因为边角不会有其他人路过。
第一个工人完成搬运后,第二个工人需要顶上拿文件。你不能让所有人同时冲向文件堆,否则会堵死。解法是让每个工人完成一次搬运后回到文件堆下方排队。
我这边实测,如果6个工人全部写同一套循环,会出现最后两个工人同时去抢最后一份文件导致卡死。解决办法是把工人分成两组:前3个工人负责优先拿文件,后3个工人等待5秒后再启动(用 wait 指令,具体秒数以实机为准)。
把上面步骤拼成完整代码,大致结构是(伪代码,指令名以游戏内为准):
运行速度建议调成 0.5倍速,方便观察卡点。如果卡在某个格子,大概率是路线重叠,把步骤3的移动方向改成先横向再竖向即可。
最容易卡关的地方是工人互相挤在文件堆正下方,因为所有人循环结束后都会回到同一个点。省时技巧:让奇数编号的工人回左边时走上面的路,偶数编号的工人走下面的路,直接消除碰撞。
另一个易错点是放下文件的判定区域。右侧奇偶区各有3个格子,但文件有6份,所以上下各要放3份。如果某个区域先满了,工人会找不到空位而原地打转。需要在放文件前加一个判断:如果目标区域已满,就等一等(用 wait 或 jump 跳过本轮)。
还有一个小坑:文件编号是全局变量,所有工人都能读取,但一次只能一个人执行 pick up。我这边实测如果两个工人同时执行pick up,后执行的人会拿到“空”,然后报错。务必在pick up前加if file exists判断。
24关要求不是只过一遍,而是步数最少和时间最短两个挑战。基础通关代码大约需要40~50行指令,运行约30秒【实测待补】。优化方向是减少回程距离:不要每次都回到文件堆正下方,可以让工人就近排队到文件堆两侧,节省来回走动步数。
我这边实测把回程点从正下方改到左下方45度角位置,总步数减少约15%。如果要刷时间成就,把 wait 指令全部删掉,改用路线隔离代替时序等待,时间可压缩到20秒以内【实测待补】。
这是因为它拿到了文件但找不到目标格子。检查你的奇偶判断方向是否正确——文件堆左侧是奇数区还是右侧?以实机地图为准,不要照搬我的文字方向。另外确认放下文件前没有其他工人站在目标格子里。
说明你的循环提前终止了。检查循环条件是否写成了“文件堆现有文件数>0”,如果是,当第一轮拿完4份后剩下2份,但可能工人已经全部执行完一轮并停在原地。把循环条件改成“只要我的isCarrying为假且文件堆内有文件就继续”,就不会漏。
游戏内有一个 mem % 2 的取模指令,也可以直接比对文件编号。我这边实测取模指令最稳定,因为编号范围可能超过5。如果你找不到取模指令,就手动列出所有奇数编号值,但那样代码会变长,不推荐。