6、俄罗斯方块(一)建模

失败是成功之母,伴随着成功出现的还有骄傲。经过DOS门、炮弹飞机和音乐演奏等等事件,木鸿飞渐渐地被胜利冲昏了头脑,把高斯成为数学王子的故事直接嵌套在自己的身上,误以为自己成了编程王子,于是乎他作了一个疯狂的决定:设计俄罗斯方块游戏程序。

按说木鸿飞已经具备了一定的编程知识与能力,应该可以独立设计了。不过此时此景作这个选择,的确有的急功近利,至少有三座大山摆在面前:其一,木鸿飞缺乏编程的系统学习,用现在一句流行话来说,叫做“驾校除名,自学成才”,均属于恐怖的新手类型。其二,木鸿飞必须独立设计俄罗斯方块,前几次程序都可以从书上照抄,比如炮打飞机只要照书打字即可,而音乐演奏程序也仅仅是修改一些数据,但本次不同,必须独立完成开始系统分析,每一个函数,每一个代码都必须自己设计,一一调试通过。其三,木鸿飞缺乏时间,系统分析、程序设计、代码调试,都需要大量的时间,但是高中生涯早已排的满满当当的,必须继续挤压时间。

当然,木鸿飞向俄罗斯方块发起进攻也是有所倚仗的,这出自于他对程序强大的直觉,俄罗斯方块在他眼中,只不过是两个二维数组,其中一个小的二维数组在另一个大的二维数组中移动。

“使用一个4×4的二维数组表示正在掉落的方块,一个10×20的二维数组表示整个方块可以移动的区域,使用1表示有方块,0表示没有方块。只要明白了这个,俄罗斯方块已经成功了一半。”面对×××等人咨询时,木鸿飞如是说。

多年以后,木鸿飞明白了这种描述方法叫做俄罗斯方块游戏的“模型”,设计这个模型的过程叫做“建模”,也就是透过程序缤纷复杂的表象去抓住实质。比如貌美如花的女子在佛法高深的大师眼中不再是人类,而是一具具粉色的骷髅;汽车在物理学者眼中不再是汽车,而是一具同时制动力、摩擦力和空气阻力的物体;牛在庖丁眼中不再是生物,而是一根根骨头与肌肉的混合物。同理俄罗斯方块在木鸿飞眼中也不是一个游戏,而是两个二维数组,其中一个大而固定,另一个小却在大二维数组中移动。

这就是建模思想,一个计算机编程者必须具备的思想。当登录风靡世界的QQ类游戏时,你必须联想到服务器——客户机模型,此时登录的PC机正作为客户机向QQ服务器进行SOCKET通信。当游玩Windows中自带的扫雷游戏时,你必须将之建模为二维数组,其元素值为‘X’时表示该格有地雷,为数字时表示周围的地雷数目。当进行麻将游戏时,你必须立刻浮现出一维数组,其元素使用不同的数字描述不同的麻将牌,例如19表示“万”,1119表示“条”,2129表示“筒”等。

其实建模思想并不高深也并不复杂,大家在生活中可能直觉不自觉的进行了建模。有一位街头霸王资深玩家,他充分地运用了建模思想描述班级篮球赛,让我们看看吧:

赤木刚宪同学上场了,赤同学身体结实强壮,估计生命值可达350。樱木花道同学也上场了,他打着哈欠,明显睡眠不足,疲劳度60

流川枫同学接到球,快速运过中场,三步上篮,球进了,得两分,但是流同学的体力值也减少了3个点。

樱木花道同学抢到球,跳起灌篮,可惜太高了,头撞到篮板上,呵呵,樱同学弹跳力100,体力100,可惜技巧只有50

哇塞,樱木花道与肌肉男打了起来,樱同学战斗力1000,肌肉男只有800,明显不是樱同学的对手。

……

虽然以上内容纯属搞笑,如有雷同实属巧合,但是却也不乏为建模的最好实例。

不妨将人们建模的能力称之为建模感,建模感直接决定了编程者在程序之路上前进的距离。有人似乎相当有天赋,只一眼就洞悉程序的模型。有人似乎却比较迟钝,无论如何也理解不要程序的内涵。还有些同学虽然初次接触计算机建模能力不足,但通过训练可以学习建模技巧、提升建模能力。木鸿飞很幸运,他有着超乎寻常的计算机建模感觉,任何程序都能在第一眼就能寻找到最佳的模型,他对计算机的疯狂热爱和疯狂编程反过来又加强了这种建感觉。

大学期间,木鸿飞虽然游戏水平不高,却经常对大家热玩的游戏指指点点,指点的内容都是关于如何游戏建模的,仿佛该游戏就是他亲自设计的一般。于是有无聊好事的寝室同学使用整型数值建模“建模感”,取值100为最高,并为年级所有编程高手排名,仿百晓生设置编程榜,“木鸿飞的建模感达99,黑榜排名第一。”比如寝室里曾经流行玩耍“雷电”,木鸿飞也乐在其中,自然不忘使用特殊的视角评论一番:

“玩家飞机、对手飞机和坦克、固定物体以及×××等都可以建模为一个对象,有很多属性,比如整型描述的生命值,整型描述的速度等。”

“部分飞机击打一次就可以消灭,部分飞机则需要击打多次。系统肯定为每个飞机设定了整型的生命值,为每个×××设计了整型的破坏值。假设生命值为x,破坏值为y,如果×××打中飞机,则飞机生命值x更换为x-y,即打中时执行语句:x=x-y,此后判断x取值,如果小于等于0,则飞机摧毁。”

“系统设置了一个定时器,每个间隔单元内,所有对象均执行一步,比如×××飘移一个,坦克移动一格,玩家飞机则接收输入并作出相应处理等。”

“大家看,当玩家的飞机移动时,×××会改变方向,向玩家移动。这里面肯定加入了人工智能,×××可以根据玩家位置自动调整前进方向。这种调整不能太明显,否则游戏难度太大,大家都会望而止步,破坏了游戏的可玩性。当然也不能不调整,否则游戏难度太小,破坏了游戏的耐玩度。”

……

木鸿飞是全班唯一的系统分析师,也是全国为数不多的系统分析师之一,同学们都认为大学时期独特的游戏视角成就了木鸿飞的系分之梦,只是木鸿飞是如何知道这种游戏建模训练方法的呢?

“我没有精力编写所有的程序,甚至有一段时间我连电脑都没有,但是我真的特别喜欢编程,尤其是编写游戏程序,怎么办?我只有设计每个游戏的模型,思索模型的优缺点,以此满足编程的欲望。当然我也会从中选取一两个工作量相对比较小的进行编码。”随着接触游戏的增多,木鸿飞的训练也逐渐加大,建模能力在潜移默化中提升。而木鸿飞选取设计的游戏程序也在大学最后一学期悄然开花,为其爱情之旅带来了一丝浪漫,成为爱之表白的秘密武器,最终抱得美人归,当然这是后话,暂且不提。

上一篇   目录  下一篇