李建新两手攥着裤缝。

他写了几天、几百行的逻辑。

林希用十七行干掉了。

不是写得快。

是他还在一块砖一块砖地数墙,林希已经在墙外画了个框。

“这个方法……”

李建新喉结动了动。

“叫什么?”

“碰撞箱。”

林希头也没抬。

“以后做任何游戏,第一件事就是套碰撞箱。”

“记住了。”

李建新立刻翻开笔记本。

他把“碰撞箱”三个字写了一遍。

又写了一遍。

最后用力写了第三遍,笔尖差点划破纸。

林希端起搪瓷缸,喝了口温水,扫视全场。

“机器的算力是死的。”

“脑子是活的。”

“做工程产品,不是写数学论文。”

“别把机器当牲口使,逮着就往死里榨。”

没人吭声。

煤球炉子里,火星轻轻爆了一下。

林希放下搪瓷缸。

“下一个谁的进度?”

角落里,负责《逻辑方块》的小戴哆嗦了一下。

是的,既然在这个时代,《俄罗斯方块》是华国人发明的,林希就给他换了个名字。

《逻辑方块》,一听就是个教育软件!

小戴顶着鸡窝头,扶着眼镜挤出来。

刚才还看热闹,现在轮到自己,底气顿时掉了半截。

“林总。”

“底层消除逻辑跑通了。”

“但是……”

他看了一眼李建新,又看了一眼黑板上的“碰撞箱”。

声音更虚了。

“玩到第六层就死机。”

“这回……真是物理极限。”

这话一出,旁边几个学生表情都有点微妙。

刚才李建新也是这么说的。

结果物理极限被十七行代码按在地上摩擦。

小戴赶紧调出监控数据,指着飙红的内存条解释:

“机器内存只有2K。”

“棋盘一共200个格子。”

“我用标准整型变量记录状态,1是有,0是没有。”

“一个整型占2字节。”

“200个格子就是400字节。”

“再加上下落、消行、方块形态……”

“一到第六层,内存就塞爆,直接溢出。”

林希揉了揉太阳穴。

早期语言里,拿16个比特存一个只需要1个比特的“是非题”。

这不是写程序。

这是烧钱。

虽然现在烧的是内存。

“你在2K内存上,用整型存1和0?”

林希看他的眼神,像老师傅看徒弟拿菜刀拧螺丝。

“这不叫编程。”

“这叫暴殄天物。”

“你当内存是你家大白菜,论吨批发的?”

小戴眼镜滑到鼻尖,忘了扶。

林希站起身,拿起粉笔。

“一个字节几个比特?”

小戴立刻回答:

“8个。”

“既然只有1和0两种状态。”

林希在黑板上写下:

0 0 0 0 0 0 0 0

“一个字节,8个比特,天然就是8个开关。”

“开,就是有。”

“关,就是无。”

“为什么要用完整整型记一个格子?”

他用力写下几个符号:

<< >> &

“位运算。”

“左移,右移,按位与。”

“一个字节管8个格子。”

“10列棋盘,两个字节就够。”

“20行,一共40个字节。”

他转头看小戴:

“400字节变40字节。”

“省出来的空间,够你玩到第一百层。”

小戴盯着黑板上那八个0。

旁边有人下意识掰着手指数,数到第八下,手停在半空。

一个字节,当八个格子用?

还能这么玩?

林希已经坐回键盘前。

几行极简的汇编指令跳出来。

位移。

按位与。

清除一行时,数据整体下移。

没有花里胡哨的结构。

没有臃肿的循环。

干净得像一把剔骨刀。

重新编译。

运行。

简陋的方块开始落下、堆积、消行。

第五层。

第十层。

第十五层。

画面依旧流畅。

内存占用暴降八倍,纹丝不动。

小戴盯着屏幕右下角的数字,半天才挤出一句:

“……这也行?”

研发室里只剩外面的风雪声。

如果说“碰撞箱”是换一条路绕过大山。

那“位运算”就是把一块铜板劈成八瓣花,还嫌不够省。

直播间弹幕飞过:

【给八十年代大学生一点小小的位运算震撼!】

【逼急了,老派程序员能把代码掰碎塞进寄存器里。】

【主播这是在给第一代程序员布道啊!】

【2K内存:求求了,终于有人把我当人看了。】

林希拍掉手上的粉笔灰。

“今天这两招,刻在脑子里。”

“以后写代码,先看手里有多大的碗,再决定下多少米。”

这一次,没人再拍桌子。

十几支铅笔同时落到纸上。

沙沙声很轻,却压过了炉子里的火星声。

李建新盯着黑板上的“碰撞箱”。

小戴盯着那一排0和1。

他们看林希的眼神,彻底变了。

那不是仰慕。

那是一群第一次抬头看见山顶的人,终于明白自己脚下这条路,到底能通向哪里。

解决了碰撞箱和位运算,十几个大学生看林希的眼神全变了。

但林希知道,底层逻辑只是骨架。

游戏能跑,只是及格。

能让人骂着还想再开一局,才叫产品。

他喝了口茶,扫了一圈研发室。

“功能跑通了。”

“但打起来像往棉花上抡拳头。”

李建新苦着脸点头:

“对,干巴巴的。”

“像两块橡皮擦打架。”

林希放下茶缸。

“因为没上血肉。”

“游戏不光是数学,还是心理学。”

他拿起粉笔,在黑板上写下三个字。

多巴胺。

十几个大学生面面相觑。

这词他们听过。

但没人想过,写游戏还能写到这上面。

林希问:

“谁打过靶?”

李建新愣了一下。

“军训打过。”

“枪托撞肩膀什么感觉?”

“疼。”

他想了想,又补了一句:

“但挺带劲。”

“对。”

林希点头。

“动作只要给了足够强的即时反馈,大脑就会记住。”

“它会催你——再来一次。”

他指向屏幕。

“现在的问题是,开炮静悄悄,爆炸软趴趴。”

“玩家按下键,大脑收不到确认信号。”

“当然觉得没意思。”

小戴推了推眼镜,小声问:

“那怎么加?”

“三个地方。”

林希竖起一根手指。

“第一,开炮瞬间。”

他坐到开发机前,敲了几行汇编。

屏幕渲染原点,被他硬生生往开火方向偏了两像素。

下一帧,再拉回来。

“炮弹飞出去那一帧。”

“画面抖一下。”

“幅度别大。”

“大了叫晕,小了才叫劲。”

“编译。”