游戏编程代码大全_过完春节写代码——编程游戏深度推荐(下)

060c23827c530e05d990055536745ea9.png

上次说的《程序员升职记》是Tomorrow Corporation在2015年推出的作品,由于后来腾讯WeGame平台的助推,2018年在国内又带起一波编程小高潮。

万万没想到的是,2018年8月,这家公司又推出了它的续作《70亿人》(7 Billion Humans)。一样的恶搞画风,类似的操作和界面,但是!他们带来了全新的玩法!

而且是将一种非常高深的“并行程序”思想,用简单易懂的方式展示给大众。

c49d7dd7e6249c71a59d88876487e129.png

steam特别好评,品质保证。

废话不多说,我来给大家看看,这是个什么样的游戏。

1. 真正的并行程序

fa5facb7462bac6e6d01b1c75424965f.png

第一关,往下走一步,拿起方块,然后丢下方块。

很简单的操作,注意这三个人是同步运动的。

非专业程序员不会在意的一点是:这三个人的代码是一样的。妙处就在这里,咱们接着看。

2. 同样的代码,但执行效果会受环境影响

f7e943f6ecf84fd2ec7613f820713f72.png

玩过一代的人都知道“Jump跳转”语句,这里只要拿起方块一直往右走就行,但是坑的位置不同掉下去的位置就不同,显而易见 :)。

下面的图也是一样的,用“if如果”判断,方块在左边就往左走,方块在右边就往右走。又是同样的代码,不同的执行结果。

016d2fafcc5f711c96f458001c6b25d7.png

4. 多人连锁反应——一个人的结果成为另一个人的条件

目标:将左图变成右图。

555f2be0e3d717dd2bd99276165190fb.png

初始左上角的定位块已经预备好了,接下来的逻辑是:

如果左上角有方块,则放下方块;否则往下走。

只要每个人都这么做,就会连成一个斜线。

细细品味:每个人都是下一个人的定位点。

5、上帝之手——起始点特殊处理

下一关是类似的:

fe4c5b24dd52d083b1c3ae3eeebf09fa.png

一排人,依次上、下、上、下走,就可以像拉链一样拉开了。

思路是:如果左上角有人,就往下走;如果左下角有人,就往上走。

但是,如果这么写所有人都不会动。因为缺少上帝之手推动第一下。

关键是最左边的人,要作为一个特殊的最初推动力。

这里就必须要写一个if特例:左边有墙的人,先往上走一步。

705fc6845594f4cf0cf269c022fe36d9.png

解释:if (左边 == 墙) 则往上走一步,放下盒子

之后逻辑就顺畅了。这种思路也是并行程序设计常用的一种思路:通过各种if判断,把起点挑出来单独处理。这个思路之后还会常常用到。

6、分布式程序,如何求最大值?

玩过《程序员升职记》或是写过一点代码的同学都直到,要求一系列数中的最大值,必须要依次比较每一个元素,过程中手里一直拿着最大的元素,这样转一圈以后,手里的元素就肯定是最大的了。

但是,并行的分布式程序有一个更加“自然”的思路:

一些人站一排,每个人如果发现左右两边有一个人比自己高,就跳坑自尽【微笑】

一直这么做直到只剩下一个人。

这样就能求出最大值了,是不是很符合直觉呢?

98ba9ed9205ea35e639d746d75e1e087.png

第22关:皇家数字。最大的数字就是皇家数字,其他不够大的人都跳坑吧。

如果一个人比左边或右边小,就往下走三步跳坑。如果有左右有空位,要往左走,保持队伍紧凑,以便继续比较。

我想给这关换一个名字:从容赴死。

7、多人冲突时,要多尝试

真实编程中的并行程序有时是非常难写的,因为当两个逻辑争夺同一个数据时,前后顺序略有一点区别结果就截然不同。这就是传说中多线程程序的“Data Race”问题。本游戏中也偶尔会有这种问题。

要解决这种问题,有时候靠仔细思考不如强行尝试来的直接,因为在冲突时到底会发生什么情况要试试才知道。

