第9章 技术青年集结令
陈明的电话是早上九点打来的。
林浩正在吃早饭,一碗白粥,一碟咸菜。电话铃声尖锐地响起来,母亲在厨房喊:“浩子,接电话!”
他放下筷子,走到客厅。老式电话机是红色的,听筒很重。他拿起:“餵?”
“林浩吗?我是搜狐的陈明。”
“陈编辑,您好。”
“哎,別这么客气。”陈明的声音听起来心情不错,“你那个游戏,数据太好了。上线一周,日均点击破五万,用户平均停留时间超过八分钟。这在flash游戏里是现象级的。”
“谢谢。”林浩说,语气平静。
“我们领导看了数据,说想跟你长期合作。你手头还有新项目吗?”
“在做一个消除类的,物理引擎的。”
“物理引擎?”陈明顿了顿,“flash还能做物理引擎?”
“简化版的,刚体碰撞,重力模擬。”
“行,你做出来咱们再谈。”陈明说,“另外,有件事……方便透露你的联繫方式吗?有几个圈內人,看了你的游戏,想认识你。”
林浩沉默了两秒:“暂时不方便。有什么事可以通过您转达。”
“理解,理解。”陈明笑了,“搞技术的都这样,喜欢低调。那我给你个邮箱,你有新作品或者想合作,隨时联繫。”
掛了电话,林浩回到饭桌。粥已经凉了,他几口喝完,收拾碗筷。
母亲从厨房出来,擦著手:“谁呀?”
“搜狐的编辑,说游戏数据不错。”
“哦……”母亲似懂非懂地点点头,“那你继续做,妈支持你。”
回到房间,林浩打开电脑。先登录闪客帝国,后台消息99+。私信、评论、好友申请,大部分是夸游戏的,小部分是求合作的,还有几个是质疑他抄袭的——说他肯定不是新人,是哪个大佬的马甲。
他一条条看,但不回復。他现在不需要这些虚名,他需要人。
真正能做事的人。
《细胞吞噬》的火爆证明了他的设计能力,但一个人的力量是有限的。他需要团队,需要能写代码、能做美术、能搞运营的人。而2002年,这样的人大多散落在全国各地,有些还在上大学,有些在网吧打工,有些可能还没发现自己有这方面的天赋。
他需要一个方法,找到他们。
林浩打开论坛,进入“技术交流”板块。这里比作品区冷清得多,帖子不多,回復也少。大部分是初学者问基础问题,偶尔有几个技术討论帖,但深度有限。
他新建一个帖子。標题:“悬赏题:用50行代码实现粒子流体模擬”。
正文:
“语言:actionscript 2.0。
工具:flash mx。
要求:在550x400的舞台上,实现至少100个粒子的流体模擬效果。粒子之间要有简单的相互作用(排斥/吸引),与边界碰撞。代码不超过50行(不包括空行和注释)。
奖励:最佳实现者,可获得horizon工作室的实习邀请,及1000元奖金。
截止时间:三天。
提交方式:在本帖回覆中贴出核心代码及效果截图。
注意:只接受原创代码,谢绝抄袭。”
他点了发布。
这个题目的难度,在2002年的flash圈,是顶尖的。粒子系统本身就不简单,还要模擬流体,还要在50行內实现——这是故意设置的极限挑战。能解出来的,要么是天才,要么是经验丰富的老手。
而他真正的目的,不是看谁能解出来,而是看解题的思路、代码的风格、对问题的理解深度。
帖子发了十分钟,第一个回復出现了:
“沙发!大佬又出现了!”
“50行?开玩笑吧?”
“粒子流体是什么?新人求科普。”
“horizon工作室?没听过,新成立的吗?”
“1000元奖金!真的假的?”
质疑的居多。2002年,一千元奖金对普通网友来说很有吸引力,但更多人怀疑是骗局。
林浩不解释。他关掉页面,开始做自己的事。第二个游戏《方块大崩塌》已经完成了80%,他需要完善物理引擎,调整碰撞检测的精度。
工作到中午,他刷新了一下帖子。回复数:47。大部分是灌水,只有三个贴了代码。
第一个,id“flash小王子”,贴了八十多行代码,实现的是简单的粒子隨机运动,没有相互作用,没有流体效果。下面有人回覆:“这跟流体有关係?”
第二个,id“代码诗人”,贴了六十行,实现了一个漂亮的粒子拖尾效果,但依然不是流体模擬。代码写得挺优雅,但跑题了。
第三个,id“半夏”,只贴了三十行代码。林浩仔细看了一遍,眼睛微微眯起。
这三十行代码,实现了一个简化版的sph(光滑粒子流体动力学)算法。虽然极度简化——只考虑了密度和压力,忽略了粘性、表面张力——但在2002年的flash平台上,能用三十行代码写出这个,已经非常惊人。
更重要的是,代码风格极其乾净。变量命名规范,逻辑清晰,注释精准。没有多余的语句,没有炫技的写法,就是最纯粹、最高效的实现。
林浩点进“半夏”的主页。註册时间:2002年3月。发帖数:3。都是技术提问帖,问得很深,但没人回答。最后登录时间:昨天。
没有作品,没有简介,没有个人信息。像个幽灵。
林浩记下了这个id。他继续往下翻,后面又出现了几个尝试,但都不如“半夏”的惊艷。
下午,他接到了陈明的第二个电话。
“林浩,你那个悬赏题,在圈里炸了。”陈明的声音有些兴奋,“好多人问我horizon工作室是什么来头,是不是国外的工作室。还有人猜你是暴雪的人,或者ea的。”
“他们怎么说题目的难度?”
“都说难。有几个认识的圈內高手试了,说50行內几乎不可能,除非用极端的取巧方法。不过有个人做到了,id叫『半夏』,你看到了吗?”
“看到了。”
“那个人……有点意思。我打听了一下,好像是中科大的学生,数学系的,今年大二。平时独来独往,不混圈子,就喜欢研究算法。”
中科大,数学系。林浩心里有数了。这种背景,能写出那样的代码不奇怪。
“能联繫上吗?”
“我试试,但不保证。那人据说很孤僻,连宿舍同学都不怎么说话。”陈明顿了顿,“你真要招人?工作室成立了?”
“在筹备。”
“需要投资吗?我认识几个投资人,对游戏行业有兴趣。”
“暂时不用,谢谢。”
掛了电话,林浩继续工作。但心里已经记下了“半夏”。数学天才,算法能力强,性格孤僻——这种人是技术核心的最佳人选,但管理起来有难度。
晚上,帖子回复数破百了。又出现了几个有价值的尝试,其中一个id“楚飞”的引起了林浩的注意。
这个人没贴完整代码,只贴了核心算法思路:
“不用sph,用格子法。把舞台分成20x20的网格,每个格子记录密度和速度。粒子只与同格子和相邻格子的粒子交互。复杂度从o(n2)降到o(n)。50行內可以实现,但效果会粗糙。”
下面有人回覆:“格子法不是做流体模擬的主流吧?”
楚飞回覆:“在flash上,性能是第一位。sph好看但慢,格子法糙但快。如果要我选,我选格子法,然后加视觉后处理弥补粗糙度。”
很务实。不追求理论完美,追求工程可行。这是优秀的工程思维。
林浩点进楚飞的主页。註册时间:2001年8月。发帖数:87。大部分是游戏修改、外掛製作、逆向工程相关的帖子。语气桀驁,经常懟人,但技术確实扎实。最新一个帖子是三天前,问:“有人一起做《传奇》私服吗?我负责技术。”
私服。灰色地带。但技术能力应该不差。
林浩记下了。楚飞,有工程能力,有实战经验,但走的是偏门。需要引导。
第三个引起他注意的id是“陆明”。这个人没直接解题,而是回了一篇长文,分析题目本身的合理性:
“楼主出这道题,表面是考技术,其实是考思维。50行限制是故意设置的,逼我们做取捨:要效果,还是要简洁?要物理正確,还是要视觉近似?我的选择是:放弃完整的流体模擬,改用元胞自动机思路。每个粒子只有几个状態,根据周围粒子状態更新。虽然不像流体,但会有类似流体的『涌现』行为。代码35行,附图。”
他贴了代码和截图。效果確实不像传统流体,但有一种奇异的、动態的图案变化,很美,很魔性。
下面有人回覆:“这不算流体模擬吧?”
陆明回覆:“楼主没定义什么是『流体模擬』。我认为,能表现出流体某些特性(连续、可变形、有內聚力)的模擬,都算。我的实现可能不物理,但有趣。”
有创意,不拘泥,懂得重新定义问题。这是產品思维。
林浩看陆明的主页。註册时间:2002年1月。发帖数:42。大多是设计、艺术、心理学相关的討论,偶尔有技术帖。最新一个帖子是分享自己做的“自动生成水墨画”的算法,用flash实现,效果惊艷。
艺术+技术。稀缺的组合。
三天后,悬赏帖的回覆数定格在203。林浩从头到尾看了一遍,最终选了五个人:半夏、楚飞、陆明,还有两个候补。
他给这五个人发了私信,內容一样:
“恭喜通过初选。请於6月25日下午两点,登录qq,加群:1234567。进行第二轮面试。如通过,可获得实习机会及奖金。horizon。”
然后他申请了一个新的qq號,建了一个群。群名:“horizon技术测试”。
做完这些,他靠在椅背上,长长地舒了口气。
第一步走完了。接下来,是真正的考验。
6月25日,下午一点五十。
林浩坐在电脑前,qq已经登录。群是空的,只有他一个人。窗外下著小雨,六月的雨很细很密,打在窗户上沙沙响。
一点五十五,第一个人加群。id:半夏。头像是一片空白。
通过。
半夏进群后没说话,静静地待著。
一点五十七,第二个人:楚飞。头像是《传奇》里的武士,手里拿把屠龙刀。
通过。
楚飞进群后发了个表情:/抽菸。
一点五十九,第三个人:陆明。头像是自己画的水墨画,一只鹤。
通过。