![060c23827c530e05d990055536745ea9.png](https://i-blog.csdnimg.cn/blog_migrate/2f5ce068c52ccaf0307a0eb77a864069.jpeg)
上次说的《程序员升职记》是Tomorrow Corporation在2015年推出的作品,由于后来腾讯WeGame平台的助推,2018年在国内又带起一波编程小高潮。
万万没想到的是,2018年8月,这家公司又推出了它的续作《70亿人》(7 Billion Humans)。一样的恶搞画风,类似的操作和界面,但是!他们带来了全新的玩法!
而且是将一种非常高深的“并行程序”思想,用简单易懂的方式展示给大众。
![c49d7dd7e6249c71a59d88876487e129.png](https://i-blog.csdnimg.cn/blog_migrate/5b0ed79a46b98d14aab687cffbcf5209.jpeg)
steam特别好评,品质保证。
废话不多说,我来给大家看看,这是个什么样的游戏。
1. 真正的并行程序
![fa5facb7462bac6e6d01b1c75424965f.png](https://i-blog.csdnimg.cn/blog_migrate/da304fb746f3be49ba24a1a3092c8a78.jpeg)
第一关,往下走一步,拿起方块,然后丢下方块。
很简单的操作,注意这三个人是同步运动的。
非专业程序员不会在意的一点是:这三个人的代码是一样的。妙处就在这里,咱们接着看。
2. 同样的代码,但执行效果会受环境影响
![f7e943f6ecf84fd2ec7613f820713f72.png](https://i-blog.csdnimg.cn/blog_migrate/13d1b022fbd283239388831bf008ef78.jpeg)
玩过一代的人都知道“Jump跳转”语句,这里只要拿起方块一直往右走就行,但是坑的位置不同掉下去的位置就不同,显而易见 :)。
下面的图也是一样的,用“if如果”判断,方块在左边就往左走,方块在右边就往右走。又是同样的代码,不同的执行结果。
![016d2fafcc5f711c96f458001c6b25d7.png](https://i-blog.csdnimg.cn/blog_migrate/b26f0fd2e560910ceeb7da4aeb590b51.jpeg)
4. 多人连锁反应——一个人的结果成为另一个人的条件
目标:将左图变成右图。
![555f2be0e3d717dd2bd99276165190fb.png](https://i-blog.csdnimg.cn/blog_migrate/28a9495e33e505ec4cf6a77971359a40.jpeg)
初始左上角的定位块已经预备好了,接下来的逻辑是:
如果左上角有方块,则放下方块;否则往下走。
只要每个人都这么做,就会连成一个斜线。
细细品味:每个人都是下一个人的定位点。
5、上帝之手——起始点特殊处理
下一关是类似的:
![fe4c5b24dd52d083b1c3ae3eeebf09fa.png](https://i-blog.csdnimg.cn/blog_migrate/6268be890ba24363ee48ca15bc8597b3.jpeg)
一排人,依次上、下、上、下走,就可以像拉链一样拉开了。
思路是:如果左上角有人,就往下走;如果左下角有人,就往上走。
但是,如果这么写所有人都不会动。因为缺少上帝之手推动第一下。
关键是最左边的人,要作为一个特殊的最初推动力。
这里就必须要写一个if特例:左边有墙的人,先往上走一步。
![705fc6845594f4cf0cf269c022fe36d9.png](https://i-blog.csdnimg.cn/blog_migrate/db87293654d84e34516c5b8295aa509f.jpeg)
解释:if (左边 == 墙) 则往上走一步,放下盒子
之后逻辑就顺畅了。这种思路也是并行程序设计常用的一种思路:通过各种if判断,把起点挑出来单独处理。这个思路之后还会常常用到。
6、分布式程序,如何求最大值?
玩过《程序员升职记》或是写过一点代码的同学都直到,要求一系列数中的最大值,必须要依次比较每一个元素,过程中手里一直拿着最大的元素,这样转一圈以后,手里的元素就肯定是最大的了。
但是,并行的分布式程序有一个更加“自然”的思路:
一些人站一排,每个人如果发现左右两边有一个人比自己高,就跳坑自尽【微笑】
一直这么做直到只剩下一个人。
这样就能求出最大值了,是不是很符合直觉呢?
![98ba9ed9205ea35e639d746d75e1e087.png](https://i-blog.csdnimg.cn/blog_migrate/988cd75fad4c6019d774779fe32bdea1.jpeg)
第22关:皇家数字。最大的数字就是皇家数字,其他不够大的人都跳坑吧。
如果一个人比左边或右边小,就往下走三步跳坑。如果有左右有空位,要往左走,保持队伍紧凑,以便继续比较。
我想给这关换一个名字:从容赴死。
7、多人冲突时,要多尝试
真实编程中的并行程序有时是非常难写的,因为当两个逻辑争夺同一个数据时,前后顺序略有一点区别结果就截然不同。这就是传说中多线程程序的“Data Race”问题。本游戏中也偶尔会有这种问题。
要解决这种问题,有时候靠仔细思考不如强行尝试来的直接,因为在冲突时到底会发生什么情况要试试才知道。
![a9b5126b90a38fa9267720d2b03452ad.png](https://i-blog.csdnimg.cn/blog_migrate/e896565d038f76da8716861bbc217ecc.jpeg)
第22关,每个人最终要拿到一个大于等于50的盒子,如果拿到小于50的盒子,就丢进粉碎机。
很多新手会卡在这关,或者说编程熟手反而会被卡住。因为会出现下面这种情况:
![194f3ab2ed94da4202e55c108ebd40a5.png](https://i-blog.csdnimg.cn/blog_migrate/ea9493e73735182933fa670ae67161f1.jpeg)
左边红框的妹子刚粉碎完盒子,要往右走,但是被右边蓝框的大叔卡住位置了,走不过去。
这时候不要写一堆代码让妹子让开,正确做法是不管他,等大叔拿完盒子走人就没事了;或者大叔也要往左走粉碎盒子,这样妹子往右、大叔往左,自然就交换位置了。
问题复杂的时候,有时候瞎搞一下,还挺管用的。再举个例子:
![a33402c4c2803bcc10c1e998789cdb91.png](https://i-blog.csdnimg.cn/blog_migrate/0e670390066d3d3f897017febc5c5dbc.jpeg)
这是一个贼复杂的“并行排序”问题,要让所有人从小到大排列。
这个问题也是别管那么多,就让较小的人往左走,较大的人往右走,说不定就解决了。
做出来以后再想想原理,哈哈。我初次尝试就是这么“冲”过去的,代码只写了6行。
8、其它高深的问题
这个游戏越到后来,越是引入一些非常神奇的算法。更神奇的是它通过巧妙的关卡设计,让玩家不需要真的去学计算机,只要有勇气挑战就总能打过去,享受到翻倍的乐趣。
比如,网络通信:
![23a17fe4aad82c2ac6920ca8d166f91f.png](https://i-blog.csdnimg.cn/blog_migrate/da197ae190ae0bf4d55f86c6598fc9c6.jpeg)
四个人在四间密室中,每个人都要拿出并粉碎四个盒子。但是,四个粉碎机绝对不能有超过一个同时启动,否则失败。
四个人之间只能通过喊话交流。这就要用到神奇的网络通信技术了:监听(listen)和发包(tell)。
还有,多线程寻路算法:
![65aec673f5fbd3e88e866678d5708d2e.png](https://i-blog.csdnimg.cn/blog_migrate/3e4b72f8da73880c1d98baa6395fa0b6.jpeg)
BOSS坐在中间,将地上所有的格子根据离boss的远近编上号,比如离boss一格的位置标1,离boss两格的位置标2。而且要考虑障碍物,比如途中障碍内部的那个格子是离BOSS很远的,因为要绕着走进去。
这就是经典的寻路算法(一部分)在游戏中的演绎,而且!竟然是并行的,有很多工人同时做这件事,作为专业程序员也会感觉到深深的恶意。
《70亿人》玩耍建议:
这是一个神奇的游戏,很多专业程序员引以为傲的高深概念和技巧,都在这个游戏中以平易近人的方式展示了出来,不得不感慨开发团队的脑洞之清奇。
1. 据玩家反映本作难度要高出《程序员升职记》不少,建议先玩前一作。
2. 如果说《程序员升职记》用于编程入门的话,那么本作真的就是锻炼高级编程思维了。
这部作品中有30%的算法就算放在现实中,也是比较高深的专业性算法。但是经过巧妙包装和设计,让它显得不那么难。
3. 后期的较难问题,以及支线挑战完全可以不急于做出来。编程技巧的成熟本来就是一个缓慢而长期的过程。
4. 本游戏有手机版且支持中文。《程序员升职记》的PC版也支持中文,但《70亿人》的steam版没有中文。
《70亿人》,让专家沉默,让玩家过瘾。
我先跳坑了,你们跟上。
![cc30ab7e2569fa569ea46a10b4e8f248.png](https://i-blog.csdnimg.cn/blog_migrate/c544b57f45334c027265242ad6119d2f.jpeg)
另外,除了这两部游戏以外,还有更多硬核编程游戏,有兴趣的话可以交流。比如你可以去深圳龙腾科技有限公司看看:
深圳龙腾科技有限公司的技术资料:
![8e76874f598b9fa9f58468e215abc440.png](https://i-blog.csdnimg.cn/blog_migrate/1585965db1a846a56328e492963a86da.jpeg)
作为一名骄傲的龙腾员工,我已经打印好装成了一册。
![fd55d3c7e2f541f6166911c53e2529ad.png](https://i-blog.csdnimg.cn/blog_migrate/dff98f8e7fcaaefeb7a2e3a72ad603c3.jpeg)
不过这部游戏是硬件+软件编程,后期关卡难度之大令人咂舌。更适合特殊群体玩耍,就不推荐给大家伙了,容易被劝退。
深圳io吧-百度贴吧
——————————————————————————————
对游戏开发有兴趣的同学,欢迎光临 皮皮关 专业的游戏开发教育。