a9b5126b90a38fa9267720d2b03452ad.png

第22关,每个人最终要拿到一个大于等于50的盒子,如果拿到小于50的盒子,就丢进粉碎机。

很多新手会卡在这关,或者说编程熟手反而会被卡住。因为会出现下面这种情况:

194f3ab2ed94da4202e55c108ebd40a5.png

左边红框的妹子刚粉碎完盒子,要往右走,但是被右边蓝框的大叔卡住位置了,走不过去。

这时候不要写一堆代码让妹子让开,正确做法是不管他,等大叔拿完盒子走人就没事了;或者大叔也要往左走粉碎盒子,这样妹子往右、大叔往左,自然就交换位置了。

问题复杂的时候,有时候瞎搞一下,还挺管用的。再举个例子:

a33402c4c2803bcc10c1e998789cdb91.png

这是一个贼复杂的“并行排序”问题,要让所有人从小到大排列。

这个问题也是别管那么多,就让较小的人往左走,较大的人往右走,说不定就解决了。

做出来以后再想想原理,哈哈。我初次尝试就是这么“冲”过去的,代码只写了6行。

8、其它高深的问题

这个游戏越到后来,越是引入一些非常神奇的算法。更神奇的是它通过巧妙的关卡设计,让玩家不需要真的去学计算机,只要有勇气挑战就总能打过去,享受到翻倍的乐趣。

比如,网络通信

23a17fe4aad82c2ac6920ca8d166f91f.png

四个人在四间密室中,每个人都要拿出并粉碎四个盒子。但是,四个粉碎机绝对不能有超过一个同时启动,否则失败。

四个人之间只能通过喊话交流。这就要用到神奇的网络通信技术了:监听(listen)和发包(tell)。

还有,多线程寻路算法

65aec673f5fbd3e88e866678d5708d2e.png

BOSS坐在中间,将地上所有的格子根据离boss的远近编上号,比如离boss一格的位置标1,离boss两格的位置标2。而且要考虑障碍物,比如途中障碍内部的那个格子是离BOSS很远的,因为要绕着走进去。

这就是经典的寻路算法(一部分)在游戏中的演绎,而且!竟然是并行的,有很多工人同时做这件事,作为专业程序员也会感觉到深深的恶意。

《70亿人》玩耍建议:

这是一个神奇的游戏,很多专业程序员引以为傲的高深概念和技巧,都在这个游戏中以平易近人的方式展示了出来,不得不感慨开发团队的脑洞之清奇。

1. 据玩家反映本作难度要高出《程序员升职记》不少,建议先玩前一作。

2. 如果说《程序员升职记》用于编程入门的话,那么本作真的就是锻炼高级编程思维了。

这部作品中有30%的算法就算放在现实中,也是比较高深的专业性算法。但是经过巧妙包装和设计,让它显得不那么难。

3. 后期的较难问题,以及支线挑战完全可以不急于做出来。编程技巧的成熟本来就是一个缓慢而长期的过程。

4. 本游戏有手机版且支持中文。《程序员升职记》的PC版也支持中文,但《70亿人》的steam版没有中文。

《70亿人》,让专家沉默,让玩家过瘾。

我先跳坑了,你们跟上。

cc30ab7e2569fa569ea46a10b4e8f248.png

另外,除了这两部游戏以外,还有更多硬核编程游戏,有兴趣的话可以交流。比如你可以去深圳龙腾科技有限公司看看:

深圳龙腾科技有限公司的技术资料:

8e76874f598b9fa9f58468e215abc440.png

作为一名骄傲的龙腾员工,我已经打印好装成了一册。

fd55d3c7e2f541f6166911c53e2529ad.png

不过这部游戏是硬件+软件编程,后期关卡难度之大令人咂舌。更适合特殊群体玩耍,就不推荐给大家伙了,容易被劝退。

深圳io吧-百度贴吧

——————————————————————————————

对游戏开发有兴趣的同学,欢迎光临 皮皮关 专业的游戏开发教育。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值