苹果II上,他用BASIC写简单的图形程序,画会动的星星、跳动的音符;8086上,他学DOS命令,用DEBUG工具看内存,甚至尝试用汇编语言写几行小程序(虽然语法生涩,但逻辑清淅)。
他的进步快得惊人。
两周后,他就能用苹果II的BASIC写一个贪吃蛇游戏——用方向键控制小方块移动,吃到随机出现的食物后变长,撞到边界或自己身体则游戏结束。
虽然画面是粗糙的字符和简单图形,但逻辑完整,运行流畅。
张老师看到后,惊讶得半天说不出话:“这……这得学多久才能写出来?”
“三天,每天放学后练两小时。”陆沉说。
张老师沉默了。
他知道陆沉没说谎,但三天写出一个可运行的贪吃蛇,在任何一本编程教材里都是进阶案例,而这个十岁的孩子,只用了三天。
陆沉的计算机能力很快在实验班传开。
孙鹏缠着他教怎么改游戏参数,陈浩想了解硬件原理,刘宇则和他讨论算法优化。
陆沉从不藏私,但也不会主动眩耀。
他帮孙鹏修改了贪吃蛇的移动速度,给陈浩解释了8086的寄存器结构(用修农机时齿轮传动打比方),和刘宇一起用数学公式优化了图形绘制效率。
——
特权带来的意料之中的副作用,就是学霸三人组的请教越来越频繁。
每天下午放学后,陆沉钻进里间机房没多久,外间就会响起试探性的敲门声,或者干脆是孙鹏那标志性的大嗓门隔着门板传来:“沉子!开门!救命!”
这天周四,陆沉正在8086 PC机上,尝试用DEBUG工具查看一段简单的汇编程序在内存中的加载情况。
门又被敲响了,节奏急促。
陆沉保存好进度,起身开门。
门口站着三个人:一脸苦相的孙鹏,眉头紧锁的陈浩,还有抱着本厚厚《数学物理方法》的刘宇。
“沉子,江湖救急!”孙鹏率先挤进来,指着外间一台中华学习机,“我的坦克大战,好不容易改了参数,坦克跑得飞快,可一开火就死机!肯定是哪个数据溢出搞崩了!”
陈浩则递过来一张手绘的草图,上面画着8086 CPU的方块图,用箭头标注着数据流,旁边写着密密麻麻的问题:“你上次说AX、BX这些寄存器像齿轮箱里的不同齿轮,负责传递不同力道的的数据。那如果同时有多个力道要处理,CPU怎么知道先转哪个齿轮?还有这个时钟周期,是不是就象柴油机的曲轴转一圈,完成一个动作?”
刘宇没说话,只是把手里那本《数学物理方法》翻到某一页,指着上面一个用级数展开近似计算积分的公式,又指了指里间那台苹果II:“我在想,如果要用计算机数值求解这个积分,是不是得把这个连续过程离散化?离散的步长怎么取,才能在精度和计算量之间取得平衡?我用BASIC写了个循环试算,但结果不太对,感觉是舍入误差累积了。”
陆沉看着眼前三位同学,一个游戏崩溃,一个刨根问底钻研硬件原理,一个试图用计算机解决高阶数学问题。
他忽然觉得这场面有点熟悉,仿佛回到了前世的实验室,同事们拿着各自的问题来找他讨论。
“一个个来。”陆沉把门完全打开,让三人进来。
里间空间不大,一下子显得有点拥挤。
他先走到孙鹏的机器前。
孙鹏的坦克大战是他用BASIC模仿的,图形极其简陋,用字符表示坦克和墙壁。
陆沉调出源码,快速浏览。
“你这里,”。你想让子弹发射位置靠前一点,想法没错。会不会超过屏幕边界。当坦克贴边时,这个计算值可能为负或超过最大值,导致数组越界,访问了不该访问的内存地址,程序就崩了。”
“边界检查……”孙鹏恍然大悟,“我光想着让坦克跑得快,忘了子弹出生点也可能出界!那怎么办?每发一颗子弹都判断一下?”
“加个IF语句判断计算后的坐标是否在有效范围内,如果非法,就修正到边界值,或者干脆不允许发射。”陆沉说着,接过键盘,快速加了四行条件判断。
运行,坦克贴边开火,子弹稳稳出现在边界处,不再死机。
“神了!”孙鹏一拍大腿,“就这么简单?我怎么就没想到!”
“经验问题。多写多崩几次,就有感觉了。”陆沉笑了笑。
这确实是经验,前世调试程序时,边界条件是最容易出错的角落之一。
接着是陈浩。
陆沉拿过他那张手绘的CPU图,看了几眼,发现陈浩的理解已