嬉闹归嬉闹,最终二人静下心来,绍绍开始请教俄罗斯方块的设计,木鸿飞也不藏拙,马上开始讲解;“游戏其实分为三重循环,也就是可以分为三个部分。”
“哪三个?”绍绍问。
“我称之为外循环、中循环和内循环。其中外循环产生方块,循环内是一个方块从产生到落下到消失的全部生命周期,每循环一次肯定落下了一个方块。”木鸿飞道。
“恩,可以理解。”绍绍点点头,“外循环对应每一个方块。那么中循环呢?”。
“在游戏过程中,方块都会下落,对不对?中循环就是这个落下的过程,每循环一次,方块落下一格。”木鸿飞道。
“如果方块落到底了呢?是不是要判断消行了。可以你不是说中循环只负责落下一格吗?难道每一个落下都要判断消行处理?可是不对啊,明明只有落到最下面那一次循环才用消行?啊,我头晕了,想不清楚了。”绍绍摸着头,痛苦的说道。
“消行是外循环的事情好不好!外循环做四件事,分别是:产生方块、游戏结束判断和处理、调用中循环使方块落到底和落到低后的消行处理。”怕绍绍还不明白,木鸿飞在纸上画出了外循环的流程图。
“哦,你这么一画我就明白了。你为什么不早的画呢?还有为什么我刚刚会不明白呢?”绍绍打破沙锅问到底,颇有点十万个为什么的味道。
“我怎么知道。”木鸿飞给了绍绍一个白眼,随后想了想,说道:“可能是你的思路不够清晰,我们是在中循环时提及消行的,然后你就以为消行必须要在中循环中使用,千方百计希望在将它塞入中循环里,而它恰恰是外循环的内容,所以你才会思维混乱,发生短路。”
“好像是怎么回事。”绍绍赞同,“就是说设计的时候要眼观六路,耳听八方,随时联系前后的内容。”
“对,不过也不能以偏概全,有时候该不考虑的就不要考虑。”看到绍绍皱起了眉头,木鸿飞连忙打住,换了一种说法:“其实就是考虑它应该处于哪个模块中,如果处于现在正设计的模块中,那么我们无论如何也要设计它,否则就不要理睬它。比如当前我们正在设计中循环,而消行处理却是外循环的工作,所以可以忽略之。但是如果我们正在设计外循环,那么就必须的设计消行。”
“似懂非懂,还是回头继续说中循环吧。”绍绍说。
“中循环执行三件事,分别是:调用内循环、方块下落一格和判断方块是否已经到达即中循环是否接受。”木鸿飞一边说一边画出了中循环的流程图。
“懂了。再讲解内循环。”有了流程图就是好,极大的增强了绍绍的理解能力。
“内循环就是在方块下落一格的时间之内,循环的接收玩家的输入然后做出相应的处理。比如玩家输入左方向键则方块向左移动一格,玩家输入旋转键则旋转方块等等。当时间到达时内循环结束。”木鸿飞停顿了一下,继续说:“其实内循环的时间长短,就体现了游戏的难度,时间越短则难度越大。”
(笔者注:以上为DOS环境下面向过程的设计方法,如果需要移植到Windows中,则要重新按照消息处理的规则进行转换。如果需要面向对象设计,则需另外分析。)
“本来呢我离懂了还差那么一点点,但是听你这么一说呢,我有懂了一点点。看来你还是有把刷子的!”绍绍开始表演木鸿飞。
“哪里,哪里,不要崇拜哥,哥只是传说,而且哥会骄傲的。呵呵,其实我的程序代码还没有写出来。”千穿万穿,马屁不穿,被朋友PMP,木鸿飞连忙假装谦虚。
“下次你就拿着政治书去上机,电脑老师一看,肯定会问的,木同学,现在是计算机课,不是政治课,虽然你爱党爱国爱人民,可也不能拿着政治书编程序啊。但是,谁也没有想到,你的政治书上居然有流程图,凭借这些图,你硬是编出了俄罗斯方块,多牛啊!到时候……”绍绍帮助木鸿飞陷入憧憬之中。
“打住,停!如果照你说的做,我是不可能编出俄罗斯方块的。”木鸿飞斩钉截铁的说道。
“Why?”绍绍很时髦的问道。
“我现在还是个新手,水平没有你想象的那么高,只靠流程图还编不了程序,必须先在纸上写出代码,然后再敲进去,否则大脑会短路的。”
初学者要先写代码再敲代码,这叫不打无准备之战,编代码时可以事半功倍,所谓磨刀不误砍柴工就是这个道理。只可惜道理很简单,人人都知道,但却不会去遵守,正如交通规则人人都知道却不是人人都遵守一样,很多编程初学者嫌麻烦,不愿意这么做。
木鸿飞曾经为大一学生上过C语言课程,课堂上布置了程序设计题。但上机操作时,常常有很多学生空手而来,打开计算机却不知道干些什么,磨蹭了半天最后选择扫雷。
有的学生不扫雷,他们直接编代码,但敲出来的源程序真的不堪入目,不是这里少的,就是那边缺些,绞尽脑汁也生产不了几行,铃声一响,再一响,一节课过去了,看来匆忙上阵是不行的。
有的学生则谨慎些,他们会拿上教材,照着上面的习题答案敲打,却又常常敲错了字母,编译报错时只能一行一行的核对,如果碰上印刷错误或者作者失误,教材中的源代码本来就是错误的,就只有干坐在座位上等老师来解决了,看来不劳而获也是不行的。
只有极个别的同学带着笔记本过来,流程图画得清清楚楚,源代码写得整整齐齐,一看就知道课后自己做了分析和设计。他们直奔主题,手指如舞,伴随着富有节奏感的键盘敲击上,一行行代码如舞动的精灵在电脑上翩翩起舞。若是输入错误,或者源代码存在错误,都能很快的修改。毕竟是自己设计的程序,理解起来比学习教材上的要深刻许多。
有人说:编程序之前还要先把代码写在纸上,你欧特曼了!如今的程序那个不是动辄几万行,上十万行代码,都写在纸上,太不现实了,误人子弟!没错,真正的编程都是在头脑中思考,在键盘上完成,很少将代码记录在案的。但是,能够做到这些的都是什么人,是真正的程序员!他们哪个不在代码的海洋中浸泡过,岂是你一个小小的初学者可以比拟的。
记得上数学课,每当学习到新东西时,数学老师都要求学生们把每一个计算步骤都列举出来,一个也不能少,只有当熟练之后才可以简化流程。学习计算机也一样,初学者多几个步骤,可以省去很多弯路。即使是达人与木鸿飞者,在编码之前,也要先做好设计分析,画出系统图,在某些复杂的模块,甚至还要画出详细流程图,比如编写链表和指针时,还需要画出链表模型图,万事俱备,然后才开始输入代码。
无准备,不编程!
上一篇 目录 下一篇