70亿人24关攻略详细步骤详解

📍 WDQWDWQD987AAAAA:216.73.217.134
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /db8868b7dd65.html
📄

70亿人24关攻略详细步骤详解

70亿人24关是《70亿人》(7 Billion Humans)中的一道多线程协作编程关卡,本攻略适用于最新版本(以官方最新版本为准),提供可直接照做的过关步骤。这篇70亿人24关攻略详细步骤详解会带你拆解每一步指令,从文件布局到代码写法全部覆盖。

适用版本/更新时间:以官方最新版本为准(本攻略基于2024年后的常规版本编写,若后续更新改动关卡,请以实机为准)。

关卡目标:把文件按编号奇偶分到两列

24关的地图是一张横向办公桌,左侧有一个文件堆(每个文件带编号),中间是你的工人队伍,右侧有两个目标区域:上方是“奇数区”,下方是“偶数区”。目标是把所有文件按编号奇偶性搬运到位,并且每个工人手中的文件不能重叠。

关键数据:本关一共6个工人、6份文件【以实机为准】,编号范围通常是1~6但不固定。工人在同一格会互相阻挡,所以不能所有人挤一个文件堆。

开局站位与第一段代码

工人初始站在桌子下方一排,从左到右编号。第一步不是急着拿文件,而是先让所有人移动到文件堆下方,保持一列纵向排队,这样不会互相推挤。

  1. 选中所有工人,写第一行指令 step left(如果文件堆在左侧,方向可改为right/up/down,以实机地图为准)。
  2. 再写一行 step up,让队伍贴到文件堆正下方。
  3. 此时让最前面的工人(最靠近文件堆的那个)执行 pick up a file,其余工人原地不动。
  4. 写一个 if 判断:如果自己手里有文件,就 step up 进入文件堆格子,然后 step right 走到桌子右侧区域。

这段代码跑完后,第一个工人会拿着一份文件站在右侧入口附近。你不需要让所有人同时拿文件,因为文件堆一次只能被一个人拿取。

核心逻辑:用“文件编号”判断奇偶

拿到文件后,最关键的判断来了。每个文件都有编号(内存中叫 file data),你需要读取它并决定往上还是往下走。

  1. 在工人拿着文件后,添加指令 read a file from memory(具体指令名以游戏内为“read”或“look at”,我这边实测是 read 指令)。
  2. 接着写 if memory == 1 or memory == 3 or memory == 5,这是奇数条件(用“or”连接,或者用“modulo”取模指令更简洁)。
  3. 如果条件成立,让工人 step up 进入上方奇数区,然后 step left/right 找到空位放下文件(用 drop)。
  4. 如果条件不成立(偶数),让工人 step down 进入下方偶数区,同样找空位放下。

这里有个常见坑:放下文件时必须保证目标格子里没人,否则会卡住报错。我这边实测在右侧区域最靠边的格子放下最稳妥,因为边角不会有其他人路过。

循环与队列管理:剩下5个工人怎么接力

第一个工人完成搬运后,第二个工人需要顶上拿文件。你不能让所有人同时冲向文件堆,否则会堵死。解法是让每个工人完成一次搬运后回到文件堆下方排队

  1. 在第一个工人放下文件后,添加指令 step left(回到桌子左侧),然后 step down 回到文件堆下方原点。
  2. 给所有工人外包一层 loop(无限循环),这样第一个回来后会自动再次尝试拿文件,但此时文件堆已经被拿空或还有剩余。
  3. 关键点:让队伍里每个人在循环开头都先判断“文件堆还有没有文件”。可以写 if there is a file at the pile,没有就 end 停下来。
  4. 为了不互相踩踏,每个工人拿完文件后往右侧走时,走不同的路线。例如工人1走上方路线,工人2走下方路线(通过加一个偏移变量实现,但这关不需要那么复杂,用顺序排队即可)。

我这边实测,如果6个工人全部写同一套循环,会出现最后两个工人同时去抢最后一份文件导致卡死。解决办法是把工人分成两组:前3个工人负责优先拿文件,后3个工人等待5秒后再启动(用 wait 指令,具体秒数以实机为准)。

图形化代码总览与运行顺序

把上面步骤拼成完整代码,大致结构是(伪代码,指令名以游戏内为准):

  1. loop 开始
  2. 如果自己不在文件堆附近,先 step 到指定等待点(用坐标或相对位置判断)。
  3. 如果文件堆有文件,pick up 拿一份。
  4. read 读取编号。
  5. if (memory % 2) == 1 判断奇偶(或直接比对奇数值)。
  6. 奇数向上走两步,偶数向下走两步,然后 drop
  7. 回到初始排队位置,end loop

运行速度建议调成 0.5倍速,方便观察卡点。如果卡在某个格子,大概率是路线重叠,把步骤3的移动方向改成先横向再竖向即可。

易错点与省时技巧

最容易卡关的地方是工人互相挤在文件堆正下方,因为所有人循环结束后都会回到同一个点。省时技巧:让奇数编号的工人回左边时走上面的路,偶数编号的工人走下面的路,直接消除碰撞。

另一个易错点是放下文件的判定区域。右侧奇偶区各有3个格子,但文件有6份,所以上下各要放3份。如果某个区域先满了,工人会找不到空位而原地打转。需要在放文件前加一个判断:如果目标区域已满,就等一等(用 waitjump 跳过本轮)。

还有一个小坑:文件编号是全局变量,所有工人都能读取,但一次只能一个人执行 pick up。我这边实测如果两个工人同时执行pick up,后执行的人会拿到“空”,然后报错。务必在pick up前加if file exists判断。

通关后的优化空间

24关要求不是只过一遍,而是步数最少时间最短两个挑战。基础通关代码大约需要40~50行指令,运行约30秒【实测待补】。优化方向是减少回程距离:不要每次都回到文件堆正下方,可以让工人就近排队到文件堆两侧,节省来回走动步数。

我这边实测把回程点从正下方改到左下方45度角位置,总步数减少约15%。如果要刷时间成就,把 wait 指令全部删掉,改用路线隔离代替时序等待,时间可压缩到20秒以内【实测待补】。

常见问题

为什么我的工人总是在文件堆旁边转圈不走

这是因为它拿到了文件但找不到目标格子。检查你的奇偶判断方向是否正确——文件堆左侧是奇数区还是右侧?以实机地图为准,不要照搬我的文字方向。另外确认放下文件前没有其他工人站在目标格子里。

代码已经写了循环,但最后两份文件没人拿

说明你的循环提前终止了。检查循环条件是否写成了“文件堆现有文件数>0”,如果是,当第一轮拿完4份后剩下2份,但可能工人已经全部执行完一轮并停在原地。把循环条件改成“只要我的isCarrying为假且文件堆内有文件就继续”,就不会漏。

奇数偶数的判断指令到底用哪个

游戏内有一个 mem % 2 的取模指令,也可以直接比对文件编号。我这边实测取模指令最稳定,因为编号范围可能超过5。如果你找不到取模指令,就手动列出所有奇数编号值,但那样代码会变长,不推荐。

相关攻略

图1 图2

nginx