上午的理论课在一片诡异的沉默中开始了。
梅林老师走上讲台,用发光的粉笔在黑板上写下了几个大字:
“魔力基础——元素周期与编码理论”
“各位同学,”梅林用标准的教授语气说,“今天我们要学习魔力的基本单位——魔素。魔素是构成魔力的最小单位,类似于物质世界的原子。每一种魔法都是由不同数量和排列的魔素组合而成的。”
他在黑板上画了一个圆圈,里面写着“H”——不对,是“魔”。
“这是火元素魔素,代号‘火’。”
然后又画了一个圆圈,里面写着“水”。
“这是水元素魔素,代号‘水’。”
“以此类推,我们有四大基本元素:火、水、风、地。每一种魔法咒语,本质上都是对这些魔素的排列组合。”
我在下面听得津津有味。这跟计算机科学太像了——魔素就是比特,魔法咒语就是指令集,魔法师就是CPU。
梅林继续说:“比如,一个简单的火球术,需要三个火元素魔素和两个风元素魔素,按照‘火-火-风-火-风’的顺序排列。”
他在黑板上写下:
火球术=[火,火,风,火,风]
我的眼睛亮了。
“老师,”我举手,“这个排列顺序……是不是类似于机器码里的操作码?”
“操作……什么?”
“就是……计算机处理器能执行的指令。比如,在x86架构里,'0x55'代表push ebp,'0x89 e5'代表mov ebp, esp。不同的字节序列对应不同的操作。”
全班同学一脸茫然。
梅林也愣了一下,但很快恢复了正常:“你的意思是……魔法咒语也是某种……编码?”
“对!”我站起来,走到黑板前,“您看,火球术的排列是[火,火,风,火,风]。如果我们把火元素魔素定义为1,风元素魔素定义为0——”
我在黑板上写下:
火球术= 1,1,0,1,0
“这是二进制!火球术的二进制代码是11010!”
教室里更安静了。
梅林看着黑板上的数字,沉默了大概十秒钟。
“有意思,”他缓缓开口,“非常有意思。”
他转过身,在黑板上写下了一长串魔法咒语:
火球术:[火,火,风,火,风]
水球术:[水,水,风,水,风]
风刃术:[风,风,火,风,火]
地墙术:[地,地,风,地,风]
“你看,”梅林指着这些序列,“如果把火=00,水=01,风=10,地=11——”
我抢过粉笔,在黑板上快速写下:
火球术: 00,00,10,00,10= 0000100010
水球术: 01,01,10,01,10= 0101100110
风刃术: 10,10,00,10,00= 1010001000
地墙术: 11,11,10,11,10= 1111101110
“都是10位的二进制数!”我激动得声音都变了,“魔法咒语就是二进制指令!不同的咒语对应不同的操作码!”
梅林看着我,眼神复杂。
“勇者yy,”他慢慢地说,“你学魔法多久了?”
“一天?不,严格来说……大概一个小时?”
“一个小时,”梅林重复了一遍,“你学魔法一个小时,就发现了魔法师们花了三千年才发现的本质。”
“……什么本质?”
“魔法的本质,”梅林深吸一口气,“是一种编程语言。”
教室里炸了。
“什么?魔法是编程语言?”
“那写代码就是施法?”
“我连手机都用不明白,你让我写代码?!”
“安静!”梅林用法杖敲了敲黑板,教室重新安静下来,“勇者yy的发现……其实并不新鲜。大陆顶级的魔法师们早就知道,魔法的本质是某种……程序。但这需要极高的数学天赋和逻辑思维能力,普通的魔法师不需要理解这一层,只需要背诵咒语就行了。”
他看着我,嘴角微微上扬。
“但既然你发现了这一点,那今天的课程内容就要改一改了。”
“改成什么?”
“改成——”梅林在黑板上写下了几个大字,“魔法编程入门。”